# -*- autoconf -*- AT_BANNER([Semantics.]) ## -------------------------------- ## ## Members of the AC_CHECK family. ## ## -------------------------------- ## # AC_CHECK_LIB # ------------ # Well, I can't imagine a system where `cos' is neither in libc, nor # in libm. Nor can I imagine a lib more likely to exists than libm. # But there are systems without libm, on which we don't want to have # this test fail, so exit successfully if `cos' is in libc. AT_CHECK_MACRO([AC_CHECK_LIB], [AC_TRY_LINK_FUNC(cos, [AS_EXIT(0)]) AC_CHECK_LIB(m, cos,, [AC_MSG_ERROR([cannot find `cos'])])]) # AC_CHECK_DECLS # -------------- # Check that it performs the correct actions: # Must define NEED_NO_DECL, but not NEED_YES_DECL. AT_CHECK_MACRO([AC_CHECK_DECLS], [[AC_CHECK_DECLS([yes, no],,, [int yes = 1;])]], [AT_CHECK_DEFINES( [#define HAVE_DECL_NO 0 #define HAVE_DECL_YES 1 ])]) # AC_CHECK_FUNCS # -------------- # Check that it performs the correct actions: # Must define HAVE_PRINTF, but not HAVE_AUTOCONF_FTNIRP AT_CHECK_MACRO([AC_CHECK_FUNCS], [AC_CHECK_FUNCS(printf autoconf_ftnirp)], [AT_CHECK_DEFINES( [/* #undef HAVE_AUTOCONF_FTNIRP */ #define HAVE_PRINTF 1 ])]) # AC_HAVE_FUNCS # ------------- # This macro is an obsolete version of AC_CHECK_FUNCS. Running this # test allows to check that AU_ALIAS'ed macros work properly. AT_CHECK_MACRO([AC_HAVE_FUNCS], [AC_HAVE_FUNCS(printf autoconf_ftnirp)], [AT_CHECK_DEFINES( [/* #undef HAVE_AUTOCONF_FTNIRP */ #define HAVE_PRINTF 1 ])]) # AC_CHECK_HEADERS # ---------------- # Check that it performs the correct actions: # Must define HAVE_STDIO_H, but not HAVE_AUTOCONF_IO_H. AT_CHECK_MACRO([AC_CHECK_HEADERS], [AC_CHECK_HEADERS(stdio.h autoconf_io.h)], [AT_CHECK_DEFINES( [/* #undef HAVE_AUTOCONF_IO_H */ #define HAVE_STDIO_H 1 ])]) # AC_CHECK_MEMBERS # ---------------- # Check that it performs the correct actions. # Must define HAVE_STRUCT_YES_S_YES, but not HAVE_STRUCT_YES_S_NO. AT_CHECK_MACRO([AC_CHECK_MEMBERS], [[AC_CHECK_MEMBERS([struct yes_s.yes, struct yes_s.no],,, [struct yes_s { int yes ;} ;])]], [AT_CHECK_DEFINES( [/* #undef HAVE_STRUCT_YES_S_NO */ #define HAVE_STRUCT_YES_S_YES 1 ])]) # AC_CHECK_SIZEOF # --------------- AT_CHECK_MACRO([AC_CHECK_SIZEOF], [[AC_CHECK_SIZEOF(char) AC_CHECK_SIZEOF(charchar,, [[#include typedef char charchar[2];]]) AC_CHECK_SIZEOF(charcharchar) # Exercize the code used when cross-compiling cross_compiling=yes AC_CHECK_SIZEOF(unsigned char) AC_CHECK_SIZEOF(ucharchar,, [[#include typedef unsigned char ucharchar[2];]]) AC_CHECK_SIZEOF(ucharcharchar)]], [AT_CHECK_DEFINES( [#define HAVE_INTTYPES_H 1 #define HAVE_MEMORY_H 1 #define HAVE_STDLIB_H 1 #define HAVE_STRINGS_H 1 #define HAVE_STRING_H 1 #define HAVE_UNISTD_H 1 #define SIZEOF_CHAR 1 #define SIZEOF_CHARCHAR 2 #define SIZEOF_CHARCHARCHAR 0 #define SIZEOF_UCHARCHAR 2 #define SIZEOF_UCHARCHARCHAR 0 #define SIZEOF_UNSIGNED_CHAR 1 ])]) # AC_CHECK_TYPES # -------------- # Check that it performs the correct actions. # Must define HAVE_STRUCT_YES_S, HAVE_INT, but not HAVE_STRUCT_NO_S. # `int' and `struct yes_s' are both checked to test both the compiler # builtin types, and defined types. AT_CHECK_MACRO([AC_CHECK_TYPES], [[AC_CHECK_TYPES([int, struct yes_s, struct no_s],,, [struct yes_s { int yes ;} ;])]], [AT_CHECK_DEFINES( [#define HAVE_INT 1 /* #undef HAVE_STRUCT_NO_S */ #define HAVE_STRUCT_YES_S 1 ])]) # AC_CHECK_TYPES # -------------- # Check that we properly dispatch properly to the old implementation # or to the new one. AT_SETUP([AC_CHECK_TYPES: backward compatibility]) AT_DATA(configure.ac, [[AC_INIT define([_AC_CHECK_TYPE_NEW], [NEW]) define([_AC_CHECK_TYPE_OLD], [OLD]) #(cut-from-here AC_CHECK_TYPE(ptrdiff_t) AC_CHECK_TYPE(ptrdiff_t, int) AC_CHECK_TYPE(quad, long long) AC_CHECK_TYPE(table_42, [int[42]]) # Nice machine! AC_CHECK_TYPE(uint8_t, uint65536_t) AC_CHECK_TYPE(a,b,c,d) #to-here) AC_OUTPUT ]]) AT_CHECK_AUTOCONF([], [], [configure.ac:10: warning: AC_CHECK_TYPE: assuming `uint65536_t' is not a type ]) AT_CHECK([[sed -e '/^#(cut-from-here/,/^#to-here)/!d' -e '/^#/d' configure]], 0, [NEW OLD OLD OLD NEW NEW ]) AT_CLEANUP # AC_CHECK_FILES # -------------- # FIXME: To really test HAVE_AC_EXISTS2 and HAVE_AC_MISSING2 we need to # open AH_TEMPLATE to `configure.ac', which is not yet the case. AT_CHECK_MACRO([AC_CHECK_FILES], [touch ac-exists1 ac-exists2 ac_exists2=ac-exists2 ac_missing2=ac-missing2 AC_CHECK_FILES(ac-exists1 ac-missing1 $ac_exists2 $ac_missing2) rm ac-exists1 ac-exists2], [AT_CHECK_DEFINES( [#define HAVE_AC_EXISTS1 1 /* #undef HAVE_AC_MISSING1 */ ])]) ## ------------------------------ ## ## AC_CHECK_PROG & AC_PATH_PROG. ## ## ------------------------------ ## # AT_CHECK_PROGS_PREPARE # ---------------------- # Create a sub directory `path' with 6 subdirs which all 7 contain # an executable `tool'. `6' contains a `better' tool. m4_define([AT_CHECK_PROGS_PREPARE], [mkdir path cat >path/tool <<\EOF #! /bin/sh exit 0 EOF chmod +x path/tool for i in 1 2 3 4 5 6 do mkdir path/$i cp path/tool path/$i done cp path/tool path/6/better]) # -------------------------------- # # AC_CHECK_PROG & AC_CHECK_PROGS. # # -------------------------------- # AT_SETUP([AC_CHECK_PROG & AC_CHECK_PROGS]) AT_CHECK_PROGS_PREPARE AT_DATA(configure.ac, [[AC_INIT pwd=`pwd` path=`echo "1:2:3:4:5:6" | sed -e 's,\([[0-9]]\),'"$pwd"'/path/\1,g'` fail=false AC_CHECK_PROG(TOOL1, tool, found, not-found, $path) test "$TOOL1" = found || fail=: # Yes, the semantics of this macro is weird. AC_CHECK_PROG(TOOL2, tool,, not-found, $path) test "$TOOL2" = not-found || fail=: AC_CHECK_PROG(TOOL3, tool, tool, not-found, $path, $pwd/path/1/tool) test "$TOOL3" = $pwd/path/2/tool || fail=: AC_CHECK_PROG(TOOL4, better, better, not-found, $path, $pwd/path/1/tool) test "$TOOL4" = better || fail=: # When a tool is not found, and no value is given for not-found, # the variable is left empty. AC_CHECK_PROGS(TOOL5, missing,, $path) test -z "$TOOL5" || fail=: AC_CHECK_PROGS(TOOL6, missing tool better,, $path) test "$TOOL6" = tool || fail=: # no AC_OUTPUT, we don't need config.status. $fail && AC_MSG_ERROR([[CHECK_PROG failed]]) AS_EXIT(0) ]]) AT_CHECK_AUTOCONF AT_CHECK_CONFIGURE AT_CLEANUP(path) # ------------------------------ # # AC_PATH_PROG & AC_PATH_PROGS. # # ------------------------------ # AT_SETUP(AC_PATH_PROG & AC_PATH_PROGS) AT_CHECK_PROGS_PREPARE AT_DATA(configure.ac, [[AC_INIT pwd=`pwd` path=`echo "1:2:3:4:5:6" | sed -e 's,\([[0-9]]\),'"$pwd"'/path/\1,g'` fail=false AC_PATH_PROG(TOOL1, tool, not-found, $path) test "$TOOL1" = $pwd/path/1/tool || fail=: AC_PATH_PROG(TOOL2, better, not-found, $path) test "$TOOL2" = $pwd/path/6/better || fail=: # When a tool is not found, and no value is given for not-found, # the variable is left empty. AC_PATH_PROGS(TOOL3, missing,, $path) test -z "$TOOL3" || fail=: AC_PATH_PROGS(TOOL4, missing tool better,, $path) test "$TOOL4" = $pwd/path/1/tool || fail=: # no AC_OUTPUT, we don't need config.status. $fail && AC_MSG_ERROR([[PATH_PROG failed]]) AS_EXIT(0) ]]) AT_CHECK_AUTOCONF AT_CHECK_CONFIGURE AT_CLEANUP(path) ## -------------- ## ## AC_PATH_XTRA. ## ## -------------- ## AT_SETUP([AC_PATH_XTRA]) _AT_CHECK_AC_MACRO([AC_PATH_XTRA]) # Check X_DISPLAY_MISSING. AT_CHECK_CONFIGURE([--without-x]) AT_CHECK_DEFINES( [#define X_DISPLAY_MISSING 1 ]) AT_CLEANUP