rubygems-compile 1.0.0-universal-macruby → 1.1.2-universal-macruby
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.
- data/README.markdown +82 -0
- data/Rakefile +9 -12
- data/lib/rubygems-compile/analyzer.rb +26 -0
- data/lib/rubygems-compile/commands/compile_command.rb +6 -5
- data/lib/rubygems-compile/commands/uncompile_command.rb +5 -2
- data/lib/rubygems-compile/compile_methods.rb +74 -0
- data/lib/rubygems-compile/compiler.rb +63 -23
- data/lib/rubygems-compile/post_install_hook.rb +2 -1
- data/lib/rubygems-compile/uncompiler.rb +7 -1
- data/lib/rubygems_plugin.rb +8 -13
- data/test/helper.rb +1 -1
- data/test/test_analyzer.rb +13 -0
- data/test/test_autocompile_command.rb +10 -10
- data/test/test_common_methods.rb +39 -0
- data/test/test_compile_command.rb +22 -26
- data/test/test_uncompile_command.rb +6 -6
- metadata +18 -17
- data/README.rdoc +0 -58
- data/lib/rubygems-compile/analysis.rb +0 -11
- data/lib/rubygems-compile/commands.rb +0 -8
- data/lib/rubygems-compile/common_methods.rb +0 -39
data/README.markdown
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
# rubygems-compile
|
2
|
+
|
3
|
+
A set of rubygems commands for `macgem` that interface with the
|
4
|
+
MacRuby compiler. This gem requires MacRuby 0.11 or newer.
|
5
|
+
|
6
|
+
All you need to do is:
|
7
|
+
|
8
|
+
```bash
|
9
|
+
sudo macgem install rubygems-compile
|
10
|
+
```
|
11
|
+
|
12
|
+
And then you're off to the races!
|
13
|
+
|
14
|
+
## Commands
|
15
|
+
|
16
|
+
`compile`
|
17
|
+
|
18
|
+
Can be used to compile, or re-compile, any gems that are already
|
19
|
+
installed.
|
20
|
+
|
21
|
+
```bash
|
22
|
+
sudo macgem compile nokogiri # Compile gems based on names you provide
|
23
|
+
sudo macgem compile minitest --version 2.0.2 # Compile a specific version of a gem
|
24
|
+
sudo macgem compile --all # Compile all installed gems
|
25
|
+
sudo macgem compile rspec --no-ignore-dependencies # Also compile dependencies
|
26
|
+
```
|
27
|
+
|
28
|
+
`uncompile`
|
29
|
+
|
30
|
+
Can be used to remove the compiled `.rbo` files if a gem does not
|
31
|
+
work well when compiled. If you find a gem that does not work when
|
32
|
+
compiled, it would be greatly appreciated if you reported it here or
|
33
|
+
to the MacRuby project itself so that someone can look into the
|
34
|
+
problem.
|
35
|
+
|
36
|
+
```bash
|
37
|
+
sudo macgem uncompile nokogiri # Uncompile gems based on names you provide
|
38
|
+
sudo macgem uncompile minitest --version 2.0.2 # Compile a specific version of a gem
|
39
|
+
sudo macgem uncompile --all # Uncompile all installed gems
|
40
|
+
sudo macgem uncompile rspec --no-ignore-dependencies # Also uncompile dependencies
|
41
|
+
```
|
42
|
+
|
43
|
+
`auto_compile`
|
44
|
+
|
45
|
+
If you don't like the idea of calling `compile` each time you
|
46
|
+
install a gem, then you can use `auto_compile` to enable a
|
47
|
+
post-install hook that will automatically compile gems when they are
|
48
|
+
installed. You can call `auto_compile` a second time to turn off the
|
49
|
+
feature.
|
50
|
+
|
51
|
+
```bash
|
52
|
+
sudo macgem auto_compile # gems will compiled when you install them
|
53
|
+
sudo macgem auto_compile # gems will not be compiled when you install them
|
54
|
+
```
|
55
|
+
|
56
|
+
## Caveats
|
57
|
+
|
58
|
+
* Large gems will take a long time to compile, but these are the gems
|
59
|
+
that will benefit the most from being compiled so please be patient
|
60
|
+
* This has only been tested on a few gems, but should not break
|
61
|
+
existing gems since we leave the original files around
|
62
|
+
* At the moment, compiled gems will not provide usable backtraces
|
63
|
+
+ If you suspect a bug in the way MacRuby compiled a file, try running with pre-compiled files disabled like so: `VM_DISABLE_RBO=1 macruby my_code.rb`
|
64
|
+
* `.rbo` files take up more disk space than their `.rb` equivalents
|
65
|
+
|
66
|
+
## Known Issues
|
67
|
+
|
68
|
+
* Source files using a non-standard suffix (e.g. `mime-types` has a `.rb.data` file) will not get compiled
|
69
|
+
+ This might be addressable in a later release, but is not a big deal
|
70
|
+
* Gems that explicitly require a file with the file suffix (e.g. `require 'nokogiri.rb'`) will never load the compiled version of the file
|
71
|
+
+ This issue may be addressed in MacRuby itself in the near future
|
72
|
+
+ Alternatively, those gems should be updated so that compiled code can be loaded
|
73
|
+
|
74
|
+
## TODO
|
75
|
+
|
76
|
+
* Parallel compilation to speed up compilation of large gems
|
77
|
+
+ This might require changes in the MacRuby compiler
|
78
|
+
|
79
|
+
## Copyright
|
80
|
+
|
81
|
+
Copyright (c) 2011-2012 Mark Rada. See LICENSE.txt for further details.
|
82
|
+
|
data/Rakefile
CHANGED
@@ -1,24 +1,21 @@
|
|
1
|
-
require 'rake/testtask'
|
2
|
-
require 'rake/gempackagetask'
|
3
|
-
require 'rubygems/dependency_installer'
|
4
|
-
|
5
1
|
task :default => :gem
|
6
2
|
|
7
|
-
|
8
|
-
|
3
|
+
require 'rake/testtask'
|
4
|
+
Rake::TestTask.new do |test|
|
5
|
+
test.libs << 'test'
|
9
6
|
test.pattern = 'test/**/test_*.rb'
|
10
7
|
test.verbose = true
|
11
8
|
test.ruby_opts = ['-rhelper']
|
12
9
|
end
|
13
10
|
|
14
|
-
|
11
|
+
require 'rubygems'
|
12
|
+
spec = Gem::Specification.load('rubygems-compile.gemspec')
|
15
13
|
|
16
|
-
|
17
|
-
|
18
|
-
pkg.need_tar = true
|
19
|
-
end
|
14
|
+
require 'rake/gempackagetask'
|
15
|
+
Rake::GemPackageTask.new(spec) { }
|
20
16
|
|
17
|
+
require 'rubygems/dependency_installer'
|
21
18
|
desc 'Build the gem and install it'
|
22
19
|
task :install => :gem do
|
23
|
-
Gem::Installer.new("pkg/#{
|
20
|
+
Gem::Installer.new("pkg/#{spec.file_name}").install
|
24
21
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'ripper'
|
2
|
+
|
3
|
+
##
|
4
|
+
# Uses the ripper parser to analyze ruby code contained in gems
|
5
|
+
# and raises warnings if the code has potential issues.
|
6
|
+
|
7
|
+
class Gem::Analyzer < Ripper::SexpBuilder
|
8
|
+
|
9
|
+
##
|
10
|
+
# Cache of issues found for the current session.
|
11
|
+
|
12
|
+
attr_reader :warnings
|
13
|
+
|
14
|
+
def parse
|
15
|
+
@warnings = []
|
16
|
+
super
|
17
|
+
end
|
18
|
+
|
19
|
+
def on_kw token
|
20
|
+
# Related to MacRuby ticket #721
|
21
|
+
if token == '__FILE__'
|
22
|
+
@warnings << '__FILE__ keyword is used (MacRuby ticket #721)'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -1,4 +1,7 @@
|
|
1
1
|
require 'rubygems/dependency_list'
|
2
|
+
require 'rubygems/version_option'
|
3
|
+
require 'rubygems-compile/compile_methods'
|
4
|
+
|
2
5
|
|
3
6
|
##
|
4
7
|
# Use the MacRuby compiler to compile installed gems.
|
@@ -38,14 +41,12 @@ class Gem::Commands::CompileCommand < Gem::Command
|
|
38
41
|
|
39
42
|
def execute
|
40
43
|
gems = execution_list
|
41
|
-
gems.delete_if { |spec| spec.name == 'rubygems-compile' }
|
42
|
-
|
43
44
|
if gems.count >= 10
|
44
|
-
alert 'This could take a while
|
45
|
+
alert 'This could take a while...'
|
45
46
|
end
|
46
47
|
|
47
|
-
compiler
|
48
|
-
gems.each { |gem|
|
48
|
+
require 'rubygems-compile/compiler'
|
49
|
+
gems.each { |gem| Gem::Compiler.compile gem }
|
49
50
|
end
|
50
51
|
|
51
52
|
end
|
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'rubygems/version_option'
|
2
|
+
require 'rubygems-compile/compile_methods'
|
3
|
+
|
1
4
|
class Gem::Commands::UncompileCommand < Gem::Command
|
2
5
|
include Gem::VersionOption
|
3
6
|
include Gem::CompileMethods
|
@@ -32,8 +35,8 @@ class Gem::Commands::UncompileCommand < Gem::Command
|
|
32
35
|
# an uncompiler object for each of them.
|
33
36
|
|
34
37
|
def execute
|
35
|
-
uncompiler
|
36
|
-
execution_list.each { |gem|
|
38
|
+
require 'rubygems-compile/uncompiler'
|
39
|
+
execution_list.each { |gem| Gem::Uncompiler.uncompile(gem) }
|
37
40
|
end
|
38
41
|
|
39
42
|
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module Gem::CompileMethods
|
2
|
+
if Gem::VERSION.to_f < 1.8
|
3
|
+
|
4
|
+
def execution_list
|
5
|
+
return all_gemspecs if options[:all]
|
6
|
+
|
7
|
+
specs = get_all_gem_names.map do |gem|
|
8
|
+
candidates = Gem.source_index.find_name(gem, options[:version])
|
9
|
+
|
10
|
+
if candidates.empty?
|
11
|
+
alert_error "#{gem} is not installed. Skipping."
|
12
|
+
next
|
13
|
+
end
|
14
|
+
|
15
|
+
candidates << dependencies_for(candidates) unless options[:ignore]
|
16
|
+
candidates
|
17
|
+
end
|
18
|
+
specs.flatten!
|
19
|
+
specs.uniq!
|
20
|
+
specs.delete_if { |spec| spec.name == 'rubygems-compile' }
|
21
|
+
specs
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def all_gemspecs
|
28
|
+
specs = Gem.source_index.all_gems.map(&:last)
|
29
|
+
specs.select { |spec| spec.name != 'rubygems-compile' }
|
30
|
+
end
|
31
|
+
|
32
|
+
def dependencies_for specs
|
33
|
+
specs.map { |spec|
|
34
|
+
spec.runtime_dependencies.map { |dep|
|
35
|
+
deps = Gem.source_index.find_name(dep.name, dep.requirement)
|
36
|
+
deps + dependencies_for(deps)
|
37
|
+
}
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
else
|
42
|
+
|
43
|
+
def execution_list
|
44
|
+
return all_gemspecs if options[:all]
|
45
|
+
|
46
|
+
specs = get_all_gem_names.map { |gem|
|
47
|
+
gems = Gem::Specification.find_all_by_name(gem, options[:version])
|
48
|
+
gems << dependencies_for(gems) unless options[:ignore]
|
49
|
+
gems
|
50
|
+
}
|
51
|
+
specs.flatten!
|
52
|
+
specs.uniq!
|
53
|
+
specs.delete_if { |spec| spec.name == 'rubygems_compile' }
|
54
|
+
specs
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def all_gemspecs
|
61
|
+
Gem::Specification.select { |spec| spec.name != 'rubygems-compile' }
|
62
|
+
end
|
63
|
+
|
64
|
+
def dependencies_for specs
|
65
|
+
specs.map { |spec|
|
66
|
+
spec.runtime_dependencies.map { |dep|
|
67
|
+
deps = Gem::Specification.find_all_by_name(dep.name, dep.requirement)
|
68
|
+
deps + dependencies_for(deps)
|
69
|
+
}
|
70
|
+
}
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
@@ -1,36 +1,55 @@
|
|
1
1
|
class Gem::Compiler
|
2
2
|
include Gem::UserInteraction
|
3
3
|
|
4
|
+
class << self
|
5
|
+
def compile gem
|
6
|
+
@instance ||= Gem::Compiler.new
|
7
|
+
@instance.compile gem
|
8
|
+
end
|
9
|
+
alias_method :call, :compile
|
10
|
+
end
|
11
|
+
|
4
12
|
def initialize
|
13
|
+
require 'rbconfig'
|
14
|
+
unless MacRuby.const_defined?(:Compiler)
|
15
|
+
load File.join(RbConfig::CONFIG['bindir'], 'macrubyc')
|
16
|
+
end
|
17
|
+
require 'rubygems-compile/analyzer'
|
18
|
+
|
5
19
|
@current_directory = []
|
6
20
|
@config = Gem.configuration
|
7
21
|
end
|
8
22
|
|
9
|
-
def
|
23
|
+
def compile gem
|
10
24
|
@spec = gem.is_a?(Gem::Specification) ? gem : gem.spec
|
11
25
|
|
12
|
-
if
|
13
|
-
|
14
|
-
return
|
15
|
-
end
|
16
|
-
|
17
|
-
say compilation_message if @config.verbose
|
26
|
+
return if trying_to_compile_self?
|
27
|
+
say gem_compilation_message if verbose
|
18
28
|
|
19
29
|
gem_files.each do |file|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
30
|
+
message = compile_file_message(file)
|
31
|
+
full_path = File.join(@spec.full_gem_path, file)
|
32
|
+
if safe? full_path
|
33
|
+
MacRuby::Compiler.compile_file full_path
|
34
|
+
else
|
35
|
+
message << "\t\t\tSKIPPED: #{@analyzer.warnings.uniq.join(', ')}"
|
36
|
+
end
|
37
|
+
say message if really_verbose
|
27
38
|
end
|
28
39
|
end
|
29
40
|
|
30
|
-
|
41
|
+
##
|
42
|
+
# Uses the GemAnalyzer class to determine if a given file might have
|
43
|
+
# any potential issues when compiled.
|
44
|
+
|
45
|
+
def safe? file
|
46
|
+
@analyzer = Gem::Analyzer.new File.read(file)
|
47
|
+
@analyzer.parse
|
48
|
+
@analyzer.warnings.empty?
|
49
|
+
end
|
31
50
|
|
32
|
-
def
|
33
|
-
slash =
|
51
|
+
def gem_compilation_message
|
52
|
+
slash = really_verbose ? '/' : ''
|
34
53
|
"Compiling #{@spec.full_name}#{slash}"
|
35
54
|
end
|
36
55
|
|
@@ -46,13 +65,19 @@ class Gem::Compiler
|
|
46
65
|
# level or test directory.
|
47
66
|
#
|
48
67
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
68
|
+
if Gem::VERSION.to_f < 1.8
|
69
|
+
def gem_files
|
70
|
+
@spec.lib_files.select { |file| File.extname(file) == '.rb' }
|
71
|
+
end
|
72
|
+
else
|
73
|
+
def gem_files
|
74
|
+
Dir.glob("#{@spec.lib_dirs_glob}/**/*.rb").map { |file|
|
75
|
+
file.sub(Regexp.new(Regexp.escape(@spec.full_gem_path)), '')
|
76
|
+
}
|
77
|
+
end
|
53
78
|
end
|
54
79
|
|
55
|
-
def
|
80
|
+
def compile_file_message file
|
56
81
|
name = File.basename(file)
|
57
82
|
dirs = file.chomp(name).split(File::SEPARATOR)
|
58
83
|
tabs = "\t" * dirs.count
|
@@ -60,11 +85,26 @@ class Gem::Compiler
|
|
60
85
|
dirs.each_with_index do |dir, index|
|
61
86
|
unless @current_directory[index] == dir
|
62
87
|
@current_directory[index] = dir
|
63
|
-
say( "\t" * (index + 1) + dir + File::SEPARATOR)
|
88
|
+
say( "\t" * (index + 1) + dir + File::SEPARATOR) if really_verbose
|
64
89
|
end
|
65
90
|
end
|
66
91
|
|
67
92
|
"#{tabs}#{name} => #{name}o"
|
68
93
|
end
|
69
94
|
|
95
|
+
def verbose
|
96
|
+
@config.verbose
|
97
|
+
end
|
98
|
+
|
99
|
+
def really_verbose
|
100
|
+
@config.really_verbose
|
101
|
+
end
|
102
|
+
|
103
|
+
def trying_to_compile_self?
|
104
|
+
if @spec.name == 'rubygems-compile'
|
105
|
+
alert 'You cannot compile rubygems-compile' if really_verbose
|
106
|
+
true
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
70
110
|
end
|
@@ -1,7 +1,13 @@
|
|
1
1
|
class Gem::Uncompiler
|
2
2
|
include Gem::UserInteraction
|
3
3
|
|
4
|
+
def self.uncompile gem
|
5
|
+
@instance ||= Gem::Uncompiler.new
|
6
|
+
@instance.uncompile gem
|
7
|
+
end
|
8
|
+
|
4
9
|
def initialize
|
10
|
+
require 'fileutils'
|
5
11
|
@config = Gem.configuration
|
6
12
|
end
|
7
13
|
|
@@ -11,9 +17,9 @@ class Gem::Uncompiler
|
|
11
17
|
say uncompilation_message if @config.verbose
|
12
18
|
|
13
19
|
gem_files.each do |file|
|
14
|
-
say "\tAsploded #{file}" if @config.really_verbose
|
15
20
|
absolute_file_path = File.join(@spec.full_gem_path, file)
|
16
21
|
FileUtils.rm absolute_file_path
|
22
|
+
say "\tAsploded #{file}" if @config.really_verbose
|
17
23
|
end
|
18
24
|
end
|
19
25
|
|
data/lib/rubygems_plugin.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
unless MACRUBY_REVISION.match /^git commit/
|
2
2
|
|
3
3
|
ui = Gem::UserInteraction.new
|
4
4
|
ui.alert_warning 'rubygems-compile requires MacRuby 0.11 or newer'
|
@@ -6,18 +6,13 @@ if RUBY_VERSION.to_f < 0.11
|
|
6
6
|
|
7
7
|
else
|
8
8
|
|
9
|
-
require 'rbconfig'
|
10
|
-
require 'fileutils'
|
11
|
-
require 'rubygems/version_option'
|
12
|
-
|
13
|
-
unless MacRuby.const_defined?(:Compiler)
|
14
|
-
load File.join(RbConfig::CONFIG['bindir'], 'macrubyc')
|
15
|
-
end
|
16
|
-
|
17
|
-
require 'rubygems-compile/common_methods'
|
18
|
-
require 'rubygems-compile/compiler'
|
19
|
-
require 'rubygems-compile/uncompiler'
|
20
|
-
require 'rubygems-compile/commands'
|
21
9
|
require 'rubygems-compile/post_install_hook'
|
10
|
+
require 'rubygems-compile/commands/compile_command'
|
11
|
+
require 'rubygems-compile/commands/uncompile_command'
|
12
|
+
require 'rubygems-compile/commands/autocompile_command'
|
13
|
+
|
14
|
+
Gem::CommandManager.instance.register_command :compile
|
15
|
+
Gem::CommandManager.instance.register_command :uncompile
|
16
|
+
Gem::CommandManager.instance.register_command :auto_compile
|
22
17
|
|
23
18
|
end
|
data/test/helper.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
class TestGemAnalyzer < MiniTest::Unit::TestCase
|
2
|
+
|
3
|
+
def test_finds_usage_of___FILE__
|
4
|
+
assert_raises Gem::Analyzer::Warning do
|
5
|
+
Gem::Analyzer.new("__FILE__").parse
|
6
|
+
end
|
7
|
+
|
8
|
+
assert_block do
|
9
|
+
Gem::Analyzer.new("puts '__FILE__'").parse
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -4,19 +4,19 @@ class TestAutoCompile < MiniTest::Unit::TestCase
|
|
4
4
|
@command = Gem::Commands::AutoCompileCommand.new
|
5
5
|
end
|
6
6
|
|
7
|
-
def test_turn_on
|
8
|
-
end
|
7
|
+
# def test_turn_on
|
8
|
+
# end
|
9
9
|
|
10
|
-
def test_turn_on_when_already_on
|
11
|
-
end
|
10
|
+
# def test_turn_on_when_already_on
|
11
|
+
# end
|
12
12
|
|
13
|
-
def test_turn_off
|
14
|
-
end
|
13
|
+
# def test_turn_off
|
14
|
+
# end
|
15
15
|
|
16
|
-
def test_turn_off_when_already_off
|
17
|
-
end
|
16
|
+
# def test_turn_off_when_already_off
|
17
|
+
# end
|
18
18
|
|
19
|
-
def test_calls_compile_on_each_gem_after_installation
|
20
|
-
end
|
19
|
+
# def test_calls_compile_on_each_gem_after_installation
|
20
|
+
# end
|
21
21
|
|
22
22
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# class CommonMethodsTester
|
2
|
+
# include Gem::CompileMethods
|
3
|
+
|
4
|
+
# class Gem
|
5
|
+
# class << self
|
6
|
+
# def source_index
|
7
|
+
# GemList.new
|
8
|
+
# end
|
9
|
+
# end
|
10
|
+
# end
|
11
|
+
|
12
|
+
# end
|
13
|
+
|
14
|
+
# class GemList
|
15
|
+
# def all_gems
|
16
|
+
# ['the', 'answer', 'to', 'life', 'the', 'universe', 'and', 'everything']
|
17
|
+
# end
|
18
|
+
# end
|
19
|
+
|
20
|
+
# class TestCommonMethods < MiniTest::Unit::TestCase
|
21
|
+
|
22
|
+
# def modul
|
23
|
+
# @@modul ||= CommonMethodsTester.new
|
24
|
+
# end
|
25
|
+
|
26
|
+
# def test_execution_list
|
27
|
+
# end
|
28
|
+
|
29
|
+
# def test_gems_list
|
30
|
+
# def modul.options
|
31
|
+
# { all: true }
|
32
|
+
# end
|
33
|
+
# assert_equal GemList.new.all_gems, modul.gems_list
|
34
|
+
# end
|
35
|
+
|
36
|
+
# def test_dependencies_for
|
37
|
+
# end
|
38
|
+
|
39
|
+
# end
|
@@ -1,36 +1,32 @@
|
|
1
1
|
class TestCompileCommand < MiniTest::Unit::TestCase
|
2
|
+
|
2
3
|
def setup
|
3
4
|
@command = Gem::Commands::CompileCommand.new
|
4
5
|
end
|
5
|
-
end
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
end
|
15
|
-
end
|
7
|
+
# def test_finds_all_files
|
8
|
+
# # gets into all require dirs
|
9
|
+
# # does not compile test files
|
10
|
+
# end
|
11
|
+
# def test_recompiles_rbos_if_they_already_exist
|
12
|
+
# # to support use on nightly builds
|
13
|
+
# end
|
16
14
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|
15
|
+
# def test_has_an_option_to_compile_all_installed_gems
|
16
|
+
# # by extension, this is also needed to support nightly build users
|
17
|
+
# end
|
22
18
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
end
|
19
|
+
# def test_refuses_to_compile_itself
|
20
|
+
# # obvious
|
21
|
+
# end
|
27
22
|
|
28
|
-
def test_loads_rubyc_without_warning
|
29
|
-
|
30
|
-
end
|
23
|
+
# def test_loads_rubyc_without_warning
|
24
|
+
# # this might not be doable without upstream load guarding; minor issue
|
25
|
+
# end
|
26
|
+
|
27
|
+
# # important to test so we don't break rubygems
|
28
|
+
# def test_skips_loading_on_older_macruby_versions
|
29
|
+
# # and prints a message
|
30
|
+
# end
|
31
31
|
|
32
|
-
# important to test so we don't break rubygems
|
33
|
-
def test_skips_loading_on_older_macruby_versions
|
34
|
-
# and prints a message
|
35
|
-
end
|
36
32
|
end
|
@@ -4,13 +4,13 @@ class TestUncompileCommand < MiniTest::Unit::TestCase
|
|
4
4
|
@command = Gem::Commands::UncompileCommand.new
|
5
5
|
end
|
6
6
|
|
7
|
-
def test_removes_rbo_files
|
8
|
-
end
|
7
|
+
# def test_removes_rbo_files
|
8
|
+
# end
|
9
9
|
|
10
|
-
def test_leaves_rb_files
|
11
|
-
end
|
10
|
+
# def test_leaves_rb_files
|
11
|
+
# end
|
12
12
|
|
13
|
-
def test_can_uncompile_multiple_gems_at_once
|
14
|
-
end
|
13
|
+
# def test_can_uncompile_multiple_gems_at_once
|
14
|
+
# end
|
15
15
|
|
16
16
|
end
|
metadata
CHANGED
@@ -2,33 +2,32 @@
|
|
2
2
|
name: rubygems-compile
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.
|
5
|
+
version: 1.1.2
|
6
6
|
platform: universal-macruby
|
7
7
|
authors:
|
8
8
|
- Mark Rada
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
13
|
-
default_executable:
|
12
|
+
date: 2012-03-04 00:00:00 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
|
-
name: minitest
|
15
|
+
name: minitest
|
17
16
|
prerelease: false
|
18
17
|
requirement: !ruby/object:Gem::Requirement
|
19
18
|
none: false
|
20
19
|
requirements:
|
21
|
-
- -
|
20
|
+
- - ~>
|
22
21
|
- !ruby/object:Gem::Version
|
23
|
-
version: 2.
|
22
|
+
version: "2.11"
|
24
23
|
type: :development
|
25
24
|
version_requirements: !ruby/object:Gem::Requirement
|
26
25
|
none: false
|
27
26
|
requirements:
|
28
|
-
- -
|
27
|
+
- - ~>
|
29
28
|
- !ruby/object:Gem::Version
|
30
|
-
version: 2.
|
31
|
-
description: 'A
|
29
|
+
version: "2.11"
|
30
|
+
description: 'A trio of rubygems commands that interface with the MacRuby compiler.
|
32
31
|
|
33
32
|
'
|
34
33
|
email: mrada@marketcircle.com
|
@@ -36,27 +35,27 @@ executables: []
|
|
36
35
|
extensions: []
|
37
36
|
extra_rdoc_files:
|
38
37
|
- LICENSE.txt
|
39
|
-
- README.
|
38
|
+
- README.markdown
|
40
39
|
files:
|
41
|
-
- lib/rubygems-compile/
|
40
|
+
- lib/rubygems-compile/analyzer.rb
|
42
41
|
- lib/rubygems-compile/commands/autocompile_command.rb
|
43
42
|
- lib/rubygems-compile/commands/compile_command.rb
|
44
43
|
- lib/rubygems-compile/commands/uncompile_command.rb
|
45
|
-
- lib/rubygems-compile/
|
46
|
-
- lib/rubygems-compile/common_methods.rb
|
44
|
+
- lib/rubygems-compile/compile_methods.rb
|
47
45
|
- lib/rubygems-compile/compiler.rb
|
48
46
|
- lib/rubygems-compile/post_install_hook.rb
|
49
47
|
- lib/rubygems-compile/uncompiler.rb
|
50
48
|
- lib/rubygems_plugin.rb
|
51
49
|
- test/helper.rb
|
50
|
+
- test/test_analyzer.rb
|
52
51
|
- test/test_autocompile_command.rb
|
52
|
+
- test/test_common_methods.rb
|
53
53
|
- test/test_compile_command.rb
|
54
54
|
- test/test_uncompile_command.rb
|
55
55
|
- Rakefile
|
56
56
|
- .gemtest
|
57
57
|
- LICENSE.txt
|
58
|
-
- README.
|
59
|
-
has_rdoc: true
|
58
|
+
- README.markdown
|
60
59
|
homepage: http://github.com/ferrous26/rubygems-compile
|
61
60
|
licenses:
|
62
61
|
- MIT
|
@@ -82,13 +81,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
81
|
version: "0"
|
83
82
|
requirements: []
|
84
83
|
rubyforge_project:
|
85
|
-
rubygems_version: 1.
|
84
|
+
rubygems_version: 1.8.17
|
86
85
|
signing_key:
|
87
86
|
specification_version: 3
|
88
|
-
summary: A
|
87
|
+
summary: A trio of rubygems commands that interface with the MacRuby compiler
|
89
88
|
test_files:
|
90
89
|
- test/helper.rb
|
90
|
+
- test/test_analyzer.rb
|
91
91
|
- test/test_autocompile_command.rb
|
92
|
+
- test/test_common_methods.rb
|
92
93
|
- test/test_compile_command.rb
|
93
94
|
- test/test_uncompile_command.rb
|
94
95
|
- Rakefile
|
data/README.rdoc
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
= rubygems-compile
|
2
|
-
|
3
|
-
A set of rubygems commands for <tt>macgem</tt> that interface with the
|
4
|
-
MacRuby compiler. This gem requires MacRuby 0.11 or newer.
|
5
|
-
|
6
|
-
All you need to do is:
|
7
|
-
|
8
|
-
sudo macgem install rubygems-compile --pre
|
9
|
-
|
10
|
-
And then you're off to the races!
|
11
|
-
|
12
|
-
== Commands
|
13
|
-
|
14
|
-
[+compile+] Can be used to compile, or re-compile, any gems that are already installed.
|
15
|
-
|
16
|
-
sudo macgem compile nokogiri # Compile gems based on names you provide
|
17
|
-
sudo macgem compile minitest --version 2.0.2 # Compile a specific version of a gem
|
18
|
-
sudo macgem compile --all # Compile all installed gems
|
19
|
-
sudo macgem compile rspec --no-ignore-dependencies # Also compile dependencies
|
20
|
-
|
21
|
-
[+uncompile+] Can be used to remove the compiled <tt>.rbo</tt> files if a gem does not work well when compiled.
|
22
|
-
|
23
|
-
sudo macgem uncompile nokogiri # Uncompile gems based on names you provide
|
24
|
-
sudo macgem uncompile minitest --version 2.0.2 # Compile a specific version of a gem
|
25
|
-
sudo macgem uncompile --all # Uncompile all installed gems
|
26
|
-
sudo macgem uncompile rspec --no-ignore-dependencies # Also uncompile dependencies
|
27
|
-
|
28
|
-
[+auto_compile+] Can be used to enable a post-install hook that will automatically compile gems when you install them. Call it once to turn on, call it a second time to disable it.
|
29
|
-
|
30
|
-
sudo macgem auto_compile # gems will compiled when you install them
|
31
|
-
sudo macgem auto_compile # gems will not be compiled when you install them
|
32
|
-
|
33
|
-
== Caveats
|
34
|
-
|
35
|
-
* Large gems will take a long time to compile, but these are the gems
|
36
|
-
that will benefit the most from being compiled so please be patient
|
37
|
-
* This has only been tested on a few gems, but should not break
|
38
|
-
existing gems since we leave the original files around
|
39
|
-
* At the moment, compiled gems will not provide usable backtraces
|
40
|
-
* <tt>.rbo</tt> files take up more disk space than their <tt>.rb</tt> equivalents
|
41
|
-
|
42
|
-
== Known Issues
|
43
|
-
|
44
|
-
* Source files using a non-standard suffix (e.g. <tt>mime-types</tt> has a <tt>.rb.data</tt> file) will not get compiled
|
45
|
-
* This might be addressable in a later release, but is not a big deal
|
46
|
-
* Gems that explicitly require a file with the file suffix (e.g. <tt>require 'nokogiri.rb'</tt>) will never load the compiled version of the file
|
47
|
-
* Those gems should be updated so that compiled code can be loaded
|
48
|
-
|
49
|
-
== TODO
|
50
|
-
|
51
|
-
* Code parsing to WARN about gems that will have issues when compiled
|
52
|
-
* Parallel compilation to speed up compilation of large gems
|
53
|
-
* This might require changes in the MacRuby compiler
|
54
|
-
|
55
|
-
== Copyright
|
56
|
-
|
57
|
-
Copyright (c) 2011 Mark Rada. See LICENSE.txt for further details.
|
58
|
-
|
@@ -1,8 +0,0 @@
|
|
1
|
-
require 'rubygems-compile/commands/compile_command'
|
2
|
-
Gem::CommandManager.instance.register_command :compile
|
3
|
-
|
4
|
-
require 'rubygems-compile/commands/uncompile_command'
|
5
|
-
Gem::CommandManager.instance.register_command :uncompile
|
6
|
-
|
7
|
-
require 'rubygems-compile/commands/autocompile_command'
|
8
|
-
Gem::CommandManager.instance.register_command :auto_compile
|
@@ -1,39 +0,0 @@
|
|
1
|
-
module Gem
|
2
|
-
|
3
|
-
module CompileMethods
|
4
|
-
|
5
|
-
def execution_list
|
6
|
-
gems_list.map do |gem|
|
7
|
-
candidates = Gem.source_index.find_name(gem, options[:version])
|
8
|
-
|
9
|
-
if candidates.empty?
|
10
|
-
alert_error "#{gem} is not installed. Skipping."
|
11
|
-
next
|
12
|
-
end
|
13
|
-
|
14
|
-
candidates << dependencies_for(*candidates) unless options[:ignore]
|
15
|
-
candidates
|
16
|
-
end.flatten.uniq
|
17
|
-
end
|
18
|
-
|
19
|
-
def gems_list
|
20
|
-
installed_gems = Gem.source_index.all_gems
|
21
|
-
if options[:all] then
|
22
|
-
installed_gems.map { |_, spec| spec.name }
|
23
|
-
else
|
24
|
-
get_all_gem_names
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def dependencies_for *specs
|
29
|
-
specs.map { |spec|
|
30
|
-
spec.runtime_dependencies.map { |dep|
|
31
|
-
deps = Gem.source_index.find_name(dep.name,dep.requirement)
|
32
|
-
deps + dependencies_for(*deps)
|
33
|
-
}
|
34
|
-
}
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|