summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Kokubun <takashikkbn@gmail.com>2020-03-22 00:12:21 -0700
committerTakashi Kokubun <takashikkbn@gmail.com>2020-03-22 00:37:31 -0700
commit57119dd561418c917b885db5f5af7f129a96d1ec (patch)
treea76be1c70bd4ac3a9fc1c36a0bddebae0301cc17
parent0bed561f6a8cd5696b182ae361e2bbbfe9fa6df1 (diff)
Expand tabs for rb_mjit_header.h
I can't live without this when using gdb or perf report. See also: [Misc #16112]
-rw-r--r--common.mk5
-rw-r--r--tool/run_without_tabs.rb35
2 files changed, 38 insertions, 2 deletions
diff --git a/common.mk b/common.mk
index 8182eb7..2593713 100644
--- a/common.mk
+++ b/common.mk
@@ -224,9 +224,10 @@ mjit_config.h: Makefile
# Other `-Dxxx`s preceding `-DMJIT_HEADER` will be removed in transform_mjit_header.rb.
# So `-DMJIT_HEADER` should be passed first when rb_mjit_header.h is generated.
$(TIMESTAMPDIR)/$(MJIT_HEADER:.h=)$(MJIT_HEADER_SUFFIX).time: probes.h vm.$(OBJEXT) \
- $(TIMESTAMPDIR)/$(arch)/.time
+ $(TIMESTAMPDIR)/$(arch)/.time $(srcdir)/tool/run_without_tabs.rb
$(ECHO) building $(@F:.time=.h)
- $(Q) $(CPP) -DMJIT_HEADER $(MJIT_HEADER_FLAGS) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(srcdir)/vm.c $(CPPOUTFLAG)$(@F:.time=.h).new
+ $(Q) $(BASERUBY) $(srcdir)/tool/run_without_tabs.rb \
+ $(CPP) -DMJIT_HEADER $(MJIT_HEADER_FLAGS) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(srcdir)/vm.c $(CPPOUTFLAG)$(@F:.time=.h).new
$(Q) $(IFCHANGE) "--timestamp=$@" $(@F:.time=.h) $(@F:.time=.h).new
$(MJIT_HEADER:.h=)$(MJIT_HEADER_SUFFIX).h: $(TIMESTAMPDIR)/$(MJIT_HEADER:.h=)$(MJIT_HEADER_SUFFIX).time
diff --git a/tool/run_without_tabs.rb b/tool/run_without_tabs.rb
new file mode 100644
index 0000000..0ac21f9
--- /dev/null
+++ b/tool/run_without_tabs.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+# This is a script to run a command in ARGV, expanding tabs in some files
+# included by vm.c to normalize indentation of MJIT header.
+#
+# Note that preprocessor of GCC converts a hard tab to one spaces, where
+# we expect it to be shown as 8 spaces. To obviate this script, we need
+# to convert all tabs to spaces in these files.
+
+require 'fileutils'
+
+srcdir = File.expand_path('..', __dir__)
+targets = Dir.glob(File.join(srcdir, 'vm*.*'))
+sources = {}
+mtimes = {}
+
+targets.each do |target|
+ sources[target] = File.read(target)
+ mtimes[target] = File.mtime(target)
+
+ expanded = sources[target].gsub(/^\t+/) { |tab| ' ' * 8 * tab.length }
+ if sources[target] == expanded
+ puts "#{target.dump} has no hard tab indentation. This should be ignored in tool/run_without_tabs.rb."
+ end
+ File.write(target, expanded)
+ FileUtils.touch(target, mtime: mtimes[target])
+end
+
+result = system(*ARGV)
+
+targets.each do |target|
+ File.write(target, sources.fetch(target))
+ FileUtils.touch(target, mtime: mtimes.fetch(target))
+end
+
+exit result