Update PUI to use ffi-curl
[sxemacs] / m4 / sxe-linker.m4
1 dnl sxe-linker.m4 -- Linker stuff, esp. dynamic linking
2 dnl needed for emodules for one
3
4 AC_DEFUN([SXE_CHECK_LINKER_FLAGS], [dnl
5 dnl just like SXE_CHECK_COMPILER_FLAGS but calls the linker
6 dnl SXE_CHECK_LINKER_FLAGS(<FLAG>, <ACTION-IF-FOUND>, <ACTION-IF-NOT-FOUND>,
7 dnl     <ADDITIONAL-FLAGS>)
8         AC_MSG_CHECKING([whether linker accepts $1])
9
10         dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname:
11         SXE_LANG_WERROR([push+on])
12         AS_LITERAL_IF([$1], [
13                 AC_CACHE_VAL(AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1), [
14                         sxe_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
15                         _AC_LANG_PREFIX[]FLAGS="$4 ${XFLAG} $1"
16                         AC_LINK_IFELSE([AC_LANG_PROGRAM()],
17                                 AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="yes",
18                                 AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="no")
19                         _AC_LANG_PREFIX[]FLAGS=$sxe_save_FLAGS])], [
20                 sxe_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
21                 _AC_LANG_PREFIX[]FLAGS="$4 ${XFLAG} $1"
22                 AC_LINK_IFELSE([AC_LANG_PROGRAM()],
23                         eval AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="yes",
24                         eval AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)="no")
25                 _AC_LANG_PREFIX[]FLAGS=$sxe_save_FLAGS])
26         eval sxe_check_linker_flags=$AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1)
27         SXE_LANG_WERROR([pop])
28
29         AC_MSG_RESULT([$sxe_check_linker_flags])
30         if test "$sxe_check_linker_flags" = "yes"; then
31                 m4_default([$2], :)
32         else
33                 m4_default([$3], :)
34         fi
35 ])dnl SXE_CHECK_LINKER_FLAGS
36
37 AC_DEFUN([SXE_CHECK_LINK_LIB], [dnl
38 dnl just like SXE_CHECK_LINKER_FLAGS but calls the linker with -l <LIB>
39 dnl SXE_CHECK_LINK_LIB(<LIB>, <ACTION-IF-FOUND>, <ACTION-IF-NOT-FOUND>,
40 dnl     <ADDITIONAL-FLAGS>)
41         AC_MSG_CHECKING([whether library $1 can be linked])
42
43         dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname:
44         SXE_LANG_WERROR([push+on])
45         AS_LITERAL_IF([$1], [
46                 AC_CACHE_VAL(AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_flags_$1), [
47                         sxe_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
48                         _AC_LANG_PREFIX[]FLAGS="$4 ${XFLAG} -l$1"
49                         AC_LINK_IFELSE([AC_LANG_PROGRAM()],
50                                 AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_lib_$1)="yes",
51                                 AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_lib_$1)="no")
52                         _AC_LANG_PREFIX[]FLAGS=$sxe_save_FLAGS])], [
53                 sxe_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
54                 _AC_LANG_PREFIX[]FLAGS="$4 ${XFLAG} -l$1"
55                 AC_LINK_IFELSE([AC_LANG_PROGRAM()],
56                         eval AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_lib_$1)="yes",
57                         eval AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_lib_$1)="no")
58                 _AC_LANG_PREFIX[]FLAGS=$sxe_save_FLAGS])
59         eval sxe_check_linker_lib=$AS_TR_SH(sxe_cv_[]_AC_LANG_ABBREV[]_lib_$1)
60         SXE_LANG_WERROR([pop])
61
62         AC_MSG_RESULT([$sxe_check_linker_lib])
63         if test "$sxe_check_linker_lib" = "yes"; then
64                 m4_default([$2], :)
65         else
66                 m4_default([$3], :)
67         fi
68 ])dnl SXE_CHECK_LINK_LIB
69
70 AC_DEFUN([SXE_CHECK_LD_ZFLAG], [dnl
71         pushdef([LD_ZFLAG], [$1])
72         pushdef([cv_zflag], [sxe_cv_ld__z_]translit(LD_ZFLAG,[-.=],[___]))
73
74         SXE_CHECK_LINKER_FLAGS([-z ]LD_ZFLAG[])
75
76 dnl Use the check that actually calls the compiler/linker to examine the flags
77 dnl     AC_CACHE_CHECK([whether linker supports -z ]LD_ZFLAG[],
78 dnl             []cv_zflag[], [_SXE_CHECK_LD_ZFLAG(LD_ZFLAG)])
79
80         popdef([cv_zflag])
81         popdef([LD_ZFLAG])
82 ])dnl SXE_CHECK_LD_ZFLAG
83
84 AC_DEFUN([_SXE_CHECK_LD_ZFLAG], [dnl
85         ## arg1 is the flag to check for
86         pushdef([LD_ZFLAG], [$1])
87         pushdef([cv_zflag], [sxe_cv_ld__z_]translit(LD_ZFLAG,[-.=],[___]))
88
89         if test "$GCC" = "yes"; then
90                 if test "($CC -Xlinker --help 2>&1 | \
91                         grep \"-z []LD_ZFLAG[]\" > /dev/null 2>&1 ) "; then
92                         cv_zflag="yes"
93                 else
94                         cv_zflag="no"
95                 fi
96         elif test -n "$LD"; then
97                 if test "($LD --help 2>&1 | \
98                         grep \"-z []LD_ZFLAG[]\" > /dev/null 2>&1 )"; then
99                         cv_zflag="yes"
100                 else
101                         cv_zflag="no"
102                 fi
103         else
104                 cv_zflag="no"
105         fi
106
107         popdef([cv_zflag])
108         popdef([LD_ZFLAG])
109 ])dnl _SXE_CHECK_LD_ZFLAG
110
111 AC_DEFUN([SXE_CHECK_LDFLAGS], [dnl
112         AC_REQUIRE([SXE_CHECK_COMPILER_XFLAG])
113
114         ## relocation
115         SXE_CHECK_LD_ZFLAG([combreloc])
116         SXE_CHECK_LD_ZFLAG([nocombreloc])
117         ## symbols
118         SXE_CHECK_LD_ZFLAG([defs])
119         SXE_CHECK_LD_ZFLAG([muldefs])
120         ## search paths
121         SXE_CHECK_LD_ZFLAG([nodefaultlib])
122         ## binding policy
123         SXE_CHECK_LD_ZFLAG([lazy])
124         SXE_CHECK_LD_ZFLAG([now])
125
126         LDFLAGS="${ldflags} ${ac_cv_env_LDFLAGS_value}"
127         AC_MSG_CHECKING([for preferred LDFLAGS])
128         AC_MSG_RESULT([${LDFLAGS}])
129
130         AC_MSG_NOTICE([
131 If you wish to ADD your own flags you want to stop here and rerun the
132 configure script like so:
133   configure LDFLAGS=<to-be-added-flags>
134
135 You can always override the determined LDFLAGS, partially or totally,
136 using
137   make -C <directory> LDFLAGS=<your-own-flags> [target]
138 or
139   make LDFLAGS=<your-own-flags> [target]
140 respectively
141
142 NOTE: -C <directory> option is not available on all systems
143                 ])
144 ])dnl SXE_CHECK_LDFLAGS
145
146 AC_DEFUN([SXE_PREPEND_LINKER_FLAG], [dnl
147         ## a convenience function to add such linker flags to variables
148         ## arg1 is the flag to add (must include -z if applicable)
149         ## arg2 is the variable whither to prepend
150         pushdef([FLAG], [$1])
151         pushdef([__FLAG], [-Wl,]patsubst([$1], [ ], [[,]]))
152         pushdef([VAR], [$2])
153
154         []VAR[]="[]__FLAG[] $[]VAR[]"
155         if test "$extra_verbose" = "yes"; then
156                 echo "    Prepending linker flag \"[]__FLAG[]\" to \$[]VAR[]"
157         fi
158
159         popdef([VAR])
160         popdef([__FLAG])
161         popdef([FLAG])
162 ])dnl SXE_PREPEND_LINKER_FLAG
163
164 dnl sxe-linker.m4 ends here