sets.subr revision 1.20
11.20Slukem#	$NetBSD: sets.subr,v 1.20 2004/01/08 01:39:26 lukem Exp $
21.1Sdyoung#
31.9Slukem
41.9Slukem#
51.11Slukem# The following variables contain defaults for sets.subr functions and callers:
61.9Slukem#	setsdir			path to src/distrib/sets
71.9Slukem#	nlists			list of base sets
81.9Slukem#	xlists			list of x11 sets
91.9Slukem#	obsolete		controls if obsolete files are selected instead
101.9Slukem#	lkm			if != "no", enable LKM sets
111.9Slukem#	shlib			shared library format (a.out, elf, or "")
121.9Slukem#	stlib			static library format (a.out, elf)
131.20Slukem#	x11_version		version of XFree86. one of:
141.20Slukem#				   ""	cross built from src/x11
151.20Slukem#				   3	XFree86 3.x from xsrc/xc
161.20Slukem#				   4	XFree86 4.x from xsrc/xfree/xc
171.11Slukem#
181.11Slukem# The following <bsd.own.mk> variables are exported to the environment:
191.11Slukem#	MACHINE	
201.11Slukem#	MACHINE_ARCH
211.11Slukem#	MACHINE_CPU
221.11Slukem#	HAVE_GCC3
231.11Slukem#	TOOLCHAIN_MISSING
241.11Slukem#	OBJECT_FMT
251.18Slukem#	MKCRYPTO
261.13Slukem#	MKCRYPTO_IDEA
271.13Slukem#	MKCRYPTO_MDC2
281.13Slukem#	MKCRYPTO_RC5
291.19Slukem#	MKCVS
301.14Slukem#	MKHESIOD
311.11Slukem#	MKKERBEROS
321.11Slukem#	MKKERBEROS4
331.11Slukem#	MKLINT
341.12Slukem#	MKPOSTFIX
351.17Slukem#	MKPROFILE
361.11Slukem#	MKSENDMAIL
371.16Slukem#	MKSKEY
381.15Slukem#	MKYP
391.9Slukem
401.19SlukemMKVARS="MKCRYPTO MKCRYPTO_IDEA MKCRYPTO_MDC2 MKCRYPTO_RC5 MKCVS MKHESIOD MKKERBEROS MKKERBEROS4 MKLINT MKPOSTFIX MKPROFILE MKSENDMAIL MKSKEY MKYP"
411.12Slukem
421.9SlukemoIFS=$IFS
431.9SlukemIFS="
441.9Slukem"
451.9Slukemfor x in $(
461.12Slukem${MAKE:-make} -B -f- all <<EOMAKE
471.9Slukem.include <bsd.own.mk>
481.9Slukemall:
491.11Slukem.for i in MACHINE MACHINE_ARCH MACHINE_CPU \
501.11Slukem		HAVE_GCC3 OBJECT_FMT TOOLCHAIN_MISSING \
511.12Slukem		${MKVARS}
521.12Slukem	@echo "export \$i=\${\$i}"
531.11Slukem.endfor
541.20Slukem.if (\${MKX11:Uno} != "no")
551.20Slukem	@echo x11_version=""
561.20Slukem.elif (\${USE_XF86_4:Uno} != "no")
571.9Slukem	@echo x11_version=4
581.9Slukem.else
591.9Slukem	@echo x11_version=3
601.9Slukem.endif
611.9Slukem
621.12SlukemEOMAKE
631.9Slukem); do
641.11Slukem#	echo 1>&2 "DEBUG: read $x"
651.9Slukem	eval $x
661.9Slukemdone
671.9SlukemIFS=$oIFS
681.9Slukem
691.9Slukemsetsdir=$(dirname $0)
701.9Slukemnlists="base comp etc games man misc text"
711.9Slukemcase $x11_version in
721.20Slukem3)	xlists="xbase3 xcomp3 xcontrib3 xfont3 xmisc3 xserver3" ;;
731.20Slukem4)	xlists="xbase4 xcomp4 xcontrib4 xfont4 xmisc4 xserver4" ;;
741.20Slukem"")	xlists="xbase xcomp xcontrib xfont xmisc xserver" ;;
751.20Slukem*)	xlists="" ;;	# unknown!
761.9Slukemesac
771.9Slukemobsolete=0
781.9Slukemlkm=yes
791.11Slukemif [ "${MACHINE}" = "evbppc" ]; then
801.9Slukem	lkm=no				# Turn off LKMs for some ports.
811.9Slukemfi
821.9Slukem# Determine lib type.
831.11Slukemif [ "${OBJECT_FMT}" = "ELF" ]; then
841.9Slukem	shlib=elf
851.9Slukemelse
861.9Slukem	shlib=aout
871.9Slukemfi
881.9Slukemstlib=$shlib
891.11Slukemif [ "${MACHINE_CPU}" = "sh3" -o "${MACHINE_ARCH}" = "m68000" ]; then
901.9Slukem	shlib=no			# Turn off shlibs for some ports.
911.9Slukemfi
921.9Slukem
931.9Slukem
941.9Slukem#
951.9Slukem# list_set_files setfile [...]
961.1Sdyoung# 
971.9Slukem# Produce a packing list for setfile(s).
981.9Slukem# In each file, a record consists of a path and a System Package name,
991.9Slukem# separated by whitespace. E.g.,
1001.9Slukem#
1011.20Slukem# 	# $NetBSD: sets.subr,v 1.20 2004/01/08 01:39:26 lukem Exp $
1021.9Slukem# 	.			base-sys-root	[keyword[,...]]
1031.9Slukem# 	./altroot		base-sys-root
1041.9Slukem# 	./bin			base-sys-root
1051.9Slukem# 	./bin/[			base-util-root
1061.9Slukem# 	./bin/cat		base-util-root
1071.9Slukem#		[...]
1081.9Slukem#
1091.9Slukem# A # in the first column marks a comment.
1101.9Slukem#
1111.9Slukem# If ${obsolete} != 0, only entries with an "obsolete" keyword will
1121.9Slukem# be printed.
1131.9Slukem#
1141.9Slukem# The third field is an optional comma separated list of keywords to
1151.9Slukem# control if a record is printed; every keyword listed must be enabled
1161.9Slukem# for the record to be printed.  The following keywords are available:
1171.9Slukem#	dummy			dummy entry (ignored)
1181.13Slukem#	obsolete		file is obsolete, and only printed if 
1191.13Slukem#				${obsolete} != 0
1201.13Slukem#
1211.18Slukem#	crypto			<bsd.own.mk> ${MKCRYPTO} != no
1221.13Slukem#	crypto_idea		<bsd.own.mk> ${MKCRYPTO_IDEA} != no
1231.13Slukem#	crypto_mdc2		<bsd.own.mk> ${MKCRYPTO_MDC2} != no
1241.13Slukem#	crypto_rc5		<bsd.own.mk> ${MKCRYPTO_RC5} != no
1251.19Slukem#	cvs			<bsd.own.mk> ${MKCVS} != no
1261.14Slukem#	hesiod			<bsd.own.mk> ${MKHESIOD} != no
1271.11Slukem#	kerberos		<bsd.own.mk> ${MKKERBEROS} != no
1281.9Slukem#	kerberos4		<bsd.own.mk> ${MKKERBEROS4} != no
1291.9Slukem#	lint			<bsd.own.mk> ${MKLINT} != no
1301.12Slukem#	postfix			<bsd.own.mk> ${MKPOSTFIX} != no
1311.17Slukem#	profile			<bsd.own.mk> ${MKPROFILE} != no
1321.11Slukem#	sendmail		<bsd.own.mk> ${MKSENDMAIL} != no
1331.16Slukem#	skey			<bsd.own.mk> ${MKSKEY} != no
1341.15Slukem#	yp			<bsd.own.mk> ${MKYP} != no
1351.1Sdyoung#
1361.8Slukemlist_set_files()
1371.8Slukem{
1381.1Sdyoung	for setname; do
1391.1Sdyoung		list_set_lists $setname
1401.9Slukem	done | xargs cat | \
1411.11Slukem	awk -v obsolete=${obsolete} '
1421.9Slukem		BEGIN {
1431.9Slukem			if (! obsolete) {
1441.12Slukem				split("'"${MKVARS}"'", needvars)
1451.9Slukem				for (vi in needvars) {
1461.9Slukem					nv = needvars[vi]
1471.12Slukem					kw = tolower(substr(nv, 3))
1481.12Slukem					if (ENVIRON[nv] != "no")
1491.12Slukem						wanted[kw] = 1 
1501.9Slukem				}
1511.9Slukem			}
1521.9Slukem		}
1531.9Slukem
1541.9Slukem		/^#/ {
1551.9Slukem			next;
1561.9Slukem		}
1571.9Slukem
1581.9Slukem		NF > 2 && $3 != "-" {
1591.9Slukem			split($3, keywords, ",")
1601.9Slukem			show = 1
1611.9Slukem			for (ki in keywords) {
1621.9Slukem				kw = keywords[ki]
1631.9Slukem				if (kw == "obsolete") {
1641.9Slukem					if (obsolete)
1651.9Slukem						print
1661.9Slukem					next
1671.9Slukem				}
1681.9Slukem				if (! (kw in wanted))
1691.9Slukem					show = 0
1701.9Slukem			}
1711.9Slukem			if (show)
1721.9Slukem				print
1731.9Slukem			next
1741.9Slukem		}
1751.9Slukem
1761.9Slukem		{
1771.9Slukem			if (! obsolete)
1781.9Slukem				print
1791.9Slukem		}'
1801.9Slukem
1811.1Sdyoung}
1821.1Sdyoung
1831.1Sdyoung#
1841.1Sdyoung# list_set_lists setname
1851.1Sdyoung# 
1861.1Sdyoung# Print to stdout a list of files, one filename per line, which
1871.1Sdyoung# concatenate to create the packing list for setname. E.g.,
1881.1Sdyoung#
1891.1Sdyoung# 	.../lists/base/mi
1901.1Sdyoung# 	.../lists/base/rescue.mi
1911.1Sdyoung# 	.../lists/base/md.i386
1921.9Slukem#		[...]
1931.1Sdyoung#
1941.9Slukem# For a given setname $set, the following files may be selected from
1951.9Slukem# .../list/$set:
1961.9Slukem#	mi
1971.11Slukem#	ad.${MACHINE_ARCH}
1981.11Slukem# (or)	ad.${MACHINE_CPU}
1991.11Slukem#	ad.${MACHINE_CPU}.shl
2001.11Slukem#	md.${MACHINE}.${MACHINE_ARCH}
2011.11Slukem# (or)	md.${MACHINE}
2021.9Slukem#	stl.mi
2031.9Slukem#	stl.stlib
2041.9Slukem#	shl.mi
2051.9Slukem#	shl.shlib
2061.9Slukem#	lkm.mi			if ${lkm} != no
2071.9Slukem#	gcc.mi
2081.9Slukem#	gcc.shl
2091.9Slukem#	tc.mi
2101.9Slukem#	tc.shl
2111.9Slukem#	rescue.shl
2121.11Slukem#	rescue.${MACHINE}
2131.11Slukem#	rescue.ad.${MACHINE_ARCH}
2141.11Slukem# (or)	rescue.ad.${MACHINE_CPU}
2151.11Slukem# 	rescue.ad.${MACHINE_CPU}.shl
2161.1Sdyoung#
2171.9Slukem# Environment:
2181.1Sdyoung# 	shlib
2191.1Sdyoung# 	stlib
2201.1Sdyoung#
2211.8Slukemlist_set_lists()
2221.8Slukem{
2231.1Sdyoung	setname=$1
2241.1Sdyoung
2251.9Slukem	setdir=$setsdir/lists/$setname
2261.9Slukem	echo $setdir/mi
2271.11Slukem	if [ "${MACHINE}" != "${MACHINE_ARCH}" ]; then
2281.11Slukem		# Prefer an ad.${MACHINE_ARCH} over an ad.${MACHINE_CPU},
2291.1Sdyoung		# since the arch-specific one will be more specific than
2301.1Sdyoung		# the cpu-specific one.
2311.11Slukem		if [ -f $setdir/ad.${MACHINE_ARCH} ]; then
2321.11Slukem			echo $setdir/ad.${MACHINE_ARCH}
2331.11Slukem		elif [ -f $setdir/ad.${MACHINE_CPU} ]; then
2341.11Slukem			echo $setdir/ad.${MACHINE_CPU}
2351.1Sdyoung		fi
2361.1Sdyoung		if [ "$shlib" != "no" -a \
2371.11Slukem		     -f $setdir/ad.${MACHINE_CPU}.shl ]; then
2381.11Slukem			echo $setdir/ad.${MACHINE_CPU}.shl
2391.1Sdyoung		fi
2401.1Sdyoung	fi
2411.11Slukem	if [ -f $setdir/md.${MACHINE}.${MACHINE_ARCH} ]; then
2421.11Slukem		echo $setdir/md.${MACHINE}.${MACHINE_ARCH}
2431.11Slukem	elif [ -f $setdir/md.${MACHINE} ]; then
2441.11Slukem		echo $setdir/md.${MACHINE}
2451.1Sdyoung	fi
2461.9Slukem	if [ -f $setdir/stl.mi ]; then
2471.9Slukem		echo $setdir/stl.mi
2481.1Sdyoung	fi
2491.9Slukem	if [ -f $setdir/stl.${stlib} ]; then
2501.9Slukem		echo $setdir/stl.${stlib}
2511.1Sdyoung	fi
2521.1Sdyoung	if [ "$shlib" != "no" ]; then
2531.9Slukem		if [ -f $setdir/shl.mi ]; then
2541.9Slukem			echo $setdir/shl.mi
2551.7Sdyoung		fi
2561.9Slukem		if [ -f $setdir/shl.${shlib} ]; then
2571.9Slukem			echo $setdir/shl.${shlib}
2581.7Sdyoung		fi
2591.1Sdyoung	fi
2601.1Sdyoung	if [ "$lkm" != "no" ]; then
2611.9Slukem		if [ -f $setdir/lkm.mi ]; then
2621.9Slukem			echo $setdir/lkm.mi
2631.1Sdyoung		fi
2641.1Sdyoung	fi
2651.11Slukem	if [ "${TOOLCHAIN_MISSING}" != "yes" ]; then
2661.11Slukem		if [ "${HAVE_GCC3}" = "yes" ]; then
2671.9Slukem			if [ -f $setdir/gcc.mi ]; then
2681.9Slukem				echo $setdir/gcc.mi
2691.2Smrg			fi
2701.2Smrg			if [ "$shlib" != "no" ]; then
2711.9Slukem				if [ -f $setdir/gcc.shl ]; then
2721.9Slukem					echo $setdir/gcc.shl
2731.2Smrg				fi
2741.2Smrg			fi
2751.2Smrg		else
2761.9Slukem			if [ -f $setdir/tc.mi ]; then
2771.9Slukem				echo $setdir/tc.mi
2781.2Smrg			fi
2791.2Smrg			if [ "$shlib" != "no" ]; then
2801.9Slukem				if [ -f $setdir/tc.shl ]; then
2811.9Slukem					echo $setdir/tc.shl
2821.2Smrg				fi
2831.1Sdyoung			fi
2841.1Sdyoung		fi
2851.1Sdyoung	fi
2861.1Sdyoung
2871.9Slukem	if [ -f $setdir/rescue.mi ]; then
2881.9Slukem		echo $setdir/rescue.mi
2891.1Sdyoung	fi
2901.11Slukem	if [ -f $setdir/rescue.${MACHINE} ]; then
2911.11Slukem		echo $setdir/rescue.${MACHINE}
2921.1Sdyoung	fi
2931.11Slukem	if [ "${MACHINE}" != "${MACHINE_ARCH}" ]; then
2941.11Slukem		# Prefer a rescue.ad.${MACHINE_ARCH} over a
2951.11Slukem		# rescue.ad.${MACHINE_CPU}, since the arch-
2961.1Sdyoung		# specific one will be more specific than the
2971.1Sdyoung		# cpu-specific one.
2981.11Slukem		if [ -f $setdir/rescue.ad.${MACHINE_ARCH} ]; then
2991.11Slukem			echo $setdir/rescue.ad.${MACHINE_ARCH}
3001.11Slukem		elif [ -f $setdir/rescue.ad.${MACHINE_CPU} ]; then
3011.11Slukem			echo $setdir/rescue.ad.${MACHINE_CPU}
3021.1Sdyoung		fi
3031.10Sjmc		if [ "$shlib" != "no" -a \
3041.11Slukem		     -f $setdir/rescue.ad.${MACHINE_CPU}.shl ]; then
3051.11Slukem			echo $setdir/rescue.ad.${MACHINE_CPU}.shl
3061.10Sjmc		fi
3071.1Sdyoung	fi
3081.5Sdyoung}
3091.5Sdyoung
3101.9Slukem# arch_to_cpu mach
3111.9Slukem#
3121.11Slukem# Print the ${MACHINE_CPU} for ${MACHINE_ARCH}=mach,
3131.9Slukem# as determined by <bsd.own.mk>.
3141.9Slukem#
3151.8Slukemarch_to_cpu()
3161.8Slukem{
3171.12Slukem	MACHINE_ARCH=${1} ${MAKE:-make} -f- all <<EOMAKE
3181.5Sdyoung.include <bsd.own.mk>
3191.5Sdyoungall:
3201.5Sdyoung	@echo \${MACHINE_CPU}
3211.12SlukemEOMAKE
3221.1Sdyoung}
323