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