3 # Makefile for building releases and release media.
6 # cdrom: Builds release CD-ROM media (release.iso)
7 # ftp: Sets up FTP distribution area (ftp)
8 # release: Build all media and FTP distribution area
10 # Variables affecting the build process:
11 # WORLDDIR: location of src tree -- must have built world and default kernel
12 # (by default, the directory above this one)
13 # PORTSDIR: location of ports tree to distribute (default: /usr/ports)
14 # DOCDIR: location of doc tree (default: /usr/doc)
15 # NOPORTS: if set, do not distribute ports tree
16 # NOSRC: if set, do not distribute source tree
17 # NODOC: if set, do not generate release documentation
18 # TARGET/TARGET_ARCH: architecture of built release
21 WORLDDIR?= ${.CURDIR}/..
24 RELNOTES_LANG?= en_US.ISO8859-1
26 TARGET_ARCH?= ${MACHINE_ARCH}
27 .if ${TARGET_ARCH} == ${MACHINE_ARCH}
30 TARGET?= ${TARGET_ARCH}
32 IMAKE= ${MAKE} TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET}
33 DISTDIR= ${.OBJDIR}/dist
35 .if !exists(${DOCDIR})
38 .if !exists(${PORTSDIR})
44 EXTRA_PACKAGES+= ports.txz
47 EXTRA_PACKAGES+= src.txz
50 EXTRA_PACKAGES+= reldoc
54 .if exists(${.CURDIR}/${TARGET}/mkisoimages.sh)
55 RELEASE_TARGETS+= cdrom
57 .if exists(${.CURDIR}/${TARGET}/make-memstick.sh)
58 RELEASE_TARGETS+= memstick
65 cd ${WORLDDIR} && ${IMAKE} distributeworld DISTDIR=${DISTDIR}
66 # Set up mergemaster root database
67 sh ${.CURDIR}/scripts/mm-mtree.sh -F \
68 "TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET}" -D "${DISTDIR}/base"
69 # Merge handbook, etc. from doc tree into src tree doc distribution
71 cd ${DOCDIR} && ${IMAKE} all install \
72 DOCDIR=${DISTDIR}/doc/usr/share/doc 'FORMATS=html html-split txt' \
73 INSTALL_COMPRESSED='' URLS_ABSOLUTE=YES
75 cd ${WORLDDIR} && ${IMAKE} packageworld DISTDIR=${DISTDIR}
76 mv ${DISTDIR}/*.txz ${.OBJDIR}
80 cd ${WORLDDIR} && ${IMAKE} distributekernel packagekernel DISTDIR=${DISTDIR}
81 mv ${DISTDIR}/kernel.txz ${.OBJDIR}
84 -mkdir -p ${DISTDIR}/usr
85 ln -fs ${WORLDDIR} ${DISTDIR}/usr/src
86 cd ${DISTDIR} && tar cLvJf ${.OBJDIR}/src.txz --exclude .svn \
90 -mkdir -p ${DISTDIR}/usr
91 ln -fs ${PORTSDIR} ${DISTDIR}/usr/ports
92 cd ${DISTDIR} && tar cLvJf ${.OBJDIR}/ports.txz \
93 --exclude usr/ports/distfiles --exclude usr/ports/packages \
94 --exclude 'usr/ports/INDEX*' --exclude work usr/ports
97 cd ${.CURDIR}/doc && ${MAKE} all install clean 'FORMATS=html txt' \
98 INSTALL_COMPRESSED='' URLS_ABSOLUTE=YES DOCDIR=${.OBJDIR}/rdoc
99 -mkdir ${.OBJDIR}/reldoc
100 .for i in hardware readme relnotes errata
101 ln -f ${.OBJDIR}/rdoc/${RELNOTES_LANG}/${i}/article.txt \
102 ${.OBJDIR}/reldoc/${i:U}.TXT
103 ln -f ${.OBJDIR}/rdoc/${RELNOTES_LANG}/${i}/article.html \
104 ${.OBJDIR}/reldoc/${i:U}.HTM
106 cp ${.OBJDIR}/rdoc/${RELNOTES_LANG}/readme/docbook.css ${.OBJDIR}/reldoc
108 system: packagesystem
110 -mkdir ${.OBJDIR}/release
111 cd ${WORLDDIR} && ${IMAKE} installkernel installworld distribution DESTDIR=${.OBJDIR}/release
112 -rm ${.OBJDIR}/release/boot/kernel/*.symbols
114 mkdir ${.OBJDIR}/release/usr/freebsd-dist
115 cp ${.OBJDIR}/*.txz ${.OBJDIR}/MANIFEST \
116 ${.OBJDIR}/release/usr/freebsd-dist
117 # Copy documentation, if generated
119 cp ${.OBJDIR}/reldoc/* ${.OBJDIR}/release
121 # Set up installation environment
122 ln -s /tmp/bsdinstall_etc/resolv.conf ${.OBJDIR}/release/etc/resolv.conf
123 echo sendmail_enable=\"NONE\" > ${.OBJDIR}/release/etc/rc.conf
124 echo hostid_enable=\"NO\" >> ${.OBJDIR}/release/etc/rc.conf
125 cp ${.CURDIR}/rc.local ${.OBJDIR}/release/etc
126 touch ${.OBJDIR}/${.TARGET}
128 bootonly: packagesystem
130 mkdir ${.OBJDIR}/bootonly
131 cd ${WORLDDIR} && ${IMAKE} installkernel installworld distribution \
132 DESTDIR=${.OBJDIR}/bootonly WITHOUT_AMD=1 WITHOUT_AT=1 \
133 WITHOUT_BIND_DNSSEC=1 WITHOUT_BIND_ETC=1 WITHOUT_BIND_MTREE=1 \
134 WITHOUT_BIND_NAMED=1 WITHOUT_GAMES=1 WITHOUT_GROFF=1 \
135 WITHOUT_INSTALLLIB=1 WITHOUT_LIB32=1 WITHOUT_MAIL=1 \
136 WITHOUT_NCP=1 WITHOUT_TOOLCHAIN=1 WITHOUT_RESCUE=1 WITHOUT_DICT=1
137 -rm ${.OBJDIR}/bootonly/boot/kernel/*.symbols
138 # Copy manifest only (no distfiles) to get checksums
139 mkdir ${.OBJDIR}/bootonly/usr/freebsd-dist
140 cp ${.OBJDIR}/MANIFEST ${.OBJDIR}/bootonly/usr/freebsd-dist
141 # Copy documentation, if generated
143 cp ${.OBJDIR}/reldoc/* ${.OBJDIR}/bootonly
145 # Set up installation environment
146 ln -s /tmp/bsdinstall_etc/resolv.conf ${.OBJDIR}/bootonly/etc/resolv.conf
147 echo sendmail_enable=\"NONE\" > ${.OBJDIR}/bootonly/etc/rc.conf
148 echo hostid_enable=\"NO\" >> ${.OBJDIR}/bootonly/etc/rc.conf
149 cp ${.CURDIR}/rc.local ${.OBJDIR}/bootonly/etc
152 sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b FreeBSD_Install ${.OBJDIR}/release.iso ${.OBJDIR}/release
154 bootonly.iso: bootonly
155 sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b FreeBSD_Install ${.OBJDIR}/bootonly.iso ${.OBJDIR}/bootonly
158 sh ${.CURDIR}/${TARGET}/make-memstick.sh ${.OBJDIR}/release ${.OBJDIR}/memstick
160 packagesystem: base.txz kernel.txz ${EXTRA_PACKAGES}
161 sh ${.CURDIR}/scripts/make-manifest.sh ${.OBJDIR}/*.txz > ${.OBJDIR}/MANIFEST
162 touch ${.OBJDIR}/${.TARGET}
164 cdrom: release.iso bootonly.iso
166 rm -rf ${.OBJDIR}/ftp
168 cp ${.OBJDIR}/*.txz ${.OBJDIR}/MANIFEST ${.OBJDIR}/ftp
170 release: obj ${RELEASE_TARGETS}
173 chflags -R noschg ${.OBJDIR}
174 rm -rf ${.OBJDIR}/dist ${.OBJDIR}/ftp
176 rm -f ${.OBJDIR}/*.txz ${.OBJDIR}/MANIFEST
178 rm -rf ${.OBJDIR}/release
179 rm -f ${.OBJDIR}/release.iso ${.OBJDIR}/memstick