Newer
Older
###############################################
###
### check for environment variables
###
if test -z "$MAKE"; then
MAKE=make
fi
###############################################
###
### read lib
###
Christian Engwer
committed
canonicalname(){
if test $# -ne 1; then
echo Usage: canonicalname path >&2
return 1
fi
file="`eval echo $1`" # expand ~
if test ! -e "$file"; then
echo $file: file not found >&2
return 1
fi
# if this is a symlink, then follow the symlink
if test -L "$file"; then
fdir="`dirname \"$file\"`"
flink="`readlink \"$file\"`"
if test -e "$flink"; then
# these are absolute links, or links in the CWD
canonicalname "$flink"
else
canonicalname "$fdir/$flink"
fi
else
# if this is a file, then remember the filename and
# canonicalize the directory name
if test -f "$file"; then
fdir="`dirname \"$file\"`"
fname="`basename \"$file\"`"
fdir="`canonicalname \"$fdir\"`"
echo "$fdir/$fname"
fi
# if this is a directory, then create an absolute
# directory name and we are done
if test -d "$file"; then
(cd "$file"; pwd)
fi
fi
Christian Engwer
committed
}
canonicalpath(){
if test $# -ne 1; then
echo Usage: canonicalpath path >&2
Christian Engwer
committed
return 1
fi
dirname "`canonicalname "$1"`"
checkdebug () {
while test $# -gt 0; do
if test x$1 = x--debug; then
echo yes
return
fi
shift
done
echo no
}
if test "x$DEBUG" = "xyes"; then
set -x
set -v
fi
onbuildfailure() {
echo "Terminating $(basename "$0") due to previous errors!" >&2
exit 1
}
#
# for each module load the $CONTROL script part and run $command
#
# parameters:
# $1 list of modules
# $2-$* commands + parameters to execute
while test $# -gt 0; do
# get command
command=$1
shift
# only load other parameters
load_opts NONE
# get command options
CMD_FLAGS=
while test $# -gt 0 && test "$1" != ":"; do
COMMAND=$(echo $command | tr '[:lower:]' '[:upper:]')
# setup paramter list
CMD_FLAGS="$CMD_FLAGS \"$1\""
shift
done
if test -z "$CMD_FLAGS"; then
load_opts $command
else
# disable usage of opts file
if test "x$DUNE_OPTS_FILE" != "x"; then
echo "WARNING: commandline parameters will overwrite setting in opts file \"$DUNE_OPTS_FILE\""
fi
# skip command delimiter
if test "$1" = ":"; then shift; fi
# actually run the commands (we already know that these are valid commands)
local runcommand=run_$command
local path="$(eval "echo \$PATH_${module}")"
eval echo "--- calling $command for \$NAME_${module} ---"
trap onbuildfailure EXIT
if ! (
set -e
cd "$path"
export module
eval_control $runcommand "$path/$CONTROL"
); then eval echo "--- Failed to build \$NAME_${module} ---"; exit 1; fi
trap onfailure EXIT
#
# load command options from an opts file
# the name of the opts file is stored in the global variable $DUNE_OPTS_FILE
#
# parameters:
# $1 command
#
local command=$1
local COMMAND=$(echo $command | tr '[:lower:]' '[:upper:]')
CMD_FLAGS=$(eval echo \$${COMMAND}_FLAGS)
local CMD_FLAGS_FROM_FILE=""
if test "$command" = "NONE"; then
BUILDDIR=$DUNE_BUILDDIR
USE_CMAKE=$DUNE_USE_CMAKE
if test "x$DUNE_OPTS_FILE" != "x"; then
if test -z "$BUILDDIR"; then
# no builddir set yet, use build dir from opts file if set
# Note: if --use-buiddir is used BUILDDIR will be set already
OPTS_FILE_BUILDDIR="$(eval BUILDDIR=""; . $DUNE_OPTS_FILE; eval echo \$BUILDDIR)"
if test -n "$OPTS_FILE_BUILDDIR"; then
BUILDDIR="$OPTS_FILE_BUILDDIR"
fi
if test -z "$USE_CMAKE"; then
# no USE_CMAKE set yet, use USE_CMAKE from opts file if set
# Note: if --use-cmake is used USE_CMAKE will be set already
OPTS_FILE_USE_CMAKE="$(eval USE_CMAKE=""; . $DUNE_OPTS_FILE; eval echo \$USE_CMAKE)"
if test -n "$OPTS_FILE_USE_CMAKE"; then
USE_CMAKE="$OPTS_FILE_USE_CMAKE"
fi
fi
if test -n "$USE_CMAKE" && test -z "$CMAKE"; then
# We use cmake for building, but CMAKE is not yet set.
# Check the opts file for it
OPTS_FILE_CMAKE="$(eval CMAKE=""; . $DUNE_OPTS_FILE; eval echo \$CMAKE)"
if test -n "$OPTS_FILE_CMAKE"; then
CMAKE="$OPTS_FILE_CMAKE"
fi
fi
Markus Blatt
committed
if test -n "$USE_CMAKE" && test -z "$CMAKE"; then
# fall back to system cmake
CMAKE=cmake
fi
if test "x$DUNE_OPTS_FILE" != "x"; then
if test "$command" = "configure"; then
CMAKE_FLAGS="$(. $DUNE_OPTS_FILE; eval echo \$CMAKE_FLAGS)"
fi
CMD_FLAGS_FROM_FILE="$(eval ${COMMAND}_FLAGS=""; . $DUNE_OPTS_FILE; eval echo \$${COMMAND}_FLAGS)"
if test -n "$CMD_FLAGS_FROM_FILE"; then
echo "----- using default flags \$${COMMAND}_FLAGS from $DUNE_OPTS_FILE -----"
CMD_FLAGS=$CMD_FLAGS_FROM_FILE
elif test -n "$CMD_FLAGS"; then
echo "----- using default flags \$${COMMAND}_FLAGS from environment -----"
if test "x$USE_CMAKE" = "xyes"; then
if test -z "$BUILDDIR"; then
echo "No build directory provided. Defaulting to the sub directory build-cmake"
export BUILDDIR=build-cmake
fi
space=" "
tab=" "
BLANK="$space$tab"
if test -z "$GREP"; then
if test -z "$SED"; then
SED=sed
fi
# Uses the current compiler to extract information about the
# multiarch triplets and sets the export variable MULTIARCH_LIBDIR
# according to it.
# If not compiler is specified then cc or gcc is used.
extract_multiarch(){
set +e #error in the multiarch detection should not be fatal.
local my_cxx_compiler
if test "x$MULTIARCH_LIBDIR" != "x"; then
return
fi
if test "x$USE_CMAKE" = "xyes"; then
load_opts "cmake"
my_cxx_compiler=`echo $CMAKE_FLAGS | $GREP CXX | $SED "s/.*CXX=[\"']\?\([$BLANK'\"]*\)[\"']\?.*/\1/"`
fi
if test "x$my_cxx_compiler" == "x"; then
load_opts "configure"
my_cxx_compiler=`echo $CONFIGURE_FLAGS | $GREP CXX| $SED "s/.*CXX=[\"']\?\([^$BLANK'\"]*\)[\"']\?.*/\1/"`
fi
if test "x$my_cxx_compiler" == "x"; then
$(which cc &>/dev/null)
if test $? -eq "0"; then
my_cxx_compiler=cc
else
my_cxx_compiler=gcc
fi
fi
multiarch=$($my_cxx_compiler --print-multiarch 2>/dev/null)
if test $? -gt 0; then
for i in "target=" "Target:"; do
multiarch=$($my_cxx_compiler -v 2>&1| $GREP "$i" | $SED "s/.*$i[$BLANK]*\([a-z0-9_-]*\)/\1/" | $SED "s/-[a-z]*-linux-gnu/-linux-gnu/")
if test -n "$multiarch"; then break; fi
done
Markus Blatt
committed
set -e # set to old value.
export MULTIARCH_LIBDIR="lib/$multiarch"
}
export PREFIX_DIR="`canonicalpath "$0"`/.."
extract_multiarch
# create PKG_CONFIG_PATH for installed dune modules
for i in $MULTIARCH_LIBDIR lib64 lib32 lib; do
if test -d "$PREFIX_DIR/$i/pkgconfig"; then
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$PREFIX_DIR/$i/pkgconfig"
fi
done
# Read the modules find part
. "$PREFIX_DIR/lib/dunemodules.lib"
###############################################
###############################################
# check all parameter
check_commands() {
while test $# -gt 0; do
# get command
command=$1
shift
# skip command options
while test $# -gt 0 && test "$1" != ":"; do
shift
done
# skip command delimiter
if test "$1" = ":"; then shift; fi
# test the commands
if ! is_command $command; then
usage
echo "ERROR: unknown command \"$command\"" >&2
exit 1
fi
done
}
# check wheteher the parameter is valid command or not
is_command() {
'`echo $COMMANDS | $SED -e 's/ / | /g'`')
return 0
;;
*)
return 1
;;
esac'
# list of all dunecontrol commands
COMMANDS="printdeps vcsetup update autogen configure make all exec bexec status svn git"
# help string for the commands
printdeps_HELP="print recursive dependencies of a module"
vcsetup_HELP="setup version control repository (Git etc.) or working copy (SVN)"
update_HELP="updated all modules from the repository"
Markus Blatt
committed
autogen_HELP="run the autogen.sh script for each module. Does nothing, if CMake is activated"
configure_HELP="run configure or cmake for each module"
make_HELP="run make for each module"
all_HELP="\trun 'autogen', 'configure' and 'make' command for each module"
exec_HELP="execute an arbitrary command in each module source directory"
bexec_HELP="execute an arbitrary command in each module build directory"
status_HELP="show vc status for all modules"
svn_HELP="\trun svn command for each svn managed module"
git_HELP="\trun git command for each git managed module"
# setup command proxies
# call will be forwarded to run_default_$command
for command in $COMMANDS; do
eval "run_$command () { run_default_$command; }"
done
# default implementations for commands...
# these can be overwritten in the $CONTROL files
#
run_default_exec () { bash -c "eval $CMD_FLAGS"; }

Christoph Grüninger
committed
run_default_bexec () {
if test -d "$BUILDDIR"; then
bash -c "cd \"$BUILDDIR\" && eval $CMD_FLAGS";
else
eval echo "Build directory \\\"$BUILDDIR\\\" not found, skipping bexec for \$NAME_${module}"
fi
}
run_default_status () {
local verbose=0
local update=""
local is_git=""
local is_svn=""
name="$(eval echo \$NAME_$module)"
if test -d .git; then is_git=1; fi
if test -d .svn; then is_svn=1; fi
if test ! "$is_svn" -a ! "$is_git" ; then
echo "module $name not under known version control"
return
fi
if eval test "x$i" = "x-v"; then verbose=1; fi
if eval test "x$i" = "x-vv"; then verbose=2; fi
if eval test "x$i" = "x-u"; then update="-u"; fi
done
# is out output connected to a tty?
if test -t 1; then
blue="\e[1m\e[34m"
green="\e[1m\e[32m"
reset="\e[0m\e[0m"
test "$is_svn" && svn status $update | $GREP -E "^M|^A|^D|^C|^U"
test "$is_git" && git status -uno
test "$is_svn" && svn status $update
test "$is_git" && git status
fi
changed=$(svn status | $GREP -E "^M|^A|^D" | wc -l)
collisions=$(svn status | $GREP -E "^C"| wc -l)
pending=$(svn status $update | $GREP -E "^...... \* " | wc -l)
changed=$(git status --porcelain | $GREP -E "^ *M|^ *A|^ *D|^ *R|^ *C" | wc -l)
collisions=$(git status --porcelain | $GREP -E "^ *U"| wc -l)
pending=$(git status | $GREP -E "^\# Your branch is ahead |^\# Your branch is behind " | wc -l)
color=$green
text="no changes"
if [ $changed -eq 0 ]; then
true
color=$blue;
color=$blue;
text="$changed changes"
fi
if [ $pending -eq 0 ]; then
true
color=$blue;
text="$text, 1 update pending"
else
color=$blue;
text="$text, $pending updates pending"
fi
if [ $collisions -eq 0 ]; then
true
elif [ $collisions -eq 1 ]; then
color=$red
color=$red
echo -e "$color[$text]$reset $name"
# load user options
if [ -n "$CMD_FLAGS" ]; then
eval "$CMD_FLAGS"
fi
# Check for both a file and a directory to cope with Git submodules
if [ -d .git -o -f .git ] ; then
# Read Whitespace-Hook setting from dune.module file
local SETUPGITHOOK="$($GREP -i "^[$BLANK]*Whitespace-Hook:" dune.module | cut -d ':' -f2 | eval $PARSER_TRIM | tr '[:upper:]' '[:lower:]')"
if [ "x$SETUPGITHOOK" = "xyes" ]; then
# we have to install the Git whitespace hook
# The current Git repository might be a submodule, so we have to start by
# determining the location of the commit hook
if [ -f .git ] ; then
# submodule -> .git contains a pointer to the repository
GITHOOKPATH="$($SED 's/gitdir: //' < .git)/hooks/pre-commit"
else
# standard case, .git is the repository
GITHOOKPATH=.git/hooks/pre-commit
fi
if [ -n "$DISABLEWHITESPACEHOOK" ] ; then
# the user doesn't want the Git whitespace hook - deinstall it if necessary and warn the user
echo "WARNING: The current module wants to install the DUNE whitespace hook, but you have disabled the hook in your options!"
echo "WARNING: You will have to make sure that your commits don't introduce any trailing whitespace or indentation with tabs!"
echo "WARNING: Otherwise, your commits might be rejected when trying to push them to an official repository!"
if [ -e "$GITHOOKPATH" ]; then
# there is a pre-commit hook, check whether it is our whitespace hook
local HOOKTAG="$(eval head -n 2 \"$GITHOOKPATH\" | tail -n 1)"
if [ "x$HOOKTAG" = "x# dune-git-whitespace-hook" ]; then
echo "--> Removing DUNE whitespace hook as requested by the user"
fi
else
# standard handling of Git whitespace hook
if [ ! -e "$GITHOOKPATH" ]; then
# there is no hook yet, we can safely install ours
echo "--> Installing Git pre-commit hook to enforce whitespace policy"
cp -p "$PREFIX_DIR/bin/git-whitespace-hook" "$GITHOOKPATH"
# there is already a hook, check whether it is our whitespace hook
local HOOKTAG="$(eval head -n 2 \"$GITHOOKPATH\" | tail -n 1)"
if [ "x$HOOKTAG" = "x# dune-git-whitespace-hook" ]; then
if [ "$PREFIX_DIR/bin/git-whitespace-hook" -nt "$GITHOOKPATH" ]; then
echo "--> Updating Git pre-commit hook with newer version"
cp -p "$PREFIX_DIR/bin/git-whitespace-hook" "$GITHOOKPATH"
fi
else
echo "WARNING: Existing pre-commit hook found!"
echo "WARNING: Skipping installation of DUNE whitespace hook!"
echo "WARNING: If you want to contribute patches to DUNE, you should make sure to call the whitespace hook"
echo "WARNING: (dune-common/bin/git-whitespace-hook) from you custom pre-commit hook, otherwise your commits"
echo "WARNING: might contain trailing whitespace and will not apply cleanly to the official repositories!"
fi
fi
fi
fi
# Apply git configuration settings
if [ -f .vcsetup/config ]; then
echo -n "--> Setting Git configuration entries... "
cat .vcsetup/config | while read; do
# Filter out comments
local COMMENT="$(echo $REPLY | $GREP '^#')"
if [ ! "x$COMMENT" = "x$REPLY" ]; then
Steffen Müthing
committed
# parse line into an array first to catch obvious syntax errors
# like 'option value; rm -rf /'
eval local GIT_ARGS=($REPLY)
Steffen Müthing
committed
git config "${GIT_ARGS[@]}"
fi
done
echo "done"
fi
# Apply user supplied configuration settings
if [ -n "$GIT_CONFIG_FILE" ]; then
if [ -f "$GIT_CONFIG_FILE" ]; then
echo -n "--> Setting custom Git configuration entries from '$GIT_CONFIG_FILE'... "
cat "$GIT_CONFIG_FILE" | while read; do
# Filter out comments
local COMMENT="$(echo $REPLY | $GREP '^#')"
if [ ! "x$COMMENT" = "x$REPLY" ]; then
Steffen Müthing
committed
# parse line into an array first to catch obvious syntax errors
# like 'option value; rm -rf /'
eval local GIT_ARGS=($REPLY)
Steffen Müthing
committed
git config "${GIT_ARGS[@]}"
fi
done
echo "done"
else
echo "WARNING: custom Git config file '$GIT_CONFIG_FILE' not found!"
fi
fi
fi
# Run custom setup scripts
if [ -d .git -o -f .git -o -d .svn -o -d CVS -o -f stamp-vc ]; then
if [ -d .vcsetup/run.d ]; then
for SCRIPT in .vcsetup/run.d/* ; do
if [ -x "$SCRIPT" ]; then
echo "--> Running $SCRIPT"
"$SCRIPT"
fi
done
fi
fi
}
DUNELINK=0
if test -L dune; then
rm dune
DUNELINK=1
fi
if test -d .svn; then
svn update
elif test -d CVS; then
elif test -d .git; then
if test -d ".git/svn" && test -n "`git svn find-rev HEAD`"; then
# If the current HEAD points to a SVN commit, update via git-svn
git svn rebase
else
# Update all remotes (if any)
git remote update
# merge all changes fast-forward style if possible
if ! git merge --ff-only FETCH_HEAD 2> /dev/null; then
echo "$module seems to be using git, and could not be"
echo "updated automatically. Please update it manually."
echo "(Usually, this is done via 'git svn rebase' for modules using"
echo "subversion or 'git merge' for modules which use git natively."
echo "Conflicts can be resolved using 'git mergetool'.)"
fi
fi
else
echo "WARNING: $module is not under a known version control system."
echo " We support svn, git and cvs."
fi
if test "$DUNELINK" != 0 && ! test -d dune; then
echo "WARNING: $module is using the deprecated dune symlink"
ln -s . dune
if test "x$USE_CMAKE" != "xyes" || test ! -e "$(eval "echo \$PATH_$module")/CMakeLists.txt" ; then
Markus Blatt
committed
PARAMS="$CMD_FLAGS"
local M4_PATH=""
if test -f configure.ac && \
( test -d .svn || test -d .git || test -d CVS || test -f stamp-vc ); then
sort_modules $MODULES
for m in $MODULES; do
path="$(eval "echo \$PATH_$m")"
MODULE_PATHS="$MODULE_PATHS\"$path\" "
Markus Blatt
committed
done
if test -f autogen.sh; then
eval echo "WARNING: \$NAME_$module contains obsolete autogen.sh," \
>&2
echo " dune-autogen is used instead." >&2
fi
eval "\"$PREFIX_DIR/bin/dune-autogen\"" "$MODULE_PATHS" "$PARAMS" || exit 1
Markus Blatt
committed
else
echo Skipping dune-autogen
Markus Blatt
committed
echo Skipping dune-autogen because of CMake
Christian Engwer
committed
fi
run_default_configure () {
extract_multiarch
if test "x$USE_CMAKE" = "xyes" && test -e "$(eval "echo \$PATH_$module")/CMakeLists.txt"; then
Markus Blatt
committed
LOCAL_USE_CMAKE=yes
Markus Blatt
committed
LOCAL_USE_CMAKE=no
fi
Markus Blatt
committed
if test -x configure || test "x$LOCAL_USE_CMAKE" = "xyes" ; then
ACLOCAL_FLAGS="-I ."
if test -d "m4"; then
ACLOCAL_FLAGS="$ACLOCAL_FLAGS -I m4"
fi
MY_MODULES=
# get dependencies & suggestions
sort_modules $module
for m in $MODULES; do
path="$(eval "echo \$PATH_$m")"
if test "x$LOCAL_USE_CMAKE" = "xyes"; then
#
# Translate the configure PARMS to cmake
export PARAMS
export CMAKE_PARAMS
module_translate_options_am2cmake $m $path/lib
fi
if test x$module = x$m; then continue; fi # skip myself
for dir in $path/m4 $path/share/dune/aclocal $path/share/aclocal; do
if test -d "$dir"; then
ACLOCAL_FLAGS="$ACLOCAL_FLAGS -I $dir"
fi
done
if test -d "$path/$BUILDDIR"; then
PARAMS="$PARAMS \"--with-$name=$path/$BUILDDIR\""
else
Markus Blatt
committed
if test x$(eval echo \$INST_$mod) != xyes; then
Markus Blatt
committed
PARAMS="$PARAMS \"--with-$name=$path\""
fi
fi
if test "x$LOCAL_USE_CMAKE" = "xyes"; then
if test -d "$path/$BUILDDIR"; then
CMAKE_PARAMS="$CMAKE_PARAMS \"-D""$name""_DIR=$path/$BUILDDIR\""
else
TMP_PARAMS="\"-D""$name""_DIR=$path\""
for i in $MULTIARCH_LIBDIR lib lib64 lib32; do
if test -d "$path/$i/cmake/$name"; then
TMP_PARAMS="\"-D""$name""_DIR=$path/$i/cmake/$name\""
break;
fi
done
CMAKE_PARAMS="$CMAKE_PARAMS $TMP_PARAMS"
Markus Blatt
committed
fi
done
Markus Blatt
committed
if test "x$HAVE_duneweb" == "xyes"; then
PARAMS="$PARAMS \"--with-duneweb=$PATH_duneweb\""
fi
Markus Blatt
committed
if test "x$LOCAL_USE_CMAKE" = "xyes"; then
# we have to export the compiler and compiler flags
# such that they are honored by cmake.
flags="CXX CC CXXFLAGS CFLAGS CPPFLAGS LDFLAGS F77 FFLAGS FLIBS FC FCFLAGS FCLIBS LIBS"
for i in $flags; do
cflags=`echo "$PARAMS" | $GREP $i= | $SED -e "s/.*\($i=\"[^\"]*\"\).*/\1/" -e "s/.*\($i='[^']*'\).*/\1/"`
if test -n "$cflags" && test "$PARAMS" != "$cflags" ; then
PREPARAMS="$PREPARAMS $cflags"
else
cflags=`echo "$PARAMS" | $GREP $i= | $SED -e "s/.*\($i=[^$BLANK]*\).*/\1/"`
if test -n "$cflags" && test "$PARAMS" != "$cflags" ; then
PREPARAMS="$PREPARAMS $cflags"
fi
done
# create build directory if requested
test -d "$BUILDDIR" || mkdir "$BUILDDIR"
SRCDIR="$PWD"
echo "$PREPARAMS $CMAKE -DCMAKE_MODULE_PATH=\"$CMAKE_MODULE_PATH\" $CMAKE_PARAMS $CMAKE_FLAGS \"$SRCDIR\""
eval $PREPARAMS $CMAKE "-DCMAKE_MODULE_PATH=\"$CMAKE_MODULE_PATH\" $CMAKE_PARAMS $CMAKE_FLAGS \"$SRCDIR\"" || exit 1
else
PARAMS="$PARAMS ACLOCAL_AMFLAGS=\"$ACLOCAL_FLAGS\""
Markus Blatt
committed
echo ./configure "$PARAMS"
# create build directory if requested
Markus Blatt
committed
if test -n "$BUILDDIR"; then
test -d "$BUILDDIR" || mkdir "$BUILDDIR"
SRCDIR="$PWD"
cd "$BUILDDIR"
eval "$SRCDIR/configure" "$PARAMS" || exit 1
else
eval ./configure "$PARAMS" || exit 1
fi
fi
else
if test -f configure.in || test -f configure.ac; then
echo "ERROR: configure.[in|ac] found, but configure missing." >&2
echo "Did you forget to run autoconf?" >&2
echo "Perhaps you didn't update your project to" >&2
echo "the latest buildsystem changes (FS#382)." >&2
echo "If your project is under version control, please make sure" >&2
echo "you have a file stamp-vc in you top_srcdir." >&2
test ! -d "$BUILDDIR" || cd "$BUILDDIR"
for cmd in vcsetup autogen configure make; do
eval echo "--- calling $cmd for \$NAME_${module} ---"
load_opts $cmd
run_$cmd
done
PARAMS="$CMD_FLAGS"
eval svn "$PARAMS"
run_default_git () {
if test -d .git; then
PARAMS="$CMD_FLAGS"
eval git "$PARAMS"
fi
}
###############################################
echo "Execution of $(basename "$0") terminated due to errors!" >&2
(
echo "Usage: $(basename "$0") [OPTIONS] COMMANDS [COMMAND-OPTIONS]"
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 "OPTIONS:"
Markus Blatt
committed
echo " -h, --help show this help"
echo " --debug enable debug output of this script"
echo " --use-cmake use cmake instead autotools for building"
Markus Blatt
committed
echo " --module=mod only apply the actions on module mod"
echo " and all modules it depends on"
echo " --only=mod only apply the actions on module mod"
echo " and not the modules it depends on"
echo " --current only apply the actions on the current module,"
echo " the one whose source tree we are standing in"
echo " --resume resume a previous run (only consider the modules"
echo " not built successfully on the previous run)"
echo " --skipfirst skip the first module (use with --resume)"
echo " --opts=FILE load default options from FILE"
echo " (see dune-common/doc/example.opts)"
echo " --builddir=NAME make out-of-source builds in a subdir NAME."
Markus Blatt
committed
echo " This directory is created inside each module."
echo " --[COMMAND]-opts=opts set options for COMMAND"
echo " (this is mainly useful for the 'all' COMMAND)"
echo "COMMANDS:"
echo " Colon-separated list of commands. Available commands are:"
printf " \`help'\tguess what :-)\n"
printf " \`print'\tprint the list of modules sorted after their dependencies\n"
printf " \`info'\tsame as \`print\', but including whether it is a dependency or suggestion\n"
for i in $COMMANDS; do
printf " \`$i'\t$(eval echo \$${i}_HELP)\n"
printf " \`export'\trun eval \`dunecontrol export\` to save the list of\n"
printf " \t\tdune.module files to the DUNE_CONTROL_PATH variable\n"
# create the module list
create_module_list() {
Martin Nolte
committed
# try to get the resume file name from the options
if test -z "$RESUME_FILE" && test -n "$DUNE_OPTS_FILE"; then
export RESUME_FILE="$(eval . $DUNE_OPTS_FILE; eval echo \$RESUME_FILE)"
fi
Martin Nolte
committed
if test "$RESUME_FLAG" = "yes" ; then
if ! test -s "$RESUME_FILE" ; then
echo "Error: No previous run to resume. Please make sure that the RESUME_FILE"
echo " is the name of a writeable file (currently it is '$RESUME_FILE')"
exit 1
fi
export MODULES=
RESUME="`cat "$RESUME_FILE"`"
Martin Nolte
committed
for a in $RESUME ; do
export NAME_`fix_variable_name $a`="$a"
fix_and_assign MODULE "$a"
export SEARCH_MODULES="$SEARCH_MODULES $MODULE"
export ONLY="$ONLY $MODULE"
Martin Nolte
committed
done
if test "x$ONLY" != x; then
export MODULES="$ONLY"
elif test "x$SEARCH_MODULES" != "x"; then
sort_modules $SEARCH_MODULES
Christian Engwer
committed
else
sort_modules $MODULES
if test "x$REVERSE_FLAG" = "xyes"; then
export MODULES="$REVERSEMODULES"
fi
if test "x$SKIPFIRST" = "xyes" ; then
export MODULES=`echo $MODULES " " | cut '--delimiter= ' --fields=2-`
# warn about superseeded modules:
if test -n "$superseded_modules"; then
# sort moules list and make it unique.
superseded_modules=$(echo $superseded_modules | tr ' ' '\n'| sort -u)
echo >&2
echo "The following local modules do supersede the corresponding installed ones:" >&2
echo "$superseded_modules" >&2
echo >&2
fi
# print the module list
print_module_list() {
DELIM=$1
shift
while test -n "$2"; do
echo -n "$(eval echo \$NAME_$1)$DELIM"
shift
done
echo -n "$(eval echo \$NAME_$1)"
}
Christian Engwer
committed
# clear variables
export SEARCH_MODULES=""
export MODULES=""
export ONLY=""
export REVERSE_FLAG=no
export SKIPFIRST=no
Christian Engwer
committed
Markus Blatt
committed
# read environment variable USE_CMAKE
export DUNE_USE_CMAKE="$(echo $USE_CMAKE)"
# parse commandline parameters
set +e
# stolen from configure...
# when no option is set, this returns an error code
arg=`expr "x$option" : 'x[^=]*=\(.*\)'`
set -e
echo "ERROR: Parameter for --opts is missing" >&2
echo >&2
DUNE_OPTS_FILE=`canonicalname $arg`
echo "ERROR: could not read opts file \"$DUNE_OPTS_FILE\"" >&2
echo >&2
--*-opts=*)
optcmd=`expr "x$option=" : 'x--\([^-]*\)-opts=.*'`
if is_command $optcmd; then
COMMAND=`echo $optcmd | tr '[:lower:]' '[:upper:]'`
export ${COMMAND}_FLAGS="$arg"
else
usage
echo "ERROR: unknown option \"$option\"" >&2
exit 1
fi
command=print
break
;;
echo "ERROR: Parameter for --module is missing" >&2
echo >&2
for a in `echo $arg | tr ',' ' '`; do
fix_and_assign MODULE "$a"
export SEARCH_MODULES="$SEARCH_MODULES $MODULE"
done
echo "ERROR: Parameter for --only is missing" >&2
echo >&2
for a in `echo $arg | tr ',' ' '`; do
fix_and_assign MODULE "$a"
export SEARCH_MODULES="$SEARCH_MODULES $MODULE"
export ONLY="$ONLY $MODULE"
done
;;
export DUNE_BUILDDIR=$arg
;;
--no-builddir)
export DUNE_BUILDDIR=""
;;
--skipversioncheck)
;;
while ! test -f $CONTROL; do
if test "$OLDPWD" = "$PWD"; then
echo "You are not inside the source tree of a DUNE module." >&2
exit -1
fi
done;
parse_control $PWD/$CONTROL
fix_and_assign MODULE "$module"
export SEARCH_MODULES="$SEARCH_MODULES $MODULE"
export ONLY="$ONLY $MODULE"
--reverse)
export REVERSE_FLAG="yes"
;;
--skipfirst)
export SKIPFIRST=yes
;;
Markus Blatt
committed
--use-cmake|--cmake)
export DUNE_USE_CMAKE=yes
Markus Blatt
committed
;;
Markus Blatt
committed
--no-cmake)
export DUNE_USE_CMAKE=no
;;
--debug) true ;; # ignore this option, it is handled right at the beginning
echo "ERROR: Unknown option \`$option'" >&2
echo >&2
exit 1