#!/bin/echo DOT SCRIPT please source # A few absolute requirements for non-failure if [ "x$SCRIPT_NAME" == "x" ]; then SCRIPT_NAME=$(basename $0) fi if [ "x$ECHO" == "x" ]; then ECHO=/bin/echo fi # message functions # Usage: zmap_message_out Your Message function zmap_message_out { now=$(date +%H:%M:%S) $ECHO "[$SCRIPT_NAME ($now)] $@" } # Usage: zmap_message_err Your Message function zmap_message_err { now=$(date +%H:%M:%S) $ECHO "[$SCRIPT_NAME ($now)] $@" >&2 } # Usage: zmap_message_exit Your Message function zmap_message_exit { zmap_message_err "$@" exit 1; } # Usage: zmap_here_message_exit <<EOF # Your Message # EOF function zmap_here_message_exit { IFS='.' while read -t1 line; do $ECHO "$line" >&2 done; exit 1; } function zmap_message_file { if [ "x" != "x$1" ]; then local file=$1 shift $ECHO "[$SCRIPT_NAME ($now)] $*" >> $file fi } function zmap_create_file { if [ "x" != "x$1" ]; then $ECHO -n "" > $1 fi } # last absolute requirements if [ "x$BASE_DIR" == "x" ]; then zmap_message_exit "$0 needs to set BASE_DIR!" fi function zmap_check { $ECHO > /dev/null } # common variables ZMAP_TRUE=yes ZMAP_FALSE=no # default assignments... zmap_check ${RM:=rm} zmap_check ${MKDIR:=mkdir} # common functions # Usage: zmap_cd <dir> function zmap_cd { if [ "x$SILENT_CD" != "x$ZMAP_TRUE" ]; then zmap_message_out "cd $1" fi cd $1 || zmap_message_exit "Failed to cd to $1" if [ "x$SILENT_CD" != "x$ZMAP_TRUE" ]; then zmap_message_out "Now in $(pwd)" fi } function zmap_mkdir { $MKDIR -p $1 || zmap_message_exit "Failed to mkdir $1" } function zmap_clean_dir { if [ -d $1 ]; then save_dir=$(pwd) zmap_cd $1 zmap_message_out "Running $RM -rf ./*" $RM -rf ./* || zmap_message_exit "Failed to remove files in $1" zmap_cd $save_dir fi } # Usage: zmap_pathmunge <dir> [prepend] function zmap_pathmunge { # check for not existing if ! echo $PATH | egrep -q "(^|:)$1($|:)" ; then if [ "$2" = "prepend" ] ; then PATH=$1:$PATH else PATH=$PATH:$1 fi fi } # Usage: zmap_goto_cvs_module_root function zmap_goto_cvs_module_root { if [ -f CVS/Repository ]; then LOCATION=$(cat CVS/Repository) current=$(pwd) zmap_message_out "Navigating out of $LOCATION" while [ "x$LOCATION" != "x." ]; do CVS_MODULE=$(basename $LOCATION) LOCATION=$(dirname $LOCATION) zmap_message_out "Leaving $CVS_MODULE." CVS_MODULE_LOCAL=$(basename $current) current=$(dirname $current) zmap_cd $current done zmap_cd $CVS_MODULE_LOCAL else zmap_message_exit "Failed to find Repository file in CVS directory." fi } # Usage: zmap_dump_environment <filename> function zmap_dump_environment { local dump_file=$1 [ "x$dump_file" != "x" ] || dump_file=zmap.env.log set > $dump_file } # prepend PREFIX to all Variables required. # Usage: zmap_register_prefix_in_env <PREFIX> function zmap_register_prefix_in_env { local prefix=$1 [ "x$prefix" != "x" ] || prefix=/non-existent if [ -d $prefix ]; then # PATH first zmap_pathmunge $prefix/bin prepend # PKG_CONFIG (only if not set!) if [ "x$PKG_CONFIG" == "x" ]; then PKG_CONFIG=$prefix/bin/pkg-config fi # PKG_CONFIG_PATH if [ "x$PKG_CONFIG_PATH" != "x" ]; then PKG_CONFIG_PATH="$prefix/lib/pkgconfig:$PKG_CONFIG_PATH" else PKG_CONFIG_PATH="$prefix/lib/pkgconfig" fi # LD_LIBRARY_PATH if [ "x$LD_LIBRARY_PATH" != "x" ]; then LD_LIBRARY_PATH="$prefix/lib:$LD_LIBRARY_PATH" else LD_LIBRARY_PATH="$prefix/lib" fi # LDFLAGS if [ "x$LDFLAGS" != "x" ]; then LDFLAGS="-L$prefix/lib $LDFLAGS" else LDFLAGS="-L$prefix/lib" fi if [ "x$LD_RUN_PATH" != "x" ]; then LD_RUN_PATH="$prefix/lib:$LD_RUN_PATH" else LD_RUN_PATH=$prefix/lib fi # CPPFLAGS if [ "x$CPPFLAGS" != "x" ]; then CPPFLAGS="-I$prefix/include $CPPFLAGS" else CPPFLAGS="-I$prefix/include" fi export PKG_CONFIG export PKG_CONFIG_PATH export LD_LIBRARY_PATH export LDFLAGS export CPPFLAGS else zmap_message_err "$prefix doesn't exist. Are you sure?" fi } function zmap_register_prefix_as_rpath { local prefix=$1 [ "x$prefix" != "x" ] || prefix=/non-existent if [ -d $prefix ]; then # LDFLAGS if [ "x$LDFLAGS" != "x" ]; then LDFLAGS="-Xlinker -rpath -Xlinker $prefix/lib $LDFLAGS" else LDFLAGS="-Xlinker -rpath -Xlinker $prefix/lib" fi fi } # Usage: zmap_tar_dir <directory> function zmap_tar_dir { if [ "x$1" != "x" ]; then restore_dir=$(pwd) parent_dir=$(dirname $1) tar_name=$(basename $1) zmap_cd $parent_dir tar -zcf$tar_name.tar.gz $tar_name || zmap_message_exit "Failed to tar $tar_name directory in $parent_dir" zmap_cd $tar_name rm -rf * cd .. rmdir $tar_name zmap_cd $restore_dir else zmap_message_exit "Usage: zmap_tar_dir <directory>" fi } # Usage: zmap_tar_old_releases <RELEASES_DIR> function zmap_tar_old_releases { if [ "x$1" != "x" ]; then local releases_dir=$1 previous_releases=$(find $releases_dir -type d -maxdepth 1 -name 'ZMap*BUILD') for prev_release in $previous_releases; do zmap_tar_dir $prev_release done fi } # Usage: zmap_delete_ancient_tars <RELEASES_DIR> function zmap_delete_ancient_tars { if [ "x$1" != "x" ]; then local releases_dir=$1 restore_dir=$(pwd) zmap_cd $releases_dir # ls -t below requires that they are all in time order, # which of course they should be, but... touch_files_for_time_order="" if [ "x$touch_files_for_time_order" != "x" ]; then all_releases=$(ls ZMap*BUILD.tar.gz) for file in $all_releases; do zmap_message_out "Touching file '$file'"; sleep 10; touch $file; done fi all_releases=$(ls -t ZMap*BUILD.tar.gz) let counter=1; for release in $all_releases; do let counter=$counter+1 if [ $counter -gt 12 ]; then zmap_message_out "Removing ancient release $release" # When I'm confident it works... rm -f $release else zmap_message_out "Keeping release $release" fi done zmap_cd $restore_dir fi } # Usage: zmap_scp_path_to_host_path <scp-path> function zmap_scp_path_to_host_path { if [ "x$1" != "x" ]; then scp_path=$1 local IFS=:: for p in $scp_path do if [ "x$TAR_TARGET_HOST" == "x" ]; then TAR_TARGET_HOST=$p elif [ "x$TAR_TARGET_PATH" == "x" ]; then TAR_TARGET_PATH=$p fi done [ "x$TAR_TARGET_HOST" != "x" ] || zmap_message_exit "No Host set." [ "x$TAR_TARGET_PATH" != "x" ] || zmap_message_exit "No Path set." else zmap_message_exit "Usage: zmap_scp_path_to_host_path <scp-path>" fi } # We need to be able to login to a cluster machine using the alias, # but later access that specific node. These functions allow that. # Usage: zmap_write_cluster_config function zmap_write_cluster_config { if [ ! -f $ZMAP_CLUSTER_CONFIG_FILE ]; then if [ "x$ZMAP_BUILD_MACHINES" != "x" ]; then HOSTNAMES="" for cluster in $ZMAP_BUILD_MACHINES ; do TMP=$(ssh $ZMAP_SSH_OPTIONS $cluster 'hostname' 2>/dev/null) HOSTNAMES="$HOSTNAMES $TMP" done ZMAP_BUILD_MACHINES=$HOSTNAMES fi echo "ZMAP_BUILD_MACHINES=\"$ZMAP_BUILD_MACHINES\"" > $ZMAP_CLUSTER_CONFIG_FILE fi } # Usage: zmap_read_cluster_config function zmap_read_cluster_config { if [ -f $ZMAP_CLUSTER_CONFIG_FILE ]; then . $ZMAP_CLUSTER_CONFIG_FILE || zmap_message_err "Failed reading $ZMAP_CLUSTER_CONFIG_FILE" else zmap_message_err "$ZMAP_CLUSTER_CONFIG_FILE does not exist" fi } # Usage: zmap_remove_cluster_config function zmap_remove_cluster_config { if [ -f $ZMAP_CLUSTER_CONFIG_FILE ]; then rm -f $ZMAP_CLUSTER_CONFIG_FILE fi } # zmap_edit_variable_add & zmap_edit_variable_del are cover functions # for zmap_edit_variable which adds or removes a string to the # variable value as if the value is a space separated array. # e.g. a list of files that must be removed. # Usage: zmap_edit_variable_add VariableName VariableValue function zmap_edit_variable_add { zmap_edit_variable $1 add $2 } # Usage: zmap_edit_variable_del VariableName VariableValue function zmap_edit_variable_del { zmap_edit_variable $1 remove $2 } # Usage: zmap_edit_variable VariableName [add|remove] VariableValue function zmap_edit_variable { name=$1 add_remove=$2 value=$3 eval "VARIABLE=\${$name}" eval "VARIABLE_OUT=" #echo "$name=$VARIABLE" for part in $VARIABLE do if [ "x$part" != "x$value" ]; then if [ "x$VARIABLE_OUT" != "x" ]; then VARIABLE_OUT="$VARIABLE_OUT $part" else VARIABLE_OUT="$part" fi fi done if [ "x$add_remove" == "xadd" ]; then if [ "x$VARIABLE_OUT" != "x" ]; then VARIABLE_OUT="$VARIABLE_OUT $value" else VARIABLE_OUT="$value" fi fi #echo "variable out = '$VARIABLE_OUT'" eval $name='$VARIABLE_OUT' } # Usage: zmap_trap_handle function zmap_trap_handle { zmap_message_exit "Signal caught!"; } trap 'zmap_trap_handle;' INT trap 'zmap_trap_handle;' TERM trap 'zmap_trap_handle;' QUIT # This should be the last thing. set -o history