diff --git a/bin/dunecontrol b/bin/dunecontrol index 6a2a5f6dfbd337f4c3220b6011696adb4d8a11e0..73a663a3e3060c37f84d88d63d4fb765f9b3ebf2 100755 --- a/bin/dunecontrol +++ b/bin/dunecontrol @@ -138,15 +138,20 @@ load_opts() { # check wheteher the parameter is valid command or not is_command() { -eval ' -case "$1" in - '$(echo $COMMANDS | sed -e 's/ / | /g')') - return 0 - ;; - *) - return 1 - ;; -esac' + local commands="$1" + local command="" + for command in `echo $commands | tr ':' ' '`; do + eval ' + case "$command" in + '$(echo $COMMANDS | sed -e 's/ / | /g')') + true + ;; + *) + return 1 + ;; + esac' + done + return 0 } # list of all dunecontrol commands @@ -193,7 +198,7 @@ run_default_status () { blue="\e[1m\e[34m" green="\e[1m\e[32m" red="\e[1m\e[31m" - reset="\e[0m\e[37m" + reset="\e[0m\e[0m" fi if test $verbose -eq 1; then @@ -344,14 +349,14 @@ onfailure() { usage () { ( - echo "Usage: $(basename $0) [OPTIONS] COMMAND [COMMAND-OPTIONS]" + echo "Usage: $(basename $0) [OPTIONS] COMMANDS [COMMAND-OPTIONS]" echo "" - echo "Execute COMMAND for all Dune modules found. All entries in the" - echo "DUNE_CONTROL_PATH variable are scanned recursively for Dune modules." - echo "If DUNE_CONTROL_PATH is empty, the current directory is scanned." - echo "Dependencies are controlled by the $CONTROL files." + echo " Execute COMMANDS for all Dune modules found. All entries in the" + echo " DUNE_CONTROL_PATH variable are scanned recursively for Dune modules." + echo " If DUNE_CONTROL_PATH is empty, the current directory is scanned." + echo " Dependencies are controlled by the $CONTROL files." echo "" - echo "Options:" + echo "OPTIONS:" echo " -h, --help show this help" echo " --debug enable debug output of this script" echo " --module=mod only apply the actions on module mod" @@ -364,7 +369,8 @@ usage () { echo " (see dune-common/doc/example.opts)" echo " --[COMMAND]-opts=opts set options for COMMAND" echo " (this is mainly useful for the all COMMAND)" - echo "Commands:" + echo "COMMANDS:" + echo " Colon seperated list of commands. Availabel commands are:" printf " \`help'\tguess what :-)\n" printf " \`print'\tprint the list of modules sorted after their dependencies\n" for i in $COMMANDS; do @@ -516,7 +522,7 @@ while test $# -gt 0; do exit 1 ;; *) - command=$option + commands=$option break ;; esac @@ -536,36 +542,37 @@ while test $# -gt 0; do done # We need to run this via eval in order construct the case for the commands -case "$command" in - print) - create_module_list - eval "print_module_list ' ' $MODULES" - echo >&2 - ;; - export) - create_module_list - DUNE_CONTROL_PATH="" - for mod in $MODULES; do - if test x != x$DUNE_CONTROL_PATH; then - export DUNE_CONTROL_PATH="$DUNE_CONTROL_PATH:$(eval echo \$PATH_$mod/dune.module)" - else - export DUNE_CONTROL_PATH="$(eval echo \$PATH_$mod/dune.module)" - fi - done - echo export DUNE_CONTROL_PATH=$DUNE_CONTROL_PATH - ;; - m4create) - find_modules_in_path - mainmod=`echo $SEARCH_MODULES` - fname="dependencies.m4" - name=`eval echo \\${NAME_$mainmod}` - version=`eval echo \\${VERS_$mainmod}` - maintainer=`eval echo \\${MAIN_$mainmod}` - # ensure a version number - if test "x$version" = "x"; then version="0.0"; fi - echo "writing $fname" - echo " for $name $version $maintainer" - cat > $fname <<EOF +for command in `echo $commands | tr ':' ' '`; do + case "$command" in + print) + create_module_list + eval "print_module_list ' ' $MODULES" + echo >&2 + ;; + export) + create_module_list + DUNE_CONTROL_PATH="" + for mod in $MODULES; do + if test x != x$DUNE_CONTROL_PATH; then + export DUNE_CONTROL_PATH="$DUNE_CONTROL_PATH:$(eval echo \$PATH_$mod/dune.module)" + else + export DUNE_CONTROL_PATH="$(eval echo \$PATH_$mod/dune.module)" + fi + done + echo export DUNE_CONTROL_PATH=$DUNE_CONTROL_PATH + ;; + m4create) + find_modules_in_path + mainmod=`echo $SEARCH_MODULES` + fname="dependencies.m4" + name=`eval echo \\${NAME_$mainmod}` + version=`eval echo \\${VERS_$mainmod}` + maintainer=`eval echo \\${MAIN_$mainmod}` + # ensure a version number + if test "x$version" = "x"; then version="0.0"; fi + echo "writing $fname" + echo " for $name $version $maintainer" + cat > $fname <<EOF m4_define([DUNE_AC_INIT],[ AC_INIT([$name], [$version], [$maintainer]) AC_SUBST([DUNE_MOD_VERSION], [$version]) @@ -585,27 +592,27 @@ AC_DEFUN([DUNE_CHECK_MOD_DEPENDENCIES], [ AC_PROG_CXX LT_OUTPUT EOF - ### initialize AM_CONDITIONAL for suggestions that were not found - for name in $(eval echo \$SUGS_$mainmod); do - mod=$(fix_variable_name $name) - MOD=`echo $mod | tr [:lower:] [:upper:]` - if test "x$(eval echo \$HAVE_$mod)" = "x"; then - cat >> $fname <<EOF + ### initialize AM_CONDITIONAL for suggestions that were not found + for name in $(eval echo \$SUGS_$mainmod); do + mod=$(fix_variable_name $name) + MOD=`echo $mod | tr [:lower:] [:upper:]` + if test "x$(eval echo \$HAVE_$mod)" = "x"; then + cat >> $fname <<EOF ### add a conditional check for $name, # just in case the module is not available at autogen time AM_CONDITIONAL([HAVE_${MOD}], false) EOF + fi + done + ### DEPENDENCIES + if test "x$SEARCH_MODULES" != "x"; then + MODULES=$SEARCH_MODULES fi - done - ### DEPENDENCIES - if test "x$SEARCH_MODULES" != "x"; then - MODULES=$SEARCH_MODULES - fi - sort_dependencies $MODULES - for mod in $MODULES; do - name=`eval echo \\$NAME_$mod` - MOD=`echo $mod | tr [:lower:] [:upper:]` - cat >> $fname <<EOF + sort_dependencies $MODULES + for mod in $MODULES; do + name=`eval echo \\$NAME_$mod` + MOD=`echo $mod | tr [:lower:] [:upper:]` + cat >> $fname <<EOF ### check dependency $name # invoke checks required by this module AC_REQUIRE([${MOD}_CHECKS]) @@ -615,13 +622,13 @@ EOF AC_MSG_ERROR([could not find required module _dune_name]) fi EOF - done - ### - sort_suggestions $mainmod - for mod in $MODULES; do - name=`eval echo \\$NAME_$mod` - MOD=`echo $mod | tr [:lower:] [:upper:]` - cat >> $fname <<EOF + done + ### + sort_suggestions $mainmod + for mod in $MODULES; do + name=`eval echo \\$NAME_$mod` + MOD=`echo $mod | tr [:lower:] [:upper:]` + cat >> $fname <<EOF ### check suggestion $name # invoke checks required by this module AC_REQUIRE([${MOD}_CHECKS]) @@ -631,43 +638,44 @@ EOF AC_MSG_WARN([could not find suggested module _dune_name]) fi EOF - done - ### - mod=$mainmod - name=`eval echo \\$NAME_$mod` - MOD=`echo $mod | tr [:lower:] [:upper:]` - cat >> $fname <<EOF + done + ### + mod=$mainmod + name=`eval echo \\$NAME_$mod` + MOD=`echo $mod | tr [:lower:] [:upper:]` + cat >> $fname <<EOF ### invoke checks for $name AC_REQUIRE([${MOD}_CHECKS]) ]) EOF - ;; - unexport) - echo export DUNE_CONTROL_PATH="" ;; - help) - usage + unexport) + echo export DUNE_CONTROL_PATH="" ;; - *) - if is_command $command; then - create_module_list - NAMES="" - BUILDMODULES="" - for mod in $MODULES; do - if test "$(eval echo \$INST_$mod)" != "yes"; then - NAMES="$NAMES$(eval echo \$NAME_$mod) " - BUILDMODULES="$BUILDMODULES$mod " - fi - done - echo "--- going to build $NAMES ---" - build_modules $command $BUILDMODULES - echo "--- done ---" - else + help) usage - echo "ERROR: unknown command \"$command\"" >&2 - exit 1 - fi ;; -esac + *) + if is_command $command; then + create_module_list + NAMES="" + BUILDMODULES="" + for mod in $MODULES; do + if test "$(eval echo \$INST_$mod)" != "yes"; then + NAMES="$NAMES$(eval echo \$NAME_$mod) " + BUILDMODULES="$BUILDMODULES$mod " + fi + done + echo "--- going to build $NAMES ---" + build_modules "$command" $BUILDMODULES + echo "--- done ---" + else + usage + echo "ERROR: unknown command \"$command\"" >&2 + exit 1 + fi + ;; + esac +done trap - EXIT