1 ### The build commands and verbosity
5 INFO_COLOR = $(shell tput setaf 5)
6 CC_COLOR = $(shell tput setaf 6)
7 LD_COLOR = $(shell tput setaf 2)
8 PO_COLOR = $(shell tput setaf 6)
9 LINK_COLOR = $(shell tput bold;tput setaf 4)
10 INSTALL_COLOR = $(shell tput setaf 3)
11 END_COLOR = $(shell tput sgr0)
14 # sparse is architecture-neutral, which means that we need to tell it
15 # explicitly what architecture to check for. Fix this up for yours..
16 SPARSE_FLAGS = -D__BIG_ENDIAN__ -D__powerpc__
19 #############################################################################
22 # If we are verbose, we will show the "real" cmds instead of
23 # their quiet versions (which are used in the non-verbose mode).
24 # Inspired by the Linux kernel build system.
33 # Show the command (quiet or non-quiet version based on the assignment
34 # just above) and then execute it.
35 ncmd = $(if $($(quiet)cmd_$(1)),echo $($(quiet)cmd_$(1)) &&) $(cmd_$(1))
36 cmd = @$(if $($(quiet)cmd_$(1)),echo $($(quiet)cmd_$(1)) &&) $(cmd_$(1))
37 mcmd = @$(if $($(mquiet)cmd_$(1)),echo $($(mquiet)cmd_$(1)) &&) $(cmd_$(1))
38 ecmd = @$(if $($(mquiet)cmd_$(1)),printf "%-38s " $($(mquiet)cmd_$(1)) &&) $(cmd_$(1))
40 quiet_cmd_compile = ' [$(CC_COLOR)CC$(END_COLOR)] $(RELPATH)$@'
41 masq_cmd_compile = $(COMPILE) -o $(@) -c $< $(2)
42 cmd_compile = $(COMPILE) -o $(@) -Wp,-MD,.deps/$(*F).pp -c $< $(2)
44 # Rule to compile a set of .o files into one .o file
45 quiet_cmd_ld_objs = " [$(LD_COLOR)LD$(END_COLOR)] $(RELPATH)$@"
46 cmd_ld_objs = $(LD) -r -o $@ $(filter $(OBJS), $^) \
47 $(foreach subdir,$(sort $(filter-out src,$(SUBDIRS))), \
48 `test -e $(subdir)/$(LIB_O_NAME) && echo $(subdir)/$(LIB_O_NAME)`)
50 quiet_cmd_link = ' [$(LINK_COLOR)LINK$(END_COLOR)] $(RELPATH)$@'
51 cmd_link = $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(2) $(LIBS)
53 quiet_cmd_sparse = ' [SPARSE] $(RELPATH)$(2)'
54 cmd_sparse = $(SPARSE) $(DEFS) $(INCLUDES) $(AM_CFLAGS) $(CFLAGS) $(SPARSE_FLAGS) $(2)
57 quiet_cmd_recmake = "[$(INFO_COLOR)MAKE $(3)$(END_COLOR)] $(RELPATH)$(2)"
58 cmd_recmake = $(MAKE) -C $(2) $(3)
60 quiet_cmd_installdata = " [$(INSTALL_COLOR)INSTALL$(END_COLOR)] $(RELPATH)$(2) -> $(3)"
61 cmd_installdata = $(INSTALL_DATA) $(2) $(3)
63 quiet_cmd_installprog = " [$(INSTALL_COLOR)INSTALL$(END_COLOR)] $(RELPATH)$(2) -> $(3)"
64 cmd_installprog = $(INSTALL_PROGRAM) $(2) $(3)
67 #############################################################################
68 # Special handling of conditional variables
70 SUBDIRS += $(SUBDIRS-yes)
73 ALTDIRS = $(SUBDIRS-no) $(SUBDIRS-)
74 ALTOBJS = $(OBJS-no) $(OBJS-)
76 ifneq ($(findstring cleanall,$(MAKECMDGOALS)),)
80 ifneq ($(findstring init,$(MAKECMDGOALS)),)
83 SRC = $(shell cd $(top_srcdir) && pwd)
93 #############################################################################
94 # Internal build rules
96 # All files in $(OBJS) and any $(subdir)/lib.o are linked into lib.o
98 $(sort $(filter-out $(LIB_O_NAME),$(OBJS))) \
99 $(foreach subdir,$(sort $(SUBDIRS)),$(wildcard $(subdir)/$(LIB_O_NAME)))
101 $(LIB_O_NAME): $(LIB_O_DEPS)
104 DEP_FILES_1 = $(foreach src,$(OBJS),.deps/$(src))
105 DEP_FILES = $(DEP_FILES_1:%.o=%.P)
106 DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
108 ifneq ($(strip $(OBJS)),)
109 -include $(DEP_FILES)
110 OBJS += $(LIB_O_NAME)
115 @-if test -e .deps/$(*F).pp; then \
116 cp .deps/$(*F).pp .deps/$(*F).P; \
117 tr ' ' '\012' < .deps/$(*F).pp \
118 | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
123 CLEAN += $(PROG) $(OBJS)
126 #############################################################################
127 # The main default rules
129 all-default: $(OBJS) $(PROGS) $(MAN1) $(MAN5) .vimrc
131 # Ensure that Makefiles in subdirs are created before we recursive into them
132 init-recursive: init-default
135 @$(foreach subdir,$(sort $(SUBDIRS)), \
136 $(MKINSTALLDIRS) $(subdir) >/dev/null; \
137 test -e "$(subdir)/Makefile" \
138 || echo 'include $(SRC)/$(RELPATH)/$(subdir)/Makefile' > $(subdir)/Makefile;)
140 clean-default cleanall-default:
141 @-test -z "$(CLEAN)" || $(RM) $(CLEAN)
145 @$(foreach file, $(wildcard *.c), \
146 $(call ncmd,sparse,$(file));)
149 install-default: all-default
151 @$(MKINSTALLDIRS) $(DESTDIR)$(bindir)
152 @$(foreach file,$(PROGS), \
153 $(call ncmd,installprog,$(file),$(DESTDIR)$(bindir));)
156 @$(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man1
157 @$(foreach file,$(MAN1), \
158 $(call ncmd,installdata,$(file),$(DESTDIR)$(mandir)/man1);)
161 @$(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man5
162 @$(foreach file,$(MAN5), \
163 $(call ncmd,installdata,$(file),$(DESTDIR)$(mandir)/man5);)
166 .vimrc: $(top_srcdir)/Makefile.lib
167 @{ echo ':set runtimepath+=.'; \
168 echo ':runtime $(top_srcdir)/config/vimrc'; \
171 ##############################################################################
172 # Auto-testing infrastructure
177 TESTDEPS-$(CONFIG_DEBUG) += $(top_builddir)/src/util/memdebug.o
178 TESTDEPS += $(TESTDEPS-yes)
180 TESTS = $(wildcard $(srcdir)test-*)
182 $(TEST_PROGS): $(TESTDEPS)
183 $(call cmd,link,$@.o)
185 # We cannot use $$@.o in the rule above so ensure that all test programs are
186 # built before linking.
187 $(TESTS): $(addsuffix .o,$(TEST_PROGS)) $(TEST_PROGS)
188 @echo "*** $(notdir $@) ***"; \
189 $(call shellquote,$(SHELL)) $@ $(TEST_OPTS)
191 test-default: $(TESTS)
196 CLEAN += $(TEST_PROGS) $(addsuffix .o,$(TEST_PROGS))
197 clean-default: clean-test
204 #############################################################################
205 # Basic recursion and dependencies setup
207 RULES = all install clean cleanall init check test
209 RULES_LOCAL = $(addsuffix -local,$(RULES))
210 RULES_REC = $(addsuffix -recursive,$(RULES))
212 .PHONY: $(RULES) $(RULES_LOCAL) $(RULES_REC) $(addsuffix -default,$(RULES))
214 # The -recursive rules decend all subdirs.
216 @$(foreach subdir,$(sort $(SUBDIRS)), \
217 $(call ncmd,recmake,$(subdir),$(subst -recursive,,$@)) || exit 1;)
223 rule_deps = $(1)-recursive $(1)-default $(1)-local
224 all: $(call rule_deps,all)
225 install: $(call rule_deps,install)
226 clean: $(call rule_deps,clean)
227 cleanall: $(call rule_deps,cleanall)
228 init: $(call rule_deps,init)
229 check: $(call rule_deps,check)
230 test: $(call rule_deps,test)
232 #############################################################################
235 # Tell versions [3.59,3.63) of GNU make to not export all variables.
236 # Otherwise a system limit (for SysV at least) may be exceeded.
240 # Result of this needs to be placed inside ''
241 # XXX: Placed here because Vim cannot highlight things right afterwards
242 shq = $(subst ','\'',$(1))
243 # This has surrounding ''
244 shellquote = '$(call shq,$(1))'