Makefile revision 219641
1# $FreeBSD: head/release/Makefile 219641 2011-03-14 13:47:17Z nwhitehorn $
2#
3# Makefile for building releases and release media.
4# 
5# User-driven targets:
6#  cdrom: Builds release CD-ROM media (release.iso)
7#  ftp: Sets up FTP distribution area (ftp)
8#  release: Build all media and FTP distribution area
9#
10# Variables affecting the build process:
11#  WORLDDIR: location of src tree -- must have built world and default kernel
12#            (by default, the directory above this one) 
13#  PORTSDIR: location of ports tree to distribute (default: /usr/ports)
14#  DOCDIR:   location of doc tree (default: /usr/doc)
15#  NOPORTS:  if set, do not distribute ports tree
16#  NOSRC:    if set, do not distribute source tree
17#  NODOC:    if set, do not generate release documentation
18#  TARGET/TARGET_ARCH: architecture of built release 
19#
20
21WORLDDIR?=	${.CURDIR}/..
22PORTSDIR?=	/usr/ports
23DOCDIR?=	/usr/doc
24RELNOTES_LANG?= en_US.ISO8859-1
25
26TARGET_ARCH?=	${MACHINE_ARCH}
27.if ${TARGET_ARCH} == ${MACHINE_ARCH}
28TARGET?=	${MACHINE}
29.else
30TARGET?=	${TARGET_ARCH}
31.endif
32IMAKE=		${MAKE} TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET}
33DISTDIR=	${.OBJDIR}/dist
34
35.if !exists(${DOCDIR})
36NODOC= true
37.endif
38.if !exists(${PORTSDIR})
39NOPORTS= true
40.endif
41
42EXTRA_PACKAGES= 
43.if !defined(NOPORTS)
44EXTRA_PACKAGES+= ports.txz
45.endif
46.if !defined(NOSRC)
47EXTRA_PACKAGES+= src.txz
48.endif
49.if !defined(NODOC)
50EXTRA_PACKAGES+= reldoc
51.endif
52
53RELEASE_TARGETS= ftp
54.if exists(${.CURDIR}/${TARGET}/mkisoimages.sh)
55RELEASE_TARGETS+= cdrom
56.endif
57.if exists(${.CURDIR}/${TARGET}/make-memstick.sh)
58RELEASE_TARGETS+= memstick
59.endif
60
61.include <bsd.obj.mk>
62
63base.txz:
64	-mkdir ${DISTDIR}
65	cd ${WORLDDIR} && ${IMAKE} distributeworld DISTDIR=${DISTDIR}
66# Set up mergemaster root database
67	sh ${.CURDIR}/scripts/mm-mtree.sh -F \
68	    "TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET}" -D "${DISTDIR}/base"
69# Merge handbook, etc. from doc tree into src tree doc distribution
70.if !defined(NODOC)
71	cd ${DOCDIR} && ${IMAKE} all install \
72	    DOCDIR=${DISTDIR}/doc/usr/share/doc 'FORMATS=html html-split txt' \
73	    INSTALL_COMPRESSED='' URLS_ABSOLUTE=YES
74.endif
75	cd ${WORLDDIR} && ${IMAKE} packageworld DISTDIR=${DISTDIR}
76	mv ${DISTDIR}/*.txz ${.OBJDIR}
77
78kernel.txz:
79	-mkdir ${DISTDIR}
80	cd ${WORLDDIR} && ${IMAKE} distributekernel packagekernel DISTDIR=${DISTDIR}
81	mv ${DISTDIR}/kernel.txz ${.OBJDIR}
82
83src.txz:
84	-mkdir -p ${DISTDIR}/usr
85	ln -fs ${WORLDDIR} ${DISTDIR}/usr/src
86	cd ${DISTDIR} && tar cLvJf ${.OBJDIR}/src.txz --exclude .svn \
87	    --exclude CVS usr/src
88
89ports.txz:
90	-mkdir -p ${DISTDIR}/usr
91	ln -fs ${PORTSDIR} ${DISTDIR}/usr/ports
92	cd ${DISTDIR} && tar cLvJf ${.OBJDIR}/ports.txz \
93	    --exclude usr/ports/distfiles --exclude usr/ports/packages \
94	    --exclude 'usr/ports/INDEX*' --exclude work usr/ports
95
96reldoc:
97	cd ${.CURDIR}/doc && ${MAKE} all install clean 'FORMATS=html txt' \
98	    INSTALL_COMPRESSED='' URLS_ABSOLUTE=YES DOCDIR=${.OBJDIR}/rdoc
99	-mkdir ${.OBJDIR}/reldoc
100.for i in hardware readme relnotes errata
101	ln -f ${.OBJDIR}/rdoc/${RELNOTES_LANG}/${i}/article.txt \
102	    ${.OBJDIR}/reldoc/${i:U}.TXT
103	ln -f ${.OBJDIR}/rdoc/${RELNOTES_LANG}/${i}/article.html \
104	    ${.OBJDIR}/reldoc/${i:U}.HTM
105.endfor
106	cp ${.OBJDIR}/rdoc/${RELNOTES_LANG}/readme/docbook.css ${.OBJDIR}/reldoc
107
108system: packagesystem
109# Install system
110	-mkdir ${.OBJDIR}/release
111	cd ${WORLDDIR} && ${IMAKE} installkernel installworld distribution DESTDIR=${.OBJDIR}/release
112	-rm ${.OBJDIR}/release/boot/kernel/*.symbols
113# Copy distfiles
114	mkdir ${.OBJDIR}/release/usr/freebsd-dist
115	cp ${.OBJDIR}/*.txz ${.OBJDIR}/MANIFEST \
116	    ${.OBJDIR}/release/usr/freebsd-dist
117# Copy documentation, if generated
118.if !defined(NODOC)
119	cp ${.OBJDIR}/reldoc/* ${.OBJDIR}/release
120.endif
121# Set up installation environment
122	ln -s /tmp/bsdinstall_etc/resolv.conf ${.OBJDIR}/release/etc/resolv.conf
123	echo sendmail_enable=\"NONE\" > ${.OBJDIR}/release/etc/rc.conf
124	echo hostid_enable=\"NO\" >> ${.OBJDIR}/release/etc/rc.conf
125	touch ${.OBJDIR}/release/etc/fstab
126	cp ${.CURDIR}/rc.local ${.OBJDIR}/release/etc
127	touch ${.OBJDIR}/${.TARGET}
128
129release.iso: system
130	echo kernel_options=\"-C\" > ${.OBJDIR}/release/boot/loader.conf
131	sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b FreeBSD_Install ${.OBJDIR}/release.iso ${.OBJDIR}/release
132	rm ${.OBJDIR}/release/boot/loader.conf
133
134memstick: system
135	sh ${.CURDIR}/${TARGET}/make-memstick.sh ${.OBJDIR}/release ${.OBJDIR}/memstick
136
137packagesystem: base.txz kernel.txz ${EXTRA_PACKAGES}
138	sh ${.CURDIR}/scripts/make-manifest.sh ${.OBJDIR}/*.txz > ${.OBJDIR}/MANIFEST
139	touch ${.OBJDIR}/${.TARGET}
140
141cdrom: release.iso
142ftp: packagesystem
143	rm -rf ${.OBJDIR}/ftp
144	mkdir ${.OBJDIR}/ftp
145	cp ${.OBJDIR}/*.txz ${.OBJDIR}/MANIFEST ${.OBJDIR}/ftp
146
147release: ${RELEASE_TARGETS}
148
149clean:
150	chflags -R noschg ${.OBJDIR}
151	rm -rf ${.OBJDIR}/dist ${.OBJDIR}/ftp
152	rm -f packagesystem
153	rm -f ${.OBJDIR}/*.txz ${.OBJDIR}/MANIFEST
154	rm -f system
155	rm -rf ${.OBJDIR}/release
156	rm -f ${.OBJDIR}/release.iso ${.OBJDIR}/memstick
157
158