You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
4.7 KiB
156 lines
4.7 KiB
#
|
|
# Make pre-include environment Makefile.
|
|
#
|
|
# Copyright (C) 2009, Cisco Systems Inc.
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License along
|
|
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
#
|
|
# Ngie Cooper, September 2009
|
|
#
|
|
# This Makefile must be included first. NO IF'S, AND'S, OR BUT'S.
|
|
#
|
|
# This sets the stage for all operations required within Makefiles.
|
|
#
|
|
|
|
ifndef ENV_PRE_LOADED
|
|
ENV_PRE_LOADED = 1
|
|
|
|
# "out-of-build-tree" build.
|
|
BUILD_TREE_BUILDDIR_INSTALL := 1
|
|
# "in-srcdir" build / install.
|
|
BUILD_TREE_SRCDIR_INSTALL := 2
|
|
# "in-srcdir" build, non-srcdir install.
|
|
BUILD_TREE_NONSRCDIR_INSTALL := 3
|
|
# configure not run.
|
|
BUILD_TREE_UNCONFIGURED := 4
|
|
|
|
ifndef MAKE_VERSION_CHECK
|
|
export MAKE_VERSION_CHECK = 1
|
|
ifneq ($(firstword $(sort 3.80 $(MAKE_VERSION))),3.80)
|
|
$(error Your version of make $(MAKE_VERSION) is too old. Upgrade to at least 3.80; 3.81+ is preferred)
|
|
else
|
|
ifneq ($(filter 3.80%,$(MAKE_VERSION)),)
|
|
export MAKE_3_80_COMPAT := 1
|
|
endif # make 3.80?
|
|
endif # At least make 3.80?
|
|
endif # MAKE_VERSION_CHECK
|
|
|
|
# Get the absolute path for the source directory.
|
|
top_srcdir ?= $(error You must define top_srcdir before including this file)
|
|
|
|
include $(top_srcdir)/include/mk/functions.mk
|
|
|
|
# Where's the root source directory?
|
|
ifdef MAKE_3_80_COMPAT
|
|
abs_top_srcdir := $(call MAKE_3_80_abspath,$(top_srcdir))
|
|
else
|
|
abs_top_srcdir := $(abspath $(top_srcdir))
|
|
endif
|
|
|
|
#
|
|
# Where's the root object directory?
|
|
#
|
|
# Just in case it's not specified, set it to the top srcdir (because the user
|
|
# must not have wanted out of build tree support)...
|
|
#
|
|
top_builddir ?= $(top_srcdir)
|
|
|
|
# We need the absolute path...
|
|
ifdef MAKE_3_80_COMPAT
|
|
abs_top_builddir := $(call MAKE_3_80_abspath,$(top_builddir))
|
|
else
|
|
abs_top_builddir := $(abspath $(top_builddir))
|
|
endif
|
|
|
|
# Where's the root object directory?
|
|
builddir := .
|
|
|
|
abs_builddir := $(CURDIR)
|
|
|
|
cwd_rel_from_top := $(subst $(abs_top_builddir),,$(abs_builddir))
|
|
|
|
# Where's the source located at? Squish all of the / away by using abspath...
|
|
ifdef MAKE_3_80_COMPAT
|
|
abs_srcdir := $(call MAKE_3_80_abspath,$(abs_top_srcdir)/$(cwd_rel_from_top))
|
|
else
|
|
abs_srcdir := $(abspath $(abs_top_srcdir)/$(cwd_rel_from_top))
|
|
endif
|
|
|
|
srcdir := $(strip $(subst $(abs_top_srcdir)/,,$(abs_srcdir)))
|
|
|
|
ifeq ($(srcdir),)
|
|
srcdir := .
|
|
endif
|
|
|
|
# If config.mk or features.mk doesn't exist it's not an error for some targets
|
|
# which are filtered below (e.g. clean). However these config files may be
|
|
# needed for those targets (eg. the open posix testsuite is not cleaned even if
|
|
# it's enabled by configure) thus it would be wise to do silent inclusion.
|
|
ifneq ("$(wildcard $(abs_top_builddir)/include/mk/config.mk)","")
|
|
include $(abs_top_builddir)/include/mk/config.mk
|
|
endif
|
|
ifneq ("$(wildcard $(abs_top_builddir)/include/mk/features.mk)","")
|
|
include $(abs_top_builddir)/include/mk/features.mk
|
|
endif
|
|
|
|
# autotools, *clean, and help don't require config.mk, features.mk, etc...
|
|
ifeq ($(filter autotools %clean .gitignore gitignore.% help,$(MAKECMDGOALS)),)
|
|
|
|
include $(abs_top_builddir)/include/mk/config.mk
|
|
include $(abs_top_builddir)/include/mk/features.mk
|
|
|
|
# START out-of-build-tree check.
|
|
ifneq ($(abs_builddir),$(abs_srcdir))
|
|
BUILD_TREE_STATE := $(BUILD_TREE_BUILDDIR_INSTALL)
|
|
else
|
|
# Else, not out of build tree..
|
|
|
|
# START srcdir build-tree install checks
|
|
ifeq ($(strip $(DESTDIR)$(prefix)),)
|
|
BUILD_TREE_STATE := $(BUILD_TREE_SRCDIR_INSTALL)
|
|
else # Empty $(DESTDIR)$(prefix)
|
|
ifeq ($(abs_top_srcdir),$(prefix))
|
|
BUILD_TREE_STATE := $(BUILD_TREE_SRCDIR_INSTALL)
|
|
endif
|
|
# END srcdir build-tree install checks
|
|
endif
|
|
# END out-of-build-tree check.
|
|
endif
|
|
|
|
# Is the build-tree configured yet?
|
|
ifeq ($(BUILD_TREE_STATE),)
|
|
ifneq ($(wildcard $(abs_top_builddir)/include/mk/config.mk),)
|
|
BUILD_TREE_STATE := $(BUILD_TREE_NONSRCDIR_INSTALL)
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(MAKE_3_80_COMPAT),1)
|
|
# Trick make 3.80 into thinking that the default goal is all.
|
|
.PHONY: default
|
|
default: all
|
|
else
|
|
.DEFAULT_GOAL := all
|
|
endif
|
|
|
|
endif # END autotools, *clean...
|
|
|
|
BUILD_TREE_STATE ?= $(BUILD_TREE_UNCONFIGURED)
|
|
|
|
# We can piece together where we're located in the source and object trees with
|
|
# just these two vars and $(CURDIR).
|
|
export abs_top_srcdir abs_top_builddir BUILD_TREE_STATE
|
|
|
|
endif
|