add boolean parameter use_system for searching boost

This boolean parameter is added to check_and_set_roots() and detect_lib_dirs()
when true it will first search the compiler library directories before checking
the standard lib directories. This is set to false when using BOOST_ROOT and
set to true when useing other system directories like /usr/local

Also simplify using a set to remove duplicate lib files

Also remove the part where you search the Cellar in homebrew, this is
unnescessary now that symlinks can be followed it should find boost
when searching /usr/local so no need to search the Cellar
pull/9063/head
Kevin Meagher 3 years ago committed by Daniel Mensinger
parent f781c30700
commit 3c3fa0a12c
  1. 44
      mesonbuild/dependencies/boost.py

@ -382,7 +382,7 @@ class BoostDependency(SystemDependency):
# Finally, look for paths from .pc files and from searching the filesystem # Finally, look for paths from .pc files and from searching the filesystem
self.detect_roots() 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)) roots = list(mesonlib.OrderedSet(roots))
for j in roots: for j in roots:
# 1. Look for the boost headers (boost/version.hpp) # 1. Look for the boost headers (boost/version.hpp)
@ -394,7 +394,7 @@ class BoostDependency(SystemDependency):
if not inc_dirs: if not inc_dirs:
continue 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) self.is_found = self.run_check(inc_dirs, lib_dirs)
if self.is_found: if self.is_found:
self.boost_root = j self.boost_root = j
@ -436,7 +436,7 @@ class BoostDependency(SystemDependency):
if paths and any([not x.is_absolute() for x in paths]): if paths and any([not x.is_absolute() for x in paths]):
raise DependencyException('boost_root path given in machine file must be absolute') 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: 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])) 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()] candidates = [x for x in candidates if x.exists()]
return [self._include_dir_from_version_header(x) for x in candidates] 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 # First check the system include paths. Only consider those within the
# given root path # 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] dirs = [] # type: T.List[Path]
subdirs = [] # type: T.List[Path] subdirs = [] # type: T.List[Path]
for i in root.iterdir(): 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 # Filter out paths that don't match the target arch to avoid finding
# the wrong libraries. See https://github.com/mesonbuild/meson/issues/7110 # the wrong libraries. See https://github.com/mesonbuild/meson/issues/7110
if not self.arch: if not self.arch:
return system_dirs + dirs + subdirs return dirs + subdirs
arch_list_32 = ['32', 'i386'] arch_list_32 = ['32', 'i386']
arch_list_64 = ['64'] arch_list_64 = ['64']
@ -611,19 +617,16 @@ class BoostDependency(SystemDependency):
return libs return libs
def detect_libraries(self, libdir: Path) -> T.List[BoostLibraryFile]: 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(): for i in libdir.iterdir():
if not i.is_file(): if not i.is_file():
continue continue
if not any([i.name.startswith(x) for x in ['libboost_', 'boost_']]): if not any([i.name.startswith(x) for x in ['libboost_', 'boost_']]):
continue continue
libs.add(i.resolve()) libs.add(BoostLibraryFile(i.resolve()))
# Remove duplicate libraries caused by resolving symlinks return [x for x in libs if x.is_boost()] # Filter out no boost libraries
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
def detect_split_root(self, inc_dir: Path, lib_dir: Path) -> None: def detect_split_root(self, inc_dir: Path, lib_dir: Path) -> None:
boost_inc_dir = None boost_inc_dir = None
@ -679,11 +682,6 @@ class BoostDependency(SystemDependency):
else: else:
tmp = [] # type: T.List[Path] 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 # Add some default system paths
tmp += [Path('/opt/local')] tmp += [Path('/opt/local')]
tmp += [Path('/usr/local/opt/boost')] tmp += [Path('/usr/local/opt/boost')]
@ -695,7 +693,7 @@ class BoostDependency(SystemDependency):
tmp = [x.resolve() for x in tmp] tmp = [x.resolve() for x in tmp]
roots += tmp roots += tmp
self.check_and_set_roots(roots) self.check_and_set_roots(roots, use_system=True)
def log_details(self) -> str: def log_details(self) -> str:
res = '' res = ''

Loading…
Cancel
Save