ruby: fix the reproducibility issue

Apply some changes on the Ruby makefiles in order to fix the reproducibility:
- use a fixed timestamp,
- sort linked objects,
- doesn't use the current date,
- and use UTC date.

[YOCTO #14268]

(From OE-Core rev: 59b07ab51ff932a4632a31675445ba4192bae36b)

Signed-off-by: Thomas Perrot <thomas.perrot@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Thomas Perrot
2021-09-30 16:04:24 +02:00
committed by Richard Purdie
parent 3115aa157d
commit aeb712ebb0
5 changed files with 162 additions and 0 deletions

View File

@@ -0,0 +1,35 @@
From: Christian Hofstaedtler <zeha@debian.org>
Date: Tue, 10 Oct 2017 15:04:34 -0300
Subject: rdoc: build reproducible documentation
- provide a fixed timestamp to the gzip compression
Upstream-Status: Backport [debian]
Signed-off-by: Antonio Terceiro <terceiro@debian.org>
Signed-off-by: Christian Hofstaedtler <zeha@debian.org>
---
lib/rdoc/generator/json_index.rb | 4 ++--
lib/rdoc/rdoc.rb | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
--- a/lib/rdoc/generator/json_index.rb
+++ b/lib/rdoc/generator/json_index.rb
@@ -178,7 +178,7 @@
debug_msg "Writing gzipped search index to %s" % outfile
Zlib::GzipWriter.open(outfile) do |gz|
- gz.mtime = File.mtime(search_index_file)
+ gz.mtime = -1
gz.orig_name = search_index_file.basename.to_s
gz.write search_index
gz.close
@@ -196,7 +196,7 @@
debug_msg "Writing gzipped file to %s" % outfile
Zlib::GzipWriter.open(outfile) do |gz|
- gz.mtime = File.mtime(dest)
+ gz.mtime = -1
gz.orig_name = dest.basename.to_s
gz.write data
gz.close

View File

@@ -0,0 +1,28 @@
From: Reiner Herrmann <reiner@reiner-h.de>
Date: Tue, 10 Oct 2017 15:06:13 -0300
Subject: lib/mkmf.rb: sort list of object files in generated Makefile
Without sorting the list explicitly, its order is indeterministic,
because readdir() is also not deterministic.
When the list of object files varies between builds, they are linked
in a different order, which results in an unreproducible build.
Upstream-Status: Backport [debian]
Signed-off-by: Antonio Terceiro <terceiro@debian.org>
Signed-off-by: Reiner Herrmann <reiner@reiner-h.de>
---
lib/mkmf.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/lib/mkmf.rb
+++ b/lib/mkmf.rb
@@ -2315,7 +2315,7 @@
LIBS = #{$LIBRUBYARG} #{$libs} #{$LIBS}
ORIG_SRCS = #{orig_srcs.collect(&File.method(:basename)).join(' ')}
SRCS = $(ORIG_SRCS) #{(srcs - orig_srcs).collect(&File.method(:basename)).join(' ')}
-OBJS = #{$objs.join(" ")}
+OBJS = #{$objs.sort.join(" ")}
HDRS = #{hdrs.map{|h| '$(srcdir)/' + File.basename(h)}.join(' ')}
LOCAL_HDRS = #{$headers.join(' ')}
TARGET = #{target}

View File

@@ -0,0 +1,28 @@
From: Christian Hofstaedtler <zeha@debian.org>
Date: Tue, 10 Oct 2017 15:07:11 -0300
Subject: Mark Gemspec-reproducible change fixing #784225, too
I think the UTC date change will fix the Multi-Arch not-same file issue,
too.
Upstream-Status: Backport [debian]
Signed-off-by: Antonio Terceiro <terceiro@debian.org>
Signed-off-by: Christian Hofstaedtler <zeha@debian.org>
---
lib/rubygems/specification.rb | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
--- a/lib/rubygems/specification.rb
+++ b/lib/rubygems/specification.rb
@@ -1695,7 +1695,9 @@
raise(Gem::InvalidSpecificationException,
"invalid date format in specification: #{date.inspect}")
end
- when Time, DateLike then
+ when Time then
+ Time.utc(date.utc.year, date.utc.month, date.utc.day)
+ when DateLike then
Time.utc(date.year, date.month, date.day)
else
TODAY

View File

@@ -0,0 +1,67 @@
From: Lucas Kanashiro <kanashiro@debian.org>
Date: Fri, 1 Nov 2019 15:25:17 -0300
Subject: Make gemspecs reproducible
Without an explicit date, they will get the current date and make the
build unreproducible
Upstream-Status: Backport [debian]
---
ext/bigdecimal/bigdecimal.gemspec | 1 +
ext/fiddle/fiddle.gemspec | 1 +
ext/io/console/io-console.gemspec | 2 +-
lib/ipaddr.gemspec | 1 +
lib/rdoc/rdoc.gemspec | 1 +
5 files changed, 5 insertions(+), 1 deletion(-)
--- a/ext/bigdecimal/bigdecimal.gemspec
+++ b/ext/bigdecimal/bigdecimal.gemspec
@@ -6,6 +6,7 @@
s.name = "bigdecimal"
s.version = bigdecimal_version
s.authors = ["Kenta Murata", "Zachary Scott", "Shigeo Kobayashi"]
+ s.date = RUBY_RELEASE_DATE
s.email = ["mrkn@mrkn.jp"]
s.summary = "Arbitrary-precision decimal floating-point number library."
--- a/ext/fiddle/fiddle.gemspec
+++ b/ext/fiddle/fiddle.gemspec
@@ -8,6 +8,7 @@
Gem::Specification.new do |spec|
spec.name = "fiddle"
spec.version = version_module::Fiddle::VERSION
+ spec.date = RUBY_RELEASE_DATE
spec.authors = ["Aaron Patterson", "SHIBATA Hiroshi"]
spec.email = ["aaron@tenderlovemaking.com", "hsbt@ruby-lang.org"]
--- a/ext/io/console/io-console.gemspec
+++ b/ext/io/console/io-console.gemspec
@@ -4,6 +4,7 @@
Gem::Specification.new do |s|
s.name = "io-console"
s.version = _VERSION
+ s.date = RUBY_RELEASE_DATE
s.summary = "Console interface"
s.email = "nobu@ruby-lang.org"
s.description = "add console capabilities to IO instances."
--- a/lib/ipaddr.gemspec
+++ b/lib/ipaddr.gemspec
@@ -6,6 +6,7 @@
Gem::Specification.new do |spec|
spec.name = "ipaddr"
spec.version = "1.2.2"
+ spec.date = RUBY_RELEASE_DATE
spec.authors = ["Akinori MUSHA", "Hajimu UMEMOTO"]
spec.email = ["knu@idaemons.org", "ume@mahoroba.org"]
--- a/lib/rdoc/rdoc.gemspec
+++ b/lib/rdoc/rdoc.gemspec
@@ -7,6 +7,7 @@
Gem::Specification.new do |s|
s.name = "rdoc"
+ s.date = RUBY_RELEASE_DATE
s.version = RDoc::VERSION
s.authors = [

View File

@@ -7,6 +7,10 @@ SRC_URI += " \
file://run-ptest \
file://0001-template-Makefile.in-do-not-write-host-cross-cc-item.patch \
file://0002-template-Makefile.in-filter-out-f-prefix-map.patch \
file://0003-rdoc-build-reproducible-documentation.patch \
file://0004-lib-mkmf.rb-sort-list-of-object-files-in-generated-M.patch \
file://0005-Mark-Gemspec-reproducible-change-fixing-784225-too.patch \
file://0006-Make-gemspecs-reproducible.patch \
"
SRC_URI[sha256sum] = "5085dee0ad9f06996a8acec7ebea4a8735e6fac22f22e2d98c3f2bc3bef7e6f1"