mundler 0.5.0 → 0.8.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/exe/mundle +2 -0
 - data/lib/mundler/build_config.rb +177 -0
 - data/lib/mundler/cached_git/cached_git +53 -0
 - data/lib/mundler/cached_git/git +19 -0
 - data/lib/mundler/clean_environment.rb +11 -0
 - data/{Users/dan2552/Dropbox/experiments/mundler/lib → lib}/mundler/cli.rb +4 -2
 - data/{Users/dan2552/Dropbox/experiments/mundler/lib → lib}/mundler/config.rb +22 -0
 - data/{Users/dan2552/Dropbox/experiments/mundler/lib → lib}/mundler/dsl.rb +35 -5
 - data/lib/mundler/libraries/example.rb +13 -0
 - data/{Users/dan2552/Dropbox/experiments/mundler/lib → lib}/mundler/mruby.rb +26 -26
 - data/lib/mundler/platforms/android.rb +54 -0
 - data/lib/mundler/platforms/host.rb +23 -0
 - data/{Users/dan2552/Dropbox/experiments/mundler/lib → lib}/mundler/platforms/ios.rb +12 -5
 - data/{Users/dan2552/Dropbox/experiments/mundler/lib → lib}/mundler/platforms/ios_simulator.rb +11 -5
 - data/{Users/dan2552/Dropbox/experiments/mundler/lib → lib}/mundler/project.rb +0 -0
 - data/lib/mundler/version.rb +3 -0
 - data/{Users/dan2552/Dropbox/experiments/mundler/lib → lib}/mundler.rb +2 -0
 - metadata +18 -12
 - data/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/build_config.rb +0 -75
 - data/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/version.rb +0 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: e34cffc5ea496c40d16c21f544456bf5fa2db7f921e7c70aa000c5b5fdb5cdc5
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 125ad566d2322fa8d931a428c5d8cdfc7df98818dd3e793c1a7a23b66e225758
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 326e51648e28ea76872db38f4d8c03168960fad4ed5ee8c53e37b7d6da3d8605f62152a1aa87d22dd04b6e4070bfa60fad265cb52ec5dc8046c323f5f4488219
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: ba5c5387ddfa27ac31e10f53c128e4b26c319c03dcfde893bea970309025bc44d1cfdb568662e60071a3a255d72312b758d870bb180e9407e8626dfb81a90c99
         
     | 
    
        data/exe/mundle
    CHANGED
    
    
| 
         @@ -0,0 +1,177 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Mundler
         
     | 
| 
      
 2 
     | 
    
         
            +
              class BuildConfig
         
     | 
| 
      
 3 
     | 
    
         
            +
                def initialize(config)
         
     | 
| 
      
 4 
     | 
    
         
            +
                  @config = config
         
     | 
| 
      
 5 
     | 
    
         
            +
                end
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                def tempfile
         
     | 
| 
      
 8 
     | 
    
         
            +
                  tempfile = Tempfile.new("build_config.rb")
         
     | 
| 
      
 9 
     | 
    
         
            +
                  File.write(tempfile, contents)
         
     | 
| 
      
 10 
     | 
    
         
            +
                  tempfile
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                def gemboxes
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @config.gemboxes.map do |gembox|
         
     | 
| 
      
 15 
     | 
    
         
            +
                    "conf.gembox #{gembox.inspect}"
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end.join("\n")
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                def gems
         
     | 
| 
      
 20 
     | 
    
         
            +
                  @config.gems.map do |gem|
         
     | 
| 
      
 21 
     | 
    
         
            +
                    # e.g. gem = {:name=>"mruby-regexp-pcre", :path=>nil, :github=>nil, :core=>nil}
         
     | 
| 
      
 22 
     | 
    
         
            +
                    args = ":mgem => #{gem[:name].inspect}"
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                    if gem[:github]
         
     | 
| 
      
 25 
     | 
    
         
            +
                      args = ":github => #{gem[:github].inspect}"
         
     | 
| 
      
 26 
     | 
    
         
            +
                    elsif gem[:path]
         
     | 
| 
      
 27 
     | 
    
         
            +
                      args = ":path => #{gem[:path].inspect}"
         
     | 
| 
      
 28 
     | 
    
         
            +
                    elsif gem[:core]
         
     | 
| 
      
 29 
     | 
    
         
            +
                      args = ":core => #{gem[:core].inspect}"
         
     | 
| 
      
 30 
     | 
    
         
            +
                    end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                    "conf.gem #{args}"
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end.join("\n  ")
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                def mruby_version
         
     | 
| 
      
 37 
     | 
    
         
            +
                  mruby_url = @config.mruby[:url]
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  version = (
         
     | 
| 
      
 40 
     | 
    
         
            +
                    @config.mruby[:tag] ||
         
     | 
| 
      
 41 
     | 
    
         
            +
                    @config.mruby[:branch] ||
         
     | 
| 
      
 42 
     | 
    
         
            +
                    @config.mruby[:version]
         
     | 
| 
      
 43 
     | 
    
         
            +
                  )
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                  "#{mruby_url} #{version}"
         
     | 
| 
      
 46 
     | 
    
         
            +
                end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                private
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                def host_platform
         
     | 
| 
      
 51 
     | 
    
         
            +
                  @config.platforms
         
     | 
| 
      
 52 
     | 
    
         
            +
                    .select { |attributes| attributes[:name].to_s == "host" }
         
     | 
| 
      
 53 
     | 
    
         
            +
                    .map { |attributes| platform(attributes) }
         
     | 
| 
      
 54 
     | 
    
         
            +
                    .join("\n")
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                def non_host_platforms
         
     | 
| 
      
 58 
     | 
    
         
            +
                  @config.platforms
         
     | 
| 
      
 59 
     | 
    
         
            +
                    .select { |attributes| attributes[:name].to_s != "host" }
         
     | 
| 
      
 60 
     | 
    
         
            +
                    .map { |attributes| platform(attributes) }
         
     | 
| 
      
 61 
     | 
    
         
            +
                    .join("\n")
         
     | 
| 
      
 62 
     | 
    
         
            +
                end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                def platform(platform_attrs)
         
     | 
| 
      
 65 
     | 
    
         
            +
                  platform_name = platform_attrs[:name].to_s
         
     | 
| 
      
 66 
     | 
    
         
            +
                  type = @config.platform_types[platform_name]
         
     | 
| 
      
 67 
     | 
    
         
            +
                  raise "Can't find platform: #{platform_name}" unless type
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                  options = {}
         
     | 
| 
      
 70 
     | 
    
         
            +
                  @config.libraries.each do |library_name, library_options|
         
     | 
| 
      
 71 
     | 
    
         
            +
                    library_type = @config.library_types[library_name]
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                    raise "Unknown library: #{library_name}" unless library_type
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                    library_builder = library_type.new
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                    puts "Using #{library_name} library (#{platform_name})"
         
     | 
| 
      
 78 
     | 
    
         
            +
                    library_builder.build(platform_name, library_options)
         
     | 
| 
      
 79 
     | 
    
         
            +
                    library_attrs = library_builder.platform_configuration(platform_name, library_options)
         
     | 
| 
      
 80 
     | 
    
         
            +
                    raise "Library #{library_name} for platform #{platform_name} returned expected result" unless library_attrs.is_a?(Hash)
         
     | 
| 
      
 81 
     | 
    
         
            +
                    merge_platform_attributes!(options, library_attrs)
         
     | 
| 
      
 82 
     | 
    
         
            +
                  end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
                  merge_platform_attributes!(options, platform_attrs[:options])
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                  type.config(options, self)
         
     | 
| 
      
 87 
     | 
    
         
            +
                end
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
                # Merge with a bit of specific logic to make sure build settings
         
     | 
| 
      
 90 
     | 
    
         
            +
                #
         
     | 
| 
      
 91 
     | 
    
         
            +
                # E.g. if lhs was something like
         
     | 
| 
      
 92 
     | 
    
         
            +
                #
         
     | 
| 
      
 93 
     | 
    
         
            +
                # ```
         
     | 
| 
      
 94 
     | 
    
         
            +
                # {
         
     | 
| 
      
 95 
     | 
    
         
            +
                #   cc: { flags: "-I#{sdl_install}/include/SDL2" },
         
     | 
| 
      
 96 
     | 
    
         
            +
                #   linker: { flags: "-L#{sdl_install}/lib -lSDL2 -lSDL2_image -lSDL2_ttf" }
         
     | 
| 
      
 97 
     | 
    
         
            +
                # }
         
     | 
| 
      
 98 
     | 
    
         
            +
                # ```
         
     | 
| 
      
 99 
     | 
    
         
            +
                #
         
     | 
| 
      
 100 
     | 
    
         
            +
                # and rhs was like
         
     | 
| 
      
 101 
     | 
    
         
            +
                #
         
     | 
| 
      
 102 
     | 
    
         
            +
                # ```
         
     | 
| 
      
 103 
     | 
    
         
            +
                # {
         
     | 
| 
      
 104 
     | 
    
         
            +
                #   cc: { flags: "abc" },
         
     | 
| 
      
 105 
     | 
    
         
            +
                #   linker: { flags: "def" },
         
     | 
| 
      
 106 
     | 
    
         
            +
                #   more_options: true
         
     | 
| 
      
 107 
     | 
    
         
            +
                # }
         
     | 
| 
      
 108 
     | 
    
         
            +
                # ```
         
     | 
| 
      
 109 
     | 
    
         
            +
                #
         
     | 
| 
      
 110 
     | 
    
         
            +
                # result would be
         
     | 
| 
      
 111 
     | 
    
         
            +
                # ```
         
     | 
| 
      
 112 
     | 
    
         
            +
                # {
         
     | 
| 
      
 113 
     | 
    
         
            +
                #   cc: { flags: ["-I#{sdl_install}/include/SDL2", "abc"] },
         
     | 
| 
      
 114 
     | 
    
         
            +
                #   linker: { flags: ["-L#{sdl_install}/lib -lSDL2 -lSDL2_image -lSDL2_ttf", "def"] }
         
     | 
| 
      
 115 
     | 
    
         
            +
                #   more_options: true
         
     | 
| 
      
 116 
     | 
    
         
            +
                # }
         
     | 
| 
      
 117 
     | 
    
         
            +
                # ```
         
     | 
| 
      
 118 
     | 
    
         
            +
                #
         
     | 
| 
      
 119 
     | 
    
         
            +
                def merge_platform_attributes!(lhs, rhs)
         
     | 
| 
      
 120 
     | 
    
         
            +
                  rhs = rhs.dup
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
                  [:cc, :linker].each do |cc_or_linker|
         
     | 
| 
      
 123 
     | 
    
         
            +
                    [:command, :flags].each do |command_or_flags|
         
     | 
| 
      
 124 
     | 
    
         
            +
                      lhs_flags = lhs.dig(cc_or_linker, command_or_flags)
         
     | 
| 
      
 125 
     | 
    
         
            +
                      rhs_flags = rhs.dig(cc_or_linker, command_or_flags)
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
                      if rhs_flags
         
     | 
| 
      
 128 
     | 
    
         
            +
                        lhs[cc_or_linker] ||= {}
         
     | 
| 
      
 129 
     | 
    
         
            +
                        lhs[cc_or_linker][command_or_flags] ||= []
         
     | 
| 
      
 130 
     | 
    
         
            +
                        lhs_flags = lhs.dig(cc_or_linker, command_or_flags)
         
     | 
| 
      
 131 
     | 
    
         
            +
             
     | 
| 
      
 132 
     | 
    
         
            +
                        if lhs_flags.is_a?(String)
         
     | 
| 
      
 133 
     | 
    
         
            +
                          lhs[cc_or_linker][command_or_flags] = [lhs_flags]
         
     | 
| 
      
 134 
     | 
    
         
            +
                        end
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
      
 136 
     | 
    
         
            +
                        if rhs_flags.is_a?(String)
         
     | 
| 
      
 137 
     | 
    
         
            +
                          rhs[cc_or_linker][command_or_flags] = [rhs_flags]
         
     | 
| 
      
 138 
     | 
    
         
            +
                        end
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
                        lhs[cc_or_linker][command_or_flags] = lhs[cc_or_linker][command_or_flags] + rhs[cc_or_linker][command_or_flags]
         
     | 
| 
      
 141 
     | 
    
         
            +
                      end
         
     | 
| 
      
 142 
     | 
    
         
            +
                    end
         
     | 
| 
      
 143 
     | 
    
         
            +
             
     | 
| 
      
 144 
     | 
    
         
            +
                    rhs.delete(cc_or_linker)
         
     | 
| 
      
 145 
     | 
    
         
            +
                  end
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
                  lhs.merge!(rhs)
         
     | 
| 
      
 148 
     | 
    
         
            +
                end
         
     | 
| 
      
 149 
     | 
    
         
            +
             
     | 
| 
      
 150 
     | 
    
         
            +
                def env_vars
         
     | 
| 
      
 151 
     | 
    
         
            +
                  str = ""
         
     | 
| 
      
 152 
     | 
    
         
            +
                  @config.env.each do |key, value|
         
     | 
| 
      
 153 
     | 
    
         
            +
                    str = str + "\nENV[\"#{key}\"] = \"#{value}\""
         
     | 
| 
      
 154 
     | 
    
         
            +
                  end
         
     | 
| 
      
 155 
     | 
    
         
            +
                  str
         
     | 
| 
      
 156 
     | 
    
         
            +
                end
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
                def contents
         
     | 
| 
      
 159 
     | 
    
         
            +
                  contents = <<~CONTENTS
         
     | 
| 
      
 160 
     | 
    
         
            +
                    # #{mruby_version}
         
     | 
| 
      
 161 
     | 
    
         
            +
                    #{env_vars}
         
     | 
| 
      
 162 
     | 
    
         
            +
             
     | 
| 
      
 163 
     | 
    
         
            +
                    MRuby::Build.new do |conf|
         
     | 
| 
      
 164 
     | 
    
         
            +
                      toolchain :clang
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
                    #{host_platform}
         
     | 
| 
      
 167 
     | 
    
         
            +
                      #{gemboxes}
         
     | 
| 
      
 168 
     | 
    
         
            +
                      #{gems}
         
     | 
| 
      
 169 
     | 
    
         
            +
                    end
         
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
      
 171 
     | 
    
         
            +
                    #{non_host_platforms}
         
     | 
| 
      
 172 
     | 
    
         
            +
                  CONTENTS
         
     | 
| 
      
 173 
     | 
    
         
            +
             
     | 
| 
      
 174 
     | 
    
         
            +
                  (contents.strip + "\n").gsub("\n\n\n", "\n\n")
         
     | 
| 
      
 175 
     | 
    
         
            +
                end
         
     | 
| 
      
 176 
     | 
    
         
            +
              end
         
     | 
| 
      
 177 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,53 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require "fileutils"
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            paths = ENV["PATH"].split(":")
         
     | 
| 
      
 6 
     | 
    
         
            +
            script_dir = File.expand_path(__dir__)
         
     | 
| 
      
 7 
     | 
    
         
            +
            paths.delete_if { |p| p.strip == script_dir.strip }
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            if ARGV[0] == "clone"
         
     | 
| 
      
 10 
     | 
    
         
            +
              repo = ARGV[-2]
         
     | 
| 
      
 11 
     | 
    
         
            +
              target = ARGV[-1]
         
     | 
| 
      
 12 
     | 
    
         
            +
              original_repo = repo
         
     | 
| 
      
 13 
     | 
    
         
            +
              repo = repo.gsub(/.git$/, "")
         
     | 
| 
      
 14 
     | 
    
         
            +
              repo_org = repo.split("/")[-2]
         
     | 
| 
      
 15 
     | 
    
         
            +
              repo_name = repo.split("/")[-1]
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              mundler_root = File.join(ENV["HOME"], ".mundler")
         
     | 
| 
      
 18 
     | 
    
         
            +
              cache_root = File.join(mundler_root, "cache")
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              unless File.directory?(File.join(cache_root, repo_org, repo_name))
         
     | 
| 
      
 21 
     | 
    
         
            +
                FileUtils.mkdir_p(File.join(cache_root, repo_org))
         
     | 
| 
      
 22 
     | 
    
         
            +
                FileUtils.cd(File.join(cache_root, repo_org)) do
         
     | 
| 
      
 23 
     | 
    
         
            +
                  system(
         
     | 
| 
      
 24 
     | 
    
         
            +
                    { "PATH" => paths.join(":") },
         
     | 
| 
      
 25 
     | 
    
         
            +
                    "git clone #{original_repo}"
         
     | 
| 
      
 26 
     | 
    
         
            +
                  )
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
                status = $?.exitstatus
         
     | 
| 
      
 29 
     | 
    
         
            +
                if status != 0
         
     | 
| 
      
 30 
     | 
    
         
            +
                  puts "Real git failed with status #{status}"
         
     | 
| 
      
 31 
     | 
    
         
            +
                  exit(status)
         
     | 
| 
      
 32 
     | 
    
         
            +
                end
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              full_target = target.start_with?("/") ? target : File.expand_path(File.join(Dir.pwd, target))
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
              if File.directory?(full_target) && Dir.glob(File.join(full_target, "**", "*")).count > 0
         
     | 
| 
      
 38 
     | 
    
         
            +
                warn "fatal: destination path '#{target}' already exists and is not an empty directory."
         
     | 
| 
      
 39 
     | 
    
         
            +
                exit 1
         
     | 
| 
      
 40 
     | 
    
         
            +
              else
         
     | 
| 
      
 41 
     | 
    
         
            +
                FileUtils.cp_r(
         
     | 
| 
      
 42 
     | 
    
         
            +
                  File.join(cache_root, repo_org, repo_name, "."),
         
     | 
| 
      
 43 
     | 
    
         
            +
                  File.join(full_target)
         
     | 
| 
      
 44 
     | 
    
         
            +
                )
         
     | 
| 
      
 45 
     | 
    
         
            +
                puts "Copied #{repo_name} from cache as #{target} (#{full_target})"
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
            else
         
     | 
| 
      
 48 
     | 
    
         
            +
              system(
         
     | 
| 
      
 49 
     | 
    
         
            +
                { "PATH" => paths.join(":") },
         
     | 
| 
      
 50 
     | 
    
         
            +
                "git #{ARGV.join(" ")}"
         
     | 
| 
      
 51 
     | 
    
         
            +
              )
         
     | 
| 
      
 52 
     | 
    
         
            +
              exit($?.exitstatus || 0)
         
     | 
| 
      
 53 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,19 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/env ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            def git
         
     | 
| 
      
 4 
     | 
    
         
            +
              dir = __dir__
         
     | 
| 
      
 5 
     | 
    
         
            +
              File.expand_path(File.join(dir, "cached_git"))
         
     | 
| 
      
 6 
     | 
    
         
            +
            end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            def main
         
     | 
| 
      
 9 
     | 
    
         
            +
              system("#{git} #{ARGV.join(" ")}")
         
     | 
| 
      
 10 
     | 
    
         
            +
              exit($?.exitstatus || 0)
         
     | 
| 
      
 11 
     | 
    
         
            +
            end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            if defined?(Bundler) && Bundler.respond_to?(:with_unbundled_env)
         
     | 
| 
      
 14 
     | 
    
         
            +
              Bundler.with_unbundled_env { main }
         
     | 
| 
      
 15 
     | 
    
         
            +
            elsif defined?(Bundler)
         
     | 
| 
      
 16 
     | 
    
         
            +
              Bundler.with_clean_env { main }
         
     | 
| 
      
 17 
     | 
    
         
            +
            else
         
     | 
| 
      
 18 
     | 
    
         
            +
              main
         
     | 
| 
      
 19 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -11,11 +11,12 @@ module Mundler 
     | 
|
| 
       11 
11 
     | 
    
         
             
                desc "install", "Download and compile mruby"
         
     | 
| 
       12 
12 
     | 
    
         
             
                def install
         
     | 
| 
       13 
13 
     | 
    
         
             
                  Mundler::Project.new(Dir.pwd).install
         
     | 
| 
      
 14 
     | 
    
         
            +
                  puts("\e[32mMundle complete!\e[0m")
         
     | 
| 
       14 
15 
     | 
    
         
             
                rescue Mundler::CompilationError
         
     | 
| 
       15 
     | 
    
         
            -
                  $stderr.puts("\e[ 
     | 
| 
      
 16 
     | 
    
         
            +
                  $stderr.puts("\e[31mMundle failed\e[0m")
         
     | 
| 
       16 
17 
     | 
    
         
             
                  exit 1
         
     | 
| 
       17 
18 
     | 
    
         
             
                rescue Interrupt
         
     | 
| 
       18 
     | 
    
         
            -
                  $stderr.puts("\e[ 
     | 
| 
      
 19 
     | 
    
         
            +
                  $stderr.puts("\e[31mMundle failed (user cancelled)\e[0m")
         
     | 
| 
       19 
20 
     | 
    
         
             
                  exit 1
         
     | 
| 
       20 
21 
     | 
    
         
             
                rescue MundlefileNotFound
         
     | 
| 
       21 
22 
     | 
    
         
             
                  $stderr.puts("\e[31mMundlefile not found in the current directory\e[0m")
         
     | 
| 
         @@ -27,6 +28,7 @@ module Mundler 
     | 
|
| 
       27 
28 
     | 
    
         
             
                  project = Mundler::Project.new(Dir.pwd)
         
     | 
| 
       28 
29 
     | 
    
         
             
                  project.clean
         
     | 
| 
       29 
30 
     | 
    
         
             
                  project.install
         
     | 
| 
      
 31 
     | 
    
         
            +
                  puts("\e[32mMundle complete!\e[0m")
         
     | 
| 
       30 
32 
     | 
    
         
             
                rescue Mundler::CompilationError
         
     | 
| 
       31 
33 
     | 
    
         
             
                  $stderr.puts("\e[31mFailed to install\e[0m")
         
     | 
| 
       32 
34 
     | 
    
         
             
                  exit 1
         
     | 
| 
         @@ -10,10 +10,16 @@ module Mundler 
     | 
|
| 
       10 
10 
     | 
    
         
             
                  @gemboxes = []
         
     | 
| 
       11 
11 
     | 
    
         
             
                  @gems = []
         
     | 
| 
       12 
12 
     | 
    
         
             
                  @platform_types = {}
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @library_types = {}
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @env = {}
         
     | 
| 
      
 15 
     | 
    
         
            +
                  @libraries = {}
         
     | 
| 
       13 
16 
     | 
    
         
             
                end
         
     | 
| 
       14 
17 
     | 
    
         | 
| 
       15 
18 
     | 
    
         
             
                attr_reader :mruby
         
     | 
| 
       16 
19 
     | 
    
         
             
                attr_reader :platform_types
         
     | 
| 
      
 20 
     | 
    
         
            +
                attr_reader :library_types
         
     | 
| 
      
 21 
     | 
    
         
            +
                attr_reader :libraries
         
     | 
| 
      
 22 
     | 
    
         
            +
                attr_reader :env
         
     | 
| 
       17 
23 
     | 
    
         | 
| 
       18 
24 
     | 
    
         
             
                def hex
         
     | 
| 
       19 
25 
     | 
    
         
             
                  Digest::MD5.hexdigest(to_s)
         
     | 
| 
         @@ -36,9 +42,25 @@ module Mundler 
     | 
|
| 
       36 
42 
     | 
    
         
             
                    #{mruby.inspect}
         
     | 
| 
       37 
43 
     | 
    
         
             
                    #{platforms.inspect}
         
     | 
| 
       38 
44 
     | 
    
         
             
                    #{platform_types.keys.sort.inspect}
         
     | 
| 
      
 45 
     | 
    
         
            +
                    #{library_types.keys.sort.inspect}
         
     | 
| 
      
 46 
     | 
    
         
            +
                    #{hashable_string_for_hash(env)}
         
     | 
| 
       39 
47 
     | 
    
         
             
                    #{gemboxes.inspect}
         
     | 
| 
       40 
48 
     | 
    
         
             
                    #{gems.inspect}
         
     | 
| 
      
 49 
     | 
    
         
            +
                    #{hashable_string_for_hash(libraries)}
         
     | 
| 
       41 
50 
     | 
    
         
             
                  HASHABLE
         
     | 
| 
       42 
51 
     | 
    
         
             
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                private
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                def hashable_string_for_hash(hash)
         
     | 
| 
      
 56 
     | 
    
         
            +
                  str = "{"
         
     | 
| 
      
 57 
     | 
    
         
            +
                  sorted_keys = hash.keys.sort
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                  sorted_keys.map do |key|
         
     | 
| 
      
 60 
     | 
    
         
            +
                    str = str + "#{key}=>#{hash[key]}"
         
     | 
| 
      
 61 
     | 
    
         
            +
                  end.join(", ")
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                  str + "}"
         
     | 
| 
      
 64 
     | 
    
         
            +
                end
         
     | 
| 
       43 
65 
     | 
    
         
             
              end
         
     | 
| 
       44 
66 
     | 
    
         
             
            end
         
     | 
| 
         @@ -3,13 +3,12 @@ module Mundler 
     | 
|
| 
       3 
3 
     | 
    
         
             
                def initialize(path)
         
     | 
| 
       4 
4 
     | 
    
         
             
                  @config = Config.new
         
     | 
| 
       5 
5 
     | 
    
         
             
                  @path = path
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                  load_libraries
         
     | 
| 
      
 8 
     | 
    
         
            +
                  load_platforms
         
     | 
| 
       6 
9 
     | 
    
         
             
                end
         
     | 
| 
       7 
10 
     | 
    
         | 
| 
       8 
11 
     | 
    
         
             
                def evaluate!
         
     | 
| 
       9 
     | 
    
         
            -
                  platforms = Dir.glob(File.join(__dir__, "platforms", "*.rb"))
         
     | 
| 
       10 
     | 
    
         
            -
                  platforms.each do |platform|
         
     | 
| 
       11 
     | 
    
         
            -
                    instance_eval(File.read(platform))
         
     | 
| 
       12 
     | 
    
         
            -
                  end
         
     | 
| 
       13 
12 
     | 
    
         
             
                  begin
         
     | 
| 
       14 
13 
     | 
    
         
             
                    instance_eval(File.read(@path), @path)
         
     | 
| 
       15 
14 
     | 
    
         
             
                  rescue Errno::ENOENT
         
     | 
| 
         @@ -19,6 +18,20 @@ module Mundler 
     | 
|
| 
       19 
18 
     | 
    
         | 
| 
       20 
19 
     | 
    
         
             
                attr_reader :config
         
     | 
| 
       21 
20 
     | 
    
         | 
| 
      
 21 
     | 
    
         
            +
                def load_libraries
         
     | 
| 
      
 22 
     | 
    
         
            +
                  libraries = Dir.glob(File.join(__dir__, "libraries", "*.rb"))
         
     | 
| 
      
 23 
     | 
    
         
            +
                  libraries.each do |library|
         
     | 
| 
      
 24 
     | 
    
         
            +
                    instance_eval(File.read(library))
         
     | 
| 
      
 25 
     | 
    
         
            +
                  end
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                def load_platforms
         
     | 
| 
      
 29 
     | 
    
         
            +
                  platforms = Dir.glob(File.join(__dir__, "platforms", "*.rb"))
         
     | 
| 
      
 30 
     | 
    
         
            +
                  platforms.each do |platform|
         
     | 
| 
      
 31 
     | 
    
         
            +
                    instance_eval(File.read(platform))
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
       22 
35 
     | 
    
         
             
                private
         
     | 
| 
       23 
36 
     | 
    
         | 
| 
       24 
37 
     | 
    
         
             
                def mruby(url: nil, tag: nil, branch: nil)
         
     | 
| 
         @@ -36,12 +49,29 @@ module Mundler 
     | 
|
| 
       36 
49 
     | 
    
         
             
                  config.platform_types[name.to_s] = platform_class
         
     | 
| 
       37 
50 
     | 
    
         
             
                end
         
     | 
| 
       38 
51 
     | 
    
         | 
| 
       39 
     | 
    
         
            -
                def platform(name, options)
         
     | 
| 
      
 52 
     | 
    
         
            +
                def platform(name, options = {})
         
     | 
| 
       40 
53 
     | 
    
         
             
                  config.platforms << { name: name.to_s, options: options }
         
     | 
| 
       41 
54 
     | 
    
         
             
                end
         
     | 
| 
       42 
55 
     | 
    
         | 
| 
       43 
56 
     | 
    
         
             
                def gem(name, core: nil, path: nil, github: nil)
         
     | 
| 
      
 57 
     | 
    
         
            +
                  if path && !path.start_with?("/")
         
     | 
| 
      
 58 
     | 
    
         
            +
                    app_path = Pathname.new(@path).dirname.to_s
         
     | 
| 
      
 59 
     | 
    
         
            +
                    path = File.expand_path(File.join(app_path, path))
         
     | 
| 
      
 60 
     | 
    
         
            +
                  end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
       44 
62 
     | 
    
         
             
                  config.gems << { name: name, path: path, github: github, core: core }
         
     | 
| 
       45 
63 
     | 
    
         
             
                end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                def env(name, value)
         
     | 
| 
      
 66 
     | 
    
         
            +
                  config.env[name] = value
         
     | 
| 
      
 67 
     | 
    
         
            +
                end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                def library(name, options = {})
         
     | 
| 
      
 70 
     | 
    
         
            +
                  config.libraries[name.to_s] = options
         
     | 
| 
      
 71 
     | 
    
         
            +
                end
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                def define_library(name, library_class)
         
     | 
| 
      
 74 
     | 
    
         
            +
                  config.library_types[name.to_s] = library_class
         
     | 
| 
      
 75 
     | 
    
         
            +
                end
         
     | 
| 
       46 
76 
     | 
    
         
             
              end
         
     | 
| 
       47 
77 
     | 
    
         
             
            end
         
     | 
| 
         @@ -29,7 +29,8 @@ module Mundler 
     | 
|
| 
       29 
29 
     | 
    
         
             
                  FileUtils.rm_rf(@path)
         
     | 
| 
       30 
30 
     | 
    
         
             
                  FileUtils.mkdir_p(@path)
         
     | 
| 
       31 
31 
     | 
    
         
             
                  FileUtils.cd(@path)
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  Mundler.with_clean_env do
         
     | 
| 
       33 
34 
     | 
    
         
             
                    system(
         
     | 
| 
       34 
35 
     | 
    
         
             
                      {
         
     | 
| 
       35 
36 
     | 
    
         
             
                        # The {mundler gem path}/cached_git directory contains a binary called
         
     | 
| 
         @@ -38,15 +39,7 @@ module Mundler 
     | 
|
| 
       38 
39 
     | 
    
         
             
                        "PATH" => ([cached_git_dir] + ENV["PATH"].split(":")).join(":")
         
     | 
| 
       39 
40 
     | 
    
         
             
                      },
         
     | 
| 
       40 
41 
     | 
    
         
             
                      "git clone #{mruby_url} . >/dev/null 2>&1"
         
     | 
| 
       41 
     | 
    
         
            -
                    ) ||  
     | 
| 
       42 
     | 
    
         
            -
                  end
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
                  if defined?(Bundler) && Bundler.respond_to?(:with_unbundled_env)
         
     | 
| 
       45 
     | 
    
         
            -
                    Bundler.with_unbundled_env(&git_clone)
         
     | 
| 
       46 
     | 
    
         
            -
                  elsif defined?(Bundler)
         
     | 
| 
       47 
     | 
    
         
            -
                    Bundler.with_clean_env(&git_clone)
         
     | 
| 
       48 
     | 
    
         
            -
                  else
         
     | 
| 
       49 
     | 
    
         
            -
                    git_clone.call
         
     | 
| 
      
 42 
     | 
    
         
            +
                    ) || raise(Mundler::CloneError, "Failed to clone #{mruby_url}")
         
     | 
| 
       50 
43 
     | 
    
         
             
                  end
         
     | 
| 
       51 
44 
     | 
    
         | 
| 
       52 
45 
     | 
    
         
             
                  if version
         
     | 
| 
         @@ -70,6 +63,22 @@ module Mundler 
     | 
|
| 
       70 
63 
     | 
    
         
             
                def compile(build_config)
         
     | 
| 
       71 
64 
     | 
    
         
             
                  logfile = Tempfile.new(['mundler_build', '.log'])
         
     | 
| 
       72 
65 
     | 
    
         | 
| 
      
 66 
     | 
    
         
            +
                  version = (
         
     | 
| 
      
 67 
     | 
    
         
            +
                    @config.mruby[:tag] ||
         
     | 
| 
      
 68 
     | 
    
         
            +
                    @config.mruby[:branch] ||
         
     | 
| 
      
 69 
     | 
    
         
            +
                    @config.mruby[:version]
         
     | 
| 
      
 70 
     | 
    
         
            +
                  )
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                  @config.gemboxes.each do |gembox|
         
     | 
| 
      
 73 
     | 
    
         
            +
                    puts "Using #{gembox} gembox"
         
     | 
| 
      
 74 
     | 
    
         
            +
                  end
         
     | 
| 
      
 75 
     | 
    
         
            +
                  @config.gems.each do |gem|
         
     | 
| 
      
 76 
     | 
    
         
            +
                    puts "Using #{gem[:name]} gem"
         
     | 
| 
      
 77 
     | 
    
         
            +
                  end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                  puts "Using mruby (#{version})"
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
       73 
82 
     | 
    
         
             
                  success_indicator = File.join(@path, ".mundler_built_successfully")
         
     | 
| 
       74 
83 
     | 
    
         
             
                  if File.file?(success_indicator)
         
     | 
| 
       75 
84 
     | 
    
         
             
                    return
         
     | 
| 
         @@ -87,14 +96,14 @@ module Mundler 
     | 
|
| 
       87 
96 
     | 
    
         
             
                          directory = pathname.directory? ? pathname.to_s : Pathname.new(file).dirname.to_s
         
     | 
| 
       88 
97 
     | 
    
         
             
                          next if covered.include?(directory)
         
     | 
| 
       89 
98 
     | 
    
         
             
                          covered << directory
         
     | 
| 
       90 
     | 
    
         
            -
                          print "\e[ 
     | 
| 
      
 99 
     | 
    
         
            +
                          print "\e[34m.\e[0m"
         
     | 
| 
       91 
100 
     | 
    
         
             
                        end
         
     | 
| 
       92 
101 
     | 
    
         
             
                      end
         
     | 
| 
       93 
102 
     | 
    
         
             
                      sleep(0.3)
         
     | 
| 
       94 
103 
     | 
    
         
             
                    end
         
     | 
| 
       95 
104 
     | 
    
         
             
                  end
         
     | 
| 
       96 
105 
     | 
    
         | 
| 
       97 
     | 
    
         
            -
                   
     | 
| 
      
 106 
     | 
    
         
            +
                  Mundler.with_clean_env do
         
     | 
| 
       98 
107 
     | 
    
         
             
                    rake = `which rake`.chomp
         
     | 
| 
       99 
108 
     | 
    
         
             
                    system(
         
     | 
| 
       100 
109 
     | 
    
         
             
                      {
         
     | 
| 
         @@ -108,15 +117,14 @@ module Mundler 
     | 
|
| 
       108 
117 
     | 
    
         
             
                    ) || begin
         
     | 
| 
       109 
118 
     | 
    
         
             
                      $stderr.print "\e[31mF\e[0m"
         
     | 
| 
       110 
119 
     | 
    
         
             
                      $stderr.puts "\n\n"
         
     | 
| 
      
 120 
     | 
    
         
            +
                      $stderr.puts File.read(build_config)
         
     | 
| 
       111 
121 
     | 
    
         
             
                      $stderr.puts File.read(logfile)
         
     | 
| 
       112 
122 
     | 
    
         | 
| 
       113 
123 
     | 
    
         
             
                      raise Mundler::CompilationError
         
     | 
| 
       114 
124 
     | 
    
         
             
                    end
         
     | 
| 
       115 
125 
     | 
    
         | 
| 
       116 
126 
     | 
    
         
             
                    cleaned = true
         
     | 
| 
       117 
     | 
    
         
            -
                  end
         
     | 
| 
       118 
127 
     | 
    
         | 
| 
       119 
     | 
    
         
            -
                  compile = Proc.new do
         
     | 
| 
       120 
128 
     | 
    
         
             
                    rake = `which rake`.chomp
         
     | 
| 
       121 
129 
     | 
    
         
             
                    system(
         
     | 
| 
       122 
130 
     | 
    
         
             
                      {
         
     | 
| 
         @@ -130,26 +138,18 @@ module Mundler 
     | 
|
| 
       130 
138 
     | 
    
         
             
                    ) || begin
         
     | 
| 
       131 
139 
     | 
    
         
             
                      $stderr.print "\e[31mF\e[0m"
         
     | 
| 
       132 
140 
     | 
    
         
             
                      $stderr.puts "\n\n"
         
     | 
| 
      
 141 
     | 
    
         
            +
                      $stderr.puts File.read(build_config)
         
     | 
| 
       133 
142 
     | 
    
         
             
                      $stderr.puts File.read(logfile)
         
     | 
| 
       134 
143 
     | 
    
         | 
| 
       135 
144 
     | 
    
         
             
                      raise Mundler::CompilationError
         
     | 
| 
       136 
145 
     | 
    
         
             
                    end
         
     | 
| 
       137 
146 
     | 
    
         
             
                  end
         
     | 
| 
       138 
147 
     | 
    
         | 
| 
       139 
     | 
    
         
            -
                   
     | 
| 
       140 
     | 
    
         
            -
                    Bundler.with_unbundled_env(&clean)
         
     | 
| 
       141 
     | 
    
         
            -
                    Bundler.with_unbundled_env(&compile)
         
     | 
| 
       142 
     | 
    
         
            -
                  elsif defined?(Bundler)
         
     | 
| 
       143 
     | 
    
         
            -
                    Bundler.with_clean_env(&clean)
         
     | 
| 
       144 
     | 
    
         
            -
                    Bundler.with_clean_env(&compile)
         
     | 
| 
       145 
     | 
    
         
            -
                  else
         
     | 
| 
       146 
     | 
    
         
            -
                    clean.call
         
     | 
| 
       147 
     | 
    
         
            -
                    compile.call
         
     | 
| 
       148 
     | 
    
         
            -
                  end
         
     | 
| 
      
 148 
     | 
    
         
            +
                  puts "\n\n"
         
     | 
| 
       149 
149 
     | 
    
         | 
| 
       150 
     | 
    
         
            -
                  output_thread.kill
         
     | 
| 
       151 
150 
     | 
    
         
             
                  FileUtils.touch(success_indicator)
         
     | 
| 
       152 
151 
     | 
    
         
             
                ensure
         
     | 
| 
      
 152 
     | 
    
         
            +
                  output_thread.kill if output_thread
         
     | 
| 
       153 
153 
     | 
    
         
             
                  logfile.close
         
     | 
| 
       154 
154 
     | 
    
         
             
                  logfile.delete
         
     | 
| 
       155 
155 
     | 
    
         
             
                end
         
     | 
| 
         @@ -175,7 +175,7 @@ module Mundler 
     | 
|
| 
       175 
175 
     | 
    
         
             
                end
         
     | 
| 
       176 
176 
     | 
    
         | 
| 
       177 
177 
     | 
    
         
             
                def cached_git_dir
         
     | 
| 
       178 
     | 
    
         
            -
                  dir = File.expand_path(File.join(__dir__, " 
     | 
| 
      
 178 
     | 
    
         
            +
                  dir = File.expand_path(File.join(__dir__, "cached_git"))
         
     | 
| 
       179 
179 
     | 
    
         
             
                  raise "cached git not found" unless File.file?(File.join(dir, "git"))
         
     | 
| 
       180 
180 
     | 
    
         
             
                  raise "cached git not found" unless File.file?(File.join(dir, "cached_git"))
         
     | 
| 
       181 
181 
     | 
    
         
             
                  dir
         
     | 
| 
         @@ -0,0 +1,54 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module AndroidPlatform
         
     | 
| 
      
 2 
     | 
    
         
            +
              def self.config(options, build_config)
         
     | 
| 
      
 3 
     | 
    
         
            +
                valid_archs = [:"arm64-v8a", :armeabi, :"armeabi-v7a"]
         
     | 
| 
      
 4 
     | 
    
         
            +
                options[:archs] ||= valid_archs
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                options[:archs].map do |arch|
         
     | 
| 
      
 7 
     | 
    
         
            +
                  unless valid_archs.include?(arch)
         
     | 
| 
      
 8 
     | 
    
         
            +
                    raise "Invalid architecture #{arch}. Valid values: #{valid_archs}"
         
     | 
| 
      
 9 
     | 
    
         
            +
                  end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  <<~BUILD
         
     | 
| 
      
 12 
     | 
    
         
            +
                    MRuby::CrossBuild.new("android__#{arch}") do |conf|
         
     | 
| 
      
 13 
     | 
    
         
            +
                      params = {
         
     | 
| 
      
 14 
     | 
    
         
            +
                        :arch => #{arch.inspect},
         
     | 
| 
      
 15 
     | 
    
         
            +
                        :platform => 'android-24',
         
     | 
| 
      
 16 
     | 
    
         
            +
                        :toolchain => :clang,
         
     | 
| 
      
 17 
     | 
    
         
            +
                      }
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                      if #{arch.inspect} == :"armeabi-v7a"
         
     | 
| 
      
 20 
     | 
    
         
            +
                        params[:mfpu] = "neon"
         
     | 
| 
      
 21 
     | 
    
         
            +
                        params[:mfloat_abi] = "hard"
         
     | 
| 
      
 22 
     | 
    
         
            +
                      end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                      toolchain :android, params
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                    #{cc_and_linker(options[:options])}
         
     | 
| 
      
 27 
     | 
    
         
            +
                      #{build_config.gemboxes}
         
     | 
| 
      
 28 
     | 
    
         
            +
                      #{build_config.gems}
         
     | 
| 
      
 29 
     | 
    
         
            +
                    end
         
     | 
| 
      
 30 
     | 
    
         
            +
                  BUILD
         
     | 
| 
      
 31 
     | 
    
         
            +
                end.join("\n")
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              def self.cc_and_linker(options)
         
     | 
| 
      
 35 
     | 
    
         
            +
                build = ""
         
     | 
| 
      
 36 
     | 
    
         
            +
                if options[:cc]
         
     | 
| 
      
 37 
     | 
    
         
            +
                  build += "  conf.cc do |cc|\n"
         
     | 
| 
      
 38 
     | 
    
         
            +
                  build += "    cc.command = #{options[:cc][:command].inspect}\n" if options[:cc][:command]
         
     | 
| 
      
 39 
     | 
    
         
            +
                  build += "    cc.flags << #{options[:cc][:flags].inspect}\n" if options[:cc][:flags]
         
     | 
| 
      
 40 
     | 
    
         
            +
                  build += "  end\n\n"
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                if options[:linker]
         
     | 
| 
      
 44 
     | 
    
         
            +
                  build += "  conf.linker do |linker|\n"
         
     | 
| 
      
 45 
     | 
    
         
            +
                  build += "    linker.command = #{options[:linker][:command].inspect}\n" if options[:linker][:command]
         
     | 
| 
      
 46 
     | 
    
         
            +
                  build += "    linker.flags << #{options[:linker][:flags].inspect}\n" if options[:linker][:flags]
         
     | 
| 
      
 47 
     | 
    
         
            +
                  build += "  end\n\n"
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                build
         
     | 
| 
      
 51 
     | 
    
         
            +
              end
         
     | 
| 
      
 52 
     | 
    
         
            +
            end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            define_platform "android", AndroidPlatform
         
     | 
| 
         @@ -0,0 +1,23 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module HostPlatform
         
     | 
| 
      
 2 
     | 
    
         
            +
              def self.config(options, build_config)
         
     | 
| 
      
 3 
     | 
    
         
            +
                build = ""
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                if options[:cc]
         
     | 
| 
      
 6 
     | 
    
         
            +
                  build += "  conf.cc do |cc|\n"
         
     | 
| 
      
 7 
     | 
    
         
            +
                  build += "    cc.command = #{options[:cc][:command].inspect}\n" if options[:cc][:command]
         
     | 
| 
      
 8 
     | 
    
         
            +
                  build += "    cc.flags << #{options[:cc][:flags].inspect}\n" if options[:cc][:flags]
         
     | 
| 
      
 9 
     | 
    
         
            +
                  build += "  end\n\n"
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                if options[:linker]
         
     | 
| 
      
 13 
     | 
    
         
            +
                  build += "  conf.linker do |linker|\n"
         
     | 
| 
      
 14 
     | 
    
         
            +
                  build += "    linker.command = #{options[:linker][:command].inspect}\n" if options[:linker][:command]
         
     | 
| 
      
 15 
     | 
    
         
            +
                  build += "    linker.flags << #{options[:linker][:flags].inspect}\n" if options[:linker][:flags]
         
     | 
| 
      
 16 
     | 
    
         
            +
                  build += "  end\n\n"
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                build
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
            end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            define_platform "host", HostPlatform
         
     | 
| 
         @@ -1,7 +1,8 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module IOSPlatform
         
     | 
| 
       2 
2 
     | 
    
         
             
              def self.config(options, build_config)
         
     | 
| 
       3 
3 
     | 
    
         
             
                valid_archs = [:armv7, :arm64]
         
     | 
| 
       4 
     | 
    
         
            -
                 
     | 
| 
      
 4 
     | 
    
         
            +
                default_archs = [:arm64]
         
     | 
| 
      
 5 
     | 
    
         
            +
                options[:archs] ||= default_archs
         
     | 
| 
       5 
6 
     | 
    
         | 
| 
       6 
7 
     | 
    
         
             
                options[:archs].map do |arch|
         
     | 
| 
       7 
8 
     | 
    
         
             
                  unless valid_archs.include?(arch)
         
     | 
| 
         @@ -19,19 +20,25 @@ module IOSPlatform 
     | 
|
| 
       19 
20 
     | 
    
         
             
                    -isysroot #{ios_sdk}
         
     | 
| 
       20 
21 
     | 
    
         
             
                  )
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
      
 23 
     | 
    
         
            +
                  cc_command = options.dig(:cc, :command) || clang
         
     | 
| 
      
 24 
     | 
    
         
            +
                  linker_command = options.dig(:linker, :command) || clang
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                  cc_flags = flags + Array(options.dig(:cc, :flags) || [])
         
     | 
| 
      
 27 
     | 
    
         
            +
                  linker_flags = flags + Array(options.dig(:linker, :flags) || [])
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
       22 
29 
     | 
    
         
             
                  <<~BUILD
         
     | 
| 
       23 
30 
     | 
    
         
             
                    MRuby::CrossBuild.new("ios__#{arch}") do |conf|
         
     | 
| 
       24 
31 
     | 
    
         
             
                      #{build_config.gemboxes}
         
     | 
| 
       25 
32 
     | 
    
         
             
                      #{build_config.gems}
         
     | 
| 
       26 
33 
     | 
    
         | 
| 
       27 
34 
     | 
    
         
             
                      conf.cc do |cc|
         
     | 
| 
       28 
     | 
    
         
            -
                        cc.command = #{ 
     | 
| 
       29 
     | 
    
         
            -
                        cc.flags = #{ 
     | 
| 
      
 35 
     | 
    
         
            +
                        cc.command = #{cc_command.inspect}
         
     | 
| 
      
 36 
     | 
    
         
            +
                        cc.flags = #{cc_flags.inspect}
         
     | 
| 
       30 
37 
     | 
    
         
             
                      end
         
     | 
| 
       31 
38 
     | 
    
         | 
| 
       32 
39 
     | 
    
         
             
                      conf.linker do |l|
         
     | 
| 
       33 
     | 
    
         
            -
                        l.command = #{ 
     | 
| 
       34 
     | 
    
         
            -
                        l.flags = #{ 
     | 
| 
      
 40 
     | 
    
         
            +
                        l.command = #{linker_command.inspect}
         
     | 
| 
      
 41 
     | 
    
         
            +
                        l.flags = #{linker_flags.inspect}
         
     | 
| 
       35 
42 
     | 
    
         
             
                      end
         
     | 
| 
       36 
43 
     | 
    
         
             
                    end
         
     | 
| 
       37 
44 
     | 
    
         
             
                  BUILD
         
     | 
    
        data/{Users/dan2552/Dropbox/experiments/mundler/lib → lib}/mundler/platforms/ios_simulator.rb
    RENAMED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module IOSSimulatorPlatform
         
     | 
| 
       2 
2 
     | 
    
         
             
              def self.config(options, build_config)
         
     | 
| 
       3 
     | 
    
         
            -
                valid_archs = [:i386, :x86_64]
         
     | 
| 
      
 3 
     | 
    
         
            +
                valid_archs = [:i386, :x86_64, :arm64]
         
     | 
| 
       4 
4 
     | 
    
         
             
                options[:archs] ||= valid_archs
         
     | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
                options[:archs].map do |arch|
         
     | 
| 
         @@ -19,19 +19,25 @@ module IOSSimulatorPlatform 
     | 
|
| 
       19 
19 
     | 
    
         
             
                    -isysroot #{ios_simulator_sdk}
         
     | 
| 
       20 
20 
     | 
    
         
             
                  )
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
      
 22 
     | 
    
         
            +
                  cc_command = options.dig(:cc, :command) || clang
         
     | 
| 
      
 23 
     | 
    
         
            +
                  linker_command = options.dig(:linker, :command) || clang
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                  cc_flags = flags + Array(options.dig(:cc, :flags) || [])
         
     | 
| 
      
 26 
     | 
    
         
            +
                  linker_flags = flags + Array(options.dig(:linker, :flags) || [])
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
       22 
28 
     | 
    
         
             
                  <<~BUILD
         
     | 
| 
       23 
29 
     | 
    
         
             
                    MRuby::CrossBuild.new("ios_simulator__#{arch}") do |conf|
         
     | 
| 
       24 
30 
     | 
    
         
             
                      #{build_config.gemboxes}
         
     | 
| 
       25 
31 
     | 
    
         
             
                      #{build_config.gems}
         
     | 
| 
       26 
32 
     | 
    
         | 
| 
       27 
33 
     | 
    
         
             
                      conf.cc do |cc|
         
     | 
| 
       28 
     | 
    
         
            -
                        cc.command = #{ 
     | 
| 
       29 
     | 
    
         
            -
                        cc.flags = #{ 
     | 
| 
      
 34 
     | 
    
         
            +
                        cc.command = #{cc_command.inspect}
         
     | 
| 
      
 35 
     | 
    
         
            +
                        cc.flags = #{cc_flags.inspect}
         
     | 
| 
       30 
36 
     | 
    
         
             
                      end
         
     | 
| 
       31 
37 
     | 
    
         | 
| 
       32 
38 
     | 
    
         
             
                      conf.linker do |l|
         
     | 
| 
       33 
     | 
    
         
            -
                        l.command = #{ 
     | 
| 
       34 
     | 
    
         
            -
                        l.flags = #{ 
     | 
| 
      
 39 
     | 
    
         
            +
                        l.command = #{linker_command.inspect}
         
     | 
| 
      
 40 
     | 
    
         
            +
                        l.flags = #{linker_flags.inspect}
         
     | 
| 
       35 
41 
     | 
    
         
             
                      end
         
     | 
| 
       36 
42 
     | 
    
         
             
                    end
         
     | 
| 
       37 
43 
     | 
    
         
             
                  BUILD
         
     | 
| 
         
            File without changes
         
     | 
| 
         @@ -8,9 +8,11 @@ require "mundler/build_config" 
     | 
|
| 
       8 
8 
     | 
    
         
             
            require "mundler/dsl"
         
     | 
| 
       9 
9 
     | 
    
         
             
            require "mundler/mruby"
         
     | 
| 
       10 
10 
     | 
    
         
             
            require "mundler/project"
         
     | 
| 
      
 11 
     | 
    
         
            +
            require "mundler/clean_environment"
         
     | 
| 
       11 
12 
     | 
    
         | 
| 
       12 
13 
     | 
    
         
             
            module Mundler
         
     | 
| 
       13 
14 
     | 
    
         
             
              class CompilationError < StandardError; end
         
     | 
| 
      
 15 
     | 
    
         
            +
              class CloneError < CompilationError; end
         
     | 
| 
       14 
16 
     | 
    
         
             
              class NotInstalledError < StandardError; end
         
     | 
| 
       15 
17 
     | 
    
         
             
              class MundlefileNotFound < StandardError; end
         
     | 
| 
       16 
18 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: mundler
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.8.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Daniel Inkpen
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2021- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2021-09-29 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: rake
         
     | 
| 
         @@ -60,17 +60,23 @@ executables: 
     | 
|
| 
       60 
60 
     | 
    
         
             
            extensions: []
         
     | 
| 
       61 
61 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
       62 
62 
     | 
    
         
             
            files:
         
     | 
| 
       63 
     | 
    
         
            -
            - "/Users/dan2552/Dropbox/experiments/mundler/lib/mundler.rb"
         
     | 
| 
       64 
     | 
    
         
            -
            - "/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/build_config.rb"
         
     | 
| 
       65 
     | 
    
         
            -
            - "/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/cli.rb"
         
     | 
| 
       66 
     | 
    
         
            -
            - "/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/config.rb"
         
     | 
| 
       67 
     | 
    
         
            -
            - "/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/dsl.rb"
         
     | 
| 
       68 
     | 
    
         
            -
            - "/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/mruby.rb"
         
     | 
| 
       69 
     | 
    
         
            -
            - "/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/platforms/ios.rb"
         
     | 
| 
       70 
     | 
    
         
            -
            - "/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/platforms/ios_simulator.rb"
         
     | 
| 
       71 
     | 
    
         
            -
            - "/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/project.rb"
         
     | 
| 
       72 
     | 
    
         
            -
            - "/Users/dan2552/Dropbox/experiments/mundler/lib/mundler/version.rb"
         
     | 
| 
       73 
63 
     | 
    
         
             
            - exe/mundle
         
     | 
| 
      
 64 
     | 
    
         
            +
            - lib/mundler.rb
         
     | 
| 
      
 65 
     | 
    
         
            +
            - lib/mundler/build_config.rb
         
     | 
| 
      
 66 
     | 
    
         
            +
            - lib/mundler/cached_git/cached_git
         
     | 
| 
      
 67 
     | 
    
         
            +
            - lib/mundler/cached_git/git
         
     | 
| 
      
 68 
     | 
    
         
            +
            - lib/mundler/clean_environment.rb
         
     | 
| 
      
 69 
     | 
    
         
            +
            - lib/mundler/cli.rb
         
     | 
| 
      
 70 
     | 
    
         
            +
            - lib/mundler/config.rb
         
     | 
| 
      
 71 
     | 
    
         
            +
            - lib/mundler/dsl.rb
         
     | 
| 
      
 72 
     | 
    
         
            +
            - lib/mundler/libraries/example.rb
         
     | 
| 
      
 73 
     | 
    
         
            +
            - lib/mundler/mruby.rb
         
     | 
| 
      
 74 
     | 
    
         
            +
            - lib/mundler/platforms/android.rb
         
     | 
| 
      
 75 
     | 
    
         
            +
            - lib/mundler/platforms/host.rb
         
     | 
| 
      
 76 
     | 
    
         
            +
            - lib/mundler/platforms/ios.rb
         
     | 
| 
      
 77 
     | 
    
         
            +
            - lib/mundler/platforms/ios_simulator.rb
         
     | 
| 
      
 78 
     | 
    
         
            +
            - lib/mundler/project.rb
         
     | 
| 
      
 79 
     | 
    
         
            +
            - lib/mundler/version.rb
         
     | 
| 
       74 
80 
     | 
    
         
             
            homepage: https://github.com/Dan2552/mundler
         
     | 
| 
       75 
81 
     | 
    
         
             
            licenses:
         
     | 
| 
       76 
82 
     | 
    
         
             
            - MIT
         
     | 
| 
         @@ -1,75 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            module Mundler
         
     | 
| 
       2 
     | 
    
         
            -
              class BuildConfig
         
     | 
| 
       3 
     | 
    
         
            -
                def initialize(config)
         
     | 
| 
       4 
     | 
    
         
            -
                  @config = config
         
     | 
| 
       5 
     | 
    
         
            -
                end
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
                def tempfile
         
     | 
| 
       8 
     | 
    
         
            -
                  tempfile = Tempfile.new("build_config.rb")
         
     | 
| 
       9 
     | 
    
         
            -
                  File.write(tempfile, contents)
         
     | 
| 
       10 
     | 
    
         
            -
                  tempfile
         
     | 
| 
       11 
     | 
    
         
            -
                end
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                def gemboxes
         
     | 
| 
       14 
     | 
    
         
            -
                  @config.gemboxes.map do |gembox|
         
     | 
| 
       15 
     | 
    
         
            -
                    "conf.gembox #{gembox.inspect}"
         
     | 
| 
       16 
     | 
    
         
            -
                  end.join("\n")
         
     | 
| 
       17 
     | 
    
         
            -
                end
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
                def gems
         
     | 
| 
       20 
     | 
    
         
            -
                  @config.gems.map do |gem|
         
     | 
| 
       21 
     | 
    
         
            -
                    # e.g. gem = {:name=>"mruby-regexp-pcre", :path=>nil, :github=>nil, :core=>nil}
         
     | 
| 
       22 
     | 
    
         
            -
                    args = ":mgem => #{gem[:name].inspect}"
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                    if gem[:github]
         
     | 
| 
       25 
     | 
    
         
            -
                      args = ":github => #{gem[:github].inspect}"
         
     | 
| 
       26 
     | 
    
         
            -
                    elsif gem[:path]
         
     | 
| 
       27 
     | 
    
         
            -
                      args = ":path => #{gem[:path].inspect}"
         
     | 
| 
       28 
     | 
    
         
            -
                    elsif gem[:core]
         
     | 
| 
       29 
     | 
    
         
            -
                      args = ":core => #{gem[:core].inspect}"
         
     | 
| 
       30 
     | 
    
         
            -
                    end
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
                    "conf.gem #{args}"
         
     | 
| 
       33 
     | 
    
         
            -
                  end.join("\n  ")
         
     | 
| 
       34 
     | 
    
         
            -
                end
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                def mruby_version
         
     | 
| 
       37 
     | 
    
         
            -
                  mruby_url = @config.mruby[:url]
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                  version = (
         
     | 
| 
       40 
     | 
    
         
            -
                    @config.mruby[:tag] ||
         
     | 
| 
       41 
     | 
    
         
            -
                    @config.mruby[:branch] ||
         
     | 
| 
       42 
     | 
    
         
            -
                    @config.mruby[:version]
         
     | 
| 
       43 
     | 
    
         
            -
                  )
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
                  "#{mruby_url} #{version}"
         
     | 
| 
       46 
     | 
    
         
            -
                end
         
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
                private
         
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
                def platforms
         
     | 
| 
       51 
     | 
    
         
            -
                  @config.platforms.map do |platform|
         
     | 
| 
       52 
     | 
    
         
            -
                    type = @config.platform_types[platform[:name].to_s]
         
     | 
| 
       53 
     | 
    
         
            -
                    raise "Can't find platform: #{platform[:name]}" unless type
         
     | 
| 
       54 
     | 
    
         
            -
                    type.config(platform, self)
         
     | 
| 
       55 
     | 
    
         
            -
                  end.join("\n")
         
     | 
| 
       56 
     | 
    
         
            -
                end
         
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
                def contents
         
     | 
| 
       59 
     | 
    
         
            -
                  contents = <<~CONTENTS
         
     | 
| 
       60 
     | 
    
         
            -
                    # #{mruby_version}
         
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
                    MRuby::Build.new do |conf|
         
     | 
| 
       63 
     | 
    
         
            -
                      toolchain :clang
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
                      #{gemboxes}
         
     | 
| 
       66 
     | 
    
         
            -
                      #{gems}
         
     | 
| 
       67 
     | 
    
         
            -
                    end
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
                    #{platforms}
         
     | 
| 
       70 
     | 
    
         
            -
                  CONTENTS
         
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
                  contents.strip + "\n"
         
     | 
| 
       73 
     | 
    
         
            -
                end
         
     | 
| 
       74 
     | 
    
         
            -
              end
         
     | 
| 
       75 
     | 
    
         
            -
            end
         
     |