4 # Use this file with GNU make to compile and install Yoink.
7 # Set V to `1' to echo each build command in full. The default behavior
8 # will keep output minimal.
14 ifeq (menuconfig,$(MAKECMDGOALS))
16 ./configure --interactive
21 $(Q)$(configure) --export-header=$@
24 $(Q)$(configure) --export-terms=$@
27 $(Q)$(configure) --interactive --print-instructions=no
33 # Define some useful functions.
47 dirstack_$$(sp) := $$d
48 datstack_$$(sp) := $$(data)
49 exestack_$$(sp) := $$(exec)
53 include $$(dir)/rules.mk
55 data := $$(sort $$(data) $$(appdir_$$b) $$(mandir_$$b) $$(pkgdatadir_$$b) $$(desktop_$$b))
56 exec := $$(sort $$(exec) $$(bindir_$$b) $$(libdir_$$b))
57 deps := $$(filter %.d,$$(exec:%.o=%.d))
58 clean := $$(clean) $$(deps) $$(exec) $$(data)
59 DEPFILE := $$(DEPFILE) $$(deps)
60 DATA_TARGETS += $$(data)
61 EXEC_TARGETS += $$(exec)
62 d := $$(dirstack_$$(sp))
63 data := $$(datstack_$$(sp))
64 exec := $$(exestack_$$(sp))
65 sp := $$(basename $$(sp))
67 include = $(foreach i,$1,$(eval $(call include_func,$i)))
69 targets = $(EXEC_TARGETS) $(DATA_TARGETS)
74 ifeq (gzip,$(manCompression))
77 ifeq (bzip2,$(manCompression))
84 # Include the subdirectories--order is not important.
87 $(call include,src data doc)
88 -include build/$(platform)/rules.mk
92 # Define some common rules.
95 ifeq (true,$(tracking))
96 PKG_CFLAGS += -MD -MP -MF $(@:%.o=%.d) -MT $@
100 # Include current directory to allow sources to include config.h.
101 override CPPFLAGS += -I.
102 TGT_CXXFLAGS = $(TGT_CFLAGS)
106 tarname = $(TARNAME)-$(VERSION)
108 cmd_compile_c = $(CC) $(PKG_CFLAGS) $(TGT_CFLAGS) $(CFLAGS) $(CPPFLAGS) \
109 $(TARGET_ARCH) -c $(OUTPUT_OPTION) $<
110 cmd_compile_cc = $(CXX) $(PKG_CXXFLAGS) $(TGT_CXXFLAGS) $(CXXFLAGS) $(CPPFLAGS) \
111 $(TARGET_ARCH) -c $(OUTPUT_OPTION) $<
112 cmd_link_c = $(CC) $(PKG_CFLAGS) $(TGT_CFLAGS) $(CFLAGS) $(CPPFLAGS) \
113 $(PKG_LDFLAGS) $(TGT_LDFLAGS) $(LDFLAGS) \
114 $(TARGET_ARCH) $^ $(LOADLIBES) $(PKG_LDLIBS) $(TGT_LDLIBS) $(LDLIBS) -o $@
115 cmd_link_cc = $(CXX) $(PKG_CXXFLAGS) $(TGT_CXXFLAGS) $(CXXFLAGS) $(CPPFLAGS) \
116 $(PKG_LDFLAGS) $(TGT_LDFLAGS) $(LDFLAGS) \
117 $(TARGET_ARCH) $^ $(LOADLIBES) $(PKG_LDLIBS) $(TGT_LDLIBS) $(LDLIBS) -o $@
118 cmd_ar = $(AR) $(ARFLAGS) $@ $^; $(RANLIB) $@
119 cmd_compile_rc = $(WINDRES) $(CPPFLAGS) $(TARGET_ARCH) $(OUTPUT_OPTION) -i $<
120 cmd_sed = sed -f config.sed <$< >$@
121 cmd_gzip = gzip -c $< >$@
122 cmd_bzip2 = bzip2 -c $< >$@
123 cmd_xxd = id=$(subst .,_,$(notdir $<)); \
124 printf "\#include <stddef.h>\nsize_t\tdata_%s_size = %d;\nchar\tdata_%s[] = {\n" \
125 $$id $$(wc -c <$<) $$id >$@; \
127 printf ", 0x00\n};\n" >>$@
128 cmd_configure = ./configure
129 func_install = mkdir -p $(DESTDIR)$3 && $(INSTALL) -m $1 $2 $(DESTDIR)$3
130 func_remove = rm -f $1
131 func_dist = git archive HEAD --prefix='$(tarname)/' | $1 >"$(tarname).tar.$2" && \
132 (md5 "$(tarname).tar.$2" 2>/dev/null || md5sum "$(tarname).tar.$2")
134 compile_c = $(call func_print,CC,$@) $(cmd_compile_c)
135 compile_cc = $(call func_print,CXX,$@) $(cmd_compile_cc)
136 compile_rc = $(call func_print,RC,$@) $(cmd_compile_rc)
137 link_c = $(call func_print,LINK,$@) $(cmd_link_c)
138 link_cc = $(call func_print,LINK,$@) $(cmd_link_cc)
139 ar = $(call func_print,AR,$@) $(cmd_ar)
140 sed = $(call func_print,SED,$@) $(cmd_sed)
141 gzip = $(call func_print,GZIP,$@) $(cmd_gzip)
142 bzip2 = $(call func_print,BZIP2,$@) $(cmd_bzip2)
143 xxd = $(call func_print,XXD,$@) $(cmd_xxd)
144 configure = $(call func_print,MAKE,$@) $(cmd_configure)
145 dist = $(call func_print,DIST,$1) $(func_dist)
146 install = $(call func_print,CP,$(DESTDIR)$(3:%/=%)/$(notdir $2)) $(func_install)
147 remove = $(call func_print,RM,$1) $(func_remove)
154 func_print = printf "\x20\x20$1\t%s\n" $2;
159 # Define the implicit rules.
177 $(builddir)/%.o: %.cc
179 $(builddir)/%.o: %.cpp
183 $(builddir)/%.o: %.rc
192 $(Q)if [ -d $< ]; then mkdir -p $@; elif [ -f $< ]; then cp -f $< $@; fi
196 # Define the phony targets.
203 $(Q)$(foreach f,$(clean),$(call remove,$f);)
204 $(Q)if [ -d $(builddir) ]; then find $(builddir) -type d -empty -delete; fi
207 $(Q)cd build && $(MAKE) clean
208 $(Q)$(call remove,config.h);$(call remove,config.mk);$(call remove,config.sed)
211 install: install-data install-exec
213 install-data: $(DATA_TARGETS)
214 $(Q)$(foreach d,$(SUBDIRS),$(foreach f,$(pkgdatadir_$d),\
215 $(call install,644,$f,$(dir $(f:$d%=$(pkgdatadir)%)));))
216 $(Q)$(foreach d,$(SUBDIRS),$(foreach f,$(mandir_$d),\
217 $(call install,644,$f,$(dir $(f:$d%=$(mandir)/man$(shell echo "$f" | sed 's/[^.]*\.\([^.]*\).*/\1/')%)));))
219 install-exec: $(EXEC_TARGETS)
220 $(Q)$(foreach d,$(SUBDIRS),$(foreach f,$(bindir_$d),\
221 $(call install,755,$f,$(dir $(f:$d%=$(bindir)%)));))
223 install-desktop-entry: $(DATA_TARGETS)
224 $(Q)$(foreach d,$(SUBDIRS),$(foreach f,$(desktop_$d),\
225 $(call install,644,$f,/usr/share/applications);))
228 dist-all: dist-bzip2 dist-gzip dist-lzma dist-xz
231 $(Q)$(call dist,bzip2,bz2)
234 $(Q)$(call dist,gzip,gz)
237 $(Q)$(call dist,lzma,lzma)
240 $(Q)$(call dist,xz,xz)
242 dist: dist-$(archiveFormat)
246 # Prevent make from removing any build targets.
251 .PHONY: all clean distclean install install-data install-exec
252 .PHONY: install-desktop-entry
253 .PHONY: dist dist-all dist-gzip dist-bzip2 dist-xz dist-lzma