Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src Add -P for reproducible builds based on the latest cvs times...
details: https://anonhg.NetBSD.org/src/rev/bb78604f082e
branches: trunk
changeset: 349663:bb78604f082e
user: christos <christos%NetBSD.org@localhost>
date: Sun Dec 18 02:20:30 2016 +0000
description:
Add -P for reproducible builds based on the latest cvs timestamp.
diffstat:
build.sh | 147 +++++++++++++++++++++++++++++++++++++++-----------------------
1 files changed, 93 insertions(+), 54 deletions(-)
diffs (229 lines):
diff -r 728536714864 -r bb78604f082e build.sh
--- a/build.sh Sun Dec 18 02:18:28 2016 +0000
+++ b/build.sh Sun Dec 18 02:20:30 2016 +0000
@@ -1,5 +1,5 @@
#! /usr/bin/env sh
-# $NetBSD: build.sh,v 1.311 2016/11/13 14:47:46 ast Exp $
+# $NetBSD: build.sh,v 1.312 2016/12/18 02:20:30 christos Exp $
#
# Copyright (c) 2001-2011 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -1003,7 +1003,7 @@
fi
cat <<_usage_
-Usage: ${progname} [-EhnorUuxy] [-a arch] [-B buildid] [-C cdextras]
+Usage: ${progname} [-EhnoPRrUuxy] [-a arch] [-B buildid] [-C cdextras]
[-D dest] [-j njob] [-M obj] [-m mach] [-N noisy]
[-O obj] [-R release] [-S seed] [-T tools]
[-V var=[value]] [-w wrapper] [-X x11src] [-Y extsrcsrc]
@@ -1078,6 +1078,8 @@
-O obj Set obj root directory to obj; sets a MAKEOBJDIR pattern.
Unsets MAKEOBJDIRPREFIX.
-o Set MKOBJDIRS=no; do not create objdirs at start of build.
+ -P Set MKREPRO and MKREPRO_TIMESTAMP to the latest source
+ CVS timestamp for reproducible builds.
-R release Set RELEASEDIR to release. [Default: releasedir]
-r Remove contents of TOOLDIR and DESTDIR before building.
-S seed Set BUILDSEED to seed. [Default: NetBSD-majorversion]
@@ -1103,7 +1105,7 @@
parseoptions()
{
- opts='a:B:C:D:Ehj:M:m:N:nO:oR:rS:T:UuV:w:X:xY:yZ:'
+ opts='a:B:C:D:Ehj:M:m:N:nO:oPR:rS:T:UuV:w:X:xY:yZ:'
opt_a=false
opt_m=false
@@ -1219,6 +1221,10 @@
MKOBJDIRS=no
;;
+ -P)
+ MKREPRO=yes
+ ;;
+
-R)
eval ${optargcmd}; resolvepath OPTARG
setmakeenv RELEASEDIR "${OPTARG}"
@@ -1435,7 +1441,62 @@
;;
esac
}
+# print_tooldir_make --
+# Try to find and print a path to an existing
+# ${TOOLDIR}/bin/${toolprefix}program
+print_tooldir_program()
+{
+ local possible_TOP_OBJ
+ local possible_TOOLDIR
+ local possible_program
+ local tooldir_program
+ local program=${1}
+ if [ -n "${TOOLDIR}" ]; then
+ echo "${TOOLDIR}/bin/${toolprefix}${program}"
+ return
+ fi
+
+ # Set host_ostype to something like "NetBSD-4.5.6-i386". This
+ # is intended to match the HOST_OSTYPE variable in <bsd.own.mk>.
+ #
+ local host_ostype="${uname_s}-$(
+ echo "${uname_r}" | sed -e 's/([^)]*)//g' -e 's/ /_/g'
+ )-$(
+ echo "${uname_p}" | sed -e 's/([^)]*)//g' -e 's/ /_/g'
+ )"
+
+ # Look in a few potential locations for
+ # ${possible_TOOLDIR}/bin/${toolprefix}${program}.
+ # If we find it, then set possible_program.
+ #
+ # In the usual case (without interference from environment
+ # variables or /etc/mk.conf), <bsd.own.mk> should set TOOLDIR to
+ # "${_SRC_TOP_OBJ_}/tooldir.${host_ostype}".
+ #
+ # In practice it's difficult to figure out the correct value
+ # for _SRC_TOP_OBJ_. In the easiest case, when the -M or -O
+ # options were passed to build.sh, then ${TOP_objdir} will be
+ # the correct value. We also try a few other possibilities, but
+ # we do not replicate all the logic of <bsd.obj.mk>.
+ #
+ for possible_TOP_OBJ in \
+ "${TOP_objdir}" \
+ "${MAKEOBJDIRPREFIX:+${MAKEOBJDIRPREFIX}${TOP}}" \
+ "${TOP}" \
+ "${TOP}/obj" \
+ "${TOP}/obj.${MACHINE}"
+ do
+ [ -n "${possible_TOP_OBJ}" ] || continue
+ possible_TOOLDIR="${possible_TOP_OBJ}/tooldir.${host_ostype}"
+ possible_program="${possible_TOOLDIR}/bin/${toolprefix}${program}"
+ if [ -x "${possible_make}" ]; then
+ echo ${possible_program}
+ return;
+ fi
+ done
+ echo ""
+}
# print_tooldir_make --
# Try to find and print a path to an existing
# ${TOOLDIR}/bin/${toolprefix}make, for use by rebuildmake() before a
@@ -1459,56 +1520,11 @@
#
print_tooldir_make()
{
- local possible_TOP_OBJ
+ local possible_make
local possible_TOOLDIR
- local possible_make
local tooldir_make
- if [ -n "${TOOLDIR}" ]; then
- echo "${TOOLDIR}/bin/${toolprefix}make"
- return 0
- fi
-
- # Set host_ostype to something like "NetBSD-4.5.6-i386". This
- # is intended to match the HOST_OSTYPE variable in <bsd.own.mk>.
- #
- local host_ostype="${uname_s}-$(
- echo "${uname_r}" | sed -e 's/([^)]*)//g' -e 's/ /_/g'
- )-$(
- echo "${uname_p}" | sed -e 's/([^)]*)//g' -e 's/ /_/g'
- )"
-
- # Look in a few potential locations for
- # ${possible_TOOLDIR}/bin/${toolprefix}make.
- # If we find it, then set possible_make.
- #
- # In the usual case (without interference from environment
- # variables or /etc/mk.conf), <bsd.own.mk> should set TOOLDIR to
- # "${_SRC_TOP_OBJ_}/tooldir.${host_ostype}".
- #
- # In practice it's difficult to figure out the correct value
- # for _SRC_TOP_OBJ_. In the easiest case, when the -M or -O
- # options were passed to build.sh, then ${TOP_objdir} will be
- # the correct value. We also try a few other possibilities, but
- # we do not replicate all the logic of <bsd.obj.mk>.
- #
- for possible_TOP_OBJ in \
- "${TOP_objdir}" \
- "${MAKEOBJDIRPREFIX:+${MAKEOBJDIRPREFIX}${TOP}}" \
- "${TOP}" \
- "${TOP}/obj" \
- "${TOP}/obj.${MACHINE}"
- do
- [ -n "${possible_TOP_OBJ}" ] || continue
- possible_TOOLDIR="${possible_TOP_OBJ}/tooldir.${host_ostype}"
- possible_make="${possible_TOOLDIR}/bin/${toolprefix}make"
- if [ -x "${possible_make}" ]; then
- break
- else
- unset possible_make
- fi
- done
-
+ possible_make=$(print_tooldir_program make)
# If the above didn't work, search the PATH for a suitable
# ${toolprefix}make, nbmake, bmake, or make.
#
@@ -1876,7 +1892,7 @@
eval cat <<EOF ${makewrapout}
#! ${HOST_SH}
# Set proper variables to allow easy "make" building of a NetBSD subtree.
-# Generated from: \$NetBSD: build.sh,v 1.311 2016/11/13 14:47:46 ast Exp $
+# Generated from: \$NetBSD: build.sh,v 1.312 2016/12/18 02:20:30 christos Exp $
# with these arguments: ${_args}
#
@@ -1907,8 +1923,8 @@
make_in_dir()
{
- dir="$1"
- op="$2"
+ local dir="$1"
+ local op="$2"
${runcmd} cd "${dir}" ||
bomb "Failed to cd to \"${dir}\""
${runcmd} "${makewrapper}" ${parallel} ${op} ||
@@ -2172,6 +2188,22 @@
statusmsg "Rump build&link tests successful"
}
+setup_mkrepro()
+{
+ if [ ${MKREPRO-no} != "yes" ]; then
+ return
+ fi
+ buildtools
+ local dirs=${NETBSDSRCDIR-/usr/src}
+ if [ ${MKX11-no} = "yes" ]; then
+ dirs="$dirs ${X11SRCDIR-/usr/xsrc}"
+ fi
+ local cvslatest=$(print_tooldir_program cvslatest)
+ MKREPRO_TIMESTAMP=$(${cvslatest} ${dirs})
+ statusmsg2 "MKREPRO_TIMESTAMP" "$(date -r ${MKREPRO_TIMESTAMP})"
+ export MKREPRO MKREPRO_TIMESTAMP
+}
+
main()
{
initdefaults
@@ -2224,7 +2256,14 @@
statusmsg "Built sets to ${setdir}"
;;
- cleandir|obj|build|distribution|release|sourcesets|syspkgs|params)
+ build|distribution|release)
+ setup_mkrepro
+ ${runcmd} "${makewrapper}" ${parallel} ${op} ||
+ bomb "Failed to make ${op}"
+ statusmsg "Successful make ${op}"
+ ;;
+
+ cleandir|obj|sourcesets|syspkgs|params)
${runcmd} "${makewrapper}" ${parallel} ${op} ||
bomb "Failed to make ${op}"
statusmsg "Successful make ${op}"
Home |
Main Index |
Thread Index |
Old Index