[project @ 2000-11-07 10:20:03 by simonmar]
[ghc-hetmet.git] / aclocal.m4
1 dnl $Id: aclocal.m4,v 1.59 2000/11/07 10:20:03 simonmar 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 "v5.6" conftest.out >/dev/null 2>&1; then
345      :
346   else
347      if grep "version 6" conftest.out >/dev/null 2>&1; then
348         :
349      else
350        echo "Your version of perl probably won't work."
351      fi
352   fi
353 fi
354 rm -fr conftest*
355 ])
356
357 dnl
358 dnl FPTOOLS_GHC_VERSION(version)
359 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
360 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
361 dnl
362 dnl Test for version of installed ghc.  Uses $GHC.
363 dnl [original version pinched from c2hs]
364 dnl
365 AC_DEFUN(FPTOOLS_GHC_VERSION,
366 [define([FPTOOLS_CV_GHC_VERSION], [fptools_cv_ghc_version])dnl
367 AC_CACHE_CHECK([version of ghc], FPTOOLS_CV_GHC_VERSION, [dnl
368 ${WithGhc-ghc} --version > conftestghc 2>&1
369   cat conftestghc >&AC_FD_CC
370 dnl `Useless Use Of cat' award...
371 changequote(<<, >>)dnl
372   FPTOOLS_CV_GHC_VERSION=`cat conftestghc | sed -n -e 's/, patchlevel *\([0-9]\)/.\1/;s/.* version \([0-9.]\+\).*/\1/p'`
373 changequote([, ])dnl
374   rm -fr conftest*
375   if test "[$]FPTOOLS_CV_GHC_VERSION" = ""
376   then
377     FPTOOLS_CV_GHC_VERSION='unknown'
378   fi])
379 changequote(<<, >>)dnl
380 FPTOOLS_CV_GHC_VERSION<<_major>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -e 's/^\([0-9]\).*/\1/'`
381 FPTOOLS_CV_GHC_VERSION<<_minor>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -e 's/^[0-9]\.\([0-9]*\).*/\1/'`
382 FPTOOLS_CV_GHC_VERSION<<_pl>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -n -e 's/^[0-9]\.[0-9]*\.\([0-9]*\)/\1/p'`
383 changequote([, ])dnl
384 if test "[$]FPTOOLS_CV_GHC_VERSION[_pl]" = ""
385 then
386   FPTOOLS_CV_GHC_VERSION[_all]="[$]FPTOOLS_CV_GHC_VERSION[_major].[$]FPTOOLS_CV_GHC_VERSION[_minor]"
387   FPTOOLS_CV_GHC_VERSION[_pl]="0"
388 else
389   FPTOOLS_CV_GHC_VERSION[_all]="[$]FPTOOLS_CV_GHC_VERSION[_major].[$]FPTOOLS_CV_GHC_VERSION[_minor].[$]FPTOOLS_CV_GHC_VERSION[_pl]"
390 fi
391 ifelse($#, [1], [dnl
392 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_all]"
393 ], $#, [2], [dnl
394 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
395 [$2]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
396 ], $#, [3], [dnl
397 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
398 [$2]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
399 [$3]="[$]FPTOOLS_CV_GHC_VERSION[_pl]"
400 ], $#, [4], [dnl
401 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_all]"
402 [$2]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
403 [$3]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
404 [$4]="[$]FPTOOLS_CV_GHC_VERSION[_pl]"
405 ], [AC_MSG_ERROR([wrong number of arguments to [$0]])])dnl
406 undefine([FPTOOLS_CV_GHC_VERSION])dnl
407 ])dnl
408
409
410 dnl ** figure out the alignment restriction of a type
411 dnl    (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
412 dnl     so we can't call REQUIRE)
413
414 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
415 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
416 [changequote(<<, >>)dnl
417 dnl The name to #define.
418 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
419 dnl The cache variable name.
420 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
421 dnl The name of the corresponding size.
422 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
423 changequote([, ])dnl
424 AC_MSG_CHECKING(alignment of $1)
425 AC_CACHE_VAL(AC_CV_NAME,
426 [AC_TRY_RUN([
427 #include <stdio.h>
428 #if HAVE_STDDEF_H
429 #include <stddef.h>
430 #endif
431 #ifndef offsetof
432 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
433 #endif
434 int
435 main()
436 {
437   FILE *f=fopen("conftestval", "w");
438   if (!f) exit(1);
439   fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
440   exit(0);
441 }],
442 AC_CV_NAME=`cat conftestval`,
443 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
444 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
445 AC_MSG_RESULT($AC_CV_NAME)
446 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
447 AC_PROVIDE($AC_TYPE_NAME)
448 undefine([AC_TYPE_NAME])dnl
449 undefine([AC_CV_NAME])dnl
450 undefine([AC_CV_SIZEOF_NAME])dnl
451 ])
452
453 dnl ** Map an arithmetic C type to a Haskell type.
454 dnl    Based on autconf's AC_CHECK_SIZEOF.
455
456 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
457 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
458 [changequote(<<, >>)dnl
459 dnl The name to #define.
460 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
461 dnl The cache variable name.
462 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
463 changequote([, ])dnl
464 AC_MSG_CHECKING(Haskell type for $1)
465 AC_CACHE_VAL(AC_CV_NAME,
466 [AC_TRY_RUN([#include <stdio.h>
467 #include <stddef.h>
468 #ifdef HAVE_SIGNAL_H
469 #include <signal.h>
470 #endif
471 #ifdef HAVE_TIME_H
472 #include <time.h>
473 #endif
474 #ifdef HAVE_GL_GL_H
475 #include <GL/gl.h>
476 #endif
477
478 typedef $1 testing;
479
480 main() {
481   FILE *f=fopen("conftestval", "w");
482   if (!f) exit(1);
483   if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
484     fprintf(f, "%s%d\n",
485            ((testing)(-1) < (testing)0) ? "Int" : "Word",
486            sizeof(testing)*8);
487   } else {
488     fprintf(f,"%s\n",
489            (sizeof(testing) >  sizeof(double)) ? "LDouble" :
490            (sizeof(testing) == sizeof(double)) ? "Double"  : "Float");
491   }
492   fclose(f);
493   exit(0);
494 }], AC_CV_NAME=`cat conftestval`,
495 ifelse([$2], , AC_CV_NAME=NotReallyAType,      AC_CV_NAME=$2),
496 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
497 AC_MSG_RESULT($AC_CV_NAME)
498 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
499 undefine([AC_TYPE_NAME])dnl
500 undefine([AC_CV_NAME])dnl
501 ])
502
503 dnl ** figure out whether C compiler supports 'long long's
504 dnl    (Closely based on Andreas Zeller's macro for testing
505 dnl     for this under C++)
506 dnl
507 dnl    If the C compiler supports `long long' types,
508 dnl    define `HAVE_LONG_LONG'.
509 dnl
510 AC_DEFUN(FPTOOLS_C_LONG_LONG,
511 [
512 AC_REQUIRE([AC_PROG_CC])
513 AC_MSG_CHECKING(whether ${CC} supports long long types)
514 AC_CACHE_VAL(fptools_cv_have_long_long,
515 [
516 AC_LANG_SAVE
517 AC_LANG_C
518 AC_TRY_COMPILE(,[long long a;],
519 fptools_cv_have_long_long=yes,
520 fptools_cv_have_long_long=no)
521 AC_LANG_RESTORE
522 ])
523 AC_MSG_RESULT($fptools_cv_have_long_long)
524 if test "$fptools_cv_have_long_long" = yes; then
525 AC_DEFINE(HAVE_LONG_LONG)
526 fi
527 ])
528
529 dnl *** Can we open files in binary mode? ***
530 dnl 
531 AC_DEFUN(FPTOOLS_O_BINARY,
532 [
533 AC_REQUIRE([AC_PROG_CC])
534 AC_MSG_CHECKING(whether we can open files in binary mode)
535 AC_CACHE_VAL(fptools_cv_have_o_binary,
536 [
537 AC_LANG_SAVE
538 AC_LANG_C
539 AC_TRY_COMPILE(,
540 [#ifdef HAVE_FCNTL_H
541 #include <fcntl.h>
542 #endif
543 int x = O_BINARY;],
544 fptools_cv_have_o_binary=yes,
545 fptools_cv_have_o_binary=no)
546 AC_LANG_RESTORE
547 ])
548 AC_MSG_RESULT($fptools_cv_have_o_binary)
549 if test "$fptools_cv_have_o_binary" = yes; then
550 AC_DEFINE(HAVE_O_BINARY)
551 fi
552 ])
553
554 dnl *** Which one comes first, .text or .data? ***
555 dnl 
556 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
557 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
558 [AC_TRY_RUN([
559 int f() { return 1; }
560 int i;
561 int main() { return ((char*)&f > (char*)&i); }
562
563 ],
564 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
565 if test "$fptools_cv_code_bef_data" = yes; then
566   AC_DEFINE(CODE_BEFORE_DATA)
567 fi
568 ])
569
570 dnl *** Helper function **
571 dnl 
572 AC_DEFUN(FPTOOLS_IN_SCOPE,AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no))
573
574 dnl *** What's the end-of-text-section marker called? ***
575 dnl
576 AC_DEFUN(FPTOOLS_END_TEXT_SECTION,
577 [AC_MSG_CHECKING([for end of text section marker])
578 not_done=1
579 for i in data_start _data_start etext _etext __etext; do
580   FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
581   if test "$fptools_end_of_text" = yes; then
582    AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, $i))
583    AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, $i))
584    not_done=0
585    break
586   fi
587 done
588 if test "$not_done" = 1; then
589 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text);
590 if test "$fptools_end_of_text" = yes; then
591   AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, etext))
592   AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, etext asm("etext")))
593 else
594   AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, dunno_what_it_is)
595   AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, dunno_what_it_is)
596 fi
597 fi
598 AC_MSG_RESULT([$]fptools_cv_end_of_text)
599 ])
600
601 dnl *** What's the end-of-data-section marker called? ***
602 dnl
603 AC_DEFUN(FPTOOLS_END_DATA_SECTION,
604 [AC_MSG_CHECKING([for end of data section marker])
605 not_done=1
606 for i in end _end __end; do
607   FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
608   if test "$fptools_end_of_data" = yes; then
609    AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, $i)])
610    AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, $i)])
611    not_done=0
612    break
613   fi
614 done
615 if test "$not_done" = 1; then
616 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data);
617 if test "$fptools_end_of_data" = yes; then
618   AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, end asm("end"))])
619   AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, end)])
620 else
621   AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, dunno_what_it_is)])
622   AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, dunno_what_it_is)])
623 fi
624 fi
625 AC_MSG_RESULT([$]fptools_cv_end_of_data)
626 ])
627
628
629
630 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
631
632 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
633
634 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
635 [
636 ac_save_LIBS="$LIBS"
637 LIBS=[$1];
638 cat > conftest.$ac_ext <<EOF
639 dnl This sometimes fails to find confdefs.h, for some reason.
640 dnl [#]line __oline__ "[$]0"
641 [#]line __oline__ "configure"
642 #include "confdefs.h"
643 [$2]
644 int t() { return 0; }
645 EOF
646 if AC_TRY_EVAL(ac_link); then
647   ifelse([$3], , :, [
648     LIBS="$ac_save_LIBS"
649     rm -rf conftest*
650     $3])
651   ifelse([$4], , , [else
652     LIBS="$ac_save_LIBS"
653     rm -rf conftest*
654     $4
655 ])dnl
656 fi
657 rm -f conftest*
658 ]
659 )
660
661 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
662
663 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
664
665 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
666 [AC_MSG_CHECKING([for $1])
667  AC_CACHE_VAL(ac_cv_flag_$1,
668    [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
669      eval "ac_cv_flag_$1=yes",
670      eval "ac_cv_flag_$1=no"
671    )]
672  )
673 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
674   AC_MSG_RESULT(yes)
675   LIBS="$2 $LIBS"
676   $4
677 else
678   AC_MSG_RESULT(no)
679   $5
680 fi
681 ])
682
683 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
684
685 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
686 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[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 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
693 [changequote(, )dnl
694   ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
695  changequote([, ])dnl
696  AC_DEFINE_UNQUOTED($ac_tr_lib)
697 ],
698 []
699 )])]
700 )
701
702 dnl check for prototypes
703 dnl
704 AC_DEFUN(AC_C_PROTOTYPES,
705 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
706 [AC_TRY_COMPILE([
707 void foo(int);
708 void foo(i)
709 int i; { 
710 return;
711 }
712 ],
713 [int i;], 
714 ac_cv_prototypes=yes,
715 ac_cv_prototypes=no)])
716 if test "$ac_cv_prototypes" = yes; then
717 AC_DEFINE(HAVE_PROTOTYPES)
718 fi
719 ])
720
721 dnl ** Check which CATALOG file we have to use with DocBook SGML.
722 dnl
723 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
724 dnl
725 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
726 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
727 dnl is set to "no".  JADE is the jade executable and STYLESHEET
728 dnl a DocBook style sheet.
729 dnl
730 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
731 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
732 [
733 cat > conftest.sgml << EOF
734 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
735 <Article>
736 <ArtHeader>
737 <Title>Test</Title>
738 <Author><OtherName>Test</OtherName></Author>
739 <Address>Test</Address>
740 <PubDate>Test</PubDate>
741 </ArtHeader>
742 <Sect1><Title>Test</Title>
743 <Para>
744 Test.
745 </Para>
746 </Sect1>
747 </Article>
748 EOF
749 fptools_cv_sgml_catalog=no
750 for fptools_catalog in $4; do
751   ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
752   if AC_TRY_EVAL(ac_try); then
753     fptools_cv_sgml_catalog=[$]fptools_catalog
754     break
755   fi
756 done
757 ])
758 rm -rf conftest*
759 if test $fptools_cv_sgml_catalog != "no"; then
760   $1=$fptools_cv_sgml_catalog
761 fi
762 ])
763
764 dnl ######################################################################
765 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
766 dnl                     [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
767 dnl Search for a library defining FUNC, if it's not already available.
768 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
769 dnl specified.
770 dnl ######################################################################
771
772 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
773 [AC_PREREQ([2.13])
774 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
775 [ac_func_search_save_LIBS="$LIBS"
776 ac_cv_search_$2="no"
777 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
778 test "$ac_cv_search_$2" = "no" && for i in $3; do
779 LIBS="-l$i $6 $ac_func_search_save_LIBS"
780 AC_TRY_LINK([$1], [$2()],
781 [ac_cv_search_$2="-l$i"
782 break])
783 done
784 LIBS="$ac_func_search_save_LIBS"])
785 if test "$ac_cv_search_$2" != "no"; then
786   test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
787   $4
788 else :
789   $5
790 fi])
791
792 dnl ####################### -*- Mode: M4 -*- ###########################
793 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
794 dnl
795 dnl This file is free software; you can redistribute it and/or modify it
796 dnl under the terms of the GNU General Public License as published by
797 dnl the Free Software Foundation; either version 2 of the License, or
798 dnl (at your option) any later version.
799 dnl
800 dnl This file is distributed in the hope that it will be useful, but
801 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
802 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
803 dnl General Public License for more details.
804 dnl
805 dnl You should have received a copy of the GNU General Public License
806 dnl along with this file; if not, write to:
807 dnl
808 dnl   Free Software Foundation, Inc.
809 dnl   Suite 330
810 dnl   59 Temple Place
811 dnl   Boston, MA 02111-1307, USA.
812 dnl ####################################################################
813
814
815 dnl @synopsis FPTOOLS_CHECK_LIBM
816 dnl 
817 dnl Search for math library (typically -lm).
818 dnl
819 dnl The variable LIBM (which is not an output variable by default) is
820 dnl set to a value which is suitable for use in a Makefile (for example,
821 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
822 dnl
823 dnl @version 0.01 $Id: aclocal.m4,v 1.59 2000/11/07 10:20:03 simonmar Exp $
824 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
825
826 # FPTOOLS_CHECK_LIBM - check for math library
827 AC_DEFUN(FPTOOLS_CHECK_LIBM,
828 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
829 LIBM=
830 case "$host" in
831 *-*-beos* | *-*-cygwin*)
832   # These system don't have libm
833   ;;
834 *-ncr-sysv4.3*)
835   AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
836   AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
837   ;;
838 *)
839   AC_CHECK_LIB(m, main, LIBM="-lm")
840   ;;
841 esac
842 ])
843
844 dnl ######################################################################
845 dnl NOTE: Because of portability issues between different autoconf
846 dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
847 dnl Furthermore, caching has been completely rewritten.
848 dnl ######################################################################
849
850 dnl ########################### -*- Mode: M4 -*- #######################
851 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
852 dnl
853 dnl This file is free software; you can redistribute it and/or modify it
854 dnl under the terms of the GNU General Public License as published by
855 dnl the Free Software Foundation; either version 2 of the License, or
856 dnl (at your option) any later version.
857 dnl
858 dnl This file is distributed in the hope that it will be useful, but
859 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
860 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
861 dnl General Public License for more details.
862 dnl
863 dnl You should have received a copy of the GNU General Public License
864 dnl along with this file; if not, write to:
865 dnl
866 dnl   Free Software Foundation, Inc.
867 dnl   Suite 330
868 dnl   59 Temple Place
869 dnl   Boston, MA 02111-1307, USA.
870 dnl ####################################################################
871
872 dnl @synopsis FPTOOLS_HAVE_OPENGL
873 dnl 
874 dnl Search for OpenGL.  We search first for Mesa (a GPL'ed version of
875 dnl OpenGL) before a vendor's version of OpenGL, unless we were
876 dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
877 dnl
878 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
879 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
880 dnl "-lglut".
881 dnl
882 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
883 dnl be missing) are added to the shell output variable "GL_LIBS", along
884 dnl with any other libraries that are necessary to successfully link an
885 dnl OpenGL application (e.g. the X11 libraries).  Care has been taken to
886 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
887 dnl proper order.
888 dnl
889 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
890 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
891 dnl an OpenGL application.
892 dnl
893 dnl The following shell variable (which are not output variables) are
894 dnl also set to either "yes" or "no" (depending on which libraries were
895 dnl found) to help you determine exactly what was found.
896 dnl
897 dnl   have_GL
898 dnl   have_GLU
899 dnl   have_GLX
900 dnl   have_glut
901 dnl
902 dnl A complete little toy "Automake `make distcheck'" package of how to
903 dnl use this macro is available at:
904 dnl
905 dnl   ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
906 dnl
907 dnl Please note that as the ac_opengl macro and the toy example evolves,
908 dnl the version number increases, so you may have to adjust the above
909 dnl URL accordingly.
910 dnl
911 dnl @version 0.01 $Id: aclocal.m4,v 1.59 2000/11/07 10:20:03 simonmar Exp $
912 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
913
914 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
915 [
916   AC_REQUIRE([AC_PROG_CC])
917   AC_REQUIRE([AC_PATH_X])
918   AC_REQUIRE([AC_PATH_XTRA])
919   AC_REQUIRE([FPTOOLS_CHECK_LIBM])
920
921 dnl Check for Mesa first, unless we were asked not to.
922 dnl    AC_HELP_STRING([--with-Mesa],
923 dnl                   [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
924 dnl                   with_Mesa_help_string)
925 dnl    AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
926   AC_ARG_ENABLE(Mesa, [  --with-Mesa             Prefer the Mesa library over a vendors native OpenGL library (default=yes)], use_Mesa=$enableval, use_Mesa=yes)
927
928   if test x"$use_Mesa" = xyes; then
929      GL_search_list="MesaGL  GL  opengl32"
930     GLU_search_list="MesaGLU GLU glu32"
931     GLX_search_list="MesaGLX GLX"
932   else
933      GL_search_list="GL  opengl32 MesaGL"
934     GLU_search_list="GLU glu32    MesaGLU"
935     GLX_search_list="GLX          MesaGLX"
936   fi      
937
938   AC_LANG_SAVE
939   AC_LANG_C
940
941 dnl If we are running under X11 then add in the appropriate libraries.
942   if ! test x"$no_x" = xyes; then
943 dnl Add everything we need to compile and link X programs to GL_CFLAGS
944 dnl and GL_X_LIBS.
945     GL_CFLAGS="$X_CFLAGS"
946     GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
947   fi
948   GL_save_CPPFLAGS="$CPPFLAGS"
949   CPPFLAGS="$GL_CFLAGS"
950
951   GL_save_LIBS="$LIBS"
952   LIBS="$GL_X_LIBS"
953
954   FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>],   glEnd,           $GL_search_list,  have_GL=yes,   have_GL=no)
955   FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>],  gluNewQuadric,   $GLU_search_list, have_GLU=yes,  have_GLU=no)
956   FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>],  glXChooseVisual, $GLX_search_list, have_GLX=yes,  have_GLX=no)
957   FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop,    glut glut32,      have_glut=yes, have_glut=no)
958
959   if test -n "$LIBS"; then
960     GL_LIBS="$LIBS"
961   else
962     GL_LIBS=
963     GL_CFLAGS=
964   fi
965
966   AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
967   GL_CFLAGS="$mdl_cv_gl_cflags"
968   AC_SUBST(GL_CFLAGS)
969   AC_CACHE_CHECK([OpenGL libs],  mdl_cv_gl_libs,   [mdl_cv_gl_libs="$GL_LIBS"])
970   GL_LIBS="$mdl_cv_gl_libs"
971   AC_SUBST(GL_LIBS)
972
973 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
974 dnl and we don't want to be global namespace polluters.
975   GL_X_LIBS=
976
977   LIBS="$GL_save_LIBS"
978   CPPFLAGS="$GL_save_CPPFLAGS"
979
980   AC_LANG_RESTORE
981 ])
982
983 # LocalWords:  fi