From: Trevor Woerner <twoer...@gmail.com> New feature. Allow the user to supply, on the cmdline, a space-separated list of module/components to process, the script will process only those listed module/components. The list can be in any arbitrary order, the script takes care to process them in their correct, dependency order. Warn the user should there be any module/components from the list which aren't processed (probably due to misspelling).
Suggested usage: 1. run the script, only generating the list of modules, redirected to a file $ build.sh -L > list 2. edit list, removing any unneeded module/components 3. run the build as follows: $ build.sh $PREFIX --modlist "`cat list`" ... Signed-off-by: Trevor Woerner <twoer...@gmail.com> --- build.sh | 109 ++++++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 92 insertions(+), 17 deletions(-) diff --git a/build.sh b/build.sh index 6c76a5c..fb15cb1 100755 --- a/build.sh +++ b/build.sh @@ -1,5 +1,7 @@ #!/bin/sh +APP=$0 + envoptions() { cat << EOF global environment variables you may set: @@ -864,6 +866,69 @@ build_doc() { build doc xorg-docs } +# just build the modules supplied on the command-line, +# in their correct order, as found in $MODULES +# arguments: +# (none) +# returns: +# 0 - good +# 1 - bad +process_modules() { + local inorder + local noorder + local module + local component + local processed="" + local mc + local found + local notprocessed="" + + # preconds + if [ X"$MODULES" = X ]; then + echo "internal process_modules() error, \$MODULES is empty" + return 1 + fi + + # process module/components in-order + for inorder in `$APP -L`; do + for noorder in $MODULES; do + if [ X"$inorder" = X"$noorder" ]; then + module=`echo $noorder | cut -d'/' -f1` + component=`echo $noorder | cut -d'/' -f2` + build $module $component + processed="$processed $noorder" + fi + done + done + + # check user-supplied list for extras which weren't processed + for noorder in $MODULES; do + found=0 + for mc in $processed; do + if [ X"$noorder" = X"$mc" ]; then + found=1 + break + fi + done + if [ $found -eq 0 ]; then + notprocessed="$notprocessed $noorder" + fi + done + + # if any modules from the user-list are not processed + # warn the user + if [ X"$notprocessed" != X ]; then + echo "" + echo "***** WARNING: the following user-supplied module/components were not processed *****" + for mc in $notprocessed; do + echo " $mc" + done + echo "" + fi + + return 0 +} + usage() { echo "Usage: $0 [options] prefix" echo " where options are:" @@ -886,6 +951,7 @@ usage() { echo " --check : run make check in addition to others" echo " --clone : clone non-existing repositories (uses \$GITROOT if set)" echo " --cmd cmd : execute arbitrary git or make command 'cmd'" + echo " --modlist mods : only process the given space-separated list of modules" echo "" echo "Usage: $0 -L" echo " -L : just list modules to build" @@ -984,6 +1050,11 @@ do exit 1 fi ;; + --modlist) + shift + CLONE=1 + MODULES=$1 + ;; *) if [ X"$PREFIX" != X ]; then echo "unrecognized and/or too many command-line arguments" @@ -1014,23 +1085,27 @@ if [ X"$LISTONLY" = X ]; then date fi -# We must install the global macros before anything else -build util macros -build font util - -build_proto -build_lib -build_mesa - -if [ $LIB_ONLY -eq 0 ]; then - build_doc - build data bitmaps - build_app - build_xserver - build_driver - build_data - build_font - build_util +if [ X"$MODULES" = X ]; then + # We must install the global macros before anything else + build util macros + build font util + + build_proto + build_lib + build_mesa + + if [ $LIB_ONLY -eq 0 ]; then + build_doc + build data bitmaps + build_app + build_xserver + build_driver + build_data + build_font + build_util + fi +else + process_modules fi if [ X"$LISTONLY" != X ]; then -- 1.7.3.1.50.g1e633 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel