Annotation of OpenXM_contrib/gmp/acinclude.m4, Revision 1.1
1.1 ! maekawa 1: dnl GMP specific autoconf macros
! 2:
! 3:
! 4: dnl Copyright (C) 2000 Free Software Foundation, Inc.
! 5: dnl
! 6: dnl This file is part of the GNU MP Library.
! 7: dnl
! 8: dnl The GNU MP Library is free software; you can redistribute it and/or modify
! 9: dnl it under the terms of the GNU Lesser General Public License as published
! 10: dnl by the Free Software Foundation; either version 2.1 of the License, or (at
! 11: dnl your option) any later version.
! 12: dnl
! 13: dnl The GNU MP Library is distributed in the hope that it will be useful, but
! 14: dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! 15: dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
! 16: dnl License for more details.
! 17: dnl
! 18: dnl You should have received a copy of the GNU Lesser General Public License
! 19: dnl along with the GNU MP Library; see the file COPYING.LIB. If not, write to
! 20: dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
! 21: dnl MA 02111-1307, USA.
! 22:
! 23:
! 24: dnl GMP_HEADER_GETVAL(NAME,FILE)
! 25: dnl ----------------------------
! 26: dnl Expand to the value of a "#define NAME" from the given FILE.
! 27: dnl The regexps here aren't very rugged, but are enough for gmp.
! 28: dnl /dev/null as a parameter prevents a hang if $2 is accidentally omitted.
! 29:
! 30: define(GMP_HEADER_GETVAL,
! 31: [patsubst(patsubst(
! 32: esyscmd([grep "^#define $1 " $2 /dev/null 2>/dev/null]),
! 33: [^.*$1[ ]+],[]),
! 34: [[
! 35: ]*$],[])])
! 36:
! 37:
! 38: dnl GMP_VERSION
! 39: dnl -----------
! 40: dnl The gmp version number, extracted from the #defines in gmp.h.
! 41: dnl Two digits like 3.0 if patchlevel <= 0, or three digits like 3.0.1 if
! 42: dnl patchlevel > 0.
! 43:
! 44: define(GMP_VERSION,
! 45: [GMP_HEADER_GETVAL(__GNU_MP_VERSION,gmp.h)[]dnl
! 46: .GMP_HEADER_GETVAL(__GNU_MP_VERSION_MINOR,gmp.h)[]dnl
! 47: ifelse(m4_eval(GMP_HEADER_GETVAL(__GNU_MP_VERSION_PATCHLEVEL,gmp.h) > 0),1,
! 48: [.GMP_HEADER_GETVAL(__GNU_MP_VERSION_PATCHLEVEL,gmp.h)])])
! 49:
! 50:
! 51: dnl GMP_PROG_M4()
! 52: dnl -------------
! 53: dnl
! 54: dnl Find a working m4, either in $PATH or likely locations, and setup $M4
! 55: dnl and an AC_SUBST accordingly. If $M4 is already set then it's a user
! 56: dnl choice and is accepted with no checks. GMP_PROG_M4 is like
! 57: dnl AC_PATH_PROG or AC_CHECK_PROG, but it tests each m4 found to see if
! 58: dnl it's good enough.
! 59: dnl
! 60: dnl See mpn/asm-defs.m4 for details on the known bad m4s.
! 61:
! 62: AC_DEFUN(GMP_PROG_M4,
! 63: [AC_CACHE_CHECK([for suitable m4],
! 64: gmp_cv_prog_m4,
! 65: [if test -n "$M4"; then
! 66: gmp_cv_prog_m4="$M4"
! 67: else
! 68: cat >conftest.m4 <<\EOF
! 69: dnl must protect this against being expanded during autoconf m4!
! 70: [define(dollarhash,``$][#'')dnl
! 71: ifelse(dollarhash(x),1,`define(t1,Y)',
! 72: ``bad: $][# not supported (SunOS /usr/bin/m4)
! 73: '')dnl
! 74: ifelse(eval(89),89,`define(t2,Y)',
! 75: `bad: eval() doesnt support 8 or 9 in a constant (OpenBSD 2.6 m4)
! 76: ')dnl
! 77: ifelse(t1`'t2,YY,`good
! 78: ')dnl]
! 79: EOF
! 80: echo "trying m4" 1>&AC_FD_CC
! 81: gmp_tmp_val="`(m4 conftest.m4) 2>&AC_FD_CC`"
! 82: echo "$gmp_tmp_val" 1>&AC_FD_CC
! 83: if test "$gmp_tmp_val" = good; then
! 84: gmp_cv_prog_m4="m4"
! 85: else
! 86: IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
! 87: dnl $ac_dummy forces splitting on constant user-supplied paths.
! 88: dnl POSIX.2 word splitting is done only on the output of word expansions,
! 89: dnl not every word. This closes a longstanding sh security hole.
! 90: ac_dummy="$PATH:/usr/5bin"
! 91: for ac_dir in $ac_dummy; do
! 92: test -z "$ac_dir" && ac_dir=.
! 93: echo "trying $ac_dir/m4" 1>&AC_FD_CC
! 94: gmp_tmp_val="`($ac_dir/m4 conftest.m4) 2>&AC_FD_CC`"
! 95: echo "$gmp_tmp_val" 1>&AC_FD_CC
! 96: if test "$gmp_tmp_val" = good; then
! 97: gmp_cv_prog_m4="$ac_dir/m4"
! 98: break
! 99: fi
! 100: done
! 101: IFS="$ac_save_ifs"
! 102: if test -z "$gmp_cv_prog_m4"; then
! 103: AC_MSG_ERROR([No usable m4 in \$PATH or /usr/5bin (see config.log for reasons).])
! 104: fi
! 105: fi
! 106: rm -f conftest.m4
! 107: fi])
! 108: M4="$gmp_cv_prog_m4"
! 109: AC_SUBST(M4)
! 110: ])
! 111:
! 112:
! 113: dnl GMP_PROG_CC_FIND([CC_LIST], [REQ_64BIT_CC])
! 114: dnl Find first working compiler in CC_LIST.
! 115: dnl If REQ_64BIT_CC is "yes", the compiler is required to be able to
! 116: dnl produce 64-bit code.
! 117: dnl NOTE: If a compiler needs any special flags for producing 64-bit code,
! 118: dnl these have to be found in shell variable `gmp_cflags64_{cc}', where `{cc}'
! 119: dnl is the name of the compiler.
! 120: dnl Set CC to the name of the first working compiler.
! 121: dnl If a 64-bit compiler is found, set CC64 to the name of the compiler and
! 122: dnl CFLAGS64 to flags to use.
! 123: dnl This macro does not test if any of the compilers found is a GNU compiler.
! 124: dnl To do this, when you have finally made up your mind on which one to use,
! 125: dnl and set CC accordingly, invoke [GMP_PROG_CC_SELECT]. That macro will
! 126: dnl also make sure that your selection of CFLAGS is valid.
! 127: dnl
! 128: AC_DEFUN(GMP_PROG_CC_FIND,
! 129: [AC_BEFORE([$0], [CC_PROG_CPP])
! 130: ifelse([$1], , gmp_cc_list="gcc cc", gmp_cc_list="[$1]")
! 131: ifelse([$2], , gmp_req_64bit_cc="no", gmp_req_64bit_cc="[$2]")
! 132:
! 133: CC32=
! 134: CC64=
! 135: for c in $gmp_cc_list; do
! 136: # Avoid cache hits.
! 137: unset CC
! 138: unset ac_cv_prog_CC
! 139: AC_CHECK_TOOL(CC, $c, $c)
! 140: if test -n "$CC"; then
! 141: eval c_flags=\$gmp_cflags_$c
! 142: GMP_PROG_CC_WORKS($CC, $c_flags,
! 143: gmp_prog_cc_works=yes,
! 144: gmp_prog_cc_works=no)
! 145:
! 146: if test "$gmp_prog_cc_works" != "yes"; then
! 147: continue
! 148: fi
! 149:
! 150: # Save first working compiler, whether 32- or 64-bit capable.
! 151: if test -z "$CC32"; then
! 152: CC32="$CC"
! 153: fi
! 154: if test "$gmp_req_64bit_cc" = "yes"; then
! 155: eval c_flags=\$gmp_cflags64_$c
! 156:
! 157: # Verify that the compiler works in 64-bit mode as well.
! 158: # /usr/ucb/cc on Solaris 7 can *compile* in 64-bit mode, but not link.
! 159: GMP_PROG_CC_WORKS($c, $c_flags,
! 160: gmp_prog_cc_works=yes,
! 161: gmp_prog_cc_works=no)
! 162:
! 163: if test "$gmp_prog_cc_works" = "yes"; then
! 164: GMP_CHECK_CC_64BIT($c, $c_flags)
! 165: if test "$gmp_cv_cc_64bit" = "yes"; then
! 166: test -z "$CC64" && CC64="$c"
! 167: test -z "$CFLAGS64" && CFLAGS64="$c_flags"
! 168: # We have CC64 so we're done.
! 169: break
! 170: fi
! 171: fi
! 172: else
! 173: # We have CC32, and we don't need a 64-bit compiler so we're done.
! 174: break
! 175: fi
! 176: fi
! 177: done
! 178: CC="$CC32"
! 179: ])dnl
! 180:
! 181: dnl GMP_PROG_CC_SELECT
! 182: dnl Check that `CC' works with `CFLAGS'. Check if `CC' is a GNU compiler.
! 183: dnl Cache the result as `ac_cv_prog_CC'.
! 184: AC_DEFUN(GMP_PROG_CC_SELECT,
! 185: [AC_BEFORE([$0], [CC_PROG_CPP])
! 186: AC_PROG_CC_WORKS
! 187: AC_PROG_CC_GNU
! 188:
! 189: if test "$ac_cv_prog_gcc" = "yes"; then
! 190: GCC=yes
! 191: else
! 192: GCC=
! 193: fi
! 194:
! 195: # Set CFLAGS if not already set.
! 196: if test -z "$CFLAGS"; then
! 197: CFLAGS="-g"
! 198: if test "$GCC" = "yes"; then
! 199: CFLAGS="$CFLAGS -O2"
! 200: fi
! 201: fi
! 202:
! 203: AC_SUBST(CC)
! 204: AC_CACHE_VAL(ac_cv_prog_CC, ac_cv_prog_CC="$CC")
! 205: AC_PROVIDE([AC_PROG_CC])
! 206: ])dnl
! 207:
! 208: dnl GMP_CHECK_CC_64BIT(cc, cflags64)
! 209: dnl Find out if `CC' can produce 64-bit code.
! 210: dnl Requires NM to be set to nm for target.
! 211: dnl FIXME: Cache result.
! 212: AC_DEFUN(GMP_CHECK_CC_64BIT,
! 213: [
! 214: gmp_tmp_CC_save="$CC"
! 215: CC="[$1]"
! 216: AC_MSG_CHECKING([whether the C compiler ($CC) is 64-bit capable])
! 217: if test -z "$NM"; then
! 218: echo; echo ["configure: $0: fatal: need nm"]
! 219: exit 1
! 220: fi
! 221: gmp_tmp_CFLAGS_save="$CFLAGS"
! 222: CFLAGS="[$2]"
! 223:
! 224: case "$target" in
! 225: hppa2.0*-*-*)
! 226: # FIXME: If gcc is installed under another name than "gcc", we will
! 227: # test the wrong thing.
! 228: if test "$CC" != "gcc"; then
! 229: dnl Let compiler version A.10.32.30 or higher be ok.
! 230: dnl Bad compiler output:
! 231: dnl ccom: HP92453-01 G.10.32.05 HP C Compiler
! 232: dnl Good compiler output:
! 233: dnl ccom: HP92453-01 A.10.32.30 HP C Compiler
! 234: echo >conftest.c
! 235: gmp_tmp_vs=`$CC $CFLAGS -V -c -o conftest.o conftest.c 2>&1 | grep "^ccom:"`
! 236: rm conftest*
! 237: gmp_tmp_v1=`echo $gmp_tmp_vs | sed 's/.* .\.\(.*\)\..*\..* HP C.*/\1/'`
! 238: gmp_tmp_v2=`echo $gmp_tmp_vs | sed 's/.* .\..*\.\(.*\)\..* HP C.*/\1/'`
! 239: gmp_tmp_v3=`echo $gmp_tmp_vs | sed 's/.* .\..*\..*\.\(.*\) HP C.*/\1/'`
! 240: gmp_cv_cc_64bit=no
! 241: test -n "$gmp_tmp_v1" && test "$gmp_tmp_v1" -ge "10" \
! 242: && test -n "$gmp_tmp_v2" && test "$gmp_tmp_v2" -ge "32" \
! 243: && test -n "$gmp_tmp_v3" && test "$gmp_tmp_v3" -ge "30" \
! 244: && gmp_cv_cc_64bit=yes
! 245: else # gcc
! 246: # FIXME: Compile a minimal file and determine if the resulting object
! 247: # file is an ELF file. If so, gcc can produce 64-bit code.
! 248: # Do we have file(1) for target?
! 249: gmp_cv_cc_64bit=no
! 250: fi
! 251: ;;
! 252: mips-sgi-irix6.*)
! 253: # We use `-n32' to cc and `-mabi=n32' to gcc, resulting in 64-bit
! 254: # arithmetic but not 64-bit pointers, so the general test for sizeof
! 255: # (void *) is not valid.
! 256: # Simply try to compile an empty main. If that succeeds return
! 257: # true.
! 258: AC_TRY_COMPILE( , ,
! 259: gmp_cv_cc_64bit=yes, gmp_cv_cc_64bit=no,
! 260: gmp_cv_cc_64bit=no)
! 261: ;;
! 262: *-*-*)
! 263: # Allocate an array of size sizeof (void *) and use nm to determine its
! 264: # size. We depend on the first declared variable being put at address 0.
! 265: cat >conftest.c <<EOF
! 266: [char arr[sizeof (void *)]={0};
! 267: char post=0;]
! 268: EOF
! 269: gmp_compile="$CC $CFLAGS -c conftest.c 1>&AC_FD_CC"
! 270: if AC_TRY_EVAL(gmp_compile); then
! 271: changequote(<,>)dnl
! 272: gmp_tmp_val=`$NM conftest.o | grep post | sed -e 's;[[][0-9][]]\(.*\);\1;' \
! 273: -e 's;[^1-9]*\([0-9]*\).*;\1;'`
! 274: changequote([, ])dnl
! 275: if test "$gmp_tmp_val" = "8"; then
! 276: gmp_cv_cc_64bit=yes
! 277: else
! 278: gmp_cv_cc_64bit=no
! 279: fi
! 280: else
! 281: echo "configure: failed program was:" >&AC_FD_CC
! 282: cat conftest.$ac_ext >&AC_FD_CC
! 283: gmp_cv_cc_64bit=no
! 284: fi
! 285: rm -f conftest*
! 286: ;;
! 287: esac
! 288:
! 289: CC="$gmp_tmp_CC_save"
! 290: CFLAGS="$gmp_tmp_CFLAGS_save"
! 291: AC_MSG_RESULT($gmp_cv_cc_64bit)
! 292: ])dnl
! 293:
! 294: dnl GMP_INIT([M4-DEF-FILE])
! 295: dnl
! 296: AC_DEFUN(GMP_INIT,
! 297: [ifelse([$1], , gmp_configm4=config.m4, gmp_configm4="[$1]")
! 298: gmp_tmpconfigm4=cnfm4.tmp
! 299: gmp_tmpconfigm4i=cnfm4i.tmp
! 300: gmp_tmpconfigm4p=cnfm4p.tmp
! 301: test -f $gmp_tmpconfigm4 && rm $gmp_tmpconfigm4
! 302: test -f $gmp_tmpconfigm4i && rm $gmp_tmpconfigm4i
! 303: test -f $gmp_tmpconfigm4p && rm $gmp_tmpconfigm4p
! 304: ])dnl
! 305:
! 306: dnl GMP_FINISH
! 307: dnl ----------
! 308: dnl Create config.m4 from its accumulated parts.
! 309: dnl
! 310: dnl __CONFIG_M4_INCLUDED__ is used so that a second or subsequent include
! 311: dnl of config.m4 is harmless.
! 312: dnl
! 313: dnl A separate ifdef on the angle bracket quoted part ensures the quoting
! 314: dnl style there is respected. The basic defines from gmp_tmpconfigm4 are
! 315: dnl fully quoted but are still put under an ifdef in case any have been
! 316: dnl redefined by one of the m4 include files.
! 317: dnl
! 318: dnl Doing a big ifdef within asm-defs.m4 and/or other macro files wouldn't
! 319: dnl work, since it'd interpret parentheses and quotes in dnl comments, and
! 320: dnl having a whole file as a macro argument would overflow the string space
! 321: dnl on BSD m4.
! 322:
! 323: AC_DEFUN(GMP_FINISH,
! 324: [AC_REQUIRE([GMP_INIT])
! 325: echo "creating $gmp_configm4"
! 326: echo ["dnl $gmp_configm4. Generated automatically by configure."] > $gmp_configm4
! 327: if test -f $gmp_tmpconfigm4; then
! 328: echo ["changequote(<,>)dnl"] >> $gmp_configm4
! 329: echo ["ifdef(<__CONFIG_M4_INCLUDED__>,,<"] >> $gmp_configm4
! 330: cat $gmp_tmpconfigm4 >> $gmp_configm4
! 331: echo [">)"] >> $gmp_configm4
! 332: echo ["changequote(\`,')dnl"] >> $gmp_configm4
! 333: rm $gmp_tmpconfigm4
! 334: fi
! 335: echo ["ifdef(\`__CONFIG_M4_INCLUDED__',,\`"] >> $gmp_configm4
! 336: if test -f $gmp_tmpconfigm4i; then
! 337: cat $gmp_tmpconfigm4i >> $gmp_configm4
! 338: rm $gmp_tmpconfigm4i
! 339: fi
! 340: if test -f $gmp_tmpconfigm4p; then
! 341: cat $gmp_tmpconfigm4p >> $gmp_configm4
! 342: rm $gmp_tmpconfigm4p
! 343: fi
! 344: echo ["')"] >> $gmp_configm4
! 345: echo ["define(\`__CONFIG_M4_INCLUDED__')"] >> $gmp_configm4
! 346: ])dnl
! 347:
! 348: dnl GMP_INCLUDE(FILE)
! 349: AC_DEFUN(GMP_INCLUDE,
! 350: [AC_REQUIRE([GMP_INIT])
! 351: echo ["include(\`$1')"] >> $gmp_tmpconfigm4i
! 352: ])dnl
! 353:
! 354: dnl GMP_SINCLUDE(FILE)
! 355: AC_DEFUN(GMP_SINCLUDE,
! 356: [AC_REQUIRE([GMP_INIT])
! 357: echo ["sinclude(\`$1')"] >> $gmp_tmpconfigm4i
! 358: ])dnl
! 359:
! 360: dnl GMP_DEFINE(MACRO, DEFINITION [, LOCATION])
! 361: dnl [ Define M4 macro MACRO as DEFINITION in temporary file. ]
! 362: dnl [ If LOCATION is `POST', the definition will appear after any ]
! 363: dnl [ include() directives inserted by GMP_INCLUDE/GMP_SINCLUDE. ]
! 364: dnl [ Mind the quoting! No shell variables will get expanded. ]
! 365: dnl [ Don't forget to invoke GMP_FINISH to create file config.m4. ]
! 366: dnl [ config.m4 uses `<' and '>' as quote characters for all defines. ]
! 367: AC_DEFUN(GMP_DEFINE,
! 368: [AC_REQUIRE([GMP_INIT])
! 369: echo ['define(<$1>, <$2>)'] >> ifelse([$3], [POST], $gmp_tmpconfigm4p, $gmp_tmpconfigm4)
! 370: ])dnl
! 371:
! 372: dnl GMP_DEFINE_RAW(STRING, [, LOCATION])
! 373: dnl [ Put STRING in temporary file. ]
! 374: dnl [ If LOCATION is `POST', the definition will appear after any ]
! 375: dnl [ include() directives inserted by GMP_INCLUDE/GMP_SINCLUDE. ]
! 376: dnl [ Don't forget to invoke GMP_FINISH to create file config.m4. ]
! 377: AC_DEFUN(GMP_DEFINE_RAW,
! 378: [AC_REQUIRE([GMP_INIT])
! 379: echo [$1] >> ifelse([$2], [POST], $gmp_tmpconfigm4p, $gmp_tmpconfigm4)
! 380: ])dnl
! 381:
! 382: dnl GMP_CHECK_ASM_LABEL_SUFFIX
! 383: dnl Should a label have a colon or not?
! 384: AC_DEFUN(GMP_CHECK_ASM_LABEL_SUFFIX,
! 385: [AC_CACHE_CHECK([what assembly label suffix to use],
! 386: gmp_cv_check_asm_label_suffix,
! 387: [case "$target" in
! 388: *-*-hpux*) gmp_cv_check_asm_label_suffix=[""] ;;
! 389: *) gmp_cv_check_asm_label_suffix=[":"] ;;
! 390: esac
! 391: ])
! 392: echo ["define(<LABEL_SUFFIX>, <\$][1$gmp_cv_check_asm_label_suffix>)"] >> $gmp_tmpconfigm4
! 393: ])dnl
! 394:
! 395: dnl GMP_CHECK_ASM_UNDERSCORE([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
! 396: dnl Shamelessly borrowed from glibc.
! 397: AC_DEFUN(GMP_CHECK_ASM_UNDERSCORE,
! 398: [AC_CACHE_CHECK([if symbols are prefixed by underscore],
! 399: gmp_cv_check_asm_underscore,
! 400: [cat > conftest.$ac_ext <<EOF
! 401: dnl This sometimes fails to find confdefs.h, for some reason.
! 402: dnl [#]line __oline__ "[$]0"
! 403: [#]line __oline__ "configure"
! 404: #include "confdefs.h"
! 405: int underscore_test() {
! 406: return; }
! 407: EOF
! 408: if AC_TRY_EVAL(ac_compile); then
! 409: if grep _underscore_test conftest* >/dev/null; then
! 410: gmp_cv_check_asm_underscore=yes
! 411: else
! 412: gmp_cv_check_asm_underscore=no
! 413: fi
! 414: else
! 415: echo "configure: failed program was:" >&AC_FD_CC
! 416: cat conftest.$ac_ext >&AC_FD_CC
! 417: fi
! 418: rm -f conftest*
! 419: ])
! 420: if test "$gmp_cv_check_asm_underscore" = "yes"; then
! 421: GMP_DEFINE(GSYM_PREFIX, [_])
! 422: ifelse([$1], , :, [$1])
! 423: else
! 424: GMP_DEFINE(GSYM_PREFIX, [])
! 425: ifelse([$2], , :, [$2])
! 426: fi
! 427: ])dnl
! 428:
! 429: dnl GMP_CHECK_ASM_ALIGN_LOG([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
! 430: dnl Is parameter to `.align' logarithmic?
! 431: dnl Requires NM to be set to nm for target.
! 432: AC_DEFUN(GMP_CHECK_ASM_ALIGN_LOG,
! 433: [AC_REQUIRE([GMP_CHECK_ASM_GLOBL])
! 434: AC_REQUIRE([GMP_CHECK_ASM_DATA])
! 435: AC_REQUIRE([GMP_CHECK_ASM_LABEL_SUFFIX])
! 436: AC_CACHE_CHECK([if .align assembly directive is logarithmic],
! 437: gmp_cv_check_asm_align_log,
! 438: [if test -z "$NM"; then
! 439: echo; echo ["configure: $0: fatal: need nm"]
! 440: exit 1
! 441: fi
! 442: cat > conftest.s <<EOF
! 443: $gmp_cv_check_asm_data
! 444: .align 4
! 445: $gmp_cv_check_asm_globl foo
! 446: .byte 1
! 447: .align 4
! 448: foo$gmp_cv_check_asm_label_suffix
! 449: .byte 2
! 450: EOF
! 451: ac_assemble="$CCAS $CFLAGS conftest.s 1>&AC_FD_CC"
! 452: if AC_TRY_EVAL(ac_assemble); then
! 453: changequote(<,>)
! 454: gmp_tmp_val=`$NM conftest.o | grep foo | sed -e 's;[[][0-9][]]\(.*\);\1;' \
! 455: -e 's;[^1-9]*\([0-9]*\).*;\1;'`
! 456: changequote([, ])dnl
! 457: if test "$gmp_tmp_val" = "10" || test "$gmp_tmp_val" = "16"; then
! 458: gmp_cv_check_asm_align_log=yes
! 459: else
! 460: gmp_cv_check_asm_align_log=no
! 461: fi
! 462: else
! 463: echo "configure: failed program was:" >&AC_FD_CC
! 464: cat conftest.s >&AC_FD_CC
! 465: fi
! 466: rm -f conftest*
! 467: ])
! 468: GMP_DEFINE_RAW(["define(<ALIGN_LOGARITHMIC>,<$gmp_cv_check_asm_align_log>)"])
! 469: if test "$gmp_cv_check_asm_align_log" = "yes"; then
! 470: ifelse([$1], , :, [$1])
! 471: else
! 472: ifelse([$2], , :, [$2])
! 473: fi
! 474: ])dnl
! 475:
! 476:
! 477: dnl GMP_CHECK_ASM_ALIGN_FILL_0x90
! 478: dnl -----------------------------
! 479: dnl Determine whether a ",0x90" suffix works on a .align directive.
! 480: dnl This is only meant for use on x86, where 0x90 is a "nop".
! 481: dnl
! 482: dnl Old gas, eg. 1.92.3 - needs ",0x90" or else the fill is an invalid 0x00.
! 483: dnl New gas, eg. 2.91 - generates the good multibyte nop fills even when
! 484: dnl ",0x90" is given.
! 485: dnl Solaris 2.6 as - doesn't allow ",0x90", gives a fatal error.
! 486: dnl Solaris 2.8 as - gives a warning for ",0x90", no ill effect.
! 487: dnl
! 488: dnl Note that both solaris "as"s only care about ",0x90" if they actually
! 489: dnl have to use it to fill something, hence the .byte in the sample. It's
! 490: dnl only the second .align that provokes an error or warning.
! 491: dnl
! 492: dnl We prefer to suppress the warning from solaris 2.8 to stop anyone
! 493: dnl worrying something might be wrong.
! 494:
! 495: AC_DEFUN(GMP_CHECK_ASM_ALIGN_FILL_0x90,
! 496: [AC_CACHE_CHECK([if the .align directive accepts an 0x90 fill in .text],
! 497: gmp_cv_check_asm_align_fill_0x90,
! 498: [AC_REQUIRE([GMP_CHECK_ASM_TEXT])
! 499: cat > conftest.s <<EOF
! 500: $gmp_cv_check_asm_text
! 501: .align 4, 0x90
! 502: .byte 0
! 503: .align 4, 0x90
! 504: EOF
! 505: gmp_tmp_val="`$CCAS $CFLAGS conftest.s 2>&1`"
! 506: if test $? = 0; then
! 507: echo "$gmp_tmp_val" 1>&AC_FD_CC
! 508: if echo "$gmp_tmp_val" | grep "Warning: Fill parameter ignored for executable section"; then
! 509: echo "Supressing this warning by omitting 0x90" 1>&AC_FD_CC
! 510: gmp_cv_check_asm_align_fill_0x90=no
! 511: else
! 512: gmp_cv_check_asm_align_fill_0x90=yes
! 513: fi
! 514: else
! 515: echo "Non-zero exit code" 1>&AC_FD_CC
! 516: echo "$gmp_tmp_val" 1>&AC_FD_CC
! 517: gmp_cv_check_asm_align_fill_0x90=no
! 518: fi
! 519: rm -f conftest*
! 520: ])
! 521: GMP_DEFINE_RAW(
! 522: ["define(<ALIGN_FILL_0x90>,<$gmp_cv_check_asm_align_fill_0x90>)"])
! 523: ])
! 524:
! 525:
! 526: dnl GMP_CHECK_ASM_TEXT
! 527: AC_DEFUN(GMP_CHECK_ASM_TEXT,
! 528: [AC_CACHE_CHECK([how to switch to text section], gmp_cv_check_asm_text,
! 529: [case "$target" in
! 530: *-*-aix*)
! 531: changequote({, })
! 532: gmp_cv_check_asm_text={".csect .text[PR]"}
! 533: changequote([, ])
! 534: ;;
! 535: *-*-hpux*) gmp_cv_check_asm_text=[".code"] ;;
! 536: *) gmp_cv_check_asm_text=[".text"] ;;
! 537: esac
! 538: ])
! 539: echo ["define(<TEXT>, <$gmp_cv_check_asm_text>)"] >> $gmp_tmpconfigm4
! 540: ])dnl
! 541:
! 542: dnl GMP_CHECK_ASM_DATA
! 543: dnl Can we say `.data'?
! 544: AC_DEFUN(GMP_CHECK_ASM_DATA,
! 545: [AC_CACHE_CHECK([how to switch to data section], gmp_cv_check_asm_data,
! 546: [case "$target" in
! 547: *-*-aix*)
! 548: changequote({, })
! 549: gmp_cv_check_asm_data={".csect .data[RW]"}
! 550: changequote([, ])
! 551: ;;
! 552: *) gmp_cv_check_asm_data=[".data"] ;;
! 553: esac
! 554: ])
! 555: echo ["define(<DATA>, <$gmp_cv_check_asm_data>)"] >> $gmp_tmpconfigm4
! 556: ])dnl
! 557:
! 558: dnl GMP_CHECK_ASM_GLOBL
! 559: dnl Can we say `.global'?
! 560: AC_DEFUN(GMP_CHECK_ASM_GLOBL,
! 561: [AC_CACHE_CHECK([how to export a symbol], gmp_cv_check_asm_globl,
! 562: [case "$target" in
! 563: *-*-hpux*) gmp_cv_check_asm_globl=[".export"] ;;
! 564: *) gmp_cv_check_asm_globl=[".globl"] ;;
! 565: esac
! 566: ])
! 567: echo ["define(<GLOBL>, <$gmp_cv_check_asm_globl>)"] >> $gmp_tmpconfigm4
! 568: ])dnl
! 569:
! 570: dnl GMP_CHECK_ASM_TYPE
! 571: dnl Can we say `.type'?
! 572: AC_DEFUN(GMP_CHECK_ASM_TYPE,
! 573: [AC_CACHE_CHECK([how the .type assembly directive should be used],
! 574: gmp_cv_check_asm_type,
! 575: [ac_assemble="$CCAS $CFLAGS conftest.s 1>&AC_FD_CC"
! 576: for gmp_tmp_prefix in @ \# %; do
! 577: echo " .type sym,${gmp_tmp_prefix}function" > conftest.s
! 578: if AC_TRY_EVAL(ac_assemble); then
! 579: gmp_cv_check_asm_type="[.type \$][1,${gmp_tmp_prefix}\$][2]"
! 580: break
! 581: fi
! 582: done
! 583: if test -z "$gmp_cv_check_asm_type"; then
! 584: gmp_cv_check_asm_type="[dnl]"
! 585: fi
! 586: ])
! 587: echo ["define(<TYPE>, <$gmp_cv_check_asm_type>)"] >> $gmp_tmpconfigm4
! 588: ])dnl
! 589:
! 590: dnl GMP_CHECK_ASM_SIZE
! 591: dnl Can we say `.size'?
! 592: AC_DEFUN(GMP_CHECK_ASM_SIZE,
! 593: [AC_CACHE_CHECK([if the .size assembly directive works], gmp_cv_check_asm_size,
! 594: [ac_assemble="$CCAS $CFLAGS conftest.s 1>&AC_FD_CC"
! 595: echo ' .size sym,1' > conftest.s
! 596: if AC_TRY_EVAL(ac_assemble); then
! 597: gmp_cv_check_asm_size="[.size \$][1,\$][2]"
! 598: else
! 599: gmp_cv_check_asm_size="[dnl]"
! 600: fi
! 601: ])
! 602: echo ["define(<SIZE>, <$gmp_cv_check_asm_size>)"] >> $gmp_tmpconfigm4
! 603: ])dnl
! 604:
! 605: dnl GMP_CHECK_ASM_LSYM_PREFIX
! 606: dnl What is the prefix for a local label?
! 607: dnl Requires NM to be set to nm for target.
! 608: AC_DEFUN(GMP_CHECK_ASM_LSYM_PREFIX,
! 609: [AC_REQUIRE([GMP_CHECK_ASM_LABEL_SUFFIX])
! 610: AC_CACHE_CHECK([what prefix to use for a local label],
! 611: gmp_cv_check_asm_lsym_prefix,
! 612: [if test -z "$NM"; then
! 613: echo; echo ["$0: fatal: need nm"]
! 614: exit 1
! 615: fi
! 616: ac_assemble="$CCAS $CFLAGS conftest.s 1>&AC_FD_CC"
! 617: gmp_cv_check_asm_lsym_prefix="L"
! 618: for gmp_tmp_pre in L .L $ L$; do
! 619: cat > conftest.s <<EOF
! 620: dummy${gmp_cv_check_asm_label_suffix}
! 621: ${gmp_tmp_pre}gurkmacka${gmp_cv_check_asm_label_suffix}
! 622: .byte 0
! 623: EOF
! 624: if AC_TRY_EVAL(ac_assemble); then
! 625: $NM conftest.o >/dev/null 2>&1
! 626: gmp_rc=$?
! 627: if test "$gmp_rc" != "0"; then
! 628: echo "configure: $NM failure, using default"
! 629: break
! 630: fi
! 631: if $NM conftest.o | grep gurkmacka >/dev/null; then true; else
! 632: gmp_cv_check_asm_lsym_prefix="$gmp_tmp_pre"
! 633: break
! 634: fi
! 635: else
! 636: echo "configure: failed program was:" >&AC_FD_CC
! 637: cat conftest.s >&AC_FD_CC
! 638: # Use default.
! 639: fi
! 640: done
! 641: rm -f conftest*
! 642: ])
! 643: echo ["define(<LSYM_PREFIX>, <${gmp_cv_check_asm_lsym_prefix}>)"] >> $gmp_tmpconfigm4
! 644: ])
! 645:
! 646: dnl GMP_CHECK_ASM_W32
! 647: dnl How to [define] a 32-bit word.
! 648: dnl Requires NM to be set to nm for target.
! 649: AC_DEFUN(GMP_CHECK_ASM_W32,
! 650: [AC_REQUIRE([GMP_CHECK_ASM_DATA])
! 651: AC_REQUIRE([GMP_CHECK_ASM_GLOBL])
! 652: AC_REQUIRE([GMP_CHECK_ASM_LABEL_SUFFIX])
! 653: AC_CACHE_CHECK([how to [define] a 32-bit word],
! 654: gmp_cv_check_asm_w32,
! 655: [if test -z "$NM"; then
! 656: echo; echo ["configure: $0: fatal: need nm"]
! 657: exit 1
! 658: fi
! 659:
! 660: # FIXME: HPUX puts first symbol at 0x40000000, breaking our assumption
! 661: # that it's at 0x0. We'll have to declare another symbol before the
! 662: # .long/.word and look at the distance between the two symbols. The
! 663: # only problem is that the sed expression(s) barfs (on Solaris, for
! 664: # example) for the symbol with value 0. For now, HPUX uses .word.
! 665:
! 666: case "$target" in
! 667: *-*-hpux*)
! 668: gmp_cv_check_asm_w32=".word"
! 669: ;;
! 670: *-*-*)
! 671: ac_assemble="$CCAS $CFLAGS conftest.s 1>&AC_FD_CC"
! 672: for gmp_tmp_op in .long .word; do
! 673: cat > conftest.s <<EOF
! 674: $gmp_cv_check_asm_data
! 675: $gmp_cv_check_asm_globl foo
! 676: $gmp_tmp_op 0
! 677: foo${gmp_cv_check_asm_label_suffix}
! 678: .byte 0
! 679: EOF
! 680: if AC_TRY_EVAL(ac_assemble); then
! 681: changequote(<,>)
! 682: gmp_tmp_val=`$NM conftest.o | grep foo | sed -e 's;[[][0-9][]]\(.*\);\1;' \
! 683: -e 's;[^1-9]*\([0-9]*\).*;\1;'`
! 684: changequote([, ])dnl
! 685: if test "$gmp_tmp_val" = "4"; then
! 686: gmp_cv_check_asm_w32="$gmp_tmp_op"
! 687: break
! 688: fi
! 689: fi
! 690: done
! 691: ;;
! 692: esac
! 693:
! 694: if test -z "$gmp_cv_check_asm_w32"; then
! 695: echo; echo ["configure: $0: fatal: do not know how to define a 32-bit word"]
! 696: exit 1
! 697: fi
! 698: rm -f conftest*
! 699: ])
! 700: echo ["define(<W32>, <$gmp_cv_check_asm_w32>)"] >> $gmp_tmpconfigm4
! 701: ])
! 702:
! 703: dnl GMP_CHECK_ASM_MMX([ACTION-IF-FOUND, [ACTION-IF-NOT-FOUND]])
! 704: dnl Can we assemble MMX insns?
! 705: AC_DEFUN(GMP_CHECK_ASM_MMX,
! 706: [AC_REQUIRE([GMP_CHECK_ASM_TEXT])
! 707: AC_CACHE_CHECK([if the assembler knows about MMX instructions],
! 708: gmp_cv_check_asm_mmx,
! 709: [cat > conftest.s <<EOF
! 710: $gmp_cv_check_asm_text
! 711: por %mm0, %mm0
! 712: EOF
! 713: ac_assemble="$CCAS $CFLAGS conftest.s 1>&AC_FD_CC"
! 714: if AC_TRY_EVAL(ac_assemble); then
! 715: gmp_cv_check_asm_mmx=yes
! 716: else
! 717: gmp_cv_check_asm_mmx=no
! 718: fi
! 719: rm -f conftest*
! 720: ])
! 721: if test "$gmp_cv_check_asm_mmx" = "yes"; then
! 722: ifelse([$1], , :, [$1])
! 723: else
! 724: AC_MSG_WARN([+----------------------------------------------------------])
! 725: AC_MSG_WARN([| WARNING WARNING WARNING])
! 726: AC_MSG_WARN([| Target CPU has MMX code, but it can't be assembled by])
! 727: AC_MSG_WARN([| $CCAS $CFLAGS])
! 728: AC_MSG_WARN([| Non-MMX replacements will be used.])
! 729: AC_MSG_WARN([| This will be an inferior build.])
! 730: AC_MSG_WARN([+----------------------------------------------------------])
! 731: ifelse([$2], , :, [$2])
! 732: fi
! 733: ])dnl
! 734:
! 735: dnl GMP_CHECK_ASM_SHLDL_CL([ACTION-IF-FOUND, [ACTION-IF-NOT-FOUND]])
! 736: AC_DEFUN(GMP_CHECK_ASM_SHLDL_CL,
! 737: [AC_REQUIRE([GMP_CHECK_ASM_TEXT])
! 738: AC_CACHE_CHECK([if the assembler takes cl with shldl],
! 739: gmp_cv_check_asm_shldl_cl,
! 740: [cat > conftest.s <<EOF
! 741: $gmp_cv_check_asm_text
! 742: shldl %cl, %eax, %ebx
! 743: EOF
! 744: ac_assemble="$CCAS $CFLAGS conftest.s 1>&AC_FD_CC"
! 745: if AC_TRY_EVAL(ac_assemble); then
! 746: gmp_cv_check_asm_shldl_cl=yes
! 747: else
! 748: gmp_cv_check_asm_shldl_cl=no
! 749: fi
! 750: rm -f conftest*
! 751: ])
! 752: if test "$gmp_cv_check_asm_shldl_cl" = "yes"; then
! 753: ifelse([$1], , :, [$1])
! 754: else
! 755: ifelse([$2], , :, [$2])
! 756: fi
! 757: ])dnl
! 758:
! 759: dnl GMP_PROG_CC_WORKS(CC, CFLAGS, ACTION-IF-WORKS, [ACTION-IF-NOT-WORKS])
! 760: dnl Check if CC can compile and link. Perform various target specific tests.
! 761: dnl FIXME: Require `$target'.
! 762: AC_DEFUN(GMP_PROG_CC_WORKS,
! 763: [AC_LANG_C dnl Note: Destructive.
! 764: CC="[$1]"
! 765: CFLAGS="[$2]"
! 766: AC_MSG_CHECKING([if the C compiler ($CC) works with flags $CFLAGS])
! 767:
! 768: # Simple test for all targets.
! 769: AC_TRY_COMPILER([int main(){return(0);}],
! 770: tmp_works, tmp_cross)
! 771:
! 772: # Target specific tests.
! 773: if test "$tmp_works" = "yes"; then
! 774: case "$target" in
! 775: *-*-aix*) # Returning a funcptr.
! 776: AC_TRY_COMPILE( , [} void *g(); void *f() { return g(); } int bar(){],
! 777: tmp_works=yes, tmp_works=no)
! 778: ;;
! 779: esac
! 780: fi
! 781:
! 782: if test "$tmp_works" = "yes"; then
! 783: [$3]
! 784: else
! 785: ifelse([$4], , :, [$4])
! 786: fi
! 787:
! 788: AC_MSG_RESULT($tmp_works)
! 789: ])dnl
! 790:
! 791:
! 792: dnl GMP_C_ANSI2KNR
! 793: dnl --------------
! 794: dnl Setup to use ansi2knr if necessary.
! 795: dnl
! 796: dnl The test here is simply that if an ANSI style function works then
! 797: dnl ansi2knr isn't needed. The normal tests for whether $CC works mean we
! 798: dnl don't need to worry here about anything badly broken.
! 799: dnl
! 800: dnl AM_C_PROTOTYPES is the normal way to set up ansi2knr, but (in automake
! 801: dnl March 2000) it gives the wrong answer on a C++ compiler because its
! 802: dnl test requires that the compiler accept both ANSI and K&R, or otherwise
! 803: dnl ansi2knr is used. A C++ compiler fails on the K&R part, which makes
! 804: dnl AM_C_PROTOTYPES think it needs ansi2knr! GMP has no bare K&R so we
! 805: dnl only need ANSI or K&R to work, not both.
! 806:
! 807: AC_DEFUN(GMP_C_ANSI2KNR,
! 808: [AC_CACHE_CHECK([if ansi2knr should be used],
! 809: gmp_cv_c_ansi2knr,
! 810: [cat >conftest.c <<EOF
! 811: int main (int argc, char *argv[]) { return 0; }
! 812: EOF
! 813: if AC_TRY_EVAL(ac_compile); then
! 814: gmp_cv_c_ansi2knr=no
! 815: else
! 816: gmp_cv_c_ansi2knr=yes
! 817: fi
! 818: rm -f conftest.*
! 819: ])
! 820: if test $gmp_cv_c_ansi2knr = no; then
! 821: U= ANSI2KNR=
! 822: else
! 823: U=_ ANSI2KNR=./ansi2knr
! 824: # Ensure some checks needed by ansi2knr itself.
! 825: AC_HEADER_STDC
! 826: AC_CHECK_HEADERS(string.h)
! 827: fi
! 828: AC_SUBST(U)
! 829: AC_SUBST(ANSI2KNR)
! 830: ])
! 831:
! 832:
! 833: dnl Deal with bad synchronization of Autoconf with Libtool.
! 834: AC_DEFUN(AC_CANONICAL_BUILD, [_AC_CANONICAL_BUILD])
! 835: AC_DEFUN(AC_CHECK_TOOL_PREFIX, [_AC_CHECK_TOOL_PREFIX])
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>