Makefile revision 7252
1#	$Id: Makefile,v 1.120 1995/03/21 20:24:00 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
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 9000 -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	chmod 755 ${CHROOTDIR}/mk
78	chroot ${CHROOTDIR} /mk
79
80clean:
81	rm -rf cpio_crunch boot_crunch release.[0-9] release.1[0]
82
83# Clean out ${RELEASEDIR} and make the directory structure.
84release.1:
85	@cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR
86	-mkdir ${RELEASEDIR}
87	chflags -R noschg ${RELEASEDIR}/.
88	rm -rf ${RELEASEDIR}/*
89	mkdir ${RD}
90	mkdir ${RD}/bootfd
91	mkdir ${RD}/bootfd/dev
92	mkdir ${RD}/bootfd/mnt
93	mkdir ${RD}/bootfd/stand
94	mkdir ${RD}/cpiofd
95	mkdir ${RD}/cpiofd/stand
96	mkdir ${RD}/cpiofd/stand/scripts
97	mkdir ${RD}/fixitfd
98	mkdir ${RD}/fixitfd/stand
99	mkdir ${RD}/fixitfd/bin
100	mkdir ${RD}/fixitfd/sbin
101	mkdir ${RD}/fixitfd/mnt
102	mkdir ${RD}/fixitfd/etc
103	mkdir ${RD}/floppies
104	mkdir ${RD}/trees
105	mkdir ${RD}/trees/bin
106	mkdir ${RD}/dists
107	mkdir ${RD}/dists/bin
108	cd ${.CURDIR}/../etc && make distrib-dirs DESTDIR=${RD}/trees/bin
109	for i in ${EXTRA_DISTS} ; do \
110		mkdir ${RD}/trees/$$i ; \
111		mkdir ${RD}/dists/$$i ; \
112		mtree -deU -f ${MTREEFILES}/BSD.root.dist \
113		    -p ${RD}/trees/$$i > /dev/null ; \
114		mtree -deU -f ${MTREEFILES}/BSD.usr.dist \
115		    -p ${RD}/trees/$$i/usr > /dev/null ; \
116		mtree -deU -f ${MTREEFILES}/BSD.include.dist \
117		    -p ${RD}/trees/$$i/usr/include > /dev/null ; \
118		mtree -deU -f ${MTREEFILES}/BSD.var.dist \
119		    -p ${RD}/trees/$$i/var > /dev/null ; \
120	done
121	touch release.1
122
123# Install the system into the various distributions.
124release.2:
125	@cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR
126	cd ${.CURDIR}/.. ; make distribute DISTDIR=${RD}/trees
127	chflags -R noschg ${RD}/trees
128	touch release.2
129
130# Make and install a couple of kernels we need.
131release.3:
132	@cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR
133	cd ${.CURDIR}/../sys/i386/conf ; \
134		config GENERIC ; \
135		config BOOTFLP
136	cd ${.CURDIR}/../sys/compile/GENERIC ; \
137		make depend ; \
138		make kernel ; \
139		install -c kernel ${RD}/trees/bin/kernel.GENERIC
140	ln -f ${RD}/trees/bin/kernel.GENERIC ${RD}/cpiofd/kernel
141	cd ${.CURDIR}/../sys/compile/BOOTFLP ; \
142		make depend ; \
143		make kernel ; \
144		install -s -c kernel ${RD}/bootfd/kernel
145	ln -f ${RD}/bootfd/kernel ${RD}/fixitfd/kernel
146	touch release.3
147
148# Make and install the two crunched binaries which live on the floppies.
149# You are not supposed to like this :-)
150release.4:
151	@cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR
152	for j in boot cpio fixit; do \
153		rm -rf $${j}_crunch ; \
154		mkdir $${j}_crunch ; \
155		( cd $${j}_crunch ; \
156		crunchgen ${.CURDIR}/$${j}_crunch.conf ; \
157		${MAKE} -f $${j}_crunch.mk objs exe NOCRYPT=yes ) ; \
158		if [ $$j = cpio ] ; then \
159			cat < $${j}_crunch/$${j}_crunch \
160				> ${RD}/$${j}fd/stand/$${j}_crunch ; \
161		else \
162			gzip -9 < $${j}_crunch/$${j}_crunch \
163				> ${RD}/$${j}fd/stand/$${j}_crunch ; \
164		fi ; \
165		rm -rf $${j}_crunch ; \
166		chmod 555 ${RD}/$${j}fd/stand/$${j}_crunch ; \
167		for i in `crunchgen -l ${.CURDIR}/$${j}_crunch.conf` ; do \
168			ln -f ${RD}/$${j}fd/stand/$${j}_crunch \
169				${RD}/$${j}fd/stand/$$i ; \
170		done ; \
171	done
172	touch release.4
173
174# Fix up the distributions.
175release.5:
176	@cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR
177	if [ -d ${RD}/trees/bin/usr/share/man ] ; then \
178		rm -rf ${RD}/trees/manpages/usr/share/man ;\
179		mv ${RD}/trees/bin/usr/share/man \
180			${RD}/trees/manpages/usr/share/man ;\
181	fi
182	if [ -d ${RD}/trees/bin/usr/games ] ; then \
183		rm -rf ${RD}/trees/games/usr/games ;\
184		mv ${RD}/trees/bin/usr/games \
185			${RD}/trees/games/usr/games ;\
186	fi
187	if [ -d ${RD}/trees/bin/usr/share/games ] ; then \
188		rm -rf ${RD}/trees/games/usr/share/games ;\
189		mv ${RD}/trees/bin/usr/share/games \
190			${RD}/trees/games/usr/share/games ;\
191	fi
192	if [ -d ${RD}/trees/bin/var/games ] ; then \
193		rm -rf ${RD}/trees/games/var/games ;\
194		mv ${RD}/trees/bin/var/games \
195			${RD}/trees/games/var/games ;\
196	fi
197	if [ -d ${RD}/trees/bin/usr/share/dict ] ; then \
198		rm -rf ${RD}/trees/dict/usr/share/dict ;\
199		mv ${RD}/trees/bin/usr/share/dict \
200			${RD}/trees/dict/usr/share/dict ;\
201	fi
202	for i in airport birthtoken flowers na.phone zipcodes ; do \
203		if [ -f ${RD}/trees/bin/usr/share/misc/$$i ] ; then \
204			mv ${RD}/trees/bin/usr/share/misc/$$i \
205				${RD}/trees/dict/usr/share/misc ; \
206		fi ; \
207	done
208	for i in ${RD}/trees/bin/usr/lib/*_p.a ; do \
209		if [ -f $$i ] ; then \
210			mv $$i \
211				${RD}/trees/proflibs/usr/lib ; \
212		fi ; \
213	done
214	-cd ${RD}/trees ; \
215		find bin ${EXPORT_DISTS} -depth -type d -print | xargs rmdir
216
217	touch release.5
218
219# Complete the bootfd 
220release.6:
221	@cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR
222	( cd ${RD}/trees/bin/dev ; \
223		ls console tty ttyv1 null zero \
224		sd[0123][a-h] wd[0123][a-h] fd[01] \
225		rsd[0123][a-h] rwd[0123][a-h] rfd[01] | \
226	cpio -dump ${RD}/bootfd/dev )
227	install -c ${.CURDIR}/../COPYRIGHT ${RD}/bootfd
228	cd ${RD}/trees/bin/usr/share/FAQ/Text ; \
229		install -c diskspace.FAQ ${RD}/bootfd/DISKSPACE.FAQ ;\
230		install -c RELNOTES.FreeBSD ${RD}/bootfd ;\
231		install -c TROUBLESHOOTING ${RD}/bootfd ;\
232		install -c README ${RD}/bootfd/README
233	touch ${RD}/bootfd/this_is_boot_flp
234	cd ${.CURDIR} ; ${MAKE} doFLOPPY FLOPPY=boot
235	touch release.6
236
237# Complete the cpiofd directory
238# XXX a lot of stuff is missing here...
239release.7:
240	@cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR
241	cd ${RD}/trees/bin ; ls ${CPIO1} | cpio -dump ${RD}/cpiofd/stand
242	cd ${.CURDIR} ; ls ${CPIO2} | cpio -dumpv ${RD}/cpiofd/stand
243	chmod 755 ${RD}/cpiofd/stand/scripts/*
244	cp ${RD}/trees/bin/usr/sbin/tzsetup ${RD}/cpiofd/stand
245	( cd ${RD}/cpiofd ; \
246		( rm -f OK ; find . -print ; touch OK ; echo OK ) | \
247		cpio -H newc -oa | gzip -9 -c | dd conv=osync ) \
248		> ${RD}/floppies/cpio.flp
249	gzip -1 -c < ${RD}/floppies/cpio.flp > ${RD}/floppies/cpio.flp.gz
250	touch release.7
251
252# Make binary dists
253release.8:
254	@cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR
255	rm -rf ${RD}/dists
256	mkdir -p ${RD}/dists
257	@for i in ${DISTRIBUTIONS} ; \
258	do \
259		if [ -d ${RD}/trees/$${i} ] ; then \
260			cd ${.CURDIR} ; \
261				$(MAKE) doTARBALL SD=${RD}/trees/$${i} \
262					TD=$$i ARG="." ; \
263			( cd ${RD}/dists/$${i}; \
264			sh -e ${.CURDIR}/scripts/mkchecksums.sh ) ; \
265			cp ${.CURDIR}/scripts/extract_$${i}.sh \
266				${RD}/dists/$${i}/extract.sh;\
267			echo "$${i} distribution is finished."; \
268		fi ; \
269	done                                                 
270	touch release.8
271
272
273# Make source dists
274release.9:
275	@cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR
276	@cd ${.CURDIR} ; $(MAKE) doTARBALL SD=/usr/src TD=src/base ARG="[A-Z]*"
277	@for i in bin etc games gnu include lib libexec release sbin \
278		secure lkm eBones share sys usrbin usrsbin ; do \
279		if [ -d /usr/src/$$i ] ; then \
280			cd ${.CURDIR} ; \
281				$(MAKE) doTARBALL SD=/usr/src \
282					TD=src/$$i ARG="$$i" ; \
283		fi ; \
284	done
285	( cd ${RD}/dists/src; \
286	sh -e ${.CURDIR}/scripts/mkchecksums.sh ) ; \
287	cp ${.CURDIR}/scripts/extract_src.sh \
288		${RD}/dists/src/extract.sh;\
289	echo "src distribution is finished."; \
290	touch release.9
291
292# Complete the fixitfd
293release.10:
294	@cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR
295	( cd ${RD}/trees/bin/dev ; \
296		ls console tty ttyv1 null zero \
297		sd[0123][a-h] wd[0123][a-h] fd[01] \
298		rsd[0123][a-h] rwd[0123][a-h] rfd[01] | \
299	cpio -dump ${RD}/fixitfd/dev )
300	ln -f ${RD}/fixitfd/stand/init ${RD}/fixitfd/sbin
301	ln -f ${RD}/fixitfd/stand/sh ${RD}/fixitfd/bin
302	cp ${RD}/trees/bin/usr/mdec/fdboot ${RD}/fixitfd/etc/boot1
303	cp ${RD}/trees/bin/usr/mdec/bootfd ${RD}/fixitfd/etc/boot2
304	cp ${.CURDIR}/fixit.profile ${RD}/fixitfd/.profile
305	echo 'echo /etc/rc'	> ${RD}/fixitfd/etc/rc
306	echo 'exit 1'		>> ${RD}/fixitfd/etc/rc
307	touch ${RD}/fixitfd/etc/spwd.db
308	cd ${.CURDIR} ; ${MAKE} doFLOPPY FLOPPY=fixit
309	touch release.10
310
311ftp.1:
312	rm -rf ${FD}
313	mkdir ${FD}
314	cd ${RD} && find floppies dists -print | cpio -dumpl ${FD}
315	cd ${RD}/trees/bin/usr/share/FAQ/Text && ln -f ${FAQS} ${FD}
316
317cdrom.1:
318	rm -rf ${CD}
319	mkdir ${CD}
320	mkdir ${CD}/filesys
321	cd ${RD} && find floppies dists bootfd -print | cpio -dumpl ${FD}
322	cd ${FD} && mv bootfd bootcd
323	for i in ${DISTRIBUTIONS} ; \
324	do \
325		if [ -d ${RD}/trees/$${i} ] ; then \
326			( cd ${RD}/trees/$${i}; \
327			find . -depth -print | cpio -dumpl ${CD}/filesys ) ; \
328		fi \
329	done
330
331# Various "subroutine" and other supporting targets.
332
333doTARBALL:
334.if !defined(SD)
335	@echo "SD undefined in doTARBALL" ; exit 1
336.endif               
337.if !defined(TD)
338	@echo "TB undefined in doTARBALL" ; exit 1
339.endif               
340.if !defined(ARG)
341	@echo "ARG undefined in doTARBALL" ; exit 1
342.endif               
343	rm -rf ${RD}/dists/${TD}
344	mkdir -p ${RD}/dists/${TD}
345	( cd ${SD} ; \
346		echo rolling ${TD} tarball ;\
347		tar --exclude CVS -cf - ${ARG} | \
348		${ZIPNSPLIT} ${RD}/dists/${TD}/`basename ${TD}`. )
349
350doRELEASE:  release.1 release.2 release.3 release.4 release.5 release.6 \
351		release.7 release.8 release.9 release.10
352	@echo "Release done"
353
354ckRELEASEDIR:
355.if !defined(RELEASEDIR)
356	@echo "To make a release RELEASEDIR must be defined" && false
357.endif               
358
359doFLOPPY:
360.if !defined(FLOPPY)
361	@echo "FLOPPY undefined in doFLOPPY" ; exit 1
362.endif
363	rm -f ${RD}/floppies/${FLOPPY}.tmp ${RD}/floppies/${FLOPPY}.flp
364.if defined(VNDEVICE)
365	if [ ! -b /dev/${VNDEVICE} -o ! -c /dev/r${VNDEVICE} ] ; then \
366		cd /dev && sh MAKEDEV ${VNDEVICE} ; fi
367	@umount /dev/${VNDEVICE} 2>/dev/null || true
368	@umount ${MNT} 2>/dev/null || true
369	@vnconfig -u /dev/r${VNDEVICE} 2>/dev/null || true
370	dd of=${RD}/floppies/${FLOPPY}.tmp if=/dev/zero \
371		bs=${FDCYLSIZE} count=${FDCYLS} 2>/dev/null
372	sync && sleep 5
373	vnconfig -c /dev/r${VNDEVICE} ${RD}/floppies/${FLOPPY}.tmp
374	disklabel -w -r -B \
375		-b ${RD}/trees/bin/usr/mdec/fdboot \
376		-s ${RD}/trees/bin/usr/mdec/bootfd \
377		/dev/r${VNDEVICE} ${FDLABEL}
378	newfs ${NEWFSARGS} /dev/r${VNDEVICE}
379	mount /dev/${VNDEVICE} ${MNT}
380	cd ${RD}/${FLOPPY}fd ; find . -print | cpio -dump ${MNT}
381	umount ${MNT}
382	fsck  /dev/r${VNDEVICE} < /dev/null
383.else
384	-umount /dev/${FDDEVICE}
385	-umount ${MNT}
386.if !defined(FDFORMAT)
387	echo y | fdformat /dev/r${FDDEVICE}
388.endif
389	disklabel -w -r -B \
390		-b ${RD}/trees/bin/usr/mdec/fdboot \
391		-s ${RD}/trees/bin/usr/mdec/bootfd \
392		/dev/r${FDDEVICE} ${FDLABEL}
393	newfs ${NEWFSARGS} /dev/r${FDDEVICE}
394	mount /dev/${FDDEVICE} ${MNT}
395	cd ${RD}/${FLOPPY}fd ; find . -print | cpio -dump ${MNT}
396	umount ${MNT}
397	fsck -n /dev/r${FDDEVICE} < /dev/null
398	dd if=/dev/r${FDDEVICE} of=${RD}/floppies/${FLOPPY}.tmp \
399		bs=${FDCYLSIZE} count=${FDCYLS}
400.endif
401	mv ${RD}/floppies/${FLOPPY}.tmp ${RD}/floppies/${FLOPPY}.flp
402	gzip -9 -c < ${RD}/floppies/${FLOPPY}.flp \
403		> ${RD}/floppies/${FLOPPY}.flp.gz
404
405.include <bsd.prog.mk>
406