[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] Use getopt.m4sh to generate libtoolize option parser.
From: |
Gary V. Vaughan |
Subject: |
[PATCH] Use getopt.m4sh to generate libtoolize option parser. |
Date: |
Thu, 10 Jun 2010 22:18:08 +0700 |
Okay to push?
* libtoolize.m4sh: Replace hand written shell code with a
call to M4SH_GETOPTS. Move some premature initialization
from the preamble to the main part of the script. Exit with
an error on spurious additional non-option arguments.
(envopts): Integrate LIBTOOLIZE_OPTIONS pre-parsing into the
main option parsing loop.
(opt_copy): Use in place of and in the reverse sense of the
old opt_link variable.
---
ChangeLog | 10 ++
libtoolize.m4sh | 252 ++++++++++++++++++++++---------------------------------
2 files changed, 111 insertions(+), 151 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index ce76dcf..431e786 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
2010-06-10 Gary V. Vaughan <address@hidden>
+ Use getopt.m4sh to generate libtoolize option parser.
+ * libtoolize.m4sh: Replace hand written shell code with a
+ call to M4SH_GETOPTS. Move some premature initialization
+ from the preamble to the main part of the script. Exit with
+ an error on spurious additional non-option arguments.
+ (envopts): Integrate LIBTOOLIZE_OPTIONS pre-parsing into the
+ main option parsing loop.
+ (opt_copy): Use in place of and in the reverse sense of the
+ old opt_link variable.
+
Support shell tracing inside functions even with ksh.
* libltdl/config/getopt.m4sh: Set $opt_debug to be either `:'
or `set -x' depending on whether --debug was parsed to match
diff --git a/libtoolize.m4sh b/libtoolize.m4sh
index cfe4aaa..cd4851d 100644
--- a/libtoolize.m4sh
+++ b/libtoolize.m4sh
@@ -75,55 +75,13 @@ m4_divert_pop
m4_include([getopt.m4sh])
M4SH_VERBATIM([[
-# test EBCDIC or ASCII
-case `echo X|tr X '\101'` in
- A) # ASCII based system
- # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
- SP2NL='tr \040 \012'
- NL2SP='tr \015\012 \040\040'
- ;;
- *) # EBCDIC based system
- SP2NL='tr \100 \n'
- NL2SP='tr \r\n \100\100'
- ;;
-esac
-
-
-# Command line options:
-opt_debug=:
-opt_force=false
-opt_install=false
-opt_link=:
-opt_ltdl=false
-
-seen_autoconf=false
-seen_libtool=false
-seen_ltdl=false
-
# ltdl can be installed to be self-contained (subproject, the default);
# or to be configured by a parent project, either with a recursive or
# nonrecursive automake driven make:
ltdl_mode=
# Locations for important files:
address@hidden@
address@hidden@
address@hidden@
address@hidden@
address@hidden@
-auxdir=
-macrodir=
ltdldir=
-configure_ac=configure.in
-
-# Lists of all files libtoolize has ever installed. These are removed
-# before installing the latest files when --force was passed to help
-# ensure a clean upgrade.
-# Do not remove config.guess nor config.sub, we don't install them
-# without --install, and the project may not be using Automake.
-all_pkgconfig_files="ltmain.sh"
-all_pkgmacro_files="argz.m4 libtool.m4 ltdl.m4 ltoptions.m4 ltsugar.m4
ltversion.in ltversion.m4 lt~obsolete.m4"
-all_pkgltdl_files="COPYING.LIB Makefile Makefile.in Makefile.inc Makefile.am
README acinclude.m4 aclocal.m4 argz_.h argz.c config.h.in config-h.in configure
configure.ac configure.in libltdl/lt__alloc.h libltdl/lt__dirent.h
libltdl/lt__glibc.h libltdl/lt__private.h libltdl/lt__strl.h
libltdl/lt_dlloader.h libltdl/lt_error.h libltdl/lt_system.h libltdl/slist.h
loaders/dld_link.c loaders/dlopen.c loaders/dyld.c loaders/load_add_on.c
loaders/loadlibrary.c loaders/preopen.c loaders/shl_load.c lt__alloc.c
lt__dirent.c lt__strl.c lt_dlloader.c lt_error.c ltdl.c ltdl.h slist.c"
# Parse environment options
{
@@ -135,114 +93,70 @@ all_pkgltdl_files="COPYING.LIB Makefile Makefile.in
Makefile.inc Makefile.am REA
LIBTOOLIZE_OPTIONS=`echo "$LIBTOOLIZE_OPTIONS" | sed "$my_sed_env_rest"`
case $opt in
- --debug) opt_debug=: ;;
- --no-warn) opt_warning=false ;;
- --quiet) opt_quiet=: ;;
- --verbose) opt_verbose=: ;;
-
- --*) func_warning "unrecognized environment option \`$opt'" ;;
+ --debug|--no-warn|--quiet|--verbose)
+ envopts="${envopts+$envopts }$opt" ;;
+ --*) env_warning="${env_warning+$env_warning
+}unrecognized environment option \`$opt'" ;;
*) func_fatal_help "garbled LIBTOOLIZE_OPTIONS near \`$opt'" ;;
esac
done
-}
-
-# Parse options once, thoroughly. This comes as soon as possible in
-# the script to make things like `libtoolize --version' happen quickly.
-{
- # sed scripts:
- my_sed_single_opt='1s/^\(..\).*$/\1/;q'
- my_sed_single_rest='1s/^..\(.*\)$/\1/;q'
- my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
- my_sed_long_arg='1s/^--[^=]*=//'
-
- while test "$#" -gt 0; do
- opt="$1"
+ test -n "$envopts" && {
+ func_quote_for_eval "$envopts"
+ eval set dummy "$func_quote_for_eval_result" ${1+"$@"}
shift
- case $opt in
- --copy|-c) opt_link=false ;;
-
- --debug) func_echo "enabling shell trace mode"
- opt_debug='set -x'
- $opt_debug
- ;;
-
- --dry-run|-n) if $opt_dry_run; then :; else
- opt_dry_run=:
- RM="func_echo_all $RM"
- test -n "$LN_S" && LN_S="func_echo_all $LN_S"
- CP="func_echo_all $CP"
- MKDIR="func_echo_all $MKDIR"
- TAR="func_echo_all $TAR"
- fi
- ;;
-
- --force|-f) opt_force=: ;;
-
- --install|-i) opt_install=: ;;
-
- --ltdl) opt_ltdl=:
- if test "$#" -gt 0; then
- case $1 in
- -*) ;;
- *) ltdldir=`$ECHO "$1" | $SED 's,/*$,,'`
- shift
- ;;
- esac
- fi
- ;;
-
- --no-warn) opt_warning=false ;;
-
- --nonrecursive|--non-recursive)
- ltdl_mode=nonrecursive
- ;;
-
- --quiet|--automake|-q) # --automake is for 1.5 compatibility
- opt_quiet=:
- ;;
-
- --recursive) ltdl_mode=recursive ;;
-
- --subproject) ltdl_mode=subproject ;;
-
- --verbose|-v) opt_verbose=: ;;
-
- # Separate optargs to long options:
- --*=*)
- arg=`$ECHO "$opt" | $SED "$my_sed_long_arg"`
- opt=`$ECHO "$opt" | $SED "$my_sed_long_opt"`
- set dummy "$opt" "$arg" ${1+"$@"}
- shift
- ;;
-
- # Separate optargs to short options:
- #-X*)
- # arg=`$ECHO "$opt" | $SED "$my_sed_single_rest"`
- # opt=`$ECHO "$opt" | $SED "$my_sed_single_opt"`
- # set dummy "$opt" "$arg" ${1+"$@"}
- # shift
- # ;;
-
- # Separate non-argument short options:
- -c*|-f*|-i*|-n*|-q*|-v*)
- rest=`$ECHO "$opt" | $SED "$my_sed_single_rest"`
- opt=`$ECHO "$opt" | $SED "$my_sed_single_opt"`
- set dummy "$opt" "-$rest" ${1+"$@"}
- shift
- ;;
-
- -\?|-h) func_usage ;;
- --help) func_help ;;
- --version) func_version ;;
- --) break ;;
- -*) func_fatal_help "unrecognized option \`$opt'" ;;
- *) func_fatal_help "too many arguments" ;;
- esac
- done
+ }
}
+]])
+
+dnl SHORT LONG DEFAULT INIT
+dnl ----------------------------------------------------------------------
+dnl --automake, below, is for compatibility with automake 1.5
+M4SH_GETOPTS(
+ [c], [--copy], [], [],
+ [f], [--force], [], [],
+ [i], [--install], [], [],
+ [n], [--dry-run|--dryrun], [], [
+ CP="func_echo_all $CP"
+ test -n "$LN_S" && LN_S="func_echo_all $LN_S"
+ MKDIR="func_echo_all $MKDIR"
+ RM="func_echo_all $RM"
+ TAR="func_echo_all $TAR"],
+ [q], [--quiet|--automake], [], [],
+ [v], [--verbose], [], [],
+ [], [--no-warning|--no-warn], [], [],
+ [], [--nonrecursive|--non-recursive], [], [],
+ [], [--recursive], [], [],
+ [], [--standalone], [], [],
+ [?], [--ltdl], [false], [
+ test "$opt_ltdl" = "false" || ltdldir=`$ECHO "$optarg" | $SED 's,/*$,,'`
+ opt_ltdl=:],
+[
+ # show any warnings saved by LIBTOOLIZE_OPTIONS parsing
+ test -n "$env_warning" &&
+ echo "$env_warning" |while read line; do func_warning "$line"; done
+
+ # validate $opt_nonrecursive, $opt_recursive and $opt_standalone
+ if $opt_nonrecursive; then
+ if $opt_recursive || $opt_standalone; then
+ func_error "you can have at most one of --non-recursive, --recursive and
--standalone"
+ fi
+ ltdl_mode=nonrecursive
+ elif $opt_recursive; then
+ $opt_standalone &&
+ func_error "you can have at most one of --non-recursive, --recursive and
--standalone"
+ ltdl_mode=recursive
+ elif $opt_standalone; then
+ ltdl_mode=standalone
+ fi
+ # any remaining arguments are an error
+ test [$]# -gt 0 &&
+ func_fatal_help "unknown additional arguments: address@hidden'"
+])
+
+M4SH_VERBATIM([[
# func_echo_once msg_var
# Calls func_echo with the value of MSG_VAR, and then sets MSG_VAR="" so
# that subsequent calls have no effect.
@@ -321,7 +235,15 @@ func_copy_cb ()
func_mkdir_p `$ECHO "$my_destdir/$my_file" | $SED "$dirname"`
$RM "$my_destdir/$my_file"
- if $opt_link; then
+ if $opt_copy; then
+ if { ( cd "$my_srcdir" && $TAR chf - "$my_file" ) 2>/dev/null \
+ | ( umask 0 && cd "$my_destdir" && $TAR xf - ) >/dev/null 2>&1; } \
+ && touch "$my_destdir/$my_file"; then
+ $opt_quiet || func_echo_once "$my_msg_var"
+ $opt_quiet || func_echo "copying $my_copy_msg"
+ copy_return_status=0
+ fi
+ else
if test "$my_file" = "aclocal.m4"; then
if { ( cd "$my_srcdir" && $TAR chf - "$my_file" ) 2>/dev/null \
| ( umask 0 && cd "$my_destdir" && $TAR xf - ) >/dev/null 2>&1 ; }
@@ -337,14 +259,6 @@ func_copy_cb ()
copy_return_status=0
fi
fi
- else
- if { ( cd "$my_srcdir" && $TAR chf - "$my_file" ) 2>/dev/null \
- | ( umask 0 && cd "$my_destdir" && $TAR xf - ) >/dev/null 2>&1; } \
- && touch "$my_destdir/$my_file"; then
- $opt_quiet || func_echo_once "$my_msg_var"
- $opt_quiet || func_echo "copying $my_copy_msg"
- copy_return_status=0
- fi
fi
if test "$copy_return_status" != 0; then
$opt_quiet || func_echo_once "$my_msg_var"
@@ -1517,6 +1431,42 @@ func_check_macros ()
## ----------- ##
{
+ # Lists of all files libtoolize has ever installed. These are removed
+ # before installing the latest files when --force was passed to help
+ # ensure a clean upgrade.
+ # Do not remove config.guess nor config.sub, we don't install them
+ # without --install, and the project may not be using Automake.
+ all_pkgconfig_files="ltmain.sh"
+ all_pkgmacro_files="argz.m4 libtool.m4 ltdl.m4 ltoptions.m4 ltsugar.m4
ltversion.in ltversion.m4 lt~obsolete.m4"
+ all_pkgltdl_files="COPYING.LIB Makefile Makefile.in Makefile.inc Makefile.am
README acinclude.m4 aclocal.m4 argz_.h argz.c config.h.in config-h.in configure
configure.ac configure.in libltdl/lt__alloc.h libltdl/lt__dirent.h
libltdl/lt__glibc.h libltdl/lt__private.h libltdl/lt__strl.h
libltdl/lt_dlloader.h libltdl/lt_error.h libltdl/lt_system.h libltdl/slist.h
loaders/dld_link.c loaders/dlopen.c loaders/dyld.c loaders/load_add_on.c
loaders/loadlibrary.c loaders/preopen.c loaders/shl_load.c lt__alloc.c
lt__dirent.c lt__strl.c lt_dlloader.c lt_error.c ltdl.c ltdl.h slist.c"
+
+ # Locations for important files:
+ address@hidden@
+ address@hidden@
+ address@hidden@
+ address@hidden@
+ address@hidden@
+ auxdir=
+ macrodir=
+ configure_ac=configure.in
+
+ seen_autoconf=false
+ seen_libtool=false
+ seen_ltdl=false
+
+ # test EBCDIC or ASCII
+ case `echo X|tr X '\101'` in
+ A) # ASCII based system
+ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+ SP2NL='tr \040 \012'
+ NL2SP='tr \015\012 \040\040'
+ ;;
+ *) # EBCDIC based system
+ SP2NL='tr \100 \n'
+ NL2SP='tr \r\n \100\100'
+ ;;
+ esac
+
# Allow the user to override the master libtoolize repository:
if test -n "$_lt_pkgdatadir"; then
pkgltdldir="$_lt_pkgdatadir"
--
1.7.1
- [PATCH] Use getopt.m4sh to generate libtoolize option parser.,
Gary V. Vaughan <=