| ### Remove GNU make implicit rules |
| |
| ## This speeds things up since we don't need to look for and stat() a |
| ## "foo.c,v" every time a rule referring to "foo.c" is in play. See |
| ## "make -p -f/dev/null | grep ^%::'". |
| %:: %,v |
| %:: RCS/%,v |
| %:: RCS/% |
| %:: s.% |
| %:: SCCS/s.% |
| |
| ## Likewise delete default $(SUFFIXES). See: |
| ## |
| ## info make --index-search=.SUFFIXES |
| .SUFFIXES: |
| |
| ### Flags affecting all rules |
| |
| # A GNU make extension since gmake 3.72 (released in late 1994) to |
| # remove the target of rules if commands in those rules fail. The |
| # default is to only do that if make itself receives a signal. Affects |
| # all targets, see: |
| # |
| # info make --index-search=.DELETE_ON_ERROR |
| .DELETE_ON_ERROR: |
| |
| ### Global variables |
| |
| ## comma, empty, space: handy variables as these tokens are either |
| ## special or can be hard to spot among other Makefile syntax. |
| comma := , |
| empty := |
| space := $(empty) $(empty) |
| |
| ### Quieting |
| ## common |
| QUIET_SUBDIR0 = +$(MAKE) -C # space to separate -C and subdir |
| QUIET_SUBDIR1 = |
| |
| ifneq ($(findstring w,$(firstword -$(MAKEFLAGS))),w) |
| PRINT_DIR = --no-print-directory |
| else # "make -w" |
| NO_SUBDIR = : |
| endif |
| |
| ifneq ($(findstring s,$(firstword -$(MAKEFLAGS))),s) |
| ifndef V |
| ## common |
| QUIET_SUBDIR0 = +@subdir= |
| QUIET_SUBDIR1 = ;$(NO_SUBDIR) echo ' ' SUBDIR $$subdir; \ |
| $(MAKE) $(PRINT_DIR) -C $$subdir |
| |
| QUIET = @ |
| QUIET_GEN = @echo ' ' GEN $@; |
| |
| QUIET_MKDIR_P_PARENT = @echo ' ' MKDIR -p $(@D); |
| |
| ## Used in "Makefile" |
| QUIET_CC = @echo ' ' CC $@; |
| QUIET_AR = @echo ' ' AR $@; |
| QUIET_LINK = @echo ' ' LINK $@; |
| QUIET_BUILT_IN = @echo ' ' BUILTIN $@; |
| QUIET_CP = @echo ' ' CP $< $@; |
| QUIET_LNCP = @echo ' ' LN/CP $@; |
| QUIET_XGETTEXT = @echo ' ' XGETTEXT $@; |
| QUIET_MSGINIT = @echo ' ' MSGINIT $@; |
| QUIET_MSGFMT = @echo ' ' MSGFMT $@; |
| QUIET_MSGMERGE = @echo ' ' MSGMERGE $@; |
| QUIET_GCOV = @echo ' ' GCOV $@; |
| QUIET_SP = @echo ' ' SP $<; |
| QUIET_HDR = @echo ' ' HDR $(<:hcc=h); |
| QUIET_RC = @echo ' ' RC $@; |
| |
| ## Used in "Makefile": SPATCH |
| QUIET_SPATCH = @echo ' ' SPATCH $< \>$@; |
| QUIET_SPATCH_TEST = @echo ' ' SPATCH TEST $(@:.build/%=%); |
| QUIET_SPATCH_CAT = @echo ' ' SPATCH CAT $(@:%.patch=%.d/)\*\*.patch \>$@; |
| |
| ## Used in "Documentation/Makefile" |
| QUIET_ASCIIDOC = @echo ' ' ASCIIDOC $@; |
| QUIET_XMLTO = @echo ' ' XMLTO $@; |
| QUIET_DB2TEXI = @echo ' ' DB2TEXI $@; |
| QUIET_MAKEINFO = @echo ' ' MAKEINFO $@; |
| QUIET_DBLATEX = @echo ' ' DBLATEX $@; |
| QUIET_XSLTPROC = @echo ' ' XSLTPROC $@; |
| QUIET_GEN = @echo ' ' GEN $@; |
| QUIET_STDERR = 2> /dev/null |
| |
| QUIET_LINT_GITLINK = @echo ' ' LINT GITLINK $<; |
| QUIET_LINT_MANSEC = @echo ' ' LINT MAN SEC $<; |
| QUIET_LINT_MANEND = @echo ' ' LINT MAN END $<; |
| |
| export V |
| endif |
| endif |
| |
| ### Templates |
| |
| ## mkdir_p_parent: lazily "mkdir -p" the path needed for a $@ |
| ## file. Uses $(wildcard) to avoid the "mkdir -p" if it's not |
| ## needed. |
| ## |
| ## Is racy, but in a good way; we might redundantly (and safely) |
| ## "mkdir -p" when running in parallel, but won't need to exhaustively create |
| ## individual rules for "a" -> "prefix" -> "dir" -> "file" if given a |
| ## "a/prefix/dir/file". This can instead be inserted at the start of |
| ## the "a/prefix/dir/file" rule. |
| define mkdir_p_parent_template |
| $(if $(wildcard $(@D)),,$(QUIET_MKDIR_P_PARENT)$(shell mkdir -p $(@D))) |
| endef |
| |
| ## Getting sick of writing -L$(SOMELIBDIR) $(CC_LD_DYNPATH)$(SOMELIBDIR)? |
| ## Write $(call libpath_template,$(SOMELIBDIR)) instead, perhaps? |
| ## With CC_LD_DYNPATH set to either an empty string or to "-L", the |
| ## the directory is not shown the second time. |
| define libpath_template |
| -L$(1) $(if $(filter-out -L,$(CC_LD_DYNPATH)),$(CC_LD_DYNPATH)$(1)) |
| endef |