On Tuesday 14 of July 2015 06:29:15 Eric Blake wrote:
> Overall, seems like it is correct, once you fix the typos.

Thanks for your review, fixed patch attached.

Pavel
>From cc0cd1c751d54af0d7211e321f40ce99b0f68b62 Mon Sep 17 00:00:00 2001
From: Pavel Raiskup <prais...@redhat.com>
Date: Thu, 2 Jul 2015 13:58:22 +0200
Subject: [PATCH] gnulib-common.m4: fix gl_PROG_AR_RANLIB/AM_PROG_AR clash

The gl_PROG_AR_RANLIB (it is always called by gl_EARLY) sets AR
and ARFLAGS variables.  Doing this unconditionally could break
later Automake's AM_PROG_AR invocation (at least it's
AC_CHECK_TOOLS call to detect correct 'ar' binary).

Original purpose of the gl_PROG_AR_RANLIB was only to handle the
Amsterdam Compiler Kit, so make the previous code to have effects
only on ACK, and rather automatically call the Automake's
AM_PROG_AR as soon as possible to decide other cases.

References:
http://lists.gnu.org/archive/html/bug-gnulib/2015-07/msg00001.html

* m4/gnulib-common.m4 (gl_PROG_AR_RANLIB): AC_BEFORE AM_PROG_AR.
Set the AR/ARFLAGS to ACK defaults OR call AM_PROG_AR.  If neither
is possible, keep setting AR/ARFLAGS to reasonable defaults.
* gnulib-tool (func_import): Put the gl_USE_SYSTEM_EXTENSIONS
right before gl_PROG_AR_RANLIB into gnulib-comp.m4 (if the
'extensions' module is used.
* modules/extensions (configure.ac-early): Remove as this snippet
is added to gnulib-comp.m4 earlier anyway.
---
 ChangeLog           | 25 +++++++++++++++++++++++++
 gnulib-tool         |  6 ++++++
 m4/gnulib-common.m4 | 43 ++++++++++++++++++++++++++++---------------
 modules/extensions  |  3 ---
 4 files changed, 59 insertions(+), 18 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 1293751..2e8165b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,28 @@
+2015-07-16  Pavel Raiskup  <prais...@redhat.com>
+
+	gnulib-common.m4: fix gl_PROG_AR_RANLIB/AM_PROG_AR clash
+	The gl_PROG_AR_RANLIB (it is always called by gl_EARLY) sets AR
+	and ARFLAGS variables.  Doing this unconditionally could break
+	later Automake's AM_PROG_AR invocation (at least it's
+	AC_CHECK_TOOLS call to detect correct 'ar' binary).
+
+	Original purpose of the gl_PROG_AR_RANLIB was only to handle the
+	Amsterdam Compiler Kit, so make the previous code to have effects
+	only on ACK, and rather automatically call the Automake's
+	AM_PROG_AR as soon as possible to decide other cases.
+
+	References:
+	http://lists.gnu.org/archive/html/bug-gnulib/2015-07/msg00001.html
+
+	* m4/gnulib-common.m4 (gl_PROG_AR_RANLIB): AC_BEFORE AM_PROG_AR.
+	Set the AR/ARFLAGS to ACK defaults OR call AM_PROG_AR.  If neither
+	is possible, keep setting AR/ARFLAGS to reasonable defaults.
+	* gnulib-tool (func_import): Put the gl_USE_SYSTEM_EXTENSIONS
+	right before gl_PROG_AR_RANLIB into gnulib-comp.m4 (if the
+	'extensions' module is used.
+	* modules/extensions (configure.ac-early): Remove as this snippet
+	is added to gnulib-comp.m4 earlier anyway.
+
 2015-07-15  Eric Blake  <ebl...@redhat.com>
 
 	maint: update copyright paper procedures
diff --git a/gnulib-tool b/gnulib-tool
index ec82f35..37d1403 100755
--- a/gnulib-tool
+++ b/gnulib-tool
@@ -5188,6 +5188,12 @@ s,//*$,/,'
     echo "  m4_pattern_allow([^gl_ES\$])dnl a valid locale name"
     echo "  m4_pattern_allow([^gl_LIBOBJS\$])dnl a variable"
     echo "  m4_pattern_allow([^gl_LTLIBOBJS\$])dnl a variable"
+
+    # We need to call gl_USE_SYSTEM_EXTENSIONS before gl_PROG_AR_RANLIB.  Doing
+    # AC_REQUIRE in configure-ac.early is not early enough.
+    echo "$final_modules" | LANG=C grep "^extensions$" >/dev/null \
+        && echo "  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])"
+
     echo "  AC_REQUIRE([gl_PROG_AR_RANLIB])"
     if test -n "$uses_subdirs"; then
       echo "  AC_REQUIRE([AM_PROG_CC_C_O])"
diff --git a/m4/gnulib-common.m4 b/m4/gnulib-common.m4
index 40e82f6..50ef974 100644
--- a/m4/gnulib-common.m4
+++ b/m4/gnulib-common.m4
@@ -253,9 +253,10 @@ AC_DEFUN([gl_PROG_AR_RANLIB],
 [
   dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler
   dnl as "cc", and GCC as "gcc". They have different object file formats and
-  dnl library formats. In particular, the GNU binutils programs ar, ranlib
+  dnl library formats. In particular, the GNU binutils programs ar and ranlib
   dnl produce libraries that work only with gcc, not with cc.
   AC_REQUIRE([AC_PROG_CC])
+  AC_BEFORE([$0], [AM_PROG_AR])
   AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler],
     [
       AC_EGREP_CPP([Amsterdam],
@@ -267,25 +268,37 @@ Amsterdam
         [gl_cv_c_amsterdam_compiler=yes],
         [gl_cv_c_amsterdam_compiler=no])
     ])
-  if test -z "$AR"; then
-    if test $gl_cv_c_amsterdam_compiler = yes; then
+
+  dnl Don't compete with AM_PROG_AR's decision about AR/ARFLAGS if we are not
+  dnl building with __ACK__.
+  if test $gl_cv_c_amsterdam_compiler = yes; then
+    if test -z "$AR"; then
       AR='cc -c.a'
-      if test -z "$ARFLAGS"; then
-        ARFLAGS='-o'
-      fi
-    else
-      dnl Use the Automake-documented default values for AR and ARFLAGS,
-      dnl but prefer ${host}-ar over ar (useful for cross-compiling).
-      AC_CHECK_TOOL([AR], [ar], [ar])
-      if test -z "$ARFLAGS"; then
-        ARFLAGS='cr'
-      fi
     fi
-  else
     if test -z "$ARFLAGS"; then
-      ARFLAGS='cr'
+      ARFLAGS='-o'
     fi
+  else
+    dnl AM_PROG_AR was added in automake v1.11.2.  AM_PROG_AR does not AC_SUBST
+    dnl ARFLAGS variable (it is filed into Makefile.in directly by automake
+    dnl script on-demand, if not specified by ./configure of course).
+    dnl Don't AC_REQUIRE the AM_PROG_AR otherwise the code for __ACK__ above
+    dnl will be ignored.  Also, pay attention to call AM_PROG_AR in else block
+    dnl because AM_PROG_AR is written so it could re-set AR variable even for
+    dnl __ACK__.  It may seem like its easier to avoid calling the macro here,
+    dnl but we need to AC_SUBST both AR/ARFLAGS (thus those must have some good
+    dnl default value and automake should usually know them).
+    m4_ifdef([AM_PROG_AR], [AM_PROG_AR], [:])
   fi
+
+  dnl In case the code above has not helped with setting AR/ARFLAGS, use
+  dnl Automake-documented default values for AR and ARFLAGS, but prefer
+  dnl ${host}-ar over ar (useful for cross-compiling).
+  AC_CHECK_TOOL([AR], [ar], [ar])
+  if test -z "$ARFLAGS"; then
+    ARFLAGS='cr'
+  fi
+
   AC_SUBST([AR])
   AC_SUBST([ARFLAGS])
   if test -z "$RANLIB"; then
diff --git a/modules/extensions b/modules/extensions
index 76e5a96..b7e37bb 100644
--- a/modules/extensions
+++ b/modules/extensions
@@ -6,9 +6,6 @@ m4/extensions.m4
 
 Depends-on:
 
-configure.ac-early:
-AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
-
 configure.ac:
 
 Makefile.am:
-- 
2.1.0

Reply via email to