aclocal.m4 32.9 KB
Newer Older
sof's avatar
sof committed
1
dnl $Id: aclocal.m4,v 1.80 2001/07/19 20:27:23 sof Exp $
sof's avatar
sof committed
2
3
4
dnl 
dnl Extra autoconf macros for the Glasgow fptools
dnl
sof's avatar
sof committed
5
6
7
dnl To be a good autoconf citizen, names of local macros have
dnl prefixed with FPTOOLS_ to ensure we don't clash
dnl with any pre-supplied autoconf ones.
sof's avatar
sof committed
8

sof's avatar
sof committed
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
dnl
dnl Is timezone around? (in a header file)
dnl 
AC_DEFUN(FPTOOLS_HAVE_TIMEZONE,
[AC_CACHE_CHECK([timezone], fptools_cv_have_timezone,
[AC_TRY_COMPILE([#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# if HAVE_SYS_TIME_H
#  include <sys/time.h>
# else
#  include <time.h>
# endif
#endif
], [return timezone;], 
fptools_cv_have_timezone=yes, fptools_cv_have_timezone=no)])
if test "$fptools_cv_have_timezone" = yes; then
  AC_DEFINE(HAVE_TIMEZONE)
fi
])

sof's avatar
sof committed
31
32
33
34
dnl
dnl Has timezone the type time_t or long (HP-UX 10.20 apparently
dnl has `long'..)
dnl 
sof's avatar
sof committed
35
36
AC_DEFUN(FPTOOLS_TYPE_TIMEZONE,
[AC_CACHE_CHECK([type of timezone], fptools_cv_type_timezone,
sof's avatar
sof committed
37
38
39
40
41
42
43
44
45
46
47
[AC_TRY_COMPILE([#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# if HAVE_SYS_TIME_H
#  include <sys/time.h>
# else
#  include <time.h>
# endif
#endif

sof's avatar
sof committed
48
extern time_t timezone;	
sof's avatar
sof committed
49
],
sof's avatar
sof committed
50
51
[int i;], fptools_cv_type_timezone=time_t, fptools_cv_type_timezone=long)])
AC_DEFINE_UNQUOTED(TYPE_TIMEZONE, $fptools_cv_type_timezone)
sof's avatar
sof committed
52
53
])

sof's avatar
sof committed
54
55
dnl *** Is altzone available? ***
dnl 
sof's avatar
sof committed
56
57
AC_DEFUN(FPTOOLS_ALTZONE,
[AC_CACHE_CHECK([altzone], fptools_cv_altzone,
sof's avatar
sof committed
58
59
60
61
62
63
64
65
66
67
68
[AC_TRY_LINK([#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# if HAVE_SYS_TIME_H
#  include <sys/time.h>
# else
#  include <time.h>
# endif
#endif
], [return altzone;], 
sof's avatar
sof committed
69
70
fptools_cv_altzone=yes, fptools_cv_altzone=no)])
if test "$fptools_cv_altzone" = yes; then
sof's avatar
sof committed
71
72
73
74
  AC_DEFINE(HAVE_ALTZONE)
fi
])

sof's avatar
sof committed
75

76
77
78
79
80
81
82
83
dnl *** Does libc contain GNU regex? ***
dnl 
AC_DEFUN(FPTOOLS_REGEX_IN_LIBC,
[AC_CACHE_CHECK([for GNU regex in libc], fptools_cv_have_regex,
[AC_TRY_LINK([#if HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <regex.h>
84
85
86
],[ struct re_pattern_buffer patbuf; 
    re_compile_pattern("",0,&patbuf);
    re_search_2 (&patbuf, "", 0, "",0, 0,0,0,0); ],
87
88
89
90
91
92
93
94
95
96
fptools_cv_have_regex=yes, fptools_cv_have_regex=no)])
if test "$fptools_cv_have_regex" = yes; then
	HaveRegex=YES
else
	HaveRegex=NO
fi
AC_SUBST(HaveRegex)
])


sof's avatar
sof committed
97
dnl ** check for leading underscores in symbol names
sof's avatar
sof committed
98
99
100
101
102
103
dnl 
dnl Test for determining whether symbol names have a leading
dnl underscore.
dnl 
dnl We assume that they _haven't_ if anything goes wrong.
dnl
104
105
106
107
108
dnl Some nlist implementations seem to try to be compatible by ignoring
dnl a leading underscore sometimes (eg. FreeBSD).  We therefore have
dnl to work around this by checking for *no* leading underscore first.
dnl Sigh.  --SDM
dnl
sof's avatar
sof committed
109
AC_DEFUN(FPTOOLS_UNDERSCORE,
sof's avatar
sof committed
110
[AC_CHECK_LIB(elf, nlist, LIBS="-lelf $LIBS")dnl
sof's avatar
sof committed
111
AC_CACHE_CHECK([leading underscore in symbol names], fptools_cv_lead_uscore,
sof's avatar
sof committed
112
113
114

dnl
dnl Hack!: nlist() under Digital UNIX insist on there being an _,
sof's avatar
sof committed
115
dnl but symbol table listings shows none. What is going on here?!?
sof's avatar
sof committed
116
dnl
sof's avatar
sof committed
117
118
dnl Another hack: cygwin doesn't come with nlist.h , so we hardwire
dnl the underscoredness of that "platform"
119
120
121
changequote(<<, >>)dnl
<<
case $HostPlatform in
sof's avatar
sof committed
122
alpha-dec-osf*) fptools_cv_lead_uscore='no';;
sof's avatar
sof committed
123
124
*cygwin32) fptools_cv_lead_uscore='yes';;
*mingw32) fptools_cv_lead_uscore='yes';;
125
126
*) >>
changequote([, ])dnl
sof's avatar
sof committed
127
128
129
130
AC_TRY_RUN([#ifdef HAVE_NLIST_H
#include <nlist.h>
changequote(<<, >>)dnl
<<
131
132
struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
sof's avatar
sof committed
133
134
135
136
137
138
139
#endif

main(argc, argv)
int argc;
char **argv;
{
#ifdef HAVE_NLIST_H
140
141
142
    if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
        exit(1);
    if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
sof's avatar
sof committed
143
144
145
146
        exit(0);>>
changequote([, ])dnl
#endif
    exit(1);
147
}], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO)
148
149
;;
esac);
sof's avatar
sof committed
150
LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'`
sof's avatar
sof committed
151
AC_SUBST(LeadingUnderscore)
152
153
154
case $LeadingUnderscore in
YES) AC_DEFINE(LEADING_UNDERSCORE);;
esac
sof's avatar
sof committed
155
156
])

157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
dnl
dnl FPTOOLS_PROG_CHECK_VERSION(VERSIONSTR1, TEST, VERSIONSTR2,
dnl                            ACTION-IF-TRUE [, ACTION-IF-FALSE])
dnl
dnl compare versions field-wise (separator is '.')
dnl TEST is one of {-lt,-le,-eq,-ge,-gt}
dnl
dnl quite shell-independant and SUSv2 compliant code
dnl
dnl NOTE: the loop could be unrolled within autoconf, but the
dnl       macro code would be a) longer and b) harder to debug... ;)
dnl
AC_DEFUN(FPTOOLS_PROG_CHECK_VERSION,
[if ( IFS=".";
      a="[$1]";  b="[$3]";
      while test -n "$a$b"
      do
              set -- [$]a;  h1="[$]1";  shift 2>/dev/null;  a="[$]*"
              set -- [$]b;  h2="[$]1";  shift 2>/dev/null;  b="[$]*"
              test -n "[$]h1" || h1=0;  test -n "[$]h2" || h2=0
              test [$]{h1} -eq [$]{h2} || break
      done
      test [$]{h1} [$2] [$]{h2}
    )
then ifelse([$4],,[:],[
  $4])
ifelse([$5],,,
[else
  $5])
fi
])])dnl


sof's avatar
sof committed
190
dnl
191
dnl Check for Happy and version.  If we're building GHC, then we need
192
dnl at least Happy version 1.9.  If there's no installed Happy, we look
193
194
dnl for a happy source tree and point the build system at that instead.
dnl
sof's avatar
sof committed
195
AC_DEFUN(FPTOOLS_HAPPY,
196
197
198
199
[
if test -d $srcdir/happy; then
   SrcTreeHappyCmd=$hardtop/happy/src/happy-inplace
fi
200
AC_PATH_PROG(HappyCmd,happy,$SrcTreeHappyCmd)
sof's avatar
sof committed
201
AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
sof's avatar
sof committed
202
changequote(, )dnl
203
[if test x"$HappyCmd" = x"$SrcTreeHappyCmd"; then
204
   fptools_cv_happy_version=`grep '^ProjectVersion[ 	]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
205
206
207
elif test x"$HappyCmd" != x; then
   fptools_cv_happy_version="`$HappyCmd -v |
			  grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
sof's avatar
sof committed
208
else
sof's avatar
sof committed
209
   fptools_cv_happy_version="";
sof's avatar
sof committed
210
fi;
211
changequote([, ])dnl
212
])
213
if test -d $srcdir/ghc; then
214
215
  FPTOOLS_PROG_CHECK_VERSION([$fptools_cv_happy_version],-lt,[1.9],
  [AC_MSG_ERROR([Happy version 1.9 or later is required to compile GHC.])])dnl
216
fi
217
HappyVersion=$fptools_cv_happy_version;
sof's avatar
sof committed
218
219
220
AC_SUBST(HappyVersion)
])

sof's avatar
sof committed
221
222
223
224
225
dnl
dnl What's the best way of doing context diffs?
dnl
dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
dnl
sof's avatar
sof committed
226
227
AC_DEFUN(FPTOOLS_PROG_DIFF,
[AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
sof's avatar
sof committed
228
229
230
[echo foo > conftest1
echo foo > conftest2
if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
sof's avatar
sof committed
231
    fptools_cv_context_diffs='diff -C 1'
sof's avatar
sof committed
232
233
else
    if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
sof's avatar
sof committed
234
        fptools_cv_context_diffs='diff -c1'
sof's avatar
sof committed
235
236
237
238
239
240
241
    else
        echo "Can't figure out how to do context diffs."
        echo "Neither \`diff -C 1' nor \`diff -c1' works."
        exit 1
    fi
fi
rm -f conftest1 conftest2
242
])
sof's avatar
sof committed
243
ContextDiffCmd=$fptools_cv_context_diffs
sof's avatar
sof committed
244
AC_SUBST(ContextDiffCmd)
sof's avatar
sof committed
245
246
])

sof's avatar
sof committed
247
248
249
dnl
dnl Finding the Right Yacc
dnl
sof's avatar
sof committed
250
AC_DEFUN(FPTOOLS_PROG_YACCY,
sof's avatar
sof committed
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
[AC_PROG_YACC
if test "$YACC" = "yacc"; then
   AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
   [AC_CHECK_PROG(WhatCmd, what, what, :)
    $WhatCmd $YACC > conftest.out
    if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
        echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
        if test -f /usr/lang/yacc; then
           echo "I'm going to use /usr/lang/yacc instead"
           ac_cv_prog_yacc=/usr/lang/yacc
        else
           echo "I'm assuming the worst...no parser generator at all"
           ac_cv_prog_yacc=:
        fi
    elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
        echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
        echo "I'm assuming the worst...no parser generator at all"
        ac_cv_prog_yacc=:
    else
	ac_cv_prog_yacc=$YACC
    fi
    rm -fr conftest*
])
else
    ac_cv_prog_yacc=$YACC
fi
YaccCmd=$ac_cv_prog_yacc
AC_SUBST(YaccCmd)
])
sof's avatar
sof committed
280

sof's avatar
sof committed
281
282
283
284
dnl *** Checking for ar and its arguments + whether we need ranlib.
dnl
dnl ArCmd and RANLIB are AC_SUBST'ed
dnl 
sof's avatar
sof committed
285
AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
sof's avatar
sof committed
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
[AC_PATH_PROG(ArCmd,ar)
if test -z "$ArCmd"; then
    echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
    exit 1;
fi
if $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
    ArCmd="$ArCmd clqs"
    NeedRanLib=''
elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
    ArCmd="$ArCmd cqs"
    NeedRanLib=''
elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
    ArCmd="$ArCmd clq"
    NeedRanLib='YES'
elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
    ArCmd="$ArCmd cq"
    NeedRanLib='YES'
elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
    ArCmd="$ArCmd cq"
    NeedRanLib='YES'
else
    echo "I can't figure out how to use your $ArCmd"
    exit 1
fi
rm -rf conftest*
test -n "$ArCmd" && test -n "$verbose" && echo "        setting ArCmd to $ArCmd"
AC_SUBST(ArCmd)
if test -z "$NeedRanLib"; then
    RANLIB=':'
    test -n "$verbose" && echo "        setting RANLIB to $RANLIB"
    AC_SUBST(RANLIB)
else
    AC_PROG_RANLIB
fi
])

sof's avatar
sof committed
322
dnl
sof's avatar
sof committed
323
dnl AC_SHEBANG_PERL - can we she-bang perl?
sof's avatar
sof committed
324
dnl
sof's avatar
sof committed
325
326
AC_DEFUN(FPTOOLS_SHEBANG_PERL,
[AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
sof's avatar
sof committed
327
328
329
330
331
332
[echo "#!$PerlCmd"'
exit $1;
' > conftest
chmod u+x conftest
(SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
if test $? -ne 69; then
sof's avatar
sof committed
333
   fptools_cv_shebang_perl=yes
sof's avatar
sof committed
334
else
sof's avatar
sof committed
335
   fptools_cv_shebang_perl=no
sof's avatar
sof committed
336
337
338
339
fi
rm -f conftest
])])

sof's avatar
sof committed
340
341
342
343
dnl
dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
dnl *Must* be called after AC_PROG_CC
dnl
sof's avatar
sof committed
344
345
AC_DEFUN(FPTOOLS_HAVE_GCC,
[AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
sof's avatar
sof committed
346
347
348
349
[if test -z "$GCC"; then
    echo ''
    echo "You would be better off with gcc"
    echo "Perhaps it is already installed, but not in your PATH?"
sof's avatar
sof committed
350
    fptools_cv_have_gcc='no'
sof's avatar
sof committed
351
352
else
changequote(, )dnl
sof's avatar
sof committed
353
    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' `"
sof's avatar
sof committed
354
355
356
357
358
359
changequote([, ])dnl
    if test `eval $cmd_string 2>/dev/null` != "1"; then
	echo ''
        echo "I'm not sure if your version of gcc will work,"
        echo "but it's worth a shot, eh?"
    fi
sof's avatar
sof committed
360
    fptools_cv_have_gcc='yes'
sof's avatar
sof committed
361
362
fi
])
sof's avatar
sof committed
363
HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
sof's avatar
sof committed
364
365
366
AC_SUBST(HaveGcc)
])

sof's avatar
sof committed
367
368
369
dnl Small feature test for perl version. Assumes PerlCmd
dnl contains path to perl binary
dnl
sof's avatar
sof committed
370
AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
sof's avatar
sof committed
371
[$PerlCmd -v >conftest.out 2>&1
rrt's avatar
rrt committed
372
373
if grep "version 5" conftest.out >/dev/null 2>&1; then
   :
sof's avatar
sof committed
374
else
chak's avatar
chak committed
375
376
377
378
379
380
381
382
383
  if grep "v5.6" conftest.out >/dev/null 2>&1; then
     :
  else
     if grep "version 6" conftest.out >/dev/null 2>&1; then
	:
     else
       echo "Your version of perl probably won't work."
     fi
  fi
sof's avatar
sof committed
384
385
386
fi
rm -fr conftest*
])
reid's avatar
reid committed
387

388
389
390
391
392
393
394
395
396
397
398
399
400
dnl
dnl FPTOOLS_NOCACHE_CHECK prints a message, then sets the
dnl values of the second argument to the result of running
dnl the commands given by the third. It does not cache its
dnl result, so it is suitable for checks which should be
dnl run every time.
dnl
AC_DEFUN(FPTOOLS_NOCACHE_CHECK,
[AC_MSG_CHECKING([$1])
 $3
 AC_MSG_RESULT([$][$2])
])

401
402
403
dnl
dnl FPTOOLS_GHC_VERSION(version)
dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
404
dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
405
406
dnl
dnl Test for version of installed ghc.  Uses $GHC.
407
dnl [original version pinched from c2hs]
408
dnl
409
AC_DEFUN(FPTOOLS_GHC_VERSION,
410
411
[FPTOOLS_NOCACHE_CHECK([version of ghc], [fptools_version_of_ghc],
[${WithGhc-ghc} --version > conftestghc 2>&1
412
  cat conftestghc >&AC_FD_CC
413
414
#Useless Use Of cat award...
  fptools_version_of_ghc=`cat conftestghc | sed -n -e 's/, patchlevel *\([[0-9]]\)/.\1/;s/.* version \([[0-9]][[0-9.]]*\).*/\1/p'`
415
  rm -fr conftest*
416
  if test "[$]fptools_version_of_ghc" = ""
417
  then
418
419
420
421
422
423
424
    fptools_version_of_ghc='unknown'
  fi
fptools_version_of_ghc[_major]=`echo [$]fptools_version_of_ghc | sed -e 's/^\([[0-9]]\).*/\1/'`
fptools_version_of_ghc[_minor]=`echo [$]fptools_version_of_ghc | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
fptools_version_of_ghc[_pl]=`echo [$]fptools_version_of_ghc | sed -n -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/p'`
#
if test "[$]fptools_version_of_ghc[_pl]" = ""
425
then
426
427
  fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor]"
  fptools_version_of_ghc[_pl]="0"
428
else
429
  fptools_version_of_ghc[_all]="[$]fptools_version_of_ghc[_major].[$]fptools_version_of_ghc[_minor].[$]fptools_version_of_ghc[_pl]"
430
fi
431
#
432
ifelse($#, [1], [dnl
433
[$1]="[$]fptools_version_of_ghc[_all]"
434
], $#, [2], [dnl
435
436
[$1]="[$]fptools_version_of_ghc[_major]"
[$2]="[$]fptools_version_of_ghc[_minor]"
437
], $#, [3], [dnl
438
439
440
[$1]="[$]fptools_version_of_ghc[_major]"
[$2]="[$]fptools_version_of_ghc[_minor]"
[$3]="[$]fptools_version_of_ghc[_pl]"
441
], $#, [4], [dnl
442
443
444
445
446
447
[$1]="[$]fptools_version_of_ghc[_all]"
[$2]="[$]fptools_version_of_ghc[_major]"
[$3]="[$]fptools_version_of_ghc[_minor]"
[$4]="[$]fptools_version_of_ghc[_pl]"
])
])
448
])dnl
449
450


sof's avatar
sof committed
451
dnl ** figure out the alignment restriction of a type
reid's avatar
reid committed
452
453
454
dnl    (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
dnl     so we can't call REQUIRE)

sof's avatar
sof committed
455
456
dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
reid's avatar
reid committed
457
458
459
460
461
462
463
464
465
466
467
[changequote(<<, >>)dnl
dnl The name to #define.
define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
dnl The cache variable name.
define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
dnl The name of the corresponding size.
define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
changequote([, ])dnl
AC_MSG_CHECKING(alignment of $1)
AC_CACHE_VAL(AC_CV_NAME,
[AC_TRY_RUN([
sof's avatar
sof committed
468
469
470
471
472
473
474
475
#include <stdio.h>
#if HAVE_STDDEF_H
#include <stddef.h>
#endif
#ifndef offsetof
#define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
#endif
int
reid's avatar
reid committed
476
477
main()
{
sof's avatar
sof committed
478
479
  FILE *f=fopen("conftestval", "w");
  if (!f) exit(1);
480
  fprintf(f, "%d", offsetof(struct { char c; $1 ty;},ty));
sof's avatar
sof committed
481
482
483
  exit(0);
}],
AC_CV_NAME=`cat conftestval`,
reid's avatar
reid committed
484
485
486
487
488
489
490
491
492
493
AC_CV_NAME=$AC_CV_SIZEOF_NAME,
AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
AC_MSG_RESULT($AC_CV_NAME)
AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
AC_PROVIDE($AC_TYPE_NAME)
undefine([AC_TYPE_NAME])dnl
undefine([AC_CV_NAME])dnl
undefine([AC_CV_SIZEOF_NAME])dnl
])

494
495
496
dnl ** Map an arithmetic C type to a Haskell type.
dnl    Based on autconf's AC_CHECK_SIZEOF.

497
dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
AC_DEFUN(FPTOOLS_CHECK_HTYPE,
[changequote(<<, >>)dnl
dnl The name to #define.
define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
dnl The cache variable name.
define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
changequote([, ])dnl
AC_MSG_CHECKING(Haskell type for $1)
AC_CACHE_VAL(AC_CV_NAME,
[AC_TRY_RUN([#include <stdio.h>
#include <stddef.h>
#ifdef HAVE_SIGNAL_H
#include <signal.h>
#endif
#ifdef HAVE_TIME_H
#include <time.h>
#endif
515
516
517
#ifdef HAVE_GL_GL_H
#include <GL/gl.h>
#endif
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534

typedef $1 testing;

main() {
  FILE *f=fopen("conftestval", "w");
  if (!f) exit(1);
  if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
    fprintf(f, "%s%d\n",
           ((testing)(-1) < (testing)0) ? "Int" : "Word",
           sizeof(testing)*8);
  } else {
    fprintf(f,"%s\n",
           (sizeof(testing) >  sizeof(double)) ? "LDouble" :
           (sizeof(testing) == sizeof(double)) ? "Double"  : "Float");
  }
  fclose(f);
  exit(0);
535
536
537
}], AC_CV_NAME=`cat conftestval`,
ifelse([$2], , AC_CV_NAME=NotReallyAType,      AC_CV_NAME=$2),
ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
538
539
540
541
542
543
AC_MSG_RESULT($AC_CV_NAME)
AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
undefine([AC_TYPE_NAME])dnl
undefine([AC_CV_NAME])dnl
])

sof's avatar
sof committed
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
dnl ** figure out whether C compiler supports 'long long's
dnl    (Closely based on Andreas Zeller's macro for testing
dnl     for this under C++)
dnl
dnl    If the C compiler supports `long long' types,
dnl    define `HAVE_LONG_LONG'.
dnl
AC_DEFUN(FPTOOLS_C_LONG_LONG,
[
AC_REQUIRE([AC_PROG_CC])
AC_MSG_CHECKING(whether ${CC} supports long long types)
AC_CACHE_VAL(fptools_cv_have_long_long,
[
AC_LANG_SAVE
AC_LANG_C
AC_TRY_COMPILE(,[long long a;],
fptools_cv_have_long_long=yes,
fptools_cv_have_long_long=no)
AC_LANG_RESTORE
])
AC_MSG_RESULT($fptools_cv_have_long_long)
if test "$fptools_cv_have_long_long" = yes; then
AC_DEFINE(HAVE_LONG_LONG)
fi
])
sof's avatar
sof committed
569

chak's avatar
chak committed
570
dnl ** Obtain the value of a C constant.
571
dnl    The value will be `(-1)' if the constant is undefined.
chak's avatar
chak committed
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
dnl
dnl    This is set up so that the argument can be a shell variable.
dnl
AC_DEFUN(FPTOOLS_CHECK_CCONST,
[
eval "def_name=CCONST_$1"
eval "cv_name=ac_cv_cconst_$1"
AC_MSG_CHECKING(value of $1)
AC_CACHE_VAL($cv_name,
[AC_TRY_RUN([#include <stdio.h>
#include <errno.h>
main()
{
  FILE *f=fopen("conftestval", "w");
  if (!f) exit(1);
587
  fprintf(f, "%d\n", $1);
chak's avatar
chak committed
588
589
590
  exit(0);
}], 
eval "$cv_name=`cat conftestval`",
591
eval "$cv_name=-1",
592
eval "$cv_name=-1")])dnl
chak's avatar
chak committed
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
eval "fptools_check_cconst_result=`echo '$'{$cv_name}`"
AC_MSG_RESULT($fptools_check_cconst_result)
AC_DEFINE_UNQUOTED($def_name, $fptools_check_cconst_result)
unset fptools_check_cconst_result
])

dnl ** Invoke AC_CHECK_CCONST on each argument (which have to separate with 
dnl    spaces)
dnl
AC_DEFUN(FPTOOLS_CHECK_CCONSTS,
[for ac_const_name in $1
do
FPTOOLS_CHECK_CCONST($ac_const_name)dnl
done
])


sof's avatar
sof committed
610
611
612
613
614
615
616
617
618
619
dnl *** Can we open files in binary mode? ***
dnl 
AC_DEFUN(FPTOOLS_O_BINARY,
[
AC_REQUIRE([AC_PROG_CC])
AC_MSG_CHECKING(whether we can open files in binary mode)
AC_CACHE_VAL(fptools_cv_have_o_binary,
[
AC_LANG_SAVE
AC_LANG_C
sof's avatar
sof committed
620
621
622
623
624
AC_TRY_COMPILE(,
[#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
int x = O_BINARY;],
sof's avatar
sof committed
625
626
627
628
629
630
631
632
633
fptools_cv_have_o_binary=yes,
fptools_cv_have_o_binary=no)
AC_LANG_RESTORE
])
AC_MSG_RESULT($fptools_cv_have_o_binary)
if test "$fptools_cv_have_o_binary" = yes; then
AC_DEFINE(HAVE_O_BINARY)
fi
])
sof's avatar
sof committed
634

sof's avatar
sof committed
635
636
637
638
639
640
641
642
643
644
dnl *** Which one comes first, .text or .data? ***
dnl 
AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
[AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
[AC_TRY_RUN([
int f() { return 1; }
int i;
int main() { return ((char*)&f > (char*)&i); }

],
sof's avatar
sof committed
645
fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
sof's avatar
sof committed
646
647
648
649
650
651
652
if test "$fptools_cv_code_bef_data" = yes; then
  AC_DEFINE(CODE_BEFORE_DATA)
fi
])

dnl *** Helper function **
dnl 
653
654
655
AC_DEFUN(FPTOOLS_IN_SCOPE,
[AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no)
])
sof's avatar
sof committed
656
657
658

dnl *** What's the end-of-text-section marker called? ***
dnl
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
AC_DEFUN([FPTOOLS_END_TEXT_SECTION],
[AC_CACHE_CHECK([for end of text section marker],
                [fptools_cv_end_of_text],
		[fptools_cv_end_of_text=""
		 not_done=1
		 for i in data_start _data_start etext _etext __etext; do
		   FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
		   if test "$fptools_end_of_text" = yes; then
		     fptools_cv_end_of_text=$i
		     not_done=0
		     break
		   fi
		 done
		 if test "$not_done" = 1; then
		   FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text)
		   if test "$fptools_end_of_text" = yes; then
		     fptools_cv_end_of_text="etext asm("etext")"
		   fi
		 fi])
sof's avatar
sof committed
678
		 if test -n "$fptools_cv_end_of_text"; then
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
		   AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], $fptools_cv_end_of_text)
		 else
		   AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER], dunno_end_of_text)
		 fi
 AC_CACHE_CHECK([for end of text section marker declaration],
		[fptools_cv_end_of_text_decl],
		[fptools_cv_end_of_text_decl=""
		 not_done=1
		 for i in data_start _data_start etext _etext __etext; do
		   FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text_decl)
		   if test "$fptools_end_of_text_decl" = yes; then
		     fptools_cv_end_of_text_decl=$i
		     not_done=0
		     break
		   fi
		 done
		 if test "$not_done" = 1; then
		   FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text_decl)
		   if test "$fptools_end_of_text_decl" = yes; then
		     fptools_cv_end_of_text_decl=etext
		   fi
		 fi])
sof's avatar
sof committed
701
		 if test -n "$fptools_cv_end_of_text_decl"; then
702
703
704
705
706
707
		   AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], $fptools_cv_end_of_text_decl)
		 else
		   AC_DEFINE_UNQUOTED([TEXT_SECTION_END_MARKER_DECL], dunno_end_of_text_decl)
		 fi
])		   
 
sof's avatar
sof committed
708
709
dnl *** What's the end-of-data-section marker called? ***
dnl
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
AC_DEFUN([FPTOOLS_END_DATA_SECTION],
[AC_CACHE_CHECK([for end of data section marker],
                [fptools_cv_end_of_data],
		[fptools_cv_end_of_data=""
		 not_done=1
		 for i in end _end __end; do
		   FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
		   if test "$fptools_end_of_data" = yes; then
		     fptools_cv_end_of_data=$i
		     not_done=0
		     break
		   fi
		 done
		 if test "$not_done" = 1; then
		   FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data)
		   if test "$fptools_end_of_data" = yes; then
		     fptools_cv_end_of_data=end
		   fi
		 fi])
sof's avatar
sof committed
729
		 if test -n "$fptools_cv_end_of_data"; then
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
		   AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], $fptools_cv_end_of_data)
		 else
		   AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER], dunno_end_of_data)
		 fi
 AC_CACHE_CHECK([for end of data section marker declaration],
		[fptools_cv_end_of_data_decl],
		[fptools_cv_end_of_data_decl=""
		 not_done=1
		 for i in end _end __end; do
		   FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data_decl)
		   if test "$fptools_end_of_data_decl" = yes; then
		     fptools_cv_end_of_data_decl=$i
		     not_done=0
		     break
		   fi
		 done
		 if test "$not_done" = 1; then
		   FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data_decl)
		   if test "$fptools_end_of_data_decl" = yes; then
		     fptools_cv_end_of_data_decl=end
		   fi
		 fi])
sof's avatar
sof committed
752
		 if test -n "$fptools_cv_end_of_data_decl"; then
753
754
755
756
757
758
		   AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], $fptools_cv_end_of_data_decl)
		 else
		   AC_DEFINE_UNQUOTED([DATA_SECTION_END_MARKER_DECL], dunno_end_of_data_decl)
		 fi
])		   
 
reid's avatar
reid committed
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833

dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning

dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)

AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
[
ac_save_LIBS="$LIBS"
LIBS=[$1];
cat > conftest.$ac_ext <<EOF
dnl This sometimes fails to find confdefs.h, for some reason.
dnl [#]line __oline__ "[$]0"
[#]line __oline__ "configure"
#include "confdefs.h"
[$2]
int t() { return 0; }
EOF
if AC_TRY_EVAL(ac_link); then
  ifelse([$3], , :, [
    LIBS="$ac_save_LIBS"
    rm -rf conftest*
    $3])
  ifelse([$4], , , [else
    LIBS="$ac_save_LIBS"
    rm -rf conftest*
    $4
])dnl
fi
rm -f conftest*
]
)

dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution

dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)

AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
[AC_MSG_CHECKING([for $1])
 AC_CACHE_VAL(ac_cv_flag_$1,
   [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
     eval "ac_cv_flag_$1=yes",
     eval "ac_cv_flag_$1=no"
   )]
 )
if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
  AC_MSG_RESULT(yes)
  LIBS="$2 $LIBS"
  $4
else
  AC_MSG_RESULT(no)
  $5
fi
])

dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)

AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
[FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
[changequote(, )dnl
  ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
 changequote([, ])dnl
 AC_DEFINE_UNQUOTED($ac_tr_lib)
],
[FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
[changequote(, )dnl
  ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
 changequote([, ])dnl
 AC_DEFINE_UNQUOTED($ac_tr_lib)
],
[]
)])]
)

dnl check for prototypes
dnl
834
AC_DEFUN([AC_C_PROTOTYPES],
reid's avatar
reid committed
835
836
837
838
839
840
841
842
843
844
845
846
[AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
[AC_TRY_COMPILE([
void foo(int);
void foo(i)
int i; { 
return;
}
],
[int i;], 
ac_cv_prototypes=yes,
ac_cv_prototypes=no)])
if test "$ac_cv_prototypes" = yes; then
847
AC_DEFINE([HAVE_PROTOTYPES])
reid's avatar
reid committed
848
849
850
fi
])

chak's avatar
chak committed
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
dnl ** Check which CATALOG file we have to use with DocBook SGML.
dnl
dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
dnl
dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
dnl is set to "no".  JADE is the jade executable and STYLESHEET
dnl a DocBook style sheet.
dnl
AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
[AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
[
cat > conftest.sgml << EOF
<!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
<Article>
<ArtHeader>
<Title>Test</Title>
<Author><OtherName>Test</OtherName></Author>
<Address>Test</Address>
<PubDate>Test</PubDate>
</ArtHeader>
<Sect1><Title>Test</Title>
<Para>
Test.
</Para>
</Sect1>
</Article>
EOF
fptools_cv_sgml_catalog=no
for fptools_catalog in $4; do
  ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
  if AC_TRY_EVAL(ac_try); then
    fptools_cv_sgml_catalog=[$]fptools_catalog
    break
  fi
done
])
rm -rf conftest*
if test $fptools_cv_sgml_catalog != "no"; then
  $1=$fptools_cv_sgml_catalog
fi
])

894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
dnl ######################################################################
dnl FPTOOLS_SEARCH_LIBS(INCLUDES, FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND
dnl                     [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
dnl Search for a library defining FUNC, if it's not already available.
dnl This is almost the same as AC_SEARCH_LIBS, but the INCLUDES can be
dnl specified.
dnl ######################################################################

AC_DEFUN(FPTOOLS_SEARCH_LIBS,
[AC_PREREQ([2.13])
AC_CACHE_CHECK([for library containing $2], [ac_cv_search_$2],
[ac_func_search_save_LIBS="$LIBS"
ac_cv_search_$2="no"
AC_TRY_LINK([$1], [$2()], [ac_cv_search_$2="none required"])
test "$ac_cv_search_$2" = "no" && for i in $3; do
LIBS="-l$i $6 $ac_func_search_save_LIBS"
AC_TRY_LINK([$1], [$2()],
[ac_cv_search_$2="-l$i"
break])
done
LIBS="$ac_func_search_save_LIBS"])
if test "$ac_cv_search_$2" != "no"; then
  test "$ac_cv_search_$2" = "none required" || LIBS="$ac_cv_search_$2 $LIBS"
  $4
else :
  $5
fi])

dnl ####################### -*- Mode: M4 -*- ###########################
dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
dnl
dnl This file is free software; you can redistribute it and/or modify it
dnl under the terms of the GNU General Public License as published by
dnl the Free Software Foundation; either version 2 of the License, or
dnl (at your option) any later version.
dnl
dnl This file is distributed in the hope that it will be useful, but
dnl WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
dnl General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with this file; if not, write to:
dnl
dnl   Free Software Foundation, Inc.
dnl   Suite 330
dnl   59 Temple Place
dnl   Boston, MA 02111-1307, USA.
dnl ####################################################################


dnl @synopsis FPTOOLS_CHECK_LIBM
dnl 
dnl Search for math library (typically -lm).
dnl
dnl The variable LIBM (which is not an output variable by default) is
dnl set to a value which is suitable for use in a Makefile (for example,
dnl in make's LOADLIBES macro) provided you AC_SUBST it first.
dnl
dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>

# FPTOOLS_CHECK_LIBM - check for math library
AC_DEFUN(FPTOOLS_CHECK_LIBM,
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
LIBM=
case "$host" in
sebc's avatar
sebc committed
960
*-*-beos* | *-*-macosx*)
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
  # These system don't have libm
  ;;
*-ncr-sysv4.3*)
  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
  AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
  ;;
*)
  AC_CHECK_LIB(m, main, LIBM="-lm")
  ;;
esac
])

dnl ######################################################################
dnl NOTE: Because of portability issues between different autoconf
dnl versions the AC_HELP_STRING macro has been removed from FPTOOLS_HAVE_OPENGL.
dnl Furthermore, caching has been completely rewritten.
dnl ######################################################################

dnl ########################### -*- Mode: M4 -*- #######################
dnl Copyright (C) 98, 1999 Matthew D. Langston <langston@SLAC.Stanford.EDU>
dnl
dnl This file is free software; you can redistribute it and/or modify it
dnl under the terms of the GNU General Public License as published by
dnl the Free Software Foundation; either version 2 of the License, or
dnl (at your option) any later version.
dnl
dnl This file is distributed in the hope that it will be useful, but
dnl WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
dnl General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with this file; if not, write to:
dnl
dnl   Free Software Foundation, Inc.
dnl   Suite 330
dnl   59 Temple Place
dnl   Boston, MA 02111-1307, USA.
dnl ####################################################################

dnl @synopsis FPTOOLS_HAVE_OPENGL
dnl 
dnl Search for OpenGL.  We search first for Mesa (a GPL'ed version of
dnl OpenGL) before a vendor's version of OpenGL, unless we were
dnl specifically asked not to with `--with-Mesa=no' or `--without-Mesa'.
dnl
dnl The four "standard" OpenGL libraries are searched for: "-lGL",
dnl "-lGLU", "-lGLX" (or "-lMesaGL", "-lMesaGLU" as the case may be) and
dnl "-lglut".
dnl
dnl All of the libraries that are found (since "-lglut" or "-lGLX" might
dnl be missing) are added to the shell output variable "GL_LIBS", along
dnl with any other libraries that are necessary to successfully link an
dnl OpenGL application (e.g. the X11 libraries).  Care has been taken to
dnl make sure that all of the libraries in "GL_LIBS" are listed in the
dnl proper order.
dnl
dnl Additionally, the shell output variable "GL_CFLAGS" is set to any
dnl flags (e.g. "-I" flags) that are necessary to successfully compile
dnl an OpenGL application.
dnl
dnl The following shell variable (which are not output variables) are
dnl also set to either "yes" or "no" (depending on which libraries were
dnl found) to help you determine exactly what was found.
dnl
dnl   have_GL
dnl   have_GLU
dnl   have_GLX
dnl   have_glut
dnl
dnl A complete little toy "Automake `make distcheck'" package of how to
dnl use this macro is available at:
dnl
dnl   ftp://ftp.slac.stanford.edu/users/langston/autoconf/ac_opengl-0.01.tar.gz
dnl
dnl Please note that as the ac_opengl macro and the toy example evolves,
dnl the version number increases, so you may have to adjust the above
dnl URL accordingly.
dnl
dnl @author Matthew D. Langston <langston@SLAC.Stanford.EDU>

AC_DEFUN(FPTOOLS_HAVE_OPENGL,
[
  AC_REQUIRE([AC_PROG_CC])
  AC_REQUIRE([AC_PATH_X])
  AC_REQUIRE([AC_PATH_XTRA])
  AC_REQUIRE([FPTOOLS_CHECK_LIBM])

dnl Check for Mesa first, unless we were asked not to.
dnl    AC_HELP_STRING([--with-Mesa],
dnl                   [Prefer the Mesa library over a vendors native OpenGL library (default=yes)],
dnl                   with_Mesa_help_string)
dnl    AC_ARG_ENABLE(Mesa, $with_Mesa_help_string, use_Mesa=$enableval, use_Mesa=yes)
  AC_ARG_ENABLE(Mesa, [  --with-Mesa             Prefer the Mesa library over a vendors native OpenGL library (default=yes)], use_Mesa=$enableval, use_Mesa=yes)

  if test x"$use_Mesa" = xyes; then
     GL_search_list="MesaGL  GL  opengl32"
    GLU_search_list="MesaGLU GLU glu32"
    GLX_search_list="MesaGLX GLX"
  else
     GL_search_list="GL  opengl32 MesaGL"
    GLU_search_list="GLU glu32    MesaGLU"
    GLX_search_list="GLX          MesaGLX"
  fi      

  AC_LANG_SAVE
  AC_LANG_C

dnl If we are running under X11 then add in the appropriate libraries.
  if ! test x"$no_x" = xyes; then
dnl Add everything we need to compile and link X programs to GL_CFLAGS
dnl and GL_X_LIBS.
    GL_CFLAGS="$X_CFLAGS"
    GL_X_LIBS="$X_PRE_LIBS $X_LIBS -lX11 -lXext -lXmu -lXt -lXi $X_EXTRA_LIBS $LIBM"
  fi
  GL_save_CPPFLAGS="$CPPFLAGS"
  CPPFLAGS="$GL_CFLAGS"

  GL_save_LIBS="$LIBS"
  LIBS="$GL_X_LIBS"

  FPTOOLS_SEARCH_LIBS([#include <GL/gl.h>],   glEnd,           $GL_search_list,  have_GL=yes,   have_GL=no)
  FPTOOLS_SEARCH_LIBS([#include <GL/glu.h>],  gluNewQuadric,   $GLU_search_list, have_GLU=yes,  have_GLU=no)
  FPTOOLS_SEARCH_LIBS([#include <GL/glx.h>],  glXChooseVisual, $GLX_search_list, have_GLX=yes,  have_GLX=no)
  FPTOOLS_SEARCH_LIBS([#include <GL/glut.h>], glutMainLoop,    glut glut32,      have_glut=yes, have_glut=no)

  if test -n "$LIBS"; then
    GL_LIBS="$LIBS"
  else
    GL_LIBS=
    GL_CFLAGS=
  fi

  AC_CACHE_CHECK([OpenGL flags], mdl_cv_gl_cflags, [mdl_cv_gl_cflags="$GL_CFLAGS"])
  GL_CFLAGS="$mdl_cv_gl_cflags"
  AC_SUBST(GL_CFLAGS)
  AC_CACHE_CHECK([OpenGL libs],  mdl_cv_gl_libs,   [mdl_cv_gl_libs="$GL_LIBS"])
  GL_LIBS="$mdl_cv_gl_libs"
  AC_SUBST(GL_LIBS)

dnl Reset GL_X_LIBS regardless, since it was just a temporary variable
dnl and we don't want to be global namespace polluters.
  GL_X_LIBS=

  LIBS="$GL_save_LIBS"
  CPPFLAGS="$GL_save_CPPFLAGS"

  AC_LANG_RESTORE
])
reid's avatar
reid committed
1110
1111

# LocalWords:  fi
sof's avatar
sof committed
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125

dnl 
dnl acspecific.m4's defn of AC_PROG_LEX is a bit too permissive, as it
dnl defaults to 'lex' if 'flex' isn't found (without checking whether
dnl 'lex' is actually present along the user's PATH).
dnl
AC_DEFUN(AC_PROG_LEX_STRICT,
[AC_CHECK_PROG(LEX, flex, flex)
if test -z "$LEX"
then
  AC_CHECK_PROG(LEX,lex,lex)
  test -z "$LEX" && AC_MSG_ERROR(['lex' or 'flex' is required to compile GHC.])
fi
])
sof's avatar
sof committed
1126
1127

dnl
sof's avatar
sof committed
1128
dnl Check to see whether CC (gcc) supports a particular option.
sof's avatar
sof committed
1129
dnl 
sof's avatar
sof committed
1130
AC_DEFUN(FPTOOLS_CC_FLAG,
sof's avatar
sof committed
1131
[
sof's avatar
sof committed
1132
AC_CACHE_CHECK([whether $CC accepts $1], [ac_cv_cc_$2],
sof's avatar
sof committed
1133
1134
[save_CFLAGS="$CFLAGS"
 CFLAGS="$CFLAGS $1"
sof's avatar
sof committed
1135
 AC_LANG_C
sof's avatar
sof committed
1136
1137
1138
 AC_TRY_COMPILE(,[int main(){return(0);}],
                 [ac_cv_cc_$2=yes],
		 [ac_cv_cc_$2=no])
sof's avatar
sof committed
1139
 CFLAGS="$save_CFLAGS"
sof's avatar
sof committed
1140
1141
1142
])
if test "$ac_cv_cc_$2"x = "yesx"; then
  $2=$extra_flag;
sof's avatar
sof committed
1143
else
sof's avatar
sof committed
1144
  $2=$extra_flag;
sof's avatar
sof committed
1145
1146
fi;
])