mirror of
git://git.sv.gnu.org/autoconf
synced 2025-02-05 11:10:57 +08:00
e65a39811a
* tests/compile.at (Multiple languages): Before starting the test proper, build and run a configure script that tests the C compiler only, and skips the test if this is found to be a C++ compiler. Report by Eric Blake. Signed-off-by: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
253 lines
5.5 KiB
Plaintext
253 lines
5.5 KiB
Plaintext
# -*- Autotest -*-
|
|
|
|
AT_BANNER([Low level compiling/preprocessing macros.])
|
|
|
|
# Copyright (C) 2000, 2001, 2003, 2005, 2006, 2007, 2008 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, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
# 02110-1301, USA.
|
|
|
|
|
|
# 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
|
|
cpp
|
|
cpp
|
|
f
|
|
cpp
|
|
cpp
|
|
c
|
|
c
|
|
])
|
|
|
|
AT_CLEANUP
|
|
|
|
|
|
## ---------------------- ##
|
|
## AC_REQUIRE & AC_LANG. ##
|
|
## ---------------------- ##
|
|
|
|
AT_SETUP([AC_REQUIRE & AC_LANG])
|
|
|
|
AT_DATA([configure.ac],
|
|
[[AC_DEFUN([AC_F77_1],
|
|
[AC_LANG_PUSH([Fortran 77])
|
|
if test $ac_ext != f; then
|
|
AC_MSG_ERROR([F77_1: current shell language is $ac_ext, expected Fortran])
|
|
fi
|
|
AC_LANG_POP
|
|
])
|
|
|
|
|
|
AC_DEFUN([AC_F77_2],
|
|
[AC_LANG_PUSH([Fortran 77])
|
|
AC_REQUIRE([AC_F77_1])
|
|
if test $ac_ext != f; then
|
|
AC_MSG_ERROR([F77_2: current shell language is $ac_ext, expected Fortran])
|
|
fi
|
|
AC_LANG_POP
|
|
])
|
|
|
|
AC_INIT
|
|
AC_F77_2
|
|
AS_EXIT(0)
|
|
]])
|
|
|
|
AT_CHECK_AUTOCONF
|
|
AT_CHECK_CONFIGURE
|
|
|
|
AT_CLEANUP
|
|
|
|
|
|
## --------------- ##
|
|
## AC_RUN_IFELSE. ##
|
|
## --------------- ##
|
|
|
|
AT_SETUP([AC_RUN_IFELSE])
|
|
|
|
AT_DATA([configure.ac],
|
|
[[AC_INIT
|
|
|
|
AC_RUN_IFELSE([AC_LANG_PROGRAM([], [return 0])],
|
|
[],
|
|
[AC_MSG_ERROR([saw `return 0' as a failure])])
|
|
|
|
AC_RUN_IFELSE([AC_LANG_PROGRAM([], [return 2])],
|
|
[AC_MSG_ERROR([saw `return 2' as a success])],
|
|
[estatus=$?
|
|
test $estatus != 2 &&
|
|
AC_MSG_ERROR([did not get as 2 exit status: $estatus])])
|
|
|
|
# The old stinky one.
|
|
AC_TRY_RUN([int main () { return 3; }],
|
|
[AC_MSG_ERROR([saw `return 3' as a success])],
|
|
[estatus=$?
|
|
test $estatus != 3 &&
|
|
AC_MSG_ERROR([did not get 3 as exit status: $estatus])])
|
|
|
|
]])
|
|
|
|
AT_CHECK_AUTOCONF
|
|
AT_CHECK_CONFIGURE([-q])
|
|
|
|
AT_CLEANUP
|
|
|
|
## -------------------------- ##
|
|
## Order of `rm' and actions. ##
|
|
## -------------------------- ##
|
|
|
|
AT_SETUP([Order of user actions and cleanup])
|
|
AT_DATA([configure.ac],
|
|
[[AC_INIT
|
|
AC_PROG_CC
|
|
|
|
AC_PREPROC_IFELSE([AC_LANG_PROGRAM([int ok;], [])],
|
|
[test -f conftest.err || AS_EXIT([1])],
|
|
[AS_EXIT([1])])
|
|
AC_PREPROC_IFELSE([AC_LANG_PROGRAM([#define 12 34], [])],
|
|
[AS_EXIT([1])],
|
|
[test -f conftest.err || AS_EXIT([1])])
|
|
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int ok;], [])],
|
|
[test -f conftest.$ac_objext || AS_EXIT([1])],
|
|
[AS_EXIT([1])])
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int bad bad;], [])],
|
|
[AS_EXIT([1])],
|
|
[test -f conftest.err || AS_EXIT([1])])
|
|
|
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([int ok;], [])],
|
|
[test -f conftest$ac_exeext || AS_EXIT([1])],
|
|
[AS_EXIT([1])])
|
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([int bad bad;], [])],
|
|
[AS_EXIT([1])],
|
|
[test -f conftest.err || AS_EXIT([1])])
|
|
|
|
AC_RUN_IFELSE([AC_LANG_PROGRAM([int ok;], [])],
|
|
[./conftest$ac_exeext || AS_EXIT([1])],
|
|
[AS_EXIT([1])])
|
|
|
|
d@&t@nl conftest.err not generated by AC_RUN_IFELSE?
|
|
AC_RUN_IFELSE([AC_LANG_PROGRAM([int bad bad;], [])],
|
|
[AS_EXIT([1])],
|
|
[])
|
|
]])
|
|
|
|
AT_CHECK_AUTOCONF
|
|
AT_CHECK_CONFIGURE([-q])
|
|
|
|
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])])])
|
|
|
|
## -------------------- ##
|
|
## Multiple languages. ##
|
|
## -------------------- ##
|
|
|
|
AT_SETUP([Multiple languages])
|
|
|
|
# This test should be skipped if the C compiler is a C++ compiler.
|
|
AT_DATA([configure.ac],
|
|
[[AC_INIT
|
|
|
|
AC_PROG_CC
|
|
AC_COMPILE_IFELSE([
|
|
AC_LANG_PROGRAM([[
|
|
#ifdef __cplusplus
|
|
choke me
|
|
#endif
|
|
]])], [], AS_EXIT([77]))
|
|
]])
|
|
|
|
AT_CHECK_AUTOCONF
|
|
AT_CHECK_CONFIGURE
|
|
|
|
AT_DATA([configure.ac],
|
|
[[AC_INIT
|
|
|
|
AC_PROG_CC
|
|
AC_PROG_CXX
|
|
|
|
AC_LANG_PUSH(C)
|
|
AC_MSG_CHECKING([a simple C program that is not valid C++])
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([enum a { A, B, C };
|
|
enum a f(enum a in) { return in++; }], [])],
|
|
[AC_MSG_RESULT([ok])],
|
|
[AC_MSG_RESULT([failed])
|
|
AC_MSG_ERROR([could not compile test program])])
|
|
AC_LANG_POP(C)
|
|
|
|
AC_LANG_PUSH(C++)
|
|
AC_MSG_CHECKING([a simple C++ program that is not valid C])
|
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([class A {};], [])],
|
|
[AC_MSG_RESULT([ok])],
|
|
[AC_MSG_RESULT([failed])
|
|
AC_MSG_ERROR([could not compile test program])])
|
|
|
|
AC_CHECK_HEADER([cstring])
|
|
AC_LANG_POP(C++)
|
|
]])
|
|
|
|
AT_CHECK_AUTOCONF
|
|
AT_CHECK_CONFIGURE([-q])
|
|
|
|
AT_CLEANUP
|
|
|