Hash :
9877109c
Author :
Date :
2013-05-14T16:08:32
compile: rewrite AC_PROG_CC with AM_PROG_CC_C_O contents
This is a much simpler rewrite than the one we attempted in the past,
and that was later removed by commit 'v1.13.1d-137-g32eb770' of
2013-05-11 (compile: avoid AC_PROG_CC messy rewrite).
Not only this change simplifies the code a little, but has the welcome
collateral effect of making automatic dependency tracking work better
with compilers that doesn't grasp the '-c' and '-o' options together.
Issues in that setup have been caught by several failures in the target
'check-no-cc-c-o'.
Unfortunately, this change has less welcome collateral effects:
1. AM_PROG_AR must now be called *after* AC_PROG_CC;
2. Autoconf emits extra warnings when used with Automake-generated
aclocal.m4.
These are unacceptable regressions for a release, but since we are
going to fix them soon enough in a follow-up patch (surely to be
applied before Automake 1.14 is released) we don't worry too much.
* m4/init.m4: Redefine AC_PROG_CC early, to automatically invoke
AM_PROG_CC_C_O as well. Accordingly, drop now-unneeded "automagical"
AM_PROG_CC_C_O expansion at later time (which took place thanks to
a AC_CONFIG_COMMANDS_PRE call).
* m4/minuso.m4 (AM_PROG_CC_C_O): Ensure the expansion of the body
of this macro takes place with C as "current Autoconf language" (use
AC_LANG_PUSH/AC_LANG_POP).
* m4/ar-lib.m4 (AM_PROG_AR): Likewise. Also, require this macro to
be expanded *after* AC_PROG_CC (so that any rewrite of $CC, if required,
has already taken place).
* t/add-missing.tap: Adjust to avoid spurious failures.
* t/aclocal-deps.sh: Likewise, by having AM_PROG_AR called *after*
AC_PROG_CC.
* t/subobj-clean-lt-pr10697.sh: Likewise.
* t/alloca.sh: Likewise.
* t/condlib.sh: Likewise.
* t/discover.sh: Likewise.
* t/objc-megademo.sh: Likewise.
* t/ccnoco.sh: Extend a little.
* t/ccnoco-deps.sh: New test.
* t/ccnoco-lib.sh: Likewise.
* t/ccnoco-lt.sh: Likewise.
* t/list-of-tests.mk: Add them.
Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
#! /bin/sh
# Copyright (C) 2001-2013 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 to make sure we can compile libtool libraries when the compiler
# doesn't understand '-c -o'.
required='gcc libtoolize' # For cc-no-c-o.
. test-init.sh
cat >> configure.ac << 'END'
AC_PROG_CC
AM_PROG_AR
LT_INIT
$CC --version
$CC -v
AC_OUTPUT
END
cat > Makefile.am << 'END'
lib_LTLIBRARIES = libwish.la
END
cat > libwish.c << 'END'
int wish_granted (void)
{
return 0;
}
END
# Make sure the compiler doesn't understand '-c -o'.
CC=$am_testaux_builddir/cc-no-c-o; export CC
libtoolize --verbose --install
$ACLOCAL
$AUTOCONF
$AUTOMAKE --copy --add-missing
for vpath in : false; do
if $vpath; then
srcdir=..
mkdir build
cd build
else
srcdir=.
fi
$srcdir/configure >stdout || { cat stdout; exit 1; }
cat stdout
$EGREP 'understands? -c and -o together.* no$' stdout
# No repeated checks please.
test $(grep ".*-c['\" ].*-o['\" ]" stdout \
| $FGREP -v ' -c -o file.o' | wc -l) -eq 1
# Once we have rewritten $CC to use our 'compile' wrapper script,
# libtool should pick it up correctly, and not mess with the
# redefinition.
grep '^checking if .*/compile .*supports -c -o file\.o\.\.\. yes' stdout
# And of course, we should be able to build our package.
$MAKE
cd $srcdir
done
$MAKE distcheck
: