[project @ 2000-07-13 09:17:57 by michaelw]
[ghc-hetmet.git] / aclocal.m4
1 dnl $Id: aclocal.m4,v 1.55 2000/07/13 09:17:57 michaelw Exp $
2 dnl 
3 dnl Extra autoconf macros for the Glasgow fptools
4 dnl
5 dnl To be a good autoconf citizen, names of local macros have
6 dnl prefixed with FPTOOLS_ to ensure we don't clash
7 dnl with any pre-supplied autoconf ones.
8
9 dnl
10 dnl Is timezone around? (in a header file)
11 dnl 
12 AC_DEFUN(FPTOOLS_HAVE_TIMEZONE,
13 [AC_CACHE_CHECK([timezone], fptools_cv_have_timezone,
14 [AC_TRY_COMPILE([#if TIME_WITH_SYS_TIME
15 # include <sys/time.h>
16 # include <time.h>
17 #else
18 # if HAVE_SYS_TIME_H
19 #  include <sys/time.h>
20 # else
21 #  include <time.h>
22 # endif
23 #endif
24 ], [return timezone;], 
25 fptools_cv_have_timezone=yes, fptools_cv_have_timezone=no)])
26 if test "$fptools_cv_have_timezone" = yes; then
27   AC_DEFINE(HAVE_TIMEZONE)
28 fi
29 ])
30
31 dnl
32 dnl Has timezone the type time_t or long (HP-UX 10.20 apparently
33 dnl has `long'..)
34 dnl 
35 AC_DEFUN(FPTOOLS_TYPE_TIMEZONE,
36 [AC_CACHE_CHECK([type of timezone], fptools_cv_type_timezone,
37 [AC_TRY_COMPILE([#if TIME_WITH_SYS_TIME
38 # include <sys/time.h>
39 # include <time.h>
40 #else
41 # if HAVE_SYS_TIME_H
42 #  include <sys/time.h>
43 # else
44 #  include <time.h>
45 # endif
46 #endif
47
48 extern time_t timezone; 
49 ],
50 [int i;], fptools_cv_type_timezone=time_t, fptools_cv_type_timezone=long)])
51 AC_DEFINE_UNQUOTED(TYPE_TIMEZONE, $fptools_cv_type_timezone)
52 ])
53
54 dnl *** Is altzone available? ***
55 dnl 
56 AC_DEFUN(FPTOOLS_ALTZONE,
57 [AC_CACHE_CHECK([altzone], fptools_cv_altzone,
58 [AC_TRY_LINK([#if TIME_WITH_SYS_TIME
59 # include <sys/time.h>
60 # include <time.h>
61 #else
62 # if HAVE_SYS_TIME_H
63 #  include <sys/time.h>
64 # else
65 #  include <time.h>
66 # endif
67 #endif
68 ], [return altzone;], 
69 fptools_cv_altzone=yes, fptools_cv_altzone=no)])
70 if test "$fptools_cv_altzone" = yes; then
71   AC_DEFINE(HAVE_ALTZONE)
72 fi
73 ])
74
75
76 dnl *** Does libc contain GNU regex? ***
77 dnl 
78 AC_DEFUN(FPTOOLS_REGEX_IN_LIBC,
79 [AC_CACHE_CHECK([for GNU regex in libc], fptools_cv_have_regex,
80 [AC_TRY_LINK([#if HAVE_UNISTD_H
81 #include <unistd.h>
82 #endif
83 #include <regex.h>
84 ],[ struct re_pattern_buffer patbuf; re_compile_pattern("",0,&patbuf); ],
85 fptools_cv_have_regex=yes, fptools_cv_have_regex=no)])
86 if test "$fptools_cv_have_regex" = yes; then
87         HaveRegex=YES
88 else
89         HaveRegex=NO
90 fi
91 AC_SUBST(HaveRegex)
92 ])
93
94
95 dnl ** check for leading underscores in symbol names
96 dnl 
97 dnl Test for determining whether symbol names have a leading
98 dnl underscore.
99 dnl 
100 dnl We assume that they _haven't_ if anything goes wrong.
101 dnl
102 dnl Some nlist implementations seem to try to be compatible by ignoring
103 dnl a leading underscore sometimes (eg. FreeBSD).  We therefore have
104 dnl to work around this by checking for *no* leading underscore first.
105 dnl Sigh.  --SDM
106 dnl
107 AC_DEFUN(FPTOOLS_UNDERSCORE,
108 [AC_CHECK_LIB(elf, nlist, LIBS="-lelf $LIBS")dnl
109 AC_CACHE_CHECK([leading underscore in symbol names], fptools_cv_lead_uscore,
110
111 dnl
112 dnl Hack!: nlist() under Digital UNIX insist on there being an _,
113 dnl but symbol table listings shows none. What is going on here?!?
114 dnl
115 dnl Another hack: cygwin doesn't come with nlist.h , so we hardwire
116 dnl the underscoredness of that "platform"
117 changequote(<<, >>)dnl
118 <<
119 case $HostPlatform in
120 alpha-dec-osf*) fptools_cv_lead_uscore='no';;
121 *cygwin32) fptools_cv_lead_uscore='yes';;
122 *mingw32) fptools_cv_lead_uscore='yes';;
123 *) >>
124 changequote([, ])dnl
125 AC_TRY_RUN([#ifdef HAVE_NLIST_H
126 #include <nlist.h>
127 changequote(<<, >>)dnl
128 <<
129 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
130 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
131 #endif
132
133 main(argc, argv)
134 int argc;
135 char **argv;
136 {
137 #ifdef HAVE_NLIST_H
138     if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
139         exit(1);
140     if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
141         exit(0);>>
142 changequote([, ])dnl
143 #endif
144     exit(1);
145 }], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO)
146 ;;
147 esac);
148 LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'`
149 AC_SUBST(LeadingUnderscore)
150 case $LeadingUnderscore in
151 YES) AC_DEFINE(LEADING_UNDERSCORE);;
152 esac
153 ])
154
155 dnl
156 dnl Check for Happy and version.  If we're building GHC, then we need
157 dnl at least Happy version 1.6.  If there's no installed Happy, we look
158 dnl for a happy source tree and point the build system at that instead.
159 dnl
160 dnl ToDo: when we reset HappyCmd to the source tree, autoconf doesn't
161 dnl seems to insert it in the cache file.  sigh.
162 dnl
163 AC_DEFUN(FPTOOLS_HAPPY,
164 [AC_PATH_PROG(HappyCmd,happy)
165 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
166 [if test x"$HappyCmd" != x; then
167    fptools_cv_happy_version="`$HappyCmd -v |
168 changequote(, )dnl
169                           grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
170 elif test -d $srcdir/happy; then
171    HappyCmd=$hardtop/happy/src/happy-inplace;
172    fptools_cv_happy_version=`grep '^ProjectVersion[     ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
173    echo -n "using happy from the source tree... ";
174 else
175    fptools_cv_happy_version="";
176 fi;
177 changequote([, ])dnl
178 if expr "$fptools_cv_happy_version" "<" 1.6 > /dev/null 2>&1; then
179    if test -d $srcdir/ghc; then
180      echo
181      echo "Happy version 1.6 or later is required to compile GHC."
182      exit 1;
183    fi
184 fi;
185 ])
186 HappyVersion=$fptools_cv_happy_version;
187 AC_SUBST(HappyVersion)
188 ])
189
190 dnl
191 dnl What's the best way of doing context diffs?
192 dnl
193 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
194 dnl
195 AC_DEFUN(FPTOOLS_PROG_DIFF,
196 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
197 [echo foo > conftest1
198 echo foo > conftest2
199 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
200     fptools_cv_context_diffs='diff -C 1'
201 else
202     if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
203         fptools_cv_context_diffs='diff -c1'
204     else
205         echo "Can't figure out how to do context diffs."
206         echo "Neither \`diff -C 1' nor \`diff -c1' works."
207         exit 1
208     fi
209 fi
210 rm -f conftest1 conftest2
211 ])
212 ContextDiffCmd=$fptools_cv_context_diffs
213 AC_SUBST(ContextDiffCmd)
214 ])
215
216 dnl
217 dnl Finding the Right Yacc
218 dnl
219 AC_DEFUN(FPTOOLS_PROG_YACCY,
220 [AC_PROG_YACC
221 if test "$YACC" = "yacc"; then
222    AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
223    [AC_CHECK_PROG(WhatCmd, what, what, :)
224     $WhatCmd $YACC > conftest.out
225     if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
226         echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
227         if test -f /usr/lang/yacc; then
228            echo "I'm going to use /usr/lang/yacc instead"
229            ac_cv_prog_yacc=/usr/lang/yacc
230         else
231            echo "I'm assuming the worst...no parser generator at all"
232            ac_cv_prog_yacc=:
233         fi
234     elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
235         echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
236         echo "I'm assuming the worst...no parser generator at all"
237         ac_cv_prog_yacc=:
238     else
239         ac_cv_prog_yacc=$YACC
240     fi
241     rm -fr conftest*
242 ])
243 else
244     ac_cv_prog_yacc=$YACC
245 fi
246 YaccCmd=$ac_cv_prog_yacc
247 AC_SUBST(YaccCmd)
248 ])
249
250 dnl *** Checking for ar and its arguments + whether we need ranlib.
251 dnl
252 dnl ArCmd and RANLIB are AC_SUBST'ed
253 dnl 
254 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
255 [AC_PATH_PROG(ArCmd,ar)
256 if test -z "$ArCmd"; then
257     echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
258     exit 1;
259 fi
260 if $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
261     ArCmd="$ArCmd clqs"
262     NeedRanLib=''
263 elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
264     ArCmd="$ArCmd cqs"
265     NeedRanLib=''
266 elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
267     ArCmd="$ArCmd clq"
268     NeedRanLib='YES'
269 elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
270     ArCmd="$ArCmd cq"
271     NeedRanLib='YES'
272 elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
273     ArCmd="$ArCmd cq"
274     NeedRanLib='YES'
275 else
276     echo "I can't figure out how to use your $ArCmd"
277     exit 1
278 fi
279 rm -rf conftest*
280 test -n "$ArCmd" && test -n "$verbose" && echo "        setting ArCmd to $ArCmd"
281 AC_SUBST(ArCmd)
282 if test -z "$NeedRanLib"; then
283     RANLIB=':'
284     test -n "$verbose" && echo "        setting RANLIB to $RANLIB"
285     AC_SUBST(RANLIB)
286 else
287     AC_PROG_RANLIB
288 fi
289 ])
290
291 dnl
292 dnl AC_SHEBANG_PERL - can we she-bang perl?
293 dnl
294 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
295 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
296 [echo "#!$PerlCmd"'
297 exit $1;
298 ' > conftest
299 chmod u+x conftest
300 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
301 if test $? -ne 69; then
302    fptools_cv_shebang_perl=yes
303 else
304    fptools_cv_shebang_perl=no
305 fi
306 rm -f conftest
307 ])])
308
309 dnl
310 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
311 dnl *Must* be called after AC_PROG_CC
312 dnl
313 AC_DEFUN(FPTOOLS_HAVE_GCC,
314 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
315 [if test -z "$GCC"; then
316     echo ''
317     echo "You would be better off with gcc"
318     echo "Perhaps it is already installed, but not in your PATH?"
319     fptools_cv_have_gcc='no'
320 else
321 changequote(, )dnl
322     cmd_string="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/expr 20 \\\< \1 \\\* 10 + \2/g' `"
323 changequote([, ])dnl
324     if test `eval $cmd_string 2>/dev/null` != "1"; then
325         echo ''
326         echo "I'm not sure if your version of gcc will work,"
327         echo "but it's worth a shot, eh?"
328     fi
329     fptools_cv_have_gcc='yes'
330 fi
331 ])
332 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
333 AC_SUBST(HaveGcc)
334 ])
335
336 dnl Small feature test for perl version. Assumes PerlCmd
337 dnl contains path to perl binary
338 dnl
339 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
340 [$PerlCmd -v >conftest.out 2>&1
341 if grep "version 5" conftest.out >/dev/null 2>&1; then
342    :
343 else
344    if grep "version 6" conftest.out >/dev/null 2>&1; then
345       :
346    else
347      echo "Your version of perl probably won't work."
348    fi
349 fi
350 rm -fr conftest*
351 ])
352
353 dnl
354 dnl FPTOOLS_GHC_VERSION(version)
355 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
356 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
357 dnl
358 dnl Test for version of installed ghc.  Uses $GHC.
359 dnl [original version pinched from c2hs]
360 dnl
361 AC_DEFUN(FPTOOLS_GHC_VERSION,
362 [define([FPTOOLS_CV_GHC_VERSION], [fptools_cv_ghc_version])dnl
363 AC_CACHE_CHECK([version of ghc], FPTOOLS_CV_GHC_VERSION, [dnl
364 ${GHC-ghc} --version > conftestghc 2>&1
365   cat conftestghc >&AC_FD_CC
366 dnl `Useless Use Of cat' award...
367 changequote(<<, >>)dnl
368   FPTOOLS_CV_GHC_VERSION=`cat conftestghc | sed -n -e 's/, patchlevel *\([0-9]\)/.\1/;s/.* version \([0-9.]\+\).*/\1/p'`
369 changequote([, ])dnl
370   rm -fr conftest*
371   if test "[$]FPTOOLS_CV_GHC_VERSION" = ""
372   then
373     FPTOOLS_CV_GHC_VERSION='unknown'
374   fi])
375 changequote(<<, >>)dnl
376 FPTOOLS_CV_GHC_VERSION<<_major>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -e 's/^\([0-9]\).*/\1/'`
377 FPTOOLS_CV_GHC_VERSION<<_minor>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -e 's/^[0-9]\.\([0-9]*\).*/\1/'`
378 FPTOOLS_CV_GHC_VERSION<<_pl>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -n -e 's/^[0-9]\.[0-9]*\.\([0-9]*\)/\1/p'`
379 changequote([, ])dnl
380 if test "[$]FPTOOLS_CV_GHC_VERSION[_pl]" = ""
381 then
382   FPTOOLS_CV_GHC_VERSION[_all]="[$]FPTOOLS_CV_GHC_VERSION[_major].[$]FPTOOLS_CV_GHC_VERSION[_minor]"
383   FPTOOLS_CV_GHC_VERSION[_pl]="0"
384 else
385   FPTOOLS_CV_GHC_VERSION[_all]="[$]FPTOOLS_CV_GHC_VERSION[_major].[$]FPTOOLS_CV_GHC_VERSION[_minor].[$]FPTOOLS_CV_GHC_VERSION[_pl]"
386 fi
387 ifelse($#, [1], [dnl
388 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_all]"
389 ], $#, [2], [dnl
390 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
391 [$2]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
392 ], $#, [3], [dnl
393 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
394 [$2]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
395 [$3]="[$]FPTOOLS_CV_GHC_VERSION[_pl]"
396 ], $#, [4], [dnl
397 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_all]"
398 [$2]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
399 [$3]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
400 [$4]="[$]FPTOOLS_CV_GHC_VERSION[_pl]"
401 ], [AC_MSG_ERROR([wrong number of arguments to [$0]])])dnl
402 undefine([FPTOOLS_CV_GHC_VERSION])dnl
403 ])dnl
404
405
406 dnl ** figure out the alignment restriction of a type
407 dnl    (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
408 dnl     so we can't call REQUIRE)
409
410 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
411 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
412 [changequote(<<, >>)dnl
413 dnl The name to #define.
414 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
415 dnl The cache variable name.
416 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
417 dnl The name of the corresponding size.
418 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
419 changequote([, ])dnl
420 AC_MSG_CHECKING(alignment of $1)
421 AC_CACHE_VAL(AC_CV_NAME,
422 [AC_TRY_RUN([
423 #include <stdio.h>
424 #if HAVE_STDDEF_H
425 #include <stddef.h>
426 #endif
427 #ifndef offsetof
428 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
429 #endif
430 int
431 main()
432 {
433   FILE *f=fopen("conftestval", "w");
434   if (!f) exit(1);
435   fprintf(f, "%d\n", offsetof(struct { char c; $1 ty;},ty));
436   exit(0);
437 }],
438 AC_CV_NAME=`cat conftestval`,
439 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
440 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
441 AC_MSG_RESULT($AC_CV_NAME)
442 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
443 AC_PROVIDE($AC_TYPE_NAME)
444 undefine([AC_TYPE_NAME])dnl
445 undefine([AC_CV_NAME])dnl
446 undefine([AC_CV_SIZEOF_NAME])dnl
447 ])
448
449 dnl ** Map an arithmetic C type to a Haskell type.
450 dnl    Based on autconf's AC_CHECK_SIZEOF.
451
452 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
453 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
454 [changequote(<<, >>)dnl
455 dnl The name to #define.
456 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
457 dnl The cache variable name.
458 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
459 changequote([, ])dnl
460 AC_MSG_CHECKING(Haskell type for $1)
461 AC_CACHE_VAL(AC_CV_NAME,
462 [AC_TRY_RUN([#include <stdio.h>
463 #include <stddef.h>
464 #ifdef HAVE_SIGNAL_H
465 #include <signal.h>
466 #endif
467 #ifdef HAVE_TIME_H
468 #include <time.h>
469 #endif
470
471 typedef $1 testing;
472
473 main() {
474   FILE *f=fopen("conftestval", "w");
475   if (!f) exit(1);
476   if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
477     fprintf(f, "%s%d\n",
478            ((testing)(-1) < (testing)0) ? "Int" : "Word",
479            sizeof(testing)*8);
480   } else {
481     fprintf(f,"%s\n",
482            (sizeof(testing) >  sizeof(double)) ? "LDouble" :
483            (sizeof(testing) == sizeof(double)) ? "Double"  : "Float");
484   }
485   fclose(f);
486   exit(0);
487 }], AC_CV_NAME=`cat conftestval`,
488 ifelse([$2], , AC_CV_NAME=NotReallyAType,      AC_CV_NAME=$2),
489 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
490 AC_MSG_RESULT($AC_CV_NAME)
491 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
492 undefine([AC_TYPE_NAME])dnl
493 undefine([AC_CV_NAME])dnl
494 ])
495
496 dnl ** figure out whether C compiler supports 'long long's
497 dnl    (Closely based on Andreas Zeller's macro for testing
498 dnl     for this under C++)
499 dnl
500 dnl    If the C compiler supports `long long' types,
501 dnl    define `HAVE_LONG_LONG'.
502 dnl
503 AC_DEFUN(FPTOOLS_C_LONG_LONG,
504 [
505 AC_REQUIRE([AC_PROG_CC])
506 AC_MSG_CHECKING(whether ${CC} supports long long types)
507 AC_CACHE_VAL(fptools_cv_have_long_long,
508 [
509 AC_LANG_SAVE
510 AC_LANG_C
511 AC_TRY_COMPILE(,[long long a;],
512 fptools_cv_have_long_long=yes,
513 fptools_cv_have_long_long=no)
514 AC_LANG_RESTORE
515 ])
516 AC_MSG_RESULT($fptools_cv_have_long_long)
517 if test "$fptools_cv_have_long_long" = yes; then
518 AC_DEFINE(HAVE_LONG_LONG)
519 fi
520 ])
521
522 dnl *** Can we open files in binary mode? ***
523 dnl 
524 AC_DEFUN(FPTOOLS_O_BINARY,
525 [
526 AC_REQUIRE([AC_PROG_CC])
527 AC_MSG_CHECKING(whether we can open files in binary mode)
528 AC_CACHE_VAL(fptools_cv_have_o_binary,
529 [
530 AC_LANG_SAVE
531 AC_LANG_C
532 AC_TRY_COMPILE(,
533 [#ifdef HAVE_FCNTL_H
534 #include <fcntl.h>
535 #endif
536 int x = O_BINARY;],
537 fptools_cv_have_o_binary=yes,
538 fptools_cv_have_o_binary=no)
539 AC_LANG_RESTORE
540 ])
541 AC_MSG_RESULT($fptools_cv_have_o_binary)
542 if test "$fptools_cv_have_o_binary" = yes; then
543 AC_DEFINE(HAVE_O_BINARY)
544 fi
545 ])
546
547 dnl *** Which one comes first, .text or .data? ***
548 dnl 
549 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
550 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
551 [AC_TRY_RUN([
552 int f() { return 1; }
553 int i;
554 int main() { return ((char*)&f > (char*)&i); }
555
556 ],
557 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
558 if test "$fptools_cv_code_bef_data" = yes; then
559   AC_DEFINE(CODE_BEFORE_DATA)
560 fi
561 ])
562
563 dnl *** Helper function **
564 dnl 
565 AC_DEFUN(FPTOOLS_IN_SCOPE,AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no))
566
567 dnl *** What's the end-of-text-section marker called? ***
568 dnl
569 AC_DEFUN(FPTOOLS_END_TEXT_SECTION,
570 [AC_MSG_CHECKING([for end of text section marker])
571 not_done=1
572 for i in data_start _data_start etext _etext __etext; do
573   FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
574   if test "$fptools_end_of_text" = yes; then
575    AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, $i))
576    AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, $i))
577    not_done=0
578    break
579   fi
580 done
581 if test "$not_done" = 1; then
582 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text);
583 if test "$fptools_end_of_text" = yes; then
584   AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, etext))
585   AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, etext asm("etext")))
586 else
587   AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, dunno_what_it_is)
588   AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, dunno_what_it_is)
589 fi
590 fi
591 AC_MSG_RESULT([$]fptools_cv_end_of_text)
592 ])
593
594 dnl *** What's the end-of-data-section marker called? ***
595 dnl
596 AC_DEFUN(FPTOOLS_END_DATA_SECTION,
597 [AC_MSG_CHECKING([for end of data section marker])
598 not_done=1
599 for i in end _end __end; do
600   FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
601   if test "$fptools_end_of_data" = yes; then
602    AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, $i)])
603    AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, $i)])
604    not_done=0
605    break
606   fi
607 done
608 if test "$not_done" = 1; then
609 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data);
610 if test "$fptools_end_of_data" = yes; then
611   AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, end asm("end"))])
612   AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, end)])
613 else
614   AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, dunno_what_it_is)])
615   AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, dunno_what_it_is)])
616 fi
617 fi
618 AC_MSG_RESULT([$]fptools_cv_end_of_data)
619 ])
620
621
622
623 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
624
625 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
626
627 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
628 [
629 ac_save_LIBS="$LIBS"
630 LIBS=[$1];
631 cat > conftest.$ac_ext <<EOF
632 dnl This sometimes fails to find confdefs.h, for some reason.
633 dnl [#]line __oline__ "[$]0"
634 [#]line __oline__ "configure"
635 #include "confdefs.h"
636 [$2]
637 int t() { return 0; }
638 EOF
639 if AC_TRY_EVAL(ac_link); then
640   ifelse([$3], , :, [
641     LIBS="$ac_save_LIBS"
642     rm -rf conftest*
643     $3])
644   ifelse([$4], , , [else
645     LIBS="$ac_save_LIBS"
646     rm -rf conftest*
647     $4
648 ])dnl
649 fi
650 rm -f conftest*
651 ]
652 )
653
654 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
655
656 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
657
658 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
659 [AC_MSG_CHECKING([for $1])
660  AC_CACHE_VAL(ac_cv_flag_$1,
661    [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
662      eval "ac_cv_flag_$1=yes",
663      eval "ac_cv_flag_$1=no"
664    )]
665  )
666 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
667   AC_MSG_RESULT(yes)
668   LIBS="$2 $LIBS"
669   $4
670 else
671   AC_MSG_RESULT(no)
672   $5
673 fi
674 ])
675
676 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
677
678 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
679 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
680 [changequote(, )dnl
681   ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
682  changequote([, ])dnl
683  AC_DEFINE_UNQUOTED($ac_tr_lib)
684 ],
685 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
686 [changequote(, )dnl
687   ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
688  changequote([, ])dnl
689  AC_DEFINE_UNQUOTED($ac_tr_lib)
690 ],
691 []
692 )])]
693 )
694
695 dnl check for prototypes
696 dnl
697 AC_DEFUN(AC_C_PROTOTYPES,
698 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
699 [AC_TRY_COMPILE([
700 void foo(int);
701 void foo(i)
702 int i; { 
703 return;
704 }
705 ],
706 [int i;], 
707 ac_cv_prototypes=yes,
708 ac_cv_prototypes=no)])
709 if test "$ac_cv_prototypes" = yes; then
710 AC_DEFINE(HAVE_PROTOTYPES)
711 fi
712 ])
713
714 dnl ** Check which CATALOG file we have to use with DocBook SGML.
715 dnl
716 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
717 dnl
718 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
719 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
720 dnl is set to "no".  JADE is the jade executable and STYLESHEET
721 dnl a DocBook style sheet.
722 dnl
723 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
724 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
725 [
726 cat > conftest.sgml << EOF
727 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
728 <Article>
729 <ArtHeader>
730 <Title>Test</Title>
731 <Author><OtherName>Test</OtherName></Author>
732 <Address>Test</Address>
733 <PubDate>Test</PubDate>
734 </ArtHeader>
735 <Sect1><Title>Test</Title>
736 <Para>
737 Test.
738 </Para>
739 </Sect1>
740 </Article>
741 EOF
742 fptools_cv_sgml_catalog=no
743 for fptools_catalog in $4; do
744   ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
745   if AC_TRY_EVAL(ac_try); then
746     fptools_cv_sgml_catalog=[$]fptools_catalog
747     break
748   fi
749 done
750 ])
751 rm -rf conftest*
752 if test $fptools_cv_sgml_catalog != "no"; then
753   $1=$fptools_cv_sgml_catalog
754 fi
755 ])
756
757
758 # LocalWords:  fi