Index: third_party/protobuf/ruby/Rakefile |
diff --git a/third_party/protobuf/ruby/Rakefile b/third_party/protobuf/ruby/Rakefile |
index c25103d819d1a422f78976a318ae0d016f462198..fa29c3151fa6b06ce6ab1dea1d420fa26fe89d81 100644 |
--- a/third_party/protobuf/ruby/Rakefile |
+++ b/third_party/protobuf/ruby/Rakefile |
@@ -5,6 +5,40 @@ require "rake/testtask" |
spec = Gem::Specification.load("google-protobuf.gemspec") |
+well_known_protos = %w[ |
+ google/protobuf/any.proto |
+ google/protobuf/api.proto |
+ google/protobuf/duration.proto |
+ google/protobuf/empty.proto |
+ google/protobuf/field_mask.proto |
+ google/protobuf/source_context.proto |
+ google/protobuf/struct.proto |
+ google/protobuf/timestamp.proto |
+ google/protobuf/type.proto |
+ google/protobuf/wrappers.proto |
+] |
+ |
+# These are omitted for now because we don't support proto2. |
+proto2_protos = %w[ |
+ google/protobuf/descriptor.proto |
+ google/protobuf/compiler/plugin.proto |
+] |
+ |
+genproto_output = [] |
+ |
+# We won't have access to .. from within docker, but the proto files |
+# will be there, thanks to the :genproto rule dependency for gem:native. |
+unless ENV['IN_DOCKER'] == 'true' |
+ well_known_protos.each do |proto_file| |
+ input_file = "../src/" + proto_file |
+ output_file = "lib/" + proto_file.sub(/\.proto$/, ".rb") |
+ genproto_output << output_file |
+ file output_file => input_file do |file_task| |
+ sh "../src/protoc -I../src --ruby_out=lib #{input_file}" |
+ end |
+ end |
+end |
+ |
if RUBY_PLATFORM == "java" |
if `which mvn` == '' |
raise ArgumentError, "maven needs to be installed" |
@@ -20,7 +54,40 @@ else |
Rake::ExtensionTask.new("protobuf_c", spec) do |ext| |
ext.ext_dir = "ext/google/protobuf_c" |
ext.lib_dir = "lib/google" |
+ ext.cross_compile = true |
+ ext.cross_platform = [ |
+ 'x86-mingw32', 'x64-mingw32', |
+ 'x86_64-linux', 'x86-linux', |
+ 'universal-darwin' |
+ ] |
+ end |
+ |
+ task 'gem:windows' do |
+ require 'rake_compiler_dock' |
+ RakeCompilerDock.sh "bundle && IN_DOCKER=true rake cross native gem RUBY_CC_VERSION=2.3.0:2.2.2:2.1.5:2.0.0" |
end |
+ |
+ if RUBY_PLATFORM =~ /darwin/ |
+ task 'gem:native' do |
+ system "rake genproto" |
+ system "rake cross native gem RUBY_CC_VERSION=2.3.0:2.2.2:2.1.5:2.0.0" |
+ end |
+ else |
+ task 'gem:native' => [:genproto, 'gem:windows'] |
+ end |
+end |
+ |
+ |
+# Proto for tests. |
+genproto_output << "tests/generated_code.rb" |
+file "tests/generated_code.rb" => "tests/generated_code.proto" do |file_task| |
+ sh "../src/protoc --ruby_out=. tests/generated_code.proto" |
+end |
+ |
+task :genproto => genproto_output |
+ |
+task :clean do |
+ sh "rm -f #{genproto_output.join(' ')}" |
end |
Gem::PackageTask.new(spec) do |pkg| |
@@ -30,7 +97,7 @@ Rake::TestTask.new(:test => :build) do |t| |
t.test_files = FileList["tests/*.rb"] |
end |
-task :build => [:clean, :compile] |
+task :build => [:clean, :compile, :genproto] |
task :default => [:build] |
# vim:sw=2:et |