1 CONTRIB.build/ = $(BUILD/)contrib/
2 CONTRIB.download/ = $(SRC/)download/
3 CONTRIB.host = $(if $(filter 1,$(BUILD.cross)),$(BUILD.spec))
5 ###############################################################################
8 ## $(1) = module name (uppercase)
10 define import.CONTRIB.defs
12 ## import gcc/g++ support mainly so we can force contrib choice of
13 ## gcc executable, and debug/optimization flags.
15 $$(eval $$(call import.GCC,$(1)))
18 ## common values useful across targets
20 $(1).src/ = $$(SRC/)contrib/$($(1).name)/
21 $(1).build/ = $$(CONTRIB.build/)$($(1).name)/
22 $(1).deps = $$(foreach n,$($(1).prerequisites),$$($$n.INSTALL.target))
27 $(1).FETCH.tar = $$(CONTRIB.download/)$$(notdir $$($(1).FETCH.url))
28 $(1).FETCH.url = FETCH_IS_UNDEFINED
29 $(1).FETCH.target = $$($(1).FETCH.tar)
31 $$(call FETCH,$$@,$$($(1).FETCH.url))
37 $(1).EXTRACT.tarbase = $$(patsubst %.tar.gz,%,$$(notdir $$($(1).FETCH.url)))
38 $(1).EXTRACT.dir/ = $$($(1).build/)$$($(1).EXTRACT.tarbase)/
39 $(1).EXTRACT.target = $$($(1).build/).stamp.extract
41 $$(RM.exe) -fr $$($(1).EXTRACT.dir/)
42 $$(TAR.exe) xfC $$($(1).FETCH.tar) $$($(1).build/)
49 $(1).PATCH.srcs = $$(wildcard \
50 $$($(1).src/)A??-*.patch \
51 $$($(1).src/)P??-$$(BUILD.system)*.patch )
53 # extra line feed is required
54 define $(1).PATCH.item
55 $$(PATCH.exe) -t -N -p1 -d $$(1) < $$(2)
59 $(1).PATCH.target = $$($(1).build/).stamp.patch
61 $$(foreach p,$$($(1).PATCH.srcs),$$(call $(1).PATCH.item,$$($(1).EXTRACT.dir/),$$(p)))
68 $(1).CONFIGURE.sete = set -e;
69 $(1).CONFIGURE.dir = $$($(1).EXTRACT.dir/)
70 $(1).CONFIGURE.bootstrap =
71 $(1).CONFIGURE.exe = ./configure
72 $(1).CONFIGURE.host = $$(CONTRIB.host)
73 $(1).CONFIGURE.prefix = $$(call fn.ABSOLUTE,$$(CONTRIB.build/))
74 $(1).CONFIGURE.deps = --disable-dependency-tracking
75 $(1).CONFIGURE.shared = --disable-shared
76 $(1).CONFIGURE.static = --enable-static
77 $(1).CONFIGURE.extra =
79 $(1).CONFIGURE.args.dir = cd $$(1);
80 $(1).CONFIGURE.args.host = --host=$$(1)
81 $(1).CONFIGURE.args.prefix = --prefix=$$(1)
83 $(1).CONFIGURE.args = !sete @dir !bootstrap !env !exe @host @prefix !deps !shared !static !extra
85 $(1).CONFIGURE.env.CC = CC=$$($(1).GCC.gcc)
86 $(1).CONFIGURE.env.CFLAGS = CFLAGS="$$(call fn.ARGS,$(1).GCC,*archs ?extra)"
87 $(1).CONFIGURE.env.CXX = CXX=$$($(1).GCC.gxx)
88 $(1).CONFIGURE.env.CXXFLAGS = CXXFLAGS="$$(call fn.ARGS,$(1).GCC,*archs ?extra)"
89 $(1).CONFIGURE.env.CPPFLAGS = CPPFLAGS="$$(call fn.ARGS,$(1).GCC,*archs ?extra)"
90 $(1).CONFIGURE.env.LDFLAGS = LDFLAGS="$$(call fn.ARGS,$(1).GCC,*archs)"
92 $(1).CONFIGURE.env.args = !CC !CFLAGS !CXX !CXXFLAGS !CPPFLAGS !LDFLAGS
93 $(1).CONFIGURE.env = $$(call fn.ARGS,$(1).CONFIGURE.env,$$($(1).CONFIGURE.env.args))
95 $(1).CONFIGURE.target = $$($(1).build/).stamp.configure
97 $$(call fn.ARGS,$(1).CONFIGURE,$$($(1).CONFIGURE.args))
104 $(1).BUILD.make = $$(MAKE)
105 $(1).BUILD.dir = $$($(1).EXTRACT.dir/)
107 $(1).BUILD.ntargets =
109 $(1).BUILD.args = !make @dir !extra !ntargets
110 $(1).BUILD.args.dir = -C $$(1)
112 $(1).BUILD.target = $$($(1).build/).stamp.build
114 $$(call fn.ARGS,$(1).BUILD,$$($(1).BUILD.args))
121 $(1).INSTALL.make = $$(MAKE)
122 $(1).INSTALL.dir = $$($(1).EXTRACT.dir/)
124 $(1).INSTALL.ntargets =
126 $(1).INSTALL.args = !make @dir !extra !ntargets
127 $(1).INSTALL.args.dir = -C $$(1) install
129 $(1).INSTALL.mkdirs = $$(CONTRIB.build/)lib/ $$(CONTRIB.build/)include/
130 $(1).INSTALL.target = $$($(1).build/).stamp.install
132 $$(call fn.ARGS,$(1).INSTALL,$$($(1).INSTALL.args))
139 $(1).UNINSTALL.make = $$(MAKE)
140 $(1).UNINSTALL.dir = $$($(1).EXTRACT.dir/)
141 $(1).UNINSTALL.extra =
142 $(1).UNINSTALL.ntargets = uninstall
144 $(1).UNINSTALL.args = !make @dir !extra !ntargets
145 $(1).UNINSTALL.args.dir = -C $$(1)
147 define $(1).UNINSTALL
148 $$(call fn.ARGS,$(1).UNINSTALL,$$($(1).UNINSTALL.args))
149 $$(RM.exe) -f $$($(1).INSTALL.target)
155 $(1).CLEAN.make = $$(MAKE)
156 $(1).CLEAN.dir = $$($(1).EXTRACT.dir/)
158 $(1).CLEAN.ntargets = clean
160 $(1).CLEAN.args = !make @dir !extra !ntargets
161 $(1).CLEAN.args.dir = -C $$(1)
164 $$(call fn.ARGS,$(1).CLEAN,$$($(1).CLEAN.args))
165 $$(RM.exe) -f $$($(1).BUILD.target)
169 ## other values used to aid prerequisite dirs and cleanup
171 $(1).out += $$($(1).build/)
172 $(1).out += $$($(1).FETCH.target)
173 $(1).out += $$($(1).EXTRACT.target)
174 $(1).out += $$($(1).PATCH.target)
175 $(1).out += $$($(1).CONFIGURE.target)
176 $(1).out += $$($(1).BUILD.target)
177 $(1).out += $$($(1).INSTALL.mkdirs)
178 $(1).out += $$($(1).INSTALL.target)
180 BUILD.out += $$($(1).out)
183 ###############################################################################
186 ## $(1) = module name
188 define import.CONTRIB.rules
193 $($(1).name).fetch: $$($(1).FETCH.target)
195 $$($(1).FETCH.target): | $$(dir $$($(1).FETCH.target))
200 ## must touch dir after extraction because old timestamp is restored via tar.
202 $($(1).name).extract: $$($(1).EXTRACT.target)
204 $$($(1).EXTRACT.target): | $$(dir $$($(1).EXTRACT.target))
205 $$($(1).EXTRACT.target): $$($(1).FETCH.target)
208 $($(1).name).extract.touch:
209 $$(TOUCH.exe) $$($(1).EXTRACT.target)
211 $($(1).name).extract.untouch:
212 $$(RM.exe) -f $$($(1).EXTRACT.target)
217 $($(1).name).patch: $$($(1).PATCH.target)
219 $$($(1).PATCH.target): | $$(dir $$($(1).PATCH.target))
220 $$($(1).PATCH.target): $$($(1).EXTRACT.target)
223 $($(1).name).patch.touch:
224 $$(TOUCH.exe) $$($(1).PATCH.target)
226 $($(1).name).patch.untouch:
227 $$(RM.exe) -f $$($(1).PATCH.target)
232 $($(1).name).configure: $$($(1).CONFIGURE.target)
234 $$($(1).CONFIGURE.target): | $$(dir $$($(1).CONFIGURE.target))
235 $$($(1).CONFIGURE.target): $$($(1).deps)
236 $$($(1).CONFIGURE.target): $$($(1).PATCH.target)
239 $($(1).name).configure.touch:
240 $$(TOUCH.exe) $$($(1).CONFIGURE.target)
242 $($(1).name).configure.untouch:
243 $$(RM.exe) -f $$($(1).CONFIGURE.target)
248 $($(1).name).build: $$($(1).BUILD.target)
250 $$($(1).BUILD.target): | $$(dir $$($(1).BUILD.target))
251 $$($(1).BUILD.target): $$($(1).CONFIGURE.target)
255 $($(1).name).build.touch:
256 $$(TOUCH.exe) $$($(1).BUILD.target)
258 $($(1).name).build.untouch:
259 $$(RM.exe) -f $$($(1).BUILD.target)
264 $($(1).name).install: $$($(1).INSTALL.target)
266 $$($(1).INSTALL.target): | $$(dir $$($(1).INSTALL.target)) $$($(1).INSTALL.mkdirs)
267 $$($(1).INSTALL.target): $$($(1).BUILD.target)
270 $($(1).name).install.touch:
271 $$(TOUCH.exe) $$($(1).INSTALL.target)
273 $($(1).name).install.untouch:
274 $$(RM.exe) -f $$($(1).INSTALL.target)
279 $($(1).name).uninstall:
291 $($(1).name).xclean: $($(1).name).uninstall
292 $$(RM.exe) -fr $$($(1).build/)
295 ## alias: module name is same as build
297 $($(1).name): $($(1).name).build
300 ## participate with global convenience targets
302 contrib.fetch: $($(1).name).fetch
303 contrib.extract: $($(1).name).extract
304 contrib.patch: $($(1).name).patch
305 contrib.configure: $($(1).name).configure
306 contrib.build: $($(1).name).build
307 contrib.install: $($(1).name).install
308 contrib.uninstall: $($(1).name).uninstall
309 contrib.clean: $($(1).name).clean
310 contrib.xclean: $($(1).name).xclean