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