public inbox for cygwin-cvs@sourceware.org
help / color / mirror / Atom feed
* [newlib-cygwin/main] Cygwin: Add initial support for SOURCE_DATE_EPOCH
@ 2023-09-10 14:40 Jon Turney
  0 siblings, 0 replies; only message in thread
From: Jon Turney @ 2023-09-10 14:40 UTC (permalink / raw)
  To: cygwin-cvs

https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=f5e37b93a02508e79fbeceaa7b45b1febd44b233

commit f5e37b93a02508e79fbeceaa7b45b1febd44b233
Author: Christian Franke <christian.franke@t-online.de>
Date:   Tue Sep 5 18:32:49 2023 +0200

    Cygwin: Add initial support for SOURCE_DATE_EPOCH
    
    If specified, set version timestamp to this value.
    Enable deterministic archives for ar and ranlib.
    Set cygwin1.dll PE and export table header timestamps to zero.
    
    Signed-off-by: Christian Franke <christian.franke@t-online.de>

Diff:
---
 winsup/cygwin/Makefile.am       | 6 ++++++
 winsup/cygwin/scripts/mkimport  | 6 +++++-
 winsup/cygwin/scripts/mkvers.sh | 4 ++--
 winsup/cygwin/scripts/speclib   | 6 +++++-
 4 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/winsup/cygwin/Makefile.am b/winsup/cygwin/Makefile.am
index 9912b5399..64b252a22 100644
--- a/winsup/cygwin/Makefile.am
+++ b/winsup/cygwin/Makefile.am
@@ -572,6 +572,10 @@ toollib_DATA = \
 libgmon_a_SOURCES = $(GMON_FILES)
 libgmon_a_LIBADD =
 
+# Enable deterministic archives for reproducible builds.
+ARFLAGS = cr$${SOURCE_DATE_EPOCH:+D}
+override RANLIB := $(RANLIB)$${SOURCE_DATE_EPOCH:+ -D}
+
 # cygserver library
 cygserver_blddir = ${target_builddir}/winsup/cygserver
 LIBSERVER = $(cygserver_blddir)/libcygserver.a
@@ -589,12 +593,14 @@ $(LDSCRIPT): $(LDSCRIPT).in
 	$(AM_V_GEN)$(CC) -E - -P < $^ -o $@
 
 # cygwin dll
+# Set PE and export table header timestamps to zero for reproducible builds.
 $(NEW_DLL_NAME): $(LDSCRIPT) libdll.a $(VERSION_OFILES) $(LIBSERVER)\
 		  $(newlib_build)/libm.a $(newlib_build)/libc.a
 	$(AM_V_CXXLD)$(CXX) $(CXXFLAGS) \
 	-mno-use-libstdc-wrappers \
 	-Wl,--gc-sections -nostdlib -Wl,-T$(LDSCRIPT) \
 	-Wl,--dynamicbase -static \
+	$${SOURCE_DATE_EPOCH:+-Wl,--no-insert-timestamp} \
 	-Wl,--heap=0 -Wl,--out-implib,cygdll.a -shared -o $@ \
 	-e @DLL_ENTRY@ $(DEF_FILE) \
 	-Wl,-whole-archive libdll.a -Wl,-no-whole-archive \
diff --git a/winsup/cygwin/scripts/mkimport b/winsup/cygwin/scripts/mkimport
index 7684a8f0e..9517c4e9e 100755
--- a/winsup/cygwin/scripts/mkimport
+++ b/winsup/cygwin/scripts/mkimport
@@ -92,8 +92,12 @@ for my $f (keys %text) {
     }
 }
 
+# Enable deterministic archives for reproducible builds.
+my $opts = 'crs';
+$opts .= 'D' if ($ENV{'SOURCE_DATE_EPOCH'} != '');
+
 unlink $libdll;
-system $ar, 'crus', $libdll, glob('*.o'), @ARGV;
+system $ar, $opts, $libdll, glob('*.o'), @ARGV;
 unlink glob('*.o');
 exit 1 if $?;
 
diff --git a/winsup/cygwin/scripts/mkvers.sh b/winsup/cygwin/scripts/mkvers.sh
index 96af936ec..38f439cd0 100755
--- a/winsup/cygwin/scripts/mkvers.sh
+++ b/winsup/cygwin/scripts/mkvers.sh
@@ -56,9 +56,9 @@ parse_preproc_flags $CC
 
 
 #
-# Load the current date so we can work on individual fields
+# Load the current date (or SOURCE_DATE_EPOCH) so we can work on individual fields
 #
-set -$- $(date -u +"%m %d %Y %H:%M")
+set -$- $(date ${SOURCE_DATE_EPOCH:+-d @}${SOURCE_DATE_EPOCH} -u +"%m %d %Y %H:%M")
 m=$1 d=$2 y=$3 hhmm=$4
 #
 # Set date into YYYY-MM-DD HH:MM:SS format
diff --git a/winsup/cygwin/scripts/speclib b/winsup/cygwin/scripts/speclib
index e6d4d8e94..41a3a8e13 100755
--- a/winsup/cygwin/scripts/speclib
+++ b/winsup/cygwin/scripts/speclib
@@ -74,7 +74,11 @@ EOF
 close $as_fd or exit 1;
 system $objcopy, '-j', '.idata$7', $iname_o;
 
-$res = system $ar, 'crus', $lib, sort keys %extract;
+# Enable deterministic archives for reproducible builds.
+my $opts = 'crs';
+$opts .= 'D' if ($ENV{'SOURCE_DATE_EPOCH'} != '');
+
+$res = system $ar, $opts, $lib, sort keys %extract;
 unlink keys %extract;
 die "$0: ar creation of $lib exited with non-zero status\n" if $res;
 exit 0;

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-09-10 14:40 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-10 14:40 [newlib-cygwin/main] Cygwin: Add initial support for SOURCE_DATE_EPOCH Jon Turney

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).