diff options
Diffstat (limited to 'tests/compile.at')
-rw-r--r-- | tests/compile.at | 277 |
1 files changed, 277 insertions, 0 deletions
diff --git a/tests/compile.at b/tests/compile.at new file mode 100644 index 0000000..7ea207f --- /dev/null +++ b/tests/compile.at @@ -0,0 +1,277 @@ +# -*- autoconf -*- + +AT_BANNER([Low level compiling/preprocessing macros.]) + +# Since the macros which compile are required by most tests, check +# them first. But remember that looking for a compiler is even more +# primitive, so check those first. + + +## ------------------------------------- ## +## AC_LANG, AC_LANG_PUSH & AC_LANG_POP. ## +## ------------------------------------- ## + +AT_SETUP([AC_LANG, AC_LANG_PUSH & AC_LANG_POP]) + +AT_DATA([configure.ac], +[[AC_INIT +# C +AC_LANG(C) +# C +AC_LANG_PUSH(C) +# C C +AC_LANG_PUSH(C++) +# C++ C C +AC_LANG(C++) +# C++ C C +AC_LANG_PUSH(Fortran 77) +# F77 C++ C C +AC_LANG_POP(Fortran 77) +# C++ C C +AC_LANG(C++) +# C++ C C +AC_LANG_POP(C++) +# C C +AC_LANG_POP(C) +# C +]]) + +AT_CHECK_AUTOCONF +AT_CHECK([sed -n 's/^ac_ext=//p' configure], 0, +[c +c +c +cc +cc +f +cc +cc +c +c +]) + +AT_CLEANUP + + +## ------------ ## +## Extensions. ## +## ------------ ## + +# As far as we know only `foo', `foo.exe' are possible executable, +# and `foo.o', `foo.obj' are possible object files. Autoconf must not +# know that, but it is OK for the test suite to take this into account. +AT_CHECK_MACRO([Extensions], +[[AC_PROG_CC +case $ac_exeext in + '' | '.exe' ) ;; + * ) AC_MSG_ERROR([suspicious executable suffix: $ac_exeext]);; +esac + +case $ac_objext in + 'o' | 'obj' ) ;; + * ) AC_MSG_ERROR([suspicious object suffix: $ac_objext]);; +esac +AS_EXIT([0]) +]]) + + + +## -------------------------- ## +## Broken/missing compilers. ## +## -------------------------- ## + + +# Check that Autoconf correctly diagnoses broken compilers, and in +# particular, if it does not exit 77, the test suite is in trouble... +# FIXME: Once a precise message decided, check stderr of configure. +AT_SETUP([Broken/missing compilers]) + +AT_DATA([configure.ac], +[[AC_INIT +CC=no-such-compiler +AC_PROG_CC +]]) + +AT_CHECK_AUTOCONF +AT_CHECK_CONFIGURE([], 77, ignore, ignore) + +AT_CLEANUP + + +## ------------ ## +## C keywords. ## +## ------------ ## + +# GCC supports `const', `volatile', and `inline'. +AT_CHECK_MACRO([C keywords], +[[AC_PROG_CC +AC_C_CONST +AC_C_INLINE +AC_C_VOLATILE +case $GCC,$ac_cv_c_const,$ac_cv_c_inline,$ac_cv_c_volatile in + yes,*no*) + AC_MSG_ERROR([failed to detect `const', `inline' or `volatile' support]);; +esac +]]) + + + +## --------------------------------- ## +## AC_PROG_CPP requires AC_PROG_CC. ## +## --------------------------------- ## + +# Must invoke AC_PROG_CC. +AT_CHECK_MACRO([AC_PROG_CPP requires AC_PROG_CC], +[[AC_PROG_CPP +test -z "$CC" && + AC_MSG_ERROR([looked for a C preprocessor without looking for a compiler]) +]]) + + + +## --------------------------- ## +## AC_PROG_CPP with warnings. ## +## --------------------------- ## + + +# It's Ok for strict preprocessors to produce warnings. + +AT_SETUP([AC_PROG_CPP with warnings]) + +AT_DATA([mycpp], +[[#! /bin/sh +echo noise >&2 +exec ${1+"$@"} +]]) + +chmod +x mycpp + +_AT_CHECK_AC_MACRO( +[[AC_PROG_CPP +# If the preprocessor is not strict, just ignore +test "x$ac_c_preproc_warn_flag" = xyes && + AC_MSG_ERROR([preprocessor has no warning option], 77) +CPP="./mycpp $CPP" +AC_CHECK_HEADERS(stdio.h autoconf_io.h)]]) + +AT_CHECK_DEFINES( +[/* #undef HAVE_AUTOCONF_IO_H */ +#define HAVE_STDIO_H 1 +]) + +AT_CLEANUP + + +## ------------------------------ ## +## AC_PROG_CPP without warnings. ## +## ------------------------------ ## + +AT_SETUP([AC_PROG_CPP without warnings]) + +# Ignore if /lib/cpp doesn't work +AT_CHECK([/lib/cpp </dev/null || exit 77], [], [ignore], [ignore]) + +# A cpp which exit status is meaningless. +AT_DATA([mycpp], +[[#! /bin/sh +/lib/cpp ${1+"$@"} +exit 0 +]]) + +chmod +x mycpp + +_AT_CHECK_AC_MACRO( +[[CPP=./mycpp +AC_PROG_CPP +test "x$ac_c_preproc_warn_flag" != xyes && + AC_MSG_ERROR([failed to detect preprocessor warning option]) +AC_CHECK_HEADERS(stdio.h autoconf_io.h)]]) + +AT_CHECK_DEFINES( +[/* #undef HAVE_AUTOCONF_IO_H */ +#define HAVE_STDIO_H 1 +]) + +AT_CLEANUP + + + +## -------------------- ## +## AC_PROG_CPP via CC. ## +## -------------------- ## + + +# It's Ok for strict preprocessors to produce warnings. + +AT_SETUP([AC_PROG_CPP via CC]) + +# Ignore if /lib/cpp doesn't work +AT_CHECK([/lib/cpp </dev/null || exit 77], [], [ignore], [ignore]) + +AT_DATA([mycc], +[[#! /bin/sh +echo "Annoying copyright message" >&2 +exec "$@" +]]) + +chmod +x mycc + +# We go through the following contortions, in order to have the +# configure script go down the same codepaths as it would during a +# normal CPP selection check. If we explicitly set CPP, it goes down +# a different codepath. +_AT_CHECK_AC_MACRO( +[[AC_PROG_CC +CC="./mycc $CC" +AC_PROG_CPP +# The test $CC compiler should have been selected. +test "$CPP" != "$CC -E" && + AC_MSG_ERROR([error messages on stderr cause the preprocessor selection to fail]) + +# Exercise CPP. +AC_CHECK_HEADERS(stdio.h autoconf_io.h)]]) + +AT_CHECK_DEFINES( +[/* #undef HAVE_AUTOCONF_IO_H */ +#define HAVE_STDIO_H 1 +]) + +AT_CLEANUP + + +## ------------------ ## +## AC_TRY_LINK_FUNC. ## +## ------------------ ## + +AT_CHECK_MACRO([AC_TRY_LINK_FUNC], +[AC_TRY_LINK_FUNC(printf,, + [AC_MSG_ERROR([cannot find `printf'])]) +AC_TRY_LINK_FUNC(Be_doomed_if_your_libc_has_a_function_named_like_this, + [AC_MSG_ERROR([found a nonexistent function])])]) + + + +## --------------------- ## +## Fortran 77 Compiler. ## +## --------------------- ## + + +AT_CHECK_MACRO([GNU Fortran 77], +[[AC_LANG(Fortran 77) +AC_LANG_COMPILER + +if AC_TRY_COMMAND([$F77 --version | grep GNU >&2]); then + # Be sure to remove files which might be created by compilers that + # don't support --version. + rm -f a.exe a.out + # Has GNU in --version. + test "$G77" != yes && + AC_MSG_ERROR([failed to recognize GNU Fortran 77 compiler]) +else + # Be sure to remove files which might be created by compilers that + # don't support --version. + rm -f a.exe a.out + # Has not. + test "$G77" = yes && + AC_MSG_ERROR([incorrectly recognized a GNU Fortran 77 compiler]) +fi]]) |