kompo 0.1.4 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/README.md +2 -3
 - data/exe/kompo +1 -11
 - data/lib/kompo/version.rb +1 -1
 - data/lib/kompo.rb +94 -25
 - data/lib/main.c.erb +12 -6
 - metadata +17 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 824cb5818444206e527f8a70d899c53b922f05a2ee44b1433b9103e2bc00dec9
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: bc82fea90c7f254f3f1e2221cadd4dedb9ec0e0c64ae4a68163e5784a0de35d1
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 164750a94ce03e80d4dbdbd6c88a33ea76e92e5ddcd0a7ee2170aa76e2c24c3471616739a21adcd37724a49a0af93bb3805b73e14446159dc218cb514fb0fc9a
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 7668b48ea202b6f21dccceb8a67097d1df27b6661295c36b756f9a537c09f5479ed326f86c0374b7bb5fef860d62f54a599c520212798a31b02c03ddb6bc295a
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -36,12 +36,11 @@ $ LIB_KOMPO_DIR=/path/to/kompo-vfs/target/release 
     | 
|
| 
       36 
36 
     | 
    
         
             
              * simple hello world script.
         
     | 
| 
       37 
37 
     | 
    
         
             
            * sinatra_and_sqlite
         
     | 
| 
       38 
38 
     | 
    
         
             
              * sinatra app with sqlite3 with Gemfile.
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
      
 39 
     | 
    
         
            +
            * rails
         
     | 
| 
      
 40 
     | 
    
         
            +
              * 🚧
         
     | 
| 
       40 
41 
     | 
    
         | 
| 
       41 
42 
     | 
    
         
             
            ## Development
         
     | 
| 
       42 
43 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
            After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
44 
     | 
    
         
             
            To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
         
     | 
| 
       46 
45 
     | 
    
         | 
| 
       47 
46 
     | 
    
         
             
            ## Contributing
         
     | 
    
        data/exe/kompo
    CHANGED
    
    | 
         @@ -3,17 +3,7 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            require_relative '../lib/kompo'
         
     | 
| 
       4 
4 
     | 
    
         
             
            require 'optparse'
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
     | 
    
         
            -
            option = Kompo::Option. 
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
            option.on('-e VAL', '--entrypoint=VAL') { |v| option.entrypoint = v }
         
     | 
| 
       9 
     | 
    
         
            -
            option.on('-o VAL', '--output=VAL') { |v| option.output = v }
         
     | 
| 
       10 
     | 
    
         
            -
            option.on('--[no-]gemfile') { |v| option.gemfile = v }
         
     | 
| 
       11 
     | 
    
         
            -
            option.on('--[no-]stdlib') { |v| option.stdlib = v }
         
     | 
| 
       12 
     | 
    
         
            -
            option.on('--dest-dir=VAL') { |v| option.dest_dir = v }
         
     | 
| 
       13 
     | 
    
         
            -
            option.on('--ruby-src-path=VAL') { |v| option.ruby_src_path = v }
         
     | 
| 
       14 
     | 
    
         
            -
            option.on('--cache-bundle-path=VAL') { |v| option.cache_bundle_path = v }
         
     | 
| 
       15 
     | 
    
         
            -
            option.on('--ruby-version=VAL') { |v| option.ruby_version = v }
         
     | 
| 
       16 
     | 
    
         
            -
            # option.on('--compress') { |v| option.compress = v }
         
     | 
| 
      
 6 
     | 
    
         
            +
            option = Kompo::Option.default
         
     | 
| 
       17 
7 
     | 
    
         | 
| 
       18 
8 
     | 
    
         
             
            Kompo::Tasks.cd_work_dir(option) do |task|
         
     | 
| 
       19 
9 
     | 
    
         
             
              task.clone_ruby_src
         
     | 
    
        data/lib/kompo/version.rb
    CHANGED
    
    
    
        data/lib/kompo.rb
    CHANGED
    
    | 
         @@ -12,24 +12,43 @@ module Kompo 
     | 
|
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
              class Option
         
     | 
| 
       14 
14 
     | 
    
         
             
                extend Forwardable
         
     | 
| 
       15 
     | 
    
         
            -
                attr_accessor :entrypoint, :output, :gemfile, : 
     | 
| 
      
 15 
     | 
    
         
            +
                attr_accessor :entrypoint, :output, :gemfile, :ignore_stdlib, :dyn_link_lib, :dest_dir, :ruby_src_path, :cache_bundle_path, :ruby_version, :compress, :context, :args, :use_group
         
     | 
| 
       16 
16 
     | 
    
         
             
                delegate %i[on] => :@opt
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
                def initialize(dir = Dir.getwd, opt = OptionParser.new)
         
     | 
| 
       19 
19 
     | 
    
         
             
                  @entrypoint = File.join(dir, 'main.rb')
         
     | 
| 
       20 
20 
     | 
    
         
             
                  @output = File.basename(dir)
         
     | 
| 
       21 
     | 
    
         
            -
                  @gemfile = File.exist?(File.join(Dir. 
     | 
| 
       22 
     | 
    
         
            -
                  @ 
     | 
| 
      
 21 
     | 
    
         
            +
                  @gemfile = File.exist?(File.join(Dir.getwd, 'Gemfile'))
         
     | 
| 
      
 22 
     | 
    
         
            +
                  @ignore_stdlib = []
         
     | 
| 
      
 23 
     | 
    
         
            +
                  @dyn_link_lib = []
         
     | 
| 
       23 
24 
     | 
    
         
             
                  @dest_dir = dir
         
     | 
| 
       24 
25 
     | 
    
         
             
                  @ruby_src_path = nil
         
     | 
| 
       25 
26 
     | 
    
         
             
                  @cache_bundle_path = nil
         
     | 
| 
       26 
27 
     | 
    
         
             
                  @ruby_version = "v#{RUBY_VERSION.gsub('.', '_')}"
         
     | 
| 
       27 
28 
     | 
    
         
             
                  @compress = false
         
     | 
| 
      
 29 
     | 
    
         
            +
                  @use_group = 'default'
         
     | 
| 
       28 
30 
     | 
    
         | 
| 
       29 
31 
     | 
    
         
             
                  @context = dir
         
     | 
| 
       30 
32 
     | 
    
         
             
                  @opt = opt
         
     | 
| 
       31 
33 
     | 
    
         
             
                end
         
     | 
| 
       32 
34 
     | 
    
         | 
| 
      
 35 
     | 
    
         
            +
                def self.default
         
     | 
| 
      
 36 
     | 
    
         
            +
                  option = new
         
     | 
| 
      
 37 
     | 
    
         
            +
                  option.on('-e VAL', '--entrypoint=VAL', "File path to use for entry point. (default: \'./main.rb\')") { |v| option.entrypoint = v }
         
     | 
| 
      
 38 
     | 
    
         
            +
                  option.on('-o VAL', '--output=VAL', 'Name of the generated file. (default: current dir name)') { |v| option.output = v }
         
     | 
| 
      
 39 
     | 
    
         
            +
                  option.on('-g VAL', '--use-group=VAL', "Group name to use with \'bundle install\'. (default: \'default\')") { |v| option.use_group = v }
         
     | 
| 
      
 40 
     | 
    
         
            +
                  option.on('--[no-]gemfile', "Use gem in Gemfile. (default: automatically true if Gemfile is present)") { |v| option.gemfile = v }
         
     | 
| 
      
 41 
     | 
    
         
            +
                  option.on('--ignore-stdlib=VAL', Array, "Specify stdlibs not to include, separated by commas.") { |v| option.ignore_stdlib = v }
         
     | 
| 
      
 42 
     | 
    
         
            +
                  option.on('--dyn-link-lib=VAL', Array, "Specify libraries to be dynamic link, separated by commas.") { |v| option.dyn_link_lib = v }
         
     | 
| 
      
 43 
     | 
    
         
            +
                  option.on('--dest-dir=VAL', "Output directry path. (default: current dir)") { |v| option.dest_dir = v }
         
     | 
| 
      
 44 
     | 
    
         
            +
                  option.on('--ruby-src-path=VAL', "Your Ruby source directry. Must be compiled with \'--with-static-linked-ext\'.") { |v| option.ruby_src_path = v }
         
     | 
| 
      
 45 
     | 
    
         
            +
                  option.on('--cache-bundle-path=VAL', "Specify the directory created by \'bundle install --standalone\'.") { |v| option.cache_bundle_path = v }
         
     | 
| 
      
 46 
     | 
    
         
            +
                  option.on('--ruby-version=VAL', "Specify Ruby version. (default: current Ruby version)") { |v| option.ruby_version = v }
         
     | 
| 
      
 47 
     | 
    
         
            +
                  # option.on('--compress') { |v| option.compress = v }
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                  option
         
     | 
| 
      
 50 
     | 
    
         
            +
                end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
       33 
52 
     | 
    
         
             
                def build
         
     | 
| 
       34 
53 
     | 
    
         
             
                  @opt.parse!(ARGV)
         
     | 
| 
       35 
54 
     | 
    
         | 
| 
         @@ -53,9 +72,9 @@ module Kompo 
     | 
|
| 
       53 
72 
     | 
    
         | 
| 
       54 
73 
     | 
    
         
             
              class Tasks
         
     | 
| 
       55 
74 
     | 
    
         
             
                extend Forwardable
         
     | 
| 
       56 
     | 
    
         
            -
                attr_reader :task, :fs, :work_dir, :ruby_src_dir, :ruby_pc, :ruby_bin, :extinit_o, :encinit_o, :lib_ruby_static_dir, :bundle_setup, :bundle_ruby, :std_libs, :gem_libs
         
     | 
| 
      
 75 
     | 
    
         
            +
                attr_reader :task, :fs, :work_dir, :ruby_src_dir, :ruby_pc, :ruby_bin, :extinit_o, :encinit_o, :lib_ruby_static_dir, :bundle_setup, :bundle_ruby, :std_libs, :gem_libs, :exts_libs
         
     | 
| 
       57 
76 
     | 
    
         | 
| 
       58 
     | 
    
         
            -
                delegate %i[entrypoint output gemfile  
     | 
| 
      
 77 
     | 
    
         
            +
                delegate %i[entrypoint output gemfile ignore_stdlib dyn_link_lib dest_dir ruby_src_path cache_bundle_path ruby_version compress context args use_group] => :@option
         
     | 
| 
       59 
78 
     | 
    
         
             
                delegate %i[komop_cli lib_kompo_dir] => :@fs
         
     | 
| 
       60 
79 
     | 
    
         | 
| 
       61 
80 
     | 
    
         
             
                def initialize(option, dir)
         
     | 
| 
         @@ -64,14 +83,27 @@ module Kompo 
     | 
|
| 
       64 
83 
     | 
    
         
             
                  @work_dir = dir
         
     | 
| 
       65 
84 
     | 
    
         
             
                  @fs = Fs.new
         
     | 
| 
       66 
85 
     | 
    
         | 
| 
       67 
     | 
    
         
            -
                  @ruby_pc = File.join(ruby_src_path || File.join(dir, 'dest_dir', 'lib', 'pkgconfig'), 'ruby.pc')
         
     | 
| 
       68 
86 
     | 
    
         
             
                  @ruby_bin = File.join(ruby_src_path || File.join(dir, 'dest_dir', 'bin'), 'ruby')
         
     | 
| 
      
 87 
     | 
    
         
            +
                  @ruby_pc = File.join(ruby_src_path || File.join(dir, 'dest_dir', 'lib', 'pkgconfig'), get_ruby_pc_name)
         
     | 
| 
       69 
88 
     | 
    
         
             
                  @extinit_o = File.join(ruby_src_dir, 'ext', 'extinit.o')
         
     | 
| 
       70 
89 
     | 
    
         
             
                  @encinit_o = File.join(ruby_src_dir, 'enc', 'encinit.o')
         
     | 
| 
       71 
90 
     | 
    
         
             
                  @lib_ruby_static_dir = ruby_src_path || File.join(dir, 'dest_dir', 'lib')
         
     | 
| 
       72 
91 
     | 
    
         | 
| 
       73 
92 
     | 
    
         
             
                  @std_libs = []
         
     | 
| 
       74 
93 
     | 
    
         
             
                  @gem_libs = []
         
     | 
| 
      
 94 
     | 
    
         
            +
                  @exts_libs = []
         
     | 
| 
      
 95 
     | 
    
         
            +
                end
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                def get_ruby_pc_name
         
     | 
| 
      
 98 
     | 
    
         
            +
                  return 'ruby.pc' unless ruby_src_path
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                  command = [
         
     | 
| 
      
 101 
     | 
    
         
            +
                    ruby_bin,
         
     | 
| 
      
 102 
     | 
    
         
            +
                    '-e',
         
     | 
| 
      
 103 
     | 
    
         
            +
                    "'puts RbConfig::CONFIG[\"ruby_pc\"]'",
         
     | 
| 
      
 104 
     | 
    
         
            +
                  ].join(' ')
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
                  exec_command command, 'get ruby.pc name', true
         
     | 
| 
       75 
107 
     | 
    
         
             
                end
         
     | 
| 
       76 
108 
     | 
    
         | 
| 
       77 
109 
     | 
    
         
             
                def valid?
         
     | 
| 
         @@ -108,7 +140,7 @@ module Kompo 
     | 
|
| 
       108 
140 
     | 
    
         
             
                        "--disable-install-capi",
         
     | 
| 
       109 
141 
     | 
    
         
             
                        "--with-static-linked-ext",
         
     | 
| 
       110 
142 
     | 
    
         
             
                        "--with-ruby-pc=ruby.pc",
         
     | 
| 
       111 
     | 
    
         
            -
                        "--with-ext=#{ 
     | 
| 
      
 143 
     | 
    
         
            +
                        "--with-ext=#{get_ruby_exts_dir}"
         
     | 
| 
       112 
144 
     | 
    
         
             
                      ].join(' ')
         
     | 
| 
       113 
145 
     | 
    
         
             
                      exec_command command, 'configure'
         
     | 
| 
       114 
146 
     | 
    
         | 
| 
         @@ -139,7 +171,7 @@ module Kompo 
     | 
|
| 
       139 
171 
     | 
    
         
             
                    command = [
         
     | 
| 
       140 
172 
     | 
    
         
             
                      './bundler',
         
     | 
| 
       141 
173 
     | 
    
         
             
                      'install',
         
     | 
| 
       142 
     | 
    
         
            -
                       
     | 
| 
      
 174 
     | 
    
         
            +
                      "--standalone=#{use_group}",
         
     | 
| 
       143 
175 
     | 
    
         
             
                    ].join(' ')
         
     | 
| 
       144 
176 
     | 
    
         | 
| 
       145 
177 
     | 
    
         
             
                    exec_command command, 'bundle install'
         
     | 
| 
         @@ -182,10 +214,25 @@ module Kompo 
     | 
|
| 
       182 
214 
     | 
    
         
             
                        exec_command command, 'cargo build'
         
     | 
| 
       183 
215 
     | 
    
         
             
                        copy_targets = Dir.glob(File.join(dir_name, 'target/release/*.a'))
         
     | 
| 
       184 
216 
     | 
    
         
             
                      else
         
     | 
| 
       185 
     | 
    
         
            -
                         
     | 
| 
       186 
     | 
    
         
            -
                         
     | 
| 
       187 
     | 
    
         
            -
             
     | 
| 
       188 
     | 
    
         
            -
             
     | 
| 
      
 217 
     | 
    
         
            +
                        copy_targets = []
         
     | 
| 
      
 218 
     | 
    
         
            +
                        Dir.chdir(dir_name) {|path|
         
     | 
| 
      
 219 
     | 
    
         
            +
                          command = [
         
     | 
| 
      
 220 
     | 
    
         
            +
                            ruby_bin,
         
     | 
| 
      
 221 
     | 
    
         
            +
                            'extconf.rb',
         
     | 
| 
      
 222 
     | 
    
         
            +
                          ].join(' ')
         
     | 
| 
      
 223 
     | 
    
         
            +
             
     | 
| 
      
 224 
     | 
    
         
            +
                          exec_command command, 'ruby extconf.rb'
         
     | 
| 
      
 225 
     | 
    
         
            +
             
     | 
| 
      
 226 
     | 
    
         
            +
                          objs = File.read('./Makefile').match(/OBJS = (.*\.o)/)[1]
         
     | 
| 
      
 227 
     | 
    
         
            +
             
     | 
| 
      
 228 
     | 
    
         
            +
                          command = ['make', objs, '--always-make'].join(' ')
         
     | 
| 
      
 229 
     | 
    
         
            +
             
     | 
| 
      
 230 
     | 
    
         
            +
                          exec_command command, 'make OBJS'
         
     | 
| 
      
 231 
     | 
    
         
            +
             
     | 
| 
      
 232 
     | 
    
         
            +
                          @exts_libs += File.read('./Makefile').match(/^libpath = (.*)/)[1].split(' ')
         
     | 
| 
      
 233 
     | 
    
         
            +
             
     | 
| 
      
 234 
     | 
    
         
            +
                          copy_targets = objs.split(' ').map { File.join(dir_name, _1) }
         
     | 
| 
      
 235 
     | 
    
         
            +
                        }
         
     | 
| 
       189 
236 
     | 
    
         
             
                      end
         
     | 
| 
       190 
237 
     | 
    
         | 
| 
       191 
238 
     | 
    
         
             
                      dir = FileUtils.mkdir_p('exts/' + File.basename(dir_name)).first
         
     | 
| 
         @@ -204,16 +251,19 @@ module Kompo 
     | 
|
| 
       204 
251 
     | 
    
         
             
                    'gcc',
         
     | 
| 
       205 
252 
     | 
    
         
             
                    '-O3',
         
     | 
| 
       206 
253 
     | 
    
         
             
                    '-Wall',
         
     | 
| 
      
 254 
     | 
    
         
            +
                    get_ruby_header,
         
     | 
| 
      
 255 
     | 
    
         
            +
                    "#{lib_ruby_static_dir.nil? ? '' : '-L' + lib_ruby_static_dir}",
         
     | 
| 
      
 256 
     | 
    
         
            +
                    "#{lib_kompo_dir.nil? ? '' : '-L' + lib_kompo_dir}",
         
     | 
| 
      
 257 
     | 
    
         
            +
                    "#{exts_libs.uniq.select{_1.start_with?('/')}.map{"-L#{_1}"}.join(' ')}",
         
     | 
| 
       207 
258 
     | 
    
         
             
                    'main.c',
         
     | 
| 
      
 259 
     | 
    
         
            +
                    '-Wl,--start-group',
         
     | 
| 
       208 
260 
     | 
    
         
             
                    Dir.glob('exts/**/*.o').join(' '),
         
     | 
| 
       209 
261 
     | 
    
         
             
                    'fs.o',
         
     | 
| 
       210 
     | 
    
         
            -
                     
     | 
| 
       211 
     | 
    
         
            -
                    "#{lib_kompo_dir.nil? ? '' : '-L' + lib_kompo_dir}",
         
     | 
| 
       212 
     | 
    
         
            -
                    get_ruby_header,
         
     | 
| 
       213 
     | 
    
         
            -
                    get_exts,
         
     | 
| 
      
 262 
     | 
    
         
            +
                    get_ruby_exts,
         
     | 
| 
       214 
263 
     | 
    
         
             
                    '-lkompo',
         
     | 
| 
       215 
264 
     | 
    
         
             
                    '-lruby-static',
         
     | 
| 
       216 
265 
     | 
    
         
             
                    get_libs,
         
     | 
| 
      
 266 
     | 
    
         
            +
                    '-Wl,--end-group',
         
     | 
| 
       217 
267 
     | 
    
         
             
                    '-o',
         
     | 
| 
       218 
268 
     | 
    
         
             
                    output
         
     | 
| 
       219 
269 
     | 
    
         
             
                  ].join(' ')
         
     | 
| 
         @@ -243,16 +293,37 @@ module Kompo 
     | 
|
| 
       243 
293 
     | 
    
         
             
                  end
         
     | 
| 
       244 
294 
     | 
    
         
             
                end
         
     | 
| 
       245 
295 
     | 
    
         | 
| 
       246 
     | 
    
         
            -
                def  
     | 
| 
       247 
     | 
    
         
            -
                  ["#{extinit_o}", "#{encinit_o}", *Dir.glob("#{ruby_src_dir}/ext/**/*.a"), *Dir.glob("#{ruby_src_dir}/enc/**/*.a")].join(' ')
         
     | 
| 
      
 296 
     | 
    
         
            +
                def get_ruby_exts
         
     | 
| 
      
 297 
     | 
    
         
            +
                  ["#{extinit_o}", "#{encinit_o}", *(Dir.glob("#{ruby_src_dir}/ext/**/*.a") - ignore_stdlib_archives), *Dir.glob("#{ruby_src_dir}/enc/**/*.a")].join(' ')
         
     | 
| 
      
 298 
     | 
    
         
            +
                end
         
     | 
| 
      
 299 
     | 
    
         
            +
             
     | 
| 
      
 300 
     | 
    
         
            +
                def ignore_stdlib_archives
         
     | 
| 
      
 301 
     | 
    
         
            +
                  if ruby_src_path
         
     | 
| 
      
 302 
     | 
    
         
            +
                    ignore_stdlib.map do |stdlib|
         
     | 
| 
      
 303 
     | 
    
         
            +
                      File.join(ruby_src_path, 'ext', stdlib, File.basename(stdlib) + '.a')
         
     | 
| 
      
 304 
     | 
    
         
            +
                    end
         
     | 
| 
      
 305 
     | 
    
         
            +
                  else
         
     | 
| 
      
 306 
     | 
    
         
            +
                    []
         
     | 
| 
      
 307 
     | 
    
         
            +
                  end
         
     | 
| 
      
 308 
     | 
    
         
            +
                end
         
     | 
| 
      
 309 
     | 
    
         
            +
             
     | 
| 
      
 310 
     | 
    
         
            +
                def extract_gem_libs
         
     | 
| 
      
 311 
     | 
    
         
            +
                  Dir.glob("bundle/ruby/#{get_semantic_ruby_version}/gems/*/ext/*/Makefile")
         
     | 
| 
      
 312 
     | 
    
         
            +
                     .flat_map{ File.read(_1)
         
     | 
| 
      
 313 
     | 
    
         
            +
                     .scan(/^LIBS = (.*)/)[0] }
         
     | 
| 
      
 314 
     | 
    
         
            +
                     .flat_map { _1.split(' ') }
         
     | 
| 
      
 315 
     | 
    
         
            +
                     .uniq
         
     | 
| 
      
 316 
     | 
    
         
            +
                     .flat_map { _1.start_with?("-l") ? _1 : "-l" + File.basename(_1, '.a').delete_prefix('lib') }
         
     | 
| 
      
 317 
     | 
    
         
            +
                     .join(" ")
         
     | 
| 
       248 
318 
     | 
    
         
             
                end
         
     | 
| 
       249 
319 
     | 
    
         | 
| 
       250 
320 
     | 
    
         
             
                def get_libs
         
     | 
| 
       251 
321 
     | 
    
         
             
                  main_lib = get_mainlibs
         
     | 
| 
       252 
322 
     | 
    
         
             
                  ext_libs = Dir.glob("#{ruby_src_dir}/ext/**/exts.mk").flat_map { File.read(_1).scan(/EXTLIBS = (.*)/) }.join(" ")
         
     | 
| 
       253 
     | 
    
         
            -
                  gem_libs =  
     | 
| 
      
 323 
     | 
    
         
            +
                  gem_libs = extract_gem_libs
         
     | 
| 
      
 324 
     | 
    
         
            +
                  dyn_link_libs = (['pthread', 'dl', 'm', 'c'] + dyn_link_lib).map { "-l" + _1 }
         
     | 
| 
       254 
325 
     | 
    
         
             
                  dyn, static = eval("%W[#{main_lib} #{ext_libs} #{gem_libs}]").uniq
         
     | 
| 
       255 
     | 
    
         
            -
                                                                               .partition { _1  
     | 
| 
      
 326 
     | 
    
         
            +
                                                                               .partition { dyn_link_libs.include?(_1) }
         
     | 
| 
       256 
327 
     | 
    
         
             
                  dyn.unshift "-Wl,-Bdynamic"
         
     | 
| 
       257 
328 
     | 
    
         
             
                  static.unshift "-Wl,-Bstatic"
         
     | 
| 
       258 
329 
     | 
    
         | 
| 
         @@ -277,24 +348,22 @@ module Kompo 
     | 
|
| 
       277 
348 
     | 
    
         
             
                    load_paths += gem_libs
         
     | 
| 
       278 
349 
     | 
    
         
             
                  end
         
     | 
| 
       279 
350 
     | 
    
         | 
| 
       280 
     | 
    
         
            -
                   
     | 
| 
       281 
     | 
    
         
            -
                    load_paths += std_libs
         
     | 
| 
       282 
     | 
    
         
            -
                  end
         
     | 
| 
      
 351 
     | 
    
         
            +
                  load_paths += std_libs
         
     | 
| 
       283 
352 
     | 
    
         | 
| 
       284 
353 
     | 
    
         
             
                  load_paths
         
     | 
| 
       285 
354 
     | 
    
         
             
                end
         
     | 
| 
       286 
355 
     | 
    
         | 
| 
       287 
     | 
    
         
            -
                def  
     | 
| 
      
 356 
     | 
    
         
            +
                def get_ruby_exts_dir
         
     | 
| 
       288 
357 
     | 
    
         
             
                  Dir.glob("#{ruby_src_dir}/**/extconf.rb")
         
     | 
| 
       289 
358 
     | 
    
         
             
                     .reject { _1 =~ /-test-/ }
         
     | 
| 
       290 
359 
     | 
    
         
             
                     .reject { _1 =~ /win32/ } # TODO
         
     | 
| 
       291 
360 
     | 
    
         
             
                     .map { File.dirname(_1) }
         
     | 
| 
       292 
361 
     | 
    
         
             
                     .map { _1.split("#{ruby_src_dir}/ext/")[1] }
         
     | 
| 
      
 362 
     | 
    
         
            +
                     .reject { ignore_stdlib.include?(_1) }
         
     | 
| 
       293 
363 
     | 
    
         
             
                     .join(',')
         
     | 
| 
       294 
364 
     | 
    
         
             
                end
         
     | 
| 
       295 
365 
     | 
    
         | 
| 
       296 
366 
     | 
    
         
             
                def std_libs
         
     | 
| 
       297 
     | 
    
         
            -
                  return [] unless stdlib
         
     | 
| 
       298 
367 
     | 
    
         
             
                  return @std_libs unless @std_libs.empty?
         
     | 
| 
       299 
368 
     | 
    
         | 
| 
       300 
369 
     | 
    
         
             
                  command = ["#{ruby_bin}", '-e', "'puts $:'"].join(' ')
         
     | 
    
        data/lib/main.c.erb
    CHANGED
    
    | 
         @@ -1,5 +1,4 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            #include <ruby.h>
         
     | 
| 
       2 
     | 
    
         
            -
            #include <string.h>
         
     | 
| 
       3 
2 
     | 
    
         | 
| 
       4 
3 
     | 
    
         
             
            extern char *get_kompo_patch(void);
         
     | 
| 
       5 
4 
     | 
    
         
             
            extern void ruby_init_ext(const char *name, void (*init)(void));
         
     | 
| 
         @@ -14,14 +13,21 @@ void Init_gems(void) 
     | 
|
| 
       14 
13 
     | 
    
         
             
                ruby_init_ext("<%= so_path %>", <%= func %>);
         
     | 
| 
       15 
14 
     | 
    
         
             
              <% end %>
         
     | 
| 
       16 
15 
     | 
    
         
             
            }
         
     | 
| 
      
 16 
     | 
    
         
            +
            <% ignore_stdlib.each do |stdlib|%>
         
     | 
| 
      
 17 
     | 
    
         
            +
            void <%= "Init_#{stdlib.gsub('/', '_')}" %>(void){}
         
     | 
| 
      
 18 
     | 
    
         
            +
            <% end %>
         
     | 
| 
       17 
19 
     | 
    
         | 
| 
       18 
20 
     | 
    
         
             
            int main(int argc, char **argv)
         
     | 
| 
       19 
21 
     | 
    
         
             
            {
         
     | 
| 
       20 
     | 
    
         
            -
              int c =  
     | 
| 
      
 22 
     | 
    
         
            +
              int c = argc + 2;
         
     | 
| 
      
 23 
     | 
    
         
            +
              char *argv2[c];
         
     | 
| 
       21 
24 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
               
     | 
| 
       23 
     | 
    
         
            -
               
     | 
| 
       24 
     | 
    
         
            -
               
     | 
| 
      
 25 
     | 
    
         
            +
              argv2[0] = argv[0];
         
     | 
| 
      
 26 
     | 
    
         
            +
              argv2[1] = "-e";
         
     | 
| 
      
 27 
     | 
    
         
            +
              argv2[2] = get_kompo_patch();
         
     | 
| 
      
 28 
     | 
    
         
            +
              for (int i = 1; i < argc; i++) {
         
     | 
| 
      
 29 
     | 
    
         
            +
                argv2[i + 2] = argv[i];
         
     | 
| 
      
 30 
     | 
    
         
            +
              }
         
     | 
| 
       25 
31 
     | 
    
         | 
| 
       26 
32 
     | 
    
         
             
              ruby_sysinit(&c, &argv);
         
     | 
| 
       27 
33 
     | 
    
         | 
| 
         @@ -31,7 +37,7 @@ int main(int argc, char **argv) 
     | 
|
| 
       31 
37 
     | 
    
         
             
              Init_kompo_fs();
         
     | 
| 
       32 
38 
     | 
    
         
             
              Init_gems();
         
     | 
| 
       33 
39 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
              void *node = ruby_options(c,  
     | 
| 
      
 40 
     | 
    
         
            +
              void *node = ruby_options(c, argv2);
         
     | 
| 
       35 
41 
     | 
    
         | 
| 
       36 
42 
     | 
    
         
             
              // set $0
         
     | 
| 
       37 
43 
     | 
    
         
             
              ruby_script(get_start_file_name());
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,15 +1,29 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: kompo
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.2.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Sho Hirano
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2024- 
     | 
| 
       12 
     | 
    
         
            -
            dependencies: 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2024-05-16 00:00:00.000000000 Z
         
     | 
| 
      
 12 
     | 
    
         
            +
            dependencies:
         
     | 
| 
      
 13 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 14 
     | 
    
         
            +
              name: mini_portile2
         
     | 
| 
      
 15 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 16 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 17 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 18 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 19 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 20 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 21 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 22 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 23 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 24 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 25 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 26 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       13 
27 
     | 
    
         
             
            description: A tool to pack Ruby and Ruby scripts in one binary. This tool is still
         
     | 
| 
       14 
28 
     | 
    
         
             
              under development.
         
     | 
| 
       15 
29 
     | 
    
         
             
            email:
         
     |