]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - release/generate-release.sh
r245757 introduced warning output if update method is set to CVS_UPDATE
[FreeBSD/FreeBSD.git] / release / generate-release.sh
1 #!/bin/sh
2
3 # generate-release.sh: check out source trees, and build release components with
4 #  totally clean, fresh trees.
5 #
6 #  Usage: generate-release.sh svn-branch[@revision] scratch-dir
7 #
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)
18 #
19 # $FreeBSD$
20 #
21
22 usage()
23 {
24         echo "Usage: $0 svn-branch[@revision] scratch-dir" 2>&1
25         exit 1
26 }
27
28 if [ $# -lt 2 ]; then
29         usage
30 fi
31
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}
38 BRANCHSRC=$1
39 : ${BRANCHDOC:=head}
40 : ${BRANCHPORTS:=head}
41 : ${WORLD_FLAGS:=${MAKE_FLAGS}}
42 : ${KERNEL_FLAGS:=${MAKE_FLAGS}}
43 : ${CHROOTDIR:=$2}
44  
45 if [ ! -r "${CHROOTDIR}" ]; then
46         echo "${CHROOTDIR}: scratch dir not found."
47         exit 1
48 fi
49
50 CHROOT_CMD="/usr/sbin/chroot ${CHROOTDIR}"
51 case ${TARGET} in
52 "")     ;;
53 *)      SETENV_TARGET="TARGET=$TARGET" ;;
54 esac
55 case ${TARGET_ARCH} in
56 "")     ;;
57 *)      SETENV_TARGET_ARCH="TARGET_ARCH=$TARGET_ARCH" ;;
58 esac
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"
65
66 if [ $(id -u) -ne 0 ]; then
67         echo "Needs to be run as root."
68         exit 1
69 fi
70
71 set -e # Everything must succeed
72
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
77
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
82
83 if [ -d ${CHROOTDIR}/usr/doc ]; then 
84         cp /etc/resolv.conf ${CHROOTDIR}/etc/resolv.conf
85
86         # Install docproj to build release documentation
87         ${CHROOT_CMD} /bin/sh -c \
88                 'make -C /usr/ports/textproc/docproj \
89                         BATCH=yes \
90                         WITHOUT_SVN=yes \
91                         WITHOUT_JADETEX=yes \
92                         WITHOUT_X11=yes \
93                         WITHOUT_PYTHON=yes \
94                         install'
95 fi
96
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