| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465 | #							-*- Autotest -*-AT_BANNER([Low level compiling/preprocessing macros.])# Copyright (C) 2000-2001, 2003, 2005-2012 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 <http://www.gnu.org/licenses/>.# 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# CAC_LANG([C])# CAC_LANG_PUSH([C])# C CAC_LANG_PUSH([C++])# C++ C CAC_LANG([C++])# C++ C CAC_LANG_PUSH([Erlang])# Erlang C++ C CAC_LANG_PUSH([Fortran 77])# F77 Erlang C++ C CAC_LANG_POP([Fortran 77])# Erlang C++ C CAC_LANG_POP([Erlang])# C++ C CAC_LANG([C++])# C++ C CAC_LANG_POP([C++])# C CAC_LANG_POP([C])# C]])AT_CHECK_AUTOCONFAT_CHECK([sed -n 's/^ac_ext=//p' configure], 0,[ccccppcpperlferlcppcppcc])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])fiAC_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])fiAC_LANG_POP])AC_INITAC_F77_2AS_EXIT(0)]])AT_CHECK_AUTOCONFAT_CHECK_CONFIGUREAT_CLEANUP## ---------------- #### AC_LANG_SOURCE.  #### ---------------- ##AT_SETUP([AC_LANG_SOURCE])AT_DATA([configure.ac],[[AC_INIT([pkg], [1.0])AC_PROG_CCAC_COMPILE_IFELSE([AC_LANG_SOURCE([[#ifndef PACKAGE_NAMEchoke me#endifint main (){  return 0;}]], [], [AC_MSG_FAILURE([confdefs not included])])])]])AT_CHECK_AUTOCONFAT_CHECK_CONFIGUREAT_CLEANUP## --------------------- #### AC_LANG_SOURCE(C++).  #### --------------------- ##AT_SETUP([AC_LANG_SOURCE(C++)])AT_DATA([configure.ac],[[AC_INIT([pkg], [1.0])AC_PROG_CXXAC_LANG([C++])AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#ifndef PACKAGE_NAMEchoke me#endifint main (){  return 0;}]], [], [AC_MSG_FAILURE([confdefs not included])])])]])AT_CHECK_AUTOCONFAT_CHECK_CONFIGUREAT_CLEANUP## ------------------------ #### AC_LANG_SOURCE example.  #### ------------------------ ##AT_SETUP([AC_LANG_SOURCE example])# Set CONFIG_SITE to a nonexistent file, so that there are# no worries about configure output caused by sourcing a config.site.CONFIG_SITE=no-such-fileexport CONFIG_SITEAT_DATA([configure.ac],[[# Taken from autoconf.texi:Generating Sources.# The only change is to not fail if gcc doesn't work.AC_INIT([Hello], [1.0], [bug-hello@example.org], [],        [http://www.example.org/])AC_DEFINE([HELLO_WORLD], ["Hello, World\n"],  [Greetings string.])AC_LANG([C])AC_LANG_CONFTEST(   [AC_LANG_SOURCE([[const char hw[] = "Hello, World\n";]])])gcc -E -dD conftest.c || AS_EXIT([77])]])AT_CHECK_AUTOCONFAT_CHECK_CONFIGURE([], [], [stdout])# Taken from autoconf.texi:Generating Sources.# Note that the output may contain more defines and lines matching#   # 1 "conftest.c"# so delete everything before the interesting output.AT_CHECK([sed -n 's/ *$//; /#define PACKAGE/,$p' stdout], [],[[#define PACKAGE_NAME "Hello"#define PACKAGE_TARNAME "hello"#define PACKAGE_VERSION "1.0"#define PACKAGE_STRING "Hello 1.0"#define PACKAGE_BUGREPORT "bug-hello@example.org"#define PACKAGE_URL "http://www.example.org/"#define HELLO_WORLD "Hello, World\n"const char hw[] = "Hello, World\n";]])AT_CLEANUP## ------------------------- #### AC_LANG_PROGRAM example.  #### ------------------------- ##AT_SETUP([AC_LANG_PROGRAM example])# Set CONFIG_SITE to a nonexistent file, so that there are# no worries about configure output caused by sourcing a config.site.CONFIG_SITE=no-such-fileexport CONFIG_SITEAT_DATA([configure.ac],[[# Taken from autoconf.texi:Generating Sources.# The only change is to not fail if gcc doesn't work.AC_INIT([Hello], [1.0], [bug-hello@example.org], [],        [http://www.example.org/])AC_DEFINE([HELLO_WORLD], ["Hello, World\n"],  [Greetings string.])AC_LANG_CONFTEST([AC_LANG_PROGRAM([[const char hw[] = "Hello, World\n";]],                 [[fputs (hw, stdout);]])])gcc -E -dD conftest.c || AS_EXIT([77])]])AT_CHECK_AUTOCONFAT_CHECK_CONFIGURE([], [], [stdout])# Taken from autoconf.texi:Generating Sources.# Note that the output may contain more defines and lines matching#   # 1 "conftest.c"# so delete everything before the interesting output.AT_CHECK([sed -n 's/ *$//; /#define PACKAGE/,$p' stdout], [],[[#define PACKAGE_NAME "Hello"#define PACKAGE_TARNAME "hello"#define PACKAGE_VERSION "1.0"#define PACKAGE_STRING "Hello 1.0"#define PACKAGE_BUGREPORT "bug-hello@example.org"#define PACKAGE_URL "http://www.example.org/"#define HELLO_WORLD "Hello, World\n"const char hw[] = "Hello, World\n";intmain (){fputs (hw, stdout);  ;  return 0;}]])AT_CLEANUP## ------------------- #### AC_COMPILE_IFELSE.  #### ------------------- ##AT_SETUP([AC_COMPILE_IFELSE])AT_KEYWORDS([AC_LANG_DEFINES_PROVIDED])AT_DATA([configure.ac],[[AC_INITAC_COMPILE_IFELSE([int main () { return 0; }], [],  [AC_MSG_ERROR([compiling trivial program failed])])]])AT_CHECK_AUTOCONF([], [], [], [stderr])AT_CHECK([grep 'no AC_LANG_SOURCE call detected in body' stderr], [], [ignore])AT_CHECK_AUTOCONF([-W no-syntax])AT_CHECK_CONFIGURE([-q])AT_DATA([configure.ac],[[AC_INITAC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED()int main () { return 0; }], [],  [AC_MSG_ERROR([compiling trivial program failed])])]])AT_CHECK_AUTOCONFAT_CHECK_CONFIGURE([-q])AT_DATA([configure.ac],[[AC_INITAC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return 0])],	      [],	      [AC_MSG_ERROR([compiling `return 0' failed])])AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return 2])],	      [],	      [AC_MSG_ERROR([compiling `return 2' failed])])]])AT_CHECK_AUTOCONFAT_CHECK_CONFIGURE([-q])AT_CLEANUP## --------------- #### AC_RUN_IFELSE.  #### --------------- ##AT_SETUP([AC_RUN_IFELSE])AT_KEYWORDS([AC_TRY_RUN])AT_DATA([configure.ac],[[AC_INITAC_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_AUTOCONFAT_CHECK_CONFIGURE([-q])AT_CLEANUP## --------------------------  #### Order of `rm' and actions.  #### --------------------------  ##AT_SETUP([Order of user actions and cleanup])AT_DATA([configure.ac],[[AC_INITAC_PROG_CCAC_PREPROC_IFELSE([AC_LANG_PROGRAM([int grepme;], [])],		  [{ test -f conftest.err && grep grepme conftest.i; } || 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_AUTOCONFAT_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_INITAC_PROG_CCAC_COMPILE_IFELSE([  AC_LANG_PROGRAM([[    #ifdef __cplusplus    choke me    #endif  ]])], [], AS_EXIT([77]))]])AT_CHECK_AUTOCONFAT_CHECK_CONFIGURE# This test should be skipped on systems without a C++ compiler.AT_DATA([configure.ac],[[AC_INITAC_PROG_CXXAC_LANG_PUSH([C++])AC_COMPILE_IFELSE([  AC_LANG_PROGRAM([[    #ifndef __cplusplus    choke me    #endif  ]])], [], AS_EXIT([77]))AC_LANG_POP([C++])]])AT_CHECK_AUTOCONFAT_CHECK_CONFIGUREAT_DATA([configure.ac],[[AC_INITAC_PROG_CCAC_PROG_CXXAC_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_AUTOCONFAT_CHECK_CONFIGURE([-q])AT_CLEANUP
 |