diff options
author | Takashi Kokubun <takashikkbn@gmail.com> | 2020-03-23 22:31:38 -0700 |
---|---|---|
committer | Takashi Kokubun <takashikkbn@gmail.com> | 2020-03-23 22:33:01 -0700 |
commit | 5b3157a51177b56fd79d4f4e3cb08e0a6459944f (patch) | |
tree | d8161051c4e3d4e8a698cb7e400cd62194280d80 /tool/mjit_tabs.rb | |
parent | 6ab3664635aae9c35c207fb570e14740d8383444 (diff) |
Make file names and variable names consistent
Diffstat (limited to 'tool/mjit_tabs.rb')
-rw-r--r-- | tool/mjit_tabs.rb | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/tool/mjit_tabs.rb b/tool/mjit_tabs.rb new file mode 100644 index 0000000000..8b91af2479 --- /dev/null +++ b/tool/mjit_tabs.rb @@ -0,0 +1,65 @@ +# 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. You can enable +# this feature by passing `--without-mjit-tabs` in configure. +# +# 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' + +EXPAND_TARGETS = %w[ + vm*.* + include/ruby/ruby.h +] + +# These files have no hard tab indentations. Skip normalizing these files from the glob result. +SKIPPED_FILES = %w[ + vm_callinfo.h + vm_debug.h + vm_exec.h + vm_opts.h +] + +srcdir = File.expand_path('..', __dir__) +targets = EXPAND_TARGETS.flat_map { |t| Dir.glob(File.join(srcdir, t)) } - SKIPPED_FILES.map { |f| File.join(srcdir, f) } +sources = {} +mtimes = {} + +mjit_tabs, *command = ARGV + +targets.each do |target| + next if mjit_tabs != 'false' + unless File.writable?(target) + puts "tool/mjit_without_tabs.rb: Skipping #{target.dump} as it's not writable." + next + end + source = File.read(target) + begin + expanded = source.gsub(/^\t+/) { |tab| ' ' * 8 * tab.length } + rescue ArgumentError # invalid byte sequence in UTF-8 (Travis, RubyCI) + puts "tool/mjit_without_tabs.rb: Skipping #{target.dump} as the encoding is #{source.encoding}." + next + end + + sources[target] = source + mtimes[target] = File.mtime(target) + + if sources[target] == expanded + puts "#{target.dump} has no hard tab indentation. This should be ignored in tool/mjit_without_tabs.rb." + end + File.write(target, expanded) + FileUtils.touch(target, mtime: mtimes[target]) +end + +result = system(*command) + +targets.each do |target| + if sources.key?(target) + File.write(target, sources[target]) + FileUtils.touch(target, mtime: mtimes.fetch(target)) + end +end + +exit result |