[autoconf-conversion] Something to start with
Daniel Jacobowitz
drow at false.org
Sat Jun 14 20:51:17 UTC 2003
On Fri, Jun 13, 2003 at 12:19:25AM -0400, Daniel Jacobowitz wrote:
> - I also did libiberty. I have not tested a combined tree cygwin build
> yet, which needs to happen, since it exercises the relevant hard case. I
> also reimplemented AC_NO_EXECUTABLES based on another of Alexandre's
> suggestions, which proved quite good: disable link tests at runtime if
> GCC_NO_EXECUTABLES is encountered, rather than at autoconf time if it is
> seen in the file.
>
> I've attached the patch for libiberty in case someone wants to give it a
> whirl before I do, in more combinations. I'm testing eight kinds of builds
> right now and I'll have a few more before I'm satisfied, but I won't have
> time to work on this for a day or two, so I wanted to give the list a kick.
Here's a fixed version, which actually does build Cygwin. libiberty's
custom strncmp test uses AC_REQUIRE([AC_FUNC_MMAP]), so I had to wrap
AC_FUNC_MMAP; otherwise we perform a link test. The alternative would
have been invoking AC_FUNC_MMAP instead of AC_REQUIRE'ing it. I can
switch if someone prefers.
So now for the million dollar question: do I submit this to
gcc-patches, or do we try to get most/all directories finished first?
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer
2003-06-14 Daniel Jacobowitz <drow at mvista.com>
* acx.m4: Add GCC_NO_EXECUTABLES.
2003-06-14 Daniel Jacobowitz <drow at mvista.com>
* aclocal.m4: Include no-executables.m4. Use AC_LIBOBJ. Remove
LIB_AC_PROG_CC.
* configure.in: Use GCC_NO_EXECUTABLES and AC_PROG_CC instead of
LIB_AC_PROG_CC. Also substitue ac_libiberty_warn_cflags here.
Use AC_LIBOBJ. Remove AC_PROG_CC_WORKS call. Update AC_PREREQ.
Move call to AC_ISC_POSIX.
* configure: Regenerate using autoconf 2.57.
Index: libiberty/aclocal.m4
===================================================================
RCS file: /big/fsf/rsync/src-cvs/src/libiberty/aclocal.m4,v
retrieving revision 1.7
diff -u -p -r1.7 aclocal.m4
--- libiberty/aclocal.m4 7 May 2003 18:06:23 -0000 1.7
+++ libiberty/aclocal.m4 14 Jun 2003 17:21:22 -0000
@@ -1,4 +1,5 @@
sinclude(../config/accross.m4)
+sinclude(../config/acx.m4)
dnl See whether strncmp reads past the end of its string parameters.
dnl On some versions of SunOS4 at least, strncmp reads a word at a time
@@ -71,7 +72,7 @@ main ()
ac_cv_func_strncmp_works=no)
rm -f core core.* *.core])
if test $ac_cv_func_strncmp_works = no ; then
- LIBOBJS="$LIBOBJS strncmp.o"
+ AC_LIBOBJ([strncmp])
fi
])
@@ -117,48 +118,6 @@ if test $libiberty_cv_decl_needed_$1 = y
[Define if $1 is not declared in system header files.])
fi
])dnl
-
-# FIXME: We temporarily define our own version of AC_PROG_CC. This is
-# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We
-# are probably using a cross compiler, which will not be able to fully
-# link an executable. This should really be fixed in autoconf
-# itself.
-
-AC_DEFUN(LIB_AC_PROG_CC,
-[AC_BEFORE([$0], [AC_PROG_CPP])dnl
-AC_PROVIDE([AC_PROG_CC])
-AC_CHECK_PROG(CC, gcc, gcc)
-if test -z "$CC"; then
- AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
- test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
-fi
-
-AC_PROG_CC_GNU
-
-if test $ac_cv_prog_gcc = yes; then
- GCC=yes
- ac_libiberty_warn_cflags='-W -Wall -Wtraditional -pedantic'
-dnl Check whether -g works, even if CFLAGS is set, in case the package
-dnl plays around with CFLAGS (such as to build both debugging and
-dnl normal versions of a library), tasteless as that idea is.
- ac_test_CFLAGS="${CFLAGS+set}"
- ac_save_CFLAGS="$CFLAGS"
- CFLAGS=
- AC_PROG_CC_G
- if test "$ac_test_CFLAGS" = set; then
- CFLAGS="$ac_save_CFLAGS"
- elif test $ac_cv_prog_cc_g = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-O2"
- fi
-else
- GCC=
- ac_libiberty_warn_cflags=
- test "${CFLAGS+set}" = set || CFLAGS="-g"
-fi
-AC_SUBST(ac_libiberty_warn_cflags)
-])
# Work around a bug in autoheader. This can go away when we switch to
# autoconf >2.50. The use of define instead of AC_DEFUN is
Index: libiberty/configure.in
===================================================================
RCS file: /big/fsf/rsync/src-cvs/src/libiberty/configure.in,v
retrieving revision 1.47
diff -u -p -r1.47 configure.in
--- libiberty/configure.in 13 Jun 2003 01:50:48 -0000 1.47
+++ libiberty/configure.in 14 Jun 2003 20:45:34 -0000
@@ -1,6 +1,6 @@
dnl Process this file with autoconf to produce a configure script
-AC_PREREQ(2.13)
+AC_PREREQ(2.57)
AC_INIT(xmalloc.c)
# This works around the fact that libtool configuration may change LD
@@ -99,7 +99,13 @@ dnl to call AC_CHECK_PROG.
AC_CHECK_TOOL(AR, ar)
AC_CHECK_TOOL(RANLIB, ranlib, :)
-LIB_AC_PROG_CC
+GCC_NO_EXECUTABLES
+AC_PROG_CC
+
+if test x$GCC = xyes; then
+ ac_libiberty_warn_cflags='-W -Wall -Wtraditional -pedantic'
+fi
+AC_SUBST(ac_libiberty_warn_cflags)
AC_PROG_CC_C_O
# autoconf is lame and doesn't give us any substitution variable for this.
@@ -111,7 +117,6 @@ fi
AC_SUBST(NO_MINUS_C_MINUS_O)
AC_SUBST(OUTPUT_OPTION)
-AC_ISC_POSIX
AC_C_CONST
AC_C_INLINE
AC_C_BIGENDIAN_CROSS
@@ -250,7 +255,12 @@ if test -n "${with_target_subdir}"; then
# newlib provide and which ones we will be expected to provide.
if test "x${with_newlib}" = "xyes"; then
- LIBOBJS="asprintf.o basename.o insque.o random.o strdup.o vasprintf.o"
+ AC_LIBOBJ([asprintf])
+ AC_LIBOBJ([basename])
+ AC_LIBOBJ([insque])
+ AC_LIBOBJ([random])
+ AC_LIBOBJ([strdup])
+ AC_LIBOBJ([vasprintf])
for f in $funcs; do
case "$f" in
@@ -318,8 +328,16 @@ if test -z "${setobjs}"; then
# Handle VxWorks configuration specially, since on VxWorks the
# libraries are actually on the target board, not in the file
# system.
- LIBOBJS="basename.o getpagesize.o insque.o random.o strcasecmp.o"
- LIBOBJS="$LIBOBJS strncasecmp.o strdup.o vfork.o waitpid.o vasprintf.o"
+ AC_LIBOBJ([basename])
+ AC_LIBOBJ([getpagesize])
+ AC_LIBOBJ([insque])
+ AC_LIBOBJ([random])
+ AC_LIBOBJ([strcasecmp])
+ AC_LIBOBJ([strncasecmp])
+ AC_LIBOBJ([strdup])
+ AC_LIBOBJ([vfork])
+ AC_LIBOBJ([waitpid])
+ AC_LIBOBJ([vasprintf])
for f in $funcs; do
case "$f" in
basename | getpagesize | insque | random | strcasecmp)
@@ -366,7 +384,7 @@ if test -z "${setobjs}"; then
if test -n "${with_target_subdir}"
then
funcs="`echo $funcs | sed -e 's/random//'`"
- LIBOBJS="$LIBOBJS random.o"
+ AC_LIBOBJ([random])
vars="`echo $vars | sed -e 's/sys_siglist//'`"
checkfuncs="`echo $checkfuncs | sed -e 's/strsignal//' -e 's/psignal//'`"
fi
@@ -402,12 +420,12 @@ if test -z "${setobjs}"; then
# We haven't set the list of objects yet. Use the standard autoconf
# tests. This will only work if the compiler works.
- AC_PROG_CC_WORKS
+ AC_ISC_POSIX
AC_REPLACE_FUNCS($funcs)
libiberty_AC_FUNC_C_ALLOCA
AC_FUNC_VFORK
if test $ac_cv_func_vfork_works = no; then
- LIBOBJS="$LIBOBJS vfork.o"
+ AC_LIBOBJ([vfork])
fi
# We only need _doprnt if we might use it to implement v*printf.
if test $ac_cv_func_vprintf != yes \
Index: config/acx.m4
===================================================================
RCS file: /big/fsf/rsync/src-cvs/src/config/acx.m4,v
retrieving revision 1.3
diff -u -p -r1.3 acx.m4
--- config/acx.m4 18 May 2003 15:49:06 -0000 1.3
+++ config/acx.m4 14 Jun 2003 20:41:01 -0000
@@ -140,3 +140,61 @@ else
$1="$ac_cv_prog_$1"
fi
]) []dnl # NCN_STRICT_CHECK_TARGET_TOOL
+
+# GCC_NO_EXECUTABLES
+# -----------------
+# FIXME: The GCC team has specific needs which the current Autoconf
+# framework cannot solve elegantly. This macro implements a dirty
+# hack until Autoconf is abble to provide the services its users
+# needs.
+#
+# Several of the support libraries that are often built with GCC can't
+# assume the tool-chain is already capable of linking a program: the
+# compiler often expects to be able to link with some of such
+# libraries.
+#
+# In several of these libraries, workarounds have been introduced to
+# avoid the AC_PROG_CC_WORKS test, that would just abort their
+# configuration. The introduction of AC_EXEEXT, enabled either by
+# libtool or by CVS autoconf, have just made matters worse.
+#
+# Unlike the previous AC_NO_EXECUTABLES, this test does not
+# disable link tests at autoconf time, but at configure time.
+# This allows AC_NO_EXECUTABLES to be invoked conditionally.
+AC_DEFUN_ONCE([GCC_NO_EXECUTABLES],
+[m4_divert_push([KILL])
+
+AC_BEFORE([$0], [_AC_COMPILER_EXEEXT])
+AC_BEFORE([$0], [AC_LINK_IFELSE])
+
+m4_define([_AC_COMPILER_EXEEXT],
+AC_LANG_CONFTEST([AC_LANG_PROGRAM()])
+# FIXME: Cleanup?
+AS_IF([AC_TRY_EVAL(ac_link)], [gcc_no_link=no], [gcc_no_link=yes])
+if test x$gcc_no_link = xyes; then
+ # Setting cross_compile will disable run tests; it will
+ # also disable AC_CHECK_FILE but that's generally
+ # correct if we can't link.
+ cross_compiling=yes
+ EXEEXT=
+else
+ m4_defn([_AC_COMPILER_EXEEXT])dnl
+fi
+)
+
+m4_define([AC_LINK_IFELSE],
+if test x$gcc_no_link = xyes; then
+ AC_MSG_ERROR([Link tests are not allowed after [[$0]].])
+fi
+m4_defn([AC_LINK_IFELSE]))
+
+dnl This is a shame. We have to provide a default for some link tests,
+dnl similar to the default for run tests.
+m4_define([AC_FUNC_MMAP],
+if test x$gcc_no_link = xyes; then
+ ac_cv_func_mmap_fixed_mapped=no
+fi
+m4_defn([AC_FUNC_MMAP]))
+
+m4_divert_pop()dnl
+])# GCC_NO_EXECUTABLES
More information about the autoconf-conversion
mailing list