4 # Use this file with make to compile and install Yoink.
6 # This makefile supports these targets:
7 # all, install, clean, cleandist, run, debug
9 # This build system incorporates the ideas written by Emile van Bergen:
10 # http://www.xs4all.nl/~evbergen/nonrecursive-make.html
13 # Set this to `yes' to echo each build command in full.
18 # Include the configuration file, config.mk.
23 have_config := $(wildcard config.mk)
24 ifneq ($(strip $(have_config)),)
28 $(error You must run the configure script before you can make anything)
33 # Declare the default targets and implicit rules.
40 .SUFFIXES: .a .c .cc .cpp .in .o .rc
44 # Define some useful functions.
47 add_exe_suffix = $(addsuffix $(EXEEXT),$1)
48 remove_silencer = $(1:@%=%)
52 # Include the subdirectories--order is not important.
56 include $(dir)/rules.mk
59 include $(dir)/rules.mk
62 include $(dir)/rules.mk
66 # Define some common rules.
69 CC_WRAPPER = ./build/compile.sh $(CC)
70 CXX_WRAPPER = ./build/compile.sh $(CXX)
72 COMMAND_CC = $(CC_WRAPPER) $(CFLAGS) $(CF_TGT) -o $@ -c $<
73 COMMAND_CXX = $(CXX_WRAPPER) $(CXXFLAGS) $(CF_TGT) -o $@ -c $<
74 COMMAND_LD = $(CC) $(LDFLAGS) $(LF_TGT) -o $@ $^ $(LL_TGT) $(LIBS)
75 COMMAND_LDX = $(CXX) $(LDFLAGS) $(LF_TGT) -o $@ $^ $(LL_TGT) $(LIBS)
76 COMMAND_CCLD = $(CC_WRAPPER) $(CFLAGS) $(CF_TGT) $(LDFLAGS) $(LF_TGT) -o $@ $< $(LL_TGT) $(LIBS)
77 COMMAND_CXXLD = $(CXX_WRAPPER) $(CXXFLAGS) $(CF_TGT) $(LDFLAGS) $(LF_TGT) -o $@ $< $(LL_TGT) $(LIBS)
78 COMMAND_AR = $(AR) rcs $@ $^; $(RANLIB) $@
79 COMMAND_RC = $(WINDRES) $(DDEFINES) $(DF_TGT) -o $@ -i $<
80 COMMAND_INSTALL = ./build/install.sh -m $1 $2 -d $3
82 COMMAND_IN = ./build/process.sh $1 $2
86 DO_CXX = $(COMMAND_CXX)
88 DO_LDX = $(COMMAND_LDX)
89 DO_CCLD = $(COMMAND_CCLD)
90 DO_CXXLD = $(COMMAND_CXXLD)
93 DO_INSTALL = $(COMMAND_INSTALL)
98 DO_CC = @echo -e " CC \t$@"; $(COMMAND_CC)
99 DO_CXX = @echo -e " CXX \t$@"; $(COMMAND_CXX)
100 DO_LD = @echo -e " LD \t$@"; $(COMMAND_LD)
101 DO_LDX = @echo -e " LD \t$@"; $(COMMAND_LDX)
102 DO_CCLD = @echo -e " CCLD \t$@"; $(COMMAND_CCLD)
103 DO_CXXLD = @echo -e " CXXLD \t$@"; $(COMMAND_CXXLD)
104 DO_AR = @echo -e " AR \t$@"; $(COMMAND_AR)
105 DO_RC = @echo -e " RC \t$@"; $(COMMAND_RC)
106 DO_INSTALL = @echo -e " CP \t$2"; $(COMMAND_INSTALL)
107 DO_RM = @echo -e " RM \t$1"; $(COMMAND_RM)
108 DO_IN = @echo -e " MAKE \t$2"; $(COMMAND_IN)
109 SHELL_LINE_PREFIX = @
114 # Define the implicit rules.
140 # Define the phony targets.
145 $(SHELL_LINE_PREFIX)files='$(CLEAN)'; for file in $$files; \
147 $(call remove_silencer,$(call DO_RM,$$file)); \
152 $(call DO_RM,config.mk)
155 all_: $(BINARIES) $(MANPAGES)
159 $(SHELL_LINE_PREFIX)files='$(DATAFILES)'; for file in $$files; \
161 full=`echo "$$file" | cut -d\; -f1`; \
162 base=`echo "$$file" | cut -d\; -f2`; \
163 $(call remove_silencer,$(call DO_INSTALL,644,$$full,$(DESTDIR)$(datadir)$$base)); \
165 $(SHELL_LINE_PREFIX)files='$(BINARIES)'; for file in $$files; \
167 $(call remove_silencer,$(call DO_INSTALL,755,$$file,$(DESTDIR)$(bindir))); \
169 $(SHELL_LINE_PREFIX)files='$(MANPAGES)'; for file in $$files; \
171 $(call remove_silencer,$(call DO_INSTALL,644,$$file,$(DESTDIR)$(mandir))); \
176 $(SHELL_LINE_PREFIX)files='$(BINARIES)'; for file in $$files; \
178 base="/`basename $$file`"; \
179 $(call remove_silencer,$(call DO_RM,$(DESTDIR)$(bindir)$$base)); \
181 $(SHELL_LINE_PREFIX)files='$(DATAFILES)'; for file in $$files; \
183 full="`echo "$$file" | cut -d\; -f1`"; \
184 base="`echo "$$file" | cut -d\; -f2`/`basename $$full`"; \
185 $(call remove_silencer,$(call DO_RM,$(DESTDIR)$(datadir)$$base)); \
190 # Prevent make from removing any build targets.