| | | | |
| Offset 0, 0 lines modified | Offset 1, 323 lines modified |
| | 1 | #·lib-prefix.m4·serial·20 |
| | 2 | dnl·Copyright·(C)·2001-2005,·2008-2023·Free·Software·Foundation,·Inc. |
| | 3 | dnl·This·file·is·free·software;·the·Free·Software·Foundation |
| | 4 | dnl·gives·unlimited·permission·to·copy·and/or·distribute·it, |
| | 5 | dnl·with·or·without·modifications,·as·long·as·this·notice·is·preserved. |
| | |
| | 6 | dnl·From·Bruno·Haible. |
| | |
| | 7 | dnl·AC_LIB_PREFIX·adds·to·the·CPPFLAGS·and·LDFLAGS·the·flags·that·are·needed |
| | 8 | dnl·to·access·previously·installed·libraries.·The·basic·assumption·is·that |
| | 9 | dnl·a·user·will·want·packages·to·use·other·packages·he·previously·installed |
| | 10 | dnl·with·the·same·--prefix·option. |
| | 11 | dnl·This·macro·is·not·needed·if·only·AC_LIB_LINKFLAGS·is·used·to·locate |
| | 12 | dnl·libraries,·but·is·otherwise·very·convenient. |
| | 13 | AC_DEFUN([AC_LIB_PREFIX], |
| | 14 | [ |
| | 15 | ··AC_BEFORE([$0],·[AC_LIB_LINKFLAGS]) |
| | 16 | ··AC_REQUIRE([AC_PROG_CC]) |
| | 17 | ··AC_REQUIRE([AC_CANONICAL_HOST]) |
| | 18 | ··AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) |
| | 19 | ··AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) |
| | 20 | ··dnl·By·default,·look·in·$includedir·and·$libdir. |
| | 21 | ··use_additional=yes |
| | 22 | ··AC_LIB_WITH_FINAL_PREFIX([ |
| | 23 | ····eval·additional_includedir=\"$includedir\" |
| | 24 | ····eval·additional_libdir=\"$libdir\" |
| | 25 | ··]) |
| | 26 | ··AC_ARG_WITH([lib-prefix], |
| | 27 | [[··--with-lib-prefix[=DIR]·search·for·libraries·in·DIR/include·and·DIR/lib |
| | 28 | ··--without-lib-prefix····don't·search·for·libraries·in·includedir·and·libdir]], |
| | 29 | [ |
| | 30 | ····if·test·"X$withval"·=·"Xno";·then |
| | 31 | ······use_additional=no |
| | 32 | ····else |
| | 33 | ······if·test·"X$withval"·=·"X";·then |
| | 34 | ········AC_LIB_WITH_FINAL_PREFIX([ |
| | 35 | ··········eval·additional_includedir=\"$includedir\" |
| | 36 | ··········eval·additional_libdir=\"$libdir\" |
| | 37 | ········]) |
| | 38 | ······else |
| | 39 | ········additional_includedir="$withval/include" |
| | 40 | ········additional_libdir="$withval/$acl_libdirstem" |
| | 41 | ······fi |
| | 42 | ····fi |
| | 43 | ]) |
| | 44 | ··if·test·$use_additional·=·yes;·then |
| | 45 | ····dnl·Potentially·add·$additional_includedir·to·$CPPFLAGS. |
| | 46 | ····dnl·But·don't·add·it |
| | 47 | ····dnl···1.·if·it's·the·standard·/usr/include, |
| | 48 | ····dnl···2.·if·it's·already·present·in·$CPPFLAGS, |
| | 49 | ····dnl···3.·if·it's·/usr/local/include·and·we·are·using·GCC·on·Linux, |
| | 50 | ····dnl···4.·if·it·doesn't·exist·as·a·directory. |
| | 51 | ····if·test·"X$additional_includedir"·!=·"X/usr/include";·then |
| | 52 | ······haveit= |
| | 53 | ······for·x·in·$CPPFLAGS;·do |
| | 54 | ········AC_LIB_WITH_FINAL_PREFIX([eval·x=\"$x\"]) |
| | 55 | ········if·test·"X$x"·=·"X-I$additional_includedir";·then |
| | 56 | ··········haveit=yes |
| | 57 | ··········break |
| | 58 | ········fi |
| | 59 | ······done |
| | 60 | ······if·test·-z·"$haveit";·then |
| | 61 | ········if·test·"X$additional_includedir"·=·"X/usr/local/include";·then |
| | 62 | ··········if·test·-n·"$GCC";·then |
| | 63 | ············case·$host_os·in |
| | 64 | ··············linux*·|·gnu*·|·k*bsd*-gnu)·haveit=yes;; |
| | 65 | ············esac |
| | 66 | ··········fi |
| | 67 | ········fi |
| | 68 | ········if·test·-z·"$haveit";·then |
| | 69 | ··········if·test·-d·"$additional_includedir";·then |
| | 70 | ············dnl·Really·add·$additional_includedir·to·$CPPFLAGS. |
| | 71 | ············CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+·}-I$additional_includedir" |
| | 72 | ··········fi |
| | 73 | ········fi |
| | 74 | ······fi |
| | 75 | ····fi |
| | 76 | ····dnl·Potentially·add·$additional_libdir·to·$LDFLAGS. |
| | 77 | ····dnl·But·don't·add·it |
| | 78 | ····dnl···1.·if·it's·the·standard·/usr/lib, |
| | 79 | ····dnl···2.·if·it's·already·present·in·$LDFLAGS, |
| | 80 | ····dnl···3.·if·it's·/usr/local/lib·and·we·are·using·GCC·on·Linux, |
| | 81 | ····dnl···4.·if·it·doesn't·exist·as·a·directory. |
| | 82 | ····if·test·"X$additional_libdir"·!=·"X/usr/$acl_libdirstem";·then |
| | 83 | ······haveit= |
| | 84 | ······for·x·in·$LDFLAGS;·do |
| | 85 | ········AC_LIB_WITH_FINAL_PREFIX([eval·x=\"$x\"]) |
| | 86 | ········if·test·"X$x"·=·"X-L$additional_libdir";·then |
| | 87 | ··········haveit=yes |
| | 88 | ··········break |
| | 89 | ········fi |
| | 90 | ······done |
| | 91 | ······if·test·-z·"$haveit";·then |
| | 92 | ········if·test·"X$additional_libdir"·=·"X/usr/local/$acl_libdirstem";·then |
| | 93 | ··········if·test·-n·"$GCC";·then |
| | 94 | ············case·$host_os·in |
| | 95 | ··············linux*)·haveit=yes;; |
| | 96 | ············esac |
| | 97 | ··········fi |
| | 98 | ········fi |
| | 99 | ········if·test·-z·"$haveit";·then |
| | 100 | ··········if·test·-d·"$additional_libdir";·then |
| | 101 | ············dnl·Really·add·$additional_libdir·to·$LDFLAGS. |
| | 102 | ············LDFLAGS="${LDFLAGS}${LDFLAGS:+·}-L$additional_libdir" |
| | 103 | ··········fi |
| | 104 | ········fi |
| | 105 | ······fi |
| | 106 | ····fi |
| | 107 | ··fi |
| | 108 | ]) |
| | |
| | 109 | dnl·AC_LIB_PREPARE_PREFIX·creates·variables·acl_final_prefix, |
| | 110 | dnl·acl_final_exec_prefix,·containing·the·values·to·which·$prefix·and |
| | 111 | dnl·$exec_prefix·will·expand·at·the·end·of·the·configure·script. |
| | 112 | AC_DEFUN([AC_LIB_PREPARE_PREFIX], |
| | 113 | [ |
| | 114 | ··dnl·Unfortunately,·prefix·and·exec_prefix·get·only·finally·determined |
| | 115 | ··dnl·at·the·end·of·configure. |
| | 116 | ··if·test·"X$prefix"·=·"XNONE";·then |
| | 117 | ····acl_final_prefix="$ac_default_prefix" |
| | 118 | ··else |
| | 119 | ····acl_final_prefix="$prefix" |
| | 120 | ··fi |
| | 121 | ··if·test·"X$exec_prefix"·=·"XNONE";·then |
| | 122 | ····acl_final_exec_prefix='${prefix}' |
| | 123 | ··else |
| | 124 | ····acl_final_exec_prefix="$exec_prefix" |
| | 125 | ··fi |
| | 126 | ··acl_save_prefix="$prefix" |
| | 127 | ··prefix="$acl_final_prefix" |
| | 128 | ··eval·acl_final_exec_prefix=\"$acl_final_exec_prefix\" |
| | 129 | ··prefix="$acl_save_prefix" |
| | 130 | ]) |
| | |
| | 131 | dnl·AC_LIB_WITH_FINAL_PREFIX([statement])·evaluates·statement,·with·the |
| | 132 | dnl·variables·prefix·and·exec_prefix·bound·to·the·values·they·will·have |
| | 133 | dnl·at·the·end·of·the·configure·script. |
| | 134 | AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], |
| | 135 | [ |
| | 136 | ··acl_save_prefix="$prefix" |
| | 137 | ··prefix="$acl_final_prefix" |
| | 138 | ··acl_save_exec_prefix="$exec_prefix" |
| | 139 | ··exec_prefix="$acl_final_exec_prefix" |
| | 140 | ··$1 |
| | 141 | ··exec_prefix="$acl_save_exec_prefix" |
| | 142 | ··prefix="$acl_save_prefix" |
| | 143 | ]) |
| | |
| | 144 | dnl·AC_LIB_PREPARE_MULTILIB·creates |
| | 145 | dnl·-·a·function·acl_is_expected_elfclass,·that·tests·whether·standard·input |
| | 146 | dn;···has·a·32-bit·or·64-bit·ELF·header,·depending·on·the·host·CPU·ABI, |
| | 147 | dnl·-·3·variables·acl_libdirstem,·acl_libdirstem2,·acl_libdirstem3,·containing |
| | 148 | dnl···the·basename·of·the·libdir·to·try·in·turn,·either·"lib"·or·"lib64"·or |
| | 149 | dnl···"lib/64"·or·"lib32"·or·"lib/sparcv9"·or·"lib/amd64"·or·similar. |
| | 150 | AC_DEFUN([AC_LIB_PREPARE_MULTILIB], |
| | 151 | [ |
| | 152 | ··dnl·There·is·no·formal·standard·regarding·lib,·lib32,·and·lib64. |
| | 153 | ··dnl·On·most·glibc·systems,·the·current·practice·is·that·on·a·system·supporting |
| | 154 | ··dnl·32-bit·and·64-bit·instruction·sets·or·ABIs,·64-bit·libraries·go·under |
| | 155 | ··dnl·$prefix/lib64·and·32-bit·libraries·go·under·$prefix/lib.·However,·on |
| | 156 | ··dnl·Arch·Linux·based·distributions,·it's·the·opposite:·32-bit·libraries·go |
| | 157 | ··dnl·under·$prefix/lib32·and·64-bit·libraries·go·under·$prefix/lib. |
| | 158 | ··dnl·We·determine·the·compiler's·default·mode·by·looking·at·the·compiler's |
| | 159 | ··dnl·library·search·path.·If·at·least·one·of·its·elements·ends·in·/lib64·or |
| | 160 | ··dnl·points·to·a·directory·whose·absolute·pathname·ends·in·/lib64,·we·use·that |
| | 161 | ··dnl·for·64-bit·ABIs.·Similarly·for·32-bit·ABIs.·Otherwise·we·use·the·default, |
| | 162 | ··dnl·namely·"lib". |
| | 163 | ··dnl·On·Solaris·systems,·the·current·practice·is·that·on·a·system·supporting |
| | 164 | ··dnl·32-bit·and·64-bit·instruction·sets·or·ABIs,·64-bit·libraries·go·under |
| | 165 | ··dnl·$prefix/lib/64·(which·is·a·symlink·to·either·$prefix/lib/sparcv9·or |
| | 166 | ··dnl·$prefix/lib/amd64)·and·32-bit·libraries·go·under·$prefix/lib. |
| | 167 | ··AC_REQUIRE([AC_CANONICAL_HOST]) |
| | 168 | ··AC_REQUIRE([gl_HOST_CPU_C_ABI_32BIT]) |
| | |
| | 169 | ··AC_CACHE_CHECK([for·ELF·binary·format],·[gl_cv_elf], |
| | 170 | ····[AC_EGREP_CPP([Extensible·Linking·Format], |
| | 171 | ·······[#if·defined·__ELF__·||·(defined·__linux__·&&·defined·__EDG__) |
| | 172 | ········Extensible·Linking·Format |
| | 173 | ········#endif |
| | 174 | ·······], |
| | 175 | ·······[gl_cv_elf=yes], |
| | 176 | ·······[gl_cv_elf=no]) |
| | 177 | ····]) |
| | 178 | ··if·test·$gl_cv_elf·=·yes;·then |
| | 179 | ····#·Extract·the·ELF·class·of·a·file·(5th·byte)·in·decimal. |
| | 180 | ····#·Cf.·https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header |
| | 181 | ····if·od·-A·x·<·/dev/null·>/dev/null·2>/dev/null;·then |
| | 182 | ······#·Use·POSIX·od. |
| | 183 | ······func_elfclass·() |
| | 184 | ······{ |
| | 185 | ········od·-A·n·-t·d1·-j·4·-N·1 |
| | 186 | ······} |
| | 187 | ····else |
| | 188 | ······#·Use·BSD·hexdump. |
| | 189 | ······func_elfclass·() |
| | 190 | ······{ |
| | 191 | ········dd·bs=1·count=1·skip=4·2>/dev/null·|·hexdump·-e·'1/1·"%3d·"' |
| | 192 | ········echo |
| | 193 | ······} |
| | 194 | ····fi |
| | 195 | ····#·Use·'expr',·not·'test',·to·compare·the·values·of·func_elfclass,·because·on |
| | 196 | ····#·Solaris·11·OpenIndiana·and·Solaris·11·OmniOS,·the·result·is·001·or·002, |
| | 197 | ····#·not·1·or·2. |
| | 198 | changequote(,)dnl |
| | 199 | ····case·$HOST_CPU_C_ABI_32BIT·in |
| | 200 | ······yes) |
| | 201 | ········#·32-bit·ABI. |
| | 202 | ········acl_is_expected_elfclass·() |
| | 203 | ········{ |
| | 204 | ··········expr·"`func_elfclass·|·sed·-e·'s/[·» ]//g'`"·=·1·>·/dev/null |
| | 205 | ········} |
| | 206 | ········;; |
| | 207 | ······no) |
| | 208 | ········#·64-bit·ABI. |
| | 209 | ········acl_is_expected_elfclass·() |
| | 210 | ········{ |
| | 211 | ··········expr·"`func_elfclass·|·sed·-e·'s/[·» ]//g'`"·=·2·>·/dev/null |
| | 212 | ········} |
| | 213 | ········;; |
| | 214 | ······*) |
| | 215 | ········#·Unknown. |
| | 216 | ········acl_is_expected_elfclass·() |
| | 217 | ········{ |
| | 218 | ··········: |
| | 219 | ········} |
| | 220 | ········;; |
| | 221 | ····esac |
| | 222 | changequote([,])dnl |
| | 223 | ··else |
| | 224 | ····acl_is_expected_elfclass·() |
| | 225 | ····{ |
| | 226 | ······: |
| | 227 | ····} |
| | 228 | ··fi |
| | |
| | 229 | ··dnl·Allow·the·user·to·override·the·result·by·setting·acl_cv_libdirstems. |
| | 230 | ··AC_CACHE_CHECK([for·the·common·suffixes·of·directories·in·the·library·search·path], |
| | 231 | ····[acl_cv_libdirstems], |
| | 232 | ····[dnl·Try·'lib'·first,·because·that's·the·default·for·libdir·in·GNU,·see |
| | 233 | ·····dnl·<https://www.gnu.org/prep/standards/html_node/Directory-Variables.html>. |
| | 234 | ·····acl_libdirstem=lib |
| | 235 | ·····acl_libdirstem2= |
| | 236 | ·····acl_libdirstem3= |
| | 237 | ·····case·"$host_os"·in |
| | 238 | ·······solaris*) |
| | 239 | ·········dnl·See·Solaris·10·Software·Developer·Collection·>·Solaris·64-bit·Developer's·Guide·>·The·Development·Environment |
| | 240 | ·········dnl·<https://docs.oracle.com/cd/E19253-01/816-5138/dev-env/index.html>. |
| | 241 | ·········dnl·"Portable·Makefiles·should·refer·to·any·library·directories·using·the·64·symbolic·link." |
| | 242 | ·········dnl·But·we·want·to·recognize·the·sparcv9·or·amd64·subdirectory·also·if·the |
| | 243 | ·········dnl·symlink·is·missing,·so·we·set·acl_libdirstem2·too. |
| | 244 | ·········if·test·$HOST_CPU_C_ABI_32BIT·=·no;·then |
| | 245 | ···········acl_libdirstem2=lib/64 |
| | 246 | ···········case·"$host_cpu"·in |
| | 247 | ·············sparc*)········acl_libdirstem3=lib/sparcv9·;; |
| | 248 | ·············i*86·|·x86_64)·acl_libdirstem3=lib/amd64·;; |
| | 249 | ···········esac |
| | 250 | ·········fi |
| | 251 | ·········;; |
| | 252 | ·······*) |
| | 253 | ·········dnl·If·$CC·generates·code·for·a·32-bit·ABI,·the·libraries·are |
| | 254 | ·········dnl·surely·under·$prefix/lib·or·$prefix/lib32,·not·$prefix/lib64. |
| | 255 | ·········dnl·Similarly,·if·$CC·generates·code·for·a·64-bit·ABI,·the·libraries |
| | 256 | ·········dnl·are·surely·under·$prefix/lib·or·$prefix/lib64,·not·$prefix/lib32. |
| | 257 | ·········dnl·Find·the·compiler's·search·path.·However,·non-system·compilers |
| | 258 | ·········dnl·sometimes·have·odd·library·search·paths.·But·we·can't·simply·invoke |
| | 259 | ·········dnl·'/usr/bin/gcc·-print-search-dirs'·because·that·would·not·take·into |
| | 260 | ·········dnl·account·the·-m32/-m31·or·-m64·options·from·the·$CC·or·$CFLAGS. |
| | 261 | ·········searchpath=`(LC_ALL=C·$CC·$CPPFLAGS·$CFLAGS·-print-search-dirs)·2>/dev/null·\ |
| | 262 | ·····················|·sed·-n·-e·'s,^libraries:·,,p'·|·sed·-e·'s,^=,,'` |
| | 263 | ·········if·test·$HOST_CPU_C_ABI_32BIT·!=·no;·then |
| | 264 | ···········#·32-bit·or·unknown·ABI. |
| | 265 | ···········if·test·-d·/usr/lib32;·then |
| | 266 | ·············acl_libdirstem2=lib32 |
| | 267 | ···········fi |
| | 268 | ·········fi |
| | 269 | ·········if·test·$HOST_CPU_C_ABI_32BIT·!=·yes;·then |
| | 270 | ···········#·64-bit·or·unknown·ABI. |
| | 271 | ···········if·test·-d·/usr/lib64;·then |
| | 272 | ·············acl_libdirstem3=lib64 |
| | 273 | ···········fi |
| | 274 | ·········fi |
| | 275 | ·········if·test·-n·"$searchpath";·then |
| | 276 | ···········acl_save_IFS="${IFS=·» }";·IFS=":" |
| | 277 | ···········for·searchdir·in·$searchpath;·do |
| | 278 | ·············if·test·-d·"$searchdir";·then |
| | 279 | ···············case·"$searchdir"·in |
| | 280 | ·················*/lib32/·|·*/lib32·)·acl_libdirstem2=lib32·;; |
| | 281 | ·················*/lib64/·|·*/lib64·)·acl_libdirstem3=lib64·;; |
| | 282 | ·················*/../·|·*/..·) |
| | 283 | ···················#·Better·ignore·directories·of·this·form.·They·are·misleading. |
| | 284 | ···················;; |
| | 285 | ·················*)·searchdir=`cd·"$searchdir"·&&·pwd` |
| | 286 | ····················case·"$searchdir"·in |
| | 287 | ······················*/lib32·)·acl_libdirstem2=lib32·;; |
| | 288 | ······················*/lib64·)·acl_libdirstem3=lib64·;; |
| | 289 | ····················esac·;; |
| | 290 | ···············esac |
| | 291 | ·············fi |
| | 292 | ···········done |
| | 293 | ···········IFS="$acl_save_IFS" |
| | 294 | ···········if·test·$HOST_CPU_C_ABI_32BIT·=·yes;·then |
| | 295 | ·············#·32-bit·ABI. |
| | 296 | ·············acl_libdirstem3= |
| | 297 | ···········fi |
| | 298 | ···········if·test·$HOST_CPU_C_ABI_32BIT·=·no;·then |
| | 299 | ·············#·64-bit·ABI. |
| | 300 | ·············acl_libdirstem2= |
| | 301 | ···········fi |
| | 302 | ·········fi |
| | 303 | ·········;; |
| | 304 | ·····esac |
| | 305 | ·····test·-n·"$acl_libdirstem2"·||·acl_libdirstem2="$acl_libdirstem" |
| | 306 | ·····test·-n·"$acl_libdirstem3"·||·acl_libdirstem3="$acl_libdirstem" |
| | 307 | ·····acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3" |
| | 308 | ····]) |
| | 309 | ··dnl·Decompose·acl_cv_libdirstems·into·acl_libdirstem,·acl_libdirstem2,·and |
| | 310 | ··dnl·acl_libdirstem3. |
| | 311 | changequote(,)dnl |
| | 312 | ··acl_libdirstem=`echo·"$acl_cv_libdirstems"·|·sed·-e·'s/,.*//'` |
| | 313 | ··acl_libdirstem2=`echo·"$acl_cv_libdirstems"·|·sed·-e·'s/^[^,]*,//'·-e·'s/,.*//'` |
| | 314 | ··acl_libdirstem3=`echo·"$acl_cv_libdirstems"·|·sed·-e·'s/^[^,]*,[^,]*,//'·-e·'s/,.*//'` |
| | 315 | changequote([,])dnl |
| | 316 | ]) |