Dash:
[t2-trunk.git] / misc / luabash / cf / Rules
blobad6659b5198f96bd697ee832b1dd5e80f9bc96c1
1 # -*- makefile -*-
3 # sort out sources, objects and dependencies
4 SRCS :=
5 OBJS :=
7 # see http://www.gnu.org/software/make/manual/html_chapter/make_8.html#SEC91
8 # eval-function
10 $(foreach ARCHIVE, $(ARCHIVES), \
11         $(eval SRCS += $($(subst .,_,$(subst -,_,$(ARCHIVE)))_SRCS)) \
12         $(eval $(subst .,_,$(subst -,_,$(ARCHIVE)))_OBJS := \
13                 $(addsuffix .o, $(basename $($(subst .,_,$(subst -,_,$(ARCHIVE)))_SRCS)))) \
14         $(eval OBJS += $($(subst .,_,$(subst -,_,$(ARCHIVE)))_OBJS)) \
17 $(foreach LARCHIVE, $(LARCHIVES), \
18         $(eval SRCS += $($(subst .,_,$(subst -,_,$(LARCHIVE)))_SRCS)) \
19         $(eval $(subst .,_,$(subst -,_,$(LARCHIVE)))_OBJS := \
20                 $(addsuffix .lo, $(basename $($(subst .,_,$(subst -,_,$(LARCHIVE)))_SRCS)))) \
21         $(eval OBJS += $($(subst .,_,$(subst -,_,$(LARCHIVE)))_OBJS)) \
24 $(foreach PROGRAM, $(PROGRAMS), \
25         $(eval SRCS += $($(subst .,_,$(subst -,_,$(PROGRAM))_SRCS))) \
26         $(eval $(subst .,_,$(subst -,_,$(PROGRAM)))_OBJS := \
27                 $(addsuffix .o, $(basename $($(subst .,_,$(subst -,_,$(PROGRAM)))_SRCS)))) \
28         $(eval OBJS += $($(subst .,_,$(subst -,_,$(PROGRAM)))_OBJS)) \
31 $(foreach LIBRARY, $(LIBRARIES), \
32         $(eval SRCS += $($(subst .,_,$(subst -,_,$(LIBRARY)))_SRCS)) \
33         $(eval $(subst .,_,$(subst -,_,$(LIBRARY)))_OBJS := \
34                 $(addsuffix .lo, $(basename $($(subst .,_,$(subst -,_,$(LIBRARY)))_SRCS)))) \
35         $(eval OBJS += $($(subst .,_,$(subst -,_,$(LIBRARY)))_OBJS)) \
38 DEPS = $(addsuffix .d, $(basename $(SRCS)))
40 # beautify output
41 ifneq ($(VERBOSE),1)
42 Q = @
43 endif
45 # sub-directory traversal
46 .PHONY: subdirs $(subdirs)
48 subdirs: $(subdirs)
49 $(subdirs):
50         $(Q)$(MAKE) --no-print-directory -C $@ $(MAKECMDGOALS)
52 # compilation
53 .SUFFIXES: .o .lo .a .al .so .d
54 .PRECIOUS: %.o %.lo
56 all: subdirs $(OBJS) $(ARCHIVES) $(LARCHIVES) $(LIBRARIES) $(PROGRAMS)
58 doc: subdirs
60 # objects
61 define mkdep
62         @echo '  DEP  $@'
63         $(Q)$(CC) -MM $(1) $< > $@.$$$$; \
64                 sed -e 's,\($*\)\.o[ :]*,\1.o $@ : ,g' \
65             -e 's,$(shell basename $@),$@,g' < $@.$$$$ > $(subst .c,.d,$<); \
66                 rm -f $@.$$$$
67 endef
69 define compile
70         @echo '  CC   $@'
71         $(Q)$(CC) $(1) -c -o $@ $<
72 endef
74 %.o: %.c
75         $(call mkdep,$(CPPFLAGS) $(INCLUDES) $(DEFS))
76         $(call compile,$(CFLAGS) $(DEFS) $(INCLUDES))
78 %.lo: %.c
79         $(call mkdep,$(CPPFLAGS) $(INCLUDES) $(DEFS))
80         $(call compile,$(CFLAGS) $(DEFS) $(INCLUDES) $(PICFLAGS))
82 #############################################################################
83 # linking
85 # archives
86 define link-archive
87         @echo '  AR   $@'
88         $(Q)$(AR) -cru $@ $^
89 endef
91 # libraries
92 # the -Xlinker -rpath mangling is needed to find those libraries during
93 # linking for other objects
94 define link-library
95         @echo '  LINK $@'
96         $(Q)$(CC) -shared $(LDFLAGS) $(patsubst -L%, -Xlinker -rpath %, $(filter -L%, $(LIBS))) \
97                  -o $@ $^ $(LIBS)
98 endef
100 # programs
101 define link-program
102         @echo '  LINK $@'
103         $(Q)$(CC) $(LDFLAGS) -o $@ $^ $(LIBS) $(1)
104 endef
106 # cleanup
107 .PHONY: clean
108 clean: subdirs
109         $(Q)$(RM) -v $(OBJS) $(DEPS) $(PROGRAMS) $(CLEANFILES)
110         $(Q)list="$(LIBRARIES) $(LARCHIVES) $(ARCHIVES)"; for each in $$list; do \
111                 $(RM) -v $$each*; \
112         done
114 .PHONY: distclean
115 distclean: clean subdirs
116         $(Q)$(RM) -v $(wildcard *~) core $(DISTCLEAN_FILES)