# -*- Autotest -*- AT_BANNER([Low level compiling/preprocessing macros.]) # Copyright (C) 2000, 2001, 2003, 2005, 2006, 2007, 2008, 2009 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 3 of the License, 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 . # 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([Erlang]) # Erlang C++ C C AC_LANG_PUSH([Fortran 77]) # F77 Erlang C++ C C AC_LANG_POP([Fortran 77]) # Erlang C++ C C AC_LANG_POP([Erlang]) # 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 erl f erl 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 # This test should be skipped on systems without a C++ compiler. AT_DATA([configure.ac], [[AC_INIT AC_PROG_CXX AC_LANG_PUSH([C++]) AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ #ifndef __cplusplus choke me #endif ]])], [], AS_EXIT([77])) AC_LANG_POP([C++]) ]]) 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