Makefile revision 219641
1171802Sdelphij# $FreeBSD: head/release/Makefile 219641 2011-03-14 13:47:17Z nwhitehorn $
2170808Sdelphij#
3182739Sdelphij# Makefile for building releases and release media.
4171802Sdelphij# 
5170808Sdelphij# User-driven targets:
6170808Sdelphij#  cdrom: Builds release CD-ROM media (release.iso)
7170808Sdelphij#  ftp: Sets up FTP distribution area (ftp)
8170808Sdelphij#  release: Build all media and FTP distribution area
9170808Sdelphij#
10170808Sdelphij# Variables affecting the build process:
11170808Sdelphij#  WORLDDIR: location of src tree -- must have built world and default kernel
12170808Sdelphij#            (by default, the directory above this one) 
13170808Sdelphij#  PORTSDIR: location of ports tree to distribute (default: /usr/ports)
14170808Sdelphij#  DOCDIR:   location of doc tree (default: /usr/doc)
15170808Sdelphij#  NOPORTS:  if set, do not distribute ports tree
16170808Sdelphij#  NOSRC:    if set, do not distribute source tree
17170808Sdelphij#  NODOC:    if set, do not generate release documentation
18170808Sdelphij#  TARGET/TARGET_ARCH: architecture of built release 
19170808Sdelphij#
20170808Sdelphij
21170808SdelphijWORLDDIR?=	${.CURDIR}/..
22170808SdelphijPORTSDIR?=	/usr/ports
23170808SdelphijDOCDIR?=	/usr/doc
24170808SdelphijRELNOTES_LANG?= en_US.ISO8859-1
25170808Sdelphij
26170808SdelphijTARGET_ARCH?=	${MACHINE_ARCH}
27170808Sdelphij.if ${TARGET_ARCH} == ${MACHINE_ARCH}
28170808SdelphijTARGET?=	${MACHINE}
29170808Sdelphij.else
30170808SdelphijTARGET?=	${TARGET_ARCH}
31170808Sdelphij.endif
32170808SdelphijIMAKE=		${MAKE} TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET}
33170808SdelphijDISTDIR=	${.OBJDIR}/dist
34170808Sdelphij
35170808Sdelphij.if !exists(${DOCDIR})
36170808SdelphijNODOC= true
37170808Sdelphij.endif
38170808Sdelphij.if !exists(${PORTSDIR})
39170808SdelphijNOPORTS= true
40170808Sdelphij.endif
41170808Sdelphij
42170808SdelphijEXTRA_PACKAGES= 
43170808Sdelphij.if !defined(NOPORTS)
44170808SdelphijEXTRA_PACKAGES+= ports.txz
45197850Sdelphij.endif
46197850Sdelphij.if !defined(NOSRC)
47170808SdelphijEXTRA_PACKAGES+= src.txz
48170808Sdelphij.endif
49170808Sdelphij.if !defined(NODOC)
50170808SdelphijEXTRA_PACKAGES+= reldoc
51170808Sdelphij.endif
52170808Sdelphij
53170808SdelphijRELEASE_TARGETS= ftp
54170808Sdelphij.if exists(${.CURDIR}/${TARGET}/mkisoimages.sh)
55170808SdelphijRELEASE_TARGETS+= cdrom
56188929Salc.endif
57170808Sdelphij.if exists(${.CURDIR}/${TARGET}/make-memstick.sh)
58170808SdelphijRELEASE_TARGETS+= memstick
59170808Sdelphij.endif
60170808Sdelphij
61170808Sdelphij.include <bsd.obj.mk>
62170808Sdelphij
63170808Sdelphijbase.txz:
64170808Sdelphij	-mkdir ${DISTDIR}
65171069Sdelphij	cd ${WORLDDIR} && ${IMAKE} distributeworld DISTDIR=${DISTDIR}
66170808Sdelphij# Set up mergemaster root database
67170808Sdelphij	sh ${.CURDIR}/scripts/mm-mtree.sh -F \
68170808Sdelphij	    "TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET}" -D "${DISTDIR}/base"
69170808Sdelphij# Merge handbook, etc. from doc tree into src tree doc distribution
70170808Sdelphij.if !defined(NODOC)
71170808Sdelphij	cd ${DOCDIR} && ${IMAKE} all install \
72170808Sdelphij	    DOCDIR=${DISTDIR}/doc/usr/share/doc 'FORMATS=html html-split txt' \
73170808Sdelphij	    INSTALL_COMPRESSED='' URLS_ABSOLUTE=YES
74170808Sdelphij.endif
75170808Sdelphij	cd ${WORLDDIR} && ${IMAKE} packageworld DISTDIR=${DISTDIR}
76170808Sdelphij	mv ${DISTDIR}/*.txz ${.OBJDIR}
77170808Sdelphij
78170808Sdelphijkernel.txz:
79170808Sdelphij	-mkdir ${DISTDIR}
80191990Sattilio	cd ${WORLDDIR} && ${IMAKE} distributekernel packagekernel DISTDIR=${DISTDIR}
81170808Sdelphij	mv ${DISTDIR}/kernel.txz ${.OBJDIR}
82170808Sdelphij
83170808Sdelphijsrc.txz:
84170808Sdelphij	-mkdir -p ${DISTDIR}/usr
85170808Sdelphij	ln -fs ${WORLDDIR} ${DISTDIR}/usr/src
86170808Sdelphij	cd ${DISTDIR} && tar cLvJf ${.OBJDIR}/src.txz --exclude .svn \
87170808Sdelphij	    --exclude CVS usr/src
88170808Sdelphij
89197953Sdelphijports.txz:
90197953Sdelphij	-mkdir -p ${DISTDIR}/usr
91197953Sdelphij	ln -fs ${PORTSDIR} ${DISTDIR}/usr/ports
92197953Sdelphij	cd ${DISTDIR} && tar cLvJf ${.OBJDIR}/ports.txz \
93197953Sdelphij	    --exclude usr/ports/distfiles --exclude usr/ports/packages \
94170808Sdelphij	    --exclude 'usr/ports/INDEX*' --exclude work usr/ports
95171799Sdelphij
96171799Sdelphijreldoc:
97176559Sattilio	cd ${.CURDIR}/doc && ${MAKE} all install clean 'FORMATS=html txt' \
98171802Sdelphij	    INSTALL_COMPRESSED='' URLS_ABSOLUTE=YES DOCDIR=${.OBJDIR}/rdoc
99175294Sattilio	-mkdir ${.OBJDIR}/reldoc
100170808Sdelphij.for i in hardware readme relnotes errata
101171799Sdelphij	ln -f ${.OBJDIR}/rdoc/${RELNOTES_LANG}/${i}/article.txt \
102191990Sattilio	    ${.OBJDIR}/reldoc/${i:U}.TXT
103170808Sdelphij	ln -f ${.OBJDIR}/rdoc/${RELNOTES_LANG}/${i}/article.html \
104175202Sattilio	    ${.OBJDIR}/reldoc/${i:U}.HTM
105171802Sdelphij.endfor
106170808Sdelphij	cp ${.OBJDIR}/rdoc/${RELNOTES_LANG}/readme/docbook.css ${.OBJDIR}/reldoc
107170808Sdelphij
108170808Sdelphijsystem: packagesystem
109170808Sdelphij# Install system
110170808Sdelphij	-mkdir ${.OBJDIR}/release
111188318Skib	cd ${WORLDDIR} && ${IMAKE} installkernel installworld distribution DESTDIR=${.OBJDIR}/release
112211598Sed	-rm ${.OBJDIR}/release/boot/kernel/*.symbols
113211598Sed# Copy distfiles
114211598Sed	mkdir ${.OBJDIR}/release/usr/freebsd-dist
115170808Sdelphij	cp ${.OBJDIR}/*.txz ${.OBJDIR}/MANIFEST \
116170808Sdelphij	    ${.OBJDIR}/release/usr/freebsd-dist
117170808Sdelphij# Copy documentation, if generated
118170808Sdelphij.if !defined(NODOC)
119170808Sdelphij	cp ${.OBJDIR}/reldoc/* ${.OBJDIR}/release
120170808Sdelphij.endif
121211598Sed# Set up installation environment
122211598Sed	ln -s /tmp/bsdinstall_etc/resolv.conf ${.OBJDIR}/release/etc/resolv.conf
123211598Sed	echo sendmail_enable=\"NONE\" > ${.OBJDIR}/release/etc/rc.conf
124211598Sed	echo hostid_enable=\"NO\" >> ${.OBJDIR}/release/etc/rc.conf
125170808Sdelphij	touch ${.OBJDIR}/release/etc/fstab
126170808Sdelphij	cp ${.CURDIR}/rc.local ${.OBJDIR}/release/etc
127170808Sdelphij	touch ${.OBJDIR}/${.TARGET}
128170808Sdelphij
129170808Sdelphijrelease.iso: system
130170808Sdelphij	echo kernel_options=\"-C\" > ${.OBJDIR}/release/boot/loader.conf
131170808Sdelphij	sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b FreeBSD_Install ${.OBJDIR}/release.iso ${.OBJDIR}/release
132170808Sdelphij	rm ${.OBJDIR}/release/boot/loader.conf
133170808Sdelphij
134170808Sdelphijmemstick: system
135170808Sdelphij	sh ${.CURDIR}/${TARGET}/make-memstick.sh ${.OBJDIR}/release ${.OBJDIR}/memstick
136170808Sdelphij
137170808Sdelphijpackagesystem: base.txz kernel.txz ${EXTRA_PACKAGES}
138170808Sdelphij	sh ${.CURDIR}/scripts/make-manifest.sh ${.OBJDIR}/*.txz > ${.OBJDIR}/MANIFEST
139170808Sdelphij	touch ${.OBJDIR}/${.TARGET}
140170808Sdelphij
141170808Sdelphijcdrom: release.iso
142170808Sdelphijftp: packagesystem
143170808Sdelphij	rm -rf ${.OBJDIR}/ftp
144170808Sdelphij	mkdir ${.OBJDIR}/ftp
145170808Sdelphij	cp ${.OBJDIR}/*.txz ${.OBJDIR}/MANIFEST ${.OBJDIR}/ftp
146170808Sdelphij
147170808Sdelphijrelease: ${RELEASE_TARGETS}
148170808Sdelphij
149170808Sdelphijclean:
150170808Sdelphij	chflags -R noschg ${.OBJDIR}
151170808Sdelphij	rm -rf ${.OBJDIR}/dist ${.OBJDIR}/ftp
152170808Sdelphij	rm -f packagesystem
153170808Sdelphij	rm -f ${.OBJDIR}/*.txz ${.OBJDIR}/MANIFEST
154170808Sdelphij	rm -f system
155170808Sdelphij	rm -rf ${.OBJDIR}/release
156170808Sdelphij	rm -f ${.OBJDIR}/release.iso ${.OBJDIR}/memstick
157170808Sdelphij
158170808Sdelphij