diff options
| author | Wataru Ashihara <[email protected]> | 2020-09-17 19:51:24 +0900 |
|---|---|---|
| committer | Wataru Ashihara <[email protected]> | 2020-09-17 20:02:55 +0900 |
| commit | e8723a4f3f604135cd32cf926acd26eb46b905ff (patch) | |
| tree | e653f68a3ffe00a643891f6f91975ba3970077c6 /lib | |
| parent | 5bfb70e9dbc8636730bab7725b3eaf5423a2e30f (diff) | |
| download | mruby-e8723a4f3f604135cd32cf926acd26eb46b905ff.tar.gz mruby-e8723a4f3f604135cd32cf926acd26eb46b905ff.zip | |
Fix *.d parsing with gcc 9.3.0
Before this commit:
$ rake
...
$ rm build/host/src/gc.o
$ rake
rake aborted!
Don't know how to build task '/home/foo/mruby/build/host/src/gc.o' (See the list of available tasks with `rake --tasks`)
...
After this commit:
$ rake
...
$ rm build/host/src/gc.o
$ rake
CC src/gc.c -> build/host/src/gc.o
...
With gcc 9.3.0 on Ubuntu 20.04, build/host/src/array.d looks like:
/build/host/src/array.o: /src/array.c \
/include/mruby.h /include/mrbconf.h \
/include/mruby/common.h \
...
/include/mruby/range.h \
/src/value_array.h
and it has been parsed to:
[
# /src/array.c missing
"/include/mruby.h /include/mrbconf.h", # incorrectly parsed
"/include/mruby/common.h",
...
"/src/value_array.h",
]
After this change, *.d will be parsed correctly.
[
"/src/array.c",
"/include/mruby.h",
"/include/mrbconf.h",
"/include/mruby/common.h",
...
"/src/value_array.h",
]
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/mruby/build/command.rb | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/lib/mruby/build/command.rb b/lib/mruby/build/command.rb index bed0c3a6a..870a8dc20 100644 --- a/lib/mruby/build/command.rb +++ b/lib/mruby/build/command.rb @@ -139,6 +139,15 @@ module MRuby # /include/mruby/value.h \ # /src/value_array.h # + # ==== Without <tt>-MP</tt> compiler flag (gcc (Ubuntu 9.3.0-10ubuntu2) 9.3.0) + # + # /build/host/src/array.o: /src/array.c \ + # /include/mruby.h /include/mrbconf.h \ + # /include/mruby/common.h \ + # ... + # /include/mruby/range.h \ + # /src/value_array.h + # # ==== With <tt>-MP</tt> compiler flag # # /build/host/src/array.o: \ @@ -155,11 +164,18 @@ module MRuby # def get_dependencies(file) file = file.ext('d') unless File.extname(file) == '.d' - deps = [] - if File.exist?(file) - File.foreach(file){|line| deps << $1 if /^ +(.*?)(?: *\\)?$/ =~ line} - deps.uniq! - end + return [MRUBY_CONFIG] unless File.exist?(file) + + deps = "".gsub("\\\n ", "").split("\n").map do |dep_line| + # dep_line: + # - "/build/host/src/array.o: /src/array.c /include/mruby/common.h ..." + # - "" + # - "/include/mruby/common.h:" + dep_line.scan(/^\S+:\s+(.+)$/).flatten.map { |s| s.split(' ') }.flatten + # => ["/src/array.c", "/include/mruby/common.h" , ...] + # [] + # [] + end.flatten.uniq deps << MRUBY_CONFIG end end |
