X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=aclocal.m4;h=0432ed354b7aa2f1c362b6f086f21cfaf2c8a49c;hp=858a3f0a6cc2fa6c458cfd205904ef27a5d2e56d;hb=refs%2Ftags%2F2008-06-01;hpb=2909e6fb2223bd303e00b34d3a04466474c53f03 diff --git a/aclocal.m4 b/aclocal.m4 index 858a3f0..0432ed3 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,9 +1,48 @@ + struct sigevent ev; + timer_t timer; + ev.sigev_notify = SIGEV_SIGNAL; + ev.sigev_signo = SIGVTALRM; + if (timer_create(CLOCK_PROCESS_CPUTIME_ID, &ev, &timer) != 0) { + exit(1); + } +#else + exit(1) +#endif + exit(0); +} # Extra autoconf macros for the Glasgow fptools # # To be a good autoconf citizen, names of local macros have prefixed with FP_ to # ensure we don't clash with any pre-supplied autoconf ones. +# FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN +# ---------------------------------- +# Little endian Arm on Linux with some ABIs has big endian word order +# in doubles. Define FLOAT_WORDS_BIGENDIAN if this is the case. +AC_DEFUN([FPTOOLS_FLOAT_WORD_ORDER_BIGENDIAN], + [AC_CACHE_CHECK([whether float word order is big endian], [fptools_cv_float_word_order_bigendian], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [#include ], + [#if defined(__FLOAT_WORD_ORDER) && __FLOAT_WORD_ORDER == BIG_ENDIAN + return 0; + #else + not float word order big endian + #endif] + )], + [fptools_cv_float_word_order_bigendian=yes], + [fptools_cv_float_word_order_bigendian=no]) + ]) + case $fptools_cv_float_word_order_bigendian in + yes) + AC_DEFINE([FLOAT_WORDS_BIGENDIAN], 1, + [Define to 1 if your processor stores words of floats with + the most significant byte first]) ;; + esac +]) + + # FP_EVAL_STDERR(COMMAND) # ----------------------- # Eval COMMAND, save its stderr (without lines resulting from shell tracing) @@ -75,27 +114,6 @@ AC_SUBST(ContextDiffCmd, [$fp_cv_context_diff]) ])# FP_PROG_CONTEXT_DIFF -# FP_DECL_ALTZONE -# --------------- -# Defines HAVE_DECL_ALTZONE to 1 if declared, 0 otherwise. -# -# Used by base package. -AC_DEFUN([FP_DECL_ALTZONE], -[AC_REQUIRE([AC_HEADER_TIME])dnl -AC_CHECK_HEADERS([sys/time.h]) -AC_CHECK_DECLS([altzone], [], [],[#if TIME_WITH_SYS_TIME -# include -# include -#else -# if HAVE_SYS_TIME_H -# include -# else -# include -# endif -#endif]) -])# FP_DECL_ALTZONE - - # FP_COMPUTE_INT(EXPRESSION, VARIABLE, INCLUDES, IF-FAILS) # -------------------------------------------------------- # Assign VARIABLE the value of the compile-time EXPRESSION using INCLUDES for @@ -162,6 +180,10 @@ case $HostPlatform in alpha-dec-osf*) fptools_cv_leading_underscore=no;; *cygwin32) fptools_cv_leading_underscore=yes;; *mingw32) fptools_cv_leading_underscore=yes;; + + # HACK: Apple doesn't seem to provide nlist in the 64-bit-libraries +x86_64-apple-darwin*) fptools_cv_leading_underscore=yes;; + *) AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifdef HAVE_NLIST_H #include struct nlist xYzzY1[] = {{"xYzzY1", 0},{0}}; @@ -245,26 +267,10 @@ dnl at least Happy version 1.14. If there's no installed Happy, we look dnl for a happy source tree and point the build system at that instead. dnl AC_DEFUN([FPTOOLS_HAPPY], -[ -if test -d $srcdir/happy; then - SrcTreeHappyCmd=$hardtop/happy/src/happy-inplace -else - SrcTreeHappyCmd="" -fi -if test x"$UseSrcTreeHappy" = xYES; then - if test x"$SrcTreeHappyCmd" != x; then - HappyCmd=$SrcTreeHappyCmd - else - AC_MSG_ERROR([--enable-src-tree-happy given, but happy not found in source tree]) - fi -else - AC_PATH_PROG(HappyCmd,happy,$SrcTreeHappyCmd) -fi +[AC_PATH_PROG(HappyCmd,happy,) AC_CACHE_CHECK([for version of happy], fptools_cv_happy_version, changequote(, )dnl -[if test x"$HappyCmd" = x"$SrcTreeHappyCmd" -a -e $srcdir/happy/mk/version.mk; then - fptools_cv_happy_version=`grep '^ProjectVersion[ ]*=' $srcdir/happy/mk/version.mk | sed 's/[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`; -elif test x"$HappyCmd" != x; then +[if test x"$HappyCmd" != x; then fptools_cv_happy_version="`$HappyCmd -v | grep 'Happy Version' | sed -e 's/Happy Version \([^ ]*\).*/\1/g'`" ; else @@ -272,9 +278,10 @@ else fi; changequote([, ])dnl ]) -if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Parser.hs; then - FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.15], - [AC_MSG_ERROR([Happy version 1.15 or later is required to compile GHC.])])[]dnl +if test ! -f compiler/parser/Parser.hs || test ! -f compiler/main/ParsePkgConf.hs || test ! -f compiler/cmm/CmmParse.hs || test ! -f compiler/parser/ParserCore.hs +then + FP_COMPARE_VERSIONS([$fptools_cv_happy_version],[-lt],[1.15], + [AC_MSG_ERROR([Happy version 1.15 or later is required to compile GHC.])])[]dnl fi HappyVersion=$fptools_cv_happy_version; AC_SUBST(HappyVersion) @@ -285,21 +292,7 @@ dnl Check for Haddock and version. If there's no installed Haddock, we look dnl for a haddock source tree and point the build system at that instead. dnl AC_DEFUN([FPTOOLS_HADDOCK], -[ -if test -d $srcdir/haddock; then - SrcTreeHaddockCmd=$hardtop/haddock/src/haddock-inplace -else - SrcTreeHaddockCmd="" -fi -if test x"$UseSrcTreeHaddock" = xYES; then - if test x"$SrcTreeHaddockCmd" != x; then - HaddockCmd=$SrcTreeHaddockCmd - else - AC_MSG_ERROR([--enable-src-tree-haddock given, but haddock not found in source tree]) - fi -else - AC_PATH_PROG(HaddockCmd,haddock,$SrcTreeHaddockCmd) -fi +[AC_PATH_PROG(HaddockCmd,haddock,) dnl Darn, I forgot to make Haddock print out its version number when dnl invoked with -v. We could try generating some HTML and grepping dnl through that to find the version number, but I think we'll make @@ -308,30 +301,14 @@ dnl do without it for now. dnl dnl Check for Alex and version. If we're building GHC, then we need -dnl at least Alex version 2.0. If there's no installed Alex, we look -dnl for a alex source tree and point the build system at that instead. +dnl at least Alex version 2.0.1. dnl AC_DEFUN([FPTOOLS_ALEX], [ -if test -d $srcdir/alex; then - SrcTreeAlexCmd=$hardtop/alex/src/alex-inplace -else - SrcTreeAlexCmd="" -fi -if test x"$UseSrcTreeAlex" = xYES; then - if test x"$SrcTreeAlexCmd" != x; then - AlexCmd=$SrcTreeAlexCmd - else - AC_MSG_ERROR([--enable-src-tree-alex given, but alex not found in source tree]) - fi -else - AC_PATH_PROG(AlexCmd,alex,$SrcTreeAlexCmd) -fi +AC_PATH_PROG(AlexCmd,alex,) AC_CACHE_CHECK([for version of alex], fptools_cv_alex_version, changequote(, )dnl -[if test x"$AlexCmd" = x"$SrcTreeAlexCmd"; then - fptools_cv_alex_version=`grep '^ProjectVersion[ ]*=' $srcdir/alex/mk/version.mk | sed 's/[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`; -elif test x"$AlexCmd" != x; then +[if test x"$AlexCmd" != x; then fptools_cv_alex_version="`$AlexCmd -v | grep 'Alex [Vv]ersion' | sed -e 's/Alex [Vv]ersion \([0-9\.]*\).*/\1/g'`" ; else @@ -339,9 +316,10 @@ else fi; changequote([, ])dnl ]) -if test -d $srcdir/ghc -a ! -f $srcdir/ghc/compiler/parser/Lexer.hs; then - FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-lt],[2.0], - [AC_MSG_ERROR([Alex version 2.0 or later is required to compile GHC.])])[]dnl +if test ! -f compiler/cmm/CmmLex.hs || test ! -f compiler/parser/Lexer.hs +then + FP_COMPARE_VERSIONS([$fptools_cv_alex_version],[-lt],[2.0.1], + [AC_MSG_ERROR([Alex version 2.0.1 or later is required to compile GHC.])])[]dnl fi AlexVersion=$fptools_cv_alex_version; AC_SUBST(AlexVersion) @@ -353,24 +331,30 @@ AC_SUBST(AlexVersion) # Sets the output variable LdCmd to the (non-Cygwin version of the) full path # of ld. Exits if no ld can be found AC_DEFUN([FP_PROG_LD], -[AC_PATH_PROG([fp_prog_ld_raw], [ld]) -if test -z "$fp_prog_ld_raw"; then - AC_MSG_ERROR([cannot find ld in your PATH, no idea how to link]) +[ +if test -z "$1" +then + AC_PATH_PROG([fp_prog_ld_raw], [ld]) + if test -z "$fp_prog_ld_raw"; then + AC_MSG_ERROR([cannot find ld in your PATH, no idea how to link]) + fi + LdCmd=$fp_prog_ld_raw + case $HostPlatform in + *mingw32) if test x${OSTYPE} != xmsys; then + LdCmd="`cygpath -w ${fp_prog_ld_raw} | sed -e 's@\\\\@/@g'`" + AC_MSG_NOTICE([normalized ld command to $LdCmd]) + fi + # Insist on >= ld-2.15.x, since earlier versions doesn't handle + # the generation of relocatable object files with large amounts + # of relocations correctly. (cf. HSbase.o splittage-hack) + fp_prog_ld_version=`${LdCmd} --version | sed -n '/GNU ld/p' | tr -cd 0-9 | cut -b1-3` + FP_COMPARE_VERSIONS([$fp_prog_ld_version],[-lt],[214], + [AC_MSG_ERROR([GNU ld version later than 2.14 required to compile GHC on Windows.])])[]dnl + ;; + esac +else + LdCmd="$1" fi -LdCmd=$fp_prog_ld_raw -case $HostPlatform in - *mingw32) if test x${OSTYPE} != xmsys; then - LdCmd="`cygpath -w ${fp_prog_ld_raw} | sed -e 's@\\\\@/@g'`" - AC_MSG_NOTICE([normalized ld command to $LdCmd]) - fi - # Insist on >= ld-2.15.x, since earlier versions doesn't handle - # the generation of relocatable object files with large amounts - # of relocations correctly. (cf. HSbase.o splittage-hack) - fp_prog_ld_version=`${LdCmd} --version | sed -n '/GNU ld/p' | tr -cd 0-9 | cut -b1-3` - FP_COMPARE_VERSIONS([$fp_prog_ld_version],[-lt],[214], - [AC_MSG_ERROR([GNU ld version later than 2.14 required to compile GHC on Windows.])])[]dnl - ;; -esac AC_SUBST([LdCmd]) ])# FP_PROG_LD @@ -494,7 +478,7 @@ AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([whether ranlib is needed], [fp_cv_prog_ar_needs_ranlib], [if test $fp_prog_ar_is_gnu = yes; then fp_cv_prog_ar_needs_ranlib=no -elif test $TargetPlatform = powerpc-apple-darwin; then +elif echo $TargetPlatform | grep "^.*-apple-darwin$" > /dev/null 2> /dev/null; then # It's quite tedious to check for Apple's crazy timestamps in .a files, # so we hardcode it. fp_cv_prog_ar_needs_ranlib=yes @@ -599,22 +583,17 @@ AC_DEFUN([FP_MINGW_GCC], ]) dnl Small feature test for perl version. Assumes PerlCmd -dnl contains path to perl binary +dnl contains path to perl binary. +dnl +dnl (Perl versions prior to v5.6 does not contain the string "v5"; +dnl instead they display version strings such as "version 5.005".) dnl AC_DEFUN([FPTOOLS_CHECK_PERL_VERSION], [$PerlCmd -v >conftest.out 2>&1 - if grep "v5.6" conftest.out >/dev/null 2>&1; then + if grep "v5" conftest.out >/dev/null 2>&1; then : else - if grep "v5.8" conftest.out >/dev/null 2>&1; then - : - else - if grep "version 6" conftest.out >/dev/null 2>&1; then - : - else - AC_MSG_ERROR([your version of perl probably won't work, try upgrading it.]) - fi - fi + AC_MSG_ERROR([your version of perl probably won't work, try upgrading it.]) fi rm -fr conftest* ]) @@ -639,6 +618,15 @@ echo foo > conftest.txt $fp_prog_find conftest.txt -print > conftest.out 2>&1 if grep '^conftest.txt$' conftest.out > /dev/null 2>&1 ; then # OK, looks like a real "find". + case $HostPlatform in + *mingw32) + if test x${OSTYPE} != xmsys + then + fp_prog_find="`cygpath --mixed ${fp_prog_find}`" + AC_MSG_NOTICE([normalized find command to $fp_prog_find]) + fi ;; + *) ;; + esac FindCmd="$fp_prog_find" else # Found a poor WinDoze version of "find", ignore it. @@ -732,116 +720,6 @@ ifelse($#, [1], [dnl ])dnl -dnl ** Map an arithmetic C type to a Haskell type. -dnl Based on autconf's AC_CHECK_SIZEOF. - -dnl FPTOOLS_CHECK_HTYPE(TYPE [, DEFAULT_VALUE, [, VALUE-FOR-CROSS-COMPILATION]) -AC_DEFUN([FPTOOLS_CHECK_HTYPE], -[changequote(<<, >>)dnl -dnl The name to #define. -define(<>, translit(htype_$1, [a-z *], [A-Z_P]))dnl -dnl The cache variable name. -define(<>, translit(fptools_cv_htype_$1, [ *], [_p]))dnl -define(<>, translit(fptools_cv_htype_sup_$1, [ *], [_p]))dnl -changequote([, ])dnl -AC_MSG_CHECKING(Haskell type for $1) -AC_CACHE_VAL(AC_CV_NAME, -[AC_CV_NAME_supported=yes -fp_check_htype_save_cppflags="$CPPFLAGS" -CPPFLAGS="$CPPFLAGS $X_CFLAGS" -AC_RUN_IFELSE([AC_LANG_SOURCE([[#include -#include - -#if HAVE_SYS_TYPES_H -# include -#endif - -#if HAVE_UNISTD_H -# include -#endif - -#if HAVE_SYS_STAT_H -# include -#endif - -#if HAVE_FCNTL_H -# include -#endif - -#if HAVE_SIGNAL_H -# include -#endif - -#if HAVE_TIME_H -# include -#endif - -#if HAVE_TERMIOS_H -# include -#endif - -#if HAVE_STRING_H -# include -#endif - -#if HAVE_CTYPE_H -# include -#endif - -#if defined(HAVE_GL_GL_H) -# include -#elif defined(HAVE_OPENGL_GL_H) -# include -#endif - -#if defined(HAVE_AL_AL_H) -# include -#elif defined(HAVE_OPENAL_AL_H) -# include -#endif - -#if defined(HAVE_AL_ALC_H) -# include -#elif defined(HAVE_OPENAL_ALC_H) -# include -#endif - -#if HAVE_SYS_RESOURCE_H -# include -#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); -}]])],[AC_CV_NAME=`cat conftestval`], -[ifelse([$2], , [AC_CV_NAME=NotReallyAType; AC_CV_NAME_supported=no], [AC_CV_NAME=$2])], -[ifelse([$3], , [AC_CV_NAME=NotReallyATypeCross; AC_CV_NAME_supported=no], [AC_CV_NAME=$3])]) -CPPFLAGS="$fp_check_htype_save_cppflags"]) dnl -if test "$AC_CV_NAME_supported" = yes; then - AC_MSG_RESULT($AC_CV_NAME) - AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [Define to Haskell type for $1]) -else - AC_MSG_RESULT([not supported]) -fi -undefine([AC_TYPE_NAME])dnl -undefine([AC_CV_NAME])dnl -undefine([AC_CV_NAME_supported])dnl -]) - - # FP_CHECK_FUNC(FUNCTION, PROLOGUE, BODY, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # --------------------------------------------------------------------------------- # A variant of AC_CHECK_FUNCS, limited to a single FUNCTION, but with the @@ -987,7 +865,7 @@ EOF # 'PATH'. Note that /usr/bin/fop is broken in SuSE 9.1 (unpatched), so try # /usr/share/fop/fop.sh in that case (or no 'fop'), too. AC_DEFUN([FP_PROG_FOP], -[AC_PATH_PROGS([FopCmd1], [fop]) +[AC_PATH_PROGS([FopCmd1], [fop fop.sh]) if test -n "$FopCmd1"; then AC_CACHE_CHECK([for $FopCmd1 usability], [fp_cv_fop_usability], [FP_GEN_FO @@ -1055,4 +933,339 @@ else GhcPkgCmd=$fp_cv_matching_ghc_pkg fi])# FP_PROG_GHC_PKG + +# FP_GHC_HAS_EDITLINE +# ------------------- +AC_DEFUN([FP_GHC_HAS_EDITLINE], +[AC_REQUIRE([FP_PROG_GHC_PKG]) +AC_CACHE_CHECK([whether ghc has editline package], [fp_cv_ghc_has_editline], +[if "${GhcPkgCmd-ghc-pkg}" --show-package editline >/dev/null 2>&1; then + fp_cv_ghc_has_editline=yes +else + fp_cv_ghc_has_editline=no + fi]) +AC_SUBST([GhcHasEditline], [`echo $fp_cv_ghc_has_editline | sed 'y/yesno/YESNO/'`]) +])# FP_GHC_HAS_EDITLINE + + +# FP_GCC_EXTRA_FLAGS +# ------------------ +# Determine which extra flags we need to pass gcc when we invoke it +# to compile .hc code. +# +# Some OSs (Mandrake Linux, in particular) configure GCC with +# -momit-leaf-frame-pointer on by default. If this is the case, we +# need to turn it off for mangling to work. The test is currently a +# bit crude, using only the version number of gcc. +# +# -fwrapv is needed for gcc to emit well-behaved code in the presence of +# integer wrap around. (Trac #952) +# +# -fno-unit-at-a-time or -fno-toplevel-reoder is necessary to avoid gcc +# reordering things in the module and confusing the manger and/or splitter. +# (eg. Trac #1427) +# +AC_DEFUN([FP_GCC_EXTRA_FLAGS], +[AC_REQUIRE([FP_HAVE_GCC]) +AC_CACHE_CHECK([for extra options to pass gcc when compiling via C], [fp_cv_gcc_extra_opts], +[fp_cv_gcc_extra_opts= + FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [3.4], + [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fwrapv"], + []) + case $TargetPlatform in + i386-*|x86_64-*) + FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [3.2], + [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -mno-omit-leaf-frame-pointer"], + []) + FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [3.4], + [FP_COMPARE_VERSIONS([$fp_gcc_version], [-ge], [4.2], + [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-toplevel-reorder"], + [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-unit-at-a-time"] + )], + []) + ;; + esac +]) +AC_SUBST([GccExtraViaCOpts],$fp_cv_gcc_extra_opts) +]) + + +# FP_SETUP_PROJECT_VERSION +# --------------------- +AC_DEFUN([FP_SETUP_PROJECT_VERSION], +[ +if test "$RELEASE" = "NO"; then + AC_MSG_CHECKING([for GHC version date]) + if test -f VERSION_DATE; then + PACKAGE_VERSION=${PACKAGE_VERSION}.`cat VERSION_DATE` + AC_MSG_RESULT(given $PACKAGE_VERSION) + elif test -d _darcs; then + changequote(, )dnl + ver_date=`darcs changes --quiet --no-summary --xml | head -500 | grep 'date=' | sed "s/^.*date='\([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\).*$/\1/g" | sort -n | tail -1` + if echo $ver_date | grep '^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$' 2>&1 >/dev/null; then true; else + changequote([, ])dnl + AC_MSG_ERROR([failed to detect version date: check that darcs is in your path]) + fi + PACKAGE_VERSION=${PACKAGE_VERSION}.$ver_date + AC_MSG_RESULT(inferred $PACKAGE_VERSION) + elif test -f VERSION; then + PACKAGE_VERSION=`cat VERSION` + AC_MSG_RESULT(given $PACKAGE_VERSION) + else + AC_MSG_WARN([cannot determine snapshot version: no _darcs directory and no VERSION file]) + fi +fi + +# Some renamings +AC_SUBST([ProjectName], [$PACKAGE_NAME]) +AC_SUBST([ProjectVersion], [$PACKAGE_VERSION]) + +# Split PACKAGE_VERSION into (possibly empty) parts +VERSION_MAJOR=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/` +VERSION_TMP=`echo $PACKAGE_VERSION | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/` +VERSION_MINOR=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\1'/` +ProjectPatchLevel=`echo $VERSION_TMP | sed 's/^\(@<:@^.@:>@*\)\(\.\{0,1\}\(.*\)\)$/\3'/` + +# Calculate project version as an integer, using 2 digits for minor version +case $VERSION_MINOR in + ?) ProjectVersionInt=${VERSION_MAJOR}0${VERSION_MINOR} ;; + ??) ProjectVersionInt=${VERSION_MAJOR}${VERSION_MINOR} ;; + *) AC_MSG_ERROR([bad minor version in $PACKAGE_VERSION]) ;; +esac +AC_SUBST([ProjectVersionInt]) + +# The project patchlevel is zero unless stated otherwise +test -z "$ProjectPatchLevel" && ProjectPatchLevel=0 + +# Remove dots from the patch level; this allows us to have versions like 6.4.1.20050508 +ProjectPatchLevel=`echo $ProjectPatchLevel | sed 's/\.//'` + +AC_SUBST([ProjectPatchLevel]) +])# FP_SETUP_PROJECT_VERSION + + +# Check for a working timer_create(). We need a pretty detailed check +# here, because there exist partially-working implementations of +# timer_create() in certain versions of Linux (see bug #1933). +# +AC_DEFUN([FP_CHECK_TIMER_CREATE], + [AC_CACHE_CHECK([for a working timer_create(CLOCK_REALTIME)], + [fptools_cv_timer_create_works], + [AC_TRY_RUN([ +#include +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_TIME_H +#include +#endif +#ifdef HAVE_SIGNAL_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif + +static volatile int tock = 0; +static void handler(int i) +{ + tock = 1; +} + +static void timeout(int i) +{ + // timer_settime() has been known to hang, so just in case + // we install a 1-second timeout (see #2257) + exit(99); +} + +int main(int argc, char *argv[]) +{ + + struct sigevent ev; + timer_t timer; + struct itimerspec it; + struct sigaction action; + int m,n,count = 0; + + ev.sigev_notify = SIGEV_SIGNAL; + ev.sigev_signo = SIGVTALRM; + + action.sa_handler = handler; + action.sa_flags = 0; + sigemptyset(&action.sa_mask); + if (sigaction(SIGVTALRM, &action, NULL) == -1) { + fprintf(stderr,"SIGVTALRM problem\n"); + exit(3); + } + + action.sa_handler = timeout; + action.sa_flags = 0; + sigemptyset(&action.sa_mask); + if (sigaction(SIGALRM, &action, NULL) == -1) { + fprintf(stderr,"SIGALRM problem\n"); + exit(3); + } + alarm(1); + + if (timer_create(CLOCK_PROCESS_CPUTIME_ID, &ev, &timer) != 0) { + fprintf(stderr,"No CLOCK_PROCESS_CPUTIME_ID timer\n"); + exit(1); + } + + it.it_value.tv_sec = 0; + it.it_value.tv_nsec = 1; + it.it_interval = it.it_value; + if (timer_settime(timer, 0, &it, NULL) != 0) { + fprintf(stderr,"settime problem\n"); + exit(4); + } + + tock = 0; + + for(n = 3; n < 20000; n++){ + for(m = 2; m <= n/2; m++){ + if (!(n%m)) count++; + if (tock) goto out; + } + } +out: + + if (!tock) { + fprintf(stderr,"no CLOCK_PROCESS_CPUTIME_ID signal\n"); + exit(5); + } + + timer_delete(timer); + + if (timer_create(CLOCK_REALTIME, &ev, &timer) != 0) { + fprintf(stderr,"No CLOCK_REALTIME timer\n"); + exit(2); + } + + it.it_value.tv_sec = 0; + it.it_value.tv_nsec = 1000000; + it.it_interval = it.it_value; + if (timer_settime(timer, 0, &it, NULL) != 0) { + fprintf(stderr,"settime problem\n"); + exit(4); + } + + tock = 0; + + usleep(300); + + if (!tock) { + fprintf(stderr,"no CLOCK_REALTIME signal\n"); + exit(5); + } + + timer_delete(timer); + + exit(0); +} + ], + [fptools_cv_timer_create_works=yes], + [fptools_cv_timer_create_works=no]) + ]) +case $fptools_cv_timer_create_works in + yes) AC_DEFINE([USE_TIMER_CREATE], 1, + [Define to 1 if we can use timer_create(CLOCK_PROCESS_CPUTIME_ID,...)]);; +esac +]) + +# FP_ARG_GMP +# ------------- +AC_DEFUN([FP_ARG_GMP], +[ +AC_ARG_WITH([gmp-includes], + [AC_HELP_STRING([--with-gmp-includes], + [directory containing gmp.h])], + [gmp_includes=$withval], + [gmp_includes=NONE]) + +AC_ARG_WITH([gmp-libraries], + [AC_HELP_STRING([--with-gmp-libraries], + [directory containing gmp library])], + [gmp_libraries=$withval], + [gmp_libraries=NONE]) +])# FP_ARG_GMP + +AC_DEFUN([CHECK_GMP], +[AC_REQUIRE([AC_PROG_CPP]) +AC_REQUIRE([AC_PROG_CC]) +]) + +# FP_CHECK_MACOSX_DEPLOYMENT_TARGET +# --------------------------------- +AC_DEFUN([FP_CHECK_MACOSX_DEPLOYMENT_TARGET], +[ +if test "x$TargetOS_CPP-$TargetVendor_CPP" = "xdarwin-apple"; then + AC_MSG_CHECKING([Mac OS X deployment target]) + case $FP_MACOSX_DEPLOYMENT_TARGET in + none) ;; + 10.4) MACOSX_DEPLOYMENT_VERSION=10.4 + MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk + ;; + 10.4u) MACOSX_DEPLOYMENT_VERSION=10.4 + MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX10.4u.sdk + ;; + *) MACOSX_DEPLOYMENT_VERSION=$FP_MACOSX_DEPLOYMENT_TARGET + MACOSX_DEPLOYMENT_SDK=/Developer/SDKs/MacOSX${FP_MACOSX_DEPLOYMENT_TARGET}.sdk + ;; + esac + if test "x$FP_MACOSX_DEPLOYMENT_TARGET" = "xnone"; then + AC_MSG_RESULT(none) + else + if test ! -d $MACOSX_DEPLOYMENT_SDK; then + AC_MSG_ERROR([Unknown deployment target $FP_MACOSX_DEPLOYMENT_TARGET]) + fi + AC_MSG_RESULT([${MACOSX_DEPLOYMENT_VERSION} (${MACOSX_DEPLOYMENT_SDK})]) + fi +fi +]) + +# -------------------------------------------------------------- +# Calculate absolute path to build tree +# -------------------------------------------------------------- + +AC_DEFUN([FP_FIND_ROOT],[ +AC_MSG_CHECKING(for path to top of build tree) + +dnl This would be +dnl make -C utils/pwd clean && make -C utils/pwd +dnl except we don't want to have to know what make is called. Sigh. +if test ! -f utils/pwd/pwd && test ! -f utils/pwd/pwd.exe; then + cd utils/pwd + rm -f *.o + rm -f *.hi + rm -f pwd + rm -f pwd.exe + $WithGhc -v0 --make pwd -o pwd + cd ../.. +fi + +hardtop=`utils/pwd/pwd forwardslash` + +if ! test -d "$hardtop"; then + AC_MSG_ERROR([cannot determine current directory]) +fi + +dnl Remove common automounter nonsense +dnl +hardtop=`echo $hardtop | sed 's|^/tmp_mnt.*\(/local/.*\)$|\1|' | sed 's|^/tmp_mnt/|/|'` + +AC_SUBST(hardtop) + +AC_MSG_RESULT(${hardtop}) + +# We don't support building in directories with spaces. +case "$hardtop" in + *' '*) AC_MSG_ERROR([ + The build system does not support building in a directory containing + space characters. Suggestion: move the build tree somewhere else.]) + ;; +esac +]) + # LocalWords: fi