Annotation of OpenXM_contrib/gmp/acinclude.m4, Revision 1.1.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>