1 dnl Process this file with autoconf to produce a configure script.
4 dnl Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
6 dnl This file is part of the GNU MP Library.
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.
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.
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.
24 AC_REVISION($Revision: 1.8 $)dnl
32 AM_INIT_AUTOMAKE(gmp, GMP_VERSION)
33 AM_CONFIG_HEADER(config.h:config.in)
41 AC_HELP_STRING([--enable-assert],[enable ASSERT checking [default=no]]),
42 [case "${enableval}" in
44 *) AC_MSG_ERROR([bad value ${enableval} for --enable-assert, need yes or no]) ;;
48 if test "$enable_assert" = "yes"; then
49 AC_DEFINE(WANT_ASSERT,1,
50 [./configure --enable-assert option, to enable some ASSERT()s])
55 AC_HELP_STRING([--enable-alloca],[use alloca for temp space [default=yes]]),
56 [case "${enableval}" in
58 *) AC_MSG_ERROR([bad value ${enableval} for --enable-alloca, need yes or no]) ;;
62 if test "$enable_alloca" = "no"; then
63 AC_DEFINE(USE_STACK_ALLOC,1,
64 [./configure --disable-alloca option, to use stack-alloc.c, not alloca])
69 AC_HELP_STRING([--enable-fft],[enable FFTs for multiplication [default=no]]),
70 [case "${enableval}" in
72 *) AC_MSG_ERROR([bad value ${enableval} for --enable-fft, need yes or no]) ;;
76 if test "$enable_fft" = "yes"; then
78 [./configure --enable-fft option, to enable FFTs for multiplication])
83 AC_HELP_STRING([--enable-mpbsd],[build Berkley MP compatibility library [default=no]]),
84 [case "${enableval}" in
86 *) AC_MSG_ERROR([bad value ${enableval} for --enable-mpbsd, need yes or no]) ;;
89 AM_CONDITIONAL(WANT_MPBSD, test "$enable_mpbsd" = "yes")
93 AC_HELP_STRING([--enable-mpfr],[build MPFR [default=no]]),
94 [case "${enableval}" in
96 *) AC_MSG_ERROR([bad value ${enableval} for --enable-mpfr, need yes or no]) ;;
99 AM_CONDITIONAL(WANT_MPFR, test "$enable_mpfr" = "yes")
102 dnl Switch on OS and determine what compiler to use.
104 dnl os_64bit Set to "yes" if OS is 64-bit capable.
105 dnl FIXME: Rename to `check_64bit_compiler'!
106 dnl cclist List of compilers, best first.
107 dnl gmp_cflags_{cc} Flags for compiler named {cc}.
108 dnl gmp_cflags64_{cc} Flags for compiler named {cc} for 64-bit code.
109 dnl gmp_optcflags_{cc} Optional compiler flags.
110 dnl gmp_xoptcflags_{cc} Exclusive optional compiler flags.
113 cclist="gcc cc" # FIXME: Prefer c89 to cc.
114 gmp_cflags_gcc="-g -O2"
115 gmp_cflags64_gcc="-g -O2"
122 # Don't perform any assembly syntax tests on this beast.
123 gmp_no_asm_syntax_testing=yes
125 gmp_cflags_cc="$gmp_cflags_cc -O"
128 flavour=`echo $target_cpu | sed 's/^alpha//g'`
129 if test -n "$flavour"; then
130 case $flavour in # compilers don't seem to understand `ev67' and such.
131 ev6? | ev7*) flavour=ev6;;
133 gmp_optcflags_gcc="-mcpu=$flavour"
134 # FIXME: We shouldn't fail fatally if none of these work, but that's
135 # how xoptcflags work and we don't have any other mechanism right now.
136 # Why do we need this here and not for alpha*-*-* below?
137 gmp_xoptcflags_gcc="-Wa,-arch,${flavour} -Wa,-m${flavour}"
138 gmp_optcflags_cc="-arch $flavour -tune $flavour"
143 flavour=`echo $target_cpu | sed 's/^alpha//g'`
144 if test -n "$flavour"; then
146 ev6? | ev7*) flavour=ev6;;
148 gmp_optcflags_gcc="-mcpu=$flavour"
151 # Cray vector machines. This must come after alpha* so that we can
152 # recognize present and future vector processors with a wildcard.
154 # Don't perform any assembly syntax tests on this beast.
155 gmp_no_asm_syntax_testing=yes
157 # Don't inherit default gmp_cflags_cc value; it comes with -g which
158 # disables all optimization on Cray vector systems
162 # AMD and Intel x86 configurations
163 [i?86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-*])
164 # Rumour has it -O2 used to give worse register allocation than just -O.
165 gmp_cflags_gcc="-g -O -fomit-frame-pointer"
168 i386*-*-*) gmp_optcflags_gcc="-mcpu=i386 -march=i386";;
169 i486*-*-*) gmp_optcflags_gcc="-mcpu=i486 -march=i486";;
170 i586*-*-* | pentium-*-* | pentiummmx-*-*)
171 gmp_optcflags_gcc="-mcpu=pentium -march=pentium";;
173 # -march=pentiumpro not used because mpz/powm.c (swox cvs rev 1.4)
174 # tickles a bug in gcc 2.95.2 (believed fixed in 2.96).
175 [i686*-*-* | pentiumpro-*-* | pentium[23]-*-*])
176 gmp_optcflags_gcc="-mcpu=pentiumpro";;
178 k6*-*-*) gmp_optcflags_gcc="-mcpu=k6 -march=k6";;
180 # Athlon instruction costs are close to p6: 3 cycle load latency, 4-6
181 # cycle mul, 40 cycle div, pairable adc, ...
182 # FIXME: Change this when gcc gets something specific for Athlon.
183 # -march=pentiumpro not used, per i686 above.
184 athlon-*-*) gmp_optcflags_gcc="-mcpu=pentiumpro";;
189 [ultrasparc*-*-solaris2.[7-9] | sparcv9-*-solaris2.[7-9]])
191 gmp_cflags_gcc="$gmp_cflags_gcc -Wa,-xarch=v8plus"
192 gmp_xoptcflags_gcc="-mcpu=v9 -mcpu=v8 -mv8"
193 gmp_cflags64_gcc="$gmp_cflags64_gcc -m64 -mptr64 -Wa,-xarch=v9 -mcpu=v9"
194 gmp_cflags_cc="-xtarget=native -xarch=v8 -xO4"
195 gmp_cflags64_cc="-xtarget=native -xarch=v9 -xO4"
198 # Need to think more about the options passed here. This isn't good for
199 # some sparc64 linux distros, since we end up not optimizing when all the
200 # options below fail.
202 gmp_cflags64_gcc="$gmp_cflags64_gcc -m64 -mptr64 -Wa,-xarch=v9 -mcpu=v9"
203 gmp_cflags_gcc="$gmp_cflags_gcc -m32"
204 gmp_xoptflags_gcc="-mcpu=ultrasparc -mvis"
206 ultrasparc*-*-* | sparcv9-*-*)
207 gmp_cflags_gcc="$gmp_cflags_gcc -Wa,-xarch=v8plus"
208 gmp_xoptcflags_gcc="-mcpu=v9 -mcpu=v8 -mv8"
209 gmp_cflags_cc="-xtarget=native -xarch=v8 -xO4"
211 sparcv8*-*-solaris2.* | microsparc*-*-solaris2.*)
212 gmp_cflags_gcc="$gmp_cflags_gcc"
213 gmp_xoptcflags_gcc="-mcpu=v8 -mv8"
214 gmp_cflags_cc="-xtarget=native -xarch=v8 -xO4"
216 sparcv8*-*-* | microsparc*-*-*) # SunOS, Linux, *BSD
218 gmp_cflags_gcc="$gmp_cflags_gcc"
219 gmp_xoptcflags_gcc="-mcpu=v8 -mv8"
220 gmp_cflags_acc="-g -O2 -cg92"
221 gmp_cflags_cc="-O2" # FIXME: Flag for v8?
223 supersparc*-*-solaris2.*)
224 gmp_cflags_gcc="$gmp_cflags_gcc -DSUPERSPARC"
225 gmp_xoptcflags_gcc="-mcpu=v8 -mv8"
226 gmp_cflags_cc="-xtarget=native -xarch=v8 -xO4 -DSUPERSPARC"
228 supersparc*-*-*) # SunOS, Linux, *BSD
230 gmp_cflags_gcc="$gmp_cflags_gcc -DSUPERSPARC"
231 gmp_xoptcflags_gcc="-mcpu=v8 -mv8"
232 gmp_cflags_acc="-g -O2 -cg92 -DSUPERSPARC"
233 gmp_cflags_cc="-O2 -DSUPERSPARC" # FIXME: Flag for v8?
237 gmp_cflags_acc="-g -O2"
238 gmp_cflags_cc="-g -O2"
244 gmp_cflags_gcc="$gmp_cflags_gcc -maix64 -mpowerpc64"
245 gmp_cflags_xlc="-g -O2 -q64 -qtune=pwr3"
249 gmp_cflags_gcc="$gmp_cflags_gcc -mpowerpc"
250 gmp_cflags_xlc="$gmp_cflags_cc -qarch=ppc -O2"
254 gmp_cflags_gcc="$gmp_cflags_gcc -mpower"
255 gmp_cflags_xlc="$gmp_cflags_cc -qarch=pwr -O2"
258 gmp_cflags_gcc="$gmp_cflags_gcc -mpowerpc64"
259 AC_DEFINE(_LONG_LONG_LIMB) dnl FIXME: Remove.
261 powerpc-apple-darwin* | powerpc-apple-macosx*)
262 gmp_cflags_gcc="$gmp_cflags_gcc -mpowerpc -traditional-cpp"
265 gmp_cflags_gcc="$gmp_cflags_gcc -mpowerpc"
271 gmp_cflags64_gcc="-g -O2 -mabi=n32"
272 gmp_cflags64_cc="$gmp_cflags64_cc -O2 -n32"
275 # Motorola 68k family
277 gmp_cflags_gcc="-g -O -m88110" dnl FIXME: Use `-O2'?
280 gmp_cflags_gcc="$gmp_cflags_gcc -fomit-frame-pointer"
286 gmp_cflags_c89="$gmp_cflags_cc +O2"
287 gmp_cflags_cc="$gmp_cflags_cc +O2"
291 gmp_cflags_c89="+DD64 +O3"
292 gmp_cflags_cc="+DD64 +O3"
297 gmp_cflags64_gcc="$gmp_cflags64_gcc -mWHAT -D_LONG_LONG_LIMB"
298 # +O2 to cc triggers bug in mpz/powm.c (1.4)
299 gmp_cflags64_c89="+DA2.0 +e +O3 -D_LONG_LONG_LIMB"
300 gmp_cflags64_cc="+DA2.0 +e +O3 -D_LONG_LONG_LIMB"
301 gmp_cflags_c89="$gmp_cflags_cc +O2"
302 gmp_cflags_cc="$gmp_cflags_cc +O2"
307 gmp_cflags_gcc="$gmp_cflags_gcc -fomit-frame-pointer"
311 [f30[01]-fujitsu-sysv*])
313 gmp_cflags_vcc="-g" # FIXME: flags for vcc?
318 *-*-mingw32) gmp_cflags_gcc="$gmp_cflags_gcc -mno-cygwin";;
321 dnl Check for programs needed by macros for finding compiler.
322 dnl More programs are checked for below, when a compiler is found.
323 AC_PROG_NM dnl Macro from Libtool.
324 # nm on 64-bit AIX needs to know the object file format
331 # Save CFLAGS given on command line.
332 gmp_user_CFLAGS="$CFLAGS"
334 if test -z "$CC"; then
336 GMP_PROG_CC_FIND($cclist, $os_64bit)
338 # If 64-bit OS and we have a 64-bit compiler, use it.
339 if test -n "$os_64bit" && test -n "$CC64"; then
343 eval CFLAGS=\$gmp_cflags_$CC
346 # Try compiler flags that may work with only some compiler versions.
347 # gmp_optcflags: All or nothing.
348 eval optcflags=\$gmp_optcflags_$CC
349 if test -n "$optcflags"; then
350 CFLAGS_save="$CFLAGS"
351 CFLAGS="$CFLAGS $optcflags"
352 AC_MSG_CHECKING([whether $CC accepts $optcflags])
354 AC_TRY_COMPILER([int main(){return(0);}], optok, cross)
355 if test "$optok" = "yes"; then
359 CFLAGS="$CFLAGS_save"
362 # gmp_xoptcflags: First is best, one has to work.
363 eval xoptcflags=\$gmp_xoptcflags_$CC
364 if test -n "$xoptcflags"; then
366 for xopt in $xoptcflags; do
367 CFLAGS_save="$CFLAGS"
368 CFLAGS="$CFLAGS $xopt"
369 AC_MSG_CHECKING([whether $CC accepts $xopt])
371 AC_TRY_COMPILER([int main(){return(0);}], optok, cross)
372 if test "$optok" = "yes"; then
378 CFLAGS="$CFLAGS_save"
381 if test "$gmp_found" = "no"; then
382 echo ["$0: fatal: need a compiler that understands one of $xoptcflags"]
388 # Restore CFLAGS given on command line.
389 # FIXME: We've run through quite some unnecessary code looking for a
390 # nice compiler and working flags for it, just to spoil that with user
392 test -n "$gmp_user_CFLAGS" && CFLAGS="$gmp_user_CFLAGS"
394 # Select chosen compiler.
401 dnl Checks for programs.
402 dnl --------------------
407 AC_CHECK_PROG(AR, ar, ar)
408 # ar on AIX needs to know the object file format
414 dnl FIXME: Find good ld? /usr/ucb/ld on Solaris won't work.
416 dnl Checks for assembly syntax.
417 if test "$gmp_no_asm_syntax_testing" != "yes"; then
421 GMP_CHECK_ASM_LABEL_SUFFIX
424 GMP_CHECK_ASM_LSYM_PREFIX
426 GMP_CHECK_ASM_UNDERSCORE(underscore=yes, underscore=no)
427 GMP_CHECK_ASM_ALIGN_LOG(asm_align=log, asm_align=nolog)
430 dnl FIXME: Check for FPU and set `floating_point' appropriately.
432 dnl ========================================
434 dnl ----------------------------------------
435 dnl Set the following target specific variables:
436 dnl path where to search for source files
437 dnl family processor family (Needed for building
438 dnl asm-syntax.h for now. FIXME: Remove.)
439 dnl extra_functions extra functions
447 [sparcv9*-*-solaris2.[789]* | sparc64*-*-solaris2.[789]* | ultrasparc*-*-solaris2.[789]*])
450 else path="sparc32/v9 sparc32/v8 sparc32"
456 else path="sparc32/v9 sparc32/v8 sparc32"
459 sparcv8*-*-* | microsparc*-*-*)
460 path="sparc32/v8 sparc32"
461 if test x${floating_point} = xno
462 then extra_functions="udiv_nfp"
463 else extra_functions="udiv_fp"
466 sparcv9*-*-* | ultrasparc*-*-*)
467 path="sparc32/v9 sparc32/v8 sparc32"
468 extra_functions="udiv_fp"
471 path="sparc32/v8/supersparc sparc32/v8 sparc32"
472 extra_functions="udiv"
474 sparc*-*-*) path="sparc32"
475 if test x${floating_point} = xno
476 then extra_functions="udiv_nfp"
477 else extra_functions="udiv_fp"
481 path="hppa/hppa1_1 hppa"
482 extra_functions="udiv_qrnnd"
486 extra_functions="udiv_qrnnd"
490 extra_functions="umul_ppmm udiv_qrnnd"
493 if test -n "$CC64"; then
495 extra_functions="umul_ppmm udiv_qrnnd"
496 # We need to use the system compiler, or actually the system assembler,
497 # since GAS has not been ported to understand the 2.0 instructions.
500 # FIXME: path should be "hppa/hppa2_0 hppa/hppa1_1 hppa"
501 path="hppa/hppa1_1 hppa"
502 extra_functions="udiv_qrnnd"
505 hppa*-*-*) #assume pa7100
506 path="hppa/hppa1_1/pa7100 hppa/hppa1_1 hppa"
507 extra_functions="udiv_qrnnd";;
508 [f30[01]-fujitsu-sysv*])
510 alphaev6*-*-*) path="alpha/ev6 alpha"; extra_functions="invert_limb cntlz";;
511 alphaev5*-*-*) path="alpha/ev5 alpha"; extra_functions="invert_limb cntlz";;
512 alpha*-*-*) path="alpha"; extra_functions="invert_limb cntlz";;
513 # Cray vector machines. This must come after alpha* so that we can
514 # recognize present and future vector processors with a wildcard.
517 extra_functions="mulww";;
518 am29000*-*-*) path="a29k";;
519 a29k*-*-*) path="a29k";;
521 # AMD and Intel x86 configurations
523 [i?86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-*])
524 gmp_m4postinc="x86/x86-defs.m4"
525 extra_functions="udiv umul"
526 CALLING_CONVENTIONS_OBJS="x86call.o x86check.o"
528 GMP_CHECK_ASM_SHLDL_CL(
529 [GMP_DEFINE(WANT_SHLDL_CL,1)],
530 [GMP_DEFINE(WANT_SHLDL_CL,0)])
531 GMP_CHECK_ASM_ALIGN_FILL_0x90
533 # the CPUs below wanting to know about mmx
535 [pentiummmx-*-* | pentium[23]-*-* | k6*-*-* | athlon-*-*])
536 GMP_CHECK_ASM_MMX(tmp_mmx=yes, tmp_mmx=no)
540 # default for anything not otherwise mentioned
548 # don't know what best suits k5
551 i586*-*-* | pentium-*-*)
552 path="x86/pentium x86"
555 path="x86/pentium x86"
556 if test "$tmp_mmx" = yes; then
557 path="x86/pentium/mmx $path"
560 i686*-*-* | pentiumpro-*-*)
565 # The pentium/mmx lshift and rshift are good on p6 and can be used
566 # until there's something specific for p6.
567 if test "$tmp_mmx" = yes; then
568 path="x86/p6/mmx x86/pentium/mmx $path"
573 # The pentium/mmx lshift and rshift are good on p6 and can be used
574 # until there's something specific for p6.
575 if test "$tmp_mmx" = yes; then
576 path="x86/p6/p3mmx x86/p6/mmx x86/pentium/mmx $path"
581 if test "$tmp_mmx" = yes; then
582 path="x86/k6/k62mmx x86/k6/mmx $path"
587 if test "$tmp_mmx" = yes; then
588 path="x86/k6/mmx $path"
593 if test "$tmp_mmx" = yes; then
594 path="x86/k7/mmx $path"
601 i960*-*-*) path="i960";;
603 ia64*-*-*) path="ia64";;
605 # Motorola 68k configurations. Let m68k mean 68020-68040.
606 [m680[234]0*-*-* | m68k*-*-* | \
607 m68*-next-nextstep*]) # Nexts are at least '020
608 path="m68k/mc68020 m68k"
616 m88k*-*-* | m88k*-*-*) path="m88k";;
617 m88110*-*-*) path="m88k/mc88110 m88k";;
618 ns32k*-*-*) path="ns32k";;
620 pyramid-*-*) path="pyr";;
622 ppc601-*-*) path="power powerpc32";;
623 powerpc64*-*-*) path="powerpc64";;
624 powerpc*-*-*) path="powerpc32";;
625 rs6000-*-* | power-*-* | power2-*-*)
627 extra_functions="udiv_w_sdiv"
631 sh2-*-*) path="sh/sh2 sh";;
633 [mips[34]*-*-*]) path="mips3";;
634 mips*-*-irix6*) path="mips3";;
635 mips*-*-*) path="mips2";;
637 vax*-*-*) path="vax"; extra_functions="udiv_w_sdiv";;
639 z8000x*-*-*) path="z8000x"; extra_functions="udiv_w_sdiv";;
640 z8000*-*-*) path="z8000"; extra_functions="udiv_w_sdiv";;
642 clipper*-*-*) path="clipper";;
645 AC_SUBST(CALLING_CONVENTIONS_OBJS)
646 if test -n "$CALLING_CONVENTIONS_OBJS"; then
647 AC_DEFINE(HAVE_CALLING_CONVENTIONS,1,
648 [Define if mpn/tests has calling conventions checking for the CPU])
653 [i[5-8]86*-*-* | k[5-8]*-*-* | pentium*-*-* | athlon-*-*])
654 # rdtsc is in pentium and up, not in i386 and i486
655 SPEED_CYCLECOUNTER_OBJS=pentium.lo
658 SPEED_CYCLECOUNTER_OBJS=alpha.lo
660 sparcv9*-*-* | ultrasparc*-*-* | sparc64*-*-*)
661 SPEED_CYCLECOUNTER_OBJS=sparcv9.lo
664 SPEED_CYCLECOUNTER_OBJS=hppa2.lo
667 SPEED_CYCLECOUNTER_OBJS=hppa.lo
671 AC_SUBST(SPEED_CYCLECOUNTER_OBJS)
673 if test -n "$SPEED_CYCLECOUNTER_OBJS"
675 AC_DEFINE(HAVE_SPEED_CYCLECOUNTER, 1,
676 [Define if a speed_cyclecounter exists (for the tune programs)])
680 dnl Extensions for executable and object files.
681 dnl -------------------------------------------
687 dnl FIXME: Shared libs seem to fail on aix4.3.
688 dnl FIXME: Should invoke [AC_DISABLE_SHARED], but m4 recurses to death.
690 [*-*-aix4.[3-9]*]) enable_shared=no ;;
694 dnl Checks for libraries.
695 dnl ---------------------
696 AC_CHECK_DECLS((optarg))
698 dnl Checks for header files.
699 dnl ------------------------
701 AC_CHECK_HEADERS(getopt.h unistd.h sys/sysctl.h sys/time.h)
703 dnl Checks for typedefs, structures, and compiler characteristics.
704 dnl --------------------------------------------------------------
705 AC_CHECK_TYPES((void))
708 dnl Checks for library functions.
709 dnl -----------------------------
710 dnl Most of these are only for the benefit of supplementary programs. The
711 dnl library itself doesn't use anything weird.
714 dnl AC_CHECK_FUNCS(strtol)
715 AC_CHECK_FUNCS(getopt_long getpagesize popen processor_info strtoul sysconf sysctlbyname)
717 dnl Trick automake into thinking we've run AM_C_PROTOTYPES which it wants
718 dnl for ansi2knr, and instead use our own test. (It's only a warning
719 dnl automake prints, but it's good to suppress it.)
726 dnl Set `syntax' to one of <blank>, "mit", "elf", "aix", "macho".
728 # For now, we use the old switch for setting syntax.
729 # FIXME: Remove when conversion to .asm is completed.
732 m680[234]0*-*-linuxaout* | m68k*-*-linuxaout* | \
733 m68k-next-nextstep* | \
737 m680[234]0*-*-linux* | m68k*-*-linux*)
740 m680[234]0*-*-* | m68k*-*-*)
746 dnl ----------------------------------------
747 # Now build an asm-syntax.h file for targets that include that from the
749 # FIXME: Remove when conversion to .asm is completed.
750 case "${family}-${underscore}-${asm_align}-${syntax}" in
752 echo '#define MIT_SYNTAX' >asm-syntax.h
753 cat $srcdir/mpn/underscore.h >>asm-syntax.h
754 echo '#include "'$srcdir'/mpn/m68k/syntax.h"' >>asm-syntax.h;;
756 echo '#define ELF_SYNTAX' >asm-syntax.h
757 echo '#define C_SYMBOL_NAME(name) name' >>asm-syntax.h
758 echo '#include "'$srcdir'/mpn/m68k/syntax.h"' >>asm-syntax.h;;
762 # The pattern here tests for an absolute path the same way as
763 # _AC_OUTPUT_FILES in autoconf acgeneral.m4.
764 GMP_DEFINE_RAW(["dnl CONFIG_TOP_SRCDIR is a path from the mpn builddir to the top srcdir"])
766 [[\\/]]* | ?:[[\\/]]* )
767 GMP_DEFINE_RAW(["define(<CONFIG_TOP_SRCDIR>,<\`$srcdir'>)"]) ;;
768 *) GMP_DEFINE_RAW(["define(<CONFIG_TOP_SRCDIR>,<\`../$srcdir'>)"]) ;;
771 GMP_DEFINE_RAW(["include(CONFIG_TOP_SRCDIR\`/mpn/asm-defs.m4')"], POST)
773 # Must be after asm-defs.m4
774 GMP_DEFINE_RAW("define_not_for_expansion(\`HAVE_TARGET_CPU_$target_cpu')", POST)
777 dnl config.m4 post-includes
778 dnl -----------------------
779 dnl (Note x86 post include set with $path above.)
783 gmp_m4postinc="alpha/unicos.m4"
786 gmp_m4postinc="alpha/default.m4"
790 *-*-mach* | *-*-rhapsody* | *-*-nextstep* | *-*-darwin* | *-*-macosx*)
791 ;; # these use non-conventional assembly syntax.
793 gmp_m4postinc="powerpc32/regmap.m4 powerpc64/aix.m4"
796 gmp_m4postinc="powerpc32/regmap.m4 powerpc32/aix.m4"
799 gmp_m4postinc="powerpc32/regmap.m4"
806 for tmp_f in $gmp_m4postinc; do
807 GMP_DEFINE_RAW(["include_mpn(\`$tmp_f')"], POST)
811 # Set up `gmp_links'. It's a list of link:file pairs that configure will
812 # process to create link -> file.
815 # If the user specified `MPN_PATH', use that instead of the path we've
817 if test -z "$MPN_PATH"; then
823 # Pick the correct source files in $path and link them to mpn/.
824 # $gmp_mpn_functions lists all functions we need.
826 # The rule is to find a file with the function name and a .asm, .S,
827 # .s, or .c extension. Certain multi-function files with special names
828 # can provide some functions too. (mpn/Makefile.am passes
829 # -DOPERATION_<func> to get them to generate the right code.)
831 # FIXME: udiv and umul aren't in $gmp_mpn_functions_optional yet since
832 # there's some versions of those files which should be checked for bit
833 # rot first. Put them in $extra_functions for each target for now,
834 # change to standard optionals when all are ready.
836 # Note: The following lines defining $gmp_mpn_functions_optional
837 # and $gmp_mpn_functions are parsed by the "macos/configure"
838 # Perl script. So if you change the lines in a major way
839 # make sure to run and examine the output from
841 # % (cd macos; perl configure)
843 gmp_mpn_functions_optional="copyi copyd com_n \
844 and_n andn_n nand_n ior_n iorn_n nior_n xor_n xnor_n"
846 gmp_mpn_functions="${extra_functions} inlines add_n sub_n mul_1 addmul_1 \
847 submul_1 lshift rshift diveby3 divrem divrem_1 divrem_2 \
848 mod_1 mod_1_rs pre_mod_1 dump \
849 mul mul_fft mul_n mul_basecase sqr_basecase random \
850 random2 sqrtrem get_str set_str scan0 scan1 popcount hamdist cmp perfsqr \
851 bdivmod gcd_1 gcd gcdext tdiv_qr bz_divrem_n sb_divrem_mn jacbase \
852 $gmp_mpn_functions_optional"
854 # the list of all object files used by mpn/Makefile.in and the
855 # top-level Makefile.in, respectively
857 mpn_objs_in_libgmp="mpn/mp_bases.lo"
859 for tmp_fn in ${gmp_mpn_functions} ; do
860 [rm -f mpn/${tmp_fn}.[Ssc] mpn/${tmp_fn}.asm]
862 # functions that can be provided by multi-function files
865 add_n|sub_n) tmp_mulfunc="aors_n" ;;
866 addmul_1|submul_1) tmp_mulfunc="aorsmul_1" ;;
867 popcount|hamdist) tmp_mulfunc="popham" ;;
868 and_n|andn_n|nand_n | ior_n|iorn_n|nior_n | xor_n|xnor_n)
869 tmp_mulfunc="logops_n" ;;
873 for tmp_dir in $path; do
874 for tmp_base in $tmp_fn $tmp_mulfunc; do
875 for tmp_ext in asm S s c; do
876 tmp_file=$srcdir/mpn/$tmp_dir/$tmp_base.$tmp_ext
877 if test -f $tmp_file; then
880 mpn_objects="$mpn_objects ${tmp_fn}.lo"
881 mpn_objs_in_libgmp="$mpn_objs_in_libgmp mpn/${tmp_fn}.lo"
882 gmp_links="$gmp_links mpn/$tmp_fn.$tmp_ext:mpn/$tmp_dir/$tmp_base.$tmp_ext"
884 # duplicate AC_DEFINEs are harmless, so it doesn't matter
885 # that multi-function files get grepped here repeatedly
887 sed -n 's/^[ ]*MULFUNC_PROLOGUE(\(.*\))/\1/p' $tmp_file ;
888 sed -n 's/^[ ]*PROLOGUE.*(\(.*\))/\1/p' $tmp_file
890 for gmp_tmp in $gmp_ep; do
891 AC_DEFINE_UNQUOTED(HAVE_NATIVE_${gmp_tmp})
897 if test $found = yes; then break ; fi
899 if test $found = yes; then break ; fi
902 if test $found = no; then
903 for tmp_optional in $gmp_mpn_functions_optional; do
904 if test $tmp_optional = $tmp_fn; then
908 if test $found = no; then
909 AC_MSG_ERROR([no version of $tmp_fn found in path: $path])
914 # Create link for gmp-mparam.h.
915 for tmp_dir in $path ; do
917 if test -f $srcdir/mpn/${tmp_dir}/gmp-mparam.h ; then
918 gmp_links="$gmp_links gmp-mparam.h:mpn/${tmp_dir}/gmp-mparam.h"
920 # Copy any KARATSUBA_SQR_THRESHOLD in gmp-mparam.h to config.m4.
921 # Some versions of sqr_basecase.asm use this.
922 tmp_gmp_karatsuba_sqr_threshold="`sed -n 's/^#define KARATSUBA_SQR_THRESHOLD[ ]*\([0-9][0-9]*\).*$/\1/p' $srcdir/mpn/${tmp_dir}/gmp-mparam.h`"
923 if test -n "$tmp_gmp_karatsuba_sqr_threshold"; then
924 GMP_DEFINE_RAW(["define(<KARATSUBA_SQR_THRESHOLD>,<$tmp_gmp_karatsuba_sqr_threshold>)"])
931 # Dig out the links from `gmp_links' for inclusion in DISTCLEANFILES.
933 for f in $gmp_links; do
934 gmp_srclinks="$gmp_srclinks `echo $f | sed 's/\(.*\):.*/\1/'`"
937 AC_SUBST(mpn_objects)
938 AC_SUBST(mpn_objs_in_libgmp)
939 AC_SUBST(gmp_srclinks)
941 dnl ----------------------------------------
943 AC_CONFIG_LINKS($gmp_links)
945 dnl Create config.m4.
949 dnl FIXME: Upcoming version of autoconf/automake may not like broken lines.
950 AC_OUTPUT(Makefile mpz/Makefile mpn/Makefile)