| m4_if([general.m4sh -- general shell script boiler plate -*- Autoconf -*- |
| |
| Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. |
| Written by Gary V. Vaughan, 2004 |
| |
| This file is part of GNU Cvs-utils. |
| |
| GNU Cvs-utils is free software; you can redistribute it and/or |
| modify it under the terms of the GNU General Public License as |
| published by the Free Software Foundation; either version 2 of |
| the License, or (at you option) any later version. |
| |
| As a special exception to the GNU General Public License, if you |
| distribute this file as part of a program or library that contains |
| a configuration script generated by Autoconf, you may include this |
| file under the same distribution terms that you use for the rest |
| of that program. |
| |
| GNU Cvs-utils is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU |
| General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with GNU Libtool; see the file COPYING. If not, a copy |
| can be downloaded from http://www.gnu.org/licenses/gpl.html, |
| or obtained by writing to the Free Software Foundation, Inc., |
| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
| ])dnl |
| |
| m4_define([M4SH_VERBATIM], [$1])dnl |
| |
| M4SH_VERBATIM([[ |
| : ${CP="cp -f"} |
| : ${ECHO="echo"} |
| : ${EGREP="@EGREP@"} |
| : ${FGREP="@FGREP@"} |
| : ${GREP="@GREP@"} |
| : ${LN_S="@LN_S@"} |
| : ${MAKE="make"} |
| : ${MKDIR="mkdir"} |
| : ${MV="mv -f"} |
| : ${RM="rm -f"} |
| : ${SED="@SED@"} |
| : ${SHELL="${CONFIG_SHELL-/bin/sh}"} |
| : ${Xsed="$SED -e 1s/^X//"} |
| |
| # Global variables: |
| EXIT_SUCCESS=0 |
| EXIT_FAILURE=1 |
| EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. |
| EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. |
| |
| exit_status=$EXIT_SUCCESS |
| |
| # Make sure IFS has a sensible default |
| lt_nl=' |
| ' |
| IFS=" $lt_nl" |
| |
| dirname="s,/[^/]*$,," |
| basename="s,^.*/,," |
| |
| # func_dirname_and_basename file append nondir_replacement |
| # perform func_basename and func_dirname in a single function |
| # call: |
| # dirname: Compute the dirname of FILE. If nonempty, |
| # add APPEND to the result, otherwise set result |
| # to NONDIR_REPLACEMENT. |
| # value returned in "$func_dirname_result" |
| # basename: Compute filename of FILE. |
| # value retuned in "$func_basename_result" |
| # Implementation must be kept synchronized with func_dirname |
| # and func_basename. For efficiency, we do not delegate to |
| # those functions but instead duplicate the functionality here. |
| func_dirname_and_basename () |
| { |
| # Extract subdirectory from the argument. |
| func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` |
| if test "X$func_dirname_result" = "X${1}"; then |
| func_dirname_result="${3}" |
| else |
| func_dirname_result="$func_dirname_result${2}" |
| fi |
| func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` |
| } |
| |
| # Generated shell functions inserted here. |
| |
| # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh |
| # is ksh but when the shell is invoked as "sh" and the current value of |
| # the _XPG environment variable is not equal to 1 (one), the special |
| # positional parameter $0, within a function call, is the name of the |
| # function. |
| progpath="$0" |
| |
| # The name of this program: |
| # In the unlikely event $progname began with a '-', it would play havoc with |
| # func_echo (imagine progname=-n), so we prepend ./ in that case: |
| func_dirname_and_basename "$progpath" |
| progname=$func_basename_result |
| case $progname in |
| -*) progname=./$progname ;; |
| esac |
| |
| # Make sure we have an absolute path for reexecution: |
| case $progpath in |
| [\\/]*|[A-Za-z]:\\*) ;; |
| *[\\/]*) |
| progdir=$func_dirname_result |
| progdir=`cd "$progdir" && pwd` |
| progpath="$progdir/$progname" |
| ;; |
| *) |
| save_IFS="$IFS" |
| IFS=: |
| for progdir in $PATH; do |
| IFS="$save_IFS" |
| test -x "$progdir/$progname" && break |
| done |
| IFS="$save_IFS" |
| test -n "$progdir" || progdir=`pwd` |
| progpath="$progdir/$progname" |
| ;; |
| esac |
| |
| # Sed substitution that helps us do robust quoting. It backslashifies |
| # metacharacters that are still active within double-quoted strings. |
| Xsed="${SED}"' -e 1s/^X//' |
| sed_quote_subst='s/\([`"$\\]\)/\\\1/g' |
| |
| # Same as above, but do not quote variable references. |
| double_quote_subst='s/\(["`\\]\)/\\\1/g' |
| |
| # Re-`\' parameter expansions in output of double_quote_subst that were |
| # `\'-ed in input to the same. If an odd number of `\' preceded a '$' |
| # in input to double_quote_subst, that '$' was protected from expansion. |
| # Since each input `\' is now two `\'s, look for any number of runs of |
| # four `\'s followed by two `\'s and then a '$'. `\' that '$'. |
| bs='\\' |
| bs2='\\\\' |
| bs4='\\\\\\\\' |
| dollar='\$' |
| sed_double_backslash="\ |
| s/$bs4/&\\ |
| /g |
| s/^$bs2$dollar/$bs&/ |
| s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g |
| s/\n//g" |
| |
| # Standard options: |
| opt_dry_run=false |
| opt_help=false |
| opt_quiet=false |
| opt_verbose=false |
| opt_warning=: |
| |
| # func_echo arg... |
| # Echo program name prefixed message, along with the current mode |
| # name if it has been set yet. |
| func_echo () |
| { |
| $ECHO "$progname${mode+: }$mode: $*" |
| } |
| |
| # func_verbose arg... |
| # Echo program name prefixed message in verbose mode only. |
| func_verbose () |
| { |
| $opt_verbose && func_echo ${1+"$@"} |
| |
| # A bug in bash halts the script if the last line of a function |
| # fails when set -e is in force, so we need another command to |
| # work around that: |
| : |
| } |
| |
| # func_error arg... |
| # Echo program name prefixed message to standard error. |
| func_error () |
| { |
| $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 |
| } |
| |
| # func_warning arg... |
| # Echo program name prefixed warning message to standard error. |
| func_warning () |
| { |
| $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 |
| |
| # bash bug again: |
| : |
| } |
| |
| # func_fatal_error arg... |
| # Echo program name prefixed message to standard error, and exit. |
| func_fatal_error () |
| { |
| func_error ${1+"$@"} |
| exit $EXIT_FAILURE |
| } |
| |
| # func_fatal_help arg... |
| # Echo program name prefixed message to standard error, followed by |
| # a help hint, and exit. |
| func_fatal_help () |
| { |
| func_error ${1+"$@"} |
| func_fatal_error "$help" |
| } |
| help="Try \`$progname --help' for more information." ## default |
| |
| |
| # func_grep expression filename |
| # Check whether EXPRESSION matches any line of FILENAME, without output. |
| func_grep () |
| { |
| $GREP "$1" "$2" >/dev/null 2>&1 |
| } |
| |
| |
| # func_mkdir_p directory-path |
| # Make sure the entire path to DIRECTORY-PATH is available. |
| func_mkdir_p () |
| { |
| my_directory_path="$1" |
| my_dir_list= |
| |
| if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then |
| |
| # Protect directory names starting with `-' |
| case $my_directory_path in |
| -*) my_directory_path="./$my_directory_path" ;; |
| esac |
| |
| # While some portion of DIR does not yet exist... |
| while test ! -d "$my_directory_path"; do |
| # ...make a list in topmost first order. Use a colon delimited |
| # list incase some portion of path contains whitespace. |
| my_dir_list="$my_directory_path:$my_dir_list" |
| |
| # If the last portion added has no slash in it, the list is done |
| case $my_directory_path in */*) ;; *) break ;; esac |
| |
| # ...otherwise throw away the child directory and loop |
| my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` |
| done |
| my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` |
| |
| save_mkdir_p_IFS="$IFS"; IFS=':' |
| for my_dir in $my_dir_list; do |
| IFS="$save_mkdir_p_IFS" |
| # mkdir can fail with a `File exist' error if two processes |
| # try to create one of the directories concurrently. Don't |
| # stop in that case! |
| $MKDIR "$my_dir" 2>/dev/null || : |
| done |
| IFS="$save_mkdir_p_IFS" |
| |
| # Bail out if we (or some other process) failed to create a directory. |
| test -d "$my_directory_path" || \ |
| func_fatal_error "Failed to create \`$1'" |
| fi |
| } |
| |
| |
| # func_mktempdir [string] |
| # Make a temporary directory that won't clash with other running |
| # libtool processes, and avoids race conditions if possible. If |
| # given, STRING is the basename for that directory. |
| func_mktempdir () |
| { |
| my_template="${TMPDIR-/tmp}/${1-$progname}" |
| |
| if test "$opt_dry_run" = ":"; then |
| # Return a directory name, but don't create it in dry-run mode |
| my_tmpdir="${my_template}-$$" |
| else |
| |
| # If mktemp works, use that first and foremost |
| my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` |
| |
| if test ! -d "$my_tmpdir"; then |
| # Failing that, at least try and use $RANDOM to avoid a race |
| my_tmpdir="${my_template}-${RANDOM-0}$$" |
| |
| save_mktempdir_umask=`umask` |
| umask 0077 |
| $MKDIR "$my_tmpdir" |
| umask $save_mktempdir_umask |
| fi |
| |
| # If we're not in dry-run mode, bomb out on failure |
| test -d "$my_tmpdir" || \ |
| func_fatal_error "cannot create temporary directory \`$my_tmpdir'" |
| fi |
| |
| $ECHO "X$my_tmpdir" | $Xsed |
| } |
| |
| |
| # func_quote_for_eval arg |
| # Aesthetically quote ARG to be evaled later. |
| # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT |
| # is double-quoted, suitable for a subsequent eval, whereas |
| # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters |
| # which are still active within double quotes backslashified. |
| func_quote_for_eval () |
| { |
| case $1 in |
| *[\\\`\"\$]*) |
| func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; |
| *) |
| func_quote_for_eval_unquoted_result="$1" ;; |
| esac |
| |
| case $func_quote_for_eval_unquoted_result in |
| # Double-quote args containing shell metacharacters to delay |
| # word splitting, command substitution and and variable |
| # expansion for a subsequent eval. |
| # Many Bourne shells cannot handle close brackets correctly |
| # in scan sets, so we specify it separately. |
| *[\@<:@\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*@:>@*|"") |
| func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" |
| ;; |
| *) |
| func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" |
| esac |
| } |
| |
| |
| # func_quote_for_expand arg |
| # Aesthetically quote ARG to be evaled later; same as above, |
| # but do not quote variable references. |
| func_quote_for_expand () |
| { |
| case $1 in |
| *[\\\`\"]*) |
| my_arg=`$ECHO "X$1" | $Xsed \ |
| -e "$double_quote_subst" -e "$sed_double_backslash"` ;; |
| *) |
| my_arg="$1" ;; |
| esac |
| |
| case $my_arg in |
| # Double-quote args containing shell metacharacters to delay |
| # word splitting and command substitution for a subsequent eval. |
| # Many Bourne shells cannot handle close brackets correctly |
| # in scan sets, so we specify it separately. |
| *[\@<:@\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*@:>@*|"") |
| my_arg="\"$my_arg\"" |
| ;; |
| esac |
| |
| func_quote_for_expand_result="$my_arg" |
| } |
| |
| |
| # func_show_eval cmd [fail_exp] |
| # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is |
| # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP |
| # is given, then evaluate it. |
| func_show_eval () |
| { |
| my_cmd="$1" |
| my_fail_exp="${2-:}" |
| |
| ${opt_silent-false} || { |
| func_quote_for_expand "$my_cmd" |
| eval "func_echo $func_quote_for_expand_result" |
| } |
| |
| if ${opt_dry_run-false}; then :; else |
| eval "$my_cmd" |
| my_status=$? |
| if test "$my_status" -eq 0; then :; else |
| eval "(exit $my_status); $my_fail_exp" |
| fi |
| fi |
| } |
| |
| |
| # func_show_eval_locale cmd [fail_exp] |
| # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is |
| # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP |
| # is given, then evaluate it. Use the saved locale for evaluation. |
| func_show_eval_locale () |
| { |
| my_cmd="$1" |
| my_fail_exp="${2-:}" |
| |
| ${opt_silent-false} || { |
| func_quote_for_expand "$my_cmd" |
| eval "func_echo $func_quote_for_expand_result" |
| } |
| |
| if ${opt_dry_run-false}; then :; else |
| eval "$lt_user_locale |
| $my_cmd" |
| my_status=$? |
| eval "$lt_safe_locale" |
| if test "$my_status" -eq 0; then :; else |
| eval "(exit $my_status); $my_fail_exp" |
| fi |
| fi |
| } |
| ]]) |
| |