]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - release/Makefile
Use labels to find release media instead of hard-coded device paths. This
[FreeBSD/FreeBSD.git] / release / Makefile
1 # $FreeBSD$
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
21 WORLDDIR?=      ${.CURDIR}/..
22 PORTSDIR?=      /usr/ports
23 DOCDIR?=        /usr/doc
24 RELNOTES_LANG?= en_US.ISO8859-1
25
26 TARGET_ARCH?=   ${MACHINE_ARCH}
27 .if ${TARGET_ARCH} == ${MACHINE_ARCH}
28 TARGET?=        ${MACHINE}
29 .else
30 TARGET?=        ${TARGET_ARCH}
31 .endif
32 IMAKE=          ${MAKE} TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET}
33 DISTDIR=        ${.OBJDIR}/dist
34
35 .if !exists(${DOCDIR})
36 NODOC= true
37 .endif
38 .if !exists(${PORTSDIR})
39 NOPORTS= true
40 .endif
41
42 EXTRA_PACKAGES= 
43 .if !defined(NOPORTS)
44 EXTRA_PACKAGES+= ports.txz
45 .endif
46 .if !defined(NOSRC)
47 EXTRA_PACKAGES+= src.txz
48 .endif
49 .if !defined(NODOC)
50 EXTRA_PACKAGES+= reldoc
51 .endif
52
53 RELEASE_TARGETS= ftp
54 .if exists(${.CURDIR}/${TARGET}/mkisoimages.sh)
55 RELEASE_TARGETS+= cdrom
56 .endif
57 .if exists(${.CURDIR}/${TARGET}/make-memstick.sh)
58 RELEASE_TARGETS+= memstick
59 .endif
60
61 .include <bsd.obj.mk>
62
63 base.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
78 kernel.txz:
79         -mkdir ${DISTDIR}
80         cd ${WORLDDIR} && ${IMAKE} distributekernel packagekernel DISTDIR=${DISTDIR}
81         mv ${DISTDIR}/kernel.txz ${.OBJDIR}
82
83 src.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
89 ports.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
96 reldoc:
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
108 system: 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
129 release.iso: system
130         sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b FreeBSD_Install ${.OBJDIR}/release.iso ${.OBJDIR}/release
131
132 memstick: system
133         sh ${.CURDIR}/${TARGET}/make-memstick.sh ${.OBJDIR}/release ${.OBJDIR}/memstick
134
135 packagesystem: base.txz kernel.txz ${EXTRA_PACKAGES}
136         sh ${.CURDIR}/scripts/make-manifest.sh ${.OBJDIR}/*.txz > ${.OBJDIR}/MANIFEST
137         touch ${.OBJDIR}/${.TARGET}
138
139 cdrom: release.iso
140 ftp: packagesystem
141         rm -rf ${.OBJDIR}/ftp
142         mkdir ${.OBJDIR}/ftp
143         cp ${.OBJDIR}/*.txz ${.OBJDIR}/MANIFEST ${.OBJDIR}/ftp
144
145 release: ${RELEASE_TARGETS}
146
147 clean:
148         chflags -R noschg ${.OBJDIR}
149         rm -rf ${.OBJDIR}/dist ${.OBJDIR}/ftp
150         rm -f packagesystem
151         rm -f ${.OBJDIR}/*.txz ${.OBJDIR}/MANIFEST
152         rm -f system
153         rm -rf ${.OBJDIR}/release
154         rm -f ${.OBJDIR}/release.iso ${.OBJDIR}/memstick
155