libtool-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] Ensure getopts.m4sh is compatible with Autoconf-2.61 and newer.


From: Gary V. Vaughan
Subject: [PATCH] Ensure getopts.m4sh is compatible with Autoconf-2.61 and newer.
Date: Mon, 21 Jun 2010 19:56:12 +0700

This fixes the FreeBSD bootstrap problem.  Okay to push?


* libltdl/config/getopt.m4sh (m4_chomp): Ensure this macro is
implemented even if Autoconf's m4sugar.m4 doesn't provide it.
(m4go_expand): New macro based on Autoconf-2.64 m4_expand. Use
it everywhere incase m4sugar.m4 doesn't have an implementation.
(m4_ifnblank): Replace all uses with m4_ifval, which was
available long before m4_ifnblank was introduced.
---
 ChangeLog                  |   10 +++++++
 libltdl/config/getopt.m4sh |   64 +++++++++++++++++++++++++++++++++++---------
 2 files changed, 61 insertions(+), 13 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 9bc84c8..18e346d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2010-06-21  Gary V. Vaughan  <address@hidden>
+
+       Ensure getopts.m4sh is compatible with Autoconf-2.61 and newer.
+       * libltdl/config/getopt.m4sh (m4_chomp): Ensure this macro is
+       implemented even if Autoconf's m4sugar.m4 doesn't provide it.
+       (m4go_expand): New macro based on Autoconf-2.64 m4_expand. Use
+       it everywhere incase m4sugar.m4 doesn't have an implementation.
+       (m4_ifnblank): Replace all uses with m4_ifval, which was
+       available long before m4_ifnblank was introduced.
+
 2010-06-20  Ralf Wildenhues  <address@hidden>
 
        Fix clean mode for HP-UX 11.31 sh.
diff --git a/libltdl/config/getopt.m4sh b/libltdl/config/getopt.m4sh
index 44cf727..031402c 100644
--- a/libltdl/config/getopt.m4sh
+++ b/libltdl/config/getopt.m4sh
@@ -44,8 +44,46 @@ m4_include([general.m4sh])m4_divert_push([KILL])     -*- 
Autoconf -*-
 # All internal macros begin with `m4go_'.
 m4_pattern_forbid([^_?m4go_])
 
+
+## --------------------------- ##
+## 1. Backwards compatibility. ##
+## --------------------------- ##
+
+# m4_chomp(STRING)
+# ----------------
+# m4_chomp was not introduced until Autoconf-2.64.  Currently we
+# only use it indirectly via m4go_expand, below.  This implementation
+# is taken from Autoconf-2.65.
+m4_ifndef([m4_chomp],
+[m4_define([m4_chomp],
+[m4_format([[%.*s]], m4_index(m4_translit([[$1]], [
+/.], [/  ])[./.], [/.]), [$1])])])
+
+# m4go_expand(ARG)
+# ----------------
+# M4SH_GETOPTS wants to pass unbalanced parentheses to m4_expand to
+# build the branches of a shell `case' statement.  That is only
+# supported by the implementation of m4_expand in Autoconf-2.64 and
+# newer.  Since we want to be compatible back to at least
+# Autoconf-2.62, reimplement our own 2.64 based m4_expand in the
+# m4go_ namespace so that we can be compatible with Autoconf versions
+# supporting either semantic.
+m4_define([m4go_expand],
+[m4_chomp(_$0([$1
+]))])
+
+m4_define([_m4go_expand], [$0_([$1], [(], -=<{($1)}>=-, [}>=-])])
+
+m4_define([_m4go_ignore])
+
+m4_define([_m4go_expand_],
+[m4_if([$4], [}>=-],
+       [m4_changequote([-=<{$2], [)}>=-])$3m4_changequote([, ])],
+       [$0([$1], [($2], -=<{($2$1)}>=-, [}>=-])_m4go_ignore$2])])
+
+
 ## --------------------------------- ##
-## 1. Low level string manipulation. ##
+## 2. Low level string manipulation. ##
 ## --------------------------------- ##
 
 # m4go_slice(STRING, BEGIN, END)
@@ -96,10 +134,10 @@ m4_define([m4go_slice],
 #     to turn them off for the duration.
 #  6. Finally, we need to requote the result to account for the quotes
 #     we probably stripped.  m4_quote() doesn't handle commas well, so
-#     we use m4_expand() to requote without losing whitespace after any
-#     embedded commas.
+#     we use m4go_expand() to requote without losing whitespace after
+#     any embedded commas.
 m4_define([m4go_trimn],
-[m4_changecom()m4_expand([m4go_slice([$1], m4_bregexp(m4_translit([$1],[
+[m4_changecom()m4go_expand([m4go_slice([$1], m4_bregexp(m4_translit([$1],[
 [/,()]], [//     ]), [[^/]]), m4_bregexp(m4_translit([$1], [
 [/,()]], [/     /]), [/*$]))])[]m4_changecom([#])])
 
@@ -119,7 +157,7 @@ m4_define([m4go_unindent],
 
 
 ## ------------------------------ ##
-## 2. Option processing compiler. ##
+## 3. Option processing compiler. ##
 ## ------------------------------ ##
 
 # Shell fragments are piecemeal added to these macros for each
@@ -288,7 +326,7 @@ m4_define([m4go_option],
             [^=],       [],
             [.],        [[$1]],
                         []))],
-    [_$0(opt_[]m4_ifnblank([$2],
+    [_$0(opt_[]m4_ifval([$2],
             m4_translit(m4_bpatsubst([$2], [^--\(no-\)?\([^|]+\).*$],
                                      [\2]), -, _),
                 _short),
@@ -329,11 +367,11 @@ m4_define([_m4go_option],
 [m4_do(
     [m4_append([m4go_defaults],
         m4_bmatch([$3],
-            [[?!;address@hidden, [m4_ifnblank([$5], [m4_n([$1="$5"])])],
+            [[?!;address@hidden, [m4_ifval([$5], [m4_n([$1="$5"])])],
             [~],        [m4_n([$1=:])],
                         [m4_n([$1=false])]))],
     [m4_append([m4go_branches], [[]dnl (
-      m4_join([|], [$4], m4_ifnblank([$2], [-$2])))
+      m4_join([|], [$4], m4_ifval([$2], [-$2])))
 ])],
     [m4_append([m4go_branches],
         [m4_bmatch([$3], address@hidden,
@@ -346,8 +384,8 @@ m4_n(m4_bmatch([$3],
     [+],       [                       $1_num=`expr 1 + ${$1_num-0}`
                        eval $1_${$1_num}=\"$optarg\"],
     [?],       [m4_bmatch([$3],
-                    address@hidden, 
[m4_expand([m4go_optional_file_arg([$1])])],
-                         [m4_expand([m4go_optional_arg([$1])])])],
+                    address@hidden, 
[m4go_expand([m4go_optional_file_arg([$1])])],
+                         [m4go_expand([m4go_optional_arg([$1])])])],
     address@hidden,    [                       $1="$optarg"],
     [;],       [                       $1="${$1+[$]$1
 }$optarg"],
@@ -356,12 +394,12 @@ m4_n(m4_bmatch([$3],
                [                       $1=:]))[]dnl
 dnl only write the file_arg fragment when we didn't already write opt_file_arg:
 m4_bmatch([$3], address@hidden, [m4_bmatch([$3], [?], [],
-                   [m4_expand([m4go_file_arg([$1])])
+                   [m4go_expand([m4go_file_arg([$1])])
 ])])m4_n(m4go_unindent([$6]))[]dnl
 m4_bmatch([$3], [[!+;]], [                     shift
 ])                     ;;
 ])],
-    [m4_ifnblank([$2],
+    [m4_ifval([$2],
         [m4_bmatch([$3],
             [[?!;address@hidden, [m4_append([m4go_shortargs],   [-$2*], [|])],
                        [m4_append([m4go_shortnoargs], [-$2*],
@@ -489,7 +527,7 @@ m4go_validation
 
 
 ## ------------------------- ##
-## 3. Supporting Shell Code. ##
+## 4. Supporting Shell Code. ##
 ## ------------------------- ##
 
 # The shell functions below are expanded verbatim into the shell script
-- 
1.7.1




reply via email to

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