aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--release/Makefile55
-rw-r--r--release/svnbranch.awk28
2 files changed, 78 insertions, 5 deletions
diff --git a/release/Makefile b/release/Makefile
index 22f250af0640..fd3cb929d3c7 100644
--- a/release/Makefile
+++ b/release/Makefile
@@ -1,7 +1,8 @@
# $FreeBSD$
#
# make release [BUILDNAME=somename] CHROOTDIR=/some/dir CVSROOT=/cvs/dir \
-# [RELEASETAG=tag]
+# [RELEASETAG=tag] [SVNROOT=svn://svn.freebsd.org/base] \
+# [SVNBRANCH=some/branch]
#
# Where "/some/dir" is the pathname of a directory on a some filesystem with
# at least 1000MB of free space, "somename" is what you want the release to
@@ -9,6 +10,11 @@
# which CVS "tag" name should be used when checking out the sources to build
# the release (default is HEAD).
#
+# Please note the support for building from SVN is preliminary and there
+# are still questions about things like how to handle updates of
+# /usr/src on production systems (csup(1) replacement). It is a work
+# in progress and may change as the other issues get worked out.
+#
# Please note: the md(4) driver must be present in the kernel
# (either by being compiled in or available as a kld(4) module),
# otherwise the target 'release.8' and possibly others will fail.
@@ -49,12 +55,25 @@ BUILDNAME?=${BASE}-${DATE}-SNAP
# To add other options to the CVS command, set
#CVSARGS="-lfq"
#
-# To prefix the cvs command
+# To prefix the CVS command
#CVSPREFIX="/usr/bin/time"
#
# Where the CVS repository is
#CVSROOT="/home/ncvs"
#
+# To add other options to the Subversion subcommands (co,up), set
+#SVNCMDARGS="-r '{ 01/01/2002 00:00:00 UTC }'"
+#
+# To prefix the Subversion command
+#SVNPREFIX="/usr/bin/time"
+#
+# Where the Subversion repository is
+#SVNROOT=svn://svn.freebsd.org/base
+#
+# Subversion branch to build for src. If this is not set then it is
+# automatically computed from RELEASETAG.
+#SVNBRANCH=stable/7
+#
# Non-zero if ${RELEASETAG} is in the form "RELENG_ver_RELEASE"; we
# are building an official release. Otherwise, we are building for
# a branch.
@@ -68,6 +87,16 @@ PORTSRELEASETAG?= ${AUXRELEASETAG}
.endif
.endif
+# Determine the Subversion source branch that corresponds to the requested
+# RELEASETAG.
+.if !defined(SVNBRANCH)
+.if defined(RELEASETAG)
+SVNBRANCH!= echo "${RELEASETAG}" | awk -f ${.CURDIR}/svnbranch.awk
+.else
+SVNBRANCH= head
+.endif
+.endif
+
# If you want to pass flags to the world build such as -j X, use
# WORLD_FLAGS. Similarly, you can specify make flags for kernel
# builds via KERNEL_FLAGS.
@@ -341,8 +370,17 @@ CVS_PORTSARGS+= -r ${PORTSRELEASETAG}
WORLDDIR?= ${.CURDIR}/..
release rerelease:
-.if !defined(CHROOTDIR) || !defined(BUILDNAME) || !defined(CVSROOT)
- @echo "To make a release you must set CHROOTDIR, BUILDNAME and CVSROOT" && false
+.if !defined(CHROOTDIR) || !defined(BUILDNAME)
+ @echo "To make a release you must set CHROOTDIR and BUILDNAME" && false
+.endif
+.if !defined(NOPORTSATALL) && !defined(EXTPORTSDIR) && !defined(CVSROOT)
+ @echo "Building ports requires CVSROOT or EXTPORTSDIR" && false
+.endif
+.if !defined(NODOC) && !defined(EXTDOCDIR) && !defined(CVSROOT)
+ @echo "Building docs requires CVSROOT or EXTDOCDIR" && false
+.endif
+.if !defined(EXTSRCDIR) && !defined(CVSROOT) && !defined(SVNROOT)
+ @echo "The source tree requires SVNROOT, CVSROOT, or EXTSRCDIR" && false
.endif
.if defined(NOPORTSATALL) && !defined(NODOC)
@echo "Ports are required for building the release docs. Either set NODOC or"
@@ -387,6 +425,10 @@ release rerelease:
.if defined(EXTSRCDIR)
cd ${CHROOTDIR}/usr && \
cp -R -H ${EXTSRCDIR} src
+.elif defined(SVNROOT)
+ cd ${CHROOTDIR}/usr && \
+ ${SVNPREFIX} svn co ${SVNCMDARGS} ${SVNROOT}/${SVNBRANCH} \
+ ${RELEASESRCMODULE}
.else
cd ${CHROOTDIR}/usr && \
${CVSPREFIX} cvs -R ${CVSARGS} -d ${CVSROOT} \
@@ -432,7 +474,10 @@ release rerelease:
.endif
.if make(rerelease)
.if !defined(RELEASENOUPDATE) && !defined(EXTSRCDIR)
-.if !defined(RELEASETAG)
+.if defined(SVNROOT)
+ cd ${CHROOTDIR}/usr/src && ${SVNPREFIX} svn switch ${SVNCMDARGS} \
+ ${SVNROOT}/${SVNBRANCH}
+.elif !defined(RELEASETAG)
cd ${CHROOTDIR}/usr/src && ${CVSPREFIX} cvs -R ${CVSARGS} -q \
update ${CVSCMDARGS} -P -d -A
.else
diff --git a/release/svnbranch.awk b/release/svnbranch.awk
new file mode 100644
index 000000000000..0fc86200c043
--- /dev/null
+++ b/release/svnbranch.awk
@@ -0,0 +1,28 @@
+# $FreeBSD$
+
+BEGIN {
+ FS = "_"
+}
+
+/RELENG_.*_RELEASE/ {
+ if (NF == 5) {
+ printf "release/%s.%s.%s", $2, $3, $4
+ exit
+ }
+}
+
+/RELENG_.*/ {
+ if (NF == 3) {
+ printf "releng/%s.%s", $2, $3
+ exit
+ }
+
+ if (NF == 2) {
+ printf "stable/%s", $2
+ exit
+ }
+}
+
+// {
+ printf "unknown_branch"
+}