r23110: add --disable-shared option, very useful for the build-farm...
[Samba.git] / source / build / m4 / check_ld.m4
blob9bc96fb83f6a09b296ba209e650823ba7ecb3ee9
1 dnl SMB Build Environment LD Checks
2 dnl -------------------------------------------------------
3 dnl  Copyright (C) Stefan (metze) Metzmacher 2004
4 dnl  Copyright (C) Jelmer Vernooij 2006
5 dnl  Released under the GNU GPL
6 dnl -------------------------------------------------------
7 dnl
9 AC_PATH_PROG(PROG_LD,ld)
10 LD=${PROG_LD}
11 AC_PROG_LD_GNU
12 LD=""
13 AC_PATH_PROG(PROG_AR, ar)
15 AC_SUBST(STLD)
16 AC_SUBST(STLD_FLAGS)
17 AC_SUBST(BLDSHARED)
18 AC_SUBST(LD)
19 AC_SUBST(LDFLAGS)
20 AC_SUBST(SHLD)
21 AC_SUBST(SHLD_FLAGS)
22 AC_SUBST(SHLD_UNDEF_FLAGS)
23 AC_SUBST(SHLIBEXT)
24 AC_SUBST(SONAMEFLAG)
25 AC_SUBST(PICFLAG)
27 # Assume non-shared by default and override below
28 # these are the defaults, good for lots of systems
29 STLD=${PROG_AR}
30 STLD_FLAGS="-rcs"
31 BLDSHARED="false"
32 LD="${CC}"
33 SHLD="${CC}"
34 SHLD_FLAGS="-shared"
35 SHLIBEXT="so"
36 SONAMEFLAG=""
37 PICFLAG=""
39 # allow for --with-hostld=gcc
40 AC_ARG_WITH(hostld,[  --with-hostld=linker    choose host linker],
41 [HOSTLD=$withval],
43 if test z"$cross_compiling" = "yes"; then
44         HOSTLD='$(HOSTCC)'
45 else
46         HOSTLD='$(LD)'
50 AC_MSG_CHECKING([whether to try to build shared libraries on $host_os])
52 # and these are for particular systems
53 case "$host_os" in
54         *linux*)
55                 BLDSHARED="true"
56                 SHLD_FLAGS="-shared -Wl,-Bsymbolic"
57                 SHLD_UNDEF_FLAGS="-Wl,--allow-shlib-undefined"
58                 LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
59                 PICFLAG="-fPIC"
60                 SONAMEFLAG="-Wl,-soname="
61                 ;;
62         *solaris*)
63                 BLDSHARED="true"
64                 SHLD_FLAGS="-G"
65                 SONAMEFLAG="-h "
66                 if test "${GCC}" = "yes"; then
67                         PICFLAG="-fPIC"
68                         SONAMEFLAG="-Wl,-soname="
69                         if test "${ac_cv_prog_gnu_ld}" = "yes"; then
70                                 LDFLAGS="$LDFLAGS -Wl,-E"
71                         fi
72                 else
73                         PICFLAG="-KPIC"
74                         ## ${CFLAGS} added for building 64-bit shared 
75                         ## libs using Sun's Compiler
76                         SHLD_FLAGS="-G \${CFLAGS}"
77                 fi
78                 ;;
79         *sunos*)
80                 BLDSHARED="true"
81                 SHLD_FLAGS="-G"
82                 SONAMEFLAG="-Wl,-h,"
83                 PICFLAG="-KPIC"   # Is this correct for SunOS
84                 ;;
85         *netbsd* | *freebsd* | *dragonfly* )  
86                 BLDSHARED="true"
87                 LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
88                 SONAMEFLAG="-Wl,-soname,"
89                 PICFLAG="-fPIC -DPIC"
90                 ;;
91         *openbsd*)
92                 # disabled because us4 fails to link libtorture.so
93                 BLDSHARED="false"
94                 LDFLAGS="$LDFLAGS -Wl,-Bdynamic"
95                 SONAMEFLAG="-Wl,-soname,"
96                 PICFLAG="-fPIC"
97                 ;;
98         *irix*)
99                 # disabled because us4 fails to link libtorture.so
100                 BLDSHARED="false"
101                 SHLD_FLAGS="-set_version sgi1.0 -shared"
102                 SONAMEFLAG="-soname "
103                 SHLD="${PROG_LD}"
104                 if test "${GCC}" = "yes"; then
105                         PICFLAG="-fPIC"
106                 else 
107                         PICFLAG="-KPIC"
108                 fi
109                 ;;
110         *aix*)
111                 # disabled because us4 fails to link libtorture.so
112                 BLDSHARED="false"
113                 SHLD_FLAGS="-Wl,-G,-bexpall,-bbigtoc"
114                 LDFLAGS="$LDFLAGS -Wl,-brtl,-bexpall,-bbigtoc"
115                 # as AIX code is always position independent...
116                 PICFLAG="-O2"
117                 ;;
118         *hpux*)
119                 # Use special PIC flags for the native HP-UX compiler.
120                 if test $ac_cv_prog_cc_Ae = yes; then
121                         BLDSHARED="true"
122                         SHLD_FLAGS="-b -Wl,-B,symbolic,-b,-z"
123                         SONAMEFLAG="-Wl,+h "
124                         PICFLAG="+z +ESnolit"
125                 elif test "${GCC}" = "yes"; then
126                         BLDSHARED="true" # I hope this is correct
127                         PICFLAG="-fPIC"
128                 fi
129                 if test "$host_cpu" = "ia64"; then
130                         SHLIBEXT="so"
131                         PICFLAG="+z"
132                         LDFLAGS="$LDFLAGS -Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
133                 else
134                         SHLIBEXT="sl"
135                         LDFLAGS="$LDFLAGS -Wl,-E,+b/usr/local/lib:/usr/lib"
136                 fi
137                 ;;
138         *osf*)
139                 # disabled because tru64 fails to link libtorture.so
140                 BLDSHARED="false"
141                 SONAMEFLAG="-Wl,-soname,"
142                 PICFLAG="-fPIC"
143                 ;;
144         *unixware*)
145                 BLDSHARED="true"
146                 SONAMEFLAG="-Wl,-soname,"
147                 PICFLAG="-KPIC"
148                 ;;
149         *darwin*)
150                 BLDSHARED="true"
151                 SHLD_FLAGS="-bundle -flat_namespace -undefined suppress"
152                 SHLIBEXT="dylib"
153                 ;;
154 esac
156 AC_MSG_RESULT($BLDSHARED)
158 AC_MSG_CHECKING([LD])
159 AC_MSG_RESULT([$LD])
160 AC_MSG_CHECKING([LDFLAGS])
161 AC_MSG_RESULT([$LDFLAGS])
163 AC_SUBST(HOSTLD)
165 AC_MSG_CHECKING([STLD])
166 AC_MSG_RESULT([$STLD])
167 AC_MSG_CHECKING([STLD_FLAGS])
168 AC_MSG_RESULT([$STLD_FLAGS])
170 AC_ARG_ENABLE(shared,
171 [  --disable-shared        Disable testing for building shared libraries],
172 [],[enable_shared=yes])
174 if test x"$enable_shared" = x"no" -o x"$enable_shared" = x"false"; then
175         BLDSHARED=false
178 #######################################################
179 # test whether building a shared library actually works
180 if test $BLDSHARED = true; then
182         AC_MSG_CHECKING([SHLD])
183         AC_MSG_RESULT([$SHLD])
184         AC_MSG_CHECKING([SHLD_FLAGS])
185         AC_MSG_RESULT([$SHLD_FLAGS])
187         AC_MSG_CHECKING([SHLIBEXT])
188         AC_MSG_RESULT([$SHLIBEXT])
189         AC_MSG_CHECKING([SONAMEFLAG])
190         AC_MSG_RESULT([$SONAMEFLAG])
192         AC_MSG_CHECKING([PICFLAG])
193         AC_MSG_RESULT([$PICFLAG])
195         AC_CACHE_CHECK([whether building shared libraries actually works], 
196                        [ac_cv_shlib_works],[
197                         ac_cv_shlib_works=no
198                         # try building a trivial shared library
199                         ${CC} ${CFLAGS} ${PICFLAG} -c ${srcdir-.}/build/tests/shlib.c -o shlib.o &&
200                                 ${SHLD} `eval echo ${SHLD_FLAGS} ` -o shlib.${SHLIBEXT} shlib.o && 
201                                 ac_cv_shlib_works=yes
202                         rm -f shlib.${SHLIBEXT} shlib.o
203         ])
204         if test $ac_cv_shlib_works = no; then
205                 BLDSHARED=false
206         fi
209 if test $BLDSHARED != true; then
210         SHLD="shared-libraries-disabled"
211         SHLD_FLAGS="shared-libraries-disabled"
212         SHLIBEXT="shared_libraries_disabled"
213         SONAMEFLAG="shared-libraries-disabled"
214         PICFLAG=""
215         AC_MSG_CHECKING([SHLD])
216         AC_MSG_RESULT([$SHLD])
217         AC_MSG_CHECKING([SHLD_FLAGS])
218         AC_MSG_RESULT([$SHLD_FLAGS])
220         AC_MSG_CHECKING([SHLIBEXT])
221         AC_MSG_RESULT([$SHLIBEXT])
222         AC_MSG_CHECKING([SONAMEFLAG])
223         AC_MSG_RESULT([$SONAMEFLAG])
225         AC_MSG_CHECKING([PICFLAG])
226         AC_MSG_RESULT([$PICFLAG])
229 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
231 AC_MSG_CHECKING([if we can link using the selected flags])
232 AC_TRY_RUN([#include "${srcdir-.}/build/tests/trivial.c"],
233             AC_MSG_RESULT(yes),
234             AC_MSG_ERROR([we cannot link with the selected cc and ld flags. Aborting configure]),
235             AC_MSG_WARN([cannot run when cross-compiling]))
238 USESHARED=false
239 AC_SUBST(USESHARED)
241 AC_ARG_ENABLE(dso,
242 [  --enable-dso                   Enable using shared libraries internally (experimental)],
243 [],[enable_dso=no])
245 if test x"$enable_dso" = x"yes" -a x"$BLDSHARED" != x"true"; then
246         AC_MSG_ERROR([--enable-dso: no support for shared libraries])
249 if test x"$enable_dso" != x"no"; then
250         USESHARED=$BLDSHARED
253 AC_MSG_CHECKING([if binaries will use shared libraries])
254 AC_MSG_RESULT([$USESHARED])