newvers: Honour SOURCE_DATE_EPOCH as a build reproducibility measure

One reason the kernel does not build reproducibly is that it includes
a timestamp in the version string. SOURCE_DATE_EPOCH provides a standard
method to address this: it should be set to the last modification time
of the source, and build processes use the specified timestamp instead
of the "current" date and time.

This change uses SOURCE_DATE_EPOCH if it is set; how it gets set needs
to be addressed elsewhere.

Reviewed by:	bapt
MFC after:	1 week
Sponsored by:	The FreeBSD Foundation
This commit is contained in:
emaste 2015-12-03 12:17:09 +00:00
parent 0d02209e54
commit 442aaceec5

View File

@ -97,7 +97,15 @@ then
fi
touch version
v=`cat version` u=${USER:-root} d=`pwd` h=${HOSTNAME:-`hostname`} t=`date`
v=`cat version` u=${USER:-root} d=`pwd` h=${HOSTNAME:-`hostname`}
if [ -n "$SOURCE_DATE_EPOCH" ]; then
if ! t=`date -r $SOURCE_DATE_EPOCH 2>/dev/null`; then
echo "Invalid SOURCE_DATE_EPOCH" >&2
exit 1
fi
else
t=`date`
fi
i=`${MAKE:-make} -V KERN_IDENT`
compiler_v=$($(${MAKE:-make} -V CC) -v 2>&1 | grep -w 'version')