bf0df6186dd9894773d3b654e747006fb15b509c
[ira/wip.git] / lib / replace / libreplace_ld.m4
1 #
2 # This offers a nice overview how to build shared libraries on all platforms
3 #        http://www.fortran-2000.com/ArnaudRecipes/sharedlib.html
4 #
5
6 AC_DEFUN([AC_LIBREPLACE_STLD],
7 [
8         AC_PATH_PROG(PROG_AR, ar)
9
10         STLD=${PROG_AR}
11
12         AC_SUBST(STLD)
13 ])
14
15 AC_DEFUN([AC_LIBREPLACE_STLD_FLAGS],
16 [
17         STLD_FLAGS="-rcs"
18         AC_SUBST(STLD_FLAGS)
19 ])
20
21 AC_DEFUN([AC_LD_EXPORT_DYNAMIC],
22 [
23 saved_LDFLAGS="$LDFLAGS"
24 if AC_TRY_COMMAND([${CC-cc} $CFLAGS -Wl,--version 2>&1 | grep "GNU ld" >/dev/null]); then
25         LD_EXPORT_DYNAMIC="-Wl,-export-dynamic"
26 else
27         case "$host_os" in
28                 hpux* )
29                   LD_EXPORT_DYNAMIC="-Wl,-E"
30                   ;;
31                 *)
32                   LD_EXPORT_DYNAMIC=""
33                   ;;
34           esac
35 fi
36 AC_SUBST(LD_EXPORT_DYNAMIC)
37 LDFLAGS="$saved_LDFLAGS"
38 ])
39
40 AC_DEFUN([AC_LD_PICFLAG],
41 [
42 case "$host_os" in
43         *linux*|*gnu*)
44                 PICFLAG="-fPIC" 
45                 ;;
46         *solaris*)
47                 if test "${GCC}" = "yes"; then
48                         PICFLAG="-fPIC"
49                 else
50                         PICFLAG="-KPIC"
51                 fi
52                 ;;
53         *sunos*)
54                 PICFLAG="-KPIC"   # Is this correct for SunOS
55                 ;;
56         *netbsd* | *freebsd* | *dragonfly* )  
57                 PICFLAG="-fPIC -DPIC"
58                 ;;
59         *openbsd*)
60                 PICFLAG="-fPIC"
61                 ;;
62         *irix*)
63                 if test "${GCC}" = "yes"; then
64                         PICFLAG="-fPIC"
65                 else 
66                         PICFLAG="-KPIC"
67                 fi
68                 ;;
69         *aix*)
70                 # as AIX code is always position independent...
71                 PICFLAG="-O2"
72                 ;;
73         *hpux*)
74                 if test "${GCC}" = "yes"; then
75                         PICFLAG="-fPIC"
76                 elif test "$host_cpu" = "ia64"; then
77                         PICFLAG="+z"
78                 elif test $ac_cv_prog_cc_Ae = yes; then
79                         PICFLAG="+z +ESnolit"
80                 fi
81                 ;;
82         *osf*)
83                 PICFLAG="-fPIC"
84                 ;;
85         *unixware*)
86                 PICFLAG="-KPIC"
87                 ;;
88         *darwin*)
89                 PICFLAG="-fno-common"
90                 ;;
91 esac
92 AC_SUBST(PICFLAG)
93 ])
94
95 AC_DEFUN([AC_LIBREPLACE_LD_SHLIB_LINKER],
96 [
97         LD_SHLIB_LINKER="${CC}"
98
99         case "$host_os" in
100                 *irix*)
101                         LD_SHLIB_LINKER="${PROG_LD}"
102                         ;;
103         esac
104
105         AC_SUBST(LD_SHLIB_LINKER)
106 ])
107
108 AC_DEFUN([AC_LIBREPLACE_LD_SHLIB_FLAGS],
109 [
110         LD_SHLIB_FLAGS="-shared"
111
112         case "$host_os" in
113                 *linux*|*gnu*)
114                         LD_SHLIB_FLAGS="-shared -Wl,-Bsymbolic"
115                         ;;
116                 *solaris*)
117                         LD_SHLIB_FLAGS="-G"
118                         if test "${GCC}" = "no"; then
119                                 ## ${CFLAGS} added for building 64-bit shared 
120                                 ## libs using Sun's Compiler
121                                 LD_SHLIB_FLAGS="-G \${CFLAGS}"
122                         fi
123                         ;;
124                 *sunos*)
125                         LD_SHLIB_FLAGS="-G"
126                         ;;
127                 *irix*)
128                         LD_SHLIB_FLAGS="-shared"
129                         ;;
130                 *aix*)
131                         LD_SHLIB_FLAGS="-Wl,-G,-bexpall,-bbigtoc"
132                         ;;
133                 *hpux*)
134                         if test "${GCC}" = "yes"; then
135                                 LD_SHLIB_FLAGS="-shared"
136                         else
137                                 LD_SHLIB_FLAGS="-b"
138                         fi
139                         ;;
140                 *osf*)
141                         LD_SHLIB_FLAGS="-shared"
142                         ;;
143                 *darwin*)
144                         LD_SHLIB_FLAGS="-dynamiclib -Wl,-search_paths_first"
145                         ;;
146         esac
147
148         AC_SUBST(LD_SHLIB_FLAGS)
149 ])
150
151 AC_DEFUN([AC_LIBREPLACE_LD_SHLIB_DISALLOW_UNDEF_FLAG],
152 [
153         LD_SHLIB_DISALLOW_UNDEF_FLAG=""
154
155         #
156         # TODO: enforce error not only warnings
157         #
158         # NOTE: -Wl,--no-allow-shlib-undefined isn't what we want...
159         #       as it bails out on broken system libraries
160         #
161         case "$host_os" in
162                 *osf*)
163                         LD_SHLIB_DISALLOW_UNDEF_FLAG="-warning_unresolved"
164                         ;;
165                 *darwin*)
166                         LD_SHLIB_DISALLOW_UNDEF_FLAG="-undefined error"
167                         ;;
168         esac
169
170         AC_SUBST(LD_SHLIB_DISALLOW_UNDEF_FLAG)
171 ])
172
173 AC_DEFUN([AC_LIBREPLACE_SHLD],
174 [
175         AC_REQUIRE([AC_LIBREPLACE_LD_SHLIB_LINKER])
176         SHLD="$LD_SHLIB_LINKER"
177         AC_SUBST(SHLD)
178 ])
179
180 AC_DEFUN([AC_LIBREPLACE_SHLD_FLAGS],
181 [
182         AC_REQUIRE([AC_LIBREPLACE_LD_SHLIB_FLAGS])
183         AC_REQUIRE([AC_LIBREPLACE_LD_SHLIB_DISALLOW_UNDEF_FLAG])
184         SHLD_FLAGS="$LD_SHLIB_FLAGS $LD_SHLIB_DISALLOW_UNDEF_FLAG"
185         AC_SUBST(SHLD_FLAGS)
186 ])
187
188 AC_DEFUN([AC_LD_SHLIBEXT],
189 [
190         SHLIBEXT="so"
191         case "$host_os" in
192                 *hpux*)
193                         if test "$host_cpu" = "ia64"; then
194                                 SHLIBEXT="so"
195                         else
196                                 SHLIBEXT="sl"
197                         fi
198                 ;;
199                 *darwin*)
200                         SHLIBEXT="dylib"
201                 ;;
202         esac
203         AC_SUBST(SHLIBEXT)
204 ])
205
206 AC_DEFUN([AC_LD_SONAMEFLAG],
207 [
208         AC_SUBST(SONAMEFLAG)
209         SONAMEFLAG=""
210         case "$host_os" in 
211                 *linux*|*gnu*|*qnx*)
212                         SONAMEFLAG="-Wl,-soname="
213                         ;;
214                 *solaris*)
215                         SONAMEFLAG="-h "
216                         if test "${GCC}" = "yes"; then
217                                 SONAMEFLAG="-Wl,-soname="
218                         fi
219                         ;;
220                 *sunos*)
221                         SONAMEFLAG="-Wl,-h,"
222                         ;;
223                 *netbsd* | *freebsd* | *dragonfly* )
224                         SONAMEFLAG="-Wl,-soname,"
225                         ;;
226                 *openbsd*)
227                         SONAMEFLAG="-Wl,-soname,"
228                         ;;
229                 *irix*)
230                         SONAMEFLAG="-Wl,-soname,"
231                         ;;
232                 *hpux*)
233                         SONAMEFLAG="-Wl,+h,"
234                         ;;
235                 *osf*)
236                         SONAMEFLAG="-Wl,-soname,"
237                         ;;
238                 *unixware*)
239                         SONAMEFLAG="-Wl,-soname,"
240                         ;;
241                 *darwin*)
242                         SONAMEFLAG="#"
243                         ;;
244                 *aix*)
245                         # Not supported
246                         SONAMEFLAG="#"
247                         ;;
248                 esac
249 ])
250
251 AC_DEFUN([AC_LD_VERSIONSCRIPT],
252 [
253         AC_SUBST(VERSIONSCRIPT)
254         VERSIONSCRIPT=""
255         case "$host_os" in 
256                 *linux*|*gnu*)
257                         VERSIONSCRIPT="-Wl,--version-script"
258                         ;;
259                 *solaris*)
260                         if test "${GCC}" = "yes"; then
261                                 VERSIONSCRIPT="-Wl,--version-script"
262                         fi
263                         ;;
264                 esac
265 ])
266
267 AC_DEFUN([AC_LIBREPLACE_MDLD],
268 [
269         AC_REQUIRE([AC_LIBREPLACE_LD_SHLIB_LINKER])
270         MDLD="$LD_SHLIB_LINKER"
271         AC_SUBST(MDLD)
272 ])
273
274 AC_DEFUN([AC_LIBREPLACE_LD_SHLIB_ALLOW_UNDEF_FLAG],
275 [
276         LD_ALLOW_SHLIB_UNDEF_FLAG=""
277
278         case "$host_os" in
279                 *linux*|*gnu*)
280                         LD_SHLIB_ALLOW_UNDEF_FLAG="-Wl,--allow-shlib-undefined"
281                         ;;
282                 *osf*)
283                         LD_SHLIB_ALLOW_UNDEF_FLAG="-Wl,-expect_unresolved,\"*\""
284                         ;;
285                 *darwin*)
286                         LD_SHLIB_ALLOW_UNDEF_FLAG="-undefined dynamic_lookup"
287                         ;;
288                 *aix*)
289                         LD_SHLIB_ALLOW_UNDEF_FLAG="-Wl,-bnoentry"
290                         ;;
291         esac
292
293         AC_SUBST(LD_SHLIB_ALLOW_UNDEF_FLAG)
294 ])
295
296 AC_DEFUN([AC_LIBREPLACE_MDLD_FLAGS],
297 [
298         AC_REQUIRE([AC_LIBREPLACE_LD_SHLIB_FLAGS])
299         AC_REQUIRE([AC_LIBREPLACE_LD_SHLIB_ALLOW_UNDEF_FLAG])
300         MDLD_FLAGS="$LD_SHLIB_FLAGS $LD_SHLIB_ALLOW_UNDEF_FLAG"
301         AC_SUBST(MDLD_FLAGS)
302 ])
303
304 AC_DEFUN([AC_LIBREPLACE_RUNTIME_LIB_PATH_VAR],
305 [
306         case "$host_os" in
307                 *linux*|*gnu*)
308                         LIB_PATH_VAR=LD_LIBRARY_PATH
309                 ;;
310                 *bsd*)
311                         LIB_PATH_VAR=LD_LIBRARY_PATH
312                 ;;
313                 *solaris*)
314                         LIB_PATH_VAR=LD_LIBRARY_PATH
315                 ;;
316                 *hpux*)
317                         LIB_PATH_VAR=SHLIB_PATH
318                 ;;
319                 *osf*)
320                         LIB_PATH_VAR=LD_LIBRARY_PATH
321                 ;;
322                 *aix*)
323                         LIB_PATH_VAR=LIBPATH
324                         ;;
325                 *irix*)
326                         LIB_PATH_VAR=LD_LIBRARY_PATH
327                         ;;
328                 *darwin*)
329                         LIB_PATH_VAR=DYLD_LIBRARY_PATH
330                         ;;
331                 *)
332                         LIB_PATH_VAR=LD_LIBRARY_PATH
333                         ;;
334         esac
335
336         AC_SUBST(LIB_PATH_VAR)
337 ])