home *** CD-ROM | disk | FTP | other *** search
/ PC-Online 1996 May / PCOnline_05_1996.bin / linux / source / extra-st / gnu / autoconf.8 / autoconf / autoconf-1.8 / acspecific.m4 < prev    next >
Encoding:
M4 Source File  |  1994-04-13  |  40.1 KB  |  1,384 lines

  1. dnl Macros that test for specific features.
  2. dnl This file is part of Autoconf.
  3. dnl Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
  4. dnl
  5. dnl This program is free software; you can redistribute it and/or modify
  6. dnl it under the terms of the GNU General Public License as published by
  7. dnl the Free Software Foundation; either version 2, or (at your option)
  8. dnl any later version.
  9. dnl
  10. dnl This program is distributed in the hope that it will be useful,
  11. dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. dnl GNU General Public License for more details.
  14. dnl
  15. dnl You should have received a copy of the GNU General Public License
  16. dnl along with this program; if not, write to the Free Software
  17. dnl Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. dnl
  19. dnl Written by David MacKenzie, with help from
  20. dnl Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor,
  21. dnl Roland McGrath, and Noah Friedman.
  22. dnl
  23. dnl
  24. dnl checks for programs
  25. dnl
  26. dnl
  27. define(AC_PROG_CC,
  28. [AC_BEFORE([$0], [AC_PROG_CPP])AC_PROVIDE([$0])AC_PROGRAM_CHECK(CC, gcc, gcc, cc)
  29. # Find out if we are using GNU C, under whatever name.
  30. cat > conftest.c <<EOF
  31. #ifdef __GNUC__
  32.   yes
  33. #endif
  34. EOF
  35. ${CC-cc} -E conftest.c > conftest.out 2>&1
  36. if egrep yes conftest.out >/dev/null 2>&1; then
  37.   GCC=1 # For later tests.
  38. fi
  39. rm -f conftest*
  40. ])dnl
  41. dnl
  42. define(AC_PROG_CXX,
  43. [AC_BEFORE([$0], [AC_PROG_CXXCPP])AC_PROVIDE([$0])AC_PROGRAMS_CHECK(CXX, $CCC c++ g++ gcc CC, gcc)
  44. # Find out if we are using GNU C++, under whatever name.
  45. cat > conftest.C <<EOF
  46. #ifdef __GNUC__
  47.   yes
  48. #endif
  49. EOF
  50. ${CXX-gcc} -E conftest.C > conftest.out 2>&1
  51. if egrep yes conftest.out >/dev/null 2>&1; then
  52.   GXX=1 # For later tests.
  53. fi
  54. rm -f conftest*
  55. ])dnl
  56. dnl
  57. define(AC_GCC_TRADITIONAL,
  58. [AC_REQUIRE([AC_PROG_CC])AC_REQUIRE([AC_PROG_CPP])if test -n "$GCC"; then
  59.   AC_CHECKING(whether -traditional is needed)
  60. changequote(,)dnl
  61.   ac_pattern="Autoconf.*'x'"
  62. changequote([,])dnl
  63.   ac_prog='#include <sgtty.h>
  64. Autoconf TIOCGETP'
  65.   AC_PROGRAM_EGREP($ac_pattern, $ac_prog, ac_need_trad=1)
  66.  
  67.   if test -z "$ac_need_trad"; then
  68.     ac_prog='#include <termio.h>
  69. Autoconf TCGETA'
  70.     AC_PROGRAM_EGREP($ac_pattern, $ac_prog, ac_need_trad=1)
  71.   fi
  72.   test -n "$ac_need_trad" && CC="$CC -traditional"
  73. fi
  74. ])dnl
  75. dnl
  76. define(AC_MINUS_C_MINUS_O,
  77. [AC_CHECKING(whether $CC and cc understand -c and -o together)
  78. echo 'foo(){}' > conftest.c
  79. # Make sure it works both with $CC and with simple cc.
  80. # We do the test twice because some compilers refuse to overwrite an
  81. # existing .o file with -o, though they will create one.
  82. if ${CC-cc} -c conftest.c -o conftest.o >/dev/null 2>&1 \
  83.  && test -f conftest.o && ${CC-cc} -c conftest.c -o conftest.o >/dev/null 2>&1
  84. then
  85.   # Test first that cc exists at all.
  86.   if cc -c conftest.c >/dev/null 2>&1
  87.   then
  88.     if cc -c conftest.c -o conftest2.o >/dev/null 2>&1 && \
  89.        test -f conftest2.o && cc -c conftest.c -o conftest2.o >/dev/null 2>&1
  90.     then
  91.       :
  92.     else
  93.       AC_DEFINE(NO_MINUS_C_MINUS_O)
  94.     fi
  95.   fi
  96. else
  97.   AC_DEFINE(NO_MINUS_C_MINUS_O)
  98. fi
  99. rm -f conftest*
  100. ])dnl
  101. dnl
  102. dnl Define SET_MAKE to set ${MAKE} if make doesn't.
  103. define(AC_SET_MAKE,
  104. [cat > conftestmake <<'EOF'
  105. all:
  106.     @echo 'ac_maketemp="${MAKE}"'
  107. EOF
  108. changequote(,)dnl
  109. # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
  110. eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
  111. changequote([,])dnl
  112. if test -n "$ac_maketemp"; then SET_MAKE=
  113. else SET_MAKE="MAKE=${MAKE-make}"; fi
  114. AC_SUBST([SET_MAKE])dnl
  115. ])dnl
  116. dnl
  117. define(AC_PROG_RANLIB, [AC_PROGRAM_CHECK(RANLIB, ranlib, ranlib, :)])dnl
  118. dnl
  119. define(AC_PROG_AWK, [AC_PROGRAMS_CHECK(AWK, mawk gawk nawk awk,)])dnl
  120. dnl
  121. define(AC_PROG_YACC,[AC_PROGRAMS_CHECK(YACC, 'bison -y' byacc, yacc)])dnl
  122. dnl
  123. define(AC_PROG_CPP,
  124. [AC_PROVIDE([$0])AC_CHECKING(how to run the C preprocessor)
  125. if test -z "$CPP"; then
  126.   # This must be in double quotes, not single quotes, because CPP may get
  127.   # substituted into the Makefile and ``${CC-cc}'' will simply confuse
  128.   # make.  It must be expanded now.
  129.   CPP="${CC-cc} -E"
  130. dnl On the NeXT, cc -E runs the code through the compiler's parser,
  131. dnl not just through cpp.
  132.   AC_TEST_CPP([#include <stdio.h>
  133. Syntax Error], ,
  134.   CPP="${CC-cc} -E -traditional-cpp"
  135.   AC_TEST_CPP([#include <stdio.h>
  136. Syntax Error], ,CPP=/lib/cpp))
  137. fi
  138. AC_VERBOSE(setting CPP to $CPP)
  139. AC_SUBST(CPP)dnl
  140. ])dnl
  141. dnl
  142. define(AC_PROG_CXXCPP,
  143. [AC_PROVIDE([$0])AC_CHECKING(how to run the C++ preprocessor)
  144. AC_LANG_SAVE[]dnl
  145. AC_LANG_CPLUSPLUS[]dnl
  146. if test -z "$CXXCPP"; then
  147.   CXXCPP="${CXX-c++} -E"
  148.   AC_TEST_CPP([#include <stdlib.h>], , CXXCPP=/lib/cpp)
  149. fi
  150. AC_VERBOSE(setting CXXCPP to $CXXCPP)
  151. AC_LANG_RESTORE[]dnl
  152. AC_SUBST(CXXCPP)dnl
  153. ])dnl
  154. dnl
  155. dnl Require finding the C or C++ preprocessor, whichever is the
  156. dnl current language.
  157. define(AC_REQUIRE_CPP,
  158. [ifelse(AC_LANG,C,[AC_REQUIRE([AC_PROG_CPP])],[AC_REQUIRE([AC_PROG_CXXCPP])])])dnl
  159. dnl
  160. define(AC_PROG_LEX,
  161. [AC_PROVIDE([$0])AC_PROGRAM_CHECK(LEX, flex, flex, lex)
  162. if test -z "$LEXLIB"
  163. then
  164.   case "$LEX" in
  165.   flex*) AC_HAVE_LIBRARY(fl, LEXLIB="-lfl") ;;
  166.   *) LEXLIB="-ll" ;;
  167.   esac
  168. fi
  169. AC_SUBST(LEXLIB)])dnl
  170. dnl
  171. define(AC_DECLARE_YYTEXT,
  172. [AC_REQUIRE_CPP()AC_REQUIRE([AC_PROG_LEX])dnl
  173. errprint(warning: [$0] is currently broken due to a quoting quagmire
  174. )dnl
  175. AC_CHECKING(how to declare yytext)
  176. # Figure out what yytext is by creating a minimal parser and
  177. # examining the (preprocessed, in case macros are used) output.
  178. if test "z${DECLARE_YYTEXT}" = "z"; then
  179. changequote(,)dnl
  180.   echo '%%
  181. %%' | ${LEX}
  182.   if test -f lex.yy.c; then
  183.     LEX_OUTPUT_ROOT=lex.yy
  184.   elif test -f lexyy.c; then
  185.     LEX_OUTPUT_ROOT=lexyy
  186.   else
  187.     # Don't know what to do here.
  188.     AC_WARN(can not find output from $LEX; assuming lex.yy.c)
  189.     LEX_OUTPUT_ROOT=lex.yy
  190.   fi
  191.   DECLARE_YYTEXT=`eval ${CPP} "${LEX_OUTPUT_ROOT}.c" |
  192.     sed -n '/extern.*yytext[^a-zA-Z0-9_]/s/^.*extern/extern/p'`
  193.   rm -f "${LEX_OUTPUT_ROOT}.c"
  194. changequote([,])dnl
  195. fi
  196. AC_SUBST(LEX_OUTPUT_ROOT)dnl
  197. AC_DEFINE_UNQUOTED(DECLARE_YYTEXT, $DECLARE_YYTEXT)dnl
  198. ])dnl
  199. dnl
  200. define(AC_PROG_INSTALL,
  201. [# Make sure to not get the incompatible SysV /etc/install and
  202. # /usr/sbin/install, which might be in PATH before a BSD-like install,
  203. # or the SunOS /usr/etc/install directory, or the AIX /bin/install,
  204. # or the AFS install, which mishandles nonexistent args, or
  205. # /usr/ucb/install on SVR4, which tries to use the nonexistent group
  206. # `staff', or /sbin/install on IRIX which has incompatible command-line
  207. # syntax.  Sigh.
  208. #
  209. #     On most BSDish systems install is in /usr/bin, not /usr/ucb
  210. #     anyway.
  211. # This turns out not to be true, so the mere pathname isn't an indication
  212. # of whether the program works.  What we really need is a set of tests for
  213. # the install program to see if it actually works in all the required ways.
  214. #
  215. # Avoid using ./install, which might have been erroneously created
  216. # by make from ./install.sh.
  217. if test "z${INSTALL}" = "z" ; then
  218.   AC_CHECKING(for a BSD compatible install)
  219.   IFS="${IFS=     }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
  220.   for ac_dir in $PATH; do
  221.     case "$ac_dir" in
  222.     ''|.|/etc|/sbin|/usr/sbin|/usr/etc|/usr/afsws/bin|/usr/ucb) ;;
  223.     *)
  224.       # OSF1 and SCO ODT 3.0 have their own names for install.
  225.       for ac_prog in installbsd scoinst install; do
  226.         if test -f $ac_dir/$ac_prog; then
  227.       if grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
  228.         : # AIX
  229.       else
  230.         INSTALL="$ac_dir/$ac_prog -c"
  231.         INSTALL_PROGRAM='${INSTALL}'
  232.         INSTALL_DATA='${INSTALL} -m 644'
  233.         break 2
  234.       fi
  235.     fi
  236.       done
  237.       ;;
  238.     esac
  239.   done
  240.   IFS="$ac_save_ifs"
  241. fi
  242. if test -z "$INSTALL"; then
  243.   if test -f ${srcdir}/install.sh; then
  244.     # As a last resort, use the slow shell script.
  245.     INSTALL=AC_PROG_INSTALL_INSTALL_SH
  246.   else
  247.     AC_WARN(${srcdir}/install.sh not found; using cp)
  248.     INSTALL=cp
  249.   fi
  250. fi
  251. AC_SUBST(INSTALL)dnl
  252. AC_VERBOSE(setting INSTALL to $INSTALL)
  253. # Use test -z because SunOS4 sh mishandles ${INSTALL_PROGRAM-'${INSTALL}'}.
  254. # It thinks the first close brace ends the variable substitution.
  255. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
  256. AC_SUBST(INSTALL_PROGRAM)dnl
  257. AC_VERBOSE(setting INSTALL_PROGRAM to $INSTALL_PROGRAM)
  258. test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL}'
  259. AC_SUBST(INSTALL_DATA)dnl
  260. AC_VERBOSE(setting INSTALL_DATA to $INSTALL_DATA)
  261. ])dnl
  262. dnl Defined separately so a configure.in can redefine if necessary.
  263. dnl We want the top-level source directory, not the subdir's srcdir.
  264. dnl This relies on top_srcdir being substituted after INSTALL.
  265. define(AC_PROG_INSTALL_INSTALL_SH, ['@top_srcdir@/install.sh -c'])dnl
  266. dnl
  267. define(AC_LN_S,
  268. [AC_CHECKING(for ln -s)
  269. rm -f conftestdata
  270. if ln -s X conftestdata 2>/dev/null
  271. then
  272.   rm -f conftestdata
  273.   LN_S="ln -s"
  274. else
  275.   LN_S=ln
  276. fi
  277. AC_SUBST(LN_S)
  278. ])dnl
  279. dnl
  280. define(AC_RSH,
  281. [AC_CHECKING(for remote shell)
  282. if test -f /usr/ucb/rsh || test -f /usr/bin/remsh || test -f /usr/bin/rsh ||
  283.   test -f /usr/bsd/rsh || test -f /usr/bin/nsh; then
  284.   RTAPELIB=rtapelib.o
  285. else
  286.   AC_HEADER_CHECK(netdb.h, AC_DEFINE(HAVE_NETDB_H) RTAPELIB=rtapelib.o,
  287.     AC_DEFINE(NO_REMOTE))
  288. fi
  289. AC_SUBST(RTAPELIB)dnl
  290. ])dnl
  291. dnl
  292. dnl
  293. dnl checks for header files
  294. dnl
  295. dnl
  296. define(AC_STDC_HEADERS,
  297. [AC_REQUIRE_CPP()dnl
  298. AC_CHECKING(for ANSI C header files)
  299. AC_TEST_CPP([#include <stdlib.h>
  300. #include <stdarg.h>
  301. #include <string.h>
  302. #include <float.h>],
  303. [# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
  304. AC_HEADER_EGREP(memchr, string.h,
  305. # SGI's /bin/cc from Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
  306. AC_TEST_PROGRAM([#include <ctype.h>
  307. #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
  308. #define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
  309. #define XOR(e,f) (((e) && !(f)) || (!(e) && (f)))
  310. int main () { int i; for (i = 0; i < 256; i++)
  311. if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
  312. exit (0); }
  313. ],
  314. [# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
  315. AC_HEADER_EGREP(free, stdlib.h, AC_DEFINE(STDC_HEADERS))]))])
  316. ])dnl
  317. dnl
  318. define(AC_UNISTD_H, [AC_OBSOLETE([$0], [; instead use AC_HAVE_HEADERS(unistd.h)])AC_HEADER_CHECK(unistd.h,
  319.   AC_DEFINE(HAVE_UNISTD_H))])dnl
  320. dnl
  321. define(AC_USG,
  322. [AC_OBSOLETE([$0], [; instead use AC_HAVE_HEADERS(string.h) and HAVE_STRING_H])AC_COMPILE_CHECK([BSD string and memory functions],
  323. [#include <strings.h>], [rindex(0, 0); bzero(0, 0);], , AC_DEFINE(USG))])dnl
  324. dnl
  325. dnl
  326. dnl If memchr and the like aren't declared in <string.h>, include <memory.h>.
  327. dnl To avoid problems, don't check for gcc2 built-ins.
  328. define(AC_MEMORY_H,
  329. [AC_OBSOLETE([$0], [; instead use AC_HAVE_HEADERS(memory.h) and HAVE_MEMORY_H])AC_CHECKING(whether string.h declares mem functions)
  330. AC_HEADER_EGREP(memchr, string.h, ,
  331.   AC_HEADER_CHECK(memory.h, AC_DEFINE(NEED_MEMORY_H)))]
  332. )dnl
  333. dnl
  334. define(AC_MAJOR_HEADER,
  335. [AC_COMPILE_CHECK([major, minor and makedev header],
  336. [#include <sys/types.h>],
  337. [return makedev(0, 0);], ac_makedev=1)
  338. if test -z "$ac_makedev"; then
  339. AC_HEADER_CHECK(sys/mkdev.h, AC_DEFINE(MAJOR_IN_MKDEV) ac_makedev=1)
  340. fi
  341. if test -z "$ac_makedev"; then
  342. AC_HEADER_CHECK(sys/sysmacros.h, AC_DEFINE(MAJOR_IN_SYSMACROS))
  343. fi]
  344. )dnl
  345. dnl
  346. define(AC_DIR_HEADER,
  347. [AC_PROVIDE([$0])AC_CHECKING(for directory library header)
  348. ac_dir_header=
  349. AC_DIR_HEADER_CHECK(dirent.h, DIRENT)
  350. AC_DIR_HEADER_CHECK(sys/ndir.h, SYSNDIR)
  351. AC_DIR_HEADER_CHECK(sys/dir.h, SYSDIR)
  352. AC_DIR_HEADER_CHECK(ndir.h, NDIR)
  353.  
  354. AC_CHECKING(for closedir return value)
  355. AC_TEST_PROGRAM([#include <sys/types.h>
  356. #include <$ac_dir_header>
  357. int closedir(); main() { exit(closedir(opendir(".")) != 0); }], ,
  358. AC_DEFINE(VOID_CLOSEDIR))
  359. ])dnl
  360. dnl Subroutine of AC_DIR_HEADER.
  361. dnl ??? I tried to put this define inside AC_DIR_HEADER, but when I did
  362. dnl that, $1 and $2 did not get expanded. --roland
  363. dnl Check if $1 is the winning directory library header file.
  364. dnl It must not only exist, but also correctly define the `DIR' type.
  365. dnl If it is really winning, define $2 and set shell var `ac_dir_header' to $1.
  366. define(AC_DIR_HEADER_CHECK, [dnl
  367. if test -z "$ac_dir_header"; then
  368.   AC_COMPILE_CHECK($1, [#include <sys/types.h>
  369. #include <]$1[>],
  370.              [DIR *dirp = 0;],
  371.            AC_DEFINE($2) ac_dir_header=$1)dnl
  372. fi])dnl
  373. dnl
  374. dnl
  375. dnl checks for typedefs
  376. dnl
  377. dnl
  378. define(AC_GETGROUPS_T,
  379. [AC_REQUIRE([AC_UID_T])dnl
  380. AC_CHECKING(for type of array argument to getgroups)
  381. changequote(,)dnl
  382. dnl Do not put single quotes in the C program text!!
  383. ac_prog='/* Thanks to Mike Rendell for this test.  */
  384. #include <sys/types.h>
  385. #define NGID 256
  386. #undef MAX
  387. #define MAX(x,y) ((x) > (y) ? (x) : (y))
  388. main()
  389. {
  390.   gid_t gidset[NGID];
  391.   int i, n;
  392.   union { gid_t gval; long lval; }  val;
  393.  
  394.   val.lval = -1;
  395.   for (i = 0; i < NGID; i++)
  396.     gidset[i] = val.gval;
  397.   n = getgroups (sizeof (gidset) / MAX (sizeof (int), sizeof (gid_t)) - 1,
  398.                  gidset);
  399.   /* Exit non-zero if getgroups seems to require an array of ints.  This
  400.      happens when gid_t is short but getgroups modifies an array of ints.  */
  401.   exit ((n > 0 && gidset[n] != val.gval) ? 1 : 0);
  402. }'
  403. changequote([,])dnl
  404. AC_TEST_PROGRAM([$ac_prog],
  405.         AC_DEFINE(GETGROUPS_T, gid_t),
  406.         AC_DEFINE(GETGROUPS_T, int))
  407. ])dnl
  408. dnl
  409. define(AC_UID_T,
  410. [AC_PROVIDE([$0])AC_CHECKING(for uid_t in sys/types.h)
  411. AC_HEADER_EGREP(uid_t, sys/types.h, ,
  412.   AC_DEFINE(uid_t, int) AC_DEFINE(gid_t, int))])dnl
  413. dnl
  414. define(AC_SIZE_T,
  415. [AC_CHECKING(for size_t in sys/types.h)
  416. AC_HEADER_EGREP(size_t, sys/types.h, , AC_DEFINE(size_t, unsigned))])dnl
  417. dnl
  418. define(AC_PID_T,
  419. [AC_PROVIDE([$0])AC_CHECKING(for pid_t in sys/types.h)
  420. AC_HEADER_EGREP(pid_t, sys/types.h, , AC_DEFINE(pid_t, int))])dnl
  421. dnl
  422. define(AC_OFF_T,
  423. [AC_PROVIDE([$0])AC_CHECKING(for off_t in sys/types.h)
  424. AC_HEADER_EGREP(off_t, sys/types.h, , AC_DEFINE(off_t, long))])dnl
  425. dnl
  426. define(AC_MODE_T,
  427. [AC_CHECKING(for mode_t in sys/types.h)
  428. AC_HEADER_EGREP(mode_t, sys/types.h, , AC_DEFINE(mode_t, int))])dnl
  429. dnl
  430. define(AC_RETSIGTYPE,
  431. [AC_PROVIDE([$0])AC_COMPILE_CHECK([return type of signal handlers],
  432. [#include <sys/types.h>
  433. #include <signal.h>
  434. #ifdef signal
  435. #undef signal
  436. #endif
  437. extern void (*signal ()) ();],
  438. [int i;],
  439. [AC_DEFINE(RETSIGTYPE, void)],
  440. [AC_DEFINE(RETSIGTYPE, int)])]
  441. )dnl
  442. dnl
  443. dnl
  444. dnl checks for functions
  445. dnl
  446. dnl
  447. define(AC_MMAP, [
  448. AC_CHECKING(for working mmap)
  449. AC_TEST_PROGRAM([/* Thanks to Mike Haertel and Jim Avera for this test. */
  450. #include <sys/types.h>
  451. #include <fcntl.h>
  452. #include <sys/mman.h>
  453.  
  454. #ifdef BSD
  455. #ifndef BSD4_1
  456. #define HAVE_GETPAGESIZE
  457. #endif
  458. #endif
  459. #ifndef HAVE_GETPAGESIZE
  460. #include <sys/param.h>
  461. #ifdef EXEC_PAGESIZE
  462. #define getpagesize() EXEC_PAGESIZE
  463. #else
  464. #ifdef NBPG
  465. #define getpagesize() NBPG * CLSIZE
  466. #ifndef CLSIZE
  467. #define CLSIZE 1
  468. #endif /* no CLSIZE */
  469. #else /* no NBPG */
  470. #define getpagesize() NBPC
  471. #endif /* no NBPG */
  472. #endif /* no EXEC_PAGESIZE */
  473. #endif /* not HAVE_GETPAGESIZE */
  474.  
  475. #ifdef __osf__
  476. #define valloc malloc
  477. #endif
  478.  
  479. extern char *valloc();
  480. extern char *malloc();
  481.  
  482. int
  483. main()
  484. {
  485.   char *buf1, *buf2, *buf3;
  486.   int i = getpagesize(), j;
  487.   int i2 = getpagesize()*2;
  488.   int fd;
  489.  
  490.   buf1 = valloc(i2);
  491.   buf2 = valloc(i);
  492.   buf3 = malloc(i2);
  493.   for (j = 0; j < i2; ++j)
  494.     *(buf1 + j) = rand();
  495.   fd = open("conftestmmap", O_CREAT | O_RDWR, 0666);
  496.   write(fd, buf1, i2);
  497.   mmap(buf2, i, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_PRIVATE, fd, 0);
  498.   for (j = 0; j < i; ++j)
  499.     if (*(buf1 + j) != *(buf2 + j))
  500.       exit(1);
  501.   lseek(fd, (long)i, 0);
  502.   read(fd, buf2, i); /* read into mapped memory -- file should not change */
  503.   /* (it does in i386 SVR4.0 - Jim Avera) */
  504.   lseek(fd, (long)0, 0);
  505.   read(fd, buf3, i2);
  506.   for (j = 0; j < i2; ++j)
  507.     if (*(buf1 + j) != *(buf3 + j))
  508.       exit(1);
  509.   exit(0);
  510. }
  511. ], AC_DEFINE(HAVE_MMAP))
  512. ])dnl
  513. dnl
  514. define(AC_VPRINTF,
  515. [AC_COMPILE_CHECK([vprintf], , [vprintf();], AC_DEFINE(HAVE_VPRINTF),
  516. ac_vprintf_missing=1)
  517. if test -n "$ac_vprintf_missing"; then
  518. AC_COMPILE_CHECK([_doprnt], , [_doprnt();], AC_DEFINE(HAVE_DOPRNT))
  519. fi
  520. ])dnl
  521. dnl
  522. define(AC_VFORK,
  523. [AC_REQUIRE([AC_PID_T])AC_HEADER_CHECK(vfork.h, AC_DEFINE(HAVE_VFORK_H))
  524. AC_CHECKING(for working vfork)
  525. AC_REQUIRE([AC_RETSIGTYPE])
  526. AC_TEST_PROGRAM([/* Thanks to Paul Eggert for this test.  */
  527. #include <stdio.h>
  528. #include <sys/types.h>
  529. #include <sys/stat.h>
  530. #include <signal.h>
  531. #ifdef HAVE_UNISTD_H
  532. #include <unistd.h>
  533. #endif
  534. #ifdef HAVE_VFORK_H
  535. #include <vfork.h>
  536. #endif
  537. static int signalled;
  538. static RETSIGTYPE catch (s) int s; { signalled = 1; }
  539. main() {
  540.   pid_t parent = getpid ();
  541.   pid_t child;
  542.  
  543.   signal (SIGINT, catch);
  544.  
  545.   child = vfork ();
  546.  
  547.   if (child == 0) {
  548.     /* On sparc systems, changes by the child to local and incoming
  549.        argument registers are propagated back to the parent.
  550.        The compiler is told about this with #include <vfork.h>,
  551.        but some compilers (e.g. gcc -O) don't grok <vfork.h>.
  552.        Test for this by using lots of local variables, at least
  553.        as many local variables as main has allocated so far
  554.        including compiler temporaries.  4 locals are enough for
  555.        gcc 1.40.3 on a sparc, but we use 8 to be safe.
  556.        A buggy compiler should reuse the register of parent
  557.        for one of the local variables, since it will think that
  558.        parent can't possibly be used any more in this routine.
  559.        Assigning to the local variable will thus munge parent
  560.        in the parent process.  */
  561.     pid_t
  562.       p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
  563.       p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
  564.     /* Convince the compiler that p..p7 are live; otherwise, it might
  565.        use the same hardware register for all 8 local variables.  */
  566.     if (p != p1 || p != p2 || p != p3 || p != p4
  567.     || p != p5 || p != p6 || p != p7)
  568.       _exit(1);
  569.  
  570.     /* On some systems (e.g. SunOS 5.2), if the parent is catching
  571.        a signal, the child ignores the signal before execing,
  572.        and the parent later receives that signal, the parent dumps core.
  573.        Test for this by ignoring SIGINT in the child.  */
  574.     signal (SIGINT, SIG_IGN);
  575.  
  576.     /* On some systems (e.g. IRIX 3.3),
  577.        vfork doesn't separate parent from child file descriptors.
  578.        If the child closes a descriptor before it execs or exits,
  579.        this munges the parent's descriptor as well.
  580.        Test for this by closing stdout in the child.  */
  581.     _exit(close(fileno(stdout)) != 0);
  582.   } else {
  583.     int status;
  584.     struct stat st;
  585.  
  586.     while (wait(&status) != child)
  587.       ;
  588.     exit(
  589.      /* Was there some problem with vforking?  */
  590.      child < 0
  591.  
  592.      /* Did the child fail?  (This shouldn't happen.)  */
  593.      || status
  594.  
  595.      /* Did the vfork/compiler bug occur?  */
  596.      || parent != getpid()
  597.  
  598.      /* Did the signal handling bug occur?  */
  599.      || kill(parent, SIGINT) != 0
  600.      || signalled != 1
  601.  
  602.      /* Did the file descriptor bug occur?  */
  603.      || fstat(fileno(stdout), &st) != 0
  604.      );
  605.   }
  606. }], , AC_DEFINE(vfork, fork))
  607. ])dnl
  608. dnl
  609. define(AC_WAIT3,
  610. [AC_CHECKING(for wait3 that fills in rusage)
  611. AC_TEST_PROGRAM([#include <sys/types.h>
  612. #include <sys/time.h>
  613. #include <sys/resource.h>
  614. #include <stdio.h>
  615. /* HP-UX has wait3 but does not fill in rusage at all.  */
  616. main() {
  617.   struct rusage r;
  618.   int i;
  619.   /* Use a field that we can force nonzero --
  620.      voluntary context switches.
  621.      For systems like NeXT and OSF/1 that don't set it,
  622.      also use the system CPU time.  */
  623.   r.ru_nvcsw = 0;
  624.   r.ru_stime.tv_sec = 0;
  625.   r.ru_stime.tv_usec = 0;
  626.   switch (fork()) {
  627.   case 0: /* Child.  */
  628.     sleep(1); /* Give up the CPU.  */
  629.     _exit(0);
  630.   case -1: _exit(0); /* What can we do?  */
  631.   default: /* Parent.  */
  632.     wait3(&i, 0, &r);
  633.     exit(r.ru_nvcsw == 0
  634.      && r.ru_stime.tv_sec == 0 && r.ru_stime.tv_usec == 0);
  635.   }
  636. }], AC_DEFINE(HAVE_WAIT3))
  637. ])dnl
  638. dnl
  639. define(AC_ALLOCA,
  640. [# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
  641. # for constant arguments.  Useless!
  642. AC_COMPILE_CHECK(working alloca.h, [#include <alloca.h>],
  643.   [char *p = alloca(2 * sizeof(int));], AC_DEFINE(HAVE_ALLOCA_H))
  644. ac_decl="#ifdef __GNUC__
  645. #define alloca __builtin_alloca
  646. #else
  647. #if HAVE_ALLOCA_H
  648. #include <alloca.h>
  649. #else
  650. #ifdef _AIX
  651.  #pragma alloca
  652. #else
  653. char *alloca ();
  654. #endif
  655. #endif
  656. #endif
  657. "
  658. AC_COMPILE_CHECK([alloca], $ac_decl,
  659. [char *p = (char *) alloca(1);], [AC_DEFINE([HAVE_ALLOCA])], [dnl
  660. ac_alloca_missing=1
  661. AC_PROGRAM_EGREP(winnitude, [
  662. #if defined(CRAY) && ! defined(CRAY2)
  663. winnitude
  664. #else
  665. lossage
  666. #endif
  667. ],
  668. AC_FUNC_CHECK([_getb67],AC_DEFINE([CRAY_STACKSEG_END],[_getb67]),
  669. AC_FUNC_CHECK([GETB67],AC_DEFINE([CRAY_STACKSEG_END],[GETB67]),
  670. AC_FUNC_CHECK([getb67],AC_DEFINE([CRAY_STACKSEG_END],[getb67])))))
  671. ])
  672. if test -n "$ac_alloca_missing"; then
  673.   # The SVR3 libPW and SVR4 libucb both contain incompatible functions
  674.   # that cause trouble.  Some versions do not even contain alloca or
  675.   # contain a buggy version.  If you still want to use their alloca,
  676.   # use ar to extract alloca.o from them instead of compiling alloca.c.
  677.   ALLOCA=alloca.o
  678.   AC_DEFINE(C_ALLOCA)
  679.  
  680.   AC_CHECKING(stack direction for C alloca)
  681.   AC_TEST_PROGRAM([find_stack_direction ()
  682. {
  683.   static char *addr = 0;
  684.   auto char dummy;
  685.   if (addr == 0)
  686.     {
  687.       addr = &dummy;
  688.       return find_stack_direction ();
  689.     }
  690.   else
  691.     return (&dummy > addr) ? 1 : -1;
  692. }
  693. main ()
  694. {
  695.   exit (find_stack_direction() < 0);
  696. }], dnl
  697. AC_DEFINE(STACK_DIRECTION,1), AC_DEFINE(STACK_DIRECTION,-1), dnl
  698. AC_DEFINE(STACK_DIRECTION,0))
  699. fi
  700. AC_SUBST(ALLOCA)dnl
  701. ])dnl
  702. dnl
  703. define(AC_GETLOADAVG,
  704. [# Some definitions of getloadavg require that the program be installed setgid.
  705. AC_SUBST(NEED_SETGID)NEED_SETGID=false
  706. ac_need_func=true
  707.  
  708. # Check for the 4.4BSD definition of getloadavg.
  709. AC_HAVE_LIBRARY(util, LIBS="$LIBS -lutil" ac_need_func=false)
  710. # Some systems with -lutil have (and need) -lkvm as well, some do not.
  711. AC_HAVE_LIBRARY(kvm, LIBS="$LIBS -lkvm")
  712.  
  713. if $ac_need_func; then
  714. # There is a commonly available library for RS/6000 AIX.
  715. # Since it is not a standard part of AIX, it might be installed locally.
  716. LIBS_old="$LIBS"
  717. LIBS="-L/usr/local/lib $LIBS"
  718. AC_HAVE_LIBRARY(getloadavg, LIBS="$LIBS -lgetloadavg" ac_need_func=false,
  719.     LIBS="$LIBS_old")
  720. fi
  721.  
  722. # Make sure it is really in the library, if we think we found it at all.
  723. AC_REPLACE_FUNCS(getloadavg)
  724.  
  725. case "$LIBOBJS" in
  726. *getloadavg*)
  727. ac_need_func=true
  728. AC_HEADER_CHECK(sys/dg_sys_info.h, [dnl
  729. AC_DEFINE(DGUX) ac_need_func=false
  730. # Some versions of DGUX need -ldgc for dg_sys_info.
  731. AC_HAVE_LIBRARY(dgc)])
  732. if $ac_need_func; then
  733. # We cannot check for <dwarf.h>, because Solaris 2 does not use dwarf (it
  734. # uses stabs), but it's still SVR4.  We cannot check for <elf.h> because
  735. # Irix 4.0.5F has the header but not the library.
  736. AC_HAVE_LIBRARY(elf, AC_DEFINE(SVR4) LIBS="$LIBS -lelf" ac_need_func=false
  737.   AC_HAVE_LIBRARY(kvm, LIBS="$LIBS -lkvm"))
  738. fi
  739. if $ac_need_func; then
  740. AC_HEADER_CHECK(inq_stats/cpustats.h, AC_DEFINE(UMAX4_3) AC_DEFINE(UMAX)
  741.   ac_need_func=false)
  742. fi
  743. if $ac_need_func; then
  744. AC_HEADER_CHECK(sys/cpustats.h, AC_DEFINE(UMAX) ac_need_func=false)
  745. fi
  746. if $ac_need_func; then
  747. AC_HAVE_HEADERS(mach/mach.h)
  748. fi
  749.  
  750. AC_HEADER_CHECK(nlist.h,
  751. [AC_DEFINE(NLIST_STRUCT)
  752. AC_COMPILE_CHECK(n_un in struct nlist, [#include <nlist.h>],
  753. [struct nlist n; n.n_un.n_name = 0;],
  754. AC_DEFINE(NLIST_NAME_UNION))])dnl
  755.  
  756. # Figure out whether we will need to install setgid.
  757. AC_PROGRAM_EGREP([Yowza Am I SETGID yet], [dnl
  758. #include "${srcdir}/getloadavg.c"
  759. #ifdef LDAV_PRIVILEGED
  760. Yowza Am I SETGID yet
  761. #endif], [AC_DEFINE(GETLOADAVG_PRIVILEGED) NEED_SETGID=true])dnl
  762. ;;
  763.  
  764. *) AC_DEFINE(HAVE_GETLOADAVG) ;;
  765. esac
  766.  
  767. if $NEED_SETGID; then
  768.   AC_SUBST(KMEM_GROUP)# Figure out what group owns /dev/kmem.
  769.   # The installed program will need to be setgid and owned by that group.
  770. changequote(,)dnl
  771.   # On Solaris, /dev/kmem is a symlink.  Get info on the real file.
  772.   ac_ls_output=`ls -lgL /dev/kmem 2>/dev/null`
  773.   # If we got an error (system does not support symlinks), try without -L.
  774.   test -z "$ac_ls_output" && ac_ls_output=`ls -lg /dev/kmem`
  775.   KMEM_GROUP=`echo $ac_ls_output \
  776.     | sed -ne 's/[     ][     ]*/ /g;
  777.            s/^.[sSrwx-]* *[0-9]* *\([^0-9]*\)  *.*/\1/;
  778.            / /s/.* //;p;'`
  779. changequote([,])dnl
  780. fi
  781. ])dnl
  782. dnl
  783. define(AC_UTIME_NULL,
  784. [AC_CHECKING(utime with null argument)
  785. rm -f conftestdata; > conftestdata
  786. # Sequent interprets utime(file, 0) to mean use start of epoch.  Wrong.
  787. AC_TEST_PROGRAM([#include <sys/types.h>
  788. #include <sys/stat.h>
  789. main() {
  790. struct stat s, t;
  791. exit(!(stat ("conftestdata", &s) == 0 && utime("conftestdata", (long *)0) == 0
  792. && stat("conftestdata", &t) == 0 && t.st_mtime >= s.st_mtime
  793. && t.st_mtime - s.st_mtime < 120));
  794. }], AC_DEFINE(HAVE_UTIME_NULL))
  795. rm -f core
  796. ])dnl
  797. dnl
  798. define(AC_STRCOLL, [AC_CHECKING(for strcoll)
  799. AC_TEST_PROGRAM([#include <string.h>
  800. main ()
  801. {
  802.   exit (strcoll ("abc", "def") >= 0 ||
  803.     strcoll ("ABC", "DEF") >= 0 ||
  804.     strcoll ("123", "456") >= 0);
  805. }], AC_DEFINE(HAVE_STRCOLL))])dnl
  806. dnl
  807. define(AC_SETVBUF_REVERSED,
  808. [AC_TEST_PROGRAM([#include <stdio.h>
  809. /* If setvbuf has the reversed format, exit 0. */
  810. main () {
  811.   /* This call has the arguments reversed.
  812.      A reversed system may check and see that the address of main
  813.      is not _IOLBF, _IONBF, or _IOFBF, and return nonzero.  */
  814.   if (setvbuf(stdout, _IOLBF, (char *) main, BUFSIZ) != 0)
  815.     exit(1);
  816.   putc('\r', stdout);
  817.   exit(0);            /* Non-reversed systems segv here.  */
  818. }], AC_DEFINE(SETVBUF_REVERSED))
  819. rm -f core
  820. ])dnl
  821. dnl
  822. dnl
  823. dnl checks for structure members
  824. dnl
  825. dnl
  826. define(AC_STRUCT_TM,
  827. [AC_PROVIDE([$0])AC_COMPILE_CHECK([struct tm in time.h],
  828. [#include <sys/types.h>
  829. #include <time.h>],
  830. [struct tm *tp; tp->tm_sec;], , AC_DEFINE(TM_IN_SYS_TIME))])dnl
  831. dnl
  832. define(AC_TIME_WITH_SYS_TIME,
  833. [AC_COMPILE_CHECK([whether time.h and sys/time.h may both be included],
  834. [#include <sys/types.h>
  835. #include <sys/time.h>
  836. #include <time.h>],
  837. [struct tm *tp;], AC_DEFINE(TIME_WITH_SYS_TIME))])dnl
  838. dnl
  839. define(AC_TIMEZONE,
  840. [AC_REQUIRE([AC_STRUCT_TM])ac_decl='#include <sys/types.h>
  841. '
  842. case "$DEFS" in
  843.   *TM_IN_SYS_TIME*) ac_decl="$ac_decl
  844. #include <sys/time.h>
  845. " ;;
  846.   *) ac_decl="$ac_decl
  847. #include <time.h>
  848. " ;;
  849. esac
  850. AC_COMPILE_CHECK([tm_zone in struct tm], $ac_decl,
  851. [struct tm tm; tm.tm_zone;], AC_DEFINE(HAVE_TM_ZONE), ac_no_tm_zone=1)
  852. if test -n "$ac_no_tm_zone"; then
  853. AC_COMPILE_CHECK(tzname, changequote(<<,>>)dnl
  854. <<#include <time.h>
  855. #ifndef tzname /* For SGI.  */
  856. extern char *tzname[]; /* RS6000 and others want it this way.  */
  857. #endif>>, changequote([,])dnl
  858. [atoi(*tzname);], AC_DEFINE(HAVE_TZNAME))
  859. fi
  860. ])dnl
  861. dnl
  862. define(AC_ST_BLOCKS,
  863. [AC_COMPILE_CHECK([st_blocks in struct stat],
  864. [#include <sys/types.h>
  865. #include <sys/stat.h>], [struct stat s; s.st_blocks;],
  866. AC_DEFINE(HAVE_ST_BLOCKS), LIBOBJS="$LIBOBJS fileblocks.o")dnl
  867. AC_SUBST(LIBOBJS)dnl
  868. ])dnl
  869. dnl
  870. define(AC_ST_BLKSIZE,
  871. [AC_COMPILE_CHECK([st_blksize in struct stat],
  872. [#include <sys/types.h>
  873. #include <sys/stat.h>], [struct stat s; s.st_blksize;],
  874. AC_DEFINE(HAVE_ST_BLKSIZE))])dnl
  875. dnl
  876. define(AC_ST_RDEV,
  877. [AC_COMPILE_CHECK([st_rdev in struct stat],
  878. [#include <sys/types.h>
  879. #include <sys/stat.h>], [struct stat s; s.st_rdev;],
  880. AC_DEFINE(HAVE_ST_RDEV))])dnl
  881. dnl
  882. dnl
  883. dnl checks for compiler characteristics
  884. dnl
  885. dnl
  886. define(AC_CROSS_CHECK,
  887. [AC_PROVIDE([$0])AC_CHECKING(whether cross-compiling)
  888. # If we cannot run a trivial program, we must be cross compiling.
  889. AC_TEST_PROGRAM([main(){exit(0);}], , cross_compiling=1)
  890. ])dnl
  891. dnl
  892. define(AC_CHAR_UNSIGNED,
  893. [AC_CHECKING(for unsigned characters)
  894. AC_TEST_PROGRAM(
  895. [/* volatile prevents gcc2 from optimizing the test away on sparcs.  */
  896. #if !__STDC__
  897. #define volatile
  898. #endif
  899. main() {
  900. #ifdef __CHAR_UNSIGNED__
  901.   exit(1); /* No need to redefine it.  */
  902. #else
  903.   volatile char c = 255; exit(c < 0);
  904. #endif
  905. }], AC_DEFINE(__CHAR_UNSIGNED__))]
  906. )dnl
  907. dnl
  908. define(AC_LONG_DOUBLE,
  909. [AC_REQUIRE([AC_PROG_CC])dnl
  910. AC_CHECKING(for long double)
  911. if test -n "$GCC"; then
  912. AC_DEFINE(HAVE_LONG_DOUBLE)
  913. else
  914. AC_TEST_PROGRAM([int main() {
  915. /* The Stardent Vistra knows sizeof(long double), but does not support it.  */
  916. long double foo = 0.0;
  917. /* On Ultrix 4.3 cc, long double is 4 and double is 8.  */
  918. exit(sizeof(long double) < sizeof(double)); }],
  919. AC_DEFINE(HAVE_LONG_DOUBLE))
  920. fi
  921. ])dnl
  922. dnl
  923. define(AC_INT_16_BITS,
  924. [AC_OBSOLETE([$0], [; instead use AC_SIZEOF_TYPE(int, sizevar)])
  925. AC_CHECKING(integer size)
  926. AC_TEST_PROGRAM([main() { exit(sizeof(int) != 2); }],
  927.  AC_DEFINE(INT_16_BITS))
  928. ])dnl
  929. dnl
  930. define(AC_LONG_64_BITS,
  931. [AC_OBSOLETE([$0], [; instead use AC_SIZEOF_TYPE(long, sizevar)])
  932. AC_CHECKING(for 64-bit long ints)
  933. AC_TEST_PROGRAM([main() { exit(sizeof(long int) != 8); }],
  934.  AC_DEFINE(LONG_64_BITS))
  935. ])dnl
  936. dnl
  937. define(AC_WORDS_BIGENDIAN,
  938. [AC_CHECKING(byte ordering)
  939. AC_TEST_PROGRAM([main () {
  940.   /* Are we little or big endian?  From Harbison&Steele.  */
  941.   union
  942.   {
  943.     long l;
  944.     char c[sizeof (long)];
  945.   } u;
  946.   u.l = 1;
  947.   exit (u.c[sizeof (long) - 1] == 1);
  948. }], , AC_DEFINE(WORDS_BIGENDIAN))
  949. ])dnl
  950. dnl
  951. define(AC_ARG_ARRAY,
  952. [AC_CHECKING(whether the address of an argument can be used as an array)
  953. AC_TEST_PROGRAM([main() {
  954. /* Return 0 iff arg arrays are ok.  */
  955. exit(!x(1, 2, 3, 4));
  956. }
  957. x(a, b, c, d) {
  958.   return y(a, &b);
  959. }
  960. /* Return 1 iff arg arrays are ok.  */
  961. y(a, b) int *b; {
  962.   return a == 1 && b[0] == 2 && b[1] == 3 && b[2] == 4;
  963. }], , AC_DEFINE(NO_ARG_ARRAY))
  964. rm -f core
  965. ])dnl
  966. dnl
  967. define(AC_INLINE,
  968. [AC_REQUIRE([AC_PROG_CC])if test -n "$GCC"; then
  969. AC_COMPILE_CHECK([inline], , [} inline foo() {], , AC_DEFINE(inline, __inline))
  970. fi
  971. ])dnl
  972. define(AC_CONST,
  973. [changequote(,)dnl
  974. dnl Do not put single quotes in the C program text!!
  975. ac_prog='/* Ultrix mips cc rejects this.  */
  976. typedef int charset[2]; const charset x;
  977. /* SunOS 4.1.1 cc rejects this.  */
  978. char const *const *ccp;
  979. char **p;
  980. /* AIX XL C 1.02.0.0 rejects this.
  981.    It does not let you subtract one const X* pointer from another in an arm
  982.    of an if-expression whose if-part is not a constant expression */
  983. const char *g = "string";
  984. ccp = &g + (g ? g-g : 0);
  985. /* HPUX 7.0 cc rejects these. */
  986. ++ccp;
  987. p = (char**) ccp;
  988. ccp = (char const *const *) p;
  989. { /* SCO 3.2v4 cc rejects this.  */
  990.   char *t;
  991.   char const *s = 0 ? (char *) 0 : (char const *) 0;
  992.  
  993.   *t++ = 0;
  994. }
  995. { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
  996.   int x[] = {25,17};
  997.   const int *foo = &x[0];
  998.   ++foo;
  999. }
  1000. { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
  1001.   typedef const int *iptr;
  1002.   iptr p = 0;
  1003.   ++p;
  1004. }
  1005. { /* AIX XL C 1.02.0.0 rejects this saying
  1006.      "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
  1007.   struct s { int j; const int *ap[3]; };
  1008.   struct s *b; b->j = 5;
  1009. }
  1010. { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
  1011.   const int foo = 10;
  1012. }'
  1013. changequote([,])dnl
  1014. AC_COMPILE_CHECK([dnl Do not "break" this again.
  1015. lack of working const], , [$ac_prog], , AC_DEFINE(const,))])dnl
  1016. dnl
  1017. dnl
  1018. dnl checks for operating system services
  1019. dnl
  1020. dnl
  1021. define(AC_HAVE_POUNDBANG, [dnl
  1022. AC_CHECKING(whether \`#!' works in shell scripts)
  1023. echo '#!/bin/cat
  1024. exit 69
  1025. ' > conftest
  1026. chmod u+x conftest
  1027. (SHELL=/bin/sh; export SHELL; ./conftest > /dev/null)
  1028. if test $? -ne 69; then
  1029.    :; $1
  1030. else
  1031.    :; $2
  1032. fi
  1033. rm -f conftest
  1034. ])dnl
  1035. define(AC_REMOTE_TAPE,
  1036. [AC_CHECKING(for remote tape and socket header files)
  1037. AC_HEADER_CHECK(sys/mtio.h, AC_DEFINE(HAVE_SYS_MTIO_H) ac_have_mtio_h=1)
  1038. if test -n "$ac_have_mtio_h"; then
  1039. AC_TEST_CPP([#include <sgtty.h>
  1040. #include <sys/socket.h>], PROGS="$PROGS rmt")
  1041. fi
  1042. ])dnl
  1043. dnl
  1044. define(AC_LONG_FILE_NAMES,
  1045. [AC_CHECKING(for long file names)
  1046. ac_some_dir_failed=false
  1047. # Test for long file names in all the places we know might matter:
  1048. #      .        the current directory, where building will happen
  1049. #      /tmp        where it might want to write temporary files
  1050. #      /var/tmp        likewise
  1051. #      /usr/tmp        likewise
  1052. #      $prefix/lib    where we will be installing things
  1053. #      $exec_prefix/lib    likewise
  1054. # eval it to expand exec_prefix.
  1055. for ac_dir in `eval echo . /tmp /var/tmp /usr/tmp $prefix/lib $exec_prefix/lib` ; do
  1056.   test -d $ac_dir || continue
  1057.   test -w $ac_dir || continue # It's less confusing to not echo anything here.
  1058.   (echo 1 > $ac_dir/conftest9012345) 2>/dev/null
  1059.   (echo 2 > $ac_dir/conftest9012346) 2>/dev/null
  1060.   val=`cat $ac_dir/conftest9012345 2>/dev/null`
  1061.   test -f $ac_dir/conftest9012345 && test "$val" = 1 || ac_some_dir_failed=true
  1062.   rm -f $ac_dir/conftest9012345 $ac_dir/conftest9012346 2> /dev/null
  1063. done
  1064. $ac_some_dir_failed || AC_DEFINE(HAVE_LONG_FILE_NAMES)
  1065. ])dnl
  1066. dnl
  1067. define(AC_RESTARTABLE_SYSCALLS,
  1068. [AC_CHECKING(for restartable system calls)
  1069. AC_TEST_PROGRAM(
  1070. [/* Exit 0 (true) if wait returns something other than -1,
  1071.    i.e. the pid of the child, which means that wait was restarted
  1072.    after getting the signal.  */
  1073. #include <sys/types.h>
  1074. #include <signal.h>
  1075. ucatch (isig) { }
  1076. main () {
  1077.   int i = fork (), status;
  1078.   if (i == 0) { sleep (3); kill (getppid (), SIGINT); sleep (3); exit (0); }
  1079.   signal (SIGINT, ucatch);
  1080.   status = wait(&i);
  1081.   if (status == -1) wait(&i);
  1082.   exit (status == -1);
  1083. }
  1084. ], AC_DEFINE(HAVE_RESTARTABLE_SYSCALLS))
  1085. ])dnl
  1086. dnl
  1087. define(AC_FIND_X,
  1088. [AC_PROVIDE([$0])# If we find X, set shell vars x_includes and x_libraries to the paths.
  1089. no_x=true
  1090. AC_FIND_X_XMKMF
  1091. if test -z "$ac_imake_usrlibdir"; then
  1092. AC_FIND_X_DIRECT
  1093. fi
  1094. test -n "$x_includes" && AC_VERBOSE(X11 headers are in $x_includes)
  1095. test -n "$x_libraries" && AC_VERBOSE(X11 libraries are in $x_libraries)
  1096. ])dnl
  1097. dnl
  1098. dnl Internal subroutine of AC_FIND_X.
  1099. define(AC_FIND_X_XMKMF,
  1100. [AC_CHECKING(for X include and library files with xmkmf)
  1101. rm -fr conftestdir
  1102. if mkdir conftestdir; then
  1103.   cd conftestdir
  1104.   cat > Imakefile <<'EOF'
  1105. acfindx:
  1106.     @echo 'ac_imake_incroot="${INCROOT}"; ac_imake_usrlibdir="${USRLIBDIR}"; ac_imake_libdir="${LIBDIR}"'
  1107. EOF
  1108.   if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
  1109.     no_x=
  1110.     # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
  1111.     eval `make acfindx 2>/dev/null | grep -v make`
  1112.     # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
  1113.     if test ! -f $ac_imake_usrlibdir/libX11.a && test -f $ac_imake_libdir/libX11.a; then
  1114.       ac_imake_usrlibdir=$ac_imake_libdir
  1115.     fi
  1116.     case "$ac_imake_incroot" in
  1117.     /usr/include) ;;
  1118.     *) x_includes="${x_includes-$ac_imake_incroot}" ;;
  1119.     esac
  1120.     case "$ac_imake_usrlibdir" in
  1121.     /usr/lib | /lib) ;;
  1122.     *) x_libraries="${x_libraries-$ac_imake_usrlibdir}" ;;
  1123.     esac
  1124.   fi
  1125.   cd ..
  1126.   rm -fr conftestdir
  1127. fi
  1128. ])dnl
  1129. dnl
  1130. dnl Internal subroutine of AC_FIND_X.
  1131. define(AC_FIND_X_DIRECT,
  1132. [AC_CHECKING(for X include and library files directly)
  1133. if test ".$x_direct_test_library" = . ; then
  1134.    x_direct_test_library='Xt'
  1135. fi
  1136. if test ".$x_direct_test_include" = . ; then
  1137.    x_direct_test_include='X11/Intrinsic.h'
  1138. fi
  1139. AC_TEST_CPP([#include <$x_direct_test_include>], no_x=,
  1140.   for ac_dir in               \
  1141.     /usr/X11R6/include        \
  1142.     /usr/X11R5/include        \
  1143.     /usr/X11R4/include        \
  1144.                               \
  1145.     /usr/include/X11R6        \
  1146.     /usr/include/X11R5        \
  1147.     /usr/include/X11R4        \
  1148.                               \
  1149.     /usr/local/X11R6/include  \
  1150.     /usr/local/X11R5/include  \
  1151.     /usr/local/X11R4/include  \
  1152.                               \
  1153.     /usr/local/include/X11R6  \
  1154.     /usr/local/include/X11R5  \
  1155.     /usr/local/include/X11R4  \
  1156.                               \
  1157.     /usr/X11/include          \
  1158.     /usr/include/X11          \
  1159.     /usr/local/X11/include    \
  1160.     /usr/local/include/X11    \
  1161.                               \
  1162.     /usr/X386/include         \
  1163.     /usr/x386/include         \
  1164.     /usr/XFree86/include/X11  \
  1165.                               \
  1166.     /usr/include              \
  1167.     /usr/local/include        \
  1168.     /usr/unsupported/include  \
  1169.     /usr/athena/include       \
  1170.     /usr/local/x11r5/include  \
  1171.     /usr/lpp/Xamples/include  \
  1172.                               \
  1173.     /usr/openwin/include      \
  1174.     /usr/openwin/share/include \
  1175.     ; \
  1176.   do
  1177.     if test -r "$ac_dir/$x_direct_test_include"; then
  1178.       x_includes=${x_includes-$ac_dir}; no_x=
  1179.       break
  1180.     fi
  1181.   done)
  1182.  
  1183. # Check for the libraries.  First see if replacing the `include' by
  1184. # `lib' works.
  1185. AC_HAVE_LIBRARY("$x_direct_test_library", no_x=,
  1186. for ac_dir in `echo "$x_includes" | sed s/include/lib/` \
  1187.     /usr/X11R6/lib        \
  1188.     /usr/X11R5/lib        \
  1189.     /usr/X11R4/lib        \
  1190.                           \
  1191.     /usr/lib/X11R6        \
  1192.     /usr/lib/X11R5        \
  1193.     /usr/lib/X11R4        \
  1194.                           \
  1195.     /usr/local/X11R6/lib  \
  1196.     /usr/local/X11R5/lib  \
  1197.     /usr/local/X11R4/lib  \
  1198.                           \
  1199.     /usr/local/lib/X11R6  \
  1200.     /usr/local/lib/X11R5  \
  1201.     /usr/local/lib/X11R4  \
  1202.                           \
  1203.     /usr/X11/lib          \
  1204.     /usr/lib/X11          \
  1205.     /usr/local/X11/lib    \
  1206.     /usr/local/lib/X11    \
  1207.                           \
  1208.     /usr/X386/lib         \
  1209.     /usr/x386/lib         \
  1210.     /usr/XFree86/lib/X11  \
  1211.                           \
  1212.     /usr/lib              \
  1213.     /usr/local/lib        \
  1214.     /usr/unsupported/lib  \
  1215.     /usr/athena/lib       \
  1216.     /usr/local/x11r5/lib  \
  1217.     /usr/lpp/Xamples/lib  \
  1218.                           \
  1219.     /usr/openwin/lib      \
  1220.     /usr/openwin/share/lib \
  1221.     ; \
  1222. do
  1223.   for ac_extension in a so sl; do
  1224.     if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then
  1225.       x_libraries=${x_libraries-$ac_dir}; no_x=
  1226.       break 2
  1227.     fi
  1228.   done
  1229. done)])dnl
  1230. dnl
  1231. dnl Find additional X libraries, magic flags, etc.
  1232. define(AC_FIND_XTRA, [AC_REQUIRE(AC_FIND_X)AC_REQUIRE(AC_ISC_POSIX)
  1233. if test -n "$x_includes"; then
  1234.   X_CFLAGS="$X_CFLAGS -I$x_includes"
  1235. elif test -n "$no_x"; then 
  1236.   # Not all programs may use this symbol, but it won't hurt to define it.
  1237.   X_CFLAGS="$X_CFLAGS -DX_DISPLAY_MISSING"
  1238. fi
  1239.  
  1240. # It would be nice to have a more robust check for the -R ld option than
  1241. # just checking for Solaris.
  1242. # It would also be nice to do this for all -L options, not just this one.
  1243. if test -n "$x_libraries"; then
  1244.   X_LIBS="$X_LIBS -L$x_libraries"
  1245.   if test "`uname 2>/dev/null`" = SunOS \
  1246.      && uname -r | grep '^5' >/dev/null; then
  1247.     X_LIBS="$X_LIBS -R$x_libraries"
  1248.   fi
  1249. fi
  1250.  
  1251. # Check for additional X libraries.
  1252.  
  1253. if test -n "$ISC"; then
  1254.   X_LIBS="$X_LIBS -lnsl_s -linet"
  1255.   AC_VERBOSE(adding -lnsl_s -linet to X_LIBS)
  1256. else
  1257.   # Martyn.Johnson@cl.cam.ac.uk says this is needed for Ultrix, if the X
  1258.   # libraries were built with DECnet support.  And karl@cs.umb.edu's Alpha
  1259.   # needs dnet_stub.
  1260.   AC_HAVE_LIBRARY(dnet,
  1261.     [X_LIBS="$X_LIBS -ldnet"
  1262.      ac_have_dnet=t
  1263.      AC_VERBOSE(adding -ldnet to X_LIBS)])
  1264.   if test -z "$ac_have_dnet"; then
  1265.     AC_HAVE_LIBRARY(dnet_stub,
  1266.       [X_LIBS="$X_LIBS -ldnet_stub"
  1267.        AC_VERBOSE(adding -ldnet_stub to X_LIBS)])
  1268.   fi
  1269.   # lieder@skyler.mavd.honeywell.com says without -lsocket,
  1270.   # socket/setsockopt and other routines are undefined under SCO ODT 2.0.
  1271.   # But -lsocket is broken on IRIX, according to kb@cs.umb.edu.
  1272.   if test "`uname 2>/dev/null`" != IRIX; then
  1273.     AC_HAVE_LIBRARY(socket,
  1274.       [x_extra_libs="$x_extra_libs -lsocket"
  1275.        test -n "$verbose" && echo "    adding -lsocket to x_extra_libs"])
  1276.   fi
  1277. fi
  1278. #
  1279. AC_SUBST(X_CFLAGS)dnl
  1280. AC_SUBST(X_LIBS)dnl
  1281. ])dnl
  1282. dnl
  1283. dnl
  1284. dnl checks for UNIX variants
  1285. dnl
  1286. dnl
  1287. define(AC_AIX,
  1288. [AC_CHECKING(for AIX)
  1289. AC_BEFORE([$0], [AC_COMPILE_CHECK])AC_BEFORE([$0], [AC_TEST_PROGRAM])AC_BEFORE([$0], [AC_HEADER_EGREP])AC_BEFORE([$0], [AC_TEST_CPP])AC_PROGRAM_EGREP(yes,
  1290. [#ifdef _AIX
  1291.   yes
  1292. #endif
  1293. ], AC_DEFINE(_ALL_SOURCE))
  1294. ])dnl
  1295. dnl
  1296. define(AC_MINIX,
  1297. [AC_BEFORE([$0], [AC_COMPILE_CHECK])AC_BEFORE([$0], [AC_TEST_PROGRAM])AC_BEFORE([$0], [AC_HEADER_EGREP])AC_BEFORE([$0], [AC_TEST_CPP])AC_HEADER_CHECK(minix/config.h, MINIX=1)
  1298. # The Minix shell can't assign to the same variable on the same line!
  1299. if test -n "$MINIX"; then
  1300.   AC_DEFINE(_POSIX_SOURCE)
  1301.   AC_DEFINE(_POSIX_1_SOURCE, 2)
  1302.   AC_DEFINE(_MINIX)
  1303. fi
  1304. ])dnl
  1305. dnl
  1306. define(AC_ISC_POSIX,
  1307. [AC_PROVIDE([$0])AC_BEFORE([$0], [AC_COMPILE_CHECK])AC_BEFORE([$0], [AC_TEST_PROGRAM])AC_BEFORE([$0], [AC_HEADER_EGREP])AC_BEFORE([$0], [AC_TEST_CPP])AC_CHECKING(for POSIXized ISC)
  1308. if test -d /etc/conf/kconfig.d &&
  1309.   grep _POSIX_VERSION [/usr/include/sys/unistd.h] >/dev/null 2>&1
  1310. then
  1311.   ISC=1 # If later tests want to check for ISC.
  1312.   AC_DEFINE(_POSIX_SOURCE)
  1313.   if test -n "$GCC"; then
  1314.     CC="$CC -posix"
  1315.   else
  1316.     CC="$CC -Xp"
  1317.   fi
  1318. fi
  1319. ])dnl
  1320. dnl
  1321. define(AC_XENIX_DIR,
  1322. [AC_REQUIRE([AC_DIR_HEADER])AC_CHECKING(for Xenix)
  1323. AC_PROGRAM_EGREP(yes,
  1324. [#if defined(M_XENIX) && !defined(M_UNIX)
  1325.   yes
  1326. #endif
  1327. ], XENIX=1)
  1328. if test -n "$XENIX"; then
  1329.   LIBS="$LIBS -lx"
  1330.   case "$DEFS" in
  1331.   *SYSNDIR*) ;;
  1332.   *) LIBS="-ldir $LIBS" ;; # Make sure -ldir precedes any -lx.
  1333.   esac
  1334. fi
  1335. ])dnl
  1336. dnl
  1337. define(AC_SCO_INTL,
  1338. [AC_HAVE_LIBRARY(intl, LIBS="$LIBS -lintl")
  1339. ])dnl
  1340. dnl
  1341. define(AC_IRIX_SUN,
  1342. [AC_HAVE_LIBRARY(sun, LIBS="$LIBS -lsun")
  1343. ])dnl
  1344. dnl
  1345. define(AC_DYNIX_SEQ,
  1346. [AC_HAVE_LIBRARY(seq, LIBS="$LIBS -lseq")
  1347. ])dnl
  1348. dnl
  1349. define(AC_STAT_MACROS_BROKEN,[AC_CHECKING(for broken stat file mode macros)
  1350. AC_PROGRAM_EGREP([You lose], [#include <sys/types.h>
  1351. #include <sys/stat.h>
  1352. #ifdef S_ISBLK
  1353. #if S_ISBLK (S_IFDIR)
  1354. You lose.
  1355. #endif
  1356. #ifdef S_IFCHR
  1357. #if S_ISBLK (S_IFCHR)
  1358. You lose.
  1359. #endif
  1360. #endif /* S_IFCHR */
  1361. #endif /* S_ISBLK */
  1362. #ifdef S_ISLNK
  1363. #if S_ISLNK (S_IFREG)
  1364. You lose.
  1365. #endif
  1366. #endif /* S_ISLNK */
  1367. #ifdef S_ISSOCK
  1368. #if S_ISSOCK (S_IFREG)
  1369. You lose.
  1370. #endif
  1371. #endif /* S_ISSOCK */
  1372. ], AC_DEFINE(STAT_MACROS_BROKEN))])dnl
  1373. dnl
  1374. dnl
  1375. define(AC_SYS_SIGLIST_DECLARED,[dnl
  1376. AC_COMPILE_CHECK(sys_siglist declaration in signal.h or unistd.h,
  1377.          [#include <signal.h>
  1378. /* NetBSD declares sys_siglist in <unistd.h>.  */
  1379. #ifdef HAVE_UNISTD_H
  1380. #include <unistd.h>
  1381. #endif], [char *msg = *(sys_siglist + 1);],
  1382.          AC_DEFINE(SYS_SIGLIST_DECLARED))])dnl
  1383. dnl
  1384.