]>
Commit | Line | Data |
---|---|---|
6a161fa9 | 1 | #! /usr/bin/ruby -w |
2 | # | |
58bc8bd5 | 3 | # Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc. |
6a161fa9 | 4 | # |
5 | # This genmk.rb is free software; the author | |
6 | # gives unlimited permission to copy and/or distribute it, | |
7 | # with or without modifications, as long as this notice is preserved. | |
8 | # | |
9 | # This program is distributed in the hope that it will be useful, | |
10 | # but WITHOUT ANY WARRANTY, to the extent permitted by law; without | |
11 | # even the implied warranty of MERCHANTABILITY or FITNESS FOR A | |
12 | # PARTICULAR PURPOSE. | |
13 | ||
14 | module Enumerable | |
15 | def collect_with_index | |
16 | ret = [] | |
17 | self.each_with_index do |item, index| | |
18 | ret.push(yield(item, index)) | |
19 | end | |
20 | ret | |
21 | end | |
22 | end | |
23 | ||
24 | class String | |
25 | def to_var | |
26 | self.gsub(/[^a-zA-Z0-9_@]/, '_') | |
27 | end | |
28 | ||
29 | def suffix(str) | |
30 | self.sub(/\.[^\.]*$/, '') + '.' + str | |
31 | end | |
32 | ||
33 | def to_obj | |
34 | self.sub(/\.[^\.]*$/, '').to_var + '.o' | |
35 | end | |
36 | end | |
37 | ||
38 | class Image | |
39 | def initialize(dir, name) | |
40 | @dir = dir | |
41 | @name = name | |
e8f5d6e9 | 42 | @rule_count = 0 |
6a161fa9 | 43 | end |
44 | attr_reader :dir, :name | |
45 | ||
46 | def rule(sources) | |
47 | prefix = @name.to_var | |
e8f5d6e9 | 48 | @rule_count += 1 |
6a161fa9 | 49 | exe = @name.suffix('exec') |
50 | objs = sources.collect do |src| | |
51 | raise "unknown source file `#{src}'" if /\.[cS]$/ !~ src | |
52 | prefix + '-' + src.to_obj | |
53 | end | |
54 | objs_str = objs.join(' ') | |
55 | deps = objs.collect {|obj| obj.suffix('d')} | |
56 | deps_str = deps.join(' ') | |
b39f9d20 | 57 | |
e8f5d6e9 | 58 | " |
59 | clean-image-#{@name}.#{@rule_count}: | |
60 | rm -f #{@name} #{exe} #{objs_str} | |
61 | ||
62 | CLEAN_IMAGE_TARGETS += clean-image-#{@name}.#{@rule_count} | |
63 | ||
64 | mostlyclean-image-#{@name}.#{@rule_count}: | |
65 | rm -f #{deps_str} | |
66 | ||
67 | MOSTLYCLEAN_IMAGE_TARGETS += mostlyclean-image-#{@name}.#{@rule_count} | |
6a161fa9 | 68 | |
e37ffc5c | 69 | ifneq ($(TARGET_APPLE_CC),1) |
6a161fa9 | 70 | #{@name}: #{exe} |
ad17a401 | 71 | $(OBJCOPY) -O $(#{prefix}_FORMAT) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn $< $@ |
e37ffc5c | 72 | else |
73 | ifneq (#{exe},kernel.exec) | |
74 | #{@name}: #{exe} ./grub-macho2img | |
75 | ./grub-macho2img $< $@ | |
76 | else | |
77 | #{@name}: #{exe} ./grub-macho2img | |
78 | ./grub-macho2img --bss $< $@ | |
79 | endif | |
80 | endif | |
6a161fa9 | 81 | |
82 | #{exe}: #{objs_str} | |
b977bf01 | 83 | $(TARGET_CC) -o $@ $^ $(TARGET_LDFLAGS) $(#{prefix}_LDFLAGS) |
6a161fa9 | 84 | |
85 | " + objs.collect_with_index do |obj, i| | |
86 | src = sources[i] | |
87 | fake_obj = File.basename(src).suffix('o') | |
88 | dep = deps[i] | |
0162321a | 89 | flag = if /\.c$/ =~ src then 'CFLAGS' else 'ASFLAGS' end |
6a161fa9 | 90 | extra_flags = if /\.S$/ =~ src then '-DASM_FILE=1' else '' end |
91 | dir = File.dirname(src) | |
b39f9d20 | 92 | |
7d31f41f | 93 | "#{obj}: #{src} $(#{src}_DEPENDENCIES) |
2d2a9cd5 | 94 | $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -DGRUB_FILE=\\\"#{src}\\\" -MD -c -o $@ $< |
6a161fa9 | 95 | -include #{dep} |
96 | ||
97 | " | |
98 | end.join('') | |
99 | end | |
100 | end | |
101 | ||
102 | # Use PModule instead Module, to avoid name conflicting. | |
103 | class PModule | |
104 | def initialize(dir, name) | |
105 | @dir = dir | |
106 | @name = name | |
e8f5d6e9 | 107 | @rule_count = 0 |
6a161fa9 | 108 | end |
109 | attr_reader :dir, :name | |
110 | ||
111 | def rule(sources) | |
112 | prefix = @name.to_var | |
e8f5d6e9 | 113 | @rule_count += 1 |
6a161fa9 | 114 | objs = sources.collect do |src| |
115 | raise "unknown source file `#{src}'" if /\.[cS]$/ !~ src | |
116 | prefix + '-' + src.to_obj | |
117 | end | |
118 | objs_str = objs.join(' ') | |
119 | deps = objs.collect {|obj| obj.suffix('d')} | |
120 | deps_str = deps.join(' ') | |
121 | pre_obj = 'pre-' + @name.suffix('o') | |
122 | mod_src = 'mod-' + @name.suffix('c') | |
123 | mod_obj = mod_src.suffix('o') | |
124 | defsym = 'def-' + @name.suffix('lst') | |
125 | undsym = 'und-' + @name.suffix('lst') | |
126 | mod_name = File.basename(@name, '.mod') | |
5822ff87 | 127 | symbolic_name = mod_name.sub(/\.[^\.]*$/, '') |
b39f9d20 | 128 | |
e8f5d6e9 | 129 | " |
130 | clean-module-#{@name}.#{@rule_count}: | |
131 | rm -f #{@name} #{mod_obj} #{mod_src} #{pre_obj} #{objs_str} #{undsym} | |
132 | ||
133 | CLEAN_MODULE_TARGETS += clean-module-#{@name}.#{@rule_count} | |
134 | ||
e8f5d6e9 | 135 | clean-module-#{@name}-symbol.#{@rule_count}: |
136 | rm -f #{defsym} | |
137 | ||
138 | CLEAN_MODULE_TARGETS += clean-module-#{@name}-symbol.#{@rule_count} | |
6a161fa9 | 139 | DEFSYMFILES += #{defsym} |
e8f5d6e9 | 140 | mostlyclean-module-#{@name}.#{@rule_count}: |
141 | rm -f #{deps_str} | |
142 | ||
143 | MOSTLYCLEAN_MODULE_TARGETS += mostlyclean-module-#{@name}.#{@rule_count} | |
6a161fa9 | 144 | UNDSYMFILES += #{undsym} |
145 | ||
f38873b8 | 146 | ifeq ($(TARGET_NO_MODULES), yes) |
ebe841ad VS |
147 | #{@name}: #{pre_obj} $(TARGET_OBJ2ELF) |
148 | -rm -f $@ | |
149 | $(TARGET_CC) $(#{prefix}_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@ #{pre_obj} | |
150 | if test ! -z \"$(TARGET_OBJ2ELF)\"; then ./$(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi | |
151 | if test x$(TARGET_NO_STRIP) != xyes ; then $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -K _grub_mod_init -K _grub_mod_fini -R .note -R .comment $@; fi | |
152 | else | |
cf00df31 | 153 | ifneq ($(TARGET_APPLE_CC),1) |
2a8a80e4 | 154 | #{@name}: #{pre_obj} #{mod_obj} $(TARGET_OBJ2ELF) |
6a161fa9 | 155 | -rm -f $@ |
3fcc2083 | 156 | $(TARGET_CC) $(#{prefix}_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@ #{pre_obj} #{mod_obj} |
31aba781 | 157 | if test ! -z \"$(TARGET_OBJ2ELF)\"; then ./$(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi |
c5160d75 | 158 | if test x$(TARGET_NO_STRIP) != xyes ; then $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -K _grub_mod_init -K _grub_mod_fini -R .note -R .comment $@; fi |
cf00df31 | 159 | else |
160 | #{@name}: #{pre_obj} #{mod_obj} $(TARGET_OBJ2ELF) | |
161 | -rm -f $@ | |
162 | -rm -f $@.bin | |
163 | $(TARGET_CC) $(#{prefix}_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@.bin #{pre_obj} #{mod_obj} | |
969d1c78 | 164 | $(OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -wd1106 -ew2030 -ew2050 -nu -nd $@.bin $@ |
cf00df31 | 165 | -rm -f $@.bin |
166 | endif | |
ebe841ad | 167 | endif |
6a161fa9 | 168 | |
e02ac02c | 169 | #{pre_obj}: $(#{prefix}_DEPENDENCIES) #{objs_str} |
6a161fa9 | 170 | -rm -f $@ |
e02ac02c | 171 | $(TARGET_CC) $(#{prefix}_LDFLAGS) $(TARGET_LDFLAGS) -Wl,-r,-d -o $@ #{objs_str} |
6a161fa9 | 172 | |
173 | #{mod_obj}: #{mod_src} | |
2d2a9cd5 | 174 | $(TARGET_CC) $(TARGET_CPPFLAGS) $(TARGET_CFLAGS) $(#{prefix}_CFLAGS) -DGRUB_FILE=\\\"#{mod_src}\\\" -c -o $@ $< |
6a161fa9 | 175 | |
926b9823 | 176 | #{mod_src}: $(builddir)/moddep.lst $(srcdir)/genmodsrc.sh |
6a161fa9 | 177 | sh $(srcdir)/genmodsrc.sh '#{mod_name}' $< > $@ || (rm -f $@; exit 1) |
178 | ||
2b167a72 | 179 | ifneq ($(TARGET_APPLE_CC),1) |
6a161fa9 | 180 | #{defsym}: #{pre_obj} |
181 | $(NM) -g --defined-only -P -p $< | sed 's/^\\([^ ]*\\).*/\\1 #{mod_name}/' > $@ | |
2b167a72 | 182 | else |
183 | #{defsym}: #{pre_obj} | |
184 | $(NM) -g -P -p $< | grep -E '^[a-zA-Z0-9_]* [TDS]' | sed 's/^\\([^ ]*\\).*/\\1 #{mod_name}/' > $@ | |
185 | endif | |
6a161fa9 | 186 | |
187 | #{undsym}: #{pre_obj} | |
188 | echo '#{mod_name}' > $@ | |
98d15063 | 189 | $(NM) -u -P -p $< | cut -f1 -d' ' >> $@ |
6a161fa9 | 190 | |
191 | " + objs.collect_with_index do |obj, i| | |
192 | src = sources[i] | |
193 | fake_obj = File.basename(src).suffix('o') | |
e8f5d6e9 | 194 | extra_target = obj.sub(/\.[^\.]*$/, '') + '-extra' |
233b1628 | 195 | command = 'cmd-' + obj.suffix('lst') |
196 | fs = 'fs-' + obj.suffix('lst') | |
58cd3d85 | 197 | partmap = 'partmap-' + obj.suffix('lst') |
d05f0df3 | 198 | handler = 'handler-' + obj.suffix('lst') |
33c1ed4c | 199 | terminal = 'terminal-' + obj.suffix('lst') |
e4343593 | 200 | parttool = 'parttool-' + obj.suffix('lst') |
dc0c71d9 | 201 | video = 'video-' + obj.suffix('lst') |
6a161fa9 | 202 | dep = deps[i] |
0162321a | 203 | flag = if /\.c$/ =~ src then 'CFLAGS' else 'ASFLAGS' end |
54b71c4b | 204 | extra_flags = if /\.S$/ =~ src then '-DASM_FILE=1' else '' end |
6a161fa9 | 205 | dir = File.dirname(src) |
206 | ||
7d31f41f | 207 | "#{obj}: #{src} $(#{src}_DEPENDENCIES) |
2d2a9cd5 | 208 | $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -DGRUB_FILE=\\\"#{src}\\\" -MD -c -o $@ $< |
6a161fa9 | 209 | -include #{dep} |
210 | ||
e8f5d6e9 | 211 | clean-module-#{extra_target}.#{@rule_count}: |
a8efbf64 | 212 | rm -f #{command} #{fs} #{partmap} #{handler} #{parttool} #{video} #{terminal} |
e8f5d6e9 | 213 | |
214 | CLEAN_MODULE_TARGETS += clean-module-#{extra_target}.#{@rule_count} | |
215 | ||
7b1f4b57 | 216 | COMMANDFILES += #{command} |
39c9d41d | 217 | FSFILES += #{fs} |
e4343593 | 218 | PARTTOOLFILES += #{parttool} |
58cd3d85 | 219 | PARTMAPFILES += #{partmap} |
d05f0df3 | 220 | HANDLERFILES += #{handler} |
33c1ed4c | 221 | TERMINALFILES += #{terminal} |
dc0c71d9 | 222 | VIDEOFILES += #{video} |
7b1f4b57 | 223 | |
7d31f41f | 224 | #{command}: #{src} $(#{src}_DEPENDENCIES) gencmdlist.sh |
7b1f4b57 | 225 | set -e; \ |
e4dd5a7e | 226 | $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -E $< \ |
5822ff87 | 227 | | sh $(srcdir)/gencmdlist.sh #{symbolic_name} > $@ || (rm -f $@; exit 1) |
7b1f4b57 | 228 | |
7d31f41f | 229 | #{fs}: #{src} $(#{src}_DEPENDENCIES) genfslist.sh |
39c9d41d | 230 | set -e; \ |
e4dd5a7e | 231 | $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -E $< \ |
39c9d41d | 232 | | sh $(srcdir)/genfslist.sh #{symbolic_name} > $@ || (rm -f $@; exit 1) |
233 | ||
e4343593 | 234 | #{parttool}: #{src} $(#{src}_DEPENDENCIES) genparttoollist.sh |
235 | set -e; \ | |
236 | $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -E $< \ | |
237 | | sh $(srcdir)/genparttoollist.sh #{symbolic_name} > $@ || (rm -f $@; exit 1) | |
238 | ||
58cd3d85 | 239 | #{partmap}: #{src} $(#{src}_DEPENDENCIES) genpartmaplist.sh |
240 | set -e; \ | |
e4dd5a7e | 241 | $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -E $< \ |
58cd3d85 | 242 | | sh $(srcdir)/genpartmaplist.sh #{symbolic_name} > $@ || (rm -f $@; exit 1) |
243 | ||
d05f0df3 | 244 | #{handler}: #{src} $(#{src}_DEPENDENCIES) genhandlerlist.sh |
245 | set -e; \ | |
246 | $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -E $< \ | |
247 | | sh $(srcdir)/genhandlerlist.sh #{symbolic_name} > $@ || (rm -f $@; exit 1) | |
39c9d41d | 248 | |
27a8ee52 | 249 | #{terminal}: #{src} $(#{src}_DEPENDENCIES) genterminallist.sh |
33c1ed4c VS |
250 | set -e; \ |
251 | $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -E $< \ | |
252 | | sh $(srcdir)/genterminallist.sh #{symbolic_name} > $@ || (rm -f $@; exit 1) | |
253 | ||
dc0c71d9 RM |
254 | #{video}: #{src} $(#{src}_DEPENDENCIES) genvideolist.sh |
255 | set -e; \ | |
256 | $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -E $< \ | |
257 | | sh $(srcdir)/genvideolist.sh #{symbolic_name} > $@ || (rm -f $@; exit 1) | |
258 | ||
6a161fa9 | 259 | " |
260 | end.join('') | |
261 | end | |
262 | end | |
263 | ||
264 | class Utility | |
265 | def initialize(dir, name) | |
266 | @dir = dir | |
267 | @name = name | |
e8f5d6e9 | 268 | @rule_count = 0 |
6a161fa9 | 269 | end |
94414221 | 270 | def print_tail() |
271 | prefix = @name.to_var | |
272 | print "#{@name}: $(#{prefix}_DEPENDENCIES) $(#{prefix}_OBJECTS) | |
273 | $(CC) -o $@ $(#{prefix}_OBJECTS) $(LDFLAGS) $(#{prefix}_LDFLAGS) | |
274 | ||
275 | " | |
276 | end | |
6a161fa9 | 277 | attr_reader :dir, :name |
278 | ||
279 | def rule(sources) | |
280 | prefix = @name.to_var | |
e8f5d6e9 | 281 | @rule_count += 1 |
6a161fa9 | 282 | objs = sources.collect do |src| |
e56cdf21 | 283 | raise "unknown source file `#{src}'" if /\.[cS]$/ !~ src |
6a161fa9 | 284 | prefix + '-' + src.to_obj |
285 | end | |
286 | objs_str = objs.join(' '); | |
287 | deps = objs.collect {|obj| obj.suffix('d')} | |
288 | deps_str = deps.join(' '); | |
289 | ||
e8f5d6e9 | 290 | " |
291 | clean-utility-#{@name}.#{@rule_count}: | |
292 | rm -f #{@name}$(EXEEXT) #{objs_str} | |
293 | ||
294 | CLEAN_UTILITY_TARGETS += clean-utility-#{@name}.#{@rule_count} | |
295 | ||
296 | mostlyclean-utility-#{@name}.#{@rule_count}: | |
297 | rm -f #{deps_str} | |
298 | ||
299 | MOSTLYCLEAN_UTILITY_TARGETS += mostlyclean-utility-#{@name}.#{@rule_count} | |
300 | ||
94414221 | 301 | #{prefix}_OBJECTS += #{objs_str} |
6a161fa9 | 302 | |
303 | " + objs.collect_with_index do |obj, i| | |
304 | src = sources[i] | |
305 | fake_obj = File.basename(src).suffix('o') | |
306 | dep = deps[i] | |
307 | dir = File.dirname(src) | |
308 | ||
38da6516 | 309 | "#{obj}: #{src} $(#{src}_DEPENDENCIES) |
2d2a9cd5 | 310 | $(CC) -I#{dir} -I$(srcdir)/#{dir} $(CPPFLAGS) $(CFLAGS) -DGRUB_UTIL=1 $(#{prefix}_CFLAGS) -DGRUB_FILE=\\\"#{src}\\\" -MD -c -o $@ $< |
6a161fa9 | 311 | -include #{dep} |
312 | ||
313 | " | |
314 | end.join('') | |
315 | end | |
316 | end | |
317 | ||
924b6140 | 318 | class Program |
319 | def initialize(dir, name) | |
320 | @dir = dir | |
321 | @name = name | |
322 | end | |
323 | attr_reader :dir, :name | |
324 | ||
f38873b8 VS |
325 | def print_tail() |
326 | prefix = @name.to_var | |
327 | print "CLEANFILES += #{@name} $(#{prefix}_OBJECTS) | |
328 | ifeq ($(#{prefix}_RELOCATABLE),yes) | |
329 | #{@name}: $(#{prefix}_DEPENDENCIES) $(#{prefix}_OBJECTS) | |
330 | $(TARGET_CC) -Wl,-r,-d -o $@ $(#{prefix}_OBJECTS) $(TARGET_LDFLAGS) $(#{prefix}_LDFLAGS) | |
331 | if test x$(TARGET_NO_STRIP) != xyes ; then $(STRIP) --strip-unneeded -K start -R .note -R .comment $@; fi | |
332 | else | |
333 | #{@name}: $(#{prefix}_DEPENDENCIES) $(#{prefix}_OBJECTS) | |
334 | $(TARGET_CC) -o $@ $(#{prefix}_OBJECTS) $(TARGET_LDFLAGS) $(#{prefix}_LDFLAGS) | |
335 | if test x$(TARGET_NO_STRIP) != xyes ; then $(STRIP) -R .rel.dyn -R .reginfo -R .note -R .comment $@; fi | |
336 | endif | |
337 | ||
338 | " | |
339 | end | |
340 | ||
924b6140 | 341 | def rule(sources) |
342 | prefix = @name.to_var | |
343 | objs = sources.collect do |src| | |
344 | raise "unknown source file `#{src}'" if /\.[cS]$/ !~ src | |
345 | prefix + '-' + src.to_obj | |
346 | end | |
924b6140 | 347 | deps = objs.collect {|obj| obj.suffix('d')} |
348 | deps_str = deps.join(' '); | |
349 | ||
f38873b8 | 350 | "MOSTLYCLEANFILES += #{deps_str} |
924b6140 | 351 | |
352 | " + objs.collect_with_index do |obj, i| | |
353 | src = sources[i] | |
354 | fake_obj = File.basename(src).suffix('o') | |
355 | dep = deps[i] | |
15355c7d | 356 | flag = if /\.c$/ =~ src then 'CFLAGS' else 'ASFLAGS' end |
357 | extra_flags = if /\.S$/ =~ src then '-DASM_FILE=1' else '' end | |
924b6140 | 358 | dir = File.dirname(src) |
359 | ||
7d31f41f | 360 | "#{obj}: #{src} $(#{src}_DEPENDENCIES) |
2d2a9cd5 | 361 | $(TARGET_CC) -I#{dir} -I$(srcdir)/#{dir} $(TARGET_CPPFLAGS) #{extra_flags} $(TARGET_#{flag}) $(#{prefix}_#{flag}) -DGRUB_FILE=\\\"#{src}\\\" -MD -c -o $@ $< |
ffa9860a | 362 | |
924b6140 | 363 | -include #{dep} |
364 | ||
f38873b8 | 365 | #{prefix}_OBJECTS += #{obj} |
924b6140 | 366 | " |
367 | end.join('') | |
368 | end | |
369 | end | |
370 | ||
075a1650 | 371 | class Script |
372 | def initialize(dir, name) | |
373 | @dir = dir | |
374 | @name = name | |
375 | end | |
376 | attr_reader :dir, :name | |
377 | ||
378 | def rule(sources) | |
379 | if sources.length != 1 | |
380 | raise "only a single source file must be specified for a script" | |
381 | end | |
382 | src = sources[0] | |
383 | if /\.in$/ !~ src | |
b39f9d20 | 384 | raise "unknown source file `#{src}'" |
075a1650 | 385 | end |
386 | ||
387 | "CLEANFILES += #{@name} | |
388 | ||
7d31f41f | 389 | #{@name}: #{src} $(#{src}_DEPENDENCIES) config.status |
e15c215e | 390 | ./config.status --file=-:#{src} | sed -e 's,@pkglib_DATA@,$(pkglib_DATA),g' > $@ |
f4917dfd | 391 | chmod +x $@ |
075a1650 | 392 | |
393 | " | |
394 | end | |
395 | end | |
396 | ||
6a161fa9 | 397 | images = [] |
398 | utils = [] | |
399 | pmodules = [] | |
924b6140 | 400 | programs = [] |
075a1650 | 401 | scripts = [] |
6a161fa9 | 402 | |
cfd0b4e6 | 403 | l = gets |
404 | print l | |
405 | print "# Generated by genmk.rb, please don't edit!\n" | |
406 | ||
6a161fa9 | 407 | cont = false |
f0f8bbe2 | 408 | str = nil |
6a161fa9 | 409 | while l = gets |
410 | if cont | |
f0f8bbe2 | 411 | str += l |
6a161fa9 | 412 | else |
f0f8bbe2 | 413 | str = l |
6a161fa9 | 414 | end |
415 | ||
416 | print l | |
417 | cont = (/\\$/ =~ l) | |
418 | unless cont | |
f0f8bbe2 | 419 | str.gsub!(/\\\n/, ' ') |
b39f9d20 | 420 | |
f0f8bbe2 | 421 | if /^([a-zA-Z0-9_]+)\s*\+?=\s*(.*?)\s*$/ =~ str |
6a161fa9 | 422 | var, args = $1, $2 |
423 | ||
424 | if var =~ /^([a-zA-Z0-9_]+)_([A-Z]+)$/ | |
425 | prefix, type = $1, $2 | |
426 | ||
427 | case type | |
428 | when 'IMAGES' | |
429 | images += args.split(/\s+/).collect do |img| | |
430 | Image.new(prefix, img) | |
431 | end | |
432 | ||
433 | when 'MODULES' | |
434 | pmodules += args.split(/\s+/).collect do |pmod| | |
435 | PModule.new(prefix, pmod) | |
436 | end | |
b39f9d20 | 437 | |
6a161fa9 | 438 | when 'UTILITIES' |
439 | utils += args.split(/\s+/).collect do |util| | |
440 | Utility.new(prefix, util) | |
441 | end | |
442 | ||
924b6140 | 443 | when 'PROGRAMS' |
075a1650 | 444 | programs += args.split(/\s+/).collect do |prog| |
445 | Program.new(prefix, prog) | |
446 | end | |
447 | ||
448 | when 'SCRIPTS' | |
449 | scripts += args.split(/\s+/).collect do |script| | |
450 | Script.new(prefix, script) | |
924b6140 | 451 | end |
452 | ||
6a161fa9 | 453 | when 'SOURCES' |
454 | if img = images.detect() {|i| i.name.to_var == prefix} | |
455 | print img.rule(args.split(/\s+/)) | |
456 | elsif pmod = pmodules.detect() {|m| m.name.to_var == prefix} | |
457 | print pmod.rule(args.split(/\s+/)) | |
458 | elsif util = utils.detect() {|u| u.name.to_var == prefix} | |
459 | print util.rule(args.split(/\s+/)) | |
924b6140 | 460 | elsif program = programs.detect() {|u| u.name.to_var == prefix} |
461 | print program.rule(args.split(/\s+/)) | |
075a1650 | 462 | elsif script = scripts.detect() {|s| s.name.to_var == prefix} |
463 | print script.rule(args.split(/\s+/)) | |
6a161fa9 | 464 | end |
465 | end | |
466 | end | |
b39f9d20 | 467 | |
6a161fa9 | 468 | end |
b39f9d20 | 469 | |
6a161fa9 | 470 | end |
b39f9d20 | 471 | |
6a161fa9 | 472 | end |
94414221 | 473 | utils.each {|util| util.print_tail()} |
f38873b8 | 474 | programs.each {|program| program.print_tail()} |
6a161fa9 | 475 |