1 dnl Usage: 2 dnl DC_TEST_SHOBJFLAGS(shobjflags, shobjldflags, action-if-not-found) 3 dnl 4 AC_DEFUN(DC_TEST_SHOBJFLAGS, [ 5 AC_SUBST(SHOBJFLAGS) 6 AC_SUBST(SHOBJLDFLAGS) 7 8 OLD_LDFLAGS="$LDFLAGS" 9 SHOBJFLAGS="" 10 11 LDFLAGS="$OLD_LDFLAGS $1 $2" 12 13 AC_TRY_LINK([#include <stdio.h> 14 int unrestst(void);], [ printf("okay\n"); unrestst(); return(0); ], [ SHOBJFLAGS="$1"; SHOBJLDFLAGS="$2" ], [ 15 LDFLAGS="$OLD_LDFLAGS" 16 $3 17 ]) 18 19 LDFLAGS="$OLD_LDFLAGS" 20 ]) 21 22 AC_DEFUN(DC_GET_SHOBJFLAGS, [ 23 AC_SUBST(SHOBJFLAGS) 24 AC_SUBST(SHOBJLDFLAGS) 25 26 AC_MSG_CHECKING(how to create shared objects) 27 28 if test -z "$SHOBJFLAGS" -a -z "$SHOBJLDFLAGS"; then 29 DC_TEST_SHOBJFLAGS([-fPIC -DPIC], [-shared -rdynamic], [ 30 DC_TEST_SHOBJFLAGS([-fPIC -DPIC], [-shared], [ 31 DC_TEST_SHOBJFLAGS([-fPIC -DPIC], [-shared -rdynamic -mimpure-text], [ 32 DC_TEST_SHOBJFLAGS([-fPIC -DPIC], [-shared -mimpure-text], [ 33 DC_TEST_SHOBJFLAGS([-fPIC -DPIC], [-shared -rdynamic -Wl,-G,-z,textoff], [ 34 DC_TEST_SHOBJFLAGS([-fPIC -DPIC], [-shared -Wl,-G,-z,textoff], [ 35 DC_TEST_SHOBJFLAGS([-fPIC -DPIC], [-shared -dynamiclib -flat_namespace -undefined suppress -bind_at_load], [ 36 DC_TEST_SHOBJFLAGS([-fPIC -DPIC], [-dynamiclib -flat_namespace -undefined suppress -bind_at_load], [ 37 DC_TEST_SHOBJFLAGS([-fPIC -DPIC], [-Wl,-dynamiclib -Wl,-flat_namespace -Wl,-undefined,suppress -Wl,-bind_at_load], [ 38 DC_TEST_SHOBJFLAGS([-fPIC -DPIC], [-dynamiclib -flat_namespace -undefined suppress], [ 39 DC_TEST_SHOBJFLAGS([-fPIC -DPIC], [-dynamiclib], [ 40 AC_MSG_RESULT(cant) 41 AC_MSG_ERROR([We are unable to make shared objects.]) 42 ]) 43 ]) 44 ]) 45 ]) 46 ]) 47 ]) 48 ]) 49 ]) 50 ]) 51 ]) 52 ]) 53 fi 54 55 AC_MSG_RESULT($SHOBJLDFLAGS $SHOBJFLAGS) 56 57 DC_SYNC_SHLIBOBJS 58 ]) 59 60 AC_DEFUN(DC_SYNC_SHLIBOBJS, [ 61 AC_SUBST(SHLIBOBJS) 62 SHLIBOBJS="" 63 for obj in $LIB@&t@OBJS; do 64 SHLIBOBJS="$SHLIBOBJS `echo $obj | sed 's/\.o$/_shr.o/g'`" 65 done 66 ]) 67 68 AC_DEFUN(DC_SYNC_RPATH, [ 69 OLD_LDFLAGS="$LDFLAGS" 70 71 for tryrpath in "-Wl,-rpath" "-Wl,--rpath" "-Wl,-R"; do 72 LDFLAGS="$OLD_LDFLAGS $tryrpath -Wl,/tmp" 73 AC_LINK_IFELSE(AC_LANG_PROGRAM([], [ return(0); ]), [ 74 rpathldflags="$tryrpath" 75 break 76 ]) 77 done 78 unset tryrpath 79 80 LDFLAGS="$OLD_LDFLAGS" 81 unset OLD_LDFLAGS 82 83 ADDLDFLAGS="" 84 for opt in $LDFLAGS; do 85 if echo "$opt" | grep '^-L' >/dev/null; then 86 rpathdir=`echo "$opt" | sed 's@^-L *@@'` 87 ADDLDFLAGS="$ADDLDFLAGS $rpathldflags -Wl,$rpathdir" 88 fi 89 done 90 unset opt rpathldflags 91 92 LDFLAGS="$LDFLAGS $ADDLDFLAGS" 93 94 unset ADDLDFLAGS 95 ]) 96 97 AC_DEFUN(DC_CHK_OS_INFO, [ 98 AC_CANONICAL_HOST 99 AC_SUBST(SHOBJEXT) 100 AC_SUBST(SHOBJFLAGS) 101 AC_SUBST(SHOBJLDFLAGS) 102 AC_SUBST(CFLAGS) 103 AC_SUBST(CPPFLAGS) 104 AC_SUBST(AREXT) 105 106 AC_MSG_CHECKING(host operating system) 107 AC_MSG_RESULT($host_os) 108 109 SHOBJEXT="so" 110 AREXT="a" 111 112 case $host_os in 113 darwin*) 114 SHOBJEXT="dylib" 115 ;; 116 hpux*) 117 SHOBJEXT="sl" 118 ;; 119 mingw32msvc*) 120 SHOBJEXT="dll" 121 SHOBJFLAGS="-DPIC" 122 CFLAGS="$CFLAGS -mno-cygwin -mms-bitfields" 123 CPPFLAGS="$CPPFLAGS -mno-cygwin -mms-bitfields" 124 SHOBJLDFLAGS='-shared -Wl,--dll -Wl,--enable-auto-image-base -Wl,--output-def,$[@].def,--out-implib,$[@].a' 125 ;; 126 cygwin*) 127 SHOBJEXT="dll" 128 SHOBJFLAGS="-fPIC -DPIC" 129 CFLAGS="$CFLAGS -mms-bitfields" 130 CPPFLAGS="$CPPFLAGS -mms-bitfields" 131 SHOBJLDFLAGS='-shared -Wl,--enable-auto-image-base -Wl,--output-def,$[@].def,--out-implib,$[@].a' 132 ;; 133 esac 134 ]) |