sets.subr revision 1.11
11.11Slukem#	$NetBSD: sets.subr,v 1.11 2004/01/03 02:38:58 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.9Slukem#	x11_version		version of XF86 (3 or 4)
141.11Slukem#
151.11Slukem# The following <bsd.own.mk> variables are exported to the environment:
161.11Slukem#	MACHINE	
171.11Slukem#	MACHINE_ARCH
181.11Slukem#	MACHINE_CPU
191.11Slukem#	HAVE_GCC3
201.11Slukem#	TOOLCHAIN_MISSING
211.11Slukem#	OBJECT_FMT
221.11Slukem#	MKKERBEROS
231.11Slukem#	MKKERBEROS4
241.11Slukem#	MKLINT
251.11Slukem#	MKSENDMAIL
261.9Slukem
271.9SlukemoIFS=$IFS
281.9SlukemIFS="
291.9Slukem"
301.9Slukemfor x in $(
311.11Slukem${MAKE:-make} -B -f- all <<'EOF'
321.9Slukem.include <bsd.own.mk>
331.9Slukemall:
341.11Slukem.for i in MACHINE MACHINE_ARCH MACHINE_CPU \
351.11Slukem		HAVE_GCC3 OBJECT_FMT TOOLCHAIN_MISSING \
361.11Slukem		MKKERBEROS MKKERBEROS4 MKLINT MKSENDMAIL
371.11Slukem	@echo "export $i=${$i}"
381.11Slukem.endfor
391.11Slukem.if defined(USE_XF86_4) && (${USE_XF86_4} != "no")
401.9Slukem	@echo x11_version=4
411.9Slukem.else
421.9Slukem	@echo x11_version=3
431.9Slukem.endif
441.9Slukem
451.9SlukemEOF
461.9Slukem); do
471.11Slukem#	echo 1>&2 "DEBUG: read $x"
481.9Slukem	eval $x
491.9Slukemdone
501.9SlukemIFS=$oIFS
511.9Slukem
521.9Slukemsetsdir=$(dirname $0)
531.9Slukemnlists="base comp etc games man misc text"
541.9Slukemcase $x11_version in
551.9Slukem3) xlists="xbase3 xcomp3 xcontrib3 xfont3 xmisc3 xserver3" ;;
561.9Slukem4) xlists="xbase4 xcomp4 xcontrib4 xfont4 xmisc4 xserver4" ;;
571.9Slukem*) xlists="xbase xcomp xcontrib xfont xmisc xserver" ;;
581.9Slukemesac
591.9Slukemobsolete=0
601.9Slukemlkm=yes
611.11Slukemif [ "${MACHINE}" = "evbppc" ]; then
621.9Slukem	lkm=no				# Turn off LKMs for some ports.
631.9Slukemfi
641.9Slukem# Determine lib type.
651.11Slukemif [ "${OBJECT_FMT}" = "ELF" ]; then
661.9Slukem	shlib=elf
671.9Slukemelse
681.9Slukem	shlib=aout
691.9Slukemfi
701.9Slukemstlib=$shlib
711.11Slukemif [ "${MACHINE_CPU}" = "sh3" -o "${MACHINE_ARCH}" = "m68000" ]; then
721.9Slukem	shlib=no			# Turn off shlibs for some ports.
731.9Slukemfi
741.9Slukem
751.9Slukem
761.9Slukem#
771.9Slukem# list_set_files setfile [...]
781.1Sdyoung# 
791.9Slukem# Produce a packing list for setfile(s).
801.9Slukem# In each file, a record consists of a path and a System Package name,
811.9Slukem# separated by whitespace. E.g.,
821.9Slukem#
831.11Slukem# 	# $NetBSD: sets.subr,v 1.11 2004/01/03 02:38:58 lukem Exp $
841.9Slukem# 	.			base-sys-root	[keyword[,...]]
851.9Slukem# 	./altroot		base-sys-root
861.9Slukem# 	./bin			base-sys-root
871.9Slukem# 	./bin/[			base-util-root
881.9Slukem# 	./bin/cat		base-util-root
891.9Slukem#		[...]
901.9Slukem#
911.9Slukem# A # in the first column marks a comment.
921.9Slukem#
931.9Slukem# If ${obsolete} != 0, only entries with an "obsolete" keyword will
941.9Slukem# be printed.
951.9Slukem#
961.9Slukem# The third field is an optional comma separated list of keywords to
971.9Slukem# control if a record is printed; every keyword listed must be enabled
981.9Slukem# for the record to be printed.  The following keywords are available:
991.9Slukem#	dummy			dummy entry (ignored)
1001.11Slukem#	kerberos		<bsd.own.mk> ${MKKERBEROS} != no
1011.9Slukem#	kerberos4		<bsd.own.mk> ${MKKERBEROS4} != no
1021.9Slukem#	lint			<bsd.own.mk> ${MKLINT} != no
1031.11Slukem#	sendmail		<bsd.own.mk> ${MKSENDMAIL} != no
1041.9Slukem#	obsolete		file is obsolete, and only printed if 
1051.9Slukem#				${obsolete} != 0
1061.1Sdyoung#
1071.8Slukemlist_set_files()
1081.8Slukem{
1091.1Sdyoung	for setname; do
1101.1Sdyoung		list_set_lists $setname
1111.9Slukem	done | xargs cat | \
1121.11Slukem	awk -v obsolete=${obsolete} '
1131.9Slukem		BEGIN {
1141.9Slukem			if (! obsolete) {
1151.11Slukem				split("kerberos4 kerberos lint sendmail",
1161.9Slukem				    needvars)
1171.9Slukem				for (vi in needvars) {
1181.9Slukem					nv = needvars[vi]
1191.9Slukem					if (ENVIRON["MK" toupper(nv)] != "no")
1201.9Slukem						wanted[nv] = 1 
1211.9Slukem				}
1221.9Slukem			}
1231.9Slukem		}
1241.9Slukem
1251.9Slukem		/^#/ {
1261.9Slukem			next;
1271.9Slukem		}
1281.9Slukem
1291.9Slukem		NF > 2 && $3 != "-" {
1301.9Slukem			split($3, keywords, ",")
1311.9Slukem			show = 1
1321.9Slukem			for (ki in keywords) {
1331.9Slukem				kw = keywords[ki]
1341.9Slukem				if (kw == "obsolete") {
1351.9Slukem					if (obsolete)
1361.9Slukem						print
1371.9Slukem					next
1381.9Slukem				}
1391.9Slukem				if (! (kw in wanted))
1401.9Slukem					show = 0
1411.9Slukem			}
1421.9Slukem			if (show)
1431.9Slukem				print
1441.9Slukem			next
1451.9Slukem		}
1461.9Slukem
1471.9Slukem		{
1481.9Slukem			if (! obsolete)
1491.9Slukem				print
1501.9Slukem		}'
1511.9Slukem
1521.1Sdyoung}
1531.1Sdyoung
1541.1Sdyoung#
1551.1Sdyoung# list_set_lists setname
1561.1Sdyoung# 
1571.1Sdyoung# Print to stdout a list of files, one filename per line, which
1581.1Sdyoung# concatenate to create the packing list for setname. E.g.,
1591.1Sdyoung#
1601.1Sdyoung# 	.../lists/base/mi
1611.1Sdyoung# 	.../lists/base/rescue.mi
1621.1Sdyoung# 	.../lists/base/md.i386
1631.9Slukem#		[...]
1641.1Sdyoung#
1651.9Slukem# For a given setname $set, the following files may be selected from
1661.9Slukem# .../list/$set:
1671.9Slukem#	mi
1681.11Slukem#	ad.${MACHINE_ARCH}
1691.11Slukem# (or)	ad.${MACHINE_CPU}
1701.11Slukem#	ad.${MACHINE_CPU}.shl
1711.11Slukem#	md.${MACHINE}.${MACHINE_ARCH}
1721.11Slukem# (or)	md.${MACHINE}
1731.9Slukem#	stl.mi
1741.9Slukem#	stl.stlib
1751.9Slukem#	shl.mi
1761.9Slukem#	shl.shlib
1771.9Slukem#	lkm.mi			if ${lkm} != no
1781.9Slukem#	gcc.mi
1791.9Slukem#	gcc.shl
1801.9Slukem#	tc.mi
1811.9Slukem#	tc.shl
1821.9Slukem#	rescue.shl
1831.11Slukem#	rescue.${MACHINE}
1841.11Slukem#	rescue.ad.${MACHINE_ARCH}
1851.11Slukem# (or)	rescue.ad.${MACHINE_CPU}
1861.11Slukem# 	rescue.ad.${MACHINE_CPU}.shl
1871.1Sdyoung#
1881.9Slukem# Environment:
1891.1Sdyoung# 	shlib
1901.1Sdyoung# 	stlib
1911.1Sdyoung#
1921.8Slukemlist_set_lists()
1931.8Slukem{
1941.1Sdyoung	setname=$1
1951.1Sdyoung
1961.9Slukem	setdir=$setsdir/lists/$setname
1971.9Slukem	echo $setdir/mi
1981.11Slukem	if [ "${MACHINE}" != "${MACHINE_ARCH}" ]; then
1991.11Slukem		# Prefer an ad.${MACHINE_ARCH} over an ad.${MACHINE_CPU},
2001.1Sdyoung		# since the arch-specific one will be more specific than
2011.1Sdyoung		# the cpu-specific one.
2021.11Slukem		if [ -f $setdir/ad.${MACHINE_ARCH} ]; then
2031.11Slukem			echo $setdir/ad.${MACHINE_ARCH}
2041.11Slukem		elif [ -f $setdir/ad.${MACHINE_CPU} ]; then
2051.11Slukem			echo $setdir/ad.${MACHINE_CPU}
2061.1Sdyoung		fi
2071.1Sdyoung		if [ "$shlib" != "no" -a \
2081.11Slukem		     -f $setdir/ad.${MACHINE_CPU}.shl ]; then
2091.11Slukem			echo $setdir/ad.${MACHINE_CPU}.shl
2101.1Sdyoung		fi
2111.1Sdyoung	fi
2121.11Slukem	if [ -f $setdir/md.${MACHINE}.${MACHINE_ARCH} ]; then
2131.11Slukem		echo $setdir/md.${MACHINE}.${MACHINE_ARCH}
2141.11Slukem	elif [ -f $setdir/md.${MACHINE} ]; then
2151.11Slukem		echo $setdir/md.${MACHINE}
2161.1Sdyoung	fi
2171.9Slukem	if [ -f $setdir/stl.mi ]; then
2181.9Slukem		echo $setdir/stl.mi
2191.1Sdyoung	fi
2201.9Slukem	if [ -f $setdir/stl.${stlib} ]; then
2211.9Slukem		echo $setdir/stl.${stlib}
2221.1Sdyoung	fi
2231.1Sdyoung	if [ "$shlib" != "no" ]; then
2241.9Slukem		if [ -f $setdir/shl.mi ]; then
2251.9Slukem			echo $setdir/shl.mi
2261.7Sdyoung		fi
2271.9Slukem		if [ -f $setdir/shl.${shlib} ]; then
2281.9Slukem			echo $setdir/shl.${shlib}
2291.7Sdyoung		fi
2301.1Sdyoung	fi
2311.1Sdyoung	if [ "$lkm" != "no" ]; then
2321.9Slukem		if [ -f $setdir/lkm.mi ]; then
2331.9Slukem			echo $setdir/lkm.mi
2341.1Sdyoung		fi
2351.1Sdyoung	fi
2361.11Slukem	if [ "${TOOLCHAIN_MISSING}" != "yes" ]; then
2371.11Slukem		if [ "${HAVE_GCC3}" = "yes" ]; then
2381.9Slukem			if [ -f $setdir/gcc.mi ]; then
2391.9Slukem				echo $setdir/gcc.mi
2401.2Smrg			fi
2411.2Smrg			if [ "$shlib" != "no" ]; then
2421.9Slukem				if [ -f $setdir/gcc.shl ]; then
2431.9Slukem					echo $setdir/gcc.shl
2441.2Smrg				fi
2451.2Smrg			fi
2461.2Smrg		else
2471.9Slukem			if [ -f $setdir/tc.mi ]; then
2481.9Slukem				echo $setdir/tc.mi
2491.2Smrg			fi
2501.2Smrg			if [ "$shlib" != "no" ]; then
2511.9Slukem				if [ -f $setdir/tc.shl ]; then
2521.9Slukem					echo $setdir/tc.shl
2531.2Smrg				fi
2541.1Sdyoung			fi
2551.1Sdyoung		fi
2561.1Sdyoung	fi
2571.1Sdyoung
2581.9Slukem	if [ -f $setdir/rescue.mi ]; then
2591.9Slukem		echo $setdir/rescue.mi
2601.1Sdyoung	fi
2611.11Slukem	if [ -f $setdir/rescue.${MACHINE} ]; then
2621.11Slukem		echo $setdir/rescue.${MACHINE}
2631.1Sdyoung	fi
2641.11Slukem	if [ "${MACHINE}" != "${MACHINE_ARCH}" ]; then
2651.11Slukem		# Prefer a rescue.ad.${MACHINE_ARCH} over a
2661.11Slukem		# rescue.ad.${MACHINE_CPU}, since the arch-
2671.1Sdyoung		# specific one will be more specific than the
2681.1Sdyoung		# cpu-specific one.
2691.11Slukem		if [ -f $setdir/rescue.ad.${MACHINE_ARCH} ]; then
2701.11Slukem			echo $setdir/rescue.ad.${MACHINE_ARCH}
2711.11Slukem		elif [ -f $setdir/rescue.ad.${MACHINE_CPU} ]; then
2721.11Slukem			echo $setdir/rescue.ad.${MACHINE_CPU}
2731.1Sdyoung		fi
2741.10Sjmc		if [ "$shlib" != "no" -a \
2751.11Slukem		     -f $setdir/rescue.ad.${MACHINE_CPU}.shl ]; then
2761.11Slukem			echo $setdir/rescue.ad.${MACHINE_CPU}.shl
2771.10Sjmc		fi
2781.1Sdyoung	fi
2791.5Sdyoung}
2801.5Sdyoung
2811.9Slukem# arch_to_cpu mach
2821.9Slukem#
2831.11Slukem# Print the ${MACHINE_CPU} for ${MACHINE_ARCH}=mach,
2841.9Slukem# as determined by <bsd.own.mk>.
2851.9Slukem#
2861.8Slukemarch_to_cpu()
2871.8Slukem{
2881.9Slukem	MACHINE_ARCH=${1} ${MAKE:-make} -f- all <<EOF
2891.5Sdyoung.include <bsd.own.mk>
2901.5Sdyoungall:
2911.5Sdyoung	@echo \${MACHINE_CPU}
2921.5SdyoungEOF
2931.1Sdyoung}
294