From 776f899e78e88600f34176ef4088c32208802777 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Sun, 6 Sep 2015 18:38:27 +0300 Subject: Made boost on windows kinda work. --- dependencies.py | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 53 insertions(+), 3 deletions(-) (limited to 'dependencies.py') diff --git a/dependencies.py b/dependencies.py index d47dac8..b3ca400 100644 --- a/dependencies.py +++ b/dependencies.py @@ -393,6 +393,7 @@ class BoostDependency(Dependency): def __init__(self, environment, kwargs): Dependency.__init__(self) self.name = 'boost' + self.libdir = '' try: self.boost_root = os.environ['BOOST_ROOT'] if not os.path.isabs(self.boost_root): @@ -400,9 +401,14 @@ class BoostDependency(Dependency): except KeyError: self.boost_root = None if self.boost_root is None: - self.incdir = '/usr/include/boost' + if mesonlib.is_windows(): + self.boost_root = self.detect_win_root() + self.incdir = os.path.join(self.boost_root, 'boost') + else: + self.incdir = '/usr/include/boost' else: self.incdir = os.path.join(self.boost_root, 'include/boost') + mlog.debug('Boost library root dir is', self.boost_root) self.src_modules = {} self.lib_modules = {} self.lib_modules_mt = {} @@ -422,10 +428,20 @@ class BoostDependency(Dependency): else: mlog.log("Dependency Boost (%s) found:" % module_str, mlog.red('NO')) + def detect_win_root(self): + globtext = 'c:\\local\\boost_*' + files = glob.glob(globtext) + if len(files) > 0: + return files[0] + return 'C:\\' + def get_compile_args(self): args = [] if self.boost_root is not None: - args.append('-I' + os.path.join(self.boost_root, 'include')) + if mesonlib.is_windows(): + args.append('-I' + self.boost_root) + else: + args.append('-I' + os.path.join(self.boost_root, 'include')) return args def get_requested(self, kwargs): @@ -472,6 +488,28 @@ class BoostDependency(Dependency): self.src_modules[os.path.split(entry)[-1]] = True def detect_lib_modules(self): + if mesonlib.is_windows(): + return self.detect_lib_modules_win() + return self.detect_lib_modules_nix() + + def detect_lib_modules_win(self): + if mesonlib.is_32bit(): + gl = 'lib32*' + else: + gl = 'lib64*' + libdir = glob.glob(os.path.join(self.boost_root, gl)) + if len(libdir) == 0: + return + libdir = libdir[0] + self.libdir = libdir + globber = 'boost_*-gd-*.lib' # FIXME + for entry in glob.glob(os.path.join(libdir, globber)): + (_, fname) = os.path.split(entry) + base = fname.split('_', 1)[1] + modname = base.split('-', 1)[0] + self.lib_modules_mt[modname] = fname + + def detect_lib_modules_nix(self): globber = 'libboost_*.so' # FIXME, make platform independent. if self.boost_root is None: libdirs = mesonlib.get_library_dirs() @@ -488,12 +526,24 @@ class BoostDependency(Dependency): else: self.lib_modules[name] = True - def get_link_args(self): + def get_win_link_args(self): args = [] if self.boost_root: # FIXME, these are in gcc format, not msvc. # On the other hand, so are the args that # pkg-config returns. + args.append('/LIBPATH:' + self.libdir) + for module in self.requested_modules: + module = BoostDependency.name2lib.get(module, module) + if module in self.lib_modules_mt: + args.append(self.lib_modules_mt[module]) + return args + + def get_link_args(self): + if mesonlib.is_windows(): + return self.get_win_link_args() + args = [] + if self.boost_root: args.append('-L' + os.path.join(self.boost_root, 'lib')) for module in self.requested_modules: module = BoostDependency.name2lib.get(module, module) -- cgit v1.1 From b3b5f507ee5da271fb92c4b6f13fc5267d432139 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Diago=20G=C3=B3mez?= Date: Mon, 7 Sep 2015 23:52:05 +0700 Subject: BoostDependency dylib detection added. --- dependencies.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'dependencies.py') diff --git a/dependencies.py b/dependencies.py index b3ca400..ca94083 100644 --- a/dependencies.py +++ b/dependencies.py @@ -510,7 +510,14 @@ class BoostDependency(Dependency): self.lib_modules_mt[modname] = fname def detect_lib_modules_nix(self): - globber = 'libboost_*.so' # FIXME, make platform independent. + import platform + libsuffix = None + if platform.system() == 'Darwin': + libsuffix = 'dylib' + elif platform.system() == 'Linux': + libsuffix = 'so' + + globber = 'libboost_*.{}'.format(libsuffix) if self.boost_root is None: libdirs = mesonlib.get_library_dirs() else: -- cgit v1.1 From 89020de121d761a18d7ca0cc8d8fd082a0865bfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Diago=20G=C3=B3mez?= Date: Tue, 8 Sep 2015 00:34:54 +0700 Subject: Replaced check for mac osx by mesonlib.is_osx() --- dependencies.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'dependencies.py') diff --git a/dependencies.py b/dependencies.py index ca94083..fc0f219 100644 --- a/dependencies.py +++ b/dependencies.py @@ -510,11 +510,10 @@ class BoostDependency(Dependency): self.lib_modules_mt[modname] = fname def detect_lib_modules_nix(self): - import platform libsuffix = None - if platform.system() == 'Darwin': + if mesonlib.is_osx(): libsuffix = 'dylib' - elif platform.system() == 'Linux': + else: libsuffix = 'so' globber = 'libboost_*.{}'.format(libsuffix) -- cgit v1.1 From 325ed6288ba58a8a45f3d31a02ccdb17c05a9bf2 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Sat, 12 Sep 2015 13:41:01 +0300 Subject: Can leave Boost modules empty to only use the plain header libraries. Closes #263. --- dependencies.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'dependencies.py') diff --git a/dependencies.py b/dependencies.py index fc0f219..69e2613 100644 --- a/dependencies.py +++ b/dependencies.py @@ -405,9 +405,10 @@ class BoostDependency(Dependency): self.boost_root = self.detect_win_root() self.incdir = os.path.join(self.boost_root, 'boost') else: - self.incdir = '/usr/include/boost' + self.incdir = '/usr/include' else: - self.incdir = os.path.join(self.boost_root, 'include/boost') + self.incdir = os.path.join(self.boost_root, 'include') + self.boost_inc_subdir = os.path.join(self.incdir, 'boost') mlog.debug('Boost library root dir is', self.boost_root) self.src_modules = {} self.lib_modules = {} @@ -442,13 +443,12 @@ class BoostDependency(Dependency): args.append('-I' + self.boost_root) else: args.append('-I' + os.path.join(self.boost_root, 'include')) + else: + args.append('-I' + self.incdir) return args def get_requested(self, kwargs): - modules = 'modules' - if not modules in kwargs: - raise DependencyException('Boost dependency must specify "%s" keyword.' % modules) - candidates = kwargs[modules] + candidates = kwargs.get('modules', []) if isinstance(candidates, str): return [candidates] for c in candidates: @@ -469,7 +469,7 @@ class BoostDependency(Dependency): def detect_version(self): try: - ifile = open(os.path.join(self.incdir, 'version.hpp')) + ifile = open(os.path.join(self.boost_inc_subdir, 'version.hpp')) except FileNotFoundError: self.version = None return @@ -482,8 +482,8 @@ class BoostDependency(Dependency): self.version = None def detect_src_modules(self): - for entry in os.listdir(self.incdir): - entry = os.path.join(self.incdir, entry) + for entry in os.listdir(self.boost_inc_subdir): + entry = os.path.join(self.boost_inc_subdir, entry) if stat.S_ISDIR(os.stat(entry).st_mode): self.src_modules[os.path.split(entry)[-1]] = True -- cgit v1.1 From dd68c926f837c6fc5f73bc109bb85fd80fc1279a Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Sat, 12 Sep 2015 21:19:00 +0300 Subject: Boost path fix for Windows. --- dependencies.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'dependencies.py') diff --git a/dependencies.py b/dependencies.py index 69e2613..d3a82db 100644 --- a/dependencies.py +++ b/dependencies.py @@ -403,7 +403,7 @@ class BoostDependency(Dependency): if self.boost_root is None: if mesonlib.is_windows(): self.boost_root = self.detect_win_root() - self.incdir = os.path.join(self.boost_root, 'boost') + self.incdir = self.boost_root else: self.incdir = '/usr/include' else: -- cgit v1.1