| 1 | ### Remove GNU make implicit rules |
| 2 | |
| 3 | ## This speeds things up since we don't need to look for and stat() a |
| 4 | ## "foo.c,v" every time a rule referring to "foo.c" is in play. See |
| 5 | ## "make -p -f/dev/null | grep ^%::'". |
| 6 | %:: %,v |
| 7 | %:: RCS/%,v |
| 8 | %:: RCS/% |
| 9 | %:: s.% |
| 10 | %:: SCCS/s.% |
| 11 | |
| 12 | ## Likewise delete default $(SUFFIXES). See: |
| 13 | ## |
| 14 | ## info make --index-search=.SUFFIXES |
| 15 | .SUFFIXES: |
| 16 | |
| 17 | ### Flags affecting all rules |
| 18 | |
| 19 | # A GNU make extension since gmake 3.72 (released in late 1994) to |
| 20 | # remove the target of rules if commands in those rules fail. The |
| 21 | # default is to only do that if make itself receives a signal. Affects |
| 22 | # all targets, see: |
| 23 | # |
| 24 | # info make --index-search=.DELETE_ON_ERROR |
| 25 | .DELETE_ON_ERROR: |
| 26 | |
| 27 | ### Global variables |
| 28 | |
| 29 | ## comma, empty, space: handy variables as these tokens are either |
| 30 | ## special or can be hard to spot among other Makefile syntax. |
| 31 | comma := , |
| 32 | empty := |
| 33 | space := $(empty) $(empty) |
| 34 | |
| 35 | ### Quieting |
| 36 | ## common |
| 37 | QUIET_SUBDIR0 = +$(MAKE) -C # space to separate -C and subdir |
| 38 | QUIET_SUBDIR1 = |
| 39 | |
| 40 | ifneq ($(findstring w,$(firstword -$(MAKEFLAGS))),w) |
| 41 | PRINT_DIR = --no-print-directory |
| 42 | else # "make -w" |
| 43 | NO_SUBDIR = : |
| 44 | endif |
| 45 | |
| 46 | ifneq ($(findstring s,$(firstword -$(MAKEFLAGS))),s) |
| 47 | ifndef V |
| 48 | ## common |
| 49 | QUIET_SUBDIR0 = +@subdir= |
| 50 | QUIET_SUBDIR1 = ;$(NO_SUBDIR) echo ' ' SUBDIR $$subdir; \ |
| 51 | $(MAKE) $(PRINT_DIR) -C $$subdir |
| 52 | |
| 53 | QUIET = @ |
| 54 | QUIET_GEN = @echo ' ' GEN $@; |
| 55 | |
| 56 | QUIET_MKDIR_P_PARENT = @echo ' ' MKDIR -p $(@D); |
| 57 | |
| 58 | ## Used in "Makefile" |
| 59 | QUIET_CARGO = @echo ' ' CARGO $@; |
| 60 | QUIET_CC = @echo ' ' CC $@; |
| 61 | QUIET_AR = @echo ' ' AR $@; |
| 62 | QUIET_LINK = @echo ' ' LINK $@; |
| 63 | QUIET_BUILT_IN = @echo ' ' BUILTIN $@; |
| 64 | QUIET_CP = @echo ' ' CP $< $@; |
| 65 | QUIET_LNCP = @echo ' ' LN/CP $@; |
| 66 | QUIET_XGETTEXT = @echo ' ' XGETTEXT $@; |
| 67 | QUIET_MSGINIT = @echo ' ' MSGINIT $@; |
| 68 | QUIET_MSGFMT = @echo ' ' MSGFMT $@; |
| 69 | QUIET_MSGMERGE = @echo ' ' MSGMERGE $@; |
| 70 | QUIET_GCOV = @echo ' ' GCOV $@; |
| 71 | QUIET_SP = @echo ' ' SP $<; |
| 72 | QUIET_HDR = @echo ' ' HDR $(<:hcc=h); |
| 73 | QUIET_RC = @echo ' ' RC $@; |
| 74 | |
| 75 | ## Used in "Makefile": SPATCH |
| 76 | QUIET_SPATCH = @echo ' ' SPATCH $< \>$@; |
| 77 | QUIET_SPATCH_TEST = @echo ' ' SPATCH TEST $(@:.build/%=%); |
| 78 | QUIET_SPATCH_CAT = @echo ' ' SPATCH CAT $(@:%.patch=%.d/)\*\*.patch \>$@; |
| 79 | |
| 80 | ## Used in "Documentation/Makefile" |
| 81 | QUIET_ASCIIDOC = @echo ' ' ASCIIDOC $@; |
| 82 | QUIET_XMLTO = @echo ' ' XMLTO $@; |
| 83 | QUIET_DB2TEXI = @echo ' ' DB2TEXI $@; |
| 84 | QUIET_MAKEINFO = @echo ' ' MAKEINFO $@; |
| 85 | QUIET_DBLATEX = @echo ' ' DBLATEX $@; |
| 86 | QUIET_XSLTPROC = @echo ' ' XSLTPROC $@; |
| 87 | QUIET_GEN = @echo ' ' GEN $@; |
| 88 | QUIET_STDERR = 2> /dev/null |
| 89 | |
| 90 | QUIET_LINT_GITLINK = @echo ' ' LINT GITLINK $<; |
| 91 | QUIET_LINT_MANSEC = @echo ' ' LINT MAN SEC $<; |
| 92 | QUIET_LINT_DELIMSEC = @echo ' ' LINT DEL SEC $<; |
| 93 | QUIET_LINT_DOCSTYLE = @echo ' ' LINT DOCSTYLE $<; |
| 94 | QUIET_LINT_MANEND = @echo ' ' LINT MAN END $<; |
| 95 | |
| 96 | export V |
| 97 | endif |
| 98 | endif |
| 99 | |
| 100 | ### Templates |
| 101 | |
| 102 | ## mkdir_p_parent: lazily "mkdir -p" the path needed for a $@ |
| 103 | ## file. Uses $(wildcard) to avoid the "mkdir -p" if it's not |
| 104 | ## needed. |
| 105 | ## |
| 106 | ## Is racy, but in a good way; we might redundantly (and safely) |
| 107 | ## "mkdir -p" when running in parallel, but won't need to exhaustively create |
| 108 | ## individual rules for "a" -> "prefix" -> "dir" -> "file" if given a |
| 109 | ## "a/prefix/dir/file". This can instead be inserted at the start of |
| 110 | ## the "a/prefix/dir/file" rule. |
| 111 | define mkdir_p_parent_template |
| 112 | $(if $(wildcard $(@D)),,$(QUIET_MKDIR_P_PARENT)$(shell mkdir -p $(@D))) |
| 113 | endef |
| 114 | |
| 115 | ## Getting sick of writing -L$(SOMELIBDIR) $(CC_LD_DYNPATH)$(SOMELIBDIR)? |
| 116 | ## Write $(call libpath_template,$(SOMELIBDIR)) instead, perhaps? |
| 117 | ## With CC_LD_DYNPATH set to either an empty string or to "-L", the |
| 118 | ## the directory is not shown the second time. |
| 119 | define libpath_template |
| 120 | -L$(1) $(if $(filter-out -L,$(CC_LD_DYNPATH)),$(CC_LD_DYNPATH)$(1)) |
| 121 | endef |
| 122 | |
| 123 | # Populate build information into a file via GIT-VERSION-GEN. Requires the |
| 124 | # absolute path to the root source directory as well as input and output files |
| 125 | # as arguments, in that order. |
| 126 | define version_gen |
| 127 | GIT_BUILT_FROM_COMMIT="$(GIT_BUILT_FROM_COMMIT)" \ |
| 128 | GIT_DATE="$(GIT_DATE)" \ |
| 129 | GIT_USER_AGENT="$(GIT_USER_AGENT)" \ |
| 130 | GIT_VERSION="$(GIT_VERSION_OVERRIDE)" \ |
| 131 | $(SHELL_PATH) "$(1)/GIT-VERSION-GEN" "$(1)" "$(2)" "$(3)" |
| 132 | endef |