diff options
author | Takashi Kokubun <takashikkbn@gmail.com> | 2020-03-23 03:50:45 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-22 11:50:45 -0700 |
commit | 9ebf74fd7843c34eda59f228fc34ab73f2cc458d (patch) | |
tree | f03b85433a1a5bed50f9e507fdc8ed9ce76a63ec /tool | |
parent | 1c056829298479168cf4db8f1ebdd248149fef70 (diff) | |
download | ruby-9ebf74fd7843c34eda59f228fc34ab73f2cc458d.tar.gz |
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.
Diffstat (limited to 'tool')
-rw-r--r-- | tool/run_without_tabs.rb | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/tool/run_without_tabs.rb b/tool/run_without_tabs.rb new file mode 100644 index 0000000000..bf74468939 --- /dev/null +++ b/tool/run_without_tabs.rb @@ -0,0 +1,47 @@ +# 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 |