r18273: AC_PROG_LD_GNU needs LD defined already
[nivanova/samba-autobuild/.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(SHLIBEXT)
23 AC_SUBST(SONAMEFLAG)
24 AC_SUBST(PICFLAG)
25
26 # Assume non-shared by default and override below
27 # these are the defaults, good for lots of systems
28 STLD=${PROG_AR}
29 STLD_FLAGS="-rcs"
30 BLDSHARED="false"
31 LD="${CC}"
32 LDFLAGS=""
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                 if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
46                         SHLD_FLAGS="-shared -Wl,-Bsymbolic -Wl,--allow-shlib-undefined" 
47                 else
48                         SHLD_FLAGS="-shared -Wl,-Bsymbolic" 
49                 fi
50                 LDFLAGS="-Wl,--export-dynamic"
51                 PICFLAG="-fPIC"
52                 SONAMEFLAG="-Wl,-soname="
53                 ;;
54         *solaris*)
55                 BLDSHARED="true"
56                 SHLD_FLAGS="-G"
57                 SONAMEFLAG="-h "
58                 if test "${GCC}" = "yes"; then
59                         PICFLAG="-fPIC"
60                         SONAMEFLAG="-Wl,-soname="
61                         if test "${ac_cv_prog_gnu_ld}" = "yes"; then
62                                 LDFLAGS="-Wl,-E"
63                         fi
64                 else
65                         PICFLAG="-KPIC"
66                         ## ${CFLAGS} added for building 64-bit shared 
67                         ## libs using Sun's Compiler
68                         SHLD_FLAGS="-G \${CFLAGS}"
69                 fi
70                 ;;
71         *sunos*)
72                 BLDSHARED="true"
73                 SHLD_FLAGS="-G"
74                 SONAMEFLAG="-Wl,-h,"
75                 PICFLAG="-KPIC"   # Is this correct for SunOS
76                 ;;
77         *netbsd* | *freebsd* | *dragonfly* )  
78                 BLDSHARED="true"
79                 LDFLAGS="-Wl,--export-dynamic"
80                 SONAMEFLAG="-Wl,-soname,"
81                 PICFLAG="-fPIC -DPIC"
82                 ;;
83         *openbsd*)
84                 BLDSHARED="true"
85                 LDFLAGS="-Wl,-Bdynamic"
86                 SONAMEFLAG="-Wl,-soname,"
87                 PICFLAG="-fPIC"
88                 ;;
89         *irix*)
90                 BLDSHARED="true"
91                 SHLD_FLAGS="-set_version sgi1.0 -shared"
92                 SONAMEFLAG="-soname "
93                 SHLD="${PROG_LD}"
94                 if test "${GCC}" = "yes"; then
95                         PICFLAG="-fPIC"
96                 else 
97                         PICFLAG="-KPIC"
98                 fi
99                 ;;
100         *aix*)
101                 BLDSHARED="true"
102                 SHLD_FLAGS="-Wl,-G,-bexpall"
103                 LDFLAGS="-Wl,-brtl,-bexpall,-bbigtoc"
104                 # as AIX code is always position independent...
105                 PICFLAG="-O2"
106                 ;;
107         *hpux*)
108                 # Use special PIC flags for the native HP-UX compiler.
109                 if test $ac_cv_prog_cc_Ae = yes; then
110                         BLDSHARED="true"
111                         SHLD_FLAGS="-b -Wl,-B,symbolic,-b,-z"
112                         SONAMEFLAG="-Wl,+h "
113                         PICFLAG="+z"
114                 elif test "${GCC}" = "yes"; then
115                         BLDSHARED="true" # I hope this is correct
116                         PICFLAG="-fPIC"
117                 fi
118                 if test "$host_cpu" = "ia64"; then
119                         SHLIBEXT="so"
120                         LDFLAGS="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
121                 else
122                         SHLIBEXT="sl"
123                         LDFLAGS="-Wl,-E,+b/usr/local/lib:/usr/lib"
124                 fi
125                 ;;
126         *osf*)
127                 BLDSHARED="true"
128                 SONAMEFLAG="-Wl,-soname,"
129                 PICFLAG="-fPIC"
130                 ;;
131         *unixware*)
132                 BLDSHARED="true"
133                 SONAMEFLAG="-Wl,-soname,"
134                 PICFLAG="-KPIC"
135                 ;;
136         *darwin*)
137                 BLDSHARED="true"
138                 SHLD_FLAGS="-bundle -flat_namespace -undefined suppress"
139                 SHLIBEXT="dylib"
140                 ;;
141 esac
142
143 AC_MSG_RESULT($BLDSHARED)
144
145 AC_MSG_CHECKING([LD])
146 AC_MSG_RESULT([$LD])
147 AC_MSG_CHECKING([LDFLAGS])
148 AC_MSG_RESULT([$LDFLAGS])
149
150 AC_MSG_CHECKING([STLD])
151 AC_MSG_RESULT([$STLD])
152 AC_MSG_CHECKING([STLD_FLAGS])
153 AC_MSG_RESULT([$STLD_FLAGS])
154
155 #######################################################
156 # test whether building a shared library actually works
157 if test $BLDSHARED = true; then
158
159 AC_MSG_CHECKING([SHLD])
160 AC_MSG_RESULT([$SHLD])
161 AC_MSG_CHECKING([SHLD_FLAGS])
162 AC_MSG_RESULT([$SHLD_FLAGS])
163
164 AC_MSG_CHECKING([SHLIBEXT])
165 AC_MSG_RESULT([$SHLIBEXT])
166 AC_MSG_CHECKING([SONAMEFLAG])
167 AC_MSG_RESULT([$SONAMEFLAG])
168
169 AC_MSG_CHECKING([PICFLAG])
170 AC_MSG_RESULT([$PICFLAG])
171
172 AC_CACHE_CHECK([whether building shared libraries actually works], 
173                [ac_cv_shlib_works],[
174    ac_cv_shlib_works=no
175    # try building a trivial shared library
176    ${CC} ${CFLAGS} ${PICFLAG} -c ${srcdir-.}/build/tests/shlib.c -o shlib.o &&
177        ${SHLD} `eval echo ${SHLD_FLAGS} ` -o shlib.${SHLIBEXT} shlib.o &&
178        ac_cv_shlib_works=yes
179    rm -f shlib.${SHLIBEXT} shlib.o
180 ])
181 if test $ac_cv_shlib_works = no; then
182    BLDSHARED=false
183 fi
184 fi
185
186 AC_ARG_ENABLE(dso,
187 [  --enable-dso                 Enable building internal libraries as DSO's (experimental)],
188 [ if test x$enable_dso != xyes; then
189         BLDSHARED=false
190   fi], 
191 [BLDSHARED=false])