>From cc0cd1c751d54af0d7211e321f40ce99b0f68b62 Mon Sep 17 00:00:00 2001 From: Pavel Raiskup 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 + + 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 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