Makefile revision 7079
1# $Id$ 2# 3# How to roll a release: 4# 5# make release CHROOTDIR=<lots of disk> [ RELEASETAG=something ] 6# 7# As far as I know, this will roll everything nicely into the "stage" 8# directory. I still need to write the two rules to move that into 9# the "cdrom" and "ftp" directories. 10# I also need to "make ports" and install those, but I'm not going to do 11# that on a 14.4 line just yet... 12 13# Things which without too much trouble can be considered variables 14EXTRADISTRIBUTIONS= secure games manpages proflibs dict info 15CPIO1= etc/services etc/protocols 16CPIO2= scripts/miscfuncs.sh scripts/instdist.sh scripts/netinst.sh \ 17 scripts/adduser.sh scripts/bininst.sh scripts/setup.sh 18 19FAQS= README README-2.0 MIRROR.SITES 20 21# define this to use a vn device instead of the floppy drive 22VNDEVICE= vn0 23 24# work dir for floppies 25MNT= /mnt 26# define FDFORMAT to format physical floppies 27#FDFORMAT= yes 28 29FDDEVICE= fd0 30FDCYLS= 80 31FDCYLSIZE= 15k 32FDLABEL= fd1200 33 34NEWFSARGS= -c 80 -b 4096 -f 512 -i 9000 -m 0 -t 0 -u 0 \ 35 -o space -T ${FDLABEL} 36 37ZIPNSPLIT= gzip --no-name -9 -c | split -b 240640 - 38 39 40# Things which will get you into trouble if you change them 41DISTRIBUTIONS= bin ${EXTRADISTRIBUTIONS} 42MTREEFILES= ${.CURDIR}/../etc/mtree 43RD= ${RELEASEDIR}/stage 44FD= ${RELEASEDIR}/ftp 45CD= ${RELEASEDIR}/cdrom 46 47release: 48.if !defined(CHROOTDIR) 49 @echo "To make a release you must set CHROOTDIR" && false 50.endif 51 -mkdir ${CHROOTDIR} 52 chflags -R noschg ${CHROOTDIR}/. 53 rm -rf ${CHROOTDIR}/* 54 cd ${.CURDIR}/../etc ; ${MAKE} distrib-dirs DESTDIR=${CHROOTDIR} 55 cd ${.CURDIR}/../etc ; ${MAKE} distribution DESTDIR=${CHROOTDIR} 56 cd ${.CURDIR}/.. ; ${MAKE} -k install DESTDIR=${CHROOTDIR} 57 echo "#!/bin/sh" > ${CHROOTDIR}/mk 58 echo "set -ex" >> ${CHROOTDIR}/mk 59 echo "cd /usr/src" >> ${CHROOTDIR}/mk 60 echo "make world" >> ${CHROOTDIR}/mk 61 echo "cd sbin/sysinstall" >> ${CHROOTDIR}/mk 62 echo "make obj" >> ${CHROOTDIR}/mk 63 echo "cd ../../release" >> ${CHROOTDIR}/mk 64 echo "make obj" >> ${CHROOTDIR}/mk 65 echo "make doRELEASE" >> ${CHROOTDIR}/mk 66 echo "RELEASEDIR=/R" >> ${CHROOTDIR}/etc/make.conf 67.if !defined(RELEASETAG) 68 cd ${CHROOTDIR}/usr ; cvs co -P src 69.else 70 cd ${CHROOTDIR}/usr ; cvs export -r ${RELEASETAG} src 71.endif 72 chmod 755 ${CHROOTDIR}/mk 73 chroot ${CHROOTDIR} /mk 74 75clean: 76 rm -rf cpio_crunch boot_crunch release.[0-9] release.1[0] 77 78# Clean out ${RELEASEDIR} and make the directory structure. 79release.1: 80 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 81 -mkdir ${RELEASEDIR} 82 chflags -R noschg ${RELEASEDIR}/. 83 rm -rf ${RELEASEDIR}/* 84 mkdir ${RD} 85 mkdir ${RD}/bootfd 86 mkdir ${RD}/bootfd/dev 87 mkdir ${RD}/bootfd/mnt 88 mkdir ${RD}/bootfd/stand 89 mkdir ${RD}/cpiofd 90 mkdir ${RD}/cpiofd/stand 91 mkdir ${RD}/cpiofd/stand/scripts 92 mkdir ${RD}/fixitfd 93 mkdir ${RD}/fixitfd/stand 94 mkdir ${RD}/fixitfd/bin 95 mkdir ${RD}/fixitfd/sbin 96 mkdir ${RD}/fixitfd/mnt 97 mkdir ${RD}/fixitfd/etc 98 mkdir ${RD}/floppies 99 mkdir ${RD}/trees 100 mkdir ${RD}/trees/bin 101 mkdir ${RD}/dists 102 mkdir ${RD}/dists/bin 103 cd ${.CURDIR}/../etc && make distrib-dirs DESTDIR=${RD}/trees/bin 104 for i in ${EXTRADISTRIBUTIONS} ; do \ 105 mkdir ${RD}/trees/$$i ; \ 106 mkdir ${RD}/dists/$$i ; \ 107 mtree -deU -f ${MTREEFILES}/BSD.root.dist \ 108 -p ${RD}/trees/$$i > /dev/null ; \ 109 mtree -deU -f ${MTREEFILES}/BSD.usr.dist \ 110 -p ${RD}/trees/$$i/usr > /dev/null ; \ 111 mtree -deU -f ${MTREEFILES}/BSD.var.dist \ 112 -p ${RD}/trees/$$i/var > /dev/null ; \ 113 done 114 touch release.1 115 116# Install the system into the various distributions. 117release.2: 118 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 119 cd ${.CURDIR}/.. ; make distribute DISTDIR=${RD}/trees 120 touch release.2 121 122# Make and install a couple of kernels we need. 123release.3: 124 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 125 cd ${.CURDIR}/../sys/i386/conf ; \ 126 config GENERIC ; \ 127 config BOOTFLP 128 cd ${.CURDIR}/../sys/compile/GENERIC ; \ 129 make depend ; \ 130 make kernel ; \ 131 install -c kernel ${RD}/trees/bin/kernel.GENERIC 132 ln -f ${RD}/trees/bin/kernel.GENERIC ${RD}/cpiofd/kernel 133 cd ${.CURDIR}/../sys/compile/BOOTFLP ; \ 134 make depend ; \ 135 make kernel ; \ 136 install -s -c kernel ${RD}/bootfd/kernel 137 ln -f ${RD}/bootfd/kernel ${RD}/fixitfd/kernel 138 touch release.3 139 140# Make and install the two crunched binaries which live on the floppies. 141# You are not supposed to like this :-) 142release.4: 143 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 144 for j in boot cpio fixit; do \ 145 rm -rf $${j}_crunch ; \ 146 mkdir $${j}_crunch ; \ 147 ( cd $${j}_crunch ; \ 148 crunchgen ${.CURDIR}/$${j}_crunch.conf ; \ 149 ${MAKE} -f $${j}_crunch.mk objs exe NOCRYPT=yes ) ; \ 150 if [ $$j = cpio ] ; then \ 151 cat < $${j}_crunch/$${j}_crunch \ 152 > ${RD}/$${j}fd/stand/$${j}_crunch ; \ 153 else \ 154 gzip -9 < $${j}_crunch/$${j}_crunch \ 155 > ${RD}/$${j}fd/stand/$${j}_crunch ; \ 156 fi ; \ 157 rm -rf $${j}_crunch ; \ 158 chmod 555 ${RD}/$${j}fd/stand/$${j}_crunch ; \ 159 for i in `crunchgen -l ${.CURDIR}/$${j}_crunch.conf` ; do \ 160 ln -f ${RD}/$${j}fd/stand/$${j}_crunch \ 161 ${RD}/$${j}fd/stand/$$i ; \ 162 done ; \ 163 done 164 touch release.4 165 166# Fix up the distributions. 167release.5: 168 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 169 if [ -d ${RD}/trees/bin/usr/share/man ] ; then \ 170 rm -rf ${RD}/trees/manpages/usr/share/man ;\ 171 mv ${RD}/trees/bin/usr/share/man \ 172 ${RD}/trees/manpages/usr/share/man ;\ 173 fi 174 if [ -d ${RD}/trees/bin/usr/games ] ; then \ 175 rm -rf ${RD}/trees/games/usr/games ;\ 176 mv ${RD}/trees/bin/usr/games \ 177 ${RD}/trees/games/usr/games ;\ 178 fi 179 if [ -d ${RD}/trees/bin/usr/share/games ] ; then \ 180 rm -rf ${RD}/trees/games/usr/share/games ;\ 181 mv ${RD}/trees/bin/usr/share/games \ 182 ${RD}/trees/games/usr/share/games ;\ 183 fi 184 if [ -d ${RD}/trees/bin/var/games ] ; then \ 185 rm -rf ${RD}/trees/games/var/games ;\ 186 mv ${RD}/trees/bin/var/games \ 187 ${RD}/trees/games/var/games ;\ 188 fi 189 if [ -d ${RD}/trees/bin/usr/share/dict ] ; then \ 190 rm -rf ${RD}/trees/dict/usr/share/dict ;\ 191 mv ${RD}/trees/bin/usr/share/dict \ 192 ${RD}/trees/dict/usr/share/dict ;\ 193 fi 194 for i in airport birthtoken flowers na.phone zipcodes ; do \ 195 if [ -f ${RD}/trees/bin/usr/share/misc/$$i ] ; then \ 196 mv ${RD}/trees/bin/usr/share/misc/$$i \ 197 ${RD}/trees/dict/usr/share/misc ; \ 198 fi ; \ 199 done 200 for i in ${RD}/trees/bin/usr/lib/*_p.a ; do \ 201 if [ -f $$i ] ; then \ 202 mv $$i \ 203 ${RD}/trees/proflibs/usr/lib ; \ 204 fi ; \ 205 done 206 -cd ${RD}/trees ; \ 207 find ${EXTRADISTRIBUTIONS} -depth -type d -print | xargs rmdir 208 209 touch release.5 210 211# Complete the bootfd 212release.6: 213 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 214 ( cd ${RD}/trees/bin/dev ; \ 215 ls console tty ttyv1 null zero \ 216 sd[0123][a-h] wd[0123][a-h] fd[01] \ 217 rsd[0123][a-h] rwd[0123][a-h] rfd[01] | \ 218 cpio -dump ${RD}/bootfd/dev ) 219 install -c ${.CURDIR}/../COPYRIGHT ${RD}/bootfd 220 cd ${RD}/trees/bin/usr/share/FAQ ; \ 221 install -c diskspace.FAQ ${RD}/bootfd/DISKSPACE.FAQ ;\ 222 install -c RELNOTES.FreeBSD ${RD}/bootfd ;\ 223 install -c TROUBLESHOOTING ${RD}/bootfd ;\ 224 install -c README-2.0 ${RD}/bootfd/README 225 touch ${RD}/bootfd/this_is_boot_flp 226 cd ${.CURDIR} ; ${MAKE} doFLOPPY FLOPPY=boot 227 touch release.6 228 229# Complete the cpiofd directory 230# XXX a lot of stuff is missing here... 231release.7: 232 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 233 cd ${RD}/trees/bin ; ls ${CPIO1} | cpio -dump ${RD}/cpiofd/stand 234 cd ${.CURDIR} ; ls ${CPIO2} | cpio -dumpv ${RD}/cpiofd/stand 235 chmod 755 ${RD}/cpiofd/stand/scripts/* 236 cp ${RD}/trees/bin/usr/sbin/tzsetup ${RD}/cpiofd/stand 237 ( cd ${RD}/cpiofd ; \ 238 ( rm -f OK ; find . -print ; touch OK ; echo OK ) | \ 239 cpio -H newc -oa | gzip -9 -c | dd conv=osync ) \ 240 > ${RD}/floppies/cpio.flp 241 gzip -1 -c < ${RD}/floppies/cpio.flp > ${RD}/floppies/cpio.flp.gz 242 touch release.7 243 244# Make binary dists 245release.8: 246 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 247 rm -rf ${RD}/dists 248 mkdir -p ${RD}/dists 249 @for i in ${DISTRIBUTIONS} ; \ 250 do \ 251 if [ -d ${RD}/trees/$${i} ] ; then \ 252 cd ${.CURDIR} ; \ 253 $(MAKE) doTARBALL SD=${RD}/trees/$${i} \ 254 TD=$$i ARG="." ; \ 255 ( cd ${RD}/dists/$${i}; \ 256 sh -e ${.CURDIR}/scripts/mkchecksums.sh ) ; \ 257 cp ${.CURDIR}/scripts/extract_$${i}.sh \ 258 ${RD}/dists/$${i}/extract.sh;\ 259 echo "$${i} distribution is finished."; \ 260 fi ; \ 261 done 262 touch release.8 263 264 265# Make source dists 266release.9: 267 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 268 @cd ${.CURDIR} ; $(MAKE) doTARBALL SD=/usr/src TD=src/base ARG="[A-Z]*" 269 @for i in bin etc games gnu include lib libexec release sbin \ 270 secure lkm eBones share sys usrbin usrsbin ; do \ 271 if [ -d /usr/src/$$i ] ; then \ 272 cd ${.CURDIR} ; \ 273 $(MAKE) doTARBALL SD=/usr/src \ 274 TD=src/$$i ARG="$$i" ; \ 275 fi ; \ 276 done 277 ( cd ${RD}/dists/src; \ 278 sh -e ${.CURDIR}/scripts/mkchecksums.sh ) ; \ 279 cp ${.CURDIR}/scripts/extract_src.sh \ 280 ${RD}/dists/src/extract.sh;\ 281 echo "src distribution is finished."; \ 282 touch release.9 283 284# Complete the fixitfd 285release.10: 286 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 287 ( cd ${RD}/trees/bin/dev ; \ 288 ls console tty ttyv1 null zero \ 289 sd[0123][a-h] wd[0123][a-h] fd[01] \ 290 rsd[0123][a-h] rwd[0123][a-h] rfd[01] | \ 291 cpio -dump ${RD}/fixitfd/dev ) 292 ln -f ${RD}/fixitfd/stand/init ${RD}/fixitfd/sbin 293 ln -f ${RD}/fixitfd/stand/sh ${RD}/fixitfd/bin 294 cp ${RD}/trees/bin/usr/mdec/fdboot ${RD}/fixitfd/etc/boot1 295 cp ${RD}/trees/bin/usr/mdec/bootfd ${RD}/fixitfd/etc/boot2 296 cp ${.CURDIR}/fixit.profile ${RD}/fixitfd/.profile 297 echo 'echo /etc/rc' > ${RD}/fixitfd/etc/rc 298 echo 'exit 1' >> ${RD}/fixitfd/etc/rc 299 touch ${RD}/fixitfd/etc/spwd.db 300 cd ${.CURDIR} ; ${MAKE} doFLOPPY FLOPPY=fixit 301 touch release.10 302 303ftp.1: 304 rm -rf ${FD} 305 mkdir ${FD} 306 cd ${RD} && find floppies dists -print | cpio -dumplv ${FD} 307 cd ${RD}/trees/bin/usr/share/FAQ && ln -f ${FAQS} ${FD} 308 309# Various "subroutine" and other supporting targets. 310 311doTARBALL: 312.if !defined(SD) 313 @echo "SD undefined in doTARBALL" ; exit 1 314.endif 315.if !defined(TD) 316 @echo "TB undefined in doTARBALL" ; exit 1 317.endif 318.if !defined(ARG) 319 @echo "ARG undefined in doTARBALL" ; exit 1 320.endif 321 rm -rf ${RD}/dists/${TD} 322 mkdir -p ${RD}/dists/${TD} 323 ( cd ${SD} ; \ 324 echo rolling ${TD} tarball ;\ 325 tar --exclude CVS -cf - ${ARG} | \ 326 ${ZIPNSPLIT} ${RD}/dists/${TD}/`basename ${TD}`. ) 327 328doRELEASE: release.1 release.2 release.3 release.4 release.5 release.6 \ 329 release.7 release.8 release.9 release.10 330 @echo "Release done" 331 332ckRELEASEDIR: 333.if !defined(RELEASEDIR) 334 @echo "To make a release RELEASEDIR must be defined" && false 335.endif 336 337doFLOPPY: 338.if !defined(FLOPPY) 339 @echo "FLOPPY undefined in doFLOPPY" ; exit 1 340.endif 341 rm -f ${RD}/floppies/${FLOPPY}.tmp ${RD}/floppies/${FLOPPY}.flp 342.if defined(VNDEVICE) 343 if [ ! -b /dev/${VNDEVICE} -o ! -c /dev/r${VNDEVICE} ] ; then \ 344 cd /dev && sh MAKEDEV ${VNDEVICE} ; fi 345 @umount /dev/${VNDEVICE} 2>/dev/null || true 346 @umount ${MNT} 2>/dev/null || true 347 @vnconfig -u /dev/r${VNDEVICE} 2>/dev/null || true 348 dd of=${RD}/floppies/${FLOPPY}.tmp if=/dev/zero \ 349 bs=${FDCYLSIZE} count=${FDCYLS} 2>/dev/null 350 sync && sleep 5 351 vnconfig -c /dev/r${VNDEVICE} ${RD}/floppies/${FLOPPY}.tmp 352 disklabel -w -r -B \ 353 -b ${RD}/trees/bin/usr/mdec/fdboot \ 354 -s ${RD}/trees/bin/usr/mdec/bootfd \ 355 /dev/r${VNDEVICE} ${FDLABEL} 356 newfs ${NEWFSARGS} /dev/r${VNDEVICE} 357 mount /dev/${VNDEVICE} ${MNT} 358 cd ${RD}/${FLOPPY}fd ; find . -print | cpio -dump ${MNT} 359 umount ${MNT} 360 fsck /dev/r${VNDEVICE} < /dev/null 361.else 362 -umount /dev/${FDDEVICE} 363 -umount ${MNT} 364.if !defined(FDFORMAT) 365 echo y | fdformat /dev/r${FDDEVICE} 366.endif 367 disklabel -w -r -B \ 368 -b ${RD}/trees/bin/usr/mdec/fdboot \ 369 -s ${RD}/trees/bin/usr/mdec/bootfd \ 370 /dev/r${FDDEVICE} ${FDLABEL} 371 newfs ${NEWFSARGS} /dev/r${FDDEVICE} 372 mount /dev/${FDDEVICE} ${MNT} 373 cd ${RD}/${FLOPPY}fd ; find . -print | cpio -dump ${MNT} 374 umount ${MNT} 375 fsck -n /dev/r${FDDEVICE} < /dev/null 376 dd if=/dev/r${FDDEVICE} of=${RD}/floppies/${FLOPPY}.tmp \ 377 bs=${FDCYLSIZE} count=${FDCYLS} 378.endif 379 mv ${RD}/floppies/${FLOPPY}.tmp ${RD}/floppies/${FLOPPY}.flp 380 gzip -9 -c < ${RD}/floppies/${FLOPPY}.flp \ 381 > ${RD}/floppies/${FLOPPY}.flp.gz 382 383.include <bsd.prog.mk> 384