Makefile revision 7954
1# $Id: Makefile,v 1.140 1995/04/19 18:00:04 phk Exp $ 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 14 15EXPORT_DISTS= games manpages proflibs dict info 16EXTRA_DISTS= secure ${EXPORT_DISTS} 17ALL_DISTS= bin ${EXTRA_DISTS} 18 19CPIO1= etc/services etc/protocols etc/sysconfig 20CPIO2= scripts/miscfuncs.sh scripts/instdist.sh scripts/netinst.sh \ 21 scripts/adduser.sh scripts/bininst.sh scripts/setup.sh 22 23FAQS= README MIRROR.SITES 24 25# define this to use a vn device instead of the floppy drive 26VNDEVICE= vn0 27 28# which floppy to use, if VNDEVICE isn't defined. 29FDDEVICE= fd0 30 31# define FDFORMAT to format physical floppies 32FDFORMAT= yes 33 34# mountpoint for filesystems. 35MNT= /mnt 36 37# other floppy parameters. 38FDCYLS= 80 39FDCYLSIZE= 15k 40FDLABEL= fd1200 41 42NEWFSARGS= -c 80 -b 4096 -f 512 -i 5000 -m 0 -t 0 -u 0 \ 43 -o space -T ${FDLABEL} 44 45ZIPNSPLIT= gzip --no-name -9 -c | split -b 240640 - 46 47 48# Things which will get you into trouble if you change them 49DISTRIBUTIONS= bin ${EXTRA_DISTS} 50MTREEFILES= ${.CURDIR}/../etc/mtree 51RD= ${RELEASEDIR}/stage 52FD= ${RELEASEDIR}/ftp 53CD= ${RELEASEDIR}/cdrom 54 55release: 56.if !defined(CHROOTDIR) 57 @echo "To make a release you must set CHROOTDIR" && false 58.endif 59 -mkdir ${CHROOTDIR} 60 chflags -R noschg ${CHROOTDIR}/. 61 rm -rf ${CHROOTDIR}/* 62 cd ${.CURDIR}/../etc ; ${MAKE} distrib-dirs DESTDIR=${CHROOTDIR} 63 cd ${.CURDIR}/../etc ; ${MAKE} distribution DESTDIR=${CHROOTDIR} 64 cd ${.CURDIR}/.. ; ${MAKE} -k install DESTDIR=${CHROOTDIR} 65 echo "#!/bin/sh" > ${CHROOTDIR}/mk 66 echo "set -ex" >> ${CHROOTDIR}/mk 67 echo "cd /usr/src" >> ${CHROOTDIR}/mk 68 echo "make world" >> ${CHROOTDIR}/mk 69 echo "cd sbin/sysinstall" >> ${CHROOTDIR}/mk 70 echo "make obj" >> ${CHROOTDIR}/mk 71 echo "cd ../../release" >> ${CHROOTDIR}/mk 72 echo "make obj" >> ${CHROOTDIR}/mk 73 echo "make doRELEASE" >> ${CHROOTDIR}/mk 74 echo "RELEASEDIR=/R" >> ${CHROOTDIR}/etc/make.conf 75.if !defined(RELEASETAG) 76 cd ${CHROOTDIR}/usr ; cvs co -P src 77.else 78 cd ${CHROOTDIR}/usr ; cvs export -r ${RELEASETAG} src 79.endif 80 # To be used in development... 81 #find ${.CURDIR} -print | cpio -dumpv ${CHROOTDIR} 82 chmod 755 ${CHROOTDIR}/mk 83 chroot ${CHROOTDIR} /mk 84 85clean: 86 rm -rf cpio_crunch boot_crunch release.[0-9] release.1[0] 87 88# Clean out ${RELEASEDIR} and make the directory structure. 89release.1: 90 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 91 -mkdir ${RELEASEDIR} 92 chflags -R noschg ${RELEASEDIR}/. 93 rm -rf ${RELEASEDIR}/* 94 mkdir ${RD} 95 mkdir ${RD}/floppies 96 mkdir ${RD}/trees 97 mkdir ${RD}/dists 98 for i in ${ALL_DISTS} ; do \ 99 mkdir ${RD}/trees/$$i ; \ 100 mkdir ${RD}/dists/$$i ; \ 101 mtree -deU -f ${MTREEFILES}/BSD.root.dist \ 102 -p ${RD}/trees/$$i > /dev/null ; \ 103 mtree -deU -f ${MTREEFILES}/BSD.usr.dist \ 104 -p ${RD}/trees/$$i/usr > /dev/null ; \ 105 mtree -deU -f ${MTREEFILES}/BSD.include.dist \ 106 -p ${RD}/trees/$$i/usr/include > /dev/null ; \ 107 mtree -deU -f ${MTREEFILES}/BSD.var.dist \ 108 -p ${RD}/trees/$$i/var > /dev/null ; \ 109 done 110 touch release.1 111 112# Install the system into the various distributions. 113release.2: 114 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 115 cd ${.CURDIR}/../etc && make distrib-dirs DESTDIR=${RD}/trees/bin 116 cd ${.CURDIR}/.. ; make distribute DISTDIR=${RD}/trees 117 chflags -R noschg ${RD}/trees 118 touch release.2 119 120# Make and install a couple of kernels we need. 121release.3: 122 rm -f ${RD}/kernels 123 mkdir -p ${RD}/kernels 124 @cd ${.CURDIR} && $(MAKE) ckRELEASEDIR 125 cd ${.CURDIR}/../sys/i386/conf && \ 126 sed 's/GENERIC/BOOTCDROM/g' GENERIC > BOOTCDROM 127 for i in GENERIC BOOTCDROM ; do \ 128 cd ${.CURDIR}/../sys/i386/conf && \ 129 config $$i && \ 130 cd ${.CURDIR}/../sys/compile/$$i && \ 131 make depend && \ 132 make kernel && \ 133 cp kernel ${RD}/kernels/$$i ; \ 134 rm -rf ${.CURDIR}/../sys/compile/$$i ; \ 135 done 136 rm -f ${.CURDIR}/../sys/i386/conf/BOOTCDROM 137 cd ${RD}/kernels && kzip GENERIC 138 touch release.3 139 140# Make and install the three crunched binaries which live on the floppies. 141# You are not supposed to like this :-) 142release.4: 143 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 144 rm -rf ${RD}/crunch 145 mkdir -p ${RD}/crunch 146 for j in boot cpio fixit; do \ 147 rm -rf $${j}_crunch && \ 148 mkdir $${j}_crunch && \ 149 ( cd $${j}_crunch && \ 150 crunchgen ${.CURDIR}/$${j}_crunch.conf && \ 151 ${MAKE} -f $${j}_crunch.mk objs exe NOCRYPT=yes ) && \ 152 mv $${j}_crunch/$${j}_crunch ${RD}/crunch/$${j} && \ 153 rm -rf $${j}_crunch ; \ 154 done 155 touch release.4 156 157# Fix up the distributions. 158release.5: 159 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 160 ln -f ${RD}/kernels/GENERIC ${RD}/trees/bin/kernel.GENERIC 161 if [ -d ${RD}/trees/bin/usr/share/man ] ; then \ 162 rm -rf ${RD}/trees/manpages/usr/share/man ;\ 163 mv ${RD}/trees/bin/usr/share/man \ 164 ${RD}/trees/manpages/usr/share/man ;\ 165 fi 166 if [ -d ${RD}/trees/bin/usr/games ] ; then \ 167 rm -rf ${RD}/trees/games/usr/games ;\ 168 mv ${RD}/trees/bin/usr/games \ 169 ${RD}/trees/games/usr/games ;\ 170 fi 171 if [ -d ${RD}/trees/bin/usr/share/games ] ; then \ 172 rm -rf ${RD}/trees/games/usr/share/games ;\ 173 mv ${RD}/trees/bin/usr/share/games \ 174 ${RD}/trees/games/usr/share/games ;\ 175 fi 176 if [ -d ${RD}/trees/bin/var/games ] ; then \ 177 rm -rf ${RD}/trees/games/var/games ;\ 178 mv ${RD}/trees/bin/var/games \ 179 ${RD}/trees/games/var/games ;\ 180 fi 181 if [ -d ${RD}/trees/bin/usr/share/dict ] ; then \ 182 rm -rf ${RD}/trees/dict/usr/share/dict ;\ 183 mv ${RD}/trees/bin/usr/share/dict \ 184 ${RD}/trees/dict/usr/share/dict ;\ 185 fi 186 for i in airport birthtoken flowers na.phone zipcodes ; do \ 187 if [ -f ${RD}/trees/bin/usr/share/misc/$$i ] ; then \ 188 mv ${RD}/trees/bin/usr/share/misc/$$i \ 189 ${RD}/trees/dict/usr/share/misc ; \ 190 fi ; \ 191 done 192 -mv ${RD}/trees/bin/usr/share/info/* \ 193 ${RD}/trees/info/usr/share/info 194 for i in ${RD}/trees/bin/usr/lib/*_p.a ; do \ 195 if [ -f $$i ] ; then \ 196 mv $$i \ 197 ${RD}/trees/proflibs/usr/lib ; \ 198 fi ; \ 199 done 200 cd ${RD}/trees/bin/usr/share/misc && rm -f termcap.db vgrindefs.db 201 -cd ${RD}/trees && \ 202 find ${EXTRA_DISTS} -depth -type d -print | xargs rmdir 203 touch release.5 204 205# Complete the bootfd 206release.6: 207 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 208 rm -rf ${RD}/bootfd 209 mkdir ${RD}/bootfd 210 cd ${RD}/bootfd && \ 211 mkdir dev mnt stand 212 ln -f ${RD}/kernels/GENERIC.kz ${RD}/bootfd/kernel 213 @cd ${.CURDIR} ; $(MAKE) installCRUNCH CRUNCH=boot \ 214 DIR=${RD}/bootfd/stand ZIP=true 215 ( cd ${RD}/trees/bin/dev ; \ 216 ls console tty ttyv1 null zero \ 217 *[sw]d* fd[01] rfd[01] | \ 218 cpio -dump ${RD}/bootfd/dev ) 219 install -c ${.CURDIR}/../COPYRIGHT ${RD}/bootfd 220 cd ${RD}/trees/bin/usr/share/FAQ/Text ; \ 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 ${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 230release.7: 231 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 232 rm -rf ${RD}/cpiofd 233 mkdir ${RD}/cpiofd 234 cd ${RD}/cpiofd && \ 235 mkdir stand stand/scripts 236 ln -f ${RD}/kernels/GENERIC ${RD}/cpiofd/kernel 237 @cd ${.CURDIR} ; $(MAKE) installCRUNCH CRUNCH=cpio \ 238 DIR=${RD}/cpiofd/stand ZIP=false 239 cd ${RD}/trees/bin ; ls ${CPIO1} | cpio -dump ${RD}/cpiofd/stand 240 cd ${.CURDIR} ; ls ${CPIO2} | cpio -dumpv ${RD}/cpiofd/stand 241 ( JUST_TELL_ME=please ; . ${.CURDIR}/../sys/conf/newvers.sh ; \ 242 sed "/DISTNAME=/s/FOOBAR/$$DISTNAME/" \ 243 < ${RD}/cpiofd/stand/scripts/miscfuncs.sh \ 244 > ${RD}/cpiofd/stand/scripts/tmp ;\ 245 ) 246 mv ${RD}/cpiofd/stand/scripts/tmp \ 247 ${RD}/cpiofd/stand/scripts/miscfuncs.sh 248 chmod 755 ${RD}/cpiofd/stand/scripts/* 249 cp ${RD}/trees/bin/usr/sbin/tzsetup ${RD}/cpiofd/stand 250 ( cd ${RD}/cpiofd ; \ 251 ( rm -f OK ; find . -print ; touch OK ; echo OK ) | \ 252 cpio -H newc -oa | gzip -9 -c | dd conv=osync ) \ 253 > ${RD}/floppies/cpio.flp 254 touch release.7 255 256# Make binary dists, notice that secure dist isn't finished yet. 257release.8: 258 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 259 rm -rf ${RD}/dists 260 mkdir -p ${RD}/dists 261 @for i in ${DISTRIBUTIONS} ; \ 262 do \ 263 if [ -d ${RD}/trees/$${i} ] ; then \ 264 cd ${.CURDIR} ; \ 265 $(MAKE) doTARBALL SD=${RD}/trees/$${i} \ 266 TN=$$i TD=$$i ARG="." ; \ 267 ( cd ${RD}/dists/$${i}; \ 268 sh -e ${.CURDIR}/scripts/mkchecksums.sh ) ; \ 269 cp ${.CURDIR}/scripts/extract_$${i}.sh \ 270 ${RD}/dists/$${i}/extract.sh;\ 271 echo "$${i} distribution is finished."; \ 272 fi ; \ 273 done 274 touch release.8 275 276 277# Make source dists, and finish of secure too 278release.9: 279 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 280 @cd ${.CURDIR} ; $(MAKE) doTARBALL SD=/usr/src \ 281 TD=src TN=sbase ARG="[A-Z]*" 282 @for i in `cd /usr/src ; echo [a-z]*` ; do \ 283 if [ -d /usr/src/$$i -a "$$i" != "CVS" ] ; then \ 284 cd ${.CURDIR} ; \ 285 $(MAKE) doTARBALL SD=/usr/src \ 286 TN=`echo s$$i | tr -d '.' | sed 's/usr/u/'` \ 287 TD=src ARG="$$i" ; \ 288 fi ; \ 289 done 290 ( cd ${RD}/dists/src && \ 291 if [ -f ssecure.aa ] ; then mv ssecure.* ../secure ; fi && \ 292 if [ -f sebones.aa ] ; then mv sebones.* ../secure ; fi && \ 293 sh -e ${.CURDIR}/scripts/mkchecksums.sh ) 294 cp ${.CURDIR}/scripts/extract_src.sh ${RD}/dists/src/extract.sh 295 if [ -d ${RD}/dists/secure ] ; then \ 296 ( cd ${RD}/dists/secure && sh -e ${.CURDIR}/scripts/mkchecksums.sh );\ 297 fi 298 @echo "src distribution is finished." 299 touch release.9 300 301# Complete the fixitfd 302release.10: 303 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 304 rm -rf ${RD}/fixitfd 305 mkdir ${RD}/fixitfd 306 cd ${RD}/fixitfd && \ 307 mkdir stand bin sbin etc mnt mnt1 mnt2 mnt3 mnt4 tmp 308 ln -f ${RD}/kernels/GENERIC.kz ${RD}/fixitfd/kernel 309 @cd ${.CURDIR} ; $(MAKE) installCRUNCH CRUNCH=fixit \ 310 DIR=${RD}/fixitfd/stand ZIP=true 311 ( cd ${RD}/trees/bin/dev && \ 312 sh MAKEDEV wd0s5 wd0s6 wd0s7 wd0s8 && \ 313 ls console tty ttyv1 null zero \ 314 *[sw]d* fd[01] rfd[01] | \ 315 cpio -dump ${RD}/fixitfd/dev ) 316 ln -f ${RD}/fixitfd/stand/init ${RD}/fixitfd/sbin 317 ln -f ${RD}/fixitfd/stand/sh ${RD}/fixitfd/bin 318 cp ${RD}/trees/bin/usr/mdec/fdboot ${RD}/fixitfd/etc/boot1 319 cp ${RD}/trees/bin/usr/mdec/bootfd ${RD}/fixitfd/etc/boot2 320 cp ${.CURDIR}/fixit.profile ${RD}/fixitfd/.profile 321 echo 'echo /etc/rc' > ${RD}/fixitfd/etc/rc 322 echo 'exit 1' >> ${RD}/fixitfd/etc/rc 323 touch ${RD}/fixitfd/etc/spwd.db 324 cd ${.CURDIR} ; ${MAKE} doFLOPPY FLOPPY=fixit 325 touch release.10 326 327ftp.1: 328 rm -rf ${FD} 329 mkdir ${FD} 330 cd ${RD} && find floppies -print | cpio -dumpl ${FD} 331 cd ${RD}/dists && find . -print | cpio -dumpl ${FD} 332 cd ${RD}/trees/bin/usr/share/FAQ/Text && ln -f ${FAQS} ${FD} 333 334 # This rule makes ${CHROOTDIR}/R/ftp a suitable anon ftp for testing. 335ftp.2: 336 -mkdir ${FD}/bin 337 ln -f ${RD}/trees/bin/bin/ls ${FD}/bin/ls 338 339cdrom.1: 340 rm -rf ${CD} 341 mkdir ${CD} 342 mkdir ${CD}/filesys 343 cd ${RD} && find floppies dists bootfd -print | cpio -dumpl ${CD} 344 cd ${CD} && mv bootfd bootcd 345 rm -f ${CD}/bootcd/kernel 346 ln -f ${RD}/kernels/BOOTCDROM ${CD}/bootcd/kernel 347 ln -f ${RD}/trees/bin/usr/mdec/fbsdboot.exe ${CD}/bootcd 348 for i in ${DISTRIBUTIONS} ; \ 349 do \ 350 if [ -d ${RD}/trees/$${i} ] ; then \ 351 ( cd ${RD}/trees/$${i} && \ 352 find . -depth -print | cpio -dumpl ${CD}/filesys ) ; \ 353 fi \ 354 done 355 356# Various "subroutine" and other supporting targets. 357 358doTARBALL: 359.if !defined(SD) 360 @echo "SD undefined in doTARBALL" ; exit 1 361.endif 362.if !defined(TD) 363 @echo "TB undefined in doTARBALL" ; exit 1 364.endif 365.if !defined(ARG) 366 @echo "ARG undefined in doTARBALL" ; exit 1 367.endif 368 rm -rf ${RD}/dists/${TD}/${TN}* 369 mkdir -p ${RD}/dists/${TD} 370 ( cd ${SD} && \ 371 tn=`echo ${TN} | tr '[A-Z]' '[a-z]' | cut -c1-8` && \ 372 echo rolling ${TD}/$$tn tarball &&\ 373 tar --exclude CVS --exclude obj -cf - ${ARG} | \ 374 ${ZIPNSPLIT} ${RD}/dists/${TD}/$$tn. ) 375 376doRELEASE: release.1 release.2 release.3 release.4 release.5 release.6 \ 377 release.7 release.8 release.9 release.10 378 cd ${.CURDIR} && ${MAKE} cdrom.1 ftp.1 379 @echo "Release done" 380 381ckRELEASEDIR: 382.if !defined(RELEASEDIR) 383 @echo "To make a release RELEASEDIR must be defined" && false 384.endif 385 386doFLOPPY: 387.if !defined(FLOPPY) 388 @echo "FLOPPY undefined in doFLOPPY" ; exit 1 389.endif 390 rm -f ${RD}/floppies/${FLOPPY}.tmp ${RD}/floppies/${FLOPPY}.flp 391.if defined(VNDEVICE) 392 if [ ! -b /dev/${VNDEVICE} -o ! -c /dev/r${VNDEVICE} ] ; then \ 393 cd /dev && sh MAKEDEV ${VNDEVICE} ; fi 394 @umount /dev/${VNDEVICE} 2>/dev/null || true 395 @umount ${MNT} 2>/dev/null || true 396 @vnconfig -u /dev/r${VNDEVICE} 2>/dev/null || true 397 dd of=${RD}/floppies/${FLOPPY}.tmp if=/dev/zero \ 398 bs=${FDCYLSIZE} count=${FDCYLS} 2>/dev/null 399 vnconfig -c /dev/r${VNDEVICE} ${RD}/floppies/${FLOPPY}.tmp 400 disklabel -w -r -B \ 401 -b ${RD}/trees/bin/usr/mdec/fdboot \ 402 -s ${RD}/trees/bin/usr/mdec/bootfd \ 403 /dev/r${VNDEVICE} ${FDLABEL} 404 newfs ${NEWFSARGS} /dev/r${VNDEVICE} 405 mount /dev/${VNDEVICE} ${MNT} 406 cd ${RD}/${FLOPPY}fd ; find . -print | cpio -dump ${MNT} 407 umount ${MNT} 408 fsck /dev/r${VNDEVICE} < /dev/null 409.else 410 -umount /dev/${FDDEVICE} 411 -umount ${MNT} 412.if !defined(FDFORMAT) 413 echo y | fdformat /dev/r${FDDEVICE} 414.endif 415 disklabel -w -r -B \ 416 -b ${RD}/trees/bin/usr/mdec/fdboot \ 417 -s ${RD}/trees/bin/usr/mdec/bootfd \ 418 /dev/r${FDDEVICE} ${FDLABEL} 419 newfs ${NEWFSARGS} /dev/r${FDDEVICE} 420 mount /dev/${FDDEVICE} ${MNT} 421 cd ${RD}/${FLOPPY}fd ; find . -print | cpio -dump ${MNT} 422 umount ${MNT} 423 fsck -n /dev/r${FDDEVICE} < /dev/null 424 dd if=/dev/r${FDDEVICE} of=${RD}/floppies/${FLOPPY}.tmp \ 425 bs=${FDCYLSIZE} count=${FDCYLS} 426.endif 427 mv ${RD}/floppies/${FLOPPY}.tmp ${RD}/floppies/${FLOPPY}.flp 428 429installCRUNCH: 430.if !defined(CRUNCH) 431 @echo "CRUNCH undefined in installCRUNCH" ; exit 1 432.endif 433.if !defined(DIR) 434 @echo "DIR undefined in installCRUNCH" ; exit 1 435.endif 436.if !defined(ZIP) 437 @echo "ZIP undefined in installCRUNCH" ; exit 1 438.endif 439 if ${ZIP} ; then \ 440 gzip -9 < ${RD}/crunch/${CRUNCH} > ${DIR}/${CRUNCH}_crunch ; \ 441 else \ 442 ln -f ${RD}/crunch/${CRUNCH} ${DIR}/${CRUNCH}_crunch ; \ 443 fi 444 chmod 555 ${DIR}/${CRUNCH}_crunch 445 for i in `crunchgen -l ${.CURDIR}/${CRUNCH}_crunch.conf` ; do \ 446 ln -f ${DIR}/${CRUNCH}_crunch ${DIR}/$$i ; \ 447 done 448.include <bsd.prog.mk> 449