[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] Add new 'AM_PROG_AR' macro, triggering the 'ar-lib' script.
From: |
Peter Rosin |
Subject: |
Re: [PATCH] Add new 'AM_PROG_AR' macro, triggering the 'ar-lib' script. |
Date: |
Tue, 14 Sep 2010 23:22:29 +0200 |
User-agent: |
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100802 Thunderbird/3.1.2 |
Hi Stefano,
Den 2010-09-14 20:14 skrev Stefano Lattarini:
> On Tuesday 14 September 2010, Peter Rosin wrote:
>> Hi!
> Hello Peter. Hope you don't mind a quick partial review until we
> hear from Ralf...
Not at all, he's got enough to do as it is I would think...
>> This is a second attempt to implement AM_PROG_AR. The previous
>> attempt was bundled with the addition of the 'ar-lib' script but
>> was left behind. I have now fleshed it out with tests and
>> portability warnings etc.
>>
>> I think I have everything in the thread covered:
>> http://lists.gnu.org/archive/html/automake-patches/2010-08/msg00116.html
>> This is going with case (1) in that message.
>>
>> However, I have only updated tests/ar.test to cope with the new
>> reality. So, a lot of tests (100?) are likely to fall over due to
>> the new portability warnings. The reason is that I don't know on
>> what branch I should base such an intrusive patch.
> You mean a patch adding AM_PROG_AR into all the tests which now requires
> it, right? I'd base that on msvc branch (in fact, I'd make it a squash-in
> for your attached patch).
Yes, that's exactly what I mean.
>> I fear that such a patch, when merged elsewhere, will be incomplete
> No big deal IMHO, we could resort to a fake merge in such case
> (`git commit --amend' can also edit merge commits AFAIK), fixing
> all the tests that need to be fixed. And there will be few of
> them anyway IMO.
Ok.
>> or otherwise difficult to merge due to other changes. I'm also not
>> sure if this is the desired route. Please advise.
> Done :-). But let's hear what Ralf has to say, he might know better.
Yes. I don't want to do that bit of work in vain.
>> This patch is on top of the msvc branch.
>>
>> AC_PROG_RANLIB is rendered obsolete by LT_INIT. Is it also rendered
>> obsolete by AC_PROG_LIBTOOL? Should I not care about libtool 1.5?
>>
>> Cheers,
>> Peter
>>
>> diff --git a/ChangeLog b/ChangeLog
>> + * tests/ar-lib2.test: New test. Test if AM_PROG_AR triggers
>> + install of ar-lib.
> I feel that something like "New test, checking that AM_PROG_AR triggers
> install of ar-lib" would sound more natural. More instances below. This
> is admittedly a bike-shedding issue, so feel free to ignore it.
ok
>> diff --git a/m4/ar-lib.m4 b/m4/ar-lib.m4
>> +# AM_PROG_AR
>> +# --------------
> You should add explanation of what this macro does, and, if it takes
> arguments, list them in a sort of "macro prototype"; e.g.
>
> # AM_PROG_AR([ACT-IF-FAIL])
> # -------------------------
> # Try to determine the the archiver interface (FIXME: more details);
> # If unable to, run ACT-IF-FAIL (default: abort configure).
>
> I guess you can come up with a better explanation ;-)
I'm not so sure. I stole yours and added some words instead of the FIXME.
>> +AC_CHECK_TOOLS(AR, [ar lib "link -lib"], false)
> Why not use proper m4 quoting everywhere? E.g.:
> AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false])
Why not indeed.
>> +: ${AR=ar}
>> +
>> +AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface],
>> + [am_cv_ar_interface=ar
>> + AC_COMPILE_IFELSE([[int some_variable = 0;]],
>> + [am_ar_try='$AR cru libconftest.a conftest.$ac_objext
>> >&AS_MESSAGE_LOG_FD'
> What is the rationale for not redirecting stderr here, along with stdout?
But stderr is redirected?
>> + AC_TRY_EVAL([am_ar_try])
>> + if test "$ac_status" -eq 0; then
>> + am_cv_ar_interface=ar
>> + else
>> + am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext'
> What is the rationale for not redirecting stdout/stderr here, considered
> how AC_TRY_EVAL is used above (with redirection)?
No rationale at all, I just didn't see any trash. But it's better to
redirect now than to wait for the bug report. Fixed.
>> + # FIXME: It is wrong to rewrite AR.
>> + # But if we don't then we get into trouble of one sort or another.
>> + # A longer-term fix would be to have automake use am__AR in this case,
>> + # and then we could set am__AR="\$(top_srcdir)/ar-lib \$(AR)"
> Do you mean am__AR="$am_aux_dir/ar-lib $AR" ?
I'm not sure what I mean actually. I stole shamelessly from m4/minuso.m4.
I replaced top_srcdir with am_aux_dir for this round, but kept the
Makefile notation, or is that totally bogus too?
>> diff --git a/tests/ar-lib4.test b/tests/ar-lib4.test
>> +$AUTOCONF
> useless autoconf call
>> +$AUTOCONF
> another useless autoconf call
Zapped. Also for ar-lib3.test
> This testcase checks for two distinct automake failures; I'd prefer
> that to be done in two different tests, one checking for missing
> `AM_PROG_AR' call, the other one for missing `ar-lib' auxfile.
> WDYT?
I added ar-lib7.test and removed the second AUTOMAKE_fails from
both ar-lib3.test and ar-lib4.test.
>> diff --git a/tests/ar-lib5.test b/tests/ar-lib5.test
> Hmm... grepping the output of make might be fragile...
>
> What about rewriting the test on the following lines, to make it even
> more "semantic"?
> 1. Add proper call to `AC_CONFIG_AUX_DIR' in configure.in (with
> argument, say, `arlib-auxdir')
> 2. Add to Makefile.am:
> check-local:
> test -f ar-lib-worked
> MOSTLYCLEANFILES = ar-lib-worked
> (the last line required for "make distcheck" below)
> 3. Put the fake `ar-lib' into `arlib-auxdir'; this way, the call to
> automake should ensure that the new code respects AC_CONFIG_AUX_DIR
> 4. Make the fake `ar-lib' create the file `ar-lib-worked' in the
> current builddir:
> $ cat arlib-auxdir/ar-lib
> #! /bin/sh
> : > ar-lib-worked
> 5. Run "$MAKE check" and "$MAKE distcheck"
I had to also add a line
DISTCHECK_CONFIGURE_FLAGS = AR=lib RANLIB=:
to Makefile.am and adjust the creation on configure.in to get
the correct ordering.
>> diff --git a/tests/ar-lib6.test b/tests/ar-lib6.test
>> +$AUTOCONF 2>stderr
>> +cat stderr
> Please ansure the stderr is displayed even if autoconf fails:
> $AUTOCONF 2>stderr || { cat stderr >&2; Exit 1; }
> cat stderr >&2
>
> Yes, I admit this idiom is annoying and should be factored out
> somehow... patch in preparation ;-)
Ok, can you please hold that until after this is through the pipe
though, so that I don't have to fixup when merging?
>> diff --git a/tests/ar.test b/tests/ar.test
>> -$AUTOMAKE
>> +$AUTOMAKE --add-missing
> I'd rather create a dummy (empty) ar-lib above, and do not change
> this line.
Ok.
>> diff --git a/tests/defs.in b/tests/defs.in
>> + ( $AR -? ) || exit_status=$?
> Nitpicking: why a subshell here?
I started out by copying the cl) branch and it stuck after I
realized that lib exited non-zero no matter what when given
non-work options (for options that produce output that is,
"lib -nologo" does return zero but without output so feels
a bit uninformative).
Thanks for the review! Below is the next iteration.
Cheers,
Peter
>From a5f4e5632a2a197aceccf560eef2949c5e1cd294 Mon Sep 17 00:00:00 2001
From: Peter Rosin <address@hidden>
Date: Tue, 14 Sep 2010 22:53:17 +0200
Subject: [PATCH] Add new 'AM_PROG_AR' macro, triggering the 'ar-lib' script.
* m4/ar-lib.m4: New macro AM_PROG_AR, which locates an
archiver and triggers the auxiliary 'ar-lib' script if needed.
* m4/Makefile.am: Add above.
* automake.in (seen_ar): New variable.
(scan_autoconf_traces): Set it.
(handle_libraries): Don't set default values for AR and ARFLAGS
if AM_PROG_AR has been seen.
(handle_libraries, handle_ltlibraries): Require AM_PROG_AR for
portability.
* doc/automake.texi (Public Macros): Mention the new
'AM_PROG_AR' macro.
(Subpackages): Add AM_PROG_AR to the example.
(A Library): Adjust recommendations for AR given the new
AM_PROG_AR macro.
* tests/ar.test: Adjust to avoid portability warnings.
* tests/ar-lib2.test: New test, checking that AM_PROG_AR triggers
install of ar-lib.
* tests/ar-lib3.test: New test, checking that lib_LIBRARIES
requires AM_PROG_AR.
* tests/ar-lib4.test: New test, checking that lib_LTLIBRARIES
requires AM_PROG_AR.
* tests/ar-lib5.test: New test, checking that AM_PROG_AR triggers
use of ar-lib when the archiver is Microsoft lib.
* tests/ar-lib6.test: New test, checking the ordering of
AM_PROG_AR and LT_INIT.
* tests/ar-lib7.test: New test, checking that automake warns
if ar-lib is missing.
* tests/defs.in: New required entry 'lib'.
* tests/Makefile.am: Add new tests.
* NEWS: Update.
---
ChangeLog | 35 ++++++++++++++++++++++++++++
NEWS | 3 ++
automake.in | 29 ++++++++++++++++++++++-
doc/automake.texi | 18 ++++++++++----
m4/Makefile.am | 1 +
m4/Makefile.in | 1 +
m4/ar-lib.m4 | 60 ++++++++++++++++++++++++++++++++++++++++++++++++
tests/Makefile.am | 6 +++++
tests/Makefile.in | 6 +++++
tests/ar-lib2.test | 40 ++++++++++++++++++++++++++++++++
tests/ar-lib3.test | 45 ++++++++++++++++++++++++++++++++++++
tests/ar-lib4.test | 57 ++++++++++++++++++++++++++++++++++++++++++++++
tests/ar-lib5.test | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++
tests/ar-lib6.test | 38 ++++++++++++++++++++++++++++++
tests/ar-lib7.test | 41 +++++++++++++++++++++++++++++++++
tests/ar.test | 3 ++
tests/defs.in | 10 ++++++++
17 files changed, 450 insertions(+), 7 deletions(-)
create mode 100644 m4/ar-lib.m4
create mode 100755 tests/ar-lib2.test
create mode 100755 tests/ar-lib3.test
create mode 100755 tests/ar-lib4.test
create mode 100755 tests/ar-lib5.test
create mode 100755 tests/ar-lib6.test
create mode 100755 tests/ar-lib7.test
diff --git a/ChangeLog b/ChangeLog
index 02f2fcd..36adf60 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,38 @@
+2010-09-14 Peter Rosin <address@hidden>
+ Ralf Wildenhues <address@hidden>
+
+ Add new 'AM_PROG_AR' macro, triggering the 'ar-lib' script.
+ * m4/ar-lib.m4: New macro AM_PROG_AR, which locates an
+ archiver and triggers the auxiliary 'ar-lib' script if needed.
+ * m4/Makefile.am: Add above.
+ * automake.in (seen_ar): New variable.
+ (scan_autoconf_traces): Set it.
+ (handle_libraries): Don't set default values for AR and ARFLAGS
+ if AM_PROG_AR has been seen.
+ (handle_libraries, handle_ltlibraries): Require AM_PROG_AR for
+ portability.
+ * doc/automake.texi (Public Macros): Mention the new
+ 'AM_PROG_AR' macro.
+ (Subpackages): Add AM_PROG_AR to the example.
+ (A Library): Adjust recommendations for AR given the new
+ AM_PROG_AR macro.
+ * tests/ar.test: Adjust to avoid portability warnings.
+ * tests/ar-lib2.test: New test, checking that AM_PROG_AR triggers
+ install of ar-lib.
+ * tests/ar-lib3.test: New test, checking that lib_LIBRARIES
+ requires AM_PROG_AR.
+ * tests/ar-lib4.test: New test, checking that lib_LTLIBRARIES
+ requires AM_PROG_AR.
+ * tests/ar-lib5.test: New test, checking that AM_PROG_AR triggers
+ use of ar-lib when the archiver is Microsoft lib.
+ * tests/ar-lib6.test: New test, checking the ordering of
+ AM_PROG_AR and LT_INIT.
+ * tests/ar-lib7.test: New test, checking that automake warns
+ if ar-lib is missing.
+ * tests/defs.in: New required entry 'lib'.
+ * tests/Makefile.am: Add new tests.
+ * NEWS: Update.
+
2010-09-02 Peter Rosin <address@hidden>
Make ar-lib support backslashed files in archives.
diff --git a/NEWS b/NEWS
index 6971bd7..41a6cc8 100644
--- a/NEWS
+++ b/NEWS
@@ -8,6 +8,9 @@ New in 1.11.0a:
- The `compile' script now converts some options for MSVC for a better
user experience. Similarly, the new `ar-lib' script wraps Microsoft lib.
+ - New macro AM_PROG_AR that looks for an archiver and wraps it in the new
+ 'ar-lib' auxiliary script if the found archiver is Microsoft lib.
+
Bugs fixed in 1.11.0a:
* Bugs introduced by 1.11:
diff --git a/automake.in b/automake.in
index 8fd6869..f672286 100755
--- a/automake.in
+++ b/automake.in
@@ -396,6 +396,9 @@ my $package_version_location;
# TRUE if we've seen AM_ENABLE_MULTILIB.
my $seen_multilib = 0;
+# TRUE if we've seen AM_PROG_AR
+my $seen_ar = 0;
+
# TRUE if we've seen AM_PROG_CC_C_O
my $seen_cc_c_o = 0;
@@ -2718,8 +2721,11 @@ sub handle_libraries
$var->requires_variables ('library used', 'RANLIB');
}
- &define_variable ('AR', 'ar', INTERNAL);
- &define_variable ('ARFLAGS', 'cru', INTERNAL);
+ if (! $seen_ar)
+ {
+ &define_variable ('AR', 'ar', INTERNAL);
+ &define_variable ('ARFLAGS', 'cru', INTERNAL);
+ }
&define_verbose_tagvar ('AR');
foreach my $pair (@liblist)
@@ -2800,6 +2806,13 @@ sub handle_libraries
&check_libobjs_sources ($xlib, $xlib . '_LIBADD');
}
}
+
+ if (! $seen_ar)
+ {
+ msg ('portability', $where,
+ "`$onelib': linking libraries requires "
+ . "`AM_PROG_AR' in `$configure_ac'")
+ }
}
}
@@ -3037,6 +3050,13 @@ sub handle_ltlibraries
&check_libobjs_sources ($xlib, $xlib . '_LIBADD');
}
}
+
+ if (! $seen_ar)
+ {
+ msg ('portability', $where,
+ "`$onelib': linking libtool libraries requires "
+ . "`AM_PROG_AR' in `$configure_ac'")
+ }
}
}
@@ -5242,6 +5262,7 @@ sub scan_autoconf_traces ($)
AM_GNU_GETTEXT_INTL_SUBDIR => 0,
AM_INIT_AUTOMAKE => 0,
AM_MAINTAINER_MODE => 0,
+ AM_PROG_AR => 0,
AM_PROG_CC_C_O => 0,
AM_SILENT_RULES => 0,
_AM_SUBST_NOTMAKE => 1,
@@ -5433,6 +5454,10 @@ sub scan_autoconf_traces ($)
{
$seen_maint_mode = $where;
}
+ elsif ($macro eq 'AM_PROG_AR')
+ {
+ $seen_ar = $where;
+ }
elsif ($macro eq 'AM_PROG_CC_C_O')
{
$seen_cc_c_o = $where;
diff --git a/doc/automake.texi b/doc/automake.texi
index 66c5a7e..97d7a60 100644
--- a/doc/automake.texi
+++ b/doc/automake.texi
@@ -3861,6 +3861,12 @@ environment, or use the @option{--with-lispdir} option to
@command{configure} to explicitly set the correct path (if you're sure
you have an @command{emacs} that supports Emacs Lisp).
address@hidden AM_PROG_AR
address@hidden AM_PROG_AR
address@hidden AR
+You must use this macro when you use the archiver in your project, if
+you want support for weird archivers such as Microsoft lib.
+
@item AM_PROG_AS
@acindex AM_PROG_AS
@vindex CCAS
@@ -4485,6 +4491,7 @@ AC_INIT([hand], [1.2])
AC_CONFIG_AUX_DIR([.])
AM_INIT_AUTOMAKE
AC_PROG_CC
+AM_PROG_AR
AC_PROG_RANLIB
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
@@ -4923,11 +4930,12 @@ by invoking @samp{$(AR) $(ARFLAGS)} followed by the
name of the
library and the list of objects, and finally by calling
@samp{$(RANLIB)} on that library. You should call
@code{AC_PROG_RANLIB} from your @file{configure.ac} to define
address@hidden (Automake will complain otherwise). @code{AR} and
address@hidden default to @code{ar} and @code{cru} respectively; you
-can override these two variables my setting them in your
address@hidden, by @code{AC_SUBST}ing them from your
address@hidden, or by defining a per-library @code{maude_AR}
address@hidden (Automake will complain otherwise). You should also
+call @code{AM_PROG_AR} to define @code{AR}, in order to support weird
+archivers. @code{ARFLAGS} will default to @code{cru}; you can override
+this variable by setting it in your @file{Makefile.am} or by
address@hidden 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 Library Variables}).
@cindex Empty libraries
diff --git a/m4/Makefile.am b/m4/Makefile.am
index 0cf074b..c801894 100644
--- a/m4/Makefile.am
+++ b/m4/Makefile.am
@@ -22,6 +22,7 @@ m4datadir = $(datadir)/aclocal-$(APIVERSION)
dist_m4data_DATA = \
$(top_srcdir)/m4/amversion.m4 \
+ar-lib.m4 \
as.m4 \
auxdir.m4 \
ccstdc.m4 \
diff --git a/m4/Makefile.in b/m4/Makefile.in
index 270ee91..4cd3e28 100644
--- a/m4/Makefile.in
+++ b/m4/Makefile.in
@@ -185,6 +185,7 @@ top_srcdir = @top_srcdir@
m4datadir = $(datadir)/aclocal-$(APIVERSION)
dist_m4data_DATA = \
$(top_srcdir)/m4/amversion.m4 \
+ar-lib.m4 \
as.m4 \
auxdir.m4 \
ccstdc.m4 \
diff --git a/m4/ar-lib.m4 b/m4/ar-lib.m4
new file mode 100644
index 0000000..f670f6e
--- /dev/null
+++ b/m4/ar-lib.m4
@@ -0,0 +1,60 @@
+## -*- Autoconf -*-
+# Copyright (C) 2010
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 1
+
+# AM_PROG_AR
+# --------------
+# AM_PROG_AR([ACT-IF-FAIL])
+# -------------------------
+# Try to determine the the archiver interface and trigger the
+# ar-lib wrapper if it is needed;
+# If unable to, run ACT-IF-FAIL (default: abort configure).
+AC_DEFUN([AM_PROG_AR],
+[AC_BEFORE([$0], [LT_INIT])dnl
+AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl
+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}
+
+AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface],
+ [am_cv_ar_interface=ar
+ AC_COMPILE_IFELSE([[int some_variable = 0;]],
+ [am_ar_try='$AR cru 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
+ else
+ am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext
>&AS_MESSAGE_LOG_FD'
+ AC_TRY_EVAL([am_ar_try])
+ if test "$ac_status" -eq 0; then
+ am_cv_ar_interface=lib
+ else
+ m4_default([$1],
+ [AC_MSG_ERROR([could not determine $AR interface])])
+ fi
+ fi
+ rm -f conftest.lib libconftest.a
+ ])
+ ])
+
+case $am_cv_ar_interface in
+ar)
+ ;;
+lib)
+ # Microsoft lib, so override with the ar-lib wrapper script.
+ # FIXME: It is wrong to rewrite AR.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__AR in this case,
+ # and then we could set am__AR="\$(am_aux_dir)/ar-lib \$(AR)"
+ AR="$am_aux_dir/ar-lib $AR"
+ ;;
+esac
+AC_SUBST([AR])dnl
+])
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 01acd76..ecc6ab6 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -89,6 +89,12 @@ ansi8.test \
ansi9.test \
ansi10.test \
ar-lib.test \
+ar-lib2.test \
+ar-lib3.test \
+ar-lib4.test \
+ar-lib5.test \
+ar-lib6.test \
+ar-lib7.test \
ar.test \
ar2.test \
asm.test \
diff --git a/tests/Makefile.in b/tests/Makefile.in
index ff547a0..32290b6 100644
--- a/tests/Makefile.in
+++ b/tests/Makefile.in
@@ -327,6 +327,12 @@ ansi8.test \
ansi9.test \
ansi10.test \
ar-lib.test \
+ar-lib2.test \
+ar-lib3.test \
+ar-lib4.test \
+ar-lib5.test \
+ar-lib6.test \
+ar-lib7.test \
ar.test \
ar2.test \
asm.test \
diff --git a/tests/ar-lib2.test b/tests/ar-lib2.test
new file mode 100755
index 0000000..7697876
--- /dev/null
+++ b/tests/ar-lib2.test
@@ -0,0 +1,40 @@
+#! /bin/sh
+# Copyright (C) 2010 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test if AM_PROG_AR installs ar-lib.
+
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CC
+AM_PROG_AR
+END
+
+cat > Makefile.am << 'END'
+bin_PROGRAMS = wish
+wish_SOURCES = a.c
+END
+
+$ACLOCAL
+$AUTOMAKE --add-missing 2>stderr || { cat stderr >&2; Exit 1; }
+cat stderr >&2
+# Make sure ar-lib is installed, and that Automake says so.
+grep 'install.*ar-lib' stderr
+test -f ar-lib
+
+:
diff --git a/tests/ar-lib3.test b/tests/ar-lib3.test
new file mode 100755
index 0000000..f3e8aa1
--- /dev/null
+++ b/tests/ar-lib3.test
@@ -0,0 +1,45 @@
+#! /bin/sh
+# Copyright (C) 2010 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test if lib_LIBRARIES requests AM_PROG_AR.
+
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CC
+AC_PROG_RANLIB
+END
+
+cat > Makefile.am << 'END'
+lib_LIBRARIES = libfoo.a
+libfoo_a_SOURCES = foo.c
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+
+grep 'requires.*AM_PROG_AR' stderr
+
+cat >> configure.in << 'END'
+AM_PROG_AR
+END
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+
+:
diff --git a/tests/ar-lib4.test b/tests/ar-lib4.test
new file mode 100755
index 0000000..4813191
--- /dev/null
+++ b/tests/ar-lib4.test
@@ -0,0 +1,57 @@
+#! /bin/sh
+# Copyright (C) 2010 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test if lib_LTLIBRARIES requests AM_PROG_AR.
+
+required=libtoolize
+. ./defs || Exit 1
+
+set -e
+
+cp configure.in X
+
+cat >> configure.in << 'END'
+AC_PROG_CC
+AC_PROG_RANLIB
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+lib_LTLIBRARIES = libfoo.la
+libfoo_la_SOURCES = foo.c
+END
+
+libtoolize
+$ACLOCAL
+AUTOMAKE_fails
+
+grep 'requires.*AM_PROG_AR' stderr
+
+cp X configure.in
+
+cat >> configure.in << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_PROG_LIBTOOL
+AC_OUTPUT
+END
+
+$ACLOCAL
+$AUTOMAKE --add-missing
+
+:
diff --git a/tests/ar-lib5.test b/tests/ar-lib5.test
new file mode 100755
index 0000000..63ae2a3
--- /dev/null
+++ b/tests/ar-lib5.test
@@ -0,0 +1,64 @@
+#! /bin/sh
+# Copyright (C) 2010 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test if AM_PROG_AR triggers the use of the ar-lib script.
+
+requires=lib
+. ./defs || Exit 1
+
+set -e
+
+cat > configure.in << 'END'
+AC_INIT([ar-lib5.test], [1.0])
+AC_CONFIG_AUX_DIR([auxdir])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+lib_LIBRARIES = libwish.a
+libwish_a_SOURCES = wish.c
+
+check-local:
+ test -f ar-lib-worked
+MOSTLYCLEANFILES = ar-lib-worked
+DISTCHECK_CONFIGURE_FLAGS = AR=lib RANLIB=:
+END
+
+cat > wish.c << 'END'
+int wish(void) { return 0; }
+END
+
+mkdir auxdir
+cat > auxdir/ar-lib << 'END'
+# /bin/sh
+:> ar-lib-worked
+END
+chmod +x auxdir/ar-lib
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE --add-missing
+./configure AR=lib RANLIB=:
+
+$MAKE check
+$MAKE distcheck
+
+:
diff --git a/tests/ar-lib6.test b/tests/ar-lib6.test
new file mode 100755
index 0000000..704af83
--- /dev/null
+++ b/tests/ar-lib6.test
@@ -0,0 +1,38 @@
+#! /bin/sh
+# Copyright (C) 2010 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test AM_PROG_AR ordering requirements
+
+required=libtoolize
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CC
+AC_PROG_RANLIB
+m4_ifdef([LT_INIT], [LT_INIT], [AC_PROG_LIBTOOL])
+AM_PROG_AR
+END
+
+libtoolize
+$ACLOCAL
+$AUTOCONF 2>stderr || { cat stderr >&2; Exit 1; }
+cat stderr >&2
+
+$EGREP '(AC_PROG_LIBTOOL|LT_INIT).*before.*AM_PROG_AR' stderr
+
+:
diff --git a/tests/ar-lib7.test b/tests/ar-lib7.test
new file mode 100755
index 0000000..5182894
--- /dev/null
+++ b/tests/ar-lib7.test
@@ -0,0 +1,41 @@
+#! /bin/sh
+# Copyright (C) 2010 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test if automake warns if ar-lib is missing.
+
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_PROG_CC
+AC_PROG_RANLIB
+AM_PROG_AR
+END
+
+cat > Makefile.am << 'END'
+lib_LIBRARIES = libfoo.a
+libfoo_a_SOURCES = foo.c
+END
+
+$ACLOCAL
+AUTOMAKE_fails
+
+grep 'ar-lib.*not found' stderr
+
+$AUTOMAKE --add-missing
+
+:
diff --git a/tests/ar.test b/tests/ar.test
index d68fc54..b7ba080 100755
--- a/tests/ar.test
+++ b/tests/ar.test
@@ -21,6 +21,7 @@
set -e
cat >> configure.in << 'END'
+AM_PROG_AR
AC_SUBST([AR], ['echo it works'])
AC_SUBST([ARFLAGS], ['>'])
AC_SUBST([RANLIB], ['echo really works >>'])
@@ -32,6 +33,8 @@ lib_LIBRARIES = libfoo.a
libfoo_a_SOURCES =
END
+:> ar-lib
+
$ACLOCAL
$AUTOCONF
$AUTOMAKE
diff --git a/tests/defs.in b/tests/defs.in
index af4a3cd..bd2e813 100644
--- a/tests/defs.in
+++ b/tests/defs.in
@@ -156,6 +156,16 @@ do
echo "$me: running $CC -V -help"
( $CC -V -help ) || exit 77
;;
+ lib)
+ AR=lib
+ export AR
+ # There is no way to get any identifying output with
+ # a zero exit status. So, remap exit status 76 to 0.
+ echo "$me: running $AR -?"
+ exit_status=0
+ $AR -? || exit_status=$?
+ test $exit_status = 76 && exit 77
+ ;;
makedepend)
echo "$me: running makedepend -f-"
( makedepend -f- ) || exit 77
--
1.7.1
- [PATCH] Add new 'AM_PROG_AR' macro, triggering the 'ar-lib' script., Peter Rosin, 2010/09/14
- Re: [PATCH] Add new 'AM_PROG_AR' macro, triggering the 'ar-lib' script., Stefano Lattarini, 2010/09/14
- Re: [PATCH] Add new 'AM_PROG_AR' macro, triggering the 'ar-lib' script.,
Peter Rosin <=
- Re: [PATCH] Add new 'AM_PROG_AR' macro, triggering the 'ar-lib' script., Stefano Lattarini, 2010/09/14
- Re: [PATCH] Add new 'AM_PROG_AR' macro, triggering the 'ar-lib' script., Peter Rosin, 2010/09/15
- Re: [PATCH] Add new 'AM_PROG_AR' macro, triggering the 'ar-lib' script., Stefano Lattarini, 2010/09/15
- Re: [PATCH] Add new 'AM_PROG_AR' macro, triggering the 'ar-lib' script., Peter Rosin, 2010/09/16
- Re: [PATCH] Add new 'AM_PROG_AR' macro, triggering the 'ar-lib' script., Stefano Lattarini, 2010/09/16
- Re: [PATCH] Add new 'AM_PROG_AR' macro, triggering the 'ar-lib' script., Ralf Wildenhues, 2010/09/16
- Re: [PATCH] Add new 'AM_PROG_AR' macro, triggering the 'ar-lib' script., Eric Blake, 2010/09/16
- Re: [PATCH] Add new 'AM_PROG_AR' macro, triggering the 'ar-lib' script., Ralf Wildenhues, 2010/09/16
- Re: [PATCH] Add new 'AM_PROG_AR' macro, triggering the 'ar-lib' script., Ralf Wildenhues, 2010/09/16
- Re: [PATCH] Add new 'AM_PROG_AR' macro, triggering the 'ar-lib' script., Peter Rosin, 2010/09/17