r25852: Move SHLIBEXT determination into a test as well.
[tprouty/samba.git] / source4 / build / m4 / check_ld.m4
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
8
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)
14
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_UNDEF_FLAGS)
22 AC_SUBST(SONAMEFLAG)
23
24 # Assume non-shared by default and override below
25 # these are the defaults, good for lots of systems
26 STLD=${PROG_AR}
27 STLD_FLAGS="-rcs"
28 BLDSHARED="false"
29 LD="${CC}"
30 SHLD="${CC}"
31 SONAMEFLAG=""
32 PICFLAG=""
33
34 # allow for --with-hostld=gcc
35 AC_ARG_WITH(hostld,[  --with-hostld=linker    choose host linker],
36 [HOSTLD=$withval],
37 [
38 if test z"$cross_compiling" = "yes"; then
39         HOSTLD='$(HOSTCC)'
40 else
41         HOSTLD='$(LD)'
42 fi
43 ])
44
45 AC_MSG_CHECKING([whether to try to build shared libraries on $host_os])
46
47 # and these are for particular systems
48 case "$host_os" in
49         *linux*)
50                 BLDSHARED="true"
51                 SHLD_UNDEF_FLAGS="-Wl,--allow-shlib-undefined"
52                 LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
53                 SONAMEFLAG="-Wl,-soname="
54                 ;;
55         *solaris*)
56                 BLDSHARED="true"
57                 SONAMEFLAG="-h "
58                 if test "${GCC}" = "yes"; then
59                         SONAMEFLAG="-Wl,-soname="
60                         if test "${ac_cv_prog_gnu_ld}" = "yes"; then
61                                 LDFLAGS="$LDFLAGS -Wl,-E"
62                         fi
63                 fi
64                 ;;
65         *sunos*)
66                 BLDSHARED="true"
67                 SONAMEFLAG="-Wl,-h,"
68                 ;;
69         *netbsd* | *freebsd* | *dragonfly* )  
70                 BLDSHARED="true"
71                 LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
72                 SONAMEFLAG="-Wl,-soname,"
73                 ;;
74         *openbsd*)
75                 # disabled because us4 fails to link libtorture.so
76                 BLDSHARED="false"
77                 LDFLAGS="$LDFLAGS -Wl,-Bdynamic"
78                 SONAMEFLAG="-Wl,-soname,"
79                 ;;
80         *irix*)
81                 # disabled because us4 fails to link libtorture.so
82                 BLDSHARED="false"
83                 SONAMEFLAG="-soname "
84                 SHLD="${PROG_LD}"
85                 ;;
86         *aix*)
87                 # disabled because us4 fails to link libtorture.so
88                 BLDSHARED="false"
89                 LDFLAGS="$LDFLAGS -Wl,-brtl,-bexpall,-bbigtoc"
90                 ;;
91         *hpux*)
92                 # Use special PIC flags for the native HP-UX compiler.
93                 if test $ac_cv_prog_cc_Ae = yes; then
94                         BLDSHARED="true"
95                         SONAMEFLAG="-Wl,+h "
96                 elif test "${GCC}" = "yes"; then
97                         BLDSHARED="true" # I hope this is correct
98                 fi
99                 if test "$host_cpu" = "ia64"; then
100                         LDFLAGS="$LDFLAGS -Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
101                 else
102                         LDFLAGS="$LDFLAGS -Wl,-E,+b/usr/local/lib:/usr/lib"
103                 fi
104                 ;;
105         *osf*)
106                 # disabled because tru64 fails to link libtorture.so
107                 BLDSHARED="false"
108                 SONAMEFLAG="-Wl,-soname,"
109                 ;;
110         *unixware*)
111                 BLDSHARED="true"
112                 SONAMEFLAG="-Wl,-soname,"
113                 ;;
114         *darwin*)
115                 BLDSHARED="true"
116                 ;;
117 esac
118
119 AC_MSG_RESULT($BLDSHARED)
120
121 AC_MSG_CHECKING([LD])
122 AC_MSG_RESULT([$LD])
123 AC_MSG_CHECKING([LDFLAGS])
124 AC_MSG_RESULT([$LDFLAGS])
125
126 AC_SUBST(HOSTLD)
127
128 AC_MSG_CHECKING([STLD])
129 AC_MSG_RESULT([$STLD])
130 AC_MSG_CHECKING([STLD_FLAGS])
131 AC_MSG_RESULT([$STLD_FLAGS])
132
133 AC_LD_PICFLAG
134 AC_LD_EXPORT_DYNAMIC
135 AC_LD_SHLDFLAGS
136 AC_LD_SHLIBEXT
137
138 AC_ARG_ENABLE(shared,
139 [  --disable-shared        Disable testing for building shared libraries],
140 [],[enable_shared=yes])
141
142 if test x"$enable_shared" = x"no" -o x"$enable_shared" = x"false"; then
143         BLDSHARED=false
144 fi
145
146 #######################################################
147 # test whether building a shared library actually works
148 if test $BLDSHARED = true; then
149
150         AC_MSG_CHECKING([SHLD])
151         AC_MSG_RESULT([$SHLD])
152         AC_MSG_CHECKING([SHLD_FLAGS])
153         AC_MSG_RESULT([$SHLD_FLAGS])
154
155         AC_MSG_CHECKING([SHLIBEXT])
156         AC_MSG_RESULT([$SHLIBEXT])
157         AC_MSG_CHECKING([SONAMEFLAG])
158         AC_MSG_RESULT([$SONAMEFLAG])
159
160         AC_MSG_CHECKING([PICFLAG])
161         AC_MSG_RESULT([$PICFLAG])
162
163         AC_CACHE_CHECK([whether building shared libraries actually works], 
164                        [ac_cv_shlib_works],[
165                         ac_cv_shlib_works=no
166                         # try building a trivial shared library
167                         ${CC} ${CFLAGS} ${PICFLAG} -c ${srcdir-.}/build/tests/shlib.c -o shlib.o &&
168                                 ${SHLD} `eval echo ${SHLD_FLAGS} ` -o shlib.${SHLIBEXT} shlib.o && 
169                                 ac_cv_shlib_works=yes
170                         rm -f shlib.${SHLIBEXT} shlib.o
171         ])
172         if test $ac_cv_shlib_works = no; then
173                 BLDSHARED=false
174         fi
175 fi
176
177 if test $BLDSHARED != true; then
178         SHLD="shared-libraries-disabled"
179         SHLD_FLAGS="shared-libraries-disabled"
180         SHLIBEXT="shared_libraries_disabled"
181         SONAMEFLAG="shared-libraries-disabled"
182         PICFLAG=""
183         AC_MSG_CHECKING([SHLD])
184         AC_MSG_RESULT([$SHLD])
185         AC_MSG_CHECKING([SHLD_FLAGS])
186         AC_MSG_RESULT([$SHLD_FLAGS])
187
188         AC_MSG_CHECKING([SHLIBEXT])
189         AC_MSG_RESULT([$SHLIBEXT])
190         AC_MSG_CHECKING([SONAMEFLAG])
191         AC_MSG_RESULT([$SONAMEFLAG])
192
193         AC_MSG_CHECKING([PICFLAG])
194         AC_MSG_RESULT([$PICFLAG])
195 fi
196
197 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
198
199 AC_MSG_CHECKING([if we can link using the selected flags])
200 AC_TRY_RUN([#include "${srcdir-.}/build/tests/trivial.c"],
201             AC_MSG_RESULT(yes),
202             AC_MSG_ERROR([we cannot link with the selected cc and ld flags. Aborting configure]),
203             AC_MSG_WARN([cannot run when cross-compiling]))
204
205
206 USESHARED=false
207 AC_SUBST(USESHARED)
208
209 AC_ARG_ENABLE(dso,
210 [  --enable-dso                   Enable using shared libraries internally (experimental)],
211 [],[enable_dso=no])
212
213 if test x"$enable_dso" = x"yes" -a x"$BLDSHARED" != x"true"; then
214         AC_MSG_ERROR([--enable-dso: no support for shared libraries])
215 fi
216
217 if test x"$enable_dso" != x"no"; then
218         USESHARED=$BLDSHARED
219 fi
220
221 AC_MSG_CHECKING([if binaries will use shared libraries])
222 AC_MSG_RESULT([$USESHARED])