Makefile revision 1.64
11.64Smrg#	$NetBSD: Makefile,v 1.64 2008/11/09 23:02:29 mrg Exp $
21.1Sthorpej
31.1Sthorpej# The `all' target must appear before bsd.own.mk is pulled in.
41.1Sthorpejall:
51.1Sthorpej	@echo "Please understand what you are doing, first."
61.1Sthorpej	@false
71.1Sthorpej
81.1Sthorpej.include <bsd.own.mk>
91.15Slukem.include "${NETBSDSRCDIR}/distrib/common/Makefile.distrib"
101.51SapbGREP?= grep
111.1Sthorpej
121.43SlukemSETSCMD=	cd ${.CURDIR} && \
131.43Slukem		DESTDIR=${DESTDIR:Q} \
141.6Slukem		MACHINE=${MACHINE:Q} MACHINE_ARCH=${MACHINE_ARCH:Q} \
151.62Sapb		AWK=${TOOL_AWK:Q} \
161.49Sapb		CKSUM=${TOOL_CKSUM:Q} \
171.49Sapb		DB=${TOOL_DB:Q} \
181.49Sapb		HOST_SH=${HOST_SH:Q} \
191.49Sapb		MAKE=${MAKE:Q} \
201.49Sapb		MKTEMP=${TOOL_MKTEMP:Q} \
211.49Sapb		MTREE=${TOOL_MTREE:Q} \
221.49Sapb		PAX=${TOOL_PAX:Q} \
231.63Sapb		SED=${TOOL_SED:Q} \
241.49Sapb		TSORT=${TSORT:Q} \
251.43Slukem		${HOST_SH}
261.30Stron
271.57SlukemMAKETARS_FLAGS=
281.64Smrg.if ${MKX11} != "no"
291.40SlukemMAKEFLIST_FLAGS=	-b
301.48SjmcMAKESRCTARS_FLAGS=	-x ${X11SRCDIR} -N ${NETBSDSRCDIR}/etc
311.40Slukem.else
321.40SlukemMAKEFLIST_FLAGS=
331.48SjmcMAKESRCTARS_FLAGS= 	-N ${NETBSDSRCDIR}/etc
341.40Slukem.endif
351.40Slukem
361.57Slukem.if ${MAKEVERBOSE} != 2
371.57SlukemMAKETARS_FLAGS+=	-q
381.57SlukemMAKESRCTARS_FLAGS+= 	-q
391.57Slukem.endif
401.57Slukem
411.33Sjmc.if !defined(MAKETARSETS)
421.43SlukemMAKETARSETS!= ${SETSCMD} ./makeflist -l ${MAKEFLIST_FLAGS}
431.33Sjmc.endif
441.33Sjmc
451.52Smrgprint_have_gcc: .PHONY
461.52Smrg	@echo ${HAVE_GCC}
471.6Slukem
481.3Sthorpejprint_machine: .PHONY
491.3Sthorpej	@echo ${MACHINE}
501.3Sthorpej
511.3Sthorpejprint_machine_arch: .PHONY
521.3Sthorpej	@echo ${MACHINE_ARCH}
531.3Sthorpej
541.3Sthorpejprint_machine_cpu: .PHONY
551.3Sthorpej	@echo ${MACHINE_CPU}
561.3Sthorpej
571.3Sthorpejprint_object_fmt: .PHONY
581.3Sthorpej	@echo ${OBJECT_FMT}
591.3Sthorpej
601.17Slukemprint_toolchain_missing: .PHONY
611.17Slukem	@echo "${TOOLCHAIN_MISSING}"
621.29Smrg
631.3Sthorpej# This target has debugging value only, really.
641.44Sheasmakeflist: .PHONY .PRECIOUS check_DESTDIR
651.43Slukem	${SETSCMD} ./makeflist ${MAKEFLIST_FLAGS}
661.3Sthorpej
671.1Sthorpej#
681.1Sthorpej# SET BUILDING TARGETS
691.1Sthorpej#
701.1Sthorpej
711.46SclTARDIR=		${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/sets
721.43SlukemSOURCETARDIR=	${RELEASEDIR}/source/sets
731.43Slukem
741.27Slukem.if ${MKUNPRIVED} == "no"
751.27SlukemMETALOG.unpriv=
761.49SapbMETALOG.sanitised.unpriv=
771.27Slukem.else
781.27SlukemMETALOG.unpriv=	-M ${METALOG}
791.49SapbMETALOG.sanitised= ${METALOG}.sanitised
801.49SapbMETALOG.sanitised.unpriv= -M ${METALOG.sanitised}
811.27Slukem.endif
821.27Slukem
831.49Sapb.if ${MKUNPRIVED} == "no"
841.49Sapbsanitise_METALOG: .PHONY
851.49Sapb	@true
861.49Sapb.else
871.49Sapbsanitise_METALOG: .PHONY ${METALOG.sanitised}
881.49Sapb${METALOG.sanitised}: ${METALOG}
891.51Sapb	( cat ${NETBSDSRCDIR}/etc/mtree/NetBSD.dist ; \
901.51Sapb		echo '/unset all' ; \
911.51Sapb		cat ${METALOG} ) \
921.54She	| ${TOOL_MTREE} -C -k all -N ${NETBSDSRCDIR}/etc > ${METALOG}.new && \
931.54She		( rm -f ${METALOG} ; \
941.54She		mv ${METALOG}.new ${METALOG} )
951.54She	cat ${METALOG} | ${GREP} -v " optional" > ${.TARGET}
961.49Sapb.endif
971.49Sapb
981.49Sapb.if defined(DESTDIR) && ${DESTDIR} != ""
991.49Sapbcheckflist_if_DESTDIR: checkflist
1001.49Sapb.else
1011.49Sapbcheckflist_if_DESTDIR:
1021.49Sapb.endif
1031.43Slukem
1041.49Sapbcheckflist: .PRECIOUS .PHONY check_DESTDIR sanitise_METALOG
1051.49Sapb	${SETSCMD} ${.CURDIR}/checkflist \
1061.49Sapb	    ${MAKEFLIST_FLAGS} ${CHECKFLIST_FLAGS} ${METALOG.sanitised.unpriv}
1071.4Smrg
1081.41Slukemcheckflist-x11: .PHONY check_DESTDIR
1091.43Slukem	${SETSCMD} ./checkflist -x ${CHECKFLIST_FLAGS}
1101.43Slukem
1111.1Sthorpej
1121.58Sapb# If MAKETARS_SERIAL is set to "YES" or "yes", then the tar sets will be
1131.58Sapb# made in series, even if make's "-j" flag requests multiple parallel
1141.58Sapb# jobs.  This is useful on systems that exhibit poor performance when
1151.58Sapb# running multiple parallel disk-intensive operations.  The default is
1161.58Sapb# MAKETARS_SERIAL=NO, which will obey the "-j" flag passed to the make
1171.58Sapb# command.
1181.58Sapb#
1191.58SapbMAKETARS_SERIAL?= NO
1201.58Sapb.if empty(MAKETARS_SERIAL:M[Yy][Ee][Ss])
1211.58Sapb_MAKETARS_WAIT= # empty
1221.58Sapb.else
1231.58Sapb_MAKETARS_WAIT= .WAIT
1241.58Sapb.endif
1251.58Sapb
1261.49Sapbmaketars: .PRECIOUS .PHONY check_DESTDIR check_RELEASEDIR \
1271.49Sapb		sanitise_METALOG checkflist_if_DESTDIR .WAIT \
1281.58Sapb		maketarsetup .WAIT \
1291.58Sapb		${MAKETARSETS:@.TARS.@${_MAKETARS_WAIT} do-${.TARS.}@}
1301.33Sjmc	@true
1311.33Sjmc
1321.43Slukemmaketarsetup: .EXEC
1331.23Sveego.if defined(DESTDIR) && ${DESTDIR} != ""
1341.43Slukem	${_MKMSG} "execute  checkflist"
1351.32Slukem	${MAKE} checkflist
1361.16Slukem.endif
1371.43Slukem	mkdir -p ${TARDIR}
1381.47Sjmc	for i in BSDSUM CKSUM MD5 SHA512 SYSVSUM; do \
1391.43Slukem		rm -f ${TARDIR}/$$i ${TARDIR}/$$i.tmp; \
1401.43Slukem	done
1411.43Slukem
1421.43Slukemmakesetfiles: .PHONY
1431.43Slukem	${_MKMSG_CREATE} "set lists"
1441.43Slukem	${SETSCMD} ./maketars -S -d ${DESTDIR:S,^$,/,} ${METALOG.unpriv} \
1451.57Slukem	    ${MAKETARS_FLAGS} \
1461.43Slukem	    -N ${NETBSDSRCDIR}/etc ${MAKEFLIST_FLAGS} -t ${TARDIR}
1471.43Slukem
1481.33Sjmc.for tar in ${MAKETARSETS}
1491.55Sapbdo-${tar}: .PHONY sanitise_METALOG
1501.57Slukem	${_MKMSG_CREATE} "${tar}.tgz"
1511.57Slukem	${SETSCMD} ./maketars -d ${DESTDIR:S,^$,/,} ${MAKETARS_FLAGS} \
1521.55Sapb	    ${METALOG.sanitised.unpriv} \
1531.43Slukem	    -N ${NETBSDSRCDIR}/etc -t ${TARDIR} ${tar} \
1541.43Slukem	|| rm -f ${TARDIR}/${tar}.tgz
1551.33Sjmc.endfor
1561.1Sthorpej
1571.43Slukem
1581.41Slukemmakesrctars: .PRECIOUS .PHONY check_RELEASEDIR
1591.57Slukem	${_MKMSG_CREATE} "source tar files"
1601.43Slukem	mkdir -p ${SOURCETARDIR}
1611.45Slukem	${SETSCMD} ./makesrctars ${MAKESRCTARS_FLAGS} \
1621.45Slukem	    ${NETBSDSRCDIR} ${SOURCETARDIR}
1631.43Slukem
1641.25Slukem
1651.41Slukemmakesums: .PRECIOUS .PHONY check_RELEASEDIR .WAIT \
1661.41Slukem		${MAKETARSETS:@.TARS.@do-sum-${.TARS.}@}
1671.47Sjmc	for i in BSDSUM CKSUM MD5 SHA512 SYSVSUM; do \
1681.43Slukem		mv ${TARDIR}/$$i.tmp ${TARDIR}/$$i; \
1691.43Slukem	done
1701.33Sjmc
1711.33Sjmc.for tar in ${MAKETARSETS}
1721.39Sjmcdo-sum-${tar}: .PHONY do-${tar}
1731.57Slukem	${_MKMSG_CREATE} "${tar} checksums"
1741.43Slukem	${MAKESUMS} -t ${TARDIR} ${tar}.tgz
1751.47Sjmc	for i in BSDSUM CKSUM MD5 SHA512 SYSVSUM; do \
1761.43Slukem		${TOOL_CAT} ${TARDIR}/$$i >> ${TARDIR}/$$i.tmp; \
1771.35Sjmc	done
1781.33Sjmc.endfor
1791.37Sjmc.ORDER: ${MAKETARSETS:@.TARS.@do-sum-${.TARS.}@}
1801.18Slukem
1811.43Slukem
1821.49Sapbinstallsets: .PHONY check_DESTDIR sanitise_METALOG
1831.18Slukem.if !defined(INSTALLDIR)
1841.18Slukem	@echo "setenv INSTALLDIR before doing that!"
1851.18Slukem	@false
1861.18Slukem.endif
1871.57Slukem	${SETSCMD} ./maketars -d ${DESTDIR:S,^$,/,} ${MAKETARS_FLAGS} \
1881.49Sapb	    ${METALOG.sanitised.unpriv} -N ${NETBSDSRCDIR}/etc \
1891.49Sapb	    ${MAKEFLIST_FLAGS} -i ${INSTALLDIR} ${INSTALLSETS}
1901.49Sapb
1911.49Sapb# Should we ignore errors like extra or missing files in the flists?
1921.49SapbSLOPPY_FLIST?= NO
1931.49Sapb.if !empty(SLOPPY_FLIST:M[Yy][Ee][Ss])
1941.49SapbCHECKFLIST_FLAGS+=	-e -m
1951.49SapbREGPKG.sloppy=		-m
1961.49Sapb.endif
1971.1Sthorpej
1981.49Sapb.if ${MAKEVERBOSE} == 0
1991.49SapbREGPKG.verbose?= -q
2001.49Sapb.elif ${MAKEVERBOSE} == 1
2011.49SapbREGPKG.verbose?=
2021.49Sapb.else	# MAKEVERBOSE == 2
2031.49SapbREGPKG.verbose?= -v
2041.49Sapb.endif
2051.49SapbREGPKG.force?=		# -f, or empty
2061.49SapbREGPKG.cache?= -c	# -c, or empty
2071.49SapbREGPKG.update:= ${MKUPDATE:tl:Nno:C/..*/-u/}
2081.49SapbSYSPKGSETS?= all
2091.49Sapbmakesyspkgs: .PHONY check_DESTDIR check_RELEASEDIR \
2101.49Sapb		sanitise_METALOG checkflist_if_DESTDIR
2111.59Smatt	mkdir -p ${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/syspkgs
2121.49Sapb	${SETSCMD} ${.CURDIR}/regpkgset \
2131.49Sapb	    ${REGPKG.verbose} ${REGPKG.force} ${REGPKG.sloppy} \
2141.49Sapb	    ${REGPKG.cache} ${REGPKG.update} \
2151.49Sapb	    -d ${DESTDIR:S,^$,/,} ${METALOG.sanitised.unpriv} \
2161.49Sapb	    -N ${NETBSDSRCDIR}/etc \
2171.59Smatt	    -t ${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/syspkgs ${SYSPKGSETS}
2181.49Sapb
2191.49Sapbmakesyspkgsums: .PHONY check_RELEASEDIR
2201.59Smatt	${MAKESUMS} -t ${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/syspkgs
2211.43Slukem
2221.50Sapb# Update the "deps" file.
2231.50Sapb# XXX: Why is "deps" checked in to the source tree, instead of
2241.50Sapb# just being created as necessary?
2251.50Sapbmakedeps: .PHONY
2261.50Sapb	${SETSCMD} ./syspkgdeps all >${.CURDIR}/deps
2271.50Sapb
2281.1Sthorpej#
2291.1Sthorpej# MAIN ENTRY POINTS
2301.1Sthorpej#
2311.1Sthorpej
2321.49Sapbsyspkgs: .PHONY makesyspkgs .WAIT makesyspkgsums
2331.49Sapb	@true
2341.49Sapb
2351.41Slukemsets: .PHONY maketars .WAIT makesums
2361.25Slukem	@true
2371.25Slukem
2381.41Slukemsourcesets: .PHONY makesrctars
2391.1Sthorpej	@true
2401.8Slukem
2411.8Slukem.include <bsd.sys.mk>
242