[project @ 2000-06-30 09:34:09 by simonmar]
[ghc-hetmet.git] / aclocal.m4
1 dnl $Id: aclocal.m4,v 1.52 2000/06/30 09:34:09 simonmar Exp $
2 dnl 
3 dnl Extra autoconf macros for the Glasgow fptools
4 dnl
5 dnl To be a good autoconf citizen, names of local macros have
6 dnl prefixed with FPTOOLS_ to ensure we don't clash
7 dnl with any pre-supplied autoconf ones.
8
9 dnl
10 dnl Is timezone around? (in a header file)
11 dnl 
12 AC_DEFUN(FPTOOLS_HAVE_TIMEZONE,
13 [AC_CACHE_CHECK([timezone], fptools_cv_have_timezone,
14 [AC_TRY_COMPILE([#if TIME_WITH_SYS_TIME
15 # include <sys/time.h>
16 # include <time.h>
17 #else
18 # if HAVE_SYS_TIME_H
19 #  include <sys/time.h>
20 # else
21 #  include <time.h>
22 # endif
23 #endif
24 ], [return timezone;], 
25 fptools_cv_have_timezone=yes, fptools_cv_have_timezone=no)])
26 if test "$fptools_cv_have_timezone" = yes; then
27   AC_DEFINE(HAVE_TIMEZONE)
28 fi
29 ])
30
31 dnl
32 dnl Has timezone the type time_t or long (HP-UX 10.20 apparently
33 dnl has `long'..)
34 dnl 
35 AC_DEFUN(FPTOOLS_TYPE_TIMEZONE,
36 [AC_CACHE_CHECK([type of timezone], fptools_cv_type_timezone,
37 [AC_TRY_COMPILE([#if TIME_WITH_SYS_TIME
38 # include <sys/time.h>
39 # include <time.h>
40 #else
41 # if HAVE_SYS_TIME_H
42 #  include <sys/time.h>
43 # else
44 #  include <time.h>
45 # endif
46 #endif
47
48 extern time_t timezone; 
49 ],
50 [int i;], fptools_cv_type_timezone=time_t, fptools_cv_type_timezone=long)])
51 AC_DEFINE_UNQUOTED(TYPE_TIMEZONE, $fptools_cv_type_timezone)
52 ])
53
54 dnl *** Is altzone available? ***
55 dnl 
56 AC_DEFUN(FPTOOLS_ALTZONE,
57 [AC_CACHE_CHECK([altzone], fptools_cv_altzone,
58 [AC_TRY_LINK([#if TIME_WITH_SYS_TIME
59 # include <sys/time.h>
60 # include <time.h>
61 #else
62 # if HAVE_SYS_TIME_H
63 #  include <sys/time.h>
64 # else
65 #  include <time.h>
66 # endif
67 #endif
68 ], [return altzone;], 
69 fptools_cv_altzone=yes, fptools_cv_altzone=no)])
70 if test "$fptools_cv_altzone" = yes; then
71   AC_DEFINE(HAVE_ALTZONE)
72 fi
73 ])
74
75
76 dnl *** Does libc contain GNU regex? ***
77 dnl 
78 AC_DEFUN(FPTOOLS_REGEX_IN_LIBC,
79 [AC_CACHE_CHECK([for GNU regex in libc], fptools_cv_have_regex,
80 [AC_TRY_LINK([#if HAVE_UNISTD_H
81 #include <unistd.h>
82 #endif
83 #include <regex.h>
84 ],[ struct re_pattern_buffer patbuf; re_compile_pattern("",0,&patbuf); ],
85 fptools_cv_have_regex=yes, fptools_cv_have_regex=no)])
86 if test "$fptools_cv_have_regex" = yes; then
87         HaveRegex=YES
88 else
89         HaveRegex=NO
90 fi
91 AC_SUBST(HaveRegex)
92 ])
93
94
95 dnl ** check for leading underscores in symbol names
96 dnl 
97 dnl Test for determining whether symbol names have a leading
98 dnl underscore.
99 dnl 
100 dnl We assume that they _haven't_ if anything goes wrong.
101 dnl
102 dnl Some nlist implementations seem to try to be compatible by ignoring
103 dnl a leading underscore sometimes (eg. FreeBSD).  We therefore have
104 dnl to work around this by checking for *no* leading underscore first.
105 dnl Sigh.  --SDM
106 dnl
107 AC_DEFUN(FPTOOLS_UNDERSCORE,
108 [AC_CHECK_LIB(elf, nlist, LIBS="-lelf $LIBS")dnl
109 AC_CACHE_CHECK([leading underscore in symbol names], fptools_cv_lead_uscore,
110
111 dnl
112 dnl Hack!: nlist() under Digital UNIX insist on there being an _,
113 dnl but symbol table listings shows none. What is going on here?!?
114 dnl
115 dnl Another hack: cygwin doesn't come with nlist.h , so we hardwire
116 dnl the underscoredness of that "platform"
117 changequote(<<, >>)dnl
118 <<
119 case $HostPlatform in
120 alpha-dec-osf*) fptools_cv_lead_uscore='no';;
121 *cygwin32) fptools_cv_lead_uscore='yes';;
122 *mingw32) fptools_cv_lead_uscore='yes';;
123 *) >>
124 changequote([, ])dnl
125 AC_TRY_RUN([#ifdef HAVE_NLIST_H
126 #include <nlist.h>
127 changequote(<<, >>)dnl
128 <<
129 struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}};
130 struct nlist xYzzY2[] = {{"_xYzzY2", 0},{0}};
131 #endif
132
133 main(argc, argv)
134 int argc;
135 char **argv;
136 {
137 #ifdef HAVE_NLIST_H
138     if(nlist(argv[0], xYzzY1) == 0 && xYzzY1[0].n_value != 0)
139         exit(1);
140     if(nlist(argv[0], xYzzY2) == 0 && xYzzY2[0].n_value != 0)
141         exit(0);>>
142 changequote([, ])dnl
143 #endif
144     exit(1);
145 }], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO)
146 ;;
147 esac);
148 LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'`
149 AC_SUBST(LeadingUnderscore)
150 case $LeadingUnderscore in
151 YES) AC_DEFINE(LEADING_UNDERSCORE);;
152 esac
153 ])
154
155 dnl
156 dnl Check for Happy and version.  If we're building GHC, then we need
157 dnl at least Happy version 1.6.  If there's no installed Happy, we look
158 dnl for a happy source tree and point the build system at that instead.
159 dnl
160 dnl ToDo: when we reset HappyCmd to the source tree, autoconf doesn't
161 dnl seems to insert it in the cache file.  sigh.
162 dnl
163 AC_DEFUN(FPTOOLS_HAPPY,
164 [AC_PATH_PROG(HappyCmd,happy)
165 AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
166 [if test x"$HappyCmd" != x; then
167    fptools_cv_happy_version="`$HappyCmd -v |
168 changequote(, )dnl
169                           grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
170 elif test -d $srcdir/happy; then
171    HappyCmd=$hardtop/happy/src/happy-inplace;
172    fptools_cv_happy_version=`grep '^ProjectVersion[     ]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
173    echo -n "using happy from the source tree... ";
174 else
175    fptools_cv_happy_version="";
176 fi;
177 changequote([, ])dnl
178 if expr "$fptools_cv_happy_version" "<" 1.6 > /dev/null 2>&1; then
179    if test -d $srcdir/ghc; then
180      echo
181      echo "Happy version 1.6 or later is required to compile GHC."
182      exit 1;
183    fi
184 fi;
185 ])
186 HappyVersion=$fptools_cv_happy_version;
187 AC_SUBST(HappyVersion)
188 ])
189
190 dnl
191 dnl What's the best way of doing context diffs?
192 dnl
193 dnl (NB: NeXTStep thinks diff'ing a file against itself is "trouble")
194 dnl
195 AC_DEFUN(FPTOOLS_PROG_DIFF,
196 [AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
197 [echo foo > conftest1
198 echo foo > conftest2
199 if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
200     fptools_cv_context_diffs='diff -C 1'
201 else
202     if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
203         fptools_cv_context_diffs='diff -c1'
204     else
205         echo "Can't figure out how to do context diffs."
206         echo "Neither \`diff -C 1' nor \`diff -c1' works."
207         exit 1
208     fi
209 fi
210 rm -f conftest1 conftest2
211 ])
212 ContextDiffCmd=$fptools_cv_context_diffs
213 AC_SUBST(ContextDiffCmd)
214 ])
215
216 dnl
217 dnl Finding the Right Yacc
218 dnl
219 AC_DEFUN(FPTOOLS_PROG_YACCY,
220 [AC_PROG_YACC
221 if test "$YACC" = "yacc"; then
222    AC_CACHE_CHECK([if it is an OK yacc], ac_cv_prog_yacc,
223    [AC_CHECK_PROG(WhatCmd, what, what, :)
224     $WhatCmd $YACC > conftest.out
225     if egrep 'y1\.c 1\..*SMI' conftest.out >/dev/null 2>&1; then
226         echo "I don't trust your $YaccCmd; it looks like an old Sun yacc"
227         if test -f /usr/lang/yacc; then
228            echo "I'm going to use /usr/lang/yacc instead"
229            ac_cv_prog_yacc=/usr/lang/yacc
230         else
231            echo "I'm assuming the worst...no parser generator at all"
232            ac_cv_prog_yacc=:
233         fi
234     elif egrep 'y1\.c.*Revision: 4\.2\.6\.3.*DEC' conftest.out >/dev/null 2>&1; then
235         echo "I don't trust your $YaccCmd; it looks like a lame DEC yacc"
236         echo "I'm assuming the worst...no parser generator at all"
237         ac_cv_prog_yacc=:
238     else
239         ac_cv_prog_yacc=$YACC
240     fi
241     rm -fr conftest*
242 ])
243 else
244     ac_cv_prog_yacc=$YACC
245 fi
246 YaccCmd=$ac_cv_prog_yacc
247 AC_SUBST(YaccCmd)
248 ])
249
250 dnl *** Checking for ar and its arguments + whether we need ranlib.
251 dnl
252 dnl ArCmd and RANLIB are AC_SUBST'ed
253 dnl 
254 AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
255 [AC_PATH_PROG(ArCmd,ar)
256 if test -z "$ArCmd"; then
257     echo "You don't seem to have ar in your PATH...I have no idea how to make a library"
258     exit 1;
259 fi
260 if $ArCmd clqs conftest.a >/dev/null 2>/dev/null; then
261     ArCmd="$ArCmd clqs"
262     NeedRanLib=''
263 elif $ArCmd cqs conftest.a >/dev/null 2>/dev/null; then
264     ArCmd="$ArCmd cqs"
265     NeedRanLib=''
266 elif $ArCmd clq conftest.a >/dev/null 2>/dev/null; then
267     ArCmd="$ArCmd clq"
268     NeedRanLib='YES'
269 elif $ArCmd cq conftest.a >/dev/null 2>/dev/null; then
270     ArCmd="$ArCmd cq"
271     NeedRanLib='YES'
272 elif $ArCmd cq conftest.a 2>&1 | grep 'no archive members specified' >/dev/null 2>/dev/null; then
273     ArCmd="$ArCmd cq"
274     NeedRanLib='YES'
275 else
276     echo "I can't figure out how to use your $ArCmd"
277     exit 1
278 fi
279 rm -rf conftest*
280 test -n "$ArCmd" && test -n "$verbose" && echo "        setting ArCmd to $ArCmd"
281 AC_SUBST(ArCmd)
282 if test -z "$NeedRanLib"; then
283     RANLIB=':'
284     test -n "$verbose" && echo "        setting RANLIB to $RANLIB"
285     AC_SUBST(RANLIB)
286 else
287     AC_PROG_RANLIB
288 fi
289 ])
290
291 dnl
292 dnl AC_SHEBANG_PERL - can we she-bang perl?
293 dnl
294 AC_DEFUN(FPTOOLS_SHEBANG_PERL,
295 [AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
296 [echo "#!$PerlCmd"'
297 exit $1;
298 ' > conftest
299 chmod u+x conftest
300 (SHELL=/bin/sh; export SHELL; ./conftest 69 > /dev/null)
301 if test $? -ne 69; then
302    fptools_cv_shebang_perl=yes
303 else
304    fptools_cv_shebang_perl=no
305 fi
306 rm -f conftest
307 ])])
308
309 dnl
310 dnl Extra testing of the result AC_PROG_CC, testing the gcc version no.
311 dnl *Must* be called after AC_PROG_CC
312 dnl
313 AC_DEFUN(FPTOOLS_HAVE_GCC,
314 [AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
315 [if test -z "$GCC"; then
316     echo ''
317     echo "You would be better off with gcc"
318     echo "Perhaps it is already installed, but not in your PATH?"
319     fptools_cv_have_gcc='no'
320 else
321 changequote(, )dnl
322     cmd_string="`$CC -v 2>&1 | grep 'version ' | sed -e 's/.*version [^0-9]*\([0-9][0-9]*\)\.\([0-9][0-9]*\).*/expr 20 \\\< \1 \\\* 10 + \2/g' `"
323 changequote([, ])dnl
324     if test `eval $cmd_string 2>/dev/null` != "1"; then
325         echo ''
326         echo "I'm not sure if your version of gcc will work,"
327         echo "but it's worth a shot, eh?"
328     fi
329     fptools_cv_have_gcc='yes'
330 fi
331 ])
332 HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
333 AC_SUBST(HaveGcc)
334 ])
335
336 dnl Small feature test for perl version. Assumes PerlCmd
337 dnl contains path to perl binary
338 dnl
339 AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
340 [$PerlCmd -v >conftest.out 2>&1
341 if grep "version 5" conftest.out >/dev/null 2>&1; then
342    :
343 else
344    if grep "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 Test for version of installed ghc.  Uses $GHC.  Largely pinched from c2hs.
354 dnl
355 AC_DEFUN(FPTOOLS_GHC_VERSION,
356 [ AC_CACHE_CHECK([version of ghc], fptools_cv_ghc_version, [
357     fptools_cv_ghc_version=`$GHC --version 2>&1 | sed -e 's/.*\([[0-9]]\)\.\([[0-9]]*\)\([[.-]]\([[0-9]]*\)\)\?.*/\1.\2.\4/'`
358   ])
359   ghc_maj_vers=`echo $fptools_cv_ghc_version | sed -e 's/^\([[0-9]]\).*/\1/'`
360   ghc_min_vers=`echo $fptools_cv_ghc_version | sed -e 's/^[[0-9]]\.\([[0-9]]*\).*/\1/'`
361   ghc_patch_level=`echo $fptools_cv_ghc_version | sed -e 's/^[[0-9]]\.[[0-9]]*\.\([[0-9]]*\)/\1/'`
362
363   if test "$ghc_patch_level" = ""; then 
364         GhcVersion=$ghc_maj_vers.$ghc_min_vers
365         ghc_patch_level="0"
366   else
367         GhcVersion=$ghc_maj_vers.$ghc_min_vers.$ghc_patch_level
368   fi
369
370   GhcMajVersion=$ghc_maj_vers
371   GhcMinVersion=$ghc_min_vers
372   GhcPatchLevel=$ghc_patch_level
373
374   AC_SUBST(GhcVersion)
375   AC_SUBST(GhcMajVersion)
376   AC_SUBST(GhcMinVersion)
377   AC_SUBST(GhcPatchLevel)
378 ])
379
380 dnl ** figure out the alignment restriction of a type
381 dnl    (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
382 dnl     so we can't call REQUIRE)
383
384 dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
385 AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
386 [changequote(<<, >>)dnl
387 dnl The name to #define.
388 define(<<AC_TYPE_NAME>>, translit(alignment_$1, [a-z *], [A-Z_P]))dnl
389 dnl The cache variable name.
390 define(<<AC_CV_NAME>>, translit(ac_cv_alignment_$1, [ *], [_p]))dnl
391 dnl The name of the corresponding size.
392 define(<<AC_CV_SIZEOF_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
393 changequote([, ])dnl
394 AC_MSG_CHECKING(alignment of $1)
395 AC_CACHE_VAL(AC_CV_NAME,
396 [AC_TRY_RUN([
397 #include <stdio.h>
398 #if HAVE_STDDEF_H
399 #include <stddef.h>
400 #endif
401 #ifndef offsetof
402 #define offsetof(ty,field) ((size_t)((char *)&((ty *)0)->field - (char *)(ty *)0))
403 #endif
404 int
405 main()
406 {
407   FILE *f=fopen("conftestval", "w");
408   if (!f) exit(1);
409   fprintf(f, "%d\n", offsetof(struct { char c; $1 ty;},ty));
410   exit(0);
411 }],
412 AC_CV_NAME=`cat conftestval`,
413 AC_CV_NAME=$AC_CV_SIZEOF_NAME,
414 AC_CV_NAME=$AC_CV_SIZEOF_NAME)])
415 AC_MSG_RESULT($AC_CV_NAME)
416 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
417 AC_PROVIDE($AC_TYPE_NAME)
418 undefine([AC_TYPE_NAME])dnl
419 undefine([AC_CV_NAME])dnl
420 undefine([AC_CV_SIZEOF_NAME])dnl
421 ])
422
423 dnl ** Map an arithmetic C type to a Haskell type.
424 dnl    Based on autconf's AC_CHECK_SIZEOF.
425
426 dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
427 AC_DEFUN(FPTOOLS_CHECK_HTYPE,
428 [changequote(<<, >>)dnl
429 dnl The name to #define.
430 define(<<AC_TYPE_NAME>>, translit(htype_$1, [a-z *], [A-Z_P]))dnl
431 dnl The cache variable name.
432 define(<<AC_CV_NAME>>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl
433 changequote([, ])dnl
434 AC_MSG_CHECKING(Haskell type for $1)
435 AC_CACHE_VAL(AC_CV_NAME,
436 [AC_TRY_RUN([#include <stdio.h>
437 #include <stddef.h>
438 #ifdef HAVE_SIGNAL_H
439 #include <signal.h>
440 #endif
441 #ifdef HAVE_TIME_H
442 #include <time.h>
443 #endif
444
445 typedef $1 testing;
446
447 main() {
448   FILE *f=fopen("conftestval", "w");
449   if (!f) exit(1);
450   if (((testing)((int)((testing)1.4))) == ((testing)1.4)) {
451     fprintf(f, "%s%d\n",
452            ((testing)(-1) < (testing)0) ? "Int" : "Word",
453            sizeof(testing)*8);
454   } else {
455     fprintf(f,"%s\n",
456            (sizeof(testing) >  sizeof(double)) ? "LDouble" :
457            (sizeof(testing) == sizeof(double)) ? "Double"  : "Float");
458   }
459   fclose(f);
460   exit(0);
461 }], AC_CV_NAME=`cat conftestval`,
462 ifelse([$2], , AC_CV_NAME=NotReallyAType,      AC_CV_NAME=$2),
463 ifelse([$3], , AC_CV_NAME=NotReallyATypeCross, AC_CV_NAME=$3))]) dnl
464 AC_MSG_RESULT($AC_CV_NAME)
465 AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME)
466 undefine([AC_TYPE_NAME])dnl
467 undefine([AC_CV_NAME])dnl
468 ])
469
470 dnl ** figure out whether C compiler supports 'long long's
471 dnl    (Closely based on Andreas Zeller's macro for testing
472 dnl     for this under C++)
473 dnl
474 dnl    If the C compiler supports `long long' types,
475 dnl    define `HAVE_LONG_LONG'.
476 dnl
477 AC_DEFUN(FPTOOLS_C_LONG_LONG,
478 [
479 AC_REQUIRE([AC_PROG_CC])
480 AC_MSG_CHECKING(whether ${CC} supports long long types)
481 AC_CACHE_VAL(fptools_cv_have_long_long,
482 [
483 AC_LANG_SAVE
484 AC_LANG_C
485 AC_TRY_COMPILE(,[long long a;],
486 fptools_cv_have_long_long=yes,
487 fptools_cv_have_long_long=no)
488 AC_LANG_RESTORE
489 ])
490 AC_MSG_RESULT($fptools_cv_have_long_long)
491 if test "$fptools_cv_have_long_long" = yes; then
492 AC_DEFINE(HAVE_LONG_LONG)
493 fi
494 ])
495
496 dnl *** Can we open files in binary mode? ***
497 dnl 
498 AC_DEFUN(FPTOOLS_O_BINARY,
499 [
500 AC_REQUIRE([AC_PROG_CC])
501 AC_MSG_CHECKING(whether we can open files in binary mode)
502 AC_CACHE_VAL(fptools_cv_have_o_binary,
503 [
504 AC_LANG_SAVE
505 AC_LANG_C
506 AC_TRY_COMPILE(,
507 [#ifdef HAVE_FCNTL_H
508 #include <fcntl.h>
509 #endif
510 int x = O_BINARY;],
511 fptools_cv_have_o_binary=yes,
512 fptools_cv_have_o_binary=no)
513 AC_LANG_RESTORE
514 ])
515 AC_MSG_RESULT($fptools_cv_have_o_binary)
516 if test "$fptools_cv_have_o_binary" = yes; then
517 AC_DEFINE(HAVE_O_BINARY)
518 fi
519 ])
520
521 dnl *** Which one comes first, .text or .data? ***
522 dnl 
523 AC_DEFUN(FPTOOLS_CODE_BEFORE_DATA,
524 [AC_CACHE_CHECK([if code section appears before data], fptools_cv_code_bef_data,
525 [AC_TRY_RUN([
526 int f() { return 1; }
527 int i;
528 int main() { return ((char*)&f > (char*)&i); }
529
530 ],
531 fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
532 if test "$fptools_cv_code_bef_data" = yes; then
533   AC_DEFINE(CODE_BEFORE_DATA)
534 fi
535 ])
536
537 dnl *** Helper function **
538 dnl 
539 AC_DEFUN(FPTOOLS_IN_SCOPE,AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no))
540
541 dnl *** What's the end-of-text-section marker called? ***
542 dnl
543 AC_DEFUN(FPTOOLS_END_TEXT_SECTION,
544 [AC_MSG_CHECKING([for end of text section marker])
545 not_done=1
546 for i in data_start _data_start etext _etext __etext; do
547   FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
548   if test "$fptools_end_of_text" = yes; then
549    AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, $i))
550    AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, $i))
551    not_done=0
552    break
553   fi
554 done
555 if test "$not_done" = 1; then
556 FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text);
557 if test "$fptools_end_of_text" = yes; then
558   AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, etext))
559   AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, etext asm("etext")))
560 else
561   AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, dunno_what_it_is)
562   AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, dunno_what_it_is)
563 fi
564 fi
565 AC_MSG_RESULT([$]fptools_cv_end_of_text)
566 ])
567
568 dnl *** What's the end-of-data-section marker called? ***
569 dnl
570 AC_DEFUN(FPTOOLS_END_DATA_SECTION,
571 [AC_MSG_CHECKING([for end of data section marker])
572 not_done=1
573 for i in end _end __end; do
574   FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
575   if test "$fptools_end_of_data" = yes; then
576    AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, $i)])
577    AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, $i)])
578    not_done=0
579    break
580   fi
581 done
582 if test "$not_done" = 1; then
583 FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data);
584 if test "$fptools_end_of_data" = yes; then
585   AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, end asm("end"))])
586   AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, end)])
587 else
588   AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, dunno_what_it_is)])
589   AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, dunno_what_it_is)])
590 fi
591 fi
592 AC_MSG_RESULT([$]fptools_cv_end_of_data)
593 ])
594
595
596
597 dnl Based on AC_TRY_LINK - run iftrue if links cleanly with no warning
598
599 dnl FPTOOLS_TRY_LINK_NOWARN(flags,main?,iftrue,iffalse)
600
601 AC_DEFUN(FPTOOLS_TRY_LINK_NOWARN,
602 [
603 ac_save_LIBS="$LIBS"
604 LIBS=[$1];
605 cat > conftest.$ac_ext <<EOF
606 dnl This sometimes fails to find confdefs.h, for some reason.
607 dnl [#]line __oline__ "[$]0"
608 [#]line __oline__ "configure"
609 #include "confdefs.h"
610 [$2]
611 int t() { return 0; }
612 EOF
613 if AC_TRY_EVAL(ac_link); then
614   ifelse([$3], , :, [
615     LIBS="$ac_save_LIBS"
616     rm -rf conftest*
617     $3])
618   ifelse([$4], , , [else
619     LIBS="$ac_save_LIBS"
620     rm -rf conftest*
621     $4
622 ])dnl
623 fi
624 rm -f conftest*
625 ]
626 )
627
628 dnl Loosely based on AC_CHECK_LIB in acgeneral.m4 in autoconf distribution
629
630 dnl FPTOOLS_CHECK_FLAG_NOWARN(NAME, FLAG, CODE, iftrue, iffalse)
631
632 AC_DEFUN(FPTOOLS_CHECK_FLAG_NOWARN,
633 [AC_MSG_CHECKING([for $1])
634  AC_CACHE_VAL(ac_cv_flag_$1,
635    [FPTOOLS_TRY_LINK_NOWARN("$2", [main() { $3; exit(0); } ],
636      eval "ac_cv_flag_$1=yes",
637      eval "ac_cv_flag_$1=no"
638    )]
639  )
640 if eval "test \"`echo '$ac_cv_flag_'$1`\" = yes"; then
641   AC_MSG_RESULT(yes)
642   LIBS="$2 $LIBS"
643   $4
644 else
645   AC_MSG_RESULT(no)
646   $5
647 fi
648 ])
649
650 dnl FPTOOLS_CHECK_LIB_NOWARN(LIBRARY, FUNCTION)
651
652 AC_DEFUN(FPTOOLS_CHECK_LIB_NOWARN,
653 [FPTOOLS_CHECK_FLAG_NOWARN([function_$2],[],[extern char $2(); $2();],
654 [changequote(, )dnl
655   ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
656  changequote([, ])dnl
657  AC_DEFINE_UNQUOTED($ac_tr_lib)
658 ],
659 [FPTOOLS_CHECK_FLAG_NOWARN([library_$1],[-l$1],[extern char $2(); $2();],
660 [changequote(, )dnl
661   ac_tr_lib=HAVE_LIB`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
662  changequote([, ])dnl
663  AC_DEFINE_UNQUOTED($ac_tr_lib)
664 ],
665 []
666 )])]
667 )
668
669 dnl check for prototypes
670 dnl
671 AC_DEFUN(AC_C_PROTOTYPES,
672 [AC_CACHE_CHECK([prototypes], ac_cv_prototypes,
673 [AC_TRY_COMPILE([
674 void foo(int);
675 void foo(i)
676 int i; { 
677 return;
678 }
679 ],
680 [int i;], 
681 ac_cv_prototypes=yes,
682 ac_cv_prototypes=no)])
683 if test "$ac_cv_prototypes" = yes; then
684 AC_DEFINE(HAVE_PROTOTYPES)
685 fi
686 ])
687
688 dnl ** Check which CATALOG file we have to use with DocBook SGML.
689 dnl
690 dnl FPTOOLS_DOCBOOK_CATALOG(VARIABLE, JADE, STYLESHEET, CATALOGS-TO-CHECK-FOR)
691 dnl
692 dnl If any of the catalogs given in CATALOGS-TO-CHECK-FOR works on this
693 dnl platform, let VARIABLE refer to this catalog; otherwise, VARIABLE
694 dnl is set to "no".  JADE is the jade executable and STYLESHEET
695 dnl a DocBook style sheet.
696 dnl
697 AC_DEFUN(FPTOOLS_DOCBOOK_CATALOG,
698 [AC_CACHE_CHECK([for DocBook CATALOG], fptools_cv_sgml_catalog,
699 [
700 cat > conftest.sgml << EOF
701 <!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">
702 <Article>
703 <ArtHeader>
704 <Title>Test</Title>
705 <Author><OtherName>Test</OtherName></Author>
706 <Address>Test</Address>
707 <PubDate>Test</PubDate>
708 </ArtHeader>
709 <Sect1><Title>Test</Title>
710 <Para>
711 Test.
712 </Para>
713 </Sect1>
714 </Article>
715 EOF
716 fptools_cv_sgml_catalog=no
717 for fptools_catalog in $4; do
718   ac_try="$2 -t rtf -d $3#print -c $fptools_catalog conftest.sgml"
719   if AC_TRY_EVAL(ac_try); then
720     fptools_cv_sgml_catalog=[$]fptools_catalog
721     break
722   fi
723 done
724 ])
725 rm -rf conftest*
726 if test $fptools_cv_sgml_catalog != "no"; then
727   $1=$fptools_cv_sgml_catalog
728 fi
729 ])
730
731
732 # LocalWords:  fi