Module: AntlrGemerator
- Defined in:
- lib/antlr-gemerator.rb,
lib/antlr-gemerator/version.rb,
lib/antlr-gemerator/template.rb
Defined Under Namespace
Classes: Template
Constant Summary collapse
- VERSION =
'2.1.0'
Class Method Summary collapse
Class Method Details
.create(options) ⇒ Object
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/antlr-gemerator.rb', line 9 def create() root_dir = '.' lib_dir = File.join(root_dir, 'lib') ext_dir = File.join(root_dir, 'ext') # ANTLR does weird things if the grammar file isn't in the current # working directory grammars = [:grammar].map do |g| local_g = File.join(root_dir, File.basename(g)) FileUtils.cp(g, local_g) local_g end generator = Antlr4Native::Generator.new( grammar_files: grammars, output_dir: ext_dir, parser_root_method: [:root] ) bindings = { gem_name: generator.gem_name, ext_name: generator.ext_name, gem_namespace: generator.capitalize(generator.parser_ns), gem_author_name: [:author], gem_author_email: [:email], gem_homepage: [:homepage] || '', gem_description: [:desc], grammar_files_array: grammars, root_method: [:root] } # root level files render 'gitignore.erb', File.join(root_dir, '.gitignore'), bindings render 'Gemfile.erb', File.join(root_dir, 'Gemfile'), bindings render 'gemspec.erb', File.join(root_dir, "#{bindings[:gem_name]}.gemspec"), bindings render 'Rakefile.erb', File.join(root_dir, 'Rakefile'), bindings # lib mkdir File.join(lib_dir, bindings[:gem_name]) render 'entrypoint.rb.erb', File.join(lib_dir, "#{bindings[:gem_name]}.rb"), bindings render 'version.rb.erb', File.join(lib_dir, bindings[:gem_name], 'version.rb'), bindings # ext antlr_version = Antlr4Native::Generator::ANTLR_VERSION antlr_upstream_dir = File.join(ext_dir, bindings[:gem_name], 'antlr4-upstream') mkdir File.join(ext_dir, bindings[:gem_name]) extension_dir = File.join(ext_dir, bindings[:gem_name]) extconf_path = File.join(extension_dir, 'extconf.rb') render 'extconf.rb.erb', extconf_path, bindings run 'git init', root_dir # git is very stupid and won't let me pass a tag to git submodule add run "git submodule add https://github.com/antlr/antlr4 #{antlr_upstream_dir}", root_dir Dir.chdir(antlr_upstream_dir) { run "git checkout #{antlr_version}" } generator.generate bx 'bundle install', root_dir # build bx "ruby extconf.rb", extension_dir run "make -j #{Etc.nprocessors}", extension_dir end |