4581557 [rkeene@sledge /home/rkeene/devel/autoconf]$ cat -n shobj.m4
  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 ])
4581558 [rkeene@sledge /home/rkeene/devel/autoconf]$

Click here to go back to the directory listing.
Click here to download this file.
last modified: 2014-11-24 22:12:12