[前][次][番号順一覧][スレッド一覧]

ruby-changes:60476

From: Takashi <ko1@a...>
Date: Mon, 23 Mar 2020 03:51:01 +0900 (JST)
Subject: [ruby-changes:60476] 9ebf74fd78 (master): Expand tabs for rb_mjit_header.h (#2975)

https://git.ruby-lang.org/ruby.git/commit/?id=9ebf74fd78

From 9ebf74fd7843c34eda59f228fc34ab73f2cc458d Mon Sep 17 00:00:00 2001
From: Takashi Kokubun <takashikkbn@g...>
Date: Mon, 23 Mar 2020 03:50:45 +0900
Subject: Expand tabs for rb_mjit_header.h (#2975)

This is necessary to avoid converting a hard tab to just 1 space in
preprocessor to generate rb_mjit_header.h, which is helpful when using
gdb or perf report.

See also: [Misc #16112]

This reverts commit 91acdd17c4b4bb69a8fa3ada46e09dad46b9362e.
Fixed permission failure on Travis, encoding, and added SKIPPED_FILES.

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 https://github.com/ruby/ruby/blob/trunk/common.mk#L224
 # 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..bf74468
--- /dev/null
+++ b/tool/run_without_tabs.rb
@@ -0,0 +1,47 @@ https://github.com/ruby/ruby/blob/trunk/tool/run_without_tabs.rb#L1
+# 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'
+
+# These files have no hard tab indentations. Skip normalizing these files.
+SKIPPED_FILES = %w[
+  vm_callinfo.h
+  vm_debug.h
+  vm_exec.h
+  vm_opts.h
+]
+
+srcdir = File.expand_path('..', __dir__)
+targets = Dir.glob(File.join(srcdir, 'vm*.*')) - SKIPPED_FILES.map { |f| File.join(srcdir, f) }
+sources = {}
+mtimes = {}
+
+if skip = targets.any? { |target| !File.writable?(target) }
+  puts "tool/run_without_tabs.rb: srcdir has non-writable files. Skipping tab expansion."
+end
+
+targets.each do |target|
+  sources[target] = File.read(target)
+  mtimes[target] = File.mtime(target)
+
+  expanded = sources[target].force_encoding('UTF-8').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 unless skip
+
+result = system(*ARGV)
+
+targets.each do |target|
+  File.write(target, sources.fetch(target))
+  FileUtils.touch(target, mtime: mtimes.fetch(target))
+end unless skip
+
+exit result
-- 
cgit v0.10.2


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]