xref: /curl/m4/xc-lt-iface.m4 (revision 2bc1d775)
1#---------------------------------------------------------------------------
2#
3# xc-lt-iface.m4
4#
5# Copyright (C), Daniel Stenberg <daniel@haxx.se>
6#
7# Permission to use, copy, modify, and distribute this software for any
8# purpose with or without fee is hereby granted, provided that the above
9# copyright notice and this permission notice appear in all copies.
10#
11# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18#
19# SPDX-License-Identifier: ISC
20#
21#---------------------------------------------------------------------------
22
23# serial 1
24
25
26dnl _XC_LIBTOOL_PREAMBLE
27dnl -------------------------------------------------
28dnl Private macro.
29dnl
30dnl Checks some configure script options related with
31dnl libtool and customizes its default behavior before
32dnl libtool code is actually used in script.
33
34m4_define([_XC_LIBTOOL_PREAMBLE],
35[dnl
36# ------------------------------------ #
37#  Determine libtool default behavior  #
38# ------------------------------------ #
39
40#
41# Default behavior is to enable shared and static libraries on systems
42# where libtool knows how to build both library versions, and does not
43# require separate configuration and build runs for each flavor.
44#
45
46xc_lt_want_enable_shared='yes'
47xc_lt_want_enable_static='yes'
48
49#
50# User may have disabled shared or static libraries.
51#
52case "x$enable_shared" in @%:@ (
53  xno)
54    xc_lt_want_enable_shared='no'
55    ;;
56esac
57case "x$enable_static" in @%:@ (
58  xno)
59    xc_lt_want_enable_static='no'
60    ;;
61esac
62if test "x$xc_lt_want_enable_shared" = 'xno' &&
63  test "x$xc_lt_want_enable_static" = 'xno'; then
64  AC_MSG_ERROR([can not disable shared and static libraries simultaneously])
65fi
66
67#
68# Default behavior on systems that require independent configuration
69# and build runs for shared and static is to enable shared libraries
70# and disable static ones. On these systems option '--disable-shared'
71# must be used in order to build a proper static library.
72#
73
74if test "x$xc_lt_want_enable_shared" = 'xyes' &&
75  test "x$xc_lt_want_enable_static" = 'xyes'; then
76  case $host_os in @%:@ (
77    pw32* | cegcc* | os2* | aix*)
78      xc_lt_want_enable_static='no'
79      ;;
80  esac
81fi
82
83#
84# Make libtool aware of current shared and static library preferences
85# taking in account that, depending on host characteristics, libtool
86# may modify these option preferences later in this configure script.
87#
88
89enable_shared=$xc_lt_want_enable_shared
90enable_static=$xc_lt_want_enable_static
91
92#
93# Default behavior is to build PIC objects for shared libraries and
94# non-PIC objects for static libraries.
95#
96
97xc_lt_want_with_pic='default'
98
99#
100# User may have specified PIC preference.
101#
102
103case "x$with_pic" in @%:@ ((
104  xno)
105    xc_lt_want_with_pic='no'
106    ;;
107  xyes)
108    xc_lt_want_with_pic='yes'
109    ;;
110esac
111
112#
113# Default behavior on some systems where building a shared library out
114# of non-PIC compiled objects will fail with following linker error
115# "relocation R_X86_64_32 can not be used when making a shared object"
116# is to build PIC objects even for static libraries. This behavior may
117# be overridden using 'configure --disable-shared --without-pic'.
118#
119
120if test "x$xc_lt_want_with_pic" = 'xdefault'; then
121  case $host_cpu in @%:@ (
122    x86_64 | amd64 | ia64)
123      case $host_os in @%:@ (
124        linux* | freebsd* | midnightbsd*)
125          xc_lt_want_with_pic='yes'
126          ;;
127      esac
128      ;;
129  esac
130fi
131
132#
133# Make libtool aware of current PIC preference taking in account that,
134# depending on host characteristics, libtool may modify PIC default
135# behavior to fit host system idiosyncrasies later in this script.
136#
137
138with_pic=$xc_lt_want_with_pic
139dnl
140m4_define([$0],[])dnl
141])
142
143
144dnl _XC_LIBTOOL_BODY
145dnl -------------------------------------------------
146dnl Private macro.
147dnl
148dnl This macro performs embedding of libtool code into
149dnl configure script, regardless of libtool version in
150dnl use when generating configure script.
151
152m4_define([_XC_LIBTOOL_BODY],
153[dnl
154## ----------------------- ##
155##  Start of libtool code  ##
156## ----------------------- ##
157m4_ifdef([LT_INIT],
158[dnl
159LT_INIT([win32-dll])
160],[dnl
161AC_LIBTOOL_WIN32_DLL
162AC_PROG_LIBTOOL
163])dnl
164## --------------------- ##
165##  End of libtool code  ##
166## --------------------- ##
167dnl
168m4_define([$0], [])[]dnl
169])
170
171
172dnl _XC_CHECK_LT_BUILD_LIBRARIES
173dnl -------------------------------------------------
174dnl Private macro.
175dnl
176dnl Checks whether libtool shared and static libraries
177dnl are finally built depending on user input, default
178dnl behavior and knowledge that libtool has about host
179dnl characteristics.
180dnl Results stored in following shell variables:
181dnl   xc_lt_build_shared
182dnl   xc_lt_build_static
183
184m4_define([_XC_CHECK_LT_BUILD_LIBRARIES],
185[dnl
186#
187# Verify if finally libtool shared libraries will be built
188#
189
190case "x$enable_shared" in @%:@ ((
191  xyes | xno)
192    xc_lt_build_shared=$enable_shared
193    ;;
194  *)
195    AC_MSG_ERROR([unexpected libtool enable_shared value: $enable_shared])
196    ;;
197esac
198
199#
200# Verify if finally libtool static libraries will be built
201#
202
203case "x$enable_static" in @%:@ ((
204  xyes | xno)
205    xc_lt_build_static=$enable_static
206    ;;
207  *)
208    AC_MSG_ERROR([unexpected libtool enable_static value: $enable_static])
209    ;;
210esac
211dnl
212m4_define([$0],[])dnl
213])
214
215
216dnl _XC_CHECK_LT_SHLIB_USE_VERSION_INFO
217dnl -------------------------------------------------
218dnl Private macro.
219dnl
220dnl Checks if the -version-info linker flag must be
221dnl provided when building libtool shared libraries.
222dnl Result stored in xc_lt_shlib_use_version_info.
223
224m4_define([_XC_CHECK_LT_SHLIB_USE_VERSION_INFO],
225[dnl
226#
227# Verify if libtool shared libraries should be linked using flag -version-info
228#
229
230AC_MSG_CHECKING([whether to build shared libraries with -version-info])
231xc_lt_shlib_use_version_info='yes'
232if test "x$version_type" = 'xnone'; then
233  xc_lt_shlib_use_version_info='no'
234fi
235case $host_os in @%:@ (
236  amigaos*)
237    xc_lt_shlib_use_version_info='yes'
238    ;;
239esac
240AC_MSG_RESULT([$xc_lt_shlib_use_version_info])
241dnl
242m4_define([$0], [])[]dnl
243])
244
245
246dnl _XC_CHECK_LT_SHLIB_USE_NO_UNDEFINED
247dnl -------------------------------------------------
248dnl Private macro.
249dnl
250dnl Checks if the -no-undefined linker flag must be
251dnl provided when building libtool shared libraries.
252dnl Result stored in xc_lt_shlib_use_no_undefined.
253
254m4_define([_XC_CHECK_LT_SHLIB_USE_NO_UNDEFINED],
255[dnl
256#
257# Verify if libtool shared libraries should be linked using flag -no-undefined
258#
259
260AC_MSG_CHECKING([whether to build shared libraries with -no-undefined])
261xc_lt_shlib_use_no_undefined='no'
262if test "x$allow_undefined" = 'xno'; then
263  xc_lt_shlib_use_no_undefined='yes'
264elif test "x$allow_undefined_flag" = 'xunsupported'; then
265  xc_lt_shlib_use_no_undefined='yes'
266fi
267case $host_os in @%:@ (
268  cygwin* | mingw* | pw32* | cegcc* | os2* | aix*)
269    xc_lt_shlib_use_no_undefined='yes'
270    ;;
271esac
272AC_MSG_RESULT([$xc_lt_shlib_use_no_undefined])
273dnl
274m4_define([$0], [])[]dnl
275])
276
277
278dnl _XC_CHECK_LT_SHLIB_USE_MIMPURE_TEXT
279dnl -------------------------------------------------
280dnl Private macro.
281dnl
282dnl Checks if the -mimpure-text linker flag must be
283dnl provided when building libtool shared libraries.
284dnl Result stored in xc_lt_shlib_use_mimpure_text.
285
286m4_define([_XC_CHECK_LT_SHLIB_USE_MIMPURE_TEXT],
287[dnl
288#
289# Verify if libtool shared libraries should be linked using flag -mimpure-text
290#
291
292AC_MSG_CHECKING([whether to build shared libraries with -mimpure-text])
293xc_lt_shlib_use_mimpure_text='no'
294case $host_os in @%:@ (
295  solaris2*)
296    if test "x$GCC" = 'xyes'; then
297      xc_lt_shlib_use_mimpure_text='yes'
298    fi
299    ;;
300esac
301AC_MSG_RESULT([$xc_lt_shlib_use_mimpure_text])
302dnl
303m4_define([$0], [])[]dnl
304])
305
306
307dnl _XC_CHECK_LT_BUILD_WITH_PIC
308dnl -------------------------------------------------
309dnl Private macro.
310dnl
311dnl Checks whether libtool shared and static libraries
312dnl would be built with PIC depending on user input,
313dnl default behavior and knowledge that libtool has
314dnl about host characteristics.
315dnl Results stored in following shell variables:
316dnl   xc_lt_build_shared_with_pic
317dnl   xc_lt_build_static_with_pic
318
319m4_define([_XC_CHECK_LT_BUILD_WITH_PIC],
320[dnl
321#
322# Find out whether libtool libraries would be built with PIC
323#
324
325case "x$pic_mode" in @%:@ ((((
326  xdefault)
327    xc_lt_build_shared_with_pic='yes'
328    xc_lt_build_static_with_pic='no'
329    ;;
330  xyes)
331    xc_lt_build_shared_with_pic='yes'
332    xc_lt_build_static_with_pic='yes'
333    ;;
334  xno)
335    xc_lt_build_shared_with_pic='no'
336    xc_lt_build_static_with_pic='no'
337    ;;
338  *)
339    xc_lt_build_shared_with_pic='unknown'
340    xc_lt_build_static_with_pic='unknown'
341    AC_MSG_WARN([unexpected libtool pic_mode value: $pic_mode])
342    ;;
343esac
344AC_MSG_CHECKING([whether to build shared libraries with PIC])
345AC_MSG_RESULT([$xc_lt_build_shared_with_pic])
346AC_MSG_CHECKING([whether to build static libraries with PIC])
347AC_MSG_RESULT([$xc_lt_build_static_with_pic])
348dnl
349m4_define([$0],[])dnl
350])
351
352
353dnl _XC_CHECK_LT_BUILD_SINGLE_VERSION
354dnl -------------------------------------------------
355dnl Private macro.
356dnl
357dnl Checks whether a libtool shared or static library
358dnl is finally built exclusively without the other.
359dnl Results stored in following shell variables:
360dnl   xc_lt_build_shared_only
361dnl   xc_lt_build_static_only
362
363m4_define([_XC_CHECK_LT_BUILD_SINGLE_VERSION],
364[dnl
365#
366# Verify if libtool shared libraries will be built while static not built
367#
368
369AC_MSG_CHECKING([whether to build shared libraries only])
370if test "$xc_lt_build_shared" = 'yes' &&
371  test "$xc_lt_build_static" = 'no'; then
372  xc_lt_build_shared_only='yes'
373else
374  xc_lt_build_shared_only='no'
375fi
376AC_MSG_RESULT([$xc_lt_build_shared_only])
377
378#
379# Verify if libtool static libraries will be built while shared not built
380#
381
382AC_MSG_CHECKING([whether to build static libraries only])
383if test "$xc_lt_build_static" = 'yes' &&
384  test "$xc_lt_build_shared" = 'no'; then
385  xc_lt_build_static_only='yes'
386else
387  xc_lt_build_static_only='no'
388fi
389AC_MSG_RESULT([$xc_lt_build_static_only])
390dnl
391m4_define([$0],[])dnl
392])
393
394
395dnl _XC_LIBTOOL_POSTLUDE
396dnl -------------------------------------------------
397dnl Private macro.
398dnl
399dnl Performs several checks related with libtool that
400dnl can not be done unless libtool code has already
401dnl been executed. See individual check descriptions
402dnl for further info.
403
404m4_define([_XC_LIBTOOL_POSTLUDE],
405[dnl
406_XC_CHECK_LT_BUILD_LIBRARIES
407_XC_CHECK_LT_SHLIB_USE_VERSION_INFO
408_XC_CHECK_LT_SHLIB_USE_NO_UNDEFINED
409_XC_CHECK_LT_SHLIB_USE_MIMPURE_TEXT
410_XC_CHECK_LT_BUILD_WITH_PIC
411_XC_CHECK_LT_BUILD_SINGLE_VERSION
412dnl
413m4_define([$0],[])dnl
414])
415
416
417dnl XC_LIBTOOL
418dnl -------------------------------------------------
419dnl Public macro.
420dnl
421dnl This macro embeds libtool machinery into configure
422dnl script, regardless of libtool version, and performs
423dnl several additional checks whose results can be used
424dnl later on.
425dnl
426dnl Usage of this macro ensures that generated configure
427dnl script uses equivalent logic irrespective of autoconf
428dnl or libtool version being used to generate configure
429dnl script.
430dnl
431dnl Results stored in following shell variables:
432dnl   xc_lt_build_shared
433dnl   xc_lt_build_static
434dnl   xc_lt_shlib_use_version_info
435dnl   xc_lt_shlib_use_no_undefined
436dnl   xc_lt_shlib_use_mimpure_text
437dnl   xc_lt_build_shared_with_pic
438dnl   xc_lt_build_static_with_pic
439dnl   xc_lt_build_shared_only
440dnl   xc_lt_build_static_only
441
442AC_DEFUN([XC_LIBTOOL],
443[dnl
444AC_PREREQ([2.50])dnl
445dnl
446AC_BEFORE([$0],[LT_INIT])dnl
447AC_BEFORE([$0],[AC_PROG_LIBTOOL])dnl
448AC_BEFORE([$0],[AC_LIBTOOL_WIN32_DLL])dnl
449dnl
450AC_REQUIRE([XC_CHECK_PATH_SEPARATOR])dnl
451AC_REQUIRE([AC_CANONICAL_HOST])dnl
452AC_REQUIRE([AC_PROG_CC])dnl
453dnl
454_XC_LIBTOOL_PREAMBLE
455_XC_LIBTOOL_BODY
456_XC_LIBTOOL_POSTLUDE
457dnl
458m4_ifdef([AC_LIBTOOL_WIN32_DLL],
459  [m4_undefine([AC_LIBTOOL_WIN32_DLL])])dnl
460m4_ifdef([AC_PROG_LIBTOOL],
461  [m4_undefine([AC_PROG_LIBTOOL])])dnl
462m4_ifdef([LT_INIT],
463  [m4_undefine([LT_INIT])])dnl
464dnl
465m4_define([$0],[])dnl
466])
467