From e8723a4f3f604135cd32cf926acd26eb46b905ff Mon Sep 17 00:00:00 2001 From: Wataru Ashihara Date: Thu, 17 Sep 2020 19:51:24 +0900 Subject: 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", ] --- lib/mruby/build/command.rb | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'lib') 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 -MP 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 -MP 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 -- cgit v1.2.3