Source: newlib
Version: 2.2.0+git20150830.5a3d536-1
Severity: wishlist
Tags: patch
User: reproducible-bui...@lists.alioth.debian.org
Usertags: locale

Hi!

While working on the “reproducible builds” effort [1], we have noticed
that newlib could not be built reproducibly.

In particular, the order in which object files get added to archives is
not deterministic. I think the problem is that the locale affects how
the shell sorts filenames.

I've attached two patches. The first modifies Makefile.am files to use
LC_ALL=C when adding members to archives, and as such is suitable for
sending upstream. The second is the equivalent change for Makefile.in,
and us such is suitable for applying to the Debian package (since it
does not invoke automake).

Regards,

Daf

 [1]: https://wiki.debian.org/ReproducibleBuilds
diff --git a/newlib/Makefile.am b/newlib/Makefile.am
index 5ecce4c..9cc1152 100644
--- a/newlib/Makefile.am
+++ b/newlib/Makefile.am
@@ -160,6 +160,7 @@ libc.a: libc/libc.a libm.a
 	rm -rf libc.a libg.a tmp
 	mkdir tmp
 	cd tmp; \
+	LC_ALL=C ; \
 	 $(AR) x ../libm.a $(MATHOBJS_IN_LIBC) ; \
 	 $(AR) x ../libc/libc.a ; \
 	 $(AR) $(AR_FLAGS) ../$@ *.o
diff --git a/newlib/libc/Makefile.am b/newlib/libc/Makefile.am
index 21a74fe..b741f24 100644
--- a/newlib/libc/Makefile.am
+++ b/newlib/libc/Makefile.am
@@ -107,6 +107,7 @@ libc.a: $(SUBLIBS)
 	rm -rf tmp
 	mkdir tmp
 	cd tmp; \
+	LC_ALL=C ; \
 	 for i in $(SUBLIBS); do \
 	   $(AR) x ../$$i; \
 	 done; \
diff --git a/newlib/libc/sys/linux/Makefile.am b/newlib/libc/sys/linux/Makefile.am
index 8dcc64e..d61ad36 100644
--- a/newlib/libc/sys/linux/Makefile.am
+++ b/newlib/libc/sys/linux/Makefile.am
@@ -196,6 +196,7 @@ lib.a:  $(lib_a_OBJECTS)
 	rm -rf tmp
 	mkdir tmp
 	cd tmp; \
+	LC_ALL=C ; \
 	for i in $(SUBLIBS); do \
 	  $(AR) x ../$$i; \
 	done; \
diff --git a/newlib/libm/Makefile.am b/newlib/libm/Makefile.am
index bc45816..a6bb44c 100644
--- a/newlib/libm/Makefile.am
+++ b/newlib/libm/Makefile.am
@@ -25,6 +25,7 @@ libm.a: $(SUBLIBS)
 	rm -rf tmp
 	mkdir tmp
 	cd tmp; \
+	LC_ALL=C ; \
 	  for i in $(SUBLIBS); do \
 	    $(AR) x ../$$i; \
 	done; \
diff --git a/newlib/Makefile.in b/newlib/Makefile.in
index 468ae99..2dc6388 100644
--- a/newlib/Makefile.in
+++ b/newlib/Makefile.in
@@ -908,6 +908,7 @@ uninstall-am: uninstall-toollibDATA uninstall-toollibLIBRARIES \
 @USE_LIBTOOL_FALSE@	rm -rf libc.a libg.a tmp
 @USE_LIBTOOL_FALSE@	mkdir tmp
 @USE_LIBTOOL_FALSE@	cd tmp; \
+@USE_LIBTOOL_FALSE@	LC_ALL=C; \
 @USE_LIBTOOL_FALSE@	 $(AR) x ../libm.a $(MATHOBJS_IN_LIBC) ; \
 @USE_LIBTOOL_FALSE@	 $(AR) x ../libc/libc.a ; \
 @USE_LIBTOOL_FALSE@	 $(AR) $(AR_FLAGS) ../$@ *.o
diff --git a/newlib/libc/Makefile.in b/newlib/libc/Makefile.in
index cbddc5f..abcd0c7 100644
--- a/newlib/libc/Makefile.in
+++ b/newlib/libc/Makefile.in
@@ -1026,6 +1026,7 @@ uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
 @USE_LIBTOOL_FALSE@	rm -rf tmp
 @USE_LIBTOOL_FALSE@	mkdir tmp
 @USE_LIBTOOL_FALSE@	cd tmp; \
+@USE_LIBTOOL_FALSE@	LC_ALL=C; \
 @USE_LIBTOOL_FALSE@	 for i in $(SUBLIBS); do \
 @USE_LIBTOOL_FALSE@	   $(AR) x ../$$i; \
 @USE_LIBTOOL_FALSE@	 done; \
diff --git a/newlib/libc/sys/linux/Makefile.in b/newlib/libc/sys/linux/Makefile.in
index b15741b..fbfd9d4 100644
--- a/newlib/libc/sys/linux/Makefile.in
+++ b/newlib/libc/sys/linux/Makefile.in
@@ -1599,6 +1599,7 @@ uninstall-am:
 @USE_LIBTOOL_FALSE@	rm -rf tmp
 @USE_LIBTOOL_FALSE@	mkdir tmp
 @USE_LIBTOOL_FALSE@	cd tmp; \
+@USE_LIBTOOL_FALSE@	LC_ALL=C; \
 @USE_LIBTOOL_FALSE@	for i in $(SUBLIBS); do \
 @USE_LIBTOOL_FALSE@	  $(AR) x ../$$i; \
 @USE_LIBTOOL_FALSE@	done; \
diff --git a/newlib/libm/Makefile.in b/newlib/libm/Makefile.in
index 86c4a8e..d52cbd6 100644
--- a/newlib/libm/Makefile.in
+++ b/newlib/libm/Makefile.in
@@ -899,6 +899,7 @@ uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
 @USE_LIBTOOL_FALSE@	rm -rf tmp
 @USE_LIBTOOL_FALSE@	mkdir tmp
 @USE_LIBTOOL_FALSE@	cd tmp; \
+@USE_LIBTOOL_FALSE@	LC_ALL=C; \
 @USE_LIBTOOL_FALSE@	  for i in $(SUBLIBS); do \
 @USE_LIBTOOL_FALSE@	    $(AR) x ../$$i; \
 @USE_LIBTOOL_FALSE@	done; \

Reply via email to