]>
Commit | Line | Data |
---|---|---|
1 | #! /usr/bin/python | |
2 | ||
3 | # | |
4 | # This is the python script used to generate Makefile.tpl | |
5 | # | |
6 | ||
7 | GRUB_PLATFORMS = [ "emu", "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot", | |
8 | "i386_multiboot", "i386_ieee1275", "x86_64_efi", | |
9 | "mips_yeeloong", "sparc64_ieee1275", | |
10 | "powerpc_ieee1275" ] | |
11 | ||
12 | GROUPS = {} | |
13 | GROUPS["i386"] = [ "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot", "i386_multiboot", "i386_ieee1275" ] | |
14 | GROUPS["x86_64"] = [ "x86_64_efi" ] | |
15 | GROUPS["mips"] = [ "mips_yeeloong" ] | |
16 | GROUPS["sparc64"] = [ "sparc64_ieee1275" ] | |
17 | GROUPS["powerpc"] = [ "powerpc_ieee1275" ] | |
18 | GROUPS["x86"] = GROUPS["i386"] + GROUPS["x86_64"] | |
19 | GROUPS["x86_efi"] = [ "i386_efi", "x86_64_efi" ] | |
20 | GROUPS["nonemu"] = GRUB_PLATFORMS[:] | |
21 | GROUPS["nonemu"].remove("emu") | |
22 | ||
23 | # | |
24 | # Create platform => groups reverse map, where groups covering that | |
25 | # platform are ordered by their sizes | |
26 | # | |
27 | RMAP = {} | |
28 | for platform in GRUB_PLATFORMS: | |
29 | # initialize with platform itself as a group | |
30 | RMAP[platform] = [ platform ] | |
31 | ||
32 | for k in GROUPS.keys(): | |
33 | v = GROUPS[k] | |
34 | # skip groups that don't cover this platform | |
35 | if platform not in v: continue | |
36 | ||
37 | bigger = [] | |
38 | smaller = [] | |
39 | # partition currently known groups based on their size | |
40 | for group in RMAP[platform]: | |
41 | if group in GRUB_PLATFORMS: smaller.append(group) | |
42 | elif len(GROUPS[group]) < len(v): smaller.append(group) | |
43 | else: bigger.append(group) | |
44 | # insert in the middle | |
45 | RMAP[platform] = smaller + [ k ] + bigger | |
46 | ||
47 | # | |
48 | # Global variables | |
49 | # | |
50 | GVARS = [] | |
51 | ||
52 | def gvar_add(var, value): | |
53 | if var not in GVARS: | |
54 | GVARS.append(var) | |
55 | return var + " += " + value + "\n" | |
56 | ||
57 | def global_variable_initializers(): | |
58 | r = "" | |
59 | for var in GVARS: | |
60 | r += var + " ?= \n" | |
61 | return r | |
62 | ||
63 | # | |
64 | # Per PROGRAM/SCRIPT variables | |
65 | # | |
66 | ||
67 | def var_set(var, value): | |
68 | return var + " = " + value + "\n" | |
69 | ||
70 | def var_add(var, value): | |
71 | return var + " += " + value + "\n" | |
72 | ||
73 | # | |
74 | # Autogen constructs | |
75 | # | |
76 | ||
77 | def set_canonical_name_suffix(suffix): return "[+ % name `export cname=$(echo -n %s" + suffix + " | sed -e 's/[^0-9A-Za-z@_]/_/g')` +]" | |
78 | def cname(): return "[+ % name `echo $cname` +]" | |
79 | ||
80 | def rule(target, source, cmd): | |
81 | if cmd[0] == "\n": | |
82 | return "\n" + target + ": " + source + cmd.replace("\n", "\n\t") + "\n" | |
83 | else: | |
84 | return "\n" + target + ": " + source + "\n\t" + cmd.replace("\n", "\n\t") + "\n" | |
85 | ||
86 | # | |
87 | # Template for keys with platform names as values, for example: | |
88 | # | |
89 | # kernel = { | |
90 | # nostrip = emu; | |
91 | # ... | |
92 | # } | |
93 | # | |
94 | def if_platform_tagged(platform, tag, snippet_if, snippet_else=None): | |
95 | r = "" | |
96 | r += "[+ IF " + tag + " defined +]" | |
97 | r += "[+ FOR " + tag + " +][+ CASE " + tag + " +]" | |
98 | for group in RMAP[platform]: | |
99 | r += "[+ = \"" + group + "\" +]" + snippet_if | |
100 | ||
101 | if snippet_else != None: r += "[+ * +]" + snippet_if | |
102 | r += "[+ ESAC +][+ ENDFOR +]" | |
103 | ||
104 | if snippet_else == None: | |
105 | r += "[+ ENDIF +]" | |
106 | return r | |
107 | ||
108 | r += "[+ ELSE +]" + snippet_else + "[+ ENDIF +]" | |
109 | return r | |
110 | ||
111 | # | |
112 | # Template for handling platform specific values, for example: | |
113 | # | |
114 | # module = { | |
115 | # cflags = '-Wall'; | |
116 | # emu_cflags = '-Wall -DGRUB_EMU=1'; | |
117 | # ... | |
118 | # } | |
119 | # | |
120 | def foreach_platform_value(platform, tag, suffix, closure): | |
121 | r = "" | |
122 | for group in RMAP[platform]: | |
123 | gtag = group + suffix | |
124 | ||
125 | if group == RMAP[platform][0]: | |
126 | r += "[+ IF " + gtag + " +]" | |
127 | else: | |
128 | r += "[+ ELIF " + gtag + " +]" | |
129 | ||
130 | r += "[+ FOR " + gtag + " +]" + closure("[+ ." + gtag + " +]") + "[+ ENDFOR +]" | |
131 | r += "[+ ELSE +][+ FOR " + tag + " +]" + closure("[+ ." + tag + " +]") + "[+ ENDFOR +][+ ENDIF +]" | |
132 | return r | |
133 | ||
134 | def each_platform(closure): | |
135 | r = "[+ IF - enable undefined +]" | |
136 | for platform in GRUB_PLATFORMS: | |
137 | r += "\nif COND_" + platform + "\n" + closure(platform) + "endif\n" | |
138 | r += "[+ ELSE +]" | |
139 | for platform in GRUB_PLATFORMS: | |
140 | x = "\nif COND_" + platform + "\n" + closure(platform) + "endif\n" | |
141 | r += if_platform_tagged(platform, "enable", x) | |
142 | r += "[+ ENDIF +]" | |
143 | return r | |
144 | ||
145 | def under_platform_specific_conditionals(platform, snippet): | |
146 | r = foreach_platform_value(platform, "condition", "_condition", lambda cond: "if " + cond + "\n") | |
147 | r += snippet | |
148 | r += foreach_platform_value(platform, "condition", "_condition", lambda cond: "endif " + cond + "\n") | |
149 | return r | |
150 | ||
151 | def platform_specific_values(platform, tag, suffix): | |
152 | return foreach_platform_value(platform, tag, suffix, lambda value: value + " ") | |
153 | ||
154 | def shared_sources(): return "[+ FOR shared +][+ .shared +] [+ ENDFOR +]" | |
155 | def shared_nodist_sources(): return "[+ FOR nodist_shared +] [+ .nodist_shared +][+ ENDFOR +]" | |
156 | ||
157 | def platform_sources(p): return platform_specific_values(p, "source", "") | |
158 | def platform_nodist_sources(p): return platform_specific_values(p, "nodist", "_nodist") | |
159 | def platform_extra_dist(p): return platform_specific_values(p, "extra_dist", "_extra_dist") | |
160 | ||
161 | def platform_ldadd(p): return platform_specific_values(p, "ldadd", "_ldadd") | |
162 | def platform_cflags(p): return platform_specific_values(p, "cflags", "_cflags") | |
163 | def platform_ldflags(p): return platform_specific_values(p, "ldflags", "_ldflags") | |
164 | def platform_cppflags(p): return platform_specific_values(p, "cppflags", "_cppflags") | |
165 | def platform_ccasflags(p): return platform_specific_values(p, "ccasflags", "_ccasflags") | |
166 | def platform_stripflags(p): return platform_specific_values(p, "stripflags", "_stripflags") | |
167 | def platform_objcopyflags(p): return platform_specific_values(p, "objcopyflags", "_objcopyflags") | |
168 | ||
169 | def module(platform): | |
170 | r = set_canonical_name_suffix(".module") | |
171 | ||
172 | r += gvar_add("noinst_PROGRAMS", "[+ name +].module") | |
173 | r += gvar_add("MODULE_FILES", "[+ name +].module$(EXEEXT)") | |
174 | ||
175 | r += var_set(cname() + "_SOURCES", platform_sources(platform) + " ## platform sources") | |
176 | r += var_add(cname() + "_SOURCES", shared_sources() + " ## shared sources") | |
177 | r += var_set("nodist_" + cname() + "_SOURCES", platform_nodist_sources(platform) + " ## platform nodist sources") | |
178 | r += var_add("nodist_" + cname() + "_SOURCES", shared_nodist_sources() + " ## shared nodist sources") | |
179 | r += var_set(cname() + "_LDADD", platform_ldadd(platform)) | |
180 | r += var_set(cname() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_MODULE) " + platform_cflags(platform)) | |
181 | r += var_set(cname() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_MODULE) " + platform_ldflags(platform)) | |
182 | r += var_set(cname() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_MODULE) " + platform_cppflags(platform)) | |
183 | r += var_set(cname() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_MODULE) " + platform_ccasflags(platform)) | |
184 | ||
185 | r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) | |
186 | r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") | |
187 | r += gvar_add("CLEANFILES", "$(nodist_" + cname() + "_SOURCES)") | |
188 | ||
189 | r += gvar_add("DEF_FILES", "def-[+ name +].lst") | |
190 | r += gvar_add("UND_FILES", "und-[+ name +].lst") | |
191 | r += gvar_add("MOD_FILES", "[+ name +].mod") | |
192 | r += gvar_add("platform_DATA", "[+ name +].mod") | |
193 | r += gvar_add("CLEANFILES", "def-[+ name +].lst und-[+ name +].lst mod-[+ name +].c mod-[+ name +].o [+ name +].mod") | |
194 | ||
195 | r += gvar_add("COMMAND_FILES", "command-[+ name +].lst") | |
196 | r += gvar_add("FS_FILES", "fs-[+ name +].lst") | |
197 | r += gvar_add("VIDEO_FILES", "video-[+ name +].lst") | |
198 | r += gvar_add("PARTMAP_FILES", "partmap-[+ name +].lst") | |
199 | r += gvar_add("HANDLER_FILES", "handler-[+ name +].lst") | |
200 | r += gvar_add("PARTTOOL_FILES", "parttool-[+ name +].lst") | |
201 | r += gvar_add("TERMINAL_FILES", "terminal-[+ name +].lst") | |
202 | r += gvar_add("CLEANFILES", "command-[+ name +].lst fs-[+ name +].lst") | |
203 | r += gvar_add("CLEANFILES", "handler-[+ name +].lst terminal-[+ name +].lst") | |
204 | r += gvar_add("CLEANFILES", "video-[+ name +].lst partmap-[+ name +].lst parttool-[+ name +].lst") | |
205 | ||
206 | r += gvar_add("CLEANFILES", "[+ name +].pp") | |
207 | r += """ | |
208 | [+ name +].pp: $(""" + cname() + """_SOURCES) $(nodist_""" + cname() + """_SOURCES) | |
209 | $(TARGET_CPP) -DGRUB_LST_GENERATOR $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(""" + cname() + """_CPPFLAGS) $(CPPFLAGS) $^ > $@ || (rm -f $@; exit 1) | |
210 | ||
211 | def-[+ name +].lst: [+ name +].module$(EXEEXT) | |
212 | if test x$(USE_APPLE_CC_FIXES) = xyes; then \ | |
213 | $(NM) -g -P -p $< | grep -E '^[a-zA-Z0-9_]* [TDS]' | sed "s/^\\([^ ]*\\).*/\\1 [+ name +]/" >> $@; \ | |
214 | else \ | |
215 | $(NM) -g --defined-only -P -p $< | sed "s/^\\([^ ]*\\).*/\\1 [+ name +]/" >> $@; \ | |
216 | fi | |
217 | ||
218 | und-[+ name +].lst: [+ name +].module$(EXEEXT) | |
219 | $(NM) -u -P -p $< | sed "s/^\\([^ ]*\\).*/\\1 [+ name +]/" >> $@ | |
220 | ||
221 | mod-[+ name +].c: [+ name +].module$(EXEEXT) $(top_builddir)/moddep.lst $(top_srcdir)/genmodsrc.sh | |
222 | sh $(top_srcdir)/genmodsrc.sh [+ name +] $(top_builddir)/moddep.lst > $@ || (rm -f $@; exit 1) | |
223 | ||
224 | mod-[+ name +].o: mod-[+ name +].c | |
225 | $(TARGET_CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS_MODULE) $(CPPFLAGS) $(CFLAGS_MODULE) $(CFLAGS) -c -o $@ $< | |
226 | ||
227 | [+ name +].mod: [+ name +].module$(EXEEXT) mod-[+ name +].o | |
228 | if test x$(USE_APPLE_CC_FIXES) = xyes; then \ | |
229 | $(CCLD) $(LDFLAGS_MODULE) $(LDFLAGS) -o $@.bin $^; \ | |
230 | $(OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -wd1106 -nu -nd $@.bin $@; \ | |
231 | rm -f $@.bin; \ | |
232 | else \ | |
233 | $(CCLD) -o $@ $(LDFLAGS_MODULE) $(LDFLAGS) $^; \ | |
234 | if test ! -z '$(TARGET_OBJ2ELF)'; then $(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi; \ | |
235 | $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -K _grub_mod_init -K _grub_mod_fini -R .note -R .comment $@; \ | |
236 | fi | |
237 | ||
238 | command-[+ name +].lst: [+ name +].pp $(top_srcdir)/gencmdlist.sh | |
239 | cat $< | sh $(top_srcdir)/gencmdlist.sh [+ name +] > $@ || (rm -f $@; exit 1) | |
240 | ||
241 | fs-[+ name +].lst: [+ name +].pp $(top_srcdir)/genfslist.sh | |
242 | cat $< | sh $(top_srcdir)/genfslist.sh [+ name +] > $@ || (rm -f $@; exit 1) | |
243 | ||
244 | video-[+ name +].lst: [+ name +].pp $(top_srcdir)/genvideolist.sh | |
245 | cat $< | sh $(top_srcdir)/genvideolist.sh [+ name +] > $@ || (rm -f $@; exit 1) | |
246 | ||
247 | partmap-[+ name +].lst: [+ name +].pp $(top_srcdir)/genpartmaplist.sh | |
248 | cat $< | sh $(top_srcdir)/genpartmaplist.sh [+ name +] > $@ || (rm -f $@; exit 1) | |
249 | ||
250 | parttool-[+ name +].lst: [+ name +].pp $(top_srcdir)/genparttoollist.sh | |
251 | cat $< | sh $(top_srcdir)/genparttoollist.sh [+ name +] > $@ || (rm -f $@; exit 1) | |
252 | ||
253 | handler-[+ name +].lst: [+ name +].pp $(top_srcdir)/genhandlerlist.sh | |
254 | cat $< | sh $(top_srcdir)/genhandlerlist.sh [+ name +] > $@ || (rm -f $@; exit 1) | |
255 | ||
256 | terminal-[+ name +].lst: [+ name +].pp $(top_srcdir)/genterminallist.sh | |
257 | cat $< | sh $(top_srcdir)/genterminallist.sh [+ name +] > $@ || (rm -f $@; exit 1) | |
258 | """ | |
259 | return r | |
260 | ||
261 | def kernel(platform): | |
262 | r = set_canonical_name_suffix(".exec") | |
263 | r += gvar_add("noinst_PROGRAMS", "[+ name +].exec") | |
264 | r += var_set(cname() + "_SOURCES", platform_sources(platform)) | |
265 | r += var_add(cname() + "_SOURCES", shared_sources()) | |
266 | r += var_set("nodist_" + cname() + "_SOURCES", platform_nodist_sources(platform) + " ## platform nodist sources") | |
267 | r += var_add("nodist_" + cname() + "_SOURCES", shared_nodist_sources() + " ## shared nodist sources") | |
268 | r += var_set(cname() + "_LDADD", platform_ldadd(platform)) | |
269 | r += var_set(cname() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_KERNEL) " + platform_cflags(platform)) | |
270 | r += var_set(cname() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_KERNEL) " + platform_ldflags(platform)) | |
271 | r += var_set(cname() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) " + platform_cppflags(platform)) | |
272 | r += var_set(cname() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_KERNEL) " + platform_ccasflags(platform)) | |
273 | r += var_set(cname() + "_STRIPFLAGS", "$(AM_STRIPFLAGS) $(STRIPFLAGS_KERNEL) " + platform_stripflags(platform)) | |
274 | ||
275 | r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) | |
276 | r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") | |
277 | r += gvar_add("CLEANFILES", "$(nodist_" + cname() + "_SOURCES)") | |
278 | ||
279 | r += gvar_add("platform_DATA", "[+ name +].img") | |
280 | r += gvar_add("CLEANFILES", "[+ name +].img") | |
281 | r += rule("[+ name +].img", "[+ name +].exec$(EXEEXT)", | |
282 | if_platform_tagged(platform, "nostrip", "cp $< $@", | |
283 | "$(STRIP) $(" + cname() + "_STRIPFLAGS) -o $@ $<")) | |
284 | return r | |
285 | ||
286 | def image(platform): | |
287 | r = set_canonical_name_suffix(".image") | |
288 | r += gvar_add("noinst_PROGRAMS", "[+ name +].image") | |
289 | r += var_set(cname() + "_SOURCES", platform_sources(platform)) | |
290 | r += var_add(cname() + "_SOURCES", shared_sources()) | |
291 | r += var_set("nodist_" + cname() + "_SOURCES", platform_nodist_sources(platform) + "## platform nodist sources") | |
292 | r += var_add("nodist_" + cname() + "_SOURCES", shared_nodist_sources() + "## shared nodist sources") | |
293 | r += var_set(cname() + "_LDADD", platform_ldadd(platform)) | |
294 | r += var_set(cname() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_IMAGE) " + platform_cflags(platform)) | |
295 | r += var_set(cname() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_IMAGE) " + platform_ldflags(platform)) | |
296 | r += var_set(cname() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_IMAGE) " + platform_cppflags(platform)) | |
297 | r += var_set(cname() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_IMAGE) " + platform_ccasflags(platform)) | |
298 | r += var_set(cname() + "_OBJCOPYFLAGS", "$(OBJCOPYFLAGS_IMAGE) " + platform_objcopyflags(platform)) | |
299 | ||
300 | r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) | |
301 | r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") | |
302 | r += gvar_add("CLEANFILES", "$(nodist_" + cname() + "_SOURCES)") | |
303 | ||
304 | r += gvar_add("platform_DATA", "[+ name +].img") | |
305 | r += gvar_add("CLEANFILES", "[+ name +].img") | |
306 | r += rule("[+ name +].img", "[+ name +].image$(EXEEXT)", """ | |
307 | if test x$(USE_APPLE_CC_FIXES) = xyes; then \ | |
308 | $(MACHO2IMG) $< $@; \ | |
309 | else \ | |
310 | $(OBJCOPY) $(""" + cname() + """_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn $< $@; \ | |
311 | fi | |
312 | """) | |
313 | return r | |
314 | ||
315 | def library(platform): | |
316 | r = set_canonical_name_suffix("") | |
317 | r += gvar_add("noinst_LIBRARIES", "[+ name +]") | |
318 | r += var_set(cname() + "_SOURCES", platform_sources(platform)) | |
319 | r += var_add(cname() + "_SOURCES", shared_sources()) | |
320 | r += var_set("nodist_" + cname() + "_SOURCES", platform_nodist_sources(platform)) | |
321 | r += var_add("nodist_" + cname() + "_SOURCES", shared_nodist_sources()) | |
322 | r += var_set(cname() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_LIBRARY) " + platform_cflags(platform)) | |
323 | r += var_set(cname() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_LIBRARY) " + platform_cppflags(platform)) | |
324 | r += var_set(cname() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_LIBRARY) " + platform_ccasflags(platform)) | |
325 | ||
326 | r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) | |
327 | r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") | |
328 | r += gvar_add("CLEANFILES", "$(nodist_" + cname() + "_SOURCES)") | |
329 | ||
330 | return r | |
331 | ||
332 | def installdir(default="bin"): | |
333 | return "[+ IF installdir +][+ installdir +][+ ELSE +]" + default + "[+ ENDIF +]" | |
334 | ||
335 | def manpage(): | |
336 | r = "if COND_MAN_PAGES\n" | |
337 | r += gvar_add("man_MANS", "[+ name +].[+ mansection +]\n") | |
338 | r += rule("[+ name +].[+ mansection +]", "", """ | |
339 | $(MAKE) $(AM_MAKEFLAGS) [+ name +] | |
340 | chmod a+x [+ name +] | |
341 | PATH=$(builddir):$$PATH $(HELP2MAN) --section=[+ mansection +] -i $(top_srcdir)/docs/man/[+ name +].h2m -o $@ [+ name +] | |
342 | """) | |
343 | r += gvar_add("CLEANFILES", "[+ name +].[+ mansection +]") | |
344 | r += "endif\n" | |
345 | return r | |
346 | ||
347 | def program(platform, test=False): | |
348 | r = set_canonical_name_suffix("") | |
349 | ||
350 | r += "[+ IF testcase defined +]" | |
351 | r += gvar_add("check_PROGRAMS", "[+ name +]") | |
352 | r += gvar_add("TESTS", "[+ name +]") | |
353 | r += "[+ ELSE +]" | |
354 | r += gvar_add(installdir() + "_PROGRAMS", "[+ name +]") | |
355 | r += "[+ IF mansection +]" + manpage() + "[+ ENDIF +]" | |
356 | r += "[+ ENDIF +]" | |
357 | ||
358 | r += var_set(cname() + "_SOURCES", platform_sources(platform)) | |
359 | r += var_add(cname() + "_SOURCES", shared_sources()) | |
360 | r += var_set("nodist_" + cname() + "_SOURCES", platform_nodist_sources(platform)) | |
361 | r += var_add("nodist_" + cname() + "_SOURCES", shared_nodist_sources()) | |
362 | r += var_set(cname() + "_LDADD", platform_ldadd(platform)) | |
363 | r += var_set(cname() + "_CFLAGS", "$(AM_CFLAGS) $(CFLAGS_PROGRAM) " + platform_cflags(platform)) | |
364 | r += var_set(cname() + "_LDFLAGS", "$(AM_LDFLAGS) $(LDFLAGS_PROGRAM) " + platform_ldflags(platform)) | |
365 | r += var_set(cname() + "_CPPFLAGS", "$(AM_CPPFLAGS) $(CPPFLAGS_PROGRAM) " + platform_cppflags(platform)) | |
366 | r += var_set(cname() + "_CCASFLAGS", "$(AM_CCASFLAGS) $(CCASFLAGS_PROGRAM) " + platform_ccasflags(platform)) | |
367 | ||
368 | r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) | |
369 | r += gvar_add("BUILT_SOURCES", "$(nodist_" + cname() + "_SOURCES)") | |
370 | r += gvar_add("CLEANFILES", "$(nodist_" + cname() + "_SOURCES)") | |
371 | return r | |
372 | ||
373 | def data(platform): | |
374 | r = gvar_add("EXTRA_DIST", platform_sources(platform)) | |
375 | r += gvar_add("EXTRA_DIST", platform_extra_dist(platform)) | |
376 | r += gvar_add(installdir() + "_DATA", platform_sources(platform)) | |
377 | return r | |
378 | ||
379 | def script(platform): | |
380 | r = "[+ IF testcase defined +]" | |
381 | r += gvar_add("check_SCRIPTS", "[+ name +]") | |
382 | r += gvar_add ("TESTS", "[+ name +]") | |
383 | r += "[+ ELSE +]" | |
384 | r += gvar_add(installdir() + "_SCRIPTS", "[+ name +]") | |
385 | r += "[+ IF mansection +]" + manpage() + "[+ ENDIF +]" | |
386 | r += "[+ ENDIF +]" | |
387 | ||
388 | r += rule("[+ name +]", "$(top_builddir)/config.status " + platform_sources(platform), """ | |
389 | $(top_builddir)/config.status --file=-:""" + platform_sources(platform) + """ \ | |
390 | | sed -e 's,@pkglib_DATA@,$(pkglib_DATA),g' > $@ | |
391 | chmod a+x [+ name +] | |
392 | """) | |
393 | ||
394 | r += gvar_add("CLEANFILES", "[+ name +]") | |
395 | r += gvar_add("EXTRA_DIST", platform_sources(platform)) | |
396 | return r | |
397 | ||
398 | def module_rules(): | |
399 | return "[+ FOR module +]" + each_platform( | |
400 | lambda p: under_platform_specific_conditionals(p, module(p))) + "[+ ENDFOR +]" | |
401 | ||
402 | def kernel_rules(): | |
403 | return "[+ FOR kernel +]" + each_platform( | |
404 | lambda p: under_platform_specific_conditionals(p, kernel(p))) + "[+ ENDFOR +]" | |
405 | ||
406 | def image_rules(): | |
407 | return "[+ FOR image +]" + each_platform( | |
408 | lambda p: under_platform_specific_conditionals(p, image(p))) + "[+ ENDFOR +]" | |
409 | ||
410 | def library_rules(): | |
411 | return "[+ FOR library +]" + each_platform( | |
412 | lambda p: under_platform_specific_conditionals(p, library(p))) + "[+ ENDFOR +]" | |
413 | ||
414 | def program_rules(): | |
415 | return "[+ FOR program +]" + each_platform( | |
416 | lambda p: under_platform_specific_conditionals(p, program(p))) + "[+ ENDFOR +]" | |
417 | ||
418 | def script_rules(): | |
419 | return "[+ FOR script +]" + each_platform( | |
420 | lambda p: under_platform_specific_conditionals(p, script(p))) + "[+ ENDFOR +]" | |
421 | ||
422 | def data_rules(): | |
423 | return "[+ FOR data +]" + each_platform( | |
424 | lambda p: under_platform_specific_conditionals(p, data(p))) + "[+ ENDFOR +]" | |
425 | ||
426 | print "[+ AutoGen5 template +]\n" | |
427 | a = module_rules() | |
428 | b = kernel_rules() | |
429 | c = image_rules() | |
430 | d = library_rules() | |
431 | e = program_rules() | |
432 | f = script_rules() | |
433 | g = data_rules() | |
434 | z = global_variable_initializers() | |
435 | ||
436 | # print z # initializer for all vars | |
437 | print a | |
438 | print b | |
439 | print c | |
440 | print d | |
441 | print e | |
442 | print f | |
443 | print g | |
444 | ||
445 | print """.PRECIOUS: modules.am | |
446 | $(srcdir)/modules.am: $(srcdir)/modules.def $(top_srcdir)/Makefile.tpl | |
447 | autogen -T $(top_srcdir)/Makefile.tpl $(srcdir)/modules.def | sed -e '/^$$/{N;/^\\n$$/D;}' > $@.new || (rm -f $@.new; exit 1) | |
448 | mv $@.new $@ | |
449 | ||
450 | .PRECIOUS: $(top_srcdir)/Makefile.tpl | |
451 | $(top_srcdir)/Makefile.tpl: $(top_srcdir)/gentpl.py | |
452 | python $(top_srcdir)/gentpl.py | sed -e '/^$$/{N;/^\\n$$/D;}' > $@.new || (rm -f $@.new; exit 1) | |
453 | mv $@.new $@ | |
454 | """ |