Offset 0, 0 lines modifiedOffset 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 ])