3 # generate-release.sh: check out source trees, and build release components with
4 # totally clean, fresh trees.
6 # Usage: generate-release.sh svn-branch[@revision] scratch-dir
8 # Environment variables:
9 # SVNROOTBASE: SVN base URL to FreeBSD repository (svn://svn.freebsd.org)
10 # SVNROOTSRC: URL to FreeBSD src tree (${SVNROOTBASE}/base)
11 # SVNROOTDOC: URL to FreeBSD doc tree (${SVNROOTBASE}/doc)
12 # SVNROOTPORTS:URL to FreeBSD ports tree (${SVNROOTBASE}/ports)
13 # BRANCHSRC: branch name of src (svn-branch[@revision])
14 # BRANCHDOC: branch name of doc (head)
15 # BRANCHPORTS: branch name of ports (head)
16 # WORLD_FLAGS: optional flags to pass to buildworld (e.g. -j)
17 # KERNEL_FLAGS: optional flags to pass to buildkernel (e.g. -j)
24 echo "Usage: $0 svn-branch[@revision] scratch-dir" 2>&1
32 : ${SVNROOTBASE:=svn://svn.freebsd.org}
33 : ${SVNROOTSRC:=${SVNROOTBASE}/base}
34 : ${SVNROOTDOC:=${SVNROOTBASE}/doc}
35 : ${SVNROOTPORTS:=${SVNROOTBASE}/ports}
36 : ${SVNROOT:=${SVNROOTSRC}} # for backward compatibility
37 : ${SVN_CMD:=/usr/local/bin/svn}
40 : ${BRANCHPORTS:=head}
41 : ${WORLD_FLAGS:=${MAKE_FLAGS}}
42 : ${KERNEL_FLAGS:=${MAKE_FLAGS}}
45 if [ ! -r "${CHROOTDIR}" ]; then
46 echo "${CHROOTDIR}: scratch dir not found."
50 CHROOT_CMD="/usr/sbin/chroot ${CHROOTDIR}"
53 *) SETENV_TARGET="TARGET=$TARGET" ;;
55 case ${TARGET_ARCH} in
57 *) SETENV_TARGET_ARCH="TARGET_ARCH=$TARGET_ARCH" ;;
59 SETENV="env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin"
60 CROSSENV="${SETENV_TARGET} ${SETENV_TARGET_ARCH}"
61 WMAKE="make -C /usr/src ${WORLD_FLAGS}"
62 NWMAKE="${WMAKE} __MAKE_CONF=/dev/null SRCCONF=/dev/null"
63 KMAKE="make -C /usr/src ${KERNEL_FLAGS}"
64 RMAKE="make -C /usr/src/release"
66 if [ $(id -u) -ne 0 ]; then
67 echo "Needs to be run as root."
71 set -e # Everything must succeed
73 mkdir -p ${CHROOTDIR}/usr/src
74 ${SVN_CMD} co ${SVNROOT}/${BRANCHSRC} ${CHROOTDIR}/usr/src
75 ${SVN_CMD} co ${SVNROOTDOC}/${BRANCHDOC} ${CHROOTDIR}/usr/doc
76 ${SVN_CMD} co ${SVNROOTPORTS}/${BRANCHPORTS} ${CHROOTDIR}/usr/ports
78 ${SETENV} ${NWMAKE} -C ${CHROOTDIR}/usr/src ${WORLD_FLAGS} buildworld
79 ${SETENV} ${NWMAKE} -C ${CHROOTDIR}/usr/src installworld distribution DESTDIR=${CHROOTDIR}
80 mount -t devfs devfs ${CHROOTDIR}/dev
81 trap "umount ${CHROOTDIR}/dev" EXIT # Clean up devfs mount on exit
83 if [ -d ${CHROOTDIR}/usr/doc ]; then
84 cp /etc/resolv.conf ${CHROOTDIR}/etc/resolv.conf
86 # Install docproj to build release documentation
87 ${CHROOT_CMD} /bin/sh -c \
88 'make -C /usr/ports/textproc/docproj \
97 ${CHROOT_CMD} ${SETENV} ${CROSSENV} ${WMAKE} buildworld
98 ${CHROOT_CMD} ${SETENV} ${CROSSENV} ${KMAKE} buildkernel
99 ${CHROOT_CMD} ${SETENV} ${CROSSENV} ${RMAKE} release
100 ${CHROOT_CMD} ${SETENV} ${CROSSENV} ${RMAKE} install DESTDIR=/R