>From e384778530df13e3dbd3cc92fd6bd5a53d75b64f Mon Sep 17 00:00:00 2001 From: Pavel Raiskup Date: Tue, 2 Jun 2015 15:29:22 +0200 Subject: [PATCH] ARFLAGS: use 'cr' instead of 'cru' by default In some GNU/Linux distributions people started to compile 'ar' binary with --enable-deterministic-archives (binutils project). That, however, in combination with our previous long time working default AR_FLAGS=cru causes warnings on such installations: ar: `u' modifier ignored since `D' is the default (see `U') The 'u' option (at least with GNU binutils) did small optimization during repeated builds because it instructed 'ar' to not open/close unchanged *.o files and to rather read their contents from old archive file. However, its removal should not cause a big performance hit for usual workflows. Distributions started using --enable-deterministic-archives knowing that it would disable the 'u', just to rather have a bit more deterministic builds. Also, to justify this change a bit more, keeping 'u' in ARFLAGS could only result in many per-project changes to override Automake's ARFLAGS default, just to silent such warnings. Fixes bug#20082. Reported by Eric Blake. * bin/autoamke.in (handle_libraries): Use 'ARFLAGS=cr' by default. * doc/automake.texi (Building a library): Mention the changed ARFLAGS default. (@c LocalWords): Replace 'cru' with 'cr'. * m4/ar-lib.m4 (AM_PROG_AR): Cut out 'cru' string into separate ARFLAGS variable with new default 'cr'. * NEWS: Document. --- NEWS | 4 ++++ bin/automake.in | 2 +- doc/automake.texi | 4 ++-- m4/ar-lib.m4 | 3 ++- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 9f76c1f..b611868 100644 --- a/NEWS +++ b/NEWS @@ -103,6 +103,10 @@ New in 1.16: This was the second part of automake bug#13928. +* Miscellaneous changes: + + - Changed the default value of $ARFLAGS from 'cru' to 'cr'. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ New in 1.15: diff --git a/bin/automake.in b/bin/automake.in index 355d7ff..0c29184 100644 --- a/bin/automake.in +++ b/bin/automake.in @@ -2538,7 +2538,7 @@ sub handle_libraries () } define_variable ('AR', 'ar', INTERNAL); - define_variable ('ARFLAGS', 'cru', INTERNAL); + define_variable ('ARFLAGS', 'cr', INTERNAL); define_verbose_tagvar ('AR'); foreach my $pair (@liblist) diff --git a/doc/automake.texi b/doc/automake.texi index e46212f..bc1f032 100644 --- a/doc/automake.texi +++ b/doc/automake.texi @@ -5061,7 +5061,7 @@ library and the list of objects, and finally by calling @code{RANLIB} (Automake will complain otherwise). You should also call @code{AM_PROG_AR} to define @code{AR}, in order to support unusual archivers such as Microsoft lib. @code{ARFLAGS} will default to address@hidden; you can override this variable by setting it in your address@hidden; you can override this variable by setting it in your @file{Makefile.am} or by @code{AC_SUBST}ing it from your @file{configure.ac}. You can override the @code{AR} variable by defining a per-library @code{maude_AR} variable (@pxref{Program and @@ -13162,7 +13162,7 @@ suite failures, please attach the @file{test-suite.log} file. @c LocalWords: Miller's installable includedir inc pkgdata EXEEXT libexec bsd @c LocalWords: pkglib libexecdir prog libcpio cpio's dlopen dlpreopen linux @c LocalWords: subsubsection OBJEXT esac lib LTLIBRARIES liblob LIBADD AR ar address@hidden LocalWords: ARFLAGS cru ing maude libgettext lo LTLIBOBJS rpath SGI PRE yy address@hidden LocalWords: ARFLAGS cr ing maude libgettext lo LTLIBOBJS rpath SGI PRE yy @c LocalWords: libmaude CCLD CXXFLAGS FFLAGS LFLAGS OBJCFLAGS RFLAGS DEFS cc @c LocalWords: OBJCXXFLAGS @c LocalWords: SHORTNAME vtable srcdir nostdinc basename yxx cxx ll lxx gdb diff --git a/m4/ar-lib.m4 b/m4/ar-lib.m4 index 914b21b..767a76c 100644 --- a/m4/ar-lib.m4 +++ b/m4/ar-lib.m4 @@ -17,12 +17,13 @@ AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([ar-lib])dnl AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) : ${AR=ar} +: ${ARFLAGS=cr} AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], [AC_LANG_PUSH([C]) am_cv_ar_interface=ar AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], - [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' + [am_ar_try='$AR $ARFLAGS libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=ar -- 2.1.0