Makefile revision 1.79
1# $NetBSD: Makefile,v 1.79 2010/06/29 05:51:53 mrg Exp $ 2 3# The `all' target must appear before bsd.own.mk is pulled in. 4all: 5 @echo "Please understand what you are doing, first." 6 @false 7 8.include <bsd.own.mk> 9.include "${NETBSDSRCDIR}/distrib/common/Makefile.distrib" 10 11SETSENV= DESTDIR=${DESTDIR:Q} \ 12 MACHINE=${MACHINE:Q} \ 13 MACHINE_ARCH=${MACHINE_ARCH:Q} \ 14 AWK=${TOOL_AWK:Q} \ 15 CKSUM=${TOOL_CKSUM:Q} \ 16 DB=${TOOL_DB:Q} \ 17 HOST_SH=${HOST_SH:Q} \ 18 MAKE=${MAKE:Q} \ 19 MKTEMP=${TOOL_MKTEMP:Q} \ 20 MTREE=${TOOL_MTREE:Q} \ 21 PAX=${TOOL_PAX:Q} \ 22 PIGZ=${TOOL_PIGZ:Q} \ 23 PKG_CREATE=${TOOL_PKG_CREATE:Q} \ 24 SED=${TOOL_SED:Q} \ 25 TSORT=${TSORT:Q} 26SETSCMD= cd ${.CURDIR} && \ 27 ${SETSENV} \ 28 ${HOST_SH} 29 30MAKETARS_FLAGS= 31.if ${MKX11} != "no" 32MAKESRCTARS_X11_FLAGS= -x ${X11SRCDIR} 33.endif 34.if ${MKEXTSRC} != "no" 35MAKESRCTARS_EXTSRC_FLAGS= -y ${EXTSRCSRCDIR} 36.endif 37.if ${MKX11} != "no" 38MAKEFLIST_X11_FLAGS= ,x 39.endif 40.if ${MKEXTSRC} != "no" 41MAKEFLIST_EXTSRC_FLAGS= ,ext 42.endif 43MAKEFLIST_FLAGS= -L base${MAKEFLIST_X11_FLAGS}${MAKEFLIST_EXTSRC_FLAGS} 44MAKESRCTARS_FLAGS= -N ${NETBSDSRCDIR}/etc 45 46.if ${MAKEVERBOSE} < 2 47MAKETARS_FLAGS+= -q 48MAKESRCTARS_FLAGS+= -q 49.endif 50 51.if !defined(MAKETARSETS) 52MAKETARSETS!= ${SETSCMD} ./makeflist -l ${MAKEFLIST_FLAGS} 53.endif 54 55print_have_gcc: .PHONY 56 @echo ${HAVE_GCC} 57 58print_machine: .PHONY 59 @echo ${MACHINE} 60 61print_machine_arch: .PHONY 62 @echo ${MACHINE_ARCH} 63 64print_machine_cpu: .PHONY 65 @echo ${MACHINE_CPU} 66 67print_object_fmt: .PHONY 68 @echo ${OBJECT_FMT} 69 70print_toolchain_missing: .PHONY 71 @echo "${TOOLCHAIN_MISSING}" 72 73print_mkvars \ 74print_set_lists_base print_set_lists_x print_set_lists_ext \ 75list_set_lists_base list_set_lists_x list_set_lists_ext \ 76list_set_files_base list_set_files_x list_set_files_ext \ 77 : .PHONY 78 @${SETSENV}; rundir="${.CURDIR}"; . ./sets.subr; ${.TARGET} 79 80# 81# METALOG MANIPULATION TARGETS 82# 83# METALOG is the name of a metadata log file, and is set in <bsd.own.mk> 84# if MKUNPRIVED is not "no". 85# 86# METALOG.unpriv is a command line option passed to various scripts; 87# it is either blank or "-M ${METALOG}.sanitised", depending on the 88# MKUNPRIVED flag. 89# 90# The sanitise_METALOG target creates METALOG.sanitised from METALOG, 91# without modifying METALOG itself. METALOG.sanitised is sorted, and 92# has duplicates merged. This is used near the end of a build, after 93# build products have been installed in DESTDIR and corresponding lines 94# have been added to METALOG, but before METALOG.sanitised is used in 95# the creation of sets in RELEASEDIR. 96# 97# The clean_METALOG either deletes METALOG or replaces METALOG with 98# a sanitised version of itself, depending on the MKUPDATE flag, and 99# deletes old METALOG.* files. This is intended to be used at the start 100# of a build, to ensure that repeated MKUPDATE builds do not cause 101# unbounded growth of METALOG. 102# 103 104.if ${MKUNPRIVED} == "no" 105METALOG.unpriv= 106sanitise_METALOG: .PHONY 107 @true 108clean_METALOG: .PHONY 109 @true 110.else # MKUNPRIVED 111METALOG.unpriv= -M ${METALOG}.sanitised 112sanitise_METALOG: .PHONY ${METALOG}.sanitised 113${METALOG}.sanitised: ${METALOG} 114 ${TOOL_MTREE} -CSM -k all -N ${NETBSDSRCDIR}/etc <${METALOG} \ 115 >${METALOG}.new 116 mv ${METALOG}.new ${METALOG}.sanitised 117.if ${MKUPDATE} == "no" || !exists(${METALOG}) 118clean_METALOG: .PHONY 119 rm -f ${METALOG} ${METALOG}.* 120.else # MKUPDATE 121clean_METALOG: .PHONY ${METALOG}.sanitised 122 mv ${METALOG}.sanitised ${METALOG} 123 rm -f ${METALOG}.* 124.endif # MKUPDATE 125.endif # MKUNPRIVED 126 127# 128# FILE LIST TARGETS 129# 130 131# This target has debugging value only, really. 132makeflist: .PHONY .PRECIOUS check_DESTDIR 133 ${SETSCMD} ./makeflist ${MAKEFLIST_FLAGS} 134 135checkflist: .PRECIOUS .PHONY check_DESTDIR sanitise_METALOG 136 ${SETSCMD} ${.CURDIR}/checkflist \ 137 ${MAKEFLIST_FLAGS} ${CHECKFLIST_FLAGS} ${METALOG.unpriv} 138 139checkflist-x11: .PHONY check_DESTDIR 140 ${SETSCMD} ./checkflist -x ${CHECKFLIST_FLAGS} 141 142checkflist-extsrc: .PHONY check_DESTDIR 143 ${SETSCMD} ./checkflist -y ${CHECKFLIST_FLAGS} 144 145.if defined(DESTDIR) && ${DESTDIR} != "" 146checkflist_if_DESTDIR: checkflist 147.else 148checkflist_if_DESTDIR: 149.endif 150 151# 152# SET BUILDING TARGETS 153# 154 155TARDIR= ${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/sets 156SOURCETARDIR= ${RELEASEDIR}/source/sets 157 158# If MAKETARS_SERIAL is set to "YES" or "yes", then the tar sets will be 159# made in series, even if make's "-j" flag requests multiple parallel 160# jobs. This is useful on systems that exhibit poor performance when 161# running multiple parallel disk-intensive operations. The default is 162# MAKETARS_SERIAL=NO, which will obey the "-j" flag passed to the make 163# command. 164# 165MAKETARS_SERIAL?= NO 166.if empty(MAKETARS_SERIAL:M[Yy][Ee][Ss]) 167_MAKETARS_WAIT= # empty 168.else 169_MAKETARS_WAIT= .WAIT 170.endif 171 172maketars: .PRECIOUS .PHONY check_DESTDIR check_RELEASEDIR \ 173 sanitise_METALOG checkflist_if_DESTDIR .WAIT \ 174 maketarsetup .WAIT \ 175 ${MAKETARSETS:@.TARS.@${_MAKETARS_WAIT} do-${.TARS.}@} 176 @true 177 178maketarsetup: .EXEC 179.if defined(DESTDIR) && ${DESTDIR} != "" 180 ${_MKMSG} "execute checkflist" 181 ${MAKE} checkflist 182.endif 183 mkdir -p ${TARDIR} 184 for i in MD5 SHA512; do \ 185 rm -f ${TARDIR}/$$i ${TARDIR}/$$i.tmp; \ 186 done 187 188makesetfiles: .PHONY sanitise_METALOG 189 ${_MKMSG_CREATE} "set lists" 190 ${SETSCMD} ./maketars -S -d ${DESTDIR:S,^$,/,} ${MAKETARS_FLAGS} \ 191 ${METALOG.unpriv} \ 192 -N ${NETBSDSRCDIR}/etc ${MAKEFLIST_FLAGS} -t ${TARDIR} 193 194.for tar in ${MAKETARSETS} 195do-${tar}: .PHONY sanitise_METALOG 196 ${_MKMSG_CREATE} "${tar}.tgz" 197 ${SETSCMD} ./maketars -d ${DESTDIR:S,^$,/,} ${MAKETARS_FLAGS} \ 198 ${METALOG.unpriv} \ 199 -N ${NETBSDSRCDIR}/etc -t ${TARDIR} ${tar} \ 200 || { rm -f ${TARDIR}/${tar}.tgz; false; } 201.endfor 202 203 204makesrctars: .PRECIOUS .PHONY check_RELEASEDIR 205 ${_MKMSG_CREATE} "source tar files" 206 mkdir -p ${SOURCETARDIR} 207 ${SETSCMD} ./makesrctars ${MAKESRCTARS_FLAGS} \ 208 ${MAKESRCTARS_X11_FLAGS} ${MAKESRCTARS_EXTSRC_FLAGS} \ 209 ${NETBSDSRCDIR} ${SOURCETARDIR} 210 211 212makesums: .PRECIOUS .PHONY check_RELEASEDIR .WAIT \ 213 ${MAKETARSETS:@.TARS.@do-sum-${.TARS.}@} 214 for i in MD5 SHA512; do \ 215 mv ${TARDIR}/$$i.tmp ${TARDIR}/$$i; \ 216 done 217 218.for tar in ${MAKETARSETS} 219do-sum-${tar}: .PHONY do-${tar} 220 ${_MKMSG_CREATE} "${tar} checksums" 221 ${MAKESUMS} -t ${TARDIR} ${tar}.tgz 222 for i in MD5 SHA512; do \ 223 ${TOOL_CAT} ${TARDIR}/$$i >> ${TARDIR}/$$i.tmp; \ 224 done 225.endfor 226.ORDER: ${MAKETARSETS:@.TARS.@do-sum-${.TARS.}@} 227 228 229installsets: .PHONY check_DESTDIR sanitise_METALOG 230.if !defined(INSTALLDIR) 231 @echo "setenv INSTALLDIR before doing that!" 232 @false 233.endif 234 ${SETSCMD} ./maketars -d ${DESTDIR:S,^$,/,} ${MAKETARS_FLAGS} \ 235 ${METALOG.unpriv} -N ${NETBSDSRCDIR}/etc \ 236 ${MAKEFLIST_FLAGS} -i ${INSTALLDIR} ${INSTALLSETS} 237 238# Should we ignore errors like extra or missing files in the flists? 239SLOPPY_FLIST?= NO 240.if !empty(SLOPPY_FLIST:M[Yy][Ee][Ss]) 241CHECKFLIST_FLAGS+= -e -m 242REGPKG.sloppy= -m 243.endif 244 245.if ${MAKEVERBOSE} == 0 246REGPKG.verbose?= -q 247.elif ${MAKEVERBOSE} == 1 248REGPKG.verbose?= 249.else # MAKEVERBOSE >= 2 250REGPKG.verbose?= -v 251.endif 252REGPKG.force?= # -f, or empty 253REGPKG.cache?= -c # -c, or empty 254REGPKG.update:= ${MKUPDATE:tl:Nno:C/..*/-u/} 255SYSPKGSETS?= all 256makesyspkgs: .PHONY check_DESTDIR check_RELEASEDIR \ 257 sanitise_METALOG checkflist_if_DESTDIR 258 mkdir -p ${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/syspkgs 259 ${SETSCMD} ${.CURDIR}/regpkgset \ 260 ${REGPKG.verbose} ${REGPKG.force} ${REGPKG.sloppy} \ 261 ${REGPKG.cache} ${REGPKG.update} \ 262 -d ${DESTDIR:S,^$,/,} ${METALOG.unpriv} \ 263 -N ${NETBSDSRCDIR}/etc \ 264 -t ${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/syspkgs ${SYSPKGSETS} 265 266makesyspkgsums: .PHONY check_RELEASEDIR 267 ${MAKESUMS} -t ${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/syspkgs 268 269# Update the "deps" file. 270# XXX: Why is "deps" checked in to the source tree, instead of 271# just being created as necessary? 272makedeps: .PHONY 273 ${SETSCMD} ./syspkgdeps all >${.CURDIR}/deps 274 275# 276# MAIN ENTRY POINTS 277# 278 279syspkgs: .PHONY makesyspkgs .WAIT makesyspkgsums 280 @true 281 282sets: .PHONY maketars .WAIT makesums 283 @true 284 285sourcesets: .PHONY makesrctars 286 @true 287 288.include <bsd.sys.mk> 289