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