| # |
| # A Makefile with a collection of reusable functions. |
| # |
| # 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, July 2009 |
| # |
| |
| SQUOTE := ' |
| |
| # ' # to keep colorized editors from going nuts |
| |
| MAKE_3_80_realpath = $(shell $(top_srcdir)/scripts/realpath.sh '$(subst $(SQUOTE),\\$(SQUOTE),$(1))') |
| |
| MAKE_3_80_abspath = $(shell $(top_srcdir)/scripts/abspath.sh '$(subst $(SQUOTE),\\$(SQUOTE),$(1))') |
| |
| # |
| # NOTE (garrcoop): |
| # |
| # The following functions are (sometimes) split into 3.80 and 3.81+ |
| # counterparts, and not conditionalized inside of the define(s) to work around |
| # an issue with how make 3.80 evaluates defines. |
| # |
| # SO DO NOT INTERNALIZE CONDITIONALS IN DEFINES OR YOU WILL BREAK MAKE 3.80! |
| # |
| |
| # |
| # Generate an install rule which also creates the install directory if needed |
| # to avoid unnecessary bourne shell based for-loops and install errors, as well |
| # as adhoc install rules. |
| # |
| # 1 -> Target basename. |
| # 2 -> Source directory. |
| # 3 -> Destination directory. |
| # |
| ifdef MAKE_3_80_COMPAT |
| define generate_install_rule |
| |
| INSTALL_FILES += $$(call MAKE_3_80_abspath,$$(DESTDIR)/$(3)/$(1)) |
| |
| $$(call MAKE_3_80_abspath,$$(DESTDIR)/$(3)/$(1)): \ |
| $$(call MAKE_3_80_abspath,$$(dir $$(DESTDIR)/$(3)/$(1))) |
| install -m $$(INSTALL_MODE) "$(2)/$(1)" "$$@" |
| endef |
| else # not MAKE_3_80_COMPAT |
| define generate_install_rule |
| |
| INSTALL_FILES += $$(abspath $$(DESTDIR)/$(3)/$(1)) |
| |
| $$(abspath $$(DESTDIR)/$(3)/$(1)): \ |
| $$(abspath $$(dir $$(DESTDIR)/$(3)/$(1))) |
| install -m $$(INSTALL_MODE) "$(2)/$(1)" "$$@" |
| endef |
| endif # END MAKE_3_80_COMPAT |
| |
| # |
| # Set SUBDIRS to the subdirectories where Makefiles were found. |
| # |
| define get_make_dirs |
| SUBDIRS ?= $$(subst $$(abs_srcdir)/,,$$(patsubst %/Makefile,%,$$(wildcard $$(abs_srcdir)/*/Makefile))) |
| SUBDIRS := $$(filter-out $$(FILTER_OUT_DIRS),$$(SUBDIRS)) |
| endef |