[U-Boot] [PATCH] MAKEALL: allow additional board selections

Add command line handling to select boards to be built by architecture, CPU family, vendor or SoC name.
Signed-off-by: Wolfgang Denk wd@denx.de --- MAKEALL | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 106 insertions(+), 3 deletions(-)
diff --git a/MAKEALL b/MAKEALL index 73174e5..b273d1c 100755 --- a/MAKEALL +++ b/MAKEALL @@ -1,5 +1,103 @@ #!/bin/bash
+# Tool mainly for U-Boot Quality Assurance: build one or more board +# configurations with minimal verbosity, showing only warnings and +# errors. +# +# There are several ways to select which boards to build. +# +# Traditionally, architecture names (like "powerpc"), CPU family names +# (like "mpc83xx") or board names can be specified on the command +# line; without any arguments, MAKEALL defaults to building all Power +# Architecture systems (i. e. same as for "MAKEALL powerpc"). +# +# With the iontroduction of the board.cfg file, it has become possible +# to provide additional selections. We use standard command line +# options for this: +# +# -a or --arch : Select architecture +# -c or --cpu : Select CPU family +# -s or --soc : Select SoC type +# -v or --vendor: Select board vendor +# +# Selections by these options are logically ANDed; any additional +# arguments specified on the command line are always build +# additionally. +# +# Examples: +# +# - build all Power Architecture boards: +# +# MAKEALL -a powerpc +# or +# MAKEALL --arch powerpc +# or +# MAKEALL powerpc +# +# - build all PowerPC boards manucatured by vendor "esd": +# +# MAKEALL -a powerpc -v esd +# +# - build all Freescale boards with MPC83xx CPUs, plus all 4xx boards: +# +# MAKEALL -c mpc83xx -v freescale 4xx +# +######################################################################### + +# Option processing based on util-linux-2.13/getopt-parse.bash + +# Note that we use `"$@"' to let each command-line parameter expand to a +# separate word. The quotes around `$@' are essential! +# We need TEMP as the `eval set --' would nuke the return value of +# getopt. +TEMP=`getopt -o a:c:v:s: --long arch:,cpu:,vendor:,soc: \ + -n 'MAKEALL' -- "$@"` + +if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi + +# Note the quotes around `$TEMP': they are essential! +eval set -- "$TEMP" + +FILTER="$1 !~ /^#/" +SELECTED='' + +while true ; do + case "$1" in + -a|--arch) + # echo "Option ARCH: argument `$2'" + FILTER="${FILTER} && $2 == "$2"" + SELECTED='y' + shift 2 ;; + -c|--cpu) + # echo "Option CPU: argument `$2'" + FILTER="${FILTER} && $3 == "$2"" + SELECTED='y' + shift 2 ;; + -s|--soc) + # echo "Option SoC: argument `$2'" + FILTER="${FILTER} && $6 == "$2"" + SELECTED='y' + shift 2 ;; + -v|--vendor) + # echo "Option VENDOR: argument `$2'" + FILTER="${FILTER} && $5 == "$2"" + SELECTED='y' + shift 2 ;; + --) + shift ; break ;; + *) + echo "Internal error!" ; exit 1 ;; + esac +done +# echo "Remaining arguments:" +# for arg do echo '--> '"`$arg'" ; done + +if [ "$SELECTED" ] ; then + SELECTED="$(awk '('"$FILTER"') { print $1 }' boards.cfg)" +fi + +######################################################################### + # Print statistics when we exit trap exit 1 2 3 15 trap print_stats 0 @@ -575,7 +673,12 @@ print_stats() {
#-----------------------------------------------------------------------
-#----- for now, just run PowerPC by default ----- -[ $# = 0 ] && set -- powerpc +# Build target groups selected by options, plus any command line args +if [ "$SELECTED" ] ; then + build_targets $SELECTED "$@" +else + # run PowerPC by default + [ $# = 0 ] && set -- powerpc
-build_targets "$@" + build_targets "$@" +fi

On Sunday, October 17, 2010 06:31:33 Wolfgang Denk wrote:
+TEMP=`getopt -o a:c:v:s: --long arch:,cpu:,vendor:,soc: \
-n 'MAKEALL' -- "$@"`
perhaps split the short/long opts out into dedicated variables to make updating easier ?
SHORT_OPTS="a:c:v:s:" LONG_OPTS="arch:,cpu:,vendor:,soc:" ... TEMP=`getopt -o ${SHORT_OPTS} --long ${LONG_OPTS} ......
+while true ; do
case "$1" in
- -a|--arch)
mixing of spaces & tabs for indentation ...
echo "Internal error!" ; exit 1 ;;
send to stderr ? echo ... 1>&2
+# echo "Remaining arguments:" +# for arg do echo '--> '"`$arg'" ; done
the for loop can be done in a single printf: printf '--> '"`%s'\n" "$@"
- SELECTED="$(awk '('"$FILTER"') { print $1 }' boards.cfg)"
dont really need the outermost quotes: var=$(echo a b c) works just fine
-#----- for now, just run PowerPC by default ----- -[ $# = 0 ] && set -- powerpc +# Build target groups selected by options, plus any command line args +if [ "$SELECTED" ] ; then
- build_targets $SELECTED "$@"
+else
- # run PowerPC by default
- [ $# = 0 ] && set -- powerpc
-build_targets "$@"
- build_targets "$@"
+fi
i dont think you need to be so stringent about the value of SELECTED. this should the same: # Build target groups selected by options, plus any command line args set -- ${SELECTED} "$@" # run PowerPC by default [ $# = 0 ] && set -- powerpc build_targets "$@" -mike

Dear Mike Frysinger,
In message 201010170713.02380.vapier@gentoo.org you wrote:
On Sunday, October 17, 2010 06:31:33 Wolfgang Denk wrote:
+TEMP=`getopt -o a:c:v:s: --long arch:,cpu:,vendor:,soc: \
-n 'MAKEALL' -- "$@"`
perhaps split the short/long opts out into dedicated variables to make updating easier ?
SHORT_OPTS="a:c:v:s:" LONG_OPTS="arch:,cpu:,vendor:,soc:" ... TEMP=`getopt -o ${SHORT_OPTS} --long ${LONG_OPTS} ......
Good idea. Will do.
+while true ; do
case "$1" in
- -a|--arch)
mixing of spaces & tabs for indentation ...
Ouch. Will fix.
echo "Internal error!" ; exit 1 ;;
send to stderr ? echo ... 1>&2
Agree. Will fix.
+# echo "Remaining arguments:" +# for arg do echo '--> '"`$arg'" ; done
the for loop can be done in a single printf: printf '--> '"`%s'\n" "$@"
Yes, but it's only a disabled debug help, and TIMTOWTDI... I think this doesn;t hurt. Left unchanged.
- SELECTED="$(awk '('"$FILTER"') { print $1 }' boards.cfg)"
dont really need the outermost quotes: var=$(echo a b c) works just fine
Agreed, will fix.
-#----- for now, just run PowerPC by default ----- -[ $# = 0 ] && set -- powerpc +# Build target groups selected by options, plus any command line args +if [ "$SELECTED" ] ; then
- build_targets $SELECTED "$@"
+else
- # run PowerPC by default
- [ $# = 0 ] && set -- powerpc
-build_targets "$@"
- build_targets "$@"
+fi
i dont think you need to be so stringent about the value of SELECTED. this> should the same: # Build target groups selected by options, plus any command line args set -- ${SELECTED} "$@" # run PowerPC by default [ $# = 0 ] && set -- powerpc build_targets "$@"
Agreed, will fix.
Best regards,
Wolfgang Denk

Add command line handling to select boards to be built by architecture, CPU family, vendor or SoC name.
Signed-off-by: Wolfgang Denk wd@denx.de --- changes since V1: - apply Mike Frysinger's review comments - allow to repeat options, so that "-v FOO -v BAR" will select all configurations where the vendor is either FOO or BAR.
MAKEALL | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 132 insertions(+), 2 deletions(-)
diff --git a/MAKEALL b/MAKEALL index 73174e5..1f3c82e 100755 --- a/MAKEALL +++ b/MAKEALL @@ -1,5 +1,134 @@ #!/bin/bash
+# Tool mainly for U-Boot Quality Assurance: build one or more board +# configurations with minimal verbosity, showing only warnings and +# errors. +# +# There are several ways to select which boards to build. +# +# Traditionally, architecture names (like "powerpc"), CPU family names +# (like "mpc83xx") or board names can be specified on the command +# line; without any arguments, MAKEALL defaults to building all Power +# Architecture systems (i. e. same as for "MAKEALL powerpc"). +# +# With the iontroduction of the board.cfg file, it has become possible +# to provide additional selections. We use standard command line +# options for this: +# +# -a or --arch : Select architecture +# -c or --cpu : Select CPU family +# -s or --soc : Select SoC type +# -v or --vendor: Select board vendor +# +# Selections by these options are logically ANDed; if the same option +# is used repeatedly, such selections are ORed. So "-v FOO -v BAR" +# will select all configurations where the vendor is either FOO or +# BAR. Any additional arguments specified on the command line are +# always build additionally. +# +# Examples: +# +# - build all Power Architecture boards: +# +# MAKEALL -a powerpc +# or +# MAKEALL --arch powerpc +# or +# MAKEALL powerpc +# +# - build all PowerPC boards manufactured by vendor "esd": +# +# MAKEALL -a powerpc -v esd +# +# - build all PowerPC boards manufactured either by "keymile" or +# "siemens": +# +# MAKEALL -a powerpc -v keymile -v siemens +# +# - build all Freescale boards with MPC83xx CPUs, plus all 4xx boards: +# +# MAKEALL -c mpc83xx -v freescale 4xx +# +######################################################################### + +SHORT_OPTS="a:c:v:s:" +LONG_OPTS="arch:,cpu:,vendor:,soc:" + +# Option processing based on util-linux-2.13/getopt-parse.bash + +# Note that we use `"$@"' to let each command-line parameter expand to a +# separate word. The quotes around `$@' are essential! +# We need TEMP as the `eval set --' would nuke the return value of +# getopt. +TEMP=`getopt -o ${SHORT_OPTS} --long ${LONG_OPTS} \ + -n 'MAKEALL' -- "$@"` + +if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi + +# Note the quotes around `$TEMP': they are essential! +eval set -- "$TEMP" + +SELECTED='' + +while true ; do + case "$1" in + -a|--arch) + # echo "Option ARCH: argument `$2'" + if [ "$opt_a" ] ; then + opt_a="${opt_a%)} || $2 == "$2")" + else + opt_a="($2 == "$2")" + fi + SELECTED='y' + shift 2 ;; + -c|--cpu) + # echo "Option CPU: argument `$2'" + if [ "$opt_c" ] ; then + opt_c="${opt_c%)} || $3 == "$2")" + else + opt_c="($3 == "$2")" + fi + SELECTED='y' + shift 2 ;; + -s|--soc) + # echo "Option SoC: argument `$2'" + if [ "$opt_s" ] ; then + opt_s="${opt_s%)} || $6 == "$2")" + else + opt_s="($6 == "$2")" + fi + SELECTED='y' + shift 2 ;; + -v|--vendor) + # echo "Option VENDOR: argument `$2'" + if [ "$opt_v" ] ; then + opt_v="${opt_v%)} || $5 == "$2")" + else + opt_v="($5 == "$2")" + fi + SELECTED='y' + shift 2 ;; + --) + shift ; break ;; + *) + echo "Internal error!" >&2 ; exit 1 ;; + esac +done +# echo "Remaining arguments:" +# for arg do echo '--> '"`$arg'" ; done + +FILTER="$1 !~ /^#/" +[ "$opt_a" ] && FILTER="${FILTER} && $opt_a" +[ "$opt_c" ] && FILTER="${FILTER} && $opt_c" +[ "$opt_s" ] && FILTER="${FILTER} && $opt_s" +[ "$opt_v" ] && FILTER="${FILTER} && $opt_v" + +if [ "$SELECTED" ] ; then + SELECTED=$(awk '('"$FILTER"') { print $1 }' boards.cfg) +fi + +######################################################################### + # Print statistics when we exit trap exit 1 2 3 15 trap print_stats 0 @@ -575,7 +704,8 @@ print_stats() {
#-----------------------------------------------------------------------
-#----- for now, just run PowerPC by default ----- +# Build target groups selected by options, plus any command line args +set -- ${SELECTED} "$@" +# run PowerPC by default [ $# = 0 ] && set -- powerpc - build_targets "$@"

In message 1287327758-21810-1-git-send-email-wd@denx.de I wrote:
Add command line handling to select boards to be built by architecture, CPU family, vendor or SoC name.
Signed-off-by: Wolfgang Denk wd@denx.de
changes since V1:
- apply Mike Frysinger's review comments
- allow to repeat options, so that "-v FOO -v BAR" will select all configurations where the vendor is either FOO or BAR.
MAKEALL | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 132 insertions(+), 2 deletions(-)
Applied.
Best regards,
Wolfgang Denk
participants (2)
-
Mike Frysinger
-
Wolfgang Denk