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