Class: Kaitai::Struct::Visualizer::ExternalCompilerVisualizer

Inherits:
Visualizer
  • Object
show all
Defined in:
lib/kaitai/struct/visualizer/visualizer_main.rb

Instance Method Summary collapse

Methods inherited from Visualizer

#initialize, #run

Constructor Details

This class inherits a constructor from Kaitai::Struct::Visualizer::Visualizer

Instance Method Details

#compile_format(fn) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/kaitai/struct/visualizer/visualizer_main.rb', line 8

def compile_format(fn)
  main_class_name = nil
  Dir.mktmpdir { |code_dir|
    args = ['--debug', '-t', 'ruby', fn, '-d', code_dir]

    # UNIX-based systems run ksc via a shell wrapper that requires
    # extra '--' in invocation to disambiguate our '-d' from java runner
    # '-d' (which allows to pass defines to JVM). Windows-based systems
    # do not need and do not support this extra '--', so we don't add it
    # on Windows.
    args.unshift('--') unless Kaitai::TUI::is_windows?

    system('kaitai-struct-compiler', *args)
    if $?.exitstatus != 0
      st = $?.exitstatus
      $stderr.puts("ksv: unable to find and execute kaitai-struct-compiler in your PATH") if st == 127
      exit st
    end

    puts "Compilation OK"

    compiled_path = Dir.glob("#{code_dir}/*.rb")[0]

    require compiled_path

    puts "Class loaded OK"

    main_class_name = File.readlines(compiled_path).grep(/^class /)[0].strip.gsub(/^class /, '').gsub(/ <.*$/, '')
  }

  return main_class_name
end