Browse Source
Makefile refactoring with a bit of suffixes rule stripping to optimize the runtime overhead. * ab/make-optim-noop: Makefiles: add and use wildcard "mkdir -p" template Makefile: add "$(QUIET)" boilerplate to shared.mak Makefile: move $(comma), $(empty) and $(space) to shared.mak Makefile: move ".SUFFIXES" rule to shared.mak Makefile: define $(LIB_H) in terms of $(FIND_SOURCE_FILES) Makefile: disable GNU make built-in wildcard rules Makefiles: add "shared.mak", move ".DELETE_ON_ERROR" to it scalar Makefile: use "The default target of..." patternmaint
Junio C Hamano
3 years ago
10 changed files with 165 additions and 160 deletions
@ -0,0 +1,103 @@
@@ -0,0 +1,103 @@
|
||||
### 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,$(MAKEFLAGS)),w) |
||||
PRINT_DIR = --no-print-directory |
||||
else # "make -w" |
||||
NO_SUBDIR = : |
||||
endif |
||||
|
||||
ifneq ($(findstring s,$(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 $(wspfx_SQ) MKDIR -p $(@D); |
||||
|
||||
## Used in "Makefile" |
||||
QUIET_CC = @echo ' ' CC $@; |
||||
QUIET_AR = @echo ' ' AR $@; |
||||
QUIET_LINK = @echo ' ' LINK $@; |
||||
QUIET_BUILT_IN = @echo ' ' BUILTIN $@; |
||||
QUIET_LNCP = @echo ' ' LN/CP $@; |
||||
QUIET_XGETTEXT = @echo ' ' XGETTEXT $@; |
||||
QUIET_MSGFMT = @echo ' ' MSGFMT $@; |
||||
QUIET_GCOV = @echo ' ' GCOV $@; |
||||
QUIET_SP = @echo ' ' SP $<; |
||||
QUIET_HDR = @echo ' ' HDR $(<:hcc=h); |
||||
QUIET_RC = @echo ' ' RC $@; |
||||
QUIET_SPATCH = @echo ' ' SPATCH $<; |
||||
|
||||
## 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 |
Loading…
Reference in new issue