diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb index 11facfb45c..275483ccc6 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb @@ -464,10 +464,7 @@ class Gem::Specification < Gem::BasicSpecification # spec.platform = Gem::Platform.local def platform=(platform) - if @original_platform.nil? || - @original_platform == Gem::Platform::RUBY - @original_platform = platform - end + @original_platform = platform case platform when Gem::Platform::CURRENT then @@ -1308,7 +1305,7 @@ class Gem::Specification < Gem::BasicSpecification spec.instance_variable_set :@summary, array[5] spec.instance_variable_set :@required_ruby_version, array[6] spec.instance_variable_set :@required_rubygems_version, array[7] - spec.instance_variable_set :@original_platform, array[8] + spec.platform = array[8] spec.instance_variable_set :@dependencies, array[9] # offset due to rubyforge_project removal spec.instance_variable_set :@email, array[11] @@ -1316,8 +1313,6 @@ class Gem::Specification < Gem::BasicSpecification spec.instance_variable_set :@description, array[13] spec.instance_variable_set :@homepage, array[14] spec.instance_variable_set :@has_rdoc, array[15] - spec.instance_variable_set :@new_platform, array[16] - spec.instance_variable_set :@platform, array[16].to_s spec.instance_variable_set :@licenses, [array[17]] spec.instance_variable_set :@metadata, array[18] spec.instance_variable_set :@loaded, false @@ -1813,15 +1808,16 @@ class Gem::Specification < Gem::BasicSpecification def encode_with(coder) # :nodoc: coder.add "name", @name coder.add "version", @version - platform = case @original_platform + platform = case @new_platform when nil, "" then "ruby" when String then - @original_platform + @new_platform else - @original_platform.to_s + @new_platform.to_s end coder.add "platform", platform + coder.add "original_platform", @original_platform.to_s if platform != @original_platform.to_s attributes = @@attributes.map(&:to_s) - %w[name version platform] attributes.each do |name| @@ -2626,13 +2622,12 @@ class Gem::Specification < Gem::BasicSpecification when "date" # Force Date to go through the extra coerce logic in date= self.date = val + when "platform" + self.platform = val else instance_variable_set "@#{ivar}", val end end - - @original_platform = @platform # for backwards compatibility - self.platform = Gem::Platform.new @platform end ## diff --git a/test/rubygems/test_gem_package.rb b/test/rubygems/test_gem_package.rb index 2065864107..8a9cc85580 100644 --- a/test/rubygems/test_gem_package.rb +++ b/test/rubygems/test_gem_package.rb @@ -438,6 +438,33 @@ class TestGemPackage < Gem::Package::TarTestCase assert_equal %w[lib/code.rb], reader.contents end + def test_build_modified_platform + spec = quick_gem "a", "1" do |s| + s.files = %w[lib/code.rb] + s.platform = Gem::Platform.new "x86_64-linux" + end + + spec.platform = Gem::Platform.new "java" + + FileUtils.mkdir "lib" + + File.open "lib/code.rb", "w" do |io| + io.write "# lib/code.rb" + end + + package = Gem::Package.new spec.file_name + package.spec = spec + + package.build + + assert_path_exist spec.file_name + + reader = Gem::Package.new spec.file_name + assert reader.verify + + assert_equal spec, reader.spec + end + def test_raw_spec data_tgz = util_tar_gz {}