libtool-patches
[Top][All Lists]
Advanced

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

[PATCH 3/7] libtoolize: refactor macro_dir discovery around extract-trac


From: Gary V. Vaughan
Subject: [PATCH 3/7] libtoolize: refactor macro_dir discovery around extract-trace script.
Date: Sat, 5 Nov 2011 23:42:21 +0700

* libtoolize.m4sh (func_extract_trace): Function to call
$aux_dir/extract-trace.  The name and footprint are the same as
the core function in the extract-trace script file so that we
can choose to source that file when the option processing
becomes compatible with ours.
(require_ac_macro_dir, require_aclocal_amflags)
(require_am_macro_dir, require_macro_dir, require_makefile_am):
New functions factored out of func_scan_files for scanning and
setting macro_dir and friends.
(func_scan_files): Remove the factored out code to scan
configure.ac with sed, and then set macro_dir appropriately.
(func_serial_update_check, func_install_pkgmacro_subproject)
(func_install_pkgmacro_parent, func_install_pkgmacro_files)
(func_check_macros): Adjust.

Signed-off-by: Gary V. Vaughan <address@hidden>
---
 libtoolize.m4sh |  205 +++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 155 insertions(+), 50 deletions(-)

diff --git a/libtoolize.m4sh b/libtoolize.m4sh
index 07a21ee..591e726 100644
--- a/libtoolize.m4sh
+++ b/libtoolize.m4sh
@@ -366,6 +366,24 @@ func_fixup_Makefile ()
     fi
 }
 
+
+# func_extract_trace macro_name [filename ...]
+# set `$func_extract_trace_result' to a colon delimited list of arguments
+# to MACRO_NAME in FILENAME. If no FILENAME is given, then
+# `configure.ac' is assumed.
+func_extract_trace ()
+{
+    $opt_debug
+
+    if test 1 -eq $#; then
+      test -n "$configure_ac" || return
+      set dummy "$@" "$configure_ac"; shift
+    fi
+
+    func_extract_trace_result=`$extract_trace ${1+"$@"}`
+}
+
+
 # func_scan_files
 # Scan configure.(ac|in) and aclocal.m4 (if present) for use of libltdl
 # and libtool.  Possibly running some of these tools if necessary.
@@ -399,10 +417,6 @@ func_scan_files ()
            s,^.*AC_CONFIG_AUX_DIR([[    ]*\([^])]*\).*$,ac_aux_dir=\1,
            p
         }
-       /AC_CONFIG_MACRO_DIR(/ {
-           s,^.*AC_CONFIG_MACRO_DIR([[  ]*\([^])]*\).*$,ac_macro_dir=\1,
-           p
-        }
        /_LT_CONFIG_LTDL_DIR(/d
        /LT_CONFIG_LTDL_DIR(/ {
            s,^.*LT_CONFIG_LTDL_DIR([[   ]*\([^])]*\).*$,ac_ltdldir=\1,
@@ -537,46 +551,6 @@ func_scan_files ()
 
     # Just use the current directory if all else fails.
     test -n "$aux_dir" || aux_dir=.
-
-
-    # ------------------------------ #
-    # Find local m4 macro directory. #
-    # ------------------------------ #
-
-    # Hunt for ACLOCAL_AMFLAGS in `Makefile.am' for a `-I' argument.
-
-    my_sed_aclocal_flags='
-        /^[     ]*ACLOCAL_[A-Z_]*FLAGS[         ]*=[    ]*/ {
-           s,,,
-           q
-       }
-       d'
-    if test -f Makefile.am; then
-      my_macro_dir_is_next=false
-      for arg in `$SED "$my_sed_aclocal_flags" Makefile.am`; do
-        if $my_macro_dir_is_next; then
-          am_macro_dir="$arg"
-          break
-        else
-         case $arg in
-           -I) my_macro_dir_is_next=: ;;
-           -I*)
-             am_macro_dir=`$ECHO "$arg" | sed 's,^-I,,'`
-             break
-             ;;
-           *) my_macro_dir_is_next=false ;;
-         esac
-        fi
-      done
-    fi
-
-    macro_dir="$ac_macro_dir"
-    test -z "$macro_dir" && macro_dir="$am_macro_dir"
-
-    if test -n "$am_macro_dir" && test -n "$ac_macro_dir"; then
-      test "$am_macro_dir" = "$ac_macro_dir" \
-        || func_fatal_error "AC_CONFIG_MACRO_DIR([$ac_macro_dir]) conflicts 
with ACLOCAL_AMFLAGS=-I $am_macro_dir."
-    fi
 }
 
 # func_included_files searchfile
@@ -701,6 +675,8 @@ func_serial_update_check ()
 {
     $debug_cmd
 
+    $require_ac_macro_dir
+
     my_srcfile="$1"
     my_src_serial="$2"
     my_destfile="$3"
@@ -1000,6 +976,8 @@ func_install_pkgmacro_subproject ()
 {
     $debug_cmd
 
+    $require_macro_dir
+
     # Remove any lingering files that my have been installed by some
     # previous libtoolize release:
     $opt_force && for file in $all_pkgmacro_files; do
@@ -1028,6 +1006,9 @@ func_install_pkgmacro_parent ()
 {
     $debug_cmd
 
+    $require_ac_macro_dir
+    $require_macro_dir
+
     # Remove any lingering files that my have been installed by some
     # previous libtoolize release:
     $opt_force && for file in $all_pkgmacro_files; do
@@ -1039,7 +1020,7 @@ func_install_pkgmacro_parent ()
     # user specified a macro_dir.
     $opt_quiet || if test -n "$ac_macro_dir"; then
       my_pkgmacro_header="putting macros in AC_CONFIG_MACRO_DIR, 
\`$ac_macro_dir'."
-    elif test -n "$macro_dir"; then
+    else
       my_pkgmacro_header="putting macros in \`$macro_dir'."
     fi
 
@@ -1077,12 +1058,16 @@ func_install_pkgmacro_files ()
 {
     $debug_cmd
 
+    $require_ac_macro_dir
+    $require_am_macro_dir
+    $require_macro_dir
+
     # argz.m4, libtool.m4 and ltdl.m4 are handled specially:
     func_massage_aclocal_DATA 'argz.m4|libtool.m4|ltdl.m4'
 
   # 1. Parent has separate macro_dir to subproject ltdl:
     if $opt_ltdl && test "x$ltdl_mode" = "xsubproject" &&
-       test -n "$macro_dir" && test "x$macro_dir" != "x$subproject_macro_dir"
+       test "x$macro_dir" != "x$subproject_macro_dir"
     then
       func_install_pkgmacro_parent
       func_install_pkgmacro_subproject
@@ -1094,7 +1079,7 @@ func_install_pkgmacro_files ()
       func_install_pkgmacro_subproject
 
   # 3. Not a subproject, but macro_dir was specified in parent:
-    elif test -n "$macro_dir"; then
+    elif test -n "$ac_macro_dir$am_macro_dir"; then
       func_install_pkgmacro_parent
 
   # 4. AC_CONFIG_MACRO_DIR was not specified:
@@ -1345,14 +1330,17 @@ func_check_macros ()
 {
     $debug_cmd
 
+    $require_ac_macro_dir
+    $require_am_macro_dir
     $require_configure_ac
+    $require_macro_dir
 
     $opt_quiet && return
     test -n "$configure_ac" || return
 
     ac_config_macro_dir_advised=false
 
-    if test -n "$ac_macro_dir$ltdldir" && test -z "$macro_dir"; then
+    if test -n "$ac_macro_dir$ltdldir" && test -z 
"$ac_macro_dir$am_macro_dir"; then
       my_ac_config_macro_srcdir="$aclocaldir"
       if $opt_ltdl && test "$macro_dir" != "$subproject_macro_dir"; then
        my_ac_config_macro_srcdir="$subproject_macro_dir"
@@ -1430,7 +1418,7 @@ func_check_macros ()
       ac_config_macro_dir_advised=:
     fi
 
-    if test -z "$am_macro_dir$macro_dir"; then
+    if test -z "$am_macro_dir$ac_macro_dir"; then
       func_echo "Consider adding \`-I m4' to ACLOCAL_AMFLAGS in Makefile.am."
 
     elif test -z "$am_macro_dir"; then
@@ -1500,6 +1488,76 @@ func_autoconf_configure ()
 # most, once.
 
 
+# require_ac_macro_dir
+# --------------------
+# Extract ac_macro_dir from AC_CONFIG_MACRO_DIR.
+require_ac_macro_dir=func_require_ac_macro_dir
+func_require_ac_macro_dir ()
+{
+    $debug_cmd
+
+    $require_configure_ac
+
+    if test -n "$configure_ac"; then
+      func_extract_trace AC_CONFIG_MACRO_DIR
+      ac_macro_dir=$func_extract_trace_result
+    fi
+
+    require_ac_macro_dir=:
+}
+
+
+# require_aclocal_amflags
+# -----------------------
+# Extract `$aclocal_amflags' from `Makefile.am' if present.
+require_aclocal_amflags=func_require_aclocal_amflags
+func_require_aclocal_amflags ()
+{
+    $debug_cmd
+
+    $require_makefile_am
+
+    test -n "$makefile_am" && {
+      _G_sed_extract_aclocal_amflags='s|#.*$||
+        /^[     ]*ACLOCAL_AMFLAGS[      ]*=/ {
+            s|^.*=[     ]*\(.*\)|aclocal_amflags="\1"|
+            p
+        }'
+
+      _G_aclocal_flags_cmd=`$SED -n "$_G_sed_extract_aclocal_amflags" \
+          "$makefile_am"`
+      eval "$_G_aclocal_flags_cmd"
+
+      func_verbose "ACLOCAL_AMFLAGS='$aclocal_amflags'"
+    }
+
+    require_aclocal_amflags=:
+}
+
+
+# require_am_macro_dir
+# --------------------
+# Set am_macro_dir to the first directory specified in ACLOCAL_AMFLAGS.
+require_am_macro_dir=func_require_am_macro_dir
+func_require_am_macro_dir ()
+{
+    $debug_cmd
+
+    $require_aclocal_amflags
+
+    _G_minus_I_seen=false
+    for _G_arg in $aclocal_amflags; do
+      case $_G_minus_I_seen,$_G_arg in
+        :,*)   am_macro_dir=$_G_arg; break ;;
+        *,-I)  _G_minus_I_seen=: ;;
+        *,-I*) am_macro_dir=`expr x$_G_opt : 'x-I\(.*\)$'`; break ;;
+      esac
+    done
+
+    require_am_macro_dir=:
+}
+
+
 # require_configure_ac
 # --------------------
 # Ensure that there is a `configure.ac' or `configure.in' file in the
@@ -1520,6 +1578,52 @@ func_require_configure_ac ()
 }
 
 
+# require_macro_dir
+# -----------------
+# If both are specified, ensure both ACLOCAL_AMFLAGS and
+# AC_CONFIG_MACRO_DIR agree, and set macro_dir to the value of either.
+require_macro_dir=func_require_macro_dir
+func_require_macro_dir ()
+{
+    $debug_cmd
+
+    $require_ac_macro_dir
+    $require_am_macro_dir
+
+    macro_dir=$ac_macro_dir
+    test -n "$macro_dir" || macro_dir=$am_macro_dir
+    test -n "$macro_dir" || macro_dir=m4
+
+    if test -n "$ac_macro_dir" && test -n "$am_macro_dir"; then
+      test "$ac_macro_dir" = "$am_macro_dir" || func_fatal_error "\
+AC_CONFIG_MACRO_DIR([$ac_macro_dir]) conflicts with ACLOCAL_AMFLAGS=-I 
$am_macro_dir."
+    fi
+
+    require_macro_dir=:
+}
+
+
+# require_makefile_am
+# -------------------
+# If not already set, set makefile_am to `Makefile.am' if that file is
+# present in the current directory.
+require_makefile_am=func_require_makefile_am
+func_require_makefile_am ()
+{
+    $debug_cmd
+
+    test -n "$makefile_am" || makefile_am=Makefile.am
+
+    if test -f Makefile.am; then
+      func_verbose "found \`$makefile_am'"
+    else
+      makefile_am=
+    fi
+
+    require_makefile_am=:
+}
+
+
 
 ## ----------- ##
 ##    Main.    ##
@@ -1542,7 +1646,6 @@ func_require_configure_ac ()
   address@hidden@
   address@hidden@
   aux_dir=
-  macro_dir=
 
   seen_libtool=false
   seen_ltdl=false
@@ -1570,6 +1673,8 @@ func_require_configure_ac ()
   func_nonemptydir_p pkgdatadir
   func_nonemptydir_p aclocaldir
 
+  extract_trace=$pkgdatadir/config/extract-trace
+
   func_scan_files
 
   case $ltdldir in
-- 
1.7.7.2

Cheers,
-- 
Gary V. Vaughan (gary AT gnu DOT org)


reply via email to

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