aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/dependencies/boost.py44
1 files changed, 21 insertions, 23 deletions
diff --git a/mesonbuild/dependencies/boost.py b/mesonbuild/dependencies/boost.py
index 26ec6fd..5935b61 100644
--- a/mesonbuild/dependencies/boost.py
+++ b/mesonbuild/dependencies/boost.py
@@ -382,7 +382,7 @@ class BoostDependency(SystemDependency):
# Finally, look for paths from .pc files and from searching the filesystem
self.detect_roots()
- def check_and_set_roots(self, roots: T.List[Path]) -> None:
+ def check_and_set_roots(self, roots: T.List[Path], use_system: bool) -> None:
roots = list(mesonlib.OrderedSet(roots))
for j in roots:
# 1. Look for the boost headers (boost/version.hpp)
@@ -394,7 +394,7 @@ class BoostDependency(SystemDependency):
if not inc_dirs:
continue
- lib_dirs = self.detect_lib_dirs(j)
+ lib_dirs = self.detect_lib_dirs(j, use_system)
self.is_found = self.run_check(inc_dirs, lib_dirs)
if self.is_found:
self.boost_root = j
@@ -436,7 +436,7 @@ class BoostDependency(SystemDependency):
if paths and any([not x.is_absolute() for x in paths]):
raise DependencyException('boost_root path given in machine file must be absolute')
- self.check_and_set_roots(paths)
+ self.check_and_set_roots(paths, use_system=False)
def run_check(self, inc_dirs: T.List[BoostIncludeDir], lib_dirs: T.List[Path]) -> bool:
mlog.debug(' - potential library dirs: {}'.format([x.as_posix() for x in lib_dirs]))
@@ -532,16 +532,22 @@ class BoostDependency(SystemDependency):
candidates = [x for x in candidates if x.exists()]
return [self._include_dir_from_version_header(x) for x in candidates]
- def detect_lib_dirs(self, root: Path) -> T.List[Path]:
+ def detect_lib_dirs(self, root: Path, use_system: bool) -> T.List[Path]:
# First check the system include paths. Only consider those within the
# given root path
- system_dirs_t = self.clib_compiler.get_library_dirs(self.env)
- system_dirs = [Path(x) for x in system_dirs_t]
- system_dirs = [x.resolve() for x in system_dirs if x.exists()]
- system_dirs = [x for x in system_dirs if mesonlib.path_is_in_root(x, root)]
- system_dirs = list(mesonlib.OrderedSet(system_dirs))
- # In addition to the system include paths, also look in "lib"
+ if use_system:
+ system_dirs_t = self.clib_compiler.get_library_dirs(self.env)
+ system_dirs = [Path(x) for x in system_dirs_t]
+ system_dirs = [x.resolve() for x in system_dirs if x.exists()]
+ 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
dirs = [] # type: T.List[Path]
subdirs = [] # type: T.List[Path]
for i in root.iterdir():
@@ -557,7 +563,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 system_dirs + dirs + subdirs
+ return dirs + subdirs
arch_list_32 = ['32', 'i386']
arch_list_64 = ['64']
@@ -611,19 +617,16 @@ class BoostDependency(SystemDependency):
return libs
def detect_libraries(self, libdir: Path) -> T.List[BoostLibraryFile]:
- libs = set() # type: T.Set[Path]
+ libs = set() # type: T.Set[BoostLibraryFile]
for i in libdir.iterdir():
if not i.is_file():
continue
if not any([i.name.startswith(x) for x in ['libboost_', 'boost_']]):
continue
- libs.add(i.resolve())
+ libs.add(BoostLibraryFile(i.resolve()))
- # Remove duplicate libraries caused by resolving symlinks
- blibs = [BoostLibraryFile(i) for i in libs] # type: T.List[BoostLibraryFile]
-
- return [x for x in blibs if x.is_boost()] # Filter out no boost libraries
+ return [x for x in libs 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
@@ -679,11 +682,6 @@ class BoostDependency(SystemDependency):
else:
tmp = [] # type: T.List[Path]
- # Homebrew
- brew_boost = Path('/usr/local/Cellar/boost')
- if brew_boost.is_dir():
- tmp += [x for x in brew_boost.iterdir()]
-
# Add some default system paths
tmp += [Path('/opt/local')]
tmp += [Path('/usr/local/opt/boost')]
@@ -695,7 +693,7 @@ class BoostDependency(SystemDependency):
tmp = [x.resolve() for x in tmp]
roots += tmp
- self.check_and_set_roots(roots)
+ self.check_and_set_roots(roots, use_system=True)
def log_details(self) -> str:
res = ''