r21582: Allow modification of LDFLAGS
[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_FLAGS)
22 AC_SUBST(SHLD_UNDEF_FLAGS)
23 AC_SUBST(SHLIBEXT)
24 AC_SUBST(SONAMEFLAG)
25 AC_SUBST(PICFLAG)
26
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=""
38
39 AC_MSG_CHECKING([ability to build shared libraries])
40
41 # and these are for particular systems
42 case "$host_os" in
43         *linux*)
44                 BLDSHARED="true"
45                 SHLD_FLAGS="-shared -Wl,-Bsymbolic"
46                 SHLD_UNDEF_FLAGS="-Wl,--allow-shlib-undefined"
47                 LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
48                 PICFLAG="-fPIC"
49                 SONAMEFLAG="-Wl,-soname="
50                 ;;
51         *solaris*)
52                 BLDSHARED="true"
53                 SHLD_FLAGS="-G"
54                 SONAMEFLAG="-h "
55                 if test "${GCC}" = "yes"; then
56                         PICFLAG="-fPIC"
57                         SONAMEFLAG="-Wl,-soname="
58                         if test "${ac_cv_prog_gnu_ld}" = "yes"; then
59                                 LDFLAGS="$LDFLAGS -Wl,-E"
60                         fi
61                 else
62                         PICFLAG="-KPIC"
63                         ## ${CFLAGS} added for building 64-bit shared 
64                         ## libs using Sun's Compiler
65                         SHLD_FLAGS="-G \${CFLAGS}"
66                 fi
67                 ;;
68         *sunos*)
69                 BLDSHARED="true"
70                 SHLD_FLAGS="-G"
71                 SONAMEFLAG="-Wl,-h,"
72                 PICFLAG="-KPIC"   # Is this correct for SunOS
73                 ;;
74         *netbsd* | *freebsd* | *dragonfly* )  
75                 BLDSHARED="true"
76                 LDFLAGS="$LDFLAGS -Wl,--export-dynamic"
77                 SONAMEFLAG="-Wl,-soname,"
78                 PICFLAG="-fPIC -DPIC"
79                 ;;
80         *openbsd*)
81                 BLDSHARED="true"
82                 LDFLAGS="$LDFLAGS -Wl,-Bdynamic"
83                 SONAMEFLAG="-Wl,-soname,"
84                 PICFLAG="-fPIC"
85                 ;;
86         *irix*)
87                 BLDSHARED="true"
88                 SHLD_FLAGS="-set_version sgi1.0 -shared"
89                 SONAMEFLAG="-soname "
90                 SHLD="${PROG_LD}"
91                 if test "${GCC}" = "yes"; then
92                         PICFLAG="-fPIC"
93                 else 
94                         PICFLAG="-KPIC"
95                 fi
96                 ;;
97         *aix*)
98                 BLDSHARED="true"
99                 SHLD_FLAGS="-Wl,-G,-bexpall,-bbigtoc"
100                 LDFLAGS="$LDFLAGS -Wl,-brtl,-bexpall,-bbigtoc"
101                 # as AIX code is always position independent...
102                 PICFLAG="-O2"
103                 ;;
104         *hpux*)
105                 # Use special PIC flags for the native HP-UX compiler.
106                 if test $ac_cv_prog_cc_Ae = yes; then
107                         BLDSHARED="true"
108                         SHLD_FLAGS="-b -Wl,-B,symbolic,-b,-z"
109                         SONAMEFLAG="-Wl,+h "
110                         PICFLAG="+z"
111                 elif test "${GCC}" = "yes"; then
112                         BLDSHARED="true" # I hope this is correct
113                         PICFLAG="-fPIC"
114                 fi
115                 if test "$host_cpu" = "ia64"; then
116                         SHLIBEXT="so"
117                         LDFLAGS="$LDFLAGS -Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
118                 else
119                         SHLIBEXT="sl"
120                         LDFLAGS="$LDFLAGS -Wl,-E,+b/usr/local/lib:/usr/lib"
121                 fi
122                 ;;
123         *osf*)
124                 BLDSHARED="true"
125                 SONAMEFLAG="-Wl,-soname,"
126                 PICFLAG="-fPIC"
127                 ;;
128         *unixware*)
129                 BLDSHARED="true"
130                 SONAMEFLAG="-Wl,-soname,"
131                 PICFLAG="-KPIC"
132                 ;;
133         *darwin*)
134                 BLDSHARED="true"
135                 SHLD_FLAGS="-bundle -flat_namespace -undefined suppress"
136                 SHLIBEXT="dylib"
137                 ;;
138 esac
139
140 AC_MSG_RESULT($BLDSHARED)
141
142 AC_MSG_CHECKING([LD])
143 AC_MSG_RESULT([$LD])
144 AC_MSG_CHECKING([LDFLAGS])
145 AC_MSG_RESULT([$LDFLAGS])
146
147 AC_MSG_CHECKING([STLD])
148 AC_MSG_RESULT([$STLD])
149 AC_MSG_CHECKING([STLD_FLAGS])
150 AC_MSG_RESULT([$STLD_FLAGS])
151
152 #######################################################
153 # test whether building a shared library actually works
154 if test $BLDSHARED = true; then
155
156         AC_MSG_CHECKING([SHLD])
157         AC_MSG_RESULT([$SHLD])
158         AC_MSG_CHECKING([SHLD_FLAGS])
159         AC_MSG_RESULT([$SHLD_FLAGS])
160
161         AC_MSG_CHECKING([SHLIBEXT])
162         AC_MSG_RESULT([$SHLIBEXT])
163         AC_MSG_CHECKING([SONAMEFLAG])
164         AC_MSG_RESULT([$SONAMEFLAG])
165
166         AC_MSG_CHECKING([PICFLAG])
167         AC_MSG_RESULT([$PICFLAG])
168
169         AC_CACHE_CHECK([whether building shared libraries actually works], 
170                        [ac_cv_shlib_works],[
171                         ac_cv_shlib_works=no
172                         # try building a trivial shared library
173                         ${CC} ${CFLAGS} ${PICFLAG} -c ${srcdir-.}/build/tests/shlib.c -o shlib.o &&
174                                 ${SHLD} `eval echo ${SHLD_FLAGS} ` -o shlib.${SHLIBEXT} shlib.o && 
175                                 ac_cv_shlib_works=yes
176                         rm -f shlib.${SHLIBEXT} shlib.o
177         ])
178         if test $ac_cv_shlib_works = no; then
179                 BLDSHARED=false
180         fi
181 fi
182
183 if test $BLDSHARED != true; then
184         SHLD="shared-libraries-disabled"
185         SHLD_FLAGS="shared-libraries-disabled"
186         SHLIBEXT="shared_libraries_disabled"
187         SONAMEFLAG="shared-libraries-disabled"
188         PICFLAG=""
189         AC_MSG_CHECKING([SHLD])
190         AC_MSG_RESULT([$SHLD])
191         AC_MSG_CHECKING([SHLD_FLAGS])
192         AC_MSG_RESULT([$SHLD_FLAGS])
193
194         AC_MSG_CHECKING([SHLIBEXT])
195         AC_MSG_RESULT([$SHLIBEXT])
196         AC_MSG_CHECKING([SONAMEFLAG])
197         AC_MSG_RESULT([$SONAMEFLAG])
198
199         AC_MSG_CHECKING([PICFLAG])
200         AC_MSG_RESULT([$PICFLAG])
201 fi
202
203 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
204
205 AC_MSG_CHECKING([if we can link using the selected flags])
206 AC_TRY_RUN([#include "${srcdir-.}/build/tests/trivial.c"],
207             AC_MSG_RESULT(yes),
208             AC_MSG_ERROR([we cannot link with the selected cc and ld flags. Aborting configure]),
209             AC_MSG_WARN([cannot run when cross-compiling]))
210
211
212 USESHARED=false
213 AC_SUBST(USESHARED)
214
215 AC_ARG_ENABLE(dso,
216 [  --enable-dso                 Enable using shared libraries internally (experimental)],
217 [],[enable_dso=no])
218
219 if test x"$enable_dso" = x"yes" -a x"$BLDSHARED" != x"true"; then
220         AC_MSG_ERROR([--enable-dso: no support for shared libraries])
221 fi
222
223 if test x"$enable_dso" != x"no"; then
224         USESHARED=$BLDSHARED
225 fi
226
227 AC_MSG_CHECKING([if binaries will use shared libraries])
228 AC_MSG_RESULT([$USESHARED])