[project @ 2001-02-17 19:52:56 by sebc]
[ghc-hetmet.git] / aclocal.m4
1 dnl $Id: aclocal.m4,v 1.67 2001/02/17 19:52:56 sebc 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.9.  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 ( test `echo "$fptools_cv_happy_version" | sed -e "s/\(.*\)\..*/\1/g"` "-eq" "1" &&
179      test `echo "$fptools_cv_happy_version" | sed -e "s/.*\.\(.*\)/\1/g"` "-lt" "9" ); then
180    if test -d $srcdir/ghc; then
181      echo
182      echo "Happy version 1.9 or later is required to compile GHC."
183      exit 1;
184    fi
185 fi;
186 ])
187 HappyVersion=$fptools_cv_happy_version;
188 AC_SUBST(HappyVersion)
189 ])
190
191 dnl
192 dnl What's the best way of doing context diffs?
193 dnl
194 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
195 dnl
196 AC_DEFUN(FPTOOLS_PROG_DIFF,
197 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
198 [echo foo > conftest1
199 echo foo > conftest2
200 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
201     fptools_cv_context_diffs='diff -C 1'
202 else
203     if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
204         fptools_cv_context_diffs='diff -c1'
205     else
206         echo "Can't figure out how to do context diffs."
207         echo "Neither \`diff -C 1' nor \`diff -c1' works."
208         exit 1
209     fi
210 fi
211 rm -f conftest1 conftest2
212 ])
213 ContextDiffCmd=$fptools_cv_context_diffs
214 AC_SUBST(ContextDiffCmd)
215 ])
216
217 dnl
218 dnl Finding the Right Yacc
219 dnl
220 AC_DEFUN(FPTOOLS_PROG_YACCY,
221 [AC_PROG_YACC
222 if test "$YACC" = "yacc"; then
223    AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
224    [AC_CHECK_PROG(WhatCmd, what, what, :)
225     $WhatCmd $YACC > conftest.out
226     if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
227         echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
228         if test -f /usr/lang/yacc; then
229            echo "I'm going to use /usr/lang/yacc instead"
230            ac_cv_prog_yacc=/usr/lang/yacc
231         else
232            echo "I'm assuming the worst...no parser generator at all"
233            ac_cv_prog_yacc=:
234         fi
235     elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
236         echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
237         echo "I'm assuming the worst...no parser generator at all"
238         ac_cv_prog_yacc=:
239     else
240         ac_cv_prog_yacc=$YACC
241     fi
242     rm -fr conftest*
243 ])
244 else
245     ac_cv_prog_yacc=$YACC
246 fi
247 YaccCmd=$ac_cv_prog_yacc
248 AC_SUBST(YaccCmd)
249 ])
250
251 dnl *** Checking for ar and its arguments + whether we need ranlib.
252 dnl
253 dnl ArCmd and RANLIB are AC_SUBST'ed
254 dnl 
255 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
256 [AC_PATH_PROG(ArCmd,ar)
257 if test -z "$ArCmd"; then
258     echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
259     exit 1;
260 fi
261 if $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
262     ArCmd="$ArCmd clqs"
263     NeedRanLib=''
264 elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
265     ArCmd="$ArCmd cqs"
266     NeedRanLib=''
267 elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
268     ArCmd="$ArCmd clq"
269     NeedRanLib='YES'
270 elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
271     ArCmd="$ArCmd cq"
272     NeedRanLib='YES'
273 elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
274     ArCmd="$ArCmd cq"
275     NeedRanLib='YES'
276 else
277     echo "I can't figure out how to use your $ArCmd"
278     exit 1
279 fi
280 rm -rf conftest*
281 test -n "$ArCmd" && test -n "$verbose" && echo "        setting ArCmd to $ArCmd"
282 AC_SUBST(ArCmd)
283 if test -z "$NeedRanLib"; then
284     RANLIB=':'
285     test -n "$verbose" && echo "        setting RANLIB to $RANLIB"
286     AC_SUBST(RANLIB)
287 else
288     AC_PROG_RANLIB
289 fi
290 ])
291
292 dnl
293 dnl AC_SHEBANG_PERL - can we she-bang perl?
294 dnl
295 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
296 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
297 [echo "#!$PerlCmd"'
298 exit $1;
299 ' > conftest
300 chmod u+x conftest
301 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
302 if test $? -ne 69; then
303    fptools_cv_shebang_perl=yes
304 else
305    fptools_cv_shebang_perl=no
306 fi
307 rm -f conftest
308 ])])
309
310 dnl
311 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
312 dnl *Must* be called after AC_PROG_CC
313 dnl
314 AC_DEFUN(FPTOOLS_HAVE_GCC,
315 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
316 [if test -z "$GCC"; then
317     echo ''
318     echo "You would be better off with gcc"
319     echo "Perhaps it is already installed, but not in your PATH?"
320     fptools_cv_have_gcc='no'
321 else
322 changequote(, )dnl
323     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' `"
324 changequote([, ])dnl
325     if test `eval $cmd_string 2>/dev/null` != "1"; then
326         echo ''
327         echo "I'm not sure if your version of gcc will work,"
328         echo "but it's worth a shot, eh?"
329     fi
330     fptools_cv_have_gcc='yes'
331 fi
332 ])
333 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
334 AC_SUBST(HaveGcc)
335 ])
336
337 dnl Small feature test for perl version. Assumes PerlCmd
338 dnl contains path to perl binary
339 dnl
340 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
341 [$PerlCmd -v >conftest.out 2>&1
342 if grep "version 5" conftest.out >/dev/null 2>&1; then
343    :
344 else
345   if grep "v5.6" conftest.out >/dev/null 2>&1; then
346      :
347   else
348      if grep "version 6" conftest.out >/dev/null 2>&1; then
349         :
350      else
351        echo "Your version of perl probably won't work."
352      fi
353   fi
354 fi
355 rm -fr conftest*
356 ])
357
358 dnl
359 dnl FPTOOLS_GHC_VERSION(version)
360 dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
361 dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
362 dnl
363 dnl Test for version of installed ghc.  Uses $GHC.
364 dnl [original version pinched from c2hs]
365 dnl
366 AC_DEFUN(FPTOOLS_GHC_VERSION,
367 [define([FPTOOLS_CV_GHC_VERSION], [fptools_cv_ghc_version])dnl
368 AC_CACHE_CHECK([version of ghc], FPTOOLS_CV_GHC_VERSION, [dnl
369 ${WithGhc-ghc} --version > conftestghc 2>&1
370   cat conftestghc >&AC_FD_CC
371 dnl `Useless Use Of cat' award...
372 changequote(<<, >>)dnl
373   FPTOOLS_CV_GHC_VERSION=`cat conftestghc | sed -n -e 's/, patchlevel *\([0-9]\)/.\1/;s/.* version \([0-9][0-9.]*\).*/\1/p'`
374 changequote([, ])dnl
375   rm -fr conftest*
376   if test "[$]FPTOOLS_CV_GHC_VERSION" = ""
377   then
378     FPTOOLS_CV_GHC_VERSION='unknown'
379   fi])
380 changequote(<<, >>)dnl
381 FPTOOLS_CV_GHC_VERSION<<_major>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -e 's/^\([0-9]\).*/\1/'`
382 FPTOOLS_CV_GHC_VERSION<<_minor>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -e 's/^[0-9]\.\([0-9]*\).*/\1/'`
383 FPTOOLS_CV_GHC_VERSION<<_pl>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -n -e 's/^[0-9]\.[0-9]*\.\([0-9]*\)/\1/p'`
384 changequote([, ])dnl
385 if test "[$]FPTOOLS_CV_GHC_VERSION[_pl]" = ""
386 then
387   FPTOOLS_CV_GHC_VERSION[_all]="[$]FPTOOLS_CV_GHC_VERSION[_major].[$]FPTOOLS_CV_GHC_VERSION[_minor]"
388   FPTOOLS_CV_GHC_VERSION[_pl]="0"
389 else
390   FPTOOLS_CV_GHC_VERSION[_all]="[$]FPTOOLS_CV_GHC_VERSION[_major].[$]FPTOOLS_CV_GHC_VERSION[_minor].[$]FPTOOLS_CV_GHC_VERSION[_pl]"
391 fi
392 ifelse($#, [1], [dnl
393 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_all]"
394 ], $#, [2], [dnl
395 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
396 [$2]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
397 ], $#, [3], [dnl
398 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
399 [$2]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
400 [$3]="[$]FPTOOLS_CV_GHC_VERSION[_pl]"
401 ], $#, [4], [dnl
402 [$1]="[$]FPTOOLS_CV_GHC_VERSION[_all]"
403 [$2]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
404 [$3]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
405 [$4]="[$]FPTOOLS_CV_GHC_VERSION[_pl]"
406 ], [AC_MSG_ERROR([wrong number of arguments to [$0]])])dnl
407 undefine([FPTOOLS_CV_GHC_VERSION])dnl
408 ])dnl
409
410
411 dnl ** figure out the alignment restriction of a type
412 dnl    (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
413 dnl     so we can't call REQUIRE)
414
415 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
416 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
417 [changequote(<<, >>)dnl
418 dnl The name to #define.
419 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
420 dnl The cache variable name.
421 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
422 dnl The name of the corresponding size.
423 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
424 changequote([, ])dnl
425 AC_MSG_CHECKING(alignment of $1)
426 AC_CACHE_VAL(AC_CV_NAME,
427 [AC_TRY_RUN([
428 #include <stdio.h>
429 #if HAVE_STDDEF_H
430 #include <stddef.h>
431 #endif
432 #ifndef offsetof
433 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
434 #endif
435 int
436 main()
437 {
438   FILE *f=fopen("conftestval", "w");
439   if (!f) exit(1);
440   fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
441   exit(0);
442 }],
443 AC_CV_NAME=`cat conftestval`,
444 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
445 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
446 AC_MSG_RESULT($AC_CV_NAME)
447 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
448 AC_PROVIDE($AC_TYPE_NAME)
449 undefine([AC_TYPE_NAME])dnl
450 undefine([AC_CV_NAME])dnl
451 undefine([AC_CV_SIZEOF_NAME])dnl
452 ])
453
454 dnl ** Map an arithmetic C type to a Haskell type.
455 dnl    Based on autconf's AC_CHECK_SIZEOF.
456
457 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
458 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
459 [changequote(<<, >>)dnl
460 dnl The name to #define.
461 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
462 dnl The cache variable name.
463 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
464 changequote([, ])dnl
465 AC_MSG_CHECKING(Haskell type for $1)
466 AC_CACHE_VAL(AC_CV_NAME,
467 [AC_TRY_RUN([#include <stdio.h>
468 #include <stddef.h>
469 #ifdef HAVE_SIGNAL_H
470 #include <signal.h>
471 #endif
472 #ifdef HAVE_TIME_H
473 #include <time.h>
474 #endif
475 #ifdef HAVE_GL_GL_H
476 #include <GL/gl.h>
477 #endif
478
479 typedef $1 testing;
480
481 main() {
482   FILE *f=fopen("conftestval", "w");
483   if (!f) exit(1);
484   if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
485     fprintf(f, "%s%d\n",
486            ((testing)(-1) < (testing)0) ? "Int" : "Word",
487            sizeof(testing)*8);
488   } else {
489     fprintf(f,"%s\n",
490            (sizeof(testing) >  sizeof(double)) ? "LDouble" :
491            (sizeof(testing) == sizeof(double)) ? "Double"  : "Float");
492   }
493   fclose(f);
494   exit(0);
495 }], AC_CV_NAME=`cat conftestval`,
496 ifelse([$2], , AC_CV_NAME=NotReallyAType,      AC_CV_NAME=$2),
497 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
498 AC_MSG_RESULT($AC_CV_NAME)
499 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
500 undefine([AC_TYPE_NAME])dnl
501 undefine([AC_CV_NAME])dnl
502 ])
503
504 dnl ** figure out whether C compiler supports 'long long's
505 dnl    (Closely based on Andreas Zeller's macro for testing
506 dnl     for this under C++)
507 dnl
508 dnl    If the C compiler supports `long long' types,
509 dnl    define `HAVE_LONG_LONG'.
510 dnl
511 AC_DEFUN(FPTOOLS_C_LONG_LONG,
512 [
513 AC_REQUIRE([AC_PROG_CC])
514 AC_MSG_CHECKING(whether ${CC} supports long long types)
515 AC_CACHE_VAL(fptools_cv_have_long_long,
516 [
517 AC_LANG_SAVE
518 AC_LANG_C
519 AC_TRY_COMPILE(,[long long a;],
520 fptools_cv_have_long_long=yes,
521 fptools_cv_have_long_long=no)
522 AC_LANG_RESTORE
523 ])
524 AC_MSG_RESULT($fptools_cv_have_long_long)
525 if test "$fptools_cv_have_long_long" = yes; then
526 AC_DEFINE(HAVE_LONG_LONG)
527 fi
528 ])
529
530 dnl ** Obtain the value of a C constant.
531 dnl    The value will be `(-1)' if the constant is undefined.
532 dnl
533 dnl    This is set up so that the argument can be a shell variable.
534 dnl
535 AC_DEFUN(FPTOOLS_CHECK_CCONST,
536 [
537 eval "def_name=CCONST_$1"
538 eval "cv_name=ac_cv_cconst_$1"
539 AC_MSG_CHECKING(value of $1)
540 AC_CACHE_VAL($cv_name,
541 [AC_TRY_RUN([#include <stdio.h>
542 #include <errno.h>
543 main()
544 {
545   FILE *f=fopen("conftestval", "w");
546   if (!f) exit(1);
547   fprintf(f, "%d\n", $1);
548   exit(0);
549 }], 
550 eval "$cv_name=`cat conftestval`",
551 eval "$cv_name=-1",
552 ifelse([$2], , , eval "$cv_name=$2"))])dnl
553 eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
554 AC_MSG_RESULT($fptools_check_cconst_result)
555 AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
556 unset fptools_check_cconst_result
557 ])
558
559 dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with 
560 dnl    spaces)
561 dnl
562 AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
563 [for ac_const_name in $1
564 do
565 FPTOOLS_CHECK_CCONST($ac_const_name)dnl
566 done
567 ])
568
569
570 dnl *** Can we open files in binary mode? ***
571 dnl 
572 AC_DEFUN(FPTOOLS_O_BINARY,
573 [
574 AC_REQUIRE([AC_PROG_CC])
575 AC_MSG_CHECKING(whether we can open files in binary mode)
576 AC_CACHE_VAL(fptools_cv_have_o_binary,
577 [
578 AC_LANG_SAVE
579 AC_LANG_C
580 AC_TRY_COMPILE(,
581 [#ifdef HAVE_FCNTL_H
582 #include <fcntl.h>
583 #endif
584 int x = O_BINARY;],
585 fptools_cv_have_o_binary=yes,
586 fptools_cv_have_o_binary=no)
587 AC_LANG_RESTORE
588 ])
589 AC_MSG_RESULT($fptools_cv_have_o_binary)
590 if test "$fptools_cv_have_o_binary" = yes; then
591 AC_DEFINE(HAVE_O_BINARY)
592 fi
593 ])
594
595 dnl *** Which one comes first, .text or .data? ***
596 dnl 
597 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
598 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
599 [AC_TRY_RUN([
600 int f() { return 1; }
601 int i;
602 int main() { return ((char*)&f > (char*)&i); }
603
604 ],
605 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
606 if test "$fptools_cv_code_bef_data" = yes; then
607   AC_DEFINE(CODE_BEFORE_DATA)
608 fi
609 ])
610
611 dnl *** Helper function **
612 dnl 
613 AC_DEFUN(FPTOOLS_IN_SCOPE,AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no))
614
615 dnl *** What's the end-of-text-section marker called? ***
616 dnl
617 AC_DEFUN(FPTOOLS_END_TEXT_SECTION,
618 [AC_MSG_CHECKING([for end of text section marker])
619 not_done=1
620 for i in data_start _data_start etext _etext __etext; do
621   FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
622   if test "$fptools_end_of_text" = yes; then
623    AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, $i))
624    AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, $i))
625    not_done=0
626    break
627   fi
628 done
629 if test "$not_done" = 1; then
630 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text);
631 if test "$fptools_end_of_text" = yes; then
632   AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, etext))
633   AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, etext asm("etext")))
634 else
635   AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, dunno_what_it_is)
636   AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, dunno_what_it_is)
637 fi
638 fi
639 AC_MSG_RESULT([$]fptools_cv_end_of_text)
640 ])
641
642 dnl *** What's the end-of-data-section marker called? ***
643 dnl
644 AC_DEFUN(FPTOOLS_END_DATA_SECTION,
645 [AC_MSG_CHECKING([for end of data section marker])
646 not_done=1
647 for i in end _end __end; do
648   FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
649   if test "$fptools_end_of_data" = yes; then
650    AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, $i)])
651    AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, $i)])
652    not_done=0
653    break
654   fi
655 done
656 if test "$not_done" = 1; then
657 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data);
658 if test "$fptools_end_of_data" = yes; then
659   AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, end asm("end"))])
660   AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, end)])
661 else
662   AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, dunno_what_it_is)])
663   AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, dunno_what_it_is)])
664 fi
665 fi
666 AC_MSG_RESULT([$]fptools_cv_end_of_data)
667 ])
668
669
670
671 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
672
673 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
674
675 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
676 [
677 ac_save_LIBS="$LIBS"
678 LIBS=[$1];
679 cat > conftest.$ac_ext <<EOF
680 dnl This sometimes fails to find confdefs.h, for some reason.
681 dnl [#]line __oline__ "[$]0"
682 [#]line __oline__ "configure"
683 #include "confdefs.h"
684 [$2]
685 int t() { return 0; }
686 EOF
687 if AC_TRY_EVAL(ac_link); then
688   ifelse([$3], , :, [
689     LIBS="$ac_save_LIBS"
690     rm -rf conftest*
691     $3])
692   ifelse([$4], , , [else
693     LIBS="$ac_save_LIBS"
694     rm -rf conftest*
695     $4
696 ])dnl
697 fi
698 rm -f conftest*
699 ]
700 )
701
702 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
703
704 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
705
706 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
707 [AC_MSG_CHECKING([for $1])
708  AC_CACHE_VAL(ac_cv_flag_$1,
709    [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
710      eval "ac_cv_flag_$1=yes",
711      eval "ac_cv_flag_$1=no"
712    )]
713  )
714 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
715   AC_MSG_RESULT(yes)
716   LIBS="$2 $LIBS"
717   $4
718 else
719   AC_MSG_RESULT(no)
720   $5
721 fi
722 ])
723
724 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
725
726 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
727 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
728 [changequote(, )dnl
729   ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
730  changequote([, ])dnl
731  AC_DEFINE_UNQUOTED($ac_tr_lib)
732 ],
733 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
734 [changequote(, )dnl
735   ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
736  changequote([, ])dnl
737  AC_DEFINE_UNQUOTED($ac_tr_lib)
738 ],
739 []
740 )])]
741 )
742
743 dnl check for prototypes
744 dnl
745 AC_DEFUN(AC_C_PROTOTYPES,
746 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
747 [AC_TRY_COMPILE([
748 void foo(int);
749 void foo(i)
750 int i; { 
751 return;
752 }
753 ],
754 [int i;], 
755 ac_cv_prototypes=yes,
756 ac_cv_prototypes=no)])
757 if test "$ac_cv_prototypes" = yes; then
758 AC_DEFINE(HAVE_PROTOTYPES)
759 fi
760 ])
761
762 dnl ** Check which CATALOG file we have to use with DocBook SGML.
763 dnl
764 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
765 dnl
766 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
767 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
768 dnl is set to "no".  JADE is the jade executable and STYLESHEET
769 dnl a DocBook style sheet.
770 dnl
771 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
772 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
773 [
774 cat > conftest.sgml << EOF
775 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
776 <Article>
777 <ArtHeader>
778 <Title>Test</Title>
779 <Author><OtherName>Test</OtherName></Author>
780 <Address>Test</Address>
781 <PubDate>Test</PubDate>
782 </ArtHeader>
783 <Sect1><Title>Test</Title>
784 <Para>
785 Test.
786 </Para>
787 </Sect1>
788 </Article>
789 EOF
790 fptools_cv_sgml_catalog=no
791 for fptools_catalog in $4; do
792   ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
793   if AC_TRY_EVAL(ac_try); then
794     fptools_cv_sgml_catalog=[$]fptools_catalog
795     break
796   fi
797 done
798 ])
799 rm -rf conftest*
800 if test $fptools_cv_sgml_catalog != "no"; then
801   $1=$fptools_cv_sgml_catalog
802 fi
803 ])
804
805 dnl ######################################################################
806 dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
807 dnl                     [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
808 dnl Search for a library defining FUNC, if it's not already available.
809 dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
810 dnl specified.
811 dnl ######################################################################
812
813 AC_DEFUN(FPTOOLS_SEARCH_LIBS,
814 [AC_PREREQ([2.13])
815 AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
816 [ac_func_search_save_LIBS="$LIBS"
817 ac_cv_search_$2="no"
818 AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
819 test "$ac_cv_search_$2" = "no" && for i in $3; do
820 LIBS="-l$i $6 $ac_func_search_save_LIBS"
821 AC_TRY_LINK([$1], [$2()],
822 [ac_cv_search_$2="-l$i"
823 break])
824 done
825 LIBS="$ac_func_search_save_LIBS"])
826 if test "$ac_cv_search_$2" != "no"; then
827   test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
828   $4
829 else :
830   $5
831 fi])
832
833 dnl ####################### -*- Mode: M4 -*- ###########################
834 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
835 dnl
836 dnl This file is free software; you can redistribute it and/or modify it
837 dnl under the terms of the GNU General Public License as published by
838 dnl the Free Software Foundation; either version 2 of the License, or
839 dnl (at your option) any later version.
840 dnl
841 dnl This file is distributed in the hope that it will be useful, but
842 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
843 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
844 dnl General Public License for more details.
845 dnl
846 dnl You should have received a copy of the GNU General Public License
847 dnl along with this file; if not, write to:
848 dnl
849 dnl   Free Software Foundation, Inc.
850 dnl   Suite 330
851 dnl   59 Temple Place
852 dnl   Boston, MA 02111-1307, USA.
853 dnl ####################################################################
854
855
856 dnl @synopsis FPTOOLS_CHECK_LIBM
857 dnl 
858 dnl Search for math library (typically -lm).
859 dnl
860 dnl The variable LIBM (which is not an output variable by default) is
861 dnl set to a value which is suitable for use in a Makefile (for example,
862 dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
863 dnl
864 dnl @version 0.01 $Id: aclocal.m4,v 1.67 2001/02/17 19:52:56 sebc Exp $
865 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
866
867 # FPTOOLS_CHECK_LIBM - check for math library
868 AC_DEFUN(FPTOOLS_CHECK_LIBM,
869 [AC_REQUIRE([AC_CANONICAL_HOST])dnl
870 LIBM=
871 case "$host" in
872 *-*-beos* | *-*-macosx*)
873   # These system don't have libm
874   ;;
875 *-ncr-sysv4.3*)
876   AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
877   AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
878   ;;
879 *)
880   AC_CHECK_LIB(m, main, LIBM="-lm")
881   ;;
882 esac
883 ])
884
885 dnl ######################################################################
886 dnl NOTE: Because of portability issues between different autoconf
887 dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
888 dnl Furthermore, caching has been completely rewritten.
889 dnl ######################################################################
890
891 dnl ########################### -*- Mode: M4 -*- #######################
892 dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
893 dnl
894 dnl This file is free software; you can redistribute it and/or modify it
895 dnl under the terms of the GNU General Public License as published by
896 dnl the Free Software Foundation; either version 2 of the License, or
897 dnl (at your option) any later version.
898 dnl
899 dnl This file is distributed in the hope that it will be useful, but
900 dnl WITHOUT ANY WARRANTY; without even the implied warranty of
901 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
902 dnl General Public License for more details.
903 dnl
904 dnl You should have received a copy of the GNU General Public License
905 dnl along with this file; if not, write to:
906 dnl
907 dnl   Free Software Foundation, Inc.
908 dnl   Suite 330
909 dnl   59 Temple Place
910 dnl   Boston, MA 02111-1307, USA.
911 dnl ####################################################################
912
913 dnl @synopsis FPTOOLS_HAVE_OPENGL
914 dnl 
915 dnl Search for OpenGL.  We search first for Mesa (a GPL'ed version of
916 dnl OpenGL) before a vendor's version of OpenGL, unless we were
917 dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
918 dnl
919 dnl The four "standard" OpenGL libraries are searched for: "-lGL",
920 dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
921 dnl "-lglut".
922 dnl
923 dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
924 dnl be missing) are added to the shell output variable "GL_LIBS", along
925 dnl with any other libraries that are necessary to successfully link an
926 dnl OpenGL application (e.g. the X11 libraries).  Care has been taken to
927 dnl make sure that all of the libraries in "GL_LIBS" are listed in the
928 dnl proper order.
929 dnl
930 dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
931 dnl flags (e.g. "-I" flags) that are necessary to successfully compile
932 dnl an OpenGL application.
933 dnl
934 dnl The following shell variable (which are not output variables) are
935 dnl also set to either "yes" or "no" (depending on which libraries were
936 dnl found) to help you determine exactly what was found.
937 dnl
938 dnl   have_GL
939 dnl   have_GLU
940 dnl   have_GLX
941 dnl   have_glut
942 dnl
943 dnl A complete little toy "Automake `make distcheck'" package of how to
944 dnl use this macro is available at:
945 dnl
946 dnl   ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
947 dnl
948 dnl Please note that as the ac_opengl macro and the toy example evolves,
949 dnl the version number increases, so you may have to adjust the above
950 dnl URL accordingly.
951 dnl
952 dnl @version 0.01 $Id: aclocal.m4,v 1.67 2001/02/17 19:52:56 sebc Exp $
953 dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>
954
955 AC_DEFUN(FPTOOLS_HAVE_OPENGL,
956 [
957   AC_REQUIRE([AC_PROG_CC])
958   AC_REQUIRE([AC_PATH_X])
959   AC_REQUIRE([AC_PATH_XTRA])
960   AC_REQUIRE([FPTOOLS_CHECK_LIBM])
961
962 dnl Check for Mesa first, unless we were asked not to.
963 dnl    AC_HELP_STRING([--with-Mesa],
964 dnl                   [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
965 dnl                   with_Mesa_help_string)
966 dnl    AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
967   AC_ARG_ENABLE(Mesa, [  --with-Mesa             Prefer the Mesa library over a vendors native OpenGL library (default=yes)], use_Mesa=$enableval, use_Mesa=yes)
968
969   if test x"$use_Mesa" = xyes; then
970      GL_search_list="MesaGL  GL  opengl32"
971     GLU_search_list="MesaGLU GLU glu32"
972     GLX_search_list="MesaGLX GLX"
973   else
974      GL_search_list="GL  opengl32 MesaGL"
975     GLU_search_list="GLU glu32    MesaGLU"
976     GLX_search_list="GLX          MesaGLX"
977   fi      
978
979   AC_LANG_SAVE
980   AC_LANG_C
981
982 dnl If we are running under X11 then add in the appropriate libraries.
983   if ! test x"$no_x" = xyes; then
984 dnl Add everything we need to compile and link X programs to GL_CFLAGS
985 dnl and GL_X_LIBS.
986     GL_CFLAGS="$X_CFLAGS"
987     GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
988   fi
989   GL_save_CPPFLAGS="$CPPFLAGS"
990   CPPFLAGS="$GL_CFLAGS"
991
992   GL_save_LIBS="$LIBS"
993   LIBS="$GL_X_LIBS"
994
995   FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>],   glEnd,           $GL_search_list,  have_GL=yes,   have_GL=no)
996   FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>],  gluNewQuadric,   $GLU_search_list, have_GLU=yes,  have_GLU=no)
997   FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>],  glXChooseVisual, $GLX_search_list, have_GLX=yes,  have_GLX=no)
998   FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop,    glut glut32,      have_glut=yes, have_glut=no)
999
1000   if test -n "$LIBS"; then
1001     GL_LIBS="$LIBS"
1002   else
1003     GL_LIBS=
1004     GL_CFLAGS=
1005   fi
1006
1007   AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
1008   GL_CFLAGS="$mdl_cv_gl_cflags"
1009   AC_SUBST(GL_CFLAGS)
1010   AC_CACHE_CHECK([OpenGL libs],  mdl_cv_gl_libs,   [mdl_cv_gl_libs="$GL_LIBS"])
1011   GL_LIBS="$mdl_cv_gl_libs"
1012   AC_SUBST(GL_LIBS)
1013
1014 dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
1015 dnl and we don't want to be global namespace polluters.
1016   GL_X_LIBS=
1017
1018   LIBS="$GL_save_LIBS"
1019   CPPFLAGS="$GL_save_CPPFLAGS"
1020
1021   AC_LANG_RESTORE
1022 ])
1023
1024 # LocalWords:  fi