libtool-patches
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]