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