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