Module Name:    src
Committed By:   apb
Date:           Thu Aug  7 17:54:28 UTC 2014

Modified Files:
        src: build.sh

Log Message:
Add a list-arch operation to build.sh.

This lists all known MACHINE/MACHINE_ARCH values, optionally
filtered by glob patterns given in the "-m" and "-a" options.
For example: build.sh -a '*arm*' list-arch


To generate a diff of this commit:
cvs rdiff -u -r1.291 -r1.292 src/build.sh

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/build.sh
diff -u src/build.sh:1.291 src/build.sh:1.292
--- src/build.sh:1.291	Thu Aug  7 15:15:48 2014
+++ src/build.sh	Thu Aug  7 17:54:28 2014
@@ -1,5 +1,5 @@
 #! /usr/bin/env sh
-#	$NetBSD: build.sh,v 1.291 2014/08/07 15:15:48 apb Exp $
+#	$NetBSD: build.sh,v 1.292 2014/08/07 17:54:28 apb Exp $
 #
 # Copyright (c) 2001-2011 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -848,6 +848,57 @@ validatearch()
 	esac
 }
 
+# listarch -- list valid MACHINE/MACHINE_ARCH/ALIAS values,
+# optionally restricted to those where the MACHINE and/or MACHINE_ARCH
+# match specifed glob patterns.
+#
+listarch()
+{
+	local machglob="$1" archglob="$2"
+	local IFS
+	local wildcard="*"
+	local line xline frag
+	local line_matches_machine line_matches_arch
+	local found=false
+
+	# Empty machglob or archglob should match anything
+	: "${machglob:=${wildcard}}"
+	: "${archglob:=${wildcard}}"
+
+	IFS="${nl}"
+	for line in ${valid_MACHINE_ARCH}; do
+		line="${line%%#*}" # ignore comments
+		xline="$( IFS=" ${tab}" ; echo $line )" # normalise white space
+		[ -z "${xline}" ] && continue # skip blank or comment lines
+
+		line_matches_machine=false
+		line_matches_arch=false
+
+		IFS=" "
+		for frag in ${xline}; do
+			case "${frag}" in
+			MACHINE=${machglob})
+				line_matches_machine=true ;;
+			ALIAS=${machglob})
+				line_matches_machine=true ;;
+			MACHINE_ARCH=${archglob})
+				line_matches_arch=true ;;
+			esac
+		done
+
+		if $line_matches_machine && $line_matches_arch; then
+			found=true
+			echo "$line"
+		fi
+	done
+	if ! $found; then
+		echo >&2 "No match for" \
+		    "MACHINE=${machglob} MACHINE_ARCH=${archglob}"
+		return 1
+	fi
+	return 0
+}
+
 # nobomb_getmakevar --
 # Given the name of a make variable in $1, print make's idea of the
 # value of that variable, or return 1 if there's an error.
@@ -990,6 +1041,9 @@ Usage: ${progname} [-EhnorUuxy] [-a arch
     disk-image=target	Creae bootable disk image in
 			RELEASEDIR/RELEASEMACHINEDIR/binary/gzimg/target.img.gz.
     params              Display various make(1) parameters.
+    list-arch           Display a list of valid MACHINE/MACHINE_ARCH values,
+                        and exit.  The list may be narrowed by passing glob
+                        patterns or exact values in MACHINE or MACHINE_ARCH.
 
  Options:
     -a arch        Set MACHINE_ARCH to arch.  [Default: deduced from MACHINE]
@@ -1121,7 +1175,6 @@ parseoptions()
 		-m)
 			eval ${optargcmd}
 			MACHINE="${OPTARG}"
-			[ "${opt_a}" != "yes" ] && getarch
 			;;
 
 		-N)
@@ -1252,6 +1305,11 @@ parseoptions()
 			usage
 			;;
 
+		list-arch)
+			listarch "${MACHINE}" "${MACHINE_ARCH}"
+			exit $?
+			;;
+
 		makewrapper|cleandir|obj|tools|build|distribution|release|sets|sourcesets|syspkgs|params)
 			;;
 
@@ -1800,7 +1858,7 @@ createmakewrapper()
 	eval cat <<EOF ${makewrapout}
 #! ${HOST_SH}
 # Set proper variables to allow easy "make" building of a NetBSD subtree.
-# Generated from:  \$NetBSD: build.sh,v 1.291 2014/08/07 15:15:48 apb Exp $
+# Generated from:  \$NetBSD: build.sh,v 1.292 2014/08/07 17:54:28 apb Exp $
 # with these arguments: ${_args}
 #
 

Reply via email to