On 08/07/2009 01:51 PM, Paolo Bonzini wrote:
On 08/07/2009 01:27 PM, Adam Sampson wrote:
On Fri, Aug 07, 2009 at 12:58:13PM +0200, Paolo Bonzini wrote:
Can you suggest a replacement? Would atoi be okay?
atoi certainly exists in avr-libc, so that'd be OK for me. (Doesn't it
use fopen because it wants to see if the file exists afterwards,
though?)
Yes, I was thinking of "return atoi(argv[1]);" and check the exit status.
Alternatively, can you try this patch? It would only work for a
cross-compilation setting, forcing you to specify --host=FOO or
appropriate LDFLAGS if compiling natively on a platform lacking printf.
Is this at all possible for RTEMS?
Paolo
commit 1bf41a68050d04c57be42a5cb334294913684933
Author: Paolo Bonzini <[email protected]>
Date: Fri Aug 7 16:40:34 2009 +0200
use a separate program to test whether the compiler works
* lib/autoconf/c.m4 (_AC_LANG_NULL_PROGRAM(C)): New.
* lib/autoconf/erlang.m4 (_AC_LANG_NULL_PROGRAM(Erlang)): New.
* lib/autoconf/lang.m4 (AC_LANG_DEFINE): Copy _AC_LANG_NULL_PROGRAM.
(_AC_LANG_NULL_PROGRAM(), _AC_LANG_NULL_PROGRAM): New.
(_AC_COMPILER_EXEEXT_DEFAULT): Print here "whether the xyz compiler works",
before exiting.
(_AC_COMPILER_EXEEXT_WORKS): Merge into _AC_COMPILER_EXEEXT_CROSS, remove
the "whether the xyz compiler works" message, use conftest$ac_cv_exeext
instead of $ac_file.
(_AC_COMPILER_EXEEXT): Try _AC_COMPILER_EXEEXT_DEFAULT using the
null program, and clean conftest.out only after _AC_COMPILER_EXEEXT_CROSS.
diff --git a/lib/autoconf/c.m4 b/lib/autoconf/c.m4
index 33d1895..248af02 100644
--- a/lib/autoconf/c.m4
+++ b/lib/autoconf/c.m4
@@ -129,6 +129,13 @@ $2
}])
+# _AC_LANG_NULL_PROGRAM(C)
+# ------------------------
+# Produce source that does nothing.
+m4_define([_AC_LANG_NULL_PROGRAM(C)],
+[AC_LANG_PROGRAM([], [return 0;])])
+
+
# _AC_LANG_IO_PROGRAM(C)
# ----------------------
# Produce source that performs I/O, necessary for proper
diff --git a/lib/autoconf/erlang.m4 b/lib/autoconf/erlang.m4
index 0c4504d..48ad838 100644
--- a/lib/autoconf/erlang.m4
+++ b/lib/autoconf/erlang.m4
@@ -152,6 +152,13 @@ $2
])
+# _AC_LANG_NULL_PROGRAM(Erlang)
+# -----------------------------
+# Produce source that does nothing.
+m4_define([_AC_LANG_NULL_PROGRAM(Erlang)],
+[AC_LANG_PROGRAM([], [halt(0)])])
+
+
# _AC_LANG_IO_PROGRAM(Erlang)
# ---------------------------
# Produce source that performs I/O.
diff --git a/lib/autoconf/lang.m4 b/lib/autoconf/lang.m4
index efdcdd0..a347278 100644
--- a/lib/autoconf/lang.m4
+++ b/lib/autoconf/lang.m4
@@ -195,6 +195,7 @@ m4_define([AC_LANG_DEFINE],
[m4_define([_AC_LANG_PREFIX($1)], [$3])]
[m4_copy([AC_LANG_CONFTEST($4)], [AC_LANG_CONFTEST($1)])]
[m4_copy([AC_LANG_SOURCE($4)], [AC_LANG_SOURCE($1)])]
+[m4_copy([_AC_LANG_NULL_PROGRAM($4)], [_AC_LANG_NULL_PROGRAM($1)])]
[m4_ifval([$4],
[m4_copy([AC_LANG_PROGRAM($4)], [AC_LANG_PROGRAM($1)])]
[m4_copy([AC_LANG_CALL($4)], [AC_LANG_CALL($1)])]
@@ -249,6 +250,21 @@ AC_DEFUN([AC_LANG_PROGRAM],
[AC_LANG_SOURCE([_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])])
+# _AC_LANG_NULL_PROGRAM()()
+# -------------------------
+# Default implementation of AC_LANG_NULL_PROGRAM
+m4_define([_AC_LANG_NULL_PROGRAM()],
+[AC_LANG_PROGRAM([], [])])
+
+
+# _AC_LANG_NULL_PROGRAM
+# ----------------------
+# Produce valid source for the current language that does
+# nothing.
+AC_DEFUN([_AC_LANG_NULL_PROGRAM],
+[AC_LANG_SOURCE([_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])])
+
+
# _AC_LANG_IO_PROGRAM
# -----------------------------------
# Produce valid source for the current language that creates
@@ -506,7 +522,7 @@ m4_define([_AC_COMPILER_EXEEXT_DEFAULT],
[# Try to create an executable without -o first, disregard a.out.
# It will help us diagnose broken compilers, and finding out an intuition
# of exeext.
-AC_MSG_CHECKING([for _AC_LANG compiler default output file name])
+AC_MSG_CHECKING([whether the _AC_LANG compiler works])
ac_link_default=`AS_ECHO(["$ac_link"]) | sed ['s/ -o *conftest[^ ]*//']`
# The possible output files:
@@ -556,15 +572,18 @@ done
test "$ac_cv_exeext" = no && ac_cv_exeext=
],
[ac_file=''])
-AC_MSG_RESULT([$ac_file])
AS_IF([test -z "$ac_file"],
-[_AC_MSG_LOG_CONFTEST
-AC_MSG_FAILURE([_AC_LANG compiler cannot create executables], 77)])
+[AC_MSG_RESULT([no])
+_AC_MSG_LOG_CONFTEST
+AC_MSG_FAILURE([_AC_LANG compiler cannot create executables], 77)],
+[AC_MSG_RESULT([yes])])
+AC_MSG_CHECKING([for _AC_LANG compiler default output file name])
+AC_MSG_RESULT([$ac_file])
ac_exeext=$ac_cv_exeext
])# _AC_COMPILER_EXEEXT_DEFAULT
-# _AC_COMPILER_EXEEXT_WORKS
+# _AC_COMPILER_EXEEXT_CROSS
# -------------------------
# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
#
@@ -575,13 +594,13 @@ ac_exeext=$ac_cv_exeext
# detect cross-compiling on Blue Gene. Note also that AC_COMPUTE_INT
# requires programs that create files when not cross-compiling, so it
# is safe and not a bad idea to check for this capability in general.
-m4_define([_AC_COMPILER_EXEEXT_WORKS],
+m4_define([_AC_COMPILER_EXEEXT_CROSS],
[# Check that the compiler produces executables we can run. If not, either
# the compiler is broken, or we cross compile.
-AC_MSG_CHECKING([whether the _AC_LANG compiler works])
-# If not cross compiling, check that we can run a simple program.
+AC_MSG_CHECKING([whether we are cross compiling])
if test "$cross_compiling" != yes; then
- if _AC_DO_TOKENS([./$ac_file]); then
+ _AC_DO_VAR(ac_link)
+ if _AC_DO_TOKENS([./conftest$ac_cv_exeext]); then
cross_compiling=no
else
if test "$cross_compiling" = maybe; then
@@ -592,16 +611,6 @@ If you meant to cross compile, use `--host'.])
fi
fi
fi
-AC_MSG_RESULT([yes])
-])# _AC_COMPILER_EXEEXT_WORKS
-
-
-# _AC_COMPILER_EXEEXT_CROSS
-# -------------------------
-m4_define([_AC_COMPILER_EXEEXT_CROSS],
-[# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-AC_MSG_CHECKING([whether we are cross compiling])
AC_MSG_RESULT([$cross_compiling])
])# _AC_COMPILER_EXEEXT_CROSS
@@ -648,20 +657,23 @@ AC_MSG_RESULT([$ac_cv_exeext])
# Do not rename this macro; Automake decides whether EXEEXT is used
# by checking whether `_AC_COMPILER_EXEEXT' has been expanded.
#
-# See _AC_COMPILER_EXEEXT_WORKS for why we call _AC_LANG_IO_PROGRAM.
+# See _AC_COMPILER_EXEEXT_CROSS for why we need _AC_LANG_IO_PROGRAM.
m4_define([_AC_COMPILER_EXEEXT],
-[AC_LANG_CONFTEST([_AC_LANG_IO_PROGRAM])
+[AC_LANG_CONFTEST([_AC_LANG_NULL_PROGRAM])
ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out"
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
_AC_COMPILER_EXEEXT_DEFAULT
-_AC_COMPILER_EXEEXT_WORKS
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
ac_clean_files=$ac_clean_files_save
-_AC_COMPILER_EXEEXT_CROSS
_AC_COMPILER_EXEEXT_O
rm -f conftest.$ac_ext
AC_SUBST([EXEEXT], [$ac_cv_exeext])dnl
ac_exeext=$EXEEXT
+AC_LANG_CONFTEST([_AC_LANG_IO_PROGRAM])
+ac_clean_files="$ac_clean_files conftest.out"
+_AC_COMPILER_EXEEXT_CROSS
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
])# _AC_COMPILER_EXEEXT