aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorKevin Meagher <11620178+kjmeagher@users.noreply.github.com>2020-10-28 11:19:50 -0500
committerDaniel Mensinger <daniel@mensinger-ka.de>2021-08-04 19:29:05 +0200
commit7ce29e1eda0425205770b9952aa476126d73e7d2 (patch)
treef2bf1a6ad18cb7de3962ef788dcd7a776ce5d854 /mesonbuild
parent9da99e7a59cafdb9746ccd0cc148e454f0fa8b44 (diff)
downloadmeson-7ce29e1eda0425205770b9952aa476126d73e7d2.zip
meson-7ce29e1eda0425205770b9952aa476126d73e7d2.tar.gz
meson-7ce29e1eda0425205770b9952aa476126d73e7d2.tar.bz2
Relax restrictions on detecting boost dependency
This does two things: * allows the library files to be symlinks * searches `lib` and `lib64` in `BOOST_ROOT` even if it finds lib directories from the compiler The first condition is needed for the homebrew on macOS because boost and boost python are provided in seperate packages and are put together in /usr/local/lib with symlinks to the library files. The both conditions are needed for high performace computing environments where dependencies are often provided in nonstandard directories with symlinks A test case was added which looks for boost libraries in seperate directories which have been symlinked to BOOST_ROOT/lib
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/dependencies/boost.py20
1 files changed, 10 insertions, 10 deletions
diff --git a/mesonbuild/dependencies/boost.py b/mesonbuild/dependencies/boost.py
index 4e5af90..6b594f8 100644
--- a/mesonbuild/dependencies/boost.py
+++ b/mesonbuild/dependencies/boost.py
@@ -541,11 +541,7 @@ class BoostDependency(SystemDependency):
system_dirs = [x for x in system_dirs if mesonlib.path_is_in_root(x, root)]
system_dirs = list(mesonlib.OrderedSet(system_dirs))
- if system_dirs:
- return system_dirs
-
- # No system include paths were found --> fall back to manually looking
- # for library dirs in root
+ # In addition to the system include paths, also look in "lib"
dirs = [] # type: T.List[Path]
subdirs = [] # type: T.List[Path]
for i in root.iterdir():
@@ -561,7 +557,7 @@ class BoostDependency(SystemDependency):
# Filter out paths that don't match the target arch to avoid finding
# the wrong libraries. See https://github.com/mesonbuild/meson/issues/7110
if not self.arch:
- return dirs + subdirs
+ return system_dirs + dirs + subdirs
arch_list_32 = ['32', 'i386']
arch_list_64 = ['64']
@@ -615,15 +611,19 @@ class BoostDependency(SystemDependency):
return libs
def detect_libraries(self, libdir: Path) -> T.List[BoostLibraryFile]:
- libs = [] # type: T.List[BoostLibraryFile]
+ libs = [] # type: T.List[Path]
for i in libdir.iterdir():
- if not i.is_file() or i.is_symlink():
+ if not i.is_file():
continue
if not any([i.name.startswith(x) for x in ['libboost_', 'boost_']]):
continue
- libs += [BoostLibraryFile(i)]
- return [x for x in libs if x.is_boost()] # Filter out no boost libraries
+ libs += [i.resolve()]
+
+ # Remove duplicate libraries caused by resolving symlinks
+ blibs = [BoostLibraryFile(i) for i in set(libs)] # type: T.List[BoostLibraryFile]
+
+ return [x for x in blibs if x.is_boost()] # Filter out no boost libraries
def detect_split_root(self, inc_dir: Path, lib_dir: Path) -> None:
boost_inc_dir = None