aclocal.m4 21 KB
Newer Older
1
dnl $Id: aclocal.m4,v 1.55 2000/07/13 09:17:57 michaelw 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 84 85 86 87 88 89 90 91 92 93 94
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>
],[ struct re_pattern_buffer patbuf; re_compile_pattern("",0,&patbuf); ],
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
95
dnl ** check for leading underscores in symbol names
sof's avatar
sof committed
96 97 98 99 100 101
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
102 103 104 105 106
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
107
AC_DEFUN(FPTOOLS_UNDERSCORE,
sof's avatar
sof committed
108
[AC_CHECK_LIB(elf, nlist, LIBS="-lelf $LIBS")dnl
sof's avatar
sof committed
109
AC_CACHE_CHECK([leading underscore in symbol names], fptools_cv_lead_uscore,
sof's avatar
sof committed
110 111 112

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

main(argc, argv)
int argc;
char **argv;
{
#ifdef HAVE_NLIST_H
138 139 140
    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
141 142 143 144
        exit(0);>>
changequote([, ])dnl
#endif
    exit(1);
145
}], fptools_cv_lead_uscore=yes, fptools_cv_lead_uscore=no, fptools_cv_lead_uscore=NO)
146 147
;;
esac);
sof's avatar
sof committed
148
LeadingUnderscore=`echo $fptools_cv_lead_uscore | sed 'y/yesno/YESNO/'`
sof's avatar
sof committed
149
AC_SUBST(LeadingUnderscore)
150 151 152
case $LeadingUnderscore in
YES) AC_DEFINE(LEADING_UNDERSCORE);;
esac
sof's avatar
sof committed
153 154
])

sof's avatar
sof committed
155
dnl
156 157 158 159 160 161
dnl Check for Happy and version.  If we're building GHC, then we need
dnl at least Happy version 1.6.  If there's no installed Happy, we look
dnl for a happy source tree and point the build system at that instead.
dnl
dnl ToDo: when we reset HappyCmd to the source tree, autoconf doesn't
dnl seems to insert it in the cache file.  sigh.
sof's avatar
sof committed
162
dnl
sof's avatar
sof committed
163
AC_DEFUN(FPTOOLS_HAPPY,
164
[AC_PATH_PROG(HappyCmd,happy)
sof's avatar
sof committed
165
AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version,
sof's avatar
sof committed
166
[if test x"$HappyCmd" != x; then
sof's avatar
sof committed
167
   fptools_cv_happy_version="`$HappyCmd -v |
sof's avatar
sof committed
168 169
changequote(, )dnl
			  grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ;
170 171 172 173
elif test -d $srcdir/happy; then
   HappyCmd=$hardtop/happy/src/happy-inplace;
   fptools_cv_happy_version=`grep '^ProjectVersion[ 	]*=' $srcdir/happy/mk/version.mk | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`;
   echo -n "using happy from the source tree... ";
sof's avatar
sof committed
174
else
sof's avatar
sof committed
175
   fptools_cv_happy_version="";
sof's avatar
sof committed
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 181 182 183
     echo
     echo "Happy version 1.6 or later is required to compile GHC."
     exit 1;
   fi
184
fi;
sof's avatar
sof committed
185
])
186
HappyVersion=$fptools_cv_happy_version;
sof's avatar
sof committed
187 188 189
AC_SUBST(HappyVersion)
])

sof's avatar
sof committed
190 191 192 193 194
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
195 196
AC_DEFUN(FPTOOLS_PROG_DIFF,
[AC_CACHE_CHECK([for ok way to do context diffs], fptools_cv_context_diffs,
sof's avatar
sof committed
197 198 199
[echo foo > conftest1
echo foo > conftest2
if diff -C 1 conftest1 conftest2 > /dev/null 2>&1 ; then
sof's avatar
sof committed
200
    fptools_cv_context_diffs='diff -C 1'
sof's avatar
sof committed
201 202
else
    if diff -c1 conftest1 conftest2 > /dev/null 2>&1 ; then
sof's avatar
sof committed
203
        fptools_cv_context_diffs='diff -c1'
sof's avatar
sof committed
204 205 206 207 208 209 210
    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
211
])
sof's avatar
sof committed
212
ContextDiffCmd=$fptools_cv_context_diffs
sof's avatar
sof committed
213
AC_SUBST(ContextDiffCmd)
sof's avatar
sof committed
214 215
])

sof's avatar
sof committed
216 217 218
dnl
dnl Finding the Right Yacc
dnl
sof's avatar
sof committed
219
AC_DEFUN(FPTOOLS_PROG_YACCY,
sof's avatar
sof committed
220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248
[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
249

sof's avatar
sof committed
250 251 252 253
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
254
AC_DEFUN(FPTOOLS_PROG_AR_AND_RANLIB,
sof's avatar
sof committed
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 280 281 282 283 284 285 286 287 288 289 290
[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
291
dnl
sof's avatar
sof committed
292
dnl AC_SHEBANG_PERL - can we she-bang perl?
sof's avatar
sof committed
293
dnl
sof's avatar
sof committed
294 295
AC_DEFUN(FPTOOLS_SHEBANG_PERL,
[AC_CACHE_CHECK([if your perl works in shell scripts], fptools_cv_shebang_perl,
sof's avatar
sof committed
296 297 298 299 300 301
[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
302
   fptools_cv_shebang_perl=yes
sof's avatar
sof committed
303
else
sof's avatar
sof committed
304
   fptools_cv_shebang_perl=no
sof's avatar
sof committed
305 306 307 308
fi
rm -f conftest
])])

sof's avatar
sof committed
309 310 311 312
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
313 314
AC_DEFUN(FPTOOLS_HAVE_GCC,
[AC_CACHE_CHECK([whether you have an ok gcc], fptools_cv_have_gcc,
sof's avatar
sof committed
315 316 317 318
[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
319
    fptools_cv_have_gcc='no'
sof's avatar
sof committed
320 321
else
changequote(, )dnl
sof's avatar
sof committed
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' `"
sof's avatar
sof committed
323 324 325 326 327 328
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
329
    fptools_cv_have_gcc='yes'
sof's avatar
sof committed
330 331
fi
])
sof's avatar
sof committed
332
HaveGcc=`echo $fptools_cv_have_gcc | sed 'y/yesno/YESNO/'`
sof's avatar
sof committed
333 334 335
AC_SUBST(HaveGcc)
])

sof's avatar
sof committed
336 337 338
dnl Small feature test for perl version. Assumes PerlCmd
dnl contains path to perl binary
dnl
sof's avatar
sof committed
339
AC_DEFUN(FPTOOLS_CHECK_PERL_VERSION,
sof's avatar
sof committed
340
[$PerlCmd -v >conftest.out 2>&1
rrt's avatar
rrt committed
341 342
if grep "version 5" conftest.out >/dev/null 2>&1; then
   :
sof's avatar
sof committed
343
else
rrt's avatar
rrt committed
344
   if grep "version 6" conftest.out >/dev/null 2>&1; then
sof's avatar
sof committed
345 346
      :
   else
rrt's avatar
rrt committed
347
     echo "Your version of perl probably won't work."
sof's avatar
sof committed
348 349 350 351
   fi
fi
rm -fr conftest*
])
reid's avatar
reid committed
352

353 354 355
dnl
dnl FPTOOLS_GHC_VERSION(version)
dnl FPTOOLS_GHC_VERSION(major, minor [, patchlevel])
356
dnl FPTOOLS_GHC_VERSION(version, major, minor, patchlevel)
357 358
dnl
dnl Test for version of installed ghc.  Uses $GHC.
359
dnl [original version pinched from c2hs]
360
dnl
361
AC_DEFUN(FPTOOLS_GHC_VERSION,
362 363 364 365 366 367
[define([FPTOOLS_CV_GHC_VERSION], [fptools_cv_ghc_version])dnl
AC_CACHE_CHECK([version of ghc], FPTOOLS_CV_GHC_VERSION, [dnl
${GHC-ghc} --version > conftestghc 2>&1
  cat conftestghc >&AC_FD_CC
dnl `Useless Use Of cat' award...
changequote(<<, >>)dnl
368
  FPTOOLS_CV_GHC_VERSION=`cat conftestghc | sed -n -e 's/, patchlevel *\([0-9]\)/.\1/;s/.* version \([0-9.]\+\).*/\1/p'`
369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400
changequote([, ])dnl
  rm -fr conftest*
  if test "[$]FPTOOLS_CV_GHC_VERSION" = ""
  then
    FPTOOLS_CV_GHC_VERSION='unknown'
  fi])
changequote(<<, >>)dnl
FPTOOLS_CV_GHC_VERSION<<_major>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -e 's/^\([0-9]\).*/\1/'`
FPTOOLS_CV_GHC_VERSION<<_minor>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -e 's/^[0-9]\.\([0-9]*\).*/\1/'`
FPTOOLS_CV_GHC_VERSION<<_pl>>=`echo <<$>>FPTOOLS_CV_GHC_VERSION | sed -n -e 's/^[0-9]\.[0-9]*\.\([0-9]*\)/\1/p'`
changequote([, ])dnl
if test "[$]FPTOOLS_CV_GHC_VERSION[_pl]" = ""
then
  FPTOOLS_CV_GHC_VERSION[_all]="[$]FPTOOLS_CV_GHC_VERSION[_major].[$]FPTOOLS_CV_GHC_VERSION[_minor]"
  FPTOOLS_CV_GHC_VERSION[_pl]="0"
else
  FPTOOLS_CV_GHC_VERSION[_all]="[$]FPTOOLS_CV_GHC_VERSION[_major].[$]FPTOOLS_CV_GHC_VERSION[_minor].[$]FPTOOLS_CV_GHC_VERSION[_pl]"
fi
ifelse($#, [1], [dnl
[$1]="[$]FPTOOLS_CV_GHC_VERSION[_all]"
], $#, [2], [dnl
[$1]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
[$2]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
], $#, [3], [dnl
[$1]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
[$2]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
[$3]="[$]FPTOOLS_CV_GHC_VERSION[_pl]"
], $#, [4], [dnl
[$1]="[$]FPTOOLS_CV_GHC_VERSION[_all]"
[$2]="[$]FPTOOLS_CV_GHC_VERSION[_major]"
[$3]="[$]FPTOOLS_CV_GHC_VERSION[_minor]"
[$4]="[$]FPTOOLS_CV_GHC_VERSION[_pl]"
401 402
], [AC_MSG_ERROR([wrong number of arguments to [$0]])])dnl
undefine([FPTOOLS_CV_GHC_VERSION])dnl
403
])dnl
404 405


sof's avatar
sof committed
406
dnl ** figure out the alignment restriction of a type
reid's avatar
reid committed
407 408 409
dnl    (required SIZEOF test but AC_CHECK_SIZEOF doesn't call PROVIDE
dnl     so we can't call REQUIRE)

sof's avatar
sof committed
410 411
dnl FPTOOLS_CHECK_ALIGNMENT(TYPE)
AC_DEFUN(FPTOOLS_CHECK_ALIGNMENT,
reid's avatar
reid committed
412 413 414 415 416 417 418 419 420 421 422
[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
423 424 425 426 427 428 429 430
#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
431 432
main()
{
sof's avatar
sof committed
433 434 435 436 437 438
  FILE *f=fopen("conftestval", "w");
  if (!f) exit(1);
  fprintf(f, "%d\n", offsetof(struct { char c; $1 ty;},ty));
  exit(0);
}],
AC_CV_NAME=`cat conftestval`,
reid's avatar
reid committed
439 440 441 442 443 444 445 446 447 448
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
])

449 450 451
dnl ** Map an arithmetic C type to a Haskell type.
dnl    Based on autconf's AC_CHECK_SIZEOF.

452
dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION])
453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486
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

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);
487 488 489
}], 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
490 491 492 493 494 495
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
496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520
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
521 522 523 524 525 526 527 528 529 530 531

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
532 533 534 535 536
AC_TRY_COMPILE(,
[#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
int x = O_BINARY;],
sof's avatar
sof committed
537 538 539 540 541 542 543 544 545
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
546

sof's avatar
sof committed
547 548 549 550 551 552 553 554 555 556
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
557
fptools_cv_code_bef_data=yes, fptools_cv_code_bef_data=no,false)])
sof's avatar
sof committed
558 559 560 561 562 563 564 565 566 567 568 569
if test "$fptools_cv_code_bef_data" = yes; then
  AC_DEFINE(CODE_BEFORE_DATA)
fi
])

dnl *** Helper function **
dnl 
AC_DEFUN(FPTOOLS_IN_SCOPE,AC_TRY_LINK([extern char* $1;],[return (int)&$2], $3=yes, $3=no))

dnl *** What's the end-of-text-section marker called? ***
dnl
AC_DEFUN(FPTOOLS_END_TEXT_SECTION,
sof's avatar
sof committed
570
[AC_MSG_CHECKING([for end of text section marker])
sof's avatar
sof committed
571
not_done=1
572
for i in data_start _data_start etext _etext __etext; do
sof's avatar
sof committed
573 574 575 576
  FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_text)
  if test "$fptools_end_of_text" = yes; then
   AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, $i))
   AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, $i))
sof's avatar
sof committed
577 578 579 580
   not_done=0
   break
  fi
done
581
if test "$not_done" = 1; then
sof's avatar
sof committed
582 583 584 585
FPTOOLS_IN_SCOPE(etext asm("etext"),etext,fptools_end_of_text);
if test "$fptools_end_of_text" = yes; then
  AC_CACHE_VAL([fptools_cv_end_of_text], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, etext))
  AC_CACHE_VAL([fptools_cv_end_of_text_decl], AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, etext asm("etext")))
sof's avatar
sof committed
586
else
sof's avatar
sof committed
587 588
  AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER_DECL, dunno_what_it_is)
  AC_DEFINE_UNQUOTED(TEXT_SECTION_END_MARKER, dunno_what_it_is)
sof's avatar
sof committed
589 590
fi
fi
sof's avatar
sof committed
591 592
AC_MSG_RESULT([$]fptools_cv_end_of_text)
])
sof's avatar
sof committed
593 594 595 596

dnl *** What's the end-of-data-section marker called? ***
dnl
AC_DEFUN(FPTOOLS_END_DATA_SECTION,
sof's avatar
sof committed
597
[AC_MSG_CHECKING([for end of data section marker])
sof's avatar
sof committed
598 599
not_done=1
for i in end _end __end; do
sof's avatar
sof committed
600 601 602 603
  FPTOOLS_IN_SCOPE($i,$i,fptools_end_of_data)
  if test "$fptools_end_of_data" = yes; then
   AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, $i)])
   AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, $i)])
sof's avatar
sof committed
604 605 606 607
   not_done=0
   break
  fi
done
608
if test "$not_done" = 1; then
sof's avatar
sof committed
609 610 611 612
FPTOOLS_IN_SCOPE(end asm("end"),end,fptools_end_of_data);
if test "$fptools_end_of_data" = yes; then
  AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, end asm("end"))])
  AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, end)])
sof's avatar
sof committed
613
else
sof's avatar
sof committed
614 615
  AC_CACHE_VAL([fptools_cv_end_of_data_decl], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER_DECL, dunno_what_it_is)])
  AC_CACHE_VAL([fptools_cv_end_of_data], [AC_DEFINE_UNQUOTED(DATA_SECTION_END_MARKER, dunno_what_it_is)])
sof's avatar
sof committed
616 617
fi
fi
sof's avatar
sof committed
618 619
AC_MSG_RESULT([$]fptools_cv_end_of_data)
])
reid's avatar
reid committed
620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713



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
AC_DEFUN(AC_C_PROTOTYPES,
[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
AC_DEFINE(HAVE_PROTOTYPES)
fi
])

chak's avatar
chak committed
714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756
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
])

reid's avatar
reid committed
757 758

# LocalWords:  fi