| # |
| # 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. |
| # |
| # Garrett 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 |
| |
| # 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 |