| Anthony Baxter | c050119 | 2003-09-27 09:12:27 +0000 | [diff] [blame] | 1 | # Code swiped wholesale from the GCC project, see | 
 | 2 | # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12100 | 
 | 3 |  | 
 | 4 | # This file can go away once autoconf 2.58 is out and being used - | 
 | 5 | # it's reported that this is fixed in the autoconf cvs already. | 
 | 6 |  | 
 | 7 | # AC_LANG_FUNC_LINK_TRY(C)(FUNCTION) | 
 | 8 | # ---------------------------------- | 
 | 9 | # Don't include <ctype.h> because on OSF/1 3.0 it includes | 
 | 10 | # <sys/types.h> which includes <sys/select.h> which contains a | 
 | 11 | # prototype for select.  Similarly for bzero. | 
 | 12 | # | 
 | 13 | # A similar problem afflicts HP/UX, but it also hits <sys/time.h> | 
 | 14 | # | 
 | 15 | # This test used to merely assign f=$1 in main(), but that was | 
 | 16 | # optimized away by HP unbundled cc A.05.36 for ia64 under +O3, | 
 | 17 | # presumably on the basis that there's no need to do that store if the | 
 | 18 | # program is about to exit.  Conversely, the AIX linker optimizes an | 
 | 19 | # unused external declaration that initializes f=$1.  So this test | 
 | 20 | # program has both an external initialization of f, and a use of f in | 
 | 21 | # main that affects the exit status. | 
 | 22 | # | 
 | 23 | m4_define([AC_LANG_FUNC_LINK_TRY(C)], | 
 | 24 | [AC_LANG_PROGRAM( | 
 | 25 | [/* System header to define __stub macros and hopefully few prototypes, | 
 | 26 |     which can conflict with char $1 (); below. | 
 | 27 |     Prefer <limits.h> to <assert.h> if __STDC__ is defined, since | 
 | 28 |     <limits.h> exists even on freestanding compilers.  Under hpux, | 
 | 29 |     including <limits.h> includes <sys/time.h> and causes problems | 
 | 30 |     checking for functions defined therein.  */ | 
 | 31 | #if defined (__STDC__) && !defined (_HPUX_SOURCE) | 
 | 32 | # include <limits.h> | 
 | 33 | #else | 
 | 34 | # include <assert.h> | 
 | 35 | #endif | 
 | 36 | /* Override any gcc2 internal prototype to avoid an error.  */ | 
 | 37 | #ifdef __cplusplus | 
 | 38 | extern "C" | 
 | 39 | { | 
 | 40 | #endif | 
 | 41 | /* We use char because int might match the return type of a gcc2 | 
 | 42 |    builtin and then its argument prototype would still apply.  */ | 
 | 43 | char $1 (); | 
 | 44 | /* The GNU C library defines this for functions which it implements | 
 | 45 |     to always fail with ENOSYS.  Some functions are actually named | 
 | 46 |     something starting with __ and the normal name is an alias.  */ | 
 | 47 | #if defined (__stub_$1) || defined (__stub___$1) | 
 | 48 | choke me | 
 | 49 | #else | 
 | 50 | char (*f) () = $1; | 
 | 51 | #endif | 
 | 52 | #ifdef __cplusplus | 
 | 53 | } | 
 | 54 | #endif | 
 | 55 | ], [return f != $1;])]) | 
 | 56 |  | 
 | 57 |  |