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(SHOBJCPPFLAGS) 7 AC_SUBST(SHOBJLDFLAGS) 8 9 OLD_LDFLAGS="$LDFLAGS" 10 OLD_CFLAGS="$CFLAGS" 11 OLD_CPPFLAGS="$CPPFLAGS" 12 13 SHOBJFLAGS="" 14 SHOBJCPPFLAGS="" 15 SHOBJLDFLAGS="" 16 17 CFLAGS="$OLD_CFLAGS $1" 18 CPPFLAGS="$OLD_CPPFLAGS $2" 19 LDFLAGS="$OLD_LDFLAGS $3" 20 21 AC_TRY_LINK([#include <stdio.h> 22 int unrestst(void);], [ printf("okay\n"); unrestst(); return(0); ], [ SHOBJFLAGS="$1"; SHOBJCPPFLAGS="$2"; SHOBJLDFLAGS="$3" ], [ 23 LDFLAGS="$OLD_LDFLAGS" 24 CFLAGS="$OLD_CFLAGS" 25 CPPFLAGS="$OLD_CPPFLAGS" 26 $4 27 ]) 28 29 LDFLAGS="$OLD_LDFLAGS" 30 CFLAGS="$OLD_CFLAGS" 31 CPPFLAGS="$OLD_CPPFLAGS" 32 ]) 33 34 AC_DEFUN([DC_GET_SHOBJFLAGS], [ 35 AC_SUBST(SHOBJFLAGS) 36 AC_SUBST(SHOBJCPPFLAGS) 37 AC_SUBST(SHOBJLDFLAGS) 38 39 DC_CHK_OS_INFO 40 41 AC_MSG_CHECKING(how to create shared objects) 42 43 if test -z "$SHOBJFLAGS" -a -z "$SHOBJLDFLAGS" -a -z "$SHOBJCPPFLAGS"; then 44 DC_TEST_SHOBJFLAGS([-fPIC], [-DPIC], [-shared -rdynamic], [ 45 DC_TEST_SHOBJFLAGS([-fPIC], [-DPIC], [-shared], [ 46 DC_TEST_SHOBJFLAGS([-fPIC], [-DPIC], [-shared -rdynamic -mimpure-text], [ 47 DC_TEST_SHOBJFLAGS([-fPIC], [-DPIC], [-shared -mimpure-text], [ 48 DC_TEST_SHOBJFLAGS([-fPIC], [-DPIC], [-shared -rdynamic -Wl,-G,-z,textoff], [ 49 DC_TEST_SHOBJFLAGS([-fPIC], [-DPIC], [-shared -Wl,-G], [ 50 DC_TEST_SHOBJFLAGS([-fPIC], [-DPIC], [-shared -dynamiclib -flat_namespace -undefined suppress -bind_at_load], [ 51 DC_TEST_SHOBJFLAGS([-fPIC], [-DPIC], [-dynamiclib -flat_namespace -undefined suppress -bind_at_load], [ 52 DC_TEST_SHOBJFLAGS([-fPIC], [-DPIC], [-Wl,-dynamiclib -Wl,-flat_namespace -Wl,-undefined,suppress -Wl,-bind_at_load], [ 53 DC_TEST_SHOBJFLAGS([-fPIC], [-DPIC], [-dynamiclib -flat_namespace -undefined suppress], [ 54 DC_TEST_SHOBJFLAGS([-fPIC], [-DPIC], [-dynamiclib], [ 55 AC_MSG_RESULT(cant) 56 AC_MSG_ERROR([We are unable to make shared objects.]) 57 ]) 58 ]) 59 ]) 60 ]) 61 ]) 62 ]) 63 ]) 64 ]) 65 ]) 66 ]) 67 ]) 68 fi 69 70 AC_MSG_RESULT($SHOBJCPPFLAGS $SHOBJFLAGS $SHOBJLDFLAGS) 71 72 DC_SYNC_SHLIBOBJS 73 ]) 74 75 AC_DEFUN([DC_SYNC_SHLIBOBJS], [ 76 AC_SUBST(SHLIBOBJS) 77 SHLIBOBJS="" 78 for obj in $LIB@&t@OBJS; do 79 SHLIBOBJS="$SHLIBOBJS `echo $obj | sed 's/\.o$/_shr.o/g'`" 80 done 81 ]) 82 83 AC_DEFUN([DC_SYNC_RPATH], [ 84 OLD_LDFLAGS="$LDFLAGS" 85 86 for tryrpath in "-Wl,-rpath" "-Wl,--rpath" "-Wl,-R"; do 87 LDFLAGS="$OLD_LDFLAGS $tryrpath -Wl,/tmp" 88 AC_LINK_IFELSE(AC_LANG_PROGRAM([], [ return(0); ]), [ 89 rpathldflags="$tryrpath" 90 break 91 ]) 92 done 93 unset tryrpath 94 95 LDFLAGS="$OLD_LDFLAGS" 96 unset OLD_LDFLAGS 97 98 ADDLDFLAGS="" 99 for opt in $LDFLAGS; do 100 if echo "$opt" | grep '^-L' >/dev/null; then 101 rpathdir=`echo "$opt" | sed 's@^-L *@@'` 102 ADDLDFLAGS="$ADDLDFLAGS $rpathldflags -Wl,$rpathdir" 103 fi 104 done 105 unset opt rpathldflags 106 107 LDFLAGS="$LDFLAGS $ADDLDFLAGS" 108 109 unset ADDLDFLAGS 110 ]) 111 112 AC_DEFUN([DC_CHK_OS_INFO], [ 113 AC_CANONICAL_HOST 114 AC_SUBST(SHOBJEXT) 115 AC_SUBST(SHOBJFLAGS) 116 AC_SUBST(SHOBJCPPFLAGS) 117 AC_SUBST(SHOBJLDFLAGS) 118 AC_SUBST(CFLAGS) 119 AC_SUBST(CPPFLAGS) 120 AC_SUBST(AREXT) 121 122 if test "$dc_cv_dc_chk_os_info_called" != '1'; then 123 dc_cv_dc_chk_os_info_called='1' 124 125 AC_MSG_CHECKING(host operating system) 126 AC_MSG_RESULT($host_os) 127 128 SHOBJEXT="so" 129 AREXT="a" 130 131 case $host_os in 132 darwin*) 133 SHOBJEXT="dylib" 134 ;; 135 hpux*) 136 case "$host_cpu" in 137 ia64) 138 SHOBJEXT="so" 139 ;; 140 *) 141 SHOBJEXT="sl" 142 ;; 143 esac 144 ;; 145 aix[0-9].*) 146 SHOBJEXT="a" 147 ;; 148 mingw32|mingw32msvc*) 149 SHOBJEXT="dll" 150 CFLAGS="$CFLAGS -mms-bitfields" 151 CPPFLAGS="$CPPFLAGS -mms-bitfields" 152 SHOBJCPPFLAGS="-DPIC" 153 SHOBJLDFLAGS='-shared -Wl,--dll -Wl,--enable-auto-image-base -Wl,--output-def,$[@].def,--out-implib,$[@].a' 154 ;; 155 msvc) 156 SHOBJEXT="dll" 157 CFLAGS="$CFLAGS -nologo" 158 SHOBJCPPFLAGS='-DPIC' 159 SHOBJLDFLAGS='/LD /LINK /NODEFAULTLIB:MSVCRT' 160 ;; 161 cygwin*) 162 SHOBJEXT="dll" 163 SHOBJFLAGS="-fPIC" 164 SHOBJCPPFLAGS="-DPIC" 165 CFLAGS="$CFLAGS -mms-bitfields" 166 CPPFLAGS="$CPPFLAGS -mms-bitfields" 167 SHOBJLDFLAGS='-shared -Wl,--enable-auto-image-base -Wl,--output-def,$[@].def,--out-implib,$[@].a' 168 ;; 169 esac 170 fi 171 ]) 172 173 AC_DEFUN(SHOBJ_SET_SONAME, [ 174 SAVE_LDFLAGS="$LDFLAGS" 175 176 AC_MSG_CHECKING([how to specify soname]) 177 178 for try in "-Wl,--soname,$1" "Wl,-install_name,$1" '__fail__'; do 179 LDFLAGS="$SAVE_LDFLAGS" 180 181 if test "${try}" = '__fail__'; then 182 AC_MSG_RESULT([can't]) 183 184 break 185 fi 186 187 LDFLAGS="${LDFLAGS} ${try}" 188 AC_TRY_LINK([void TestTest(void) { return; }], [], [ 189 LDFLAGS="${SAVE_LDFLAGS}" 190 SHOBJLDFLAGS="${SHOBJLDFLAGS} ${try}" 191 192 AC_MSG_RESULT([$try]) 193 194 break 195 ]) 196 done 197 198 AC_SUBST(SHOBJLDFLAGS) 199 ]) |