Home | History | Annotate | Download | only in mk
      1 #
      2 #  A Makefile with a collection of reusable functions.
      3 #
      4 #    Copyright (C) 2009, Cisco Systems Inc.
      5 #
      6 #    This program is free software; you can redistribute it and/or modify
      7 #    it under the terms of the GNU General Public License as published by
      8 #    the Free Software Foundation; either version 2 of the License, or
      9 #    (at your option) any later version.
     10 #
     11 #    This program is distributed in the hope that it will be useful,
     12 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
     13 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14 #    GNU General Public License for more details.
     15 #
     16 #    You should have received a copy of the GNU General Public License along
     17 #    with this program; if not, write to the Free Software Foundation, Inc.,
     18 #    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
     19 #
     20 # Ngie Cooper, July 2009
     21 #
     22 
     23 SQUOTE			:= '
     24 
     25 # ' # to keep colorized editors from going nuts
     26 
     27 MAKE_3_80_realpath	= $(shell $(top_srcdir)/scripts/realpath.sh '$(subst $(SQUOTE),\\$(SQUOTE),$(1))')
     28 
     29 MAKE_3_80_abspath	= $(shell $(top_srcdir)/scripts/abspath.sh '$(subst $(SQUOTE),\\$(SQUOTE),$(1))')
     30 
     31 #
     32 # NOTE (garrcoop):
     33 #
     34 # The following functions are (sometimes) split into 3.80 and 3.81+
     35 # counterparts, and not conditionalized inside of the define(s) to work around
     36 # an issue with how make 3.80 evaluates defines.
     37 #
     38 # SO DO NOT INTERNALIZE CONDITIONALS IN DEFINES OR YOU WILL BREAK MAKE 3.80!
     39 #
     40 
     41 #
     42 # Generate an install rule which also creates the install directory if needed
     43 # to avoid unnecessary bourne shell based for-loops and install errors, as well
     44 # as adhoc install rules.
     45 #
     46 # 1 -> Target basename.
     47 # 2 -> Source directory.
     48 # 3 -> Destination directory.
     49 #
     50 ifdef MAKE_3_80_COMPAT
     51 define generate_install_rule
     52 
     53 INSTALL_FILES		+= $$(call MAKE_3_80_abspath,$$(DESTDIR)/$(3)/$(1))
     54 
     55 $$(call MAKE_3_80_abspath,$$(DESTDIR)/$(3)/$(1)): \
     56     $$(call MAKE_3_80_abspath,$$(dir $$(DESTDIR)/$(3)/$(1)))
     57 	install -m $$(INSTALL_MODE) "$(2)/$(1)" "$$@"
     58 endef
     59 else # not MAKE_3_80_COMPAT
     60 define generate_install_rule
     61 
     62 INSTALL_FILES		+= $$(abspath $$(DESTDIR)/$(3)/$(1))
     63 
     64 $$(abspath $$(DESTDIR)/$(3)/$(1)): \
     65     $$(abspath $$(dir $$(DESTDIR)/$(3)/$(1)))
     66 	install -m $$(INSTALL_MODE) "$(2)/$(1)" "$$@"
     67 endef
     68 endif # END MAKE_3_80_COMPAT
     69 
     70 #
     71 # Set SUBDIRS to the subdirectories where Makefiles were found.
     72 #
     73 define get_make_dirs
     74 SUBDIRS	?= $$(subst $$(abs_srcdir)/,,$$(patsubst %/Makefile,%,$$(wildcard $$(abs_srcdir)/*/Makefile)))
     75 SUBDIRS	:= $$(filter-out $$(FILTER_OUT_DIRS),$$(SUBDIRS))
     76 endef
     77