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