[project @ 2000-07-11 21:25:37 by michaelw]
[ghc-hetmet.git] / aclocal.m4
1 dnl $Id: aclocal.m4,v 1.54 2000/07/11 21:25:37 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
355 dnl FPTOOLS_GHC_VERSION(version)
356 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
357 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
358 dnl
359 dnl Test for version of installed ghc.  Uses $GHC.
360 dnl [original version pinched from c2hs]
361 dnl
362 AC_DEFUN(FPTOOLS_GHC_VERSION,
363 [define([FPTOOLS_CV_GHC_VERSION], [fptools_cv_ghc_version])dnl
364 AC_CACHE_CHECK([version of ghc], FPTOOLS_CV_GHC_VERSION, [dnl
365 ${GHC-ghc} --version > conftestghc 2>&1
366   cat conftestghc >&AC_FD_CC
367 dnl `Useless Use Of cat' award...
368 changequote(<<, >>)dnl
369   FPTOOLS_CV_GHC_VERSION=`cat conftestghc | sed -n -e 's/.* version \([0-9.]\+\(, patchlevel [0-9]\+\)\?\)/\1/;t PL;b;:PL s/, patchlevel */./;p'`
370 changequote([, ])dnl
371   rm -fr conftest*
372   if test "[$]FPTOOLS_CV_GHC_VERSION" = ""
373   then
374     FPTOOLS_CV_GHC_VERSION='unknown'
375   fi])
376 changequote(<<, >>)dnl
377 FPTOOLS_CV_GHC_VERSION<<_major>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -e 's/^\([0-9]\).*/\1/'`
378 FPTOOLS_CV_GHC_VERSION<<_minor>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -e 's/^[0-9]\.\([0-9]*\).*/\1/'`
379 FPTOOLS_CV_GHC_VERSION<<_pl>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -n -e 's/^[0-9]\.[0-9]*\.\([0-9]*\)/\1/p'`
380 changequote([, ])dnl
381 if test "[$]FPTOOLS_CV_GHC_VERSION[_pl]" = ""
382 then
383   FPTOOLS_CV_GHC_VERSION[_all]="[$]FPTOOLS_CV_GHC_VERSION[_major].[$]FPTOOLS_CV_GHC_VERSION[_minor]"
384   FPTOOLS_CV_GHC_VERSION[_pl]="0"
385 else
386   FPTOOLS_CV_GHC_VERSION[_all]="[$]FPTOOLS_CV_GHC_VERSION[_major].[$]FPTOOLS_CV_GHC_VERSION[_minor].[$]FPTOOLS_CV_GHC_VERSION[_pl]"
387 fi
388 ifelse($#, [1], [dnl
389 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_all]"
390 ], $#, [2], [dnl
391 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
392 [$2]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
393 ], $#, [3], [dnl
394 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
395 [$2]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
396 [$3]="[$]FPTOOLS_CV_GHC_VERSION[_pl]"
397 ], $#, [4], [dnl
398 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_all]"
399 [$2]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
400 [$3]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
401 [$4]="[$]FPTOOLS_CV_GHC_VERSION[_pl]"
402 ], [AC_MSG_ERROR([wrong number of arguments to $0])])dnl
403 undefine(FPTOOLS_CV_GHC_VERSION)dnl
404 ])dnl
405
406
407 dnl ** figure out the alignment restriction of a type
408 dnl    (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
409 dnl     so we can't call REQUIRE)
410
411 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
412 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
413 [changequote(<<, >>)dnl
414 dnl The name to #define.
415 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
416 dnl The cache variable name.
417 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
418 dnl The name of the corresponding size.
419 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
420 changequote([, ])dnl
421 AC_MSG_CHECKING(alignment of $1)
422 AC_CACHE_VAL(AC_CV_NAME,
423 [AC_TRY_RUN([
424 #include <stdio.h>
425 #if HAVE_STDDEF_H
426 #include <stddef.h>
427 #endif
428 #ifndef offsetof
429 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
430 #endif
431 int
432 main()
433 {
434   FILE *f=fopen("conftestval", "w");
435   if (!f) exit(1);
436   fprintf(f, "%d\n", offsetof(struct { char c; $1 ty;},ty));
437   exit(0);
438 }],
439 AC_CV_NAME=`cat conftestval`,
440 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
441 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
442 AC_MSG_RESULT($AC_CV_NAME)
443 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
444 AC_PROVIDE($AC_TYPE_NAME)
445 undefine([AC_TYPE_NAME])dnl
446 undefine([AC_CV_NAME])dnl
447 undefine([AC_CV_SIZEOF_NAME])dnl
448 ])
449
450 dnl ** Map an arithmetic C type to a Haskell type.
451 dnl    Based on autconf's AC_CHECK_SIZEOF.
452
453 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
454 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
455 [changequote(<<, >>)dnl
456 dnl The name to #define.
457 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
458 dnl The cache variable name.
459 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
460 changequote([, ])dnl
461 AC_MSG_CHECKING(Haskell type for $1)
462 AC_CACHE_VAL(AC_CV_NAME,
463 [AC_TRY_RUN([#include <stdio.h>
464 #include <stddef.h>
465 #ifdef HAVE_SIGNAL_H
466 #include <signal.h>
467 #endif
468 #ifdef HAVE_TIME_H
469 #include <time.h>
470 #endif
471
472 typedef $1 testing;
473
474 main() {
475   FILE *f=fopen("conftestval", "w");
476   if (!f) exit(1);
477   if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
478     fprintf(f, "%s%d\n",
479            ((testing)(-1) < (testing)0) ? "Int" : "Word",
480            sizeof(testing)*8);
481   } else {
482     fprintf(f,"%s\n",
483            (sizeof(testing) >  sizeof(double)) ? "LDouble" :
484            (sizeof(testing) == sizeof(double)) ? "Double"  : "Float");
485   }
486   fclose(f);
487   exit(0);
488 }], AC_CV_NAME=`cat conftestval`,
489 ifelse([$2], , AC_CV_NAME=NotReallyAType,      AC_CV_NAME=$2),
490 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
491 AC_MSG_RESULT($AC_CV_NAME)
492 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
493 undefine([AC_TYPE_NAME])dnl
494 undefine([AC_CV_NAME])dnl
495 ])
496
497 dnl ** figure out whether C compiler supports 'long long's
498 dnl    (Closely based on Andreas Zeller's macro for testing
499 dnl     for this under C++)
500 dnl
501 dnl    If the C compiler supports `long long' types,
502 dnl    define `HAVE_LONG_LONG'.
503 dnl
504 AC_DEFUN(FPTOOLS_C_LONG_LONG,
505 [
506 AC_REQUIRE([AC_PROG_CC])
507 AC_MSG_CHECKING(whether ${CC} supports long long types)
508 AC_CACHE_VAL(fptools_cv_have_long_long,
509 [
510 AC_LANG_SAVE
511 AC_LANG_C
512 AC_TRY_COMPILE(,[long long a;],
513 fptools_cv_have_long_long=yes,
514 fptools_cv_have_long_long=no)
515 AC_LANG_RESTORE
516 ])
517 AC_MSG_RESULT($fptools_cv_have_long_long)
518 if test "$fptools_cv_have_long_long" = yes; then
519 AC_DEFINE(HAVE_LONG_LONG)
520 fi
521 ])
522
523 dnl *** Can we open files in binary mode? ***
524 dnl 
525 AC_DEFUN(FPTOOLS_O_BINARY,
526 [
527 AC_REQUIRE([AC_PROG_CC])
528 AC_MSG_CHECKING(whether we can open files in binary mode)
529 AC_CACHE_VAL(fptools_cv_have_o_binary,
530 [
531 AC_LANG_SAVE
532 AC_LANG_C
533 AC_TRY_COMPILE(,
534 [#ifdef HAVE_FCNTL_H
535 #include <fcntl.h>
536 #endif
537 int x = O_BINARY;],
538 fptools_cv_have_o_binary=yes,
539 fptools_cv_have_o_binary=no)
540 AC_LANG_RESTORE
541 ])
542 AC_MSG_RESULT($fptools_cv_have_o_binary)
543 if test "$fptools_cv_have_o_binary" = yes; then
544 AC_DEFINE(HAVE_O_BINARY)
545 fi
546 ])
547
548 dnl *** Which one comes first, .text or .data? ***
549 dnl 
550 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
551 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
552 [AC_TRY_RUN([
553 int f() { return 1; }
554 int i;
555 int main() { return ((char*)&f > (char*)&i); }
556
557 ],
558 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
559 if test "$fptools_cv_code_bef_data" = yes; then
560   AC_DEFINE(CODE_BEFORE_DATA)
561 fi
562 ])
563
564 dnl *** Helper function **
565 dnl 
566 AC_DEFUN(FPTOOLS_IN_SCOPE,AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no))
567
568 dnl *** What's the end-of-text-section marker called? ***
569 dnl
570 AC_DEFUN(FPTOOLS_END_TEXT_SECTION,
571 [AC_MSG_CHECKING([for end of text section marker])
572 not_done=1
573 for i in data_start _data_start etext _etext __etext; do
574   FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
575   if test "$fptools_end_of_text" = yes; then
576    AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, $i))
577    AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, $i))
578    not_done=0
579    break
580   fi
581 done
582 if test "$not_done" = 1; then
583 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text);
584 if test "$fptools_end_of_text" = yes; then
585   AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, etext))
586   AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, etext asm("etext")))
587 else
588   AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, dunno_what_it_is)
589   AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, dunno_what_it_is)
590 fi
591 fi
592 AC_MSG_RESULT([$]fptools_cv_end_of_text)
593 ])
594
595 dnl *** What's the end-of-data-section marker called? ***
596 dnl
597 AC_DEFUN(FPTOOLS_END_DATA_SECTION,
598 [AC_MSG_CHECKING([for end of data section marker])
599 not_done=1
600 for i in end _end __end; do
601   FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
602   if test "$fptools_end_of_data" = yes; then
603    AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, $i)])
604    AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, $i)])
605    not_done=0
606    break
607   fi
608 done
609 if test "$not_done" = 1; then
610 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data);
611 if test "$fptools_end_of_data" = yes; then
612   AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, end asm("end"))])
613   AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, end)])
614 else
615   AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, dunno_what_it_is)])
616   AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, dunno_what_it_is)])
617 fi
618 fi
619 AC_MSG_RESULT([$]fptools_cv_end_of_data)
620 ])
621
622
623
624 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
625
626 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
627
628 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
629 [
630 ac_save_LIBS="$LIBS"
631 LIBS=[$1];
632 cat > conftest.$ac_ext <<EOF
633 dnl This sometimes fails to find confdefs.h, for some reason.
634 dnl [#]line __oline__ "[$]0"
635 [#]line __oline__ "configure"
636 #include "confdefs.h"
637 [$2]
638 int t() { return 0; }
639 EOF
640 if AC_TRY_EVAL(ac_link); then
641   ifelse([$3], , :, [
642     LIBS="$ac_save_LIBS"
643     rm -rf conftest*
644     $3])
645   ifelse([$4], , , [else
646     LIBS="$ac_save_LIBS"
647     rm -rf conftest*
648     $4
649 ])dnl
650 fi
651 rm -f conftest*
652 ]
653 )
654
655 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
656
657 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
658
659 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
660 [AC_MSG_CHECKING([for $1])
661  AC_CACHE_VAL(ac_cv_flag_$1,
662    [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
663      eval "ac_cv_flag_$1=yes",
664      eval "ac_cv_flag_$1=no"
665    )]
666  )
667 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
668   AC_MSG_RESULT(yes)
669   LIBS="$2 $LIBS"
670   $4
671 else
672   AC_MSG_RESULT(no)
673   $5
674 fi
675 ])
676
677 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
678
679 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
680 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
681 [changequote(, )dnl
682   ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
683  changequote([, ])dnl
684  AC_DEFINE_UNQUOTED($ac_tr_lib)
685 ],
686 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
687 [changequote(, )dnl
688   ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
689  changequote([, ])dnl
690  AC_DEFINE_UNQUOTED($ac_tr_lib)
691 ],
692 []
693 )])]
694 )
695
696 dnl check for prototypes
697 dnl
698 AC_DEFUN(AC_C_PROTOTYPES,
699 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
700 [AC_TRY_COMPILE([
701 void foo(int);
702 void foo(i)
703 int i; { 
704 return;
705 }
706 ],
707 [int i;], 
708 ac_cv_prototypes=yes,
709 ac_cv_prototypes=no)])
710 if test "$ac_cv_prototypes" = yes; then
711 AC_DEFINE(HAVE_PROTOTYPES)
712 fi
713 ])
714
715 dnl ** Check which CATALOG file we have to use with DocBook SGML.
716 dnl
717 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
718 dnl
719 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
720 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
721 dnl is set to "no".  JADE is the jade executable and STYLESHEET
722 dnl a DocBook style sheet.
723 dnl
724 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
725 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
726 [
727 cat > conftest.sgml << EOF
728 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
729 <Article>
730 <ArtHeader>
731 <Title>Test</Title>
732 <Author><OtherName>Test</OtherName></Author>
733 <Address>Test</Address>
734 <PubDate>Test</PubDate>
735 </ArtHeader>
736 <Sect1><Title>Test</Title>
737 <Para>
738 Test.
739 </Para>
740 </Sect1>
741 </Article>
742 EOF
743 fptools_cv_sgml_catalog=no
744 for fptools_catalog in $4; do
745   ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
746   if AC_TRY_EVAL(ac_try); then
747     fptools_cv_sgml_catalog=[$]fptools_catalog
748     break
749   fi
750 done
751 ])
752 rm -rf conftest*
753 if test $fptools_cv_sgml_catalog != "no"; then
754   $1=$fptools_cv_sgml_catalog
755 fi
756 ])
757
758
759 # LocalWords:  fi