1dnl Process this with autoconf to create configure 2 3AC_PREREQ(2.59) 4 5AC_INIT([libffi], [3.0.6], [http://gcc.gnu.org/bugs.html]) 6AC_CONFIG_HEADERS([fficonfig.h]) 7 8AC_CANONICAL_SYSTEM 9target_alias=${target_alias-$host_alias} 10 11. ${srcdir}/configure.host 12 13AM_INIT_AUTOMAKE 14 15# The same as in boehm-gc and libstdc++. Have to borrow it from there. 16# We must force CC to /not/ be precious variables; otherwise 17# the wrong, non-multilib-adjusted value will be used in multilibs. 18# As a side effect, we have to subst CFLAGS ourselves. 19 20m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS]) 21m4_define([_AC_ARG_VAR_PRECIOUS],[]) 22AC_PROG_CC 23m4_rename([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS]) 24 25AC_SUBST(CFLAGS) 26 27AM_PROG_AS 28AM_PROG_CC_C_O 29AC_PROG_LIBTOOL 30 31AM_MAINTAINER_MODE 32 33AC_CHECK_HEADERS(sys/mman.h) 34AC_CHECK_FUNCS(mmap) 35AC_FUNC_MMAP_BLACKLIST 36 37dnl The -no-testsuite modules omit the test subdir. 38AM_CONDITIONAL(TESTSUBDIR, test -d $srcdir/testsuite) 39 40TARGETDIR="unknown" 41case "$host" in 42 alpha*-*-*) 43 TARGET=ALPHA; TARGETDIR=alpha; 44 # Support 128-bit long double, changable via command-line switch. 45 HAVE_LONG_DOUBLE='defined(__LONG_DOUBLE_128__)' 46 ;; 47 48 arm*-*-*) 49 TARGET=ARM; TARGETDIR=arm 50 ;; 51 52 amd64-*-freebsd*) 53 TARGET=X86_64; TARGETDIR=x86 54 ;; 55 56 cris-*-*) 57 TARGET=LIBFFI_CRIS; TARGETDIR=cris 58 ;; 59 60 frv-*-*) 61 TARGET=FRV; TARGETDIR=frv 62 ;; 63 64 hppa*-*-linux* | parisc*-*-linux*) 65 TARGET=PA_LINUX; TARGETDIR=pa 66 ;; 67 hppa*64-*-hpux*) 68 TARGET=PA64_HPUX; TARGETDIR=pa 69 ;; 70 hppa*-*-hpux*) 71 TARGET=PA_HPUX; TARGETDIR=pa 72 ;; 73 74 i386-*-freebsd* | i386-*-openbsd*) 75 TARGET=X86_FREEBSD; TARGETDIR=x86 76 ;; 77 i?86-win32* | i?86-*-cygwin* | i?86-*-mingw*) 78 TARGET=X86_WIN32; TARGETDIR=x86 79 ;; 80 i?86-*-darwin*) 81 TARGET=X86_DARWIN; TARGETDIR=x86 82 ;; 83 i?86-*-solaris2.1[[0-9]]*) 84 TARGET=X86_64; TARGETDIR=x86 85 ;; 86 i?86-*-*) 87 TARGET=X86; TARGETDIR=x86 88 ;; 89 90 ia64*-*-*) 91 TARGET=IA64; TARGETDIR=ia64 92 ;; 93 94 m32r*-*-*) 95 TARGET=M32R; TARGETDIR=m32r 96 ;; 97 98 m68k-*-*) 99 TARGET=M68K; TARGETDIR=m68k 100 ;; 101 102 mips-sgi-irix5.* | mips-sgi-irix6.*) 103 TARGET=MIPS; TARGETDIR=mips 104 ;; 105 mips*-*-linux*) 106 TARGET=MIPS; TARGETDIR=mips 107 ;; 108 109 powerpc*-*-linux* | powerpc-*-sysv*) 110 TARGET=POWERPC; TARGETDIR=powerpc 111 ;; 112 powerpc-*-beos*) 113 TARGET=POWERPC; TARGETDIR=powerpc 114 ;; 115 powerpc-*-darwin*) 116 TARGET=POWERPC_DARWIN; TARGETDIR=powerpc 117 ;; 118 powerpc-*-aix* | rs6000-*-aix*) 119 TARGET=POWERPC_AIX; TARGETDIR=powerpc 120 ;; 121 powerpc-*-freebsd*) 122 TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc 123 ;; 124 powerpc*-*-rtems*) 125 TARGET=POWERPC; TARGETDIR=powerpc 126 ;; 127 128 s390-*-* | s390x-*-*) 129 TARGET=S390; TARGETDIR=s390 130 ;; 131 132 sh-*-* | sh[[34]]*-*-*) 133 TARGET=SH; TARGETDIR=sh 134 ;; 135 sh64-*-* | sh5*-*-*) 136 TARGET=SH64; TARGETDIR=sh64 137 ;; 138 139 sparc*-*-*) 140 TARGET=SPARC; TARGETDIR=sparc 141 ;; 142 143 x86_64-*-darwin*) 144 TARGET=X86_DARWIN; TARGETDIR=x86 145 ;; 146 x86_64-*-cygwin* | x86_64-*-mingw*) 147 ;; 148 x86_64-*-*) 149 TARGET=X86_64; TARGETDIR=x86 150 ;; 151esac 152 153AC_SUBST(AM_RUNTESTFLAGS) 154 155if test $TARGETDIR = unknown; then 156 AC_MSG_ERROR(["libffi has not been ported to $host."]) 157fi 158 159AM_CONDITIONAL(MIPS, test x$TARGET = xMIPS) 160AM_CONDITIONAL(SPARC, test x$TARGET = xSPARC) 161AM_CONDITIONAL(X86, test x$TARGET = xX86) 162AM_CONDITIONAL(X86_FREEBSD, test x$TARGET = xX86_FREEBSD) 163AM_CONDITIONAL(X86_WIN32, test x$TARGET = xX86_WIN32) 164AM_CONDITIONAL(X86_DARWIN, test x$TARGET = xX86_DARWIN) 165AM_CONDITIONAL(ALPHA, test x$TARGET = xALPHA) 166AM_CONDITIONAL(IA64, test x$TARGET = xIA64) 167AM_CONDITIONAL(M32R, test x$TARGET = xM32R) 168AM_CONDITIONAL(M68K, test x$TARGET = xM68K) 169AM_CONDITIONAL(POWERPC, test x$TARGET = xPOWERPC) 170AM_CONDITIONAL(POWERPC_AIX, test x$TARGET = xPOWERPC_AIX) 171AM_CONDITIONAL(POWERPC_DARWIN, test x$TARGET = xPOWERPC_DARWIN) 172AM_CONDITIONAL(POWERPC_FREEBSD, test x$TARGET = xPOWERPC_FREEBSD) 173AM_CONDITIONAL(ARM, test x$TARGET = xARM) 174AM_CONDITIONAL(LIBFFI_CRIS, test x$TARGET = xLIBFFI_CRIS) 175AM_CONDITIONAL(FRV, test x$TARGET = xFRV) 176AM_CONDITIONAL(S390, test x$TARGET = xS390) 177AM_CONDITIONAL(X86_64, test x$TARGET = xX86_64) 178AM_CONDITIONAL(SH, test x$TARGET = xSH) 179AM_CONDITIONAL(SH64, test x$TARGET = xSH64) 180AM_CONDITIONAL(PA_LINUX, test x$TARGET = xPA_LINUX) 181AM_CONDITIONAL(PA_HPUX, test x$TARGET = xPA_HPUX) 182AM_CONDITIONAL(PA64_HPUX, test x$TARGET = xPA64_HPUX) 183 184AC_HEADER_STDC 185AC_CHECK_FUNCS(memcpy) 186AC_FUNC_ALLOCA 187 188AC_CHECK_SIZEOF(double) 189AC_CHECK_SIZEOF(long double) 190 191# Also AC_SUBST this variable for ffi.h. 192if test -z "$HAVE_LONG_DOUBLE"; then 193 HAVE_LONG_DOUBLE=0 194 if test $ac_cv_sizeof_double != $ac_cv_sizeof_long_double; then 195 if test $ac_cv_sizeof_long_double != 0; then 196 HAVE_LONG_DOUBLE=1 197 AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the long double type and it is bigger than a double]) 198 fi 199 fi 200fi 201AC_SUBST(HAVE_LONG_DOUBLE) 202 203AC_C_BIGENDIAN 204 205AC_CACHE_CHECK([assembler .cfi pseudo-op support], 206 libffi_cv_as_cfi_pseudo_op, [ 207 libffi_cv_as_cfi_pseudo_op=unknown 208 AC_TRY_COMPILE([asm (".cfi_startproc\n\t.cfi_endproc");],, 209 [libffi_cv_as_cfi_pseudo_op=yes], 210 [libffi_cv_as_cfi_pseudo_op=no]) 211]) 212if test "x$libffi_cv_as_cfi_pseudo_op" = xyes; then 213 AC_DEFINE(HAVE_AS_CFI_PSEUDO_OP, 1, 214 [Define if your assembler supports .cfi_* directives.]) 215fi 216 217if test x$TARGET = xSPARC; then 218 AC_CACHE_CHECK([assembler and linker support unaligned pc related relocs], 219 libffi_cv_as_sparc_ua_pcrel, [ 220 save_CFLAGS="$CFLAGS" 221 save_LDFLAGS="$LDFLAGS" 222 CFLAGS="$CFLAGS -fpic" 223 LDFLAGS="$LDFLAGS -shared" 224 AC_TRY_LINK([asm (".text; foo: nop; .data; .align 4; .byte 0; .uaword %r_disp32(foo); .text");],, 225 [libffi_cv_as_sparc_ua_pcrel=yes], 226 [libffi_cv_as_sparc_ua_pcrel=no]) 227 CFLAGS="$save_CFLAGS" 228 LDFLAGS="$save_LDFLAGS"]) 229 if test "x$libffi_cv_as_sparc_ua_pcrel" = xyes; then 230 AC_DEFINE(HAVE_AS_SPARC_UA_PCREL, 1, 231 [Define if your assembler and linker support unaligned PC relative relocs.]) 232 fi 233 234 AC_CACHE_CHECK([assembler .register pseudo-op support], 235 libffi_cv_as_register_pseudo_op, [ 236 libffi_cv_as_register_pseudo_op=unknown 237 # Check if we have .register 238 AC_TRY_COMPILE([asm (".register %g2, #scratch");],, 239 [libffi_cv_as_register_pseudo_op=yes], 240 [libffi_cv_as_register_pseudo_op=no]) 241 ]) 242 if test "x$libffi_cv_as_register_pseudo_op" = xyes; then 243 AC_DEFINE(HAVE_AS_REGISTER_PSEUDO_OP, 1, 244 [Define if your assembler supports .register.]) 245 fi 246fi 247 248AC_CACHE_CHECK([whether .eh_frame section should be read-only], 249 libffi_cv_ro_eh_frame, [ 250 libffi_cv_ro_eh_frame=no 251 echo 'extern void foo (void); void bar (void) { foo (); foo (); }' > conftest.c 252 if $CC $CFLAGS -S -fpic -fexceptions -o conftest.s conftest.c > /dev/null 2>&1; then 253 if grep '.section.*eh_frame.*"a"' conftest.s > /dev/null; then 254 libffi_cv_ro_eh_frame=yes 255 elif grep '.section.*eh_frame.*#alloc' conftest.c \ 256 | grep -v '#write' > /dev/null; then 257 libffi_cv_ro_eh_frame=yes 258 fi 259 fi 260 rm -f conftest.* 261 ]) 262if test "x$libffi_cv_ro_eh_frame" = xyes; then 263 AC_DEFINE(HAVE_RO_EH_FRAME, 1, 264 [Define if .eh_frame sections should be read-only.]) 265 AC_DEFINE(EH_FRAME_FLAGS, "a", 266 [Define to the flags needed for the .section .eh_frame directive.]) 267else 268 AC_DEFINE(EH_FRAME_FLAGS, "aw", 269 [Define to the flags needed for the .section .eh_frame directive.]) 270fi 271 272AC_CACHE_CHECK([for __attribute__((visibility("hidden")))], 273 libffi_cv_hidden_visibility_attribute, [ 274 echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c 275 libffi_cv_hidden_visibility_attribute=no 276 if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then 277 if grep '\.hidden.*foo' conftest.s >/dev/null; then 278 libffi_cv_hidden_visibility_attribute=yes 279 fi 280 fi 281 rm -f conftest.* 282 ]) 283if test $libffi_cv_hidden_visibility_attribute = yes; then 284 AC_DEFINE(HAVE_HIDDEN_VISIBILITY_ATTRIBUTE, 1, 285 [Define if __attribute__((visibility("hidden"))) is supported.]) 286fi 287 288AH_BOTTOM([ 289#ifdef HAVE_HIDDEN_VISIBILITY_ATTRIBUTE 290#ifdef LIBFFI_ASM 291#define FFI_HIDDEN(name) .hidden name 292#else 293#define FFI_HIDDEN __attribute__ ((visibility ("hidden"))) 294#endif 295#else 296#ifdef LIBFFI_ASM 297#define FFI_HIDDEN(name) 298#else 299#define FFI_HIDDEN 300#endif 301#endif 302]) 303 304AC_SUBST(TARGET) 305AC_SUBST(TARGETDIR) 306 307AC_SUBST(SHELL) 308 309AC_ARG_ENABLE(debug, 310[ --enable-debug debugging mode], 311 if test "$enable_debug" = "yes"; then 312 AC_DEFINE(FFI_DEBUG, 1, [Define this if you want extra debugging.]) 313 fi) 314 315AC_ARG_ENABLE(structs, 316[ --disable-structs omit code for struct support], 317 if test "$enable_structs" = "no"; then 318 AC_DEFINE(FFI_NO_STRUCTS, 1, [Define this is you do not want support for aggregate types.]) 319 fi) 320 321AC_ARG_ENABLE(raw-api, 322[ --disable-raw-api make the raw api unavailable], 323 if test "$enable_raw_api" = "no"; then 324 AC_DEFINE(FFI_NO_RAW_API, 1, [Define this is you do not want support for the raw API.]) 325 fi) 326 327AC_ARG_ENABLE(purify-safety, 328[ --enable-purify-safety purify-safe mode], 329 if test "$enable_purify_safety" = "yes"; then 330 AC_DEFINE(USING_PURIFY, 1, [Define this if you are using Purify and want to suppress spurious messages.]) 331 fi) 332 333if test -n "$with_cross_host" && 334 test x"$with_cross_host" != x"no"; then 335 toolexecdir='$(exec_prefix)/$(target_alias)' 336 toolexeclibdir='$(toolexecdir)/lib' 337else 338 toolexecdir='$(libdir)/gcc-lib/$(target_alias)' 339 toolexeclibdir='$(libdir)' 340fi 341multi_os_directory=`$CC -print-multi-os-directory` 342case $multi_os_directory in 343 .) ;; # Avoid trailing /. 344 *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;; 345esac 346AC_SUBST(toolexecdir) 347AC_SUBST(toolexeclibdir) 348 349if test "${multilib}" = "yes"; then 350 multilib_arg="--enable-multilib" 351else 352 multilib_arg= 353fi 354 355AC_CONFIG_COMMANDS(include, [test -d include || mkdir include]) 356AC_CONFIG_COMMANDS(src, [ 357test -d src || mkdir src 358test -d src/$TARGETDIR || mkdir src/$TARGETDIR 359], [TARGETDIR="$TARGETDIR"]) 360 361AC_CONFIG_LINKS(include/ffitarget.h:src/$TARGETDIR/ffitarget.h) 362 363AC_CONFIG_FILES(include/Makefile include/ffi.h Makefile testsuite/Makefile man/Makefile libffi.pc) 364 365AC_OUTPUT 366