summaryrefslogtreecommitdiffhomepage
path: root/lib
diff options
context:
space:
mode:
authorWataru Ashihara <[email protected]>2020-09-17 19:51:24 +0900
committerWataru Ashihara <[email protected]>2020-09-17 20:02:55 +0900
commite8723a4f3f604135cd32cf926acd26eb46b905ff (patch)
treee653f68a3ffe00a643891f6f91975ba3970077c6 /lib
parent5bfb70e9dbc8636730bab7725b3eaf5423a2e30f (diff)
downloadmruby-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.rb26
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