From cc0576405803bcae45ee353c4333c449cead9207 Mon Sep 17 00:00:00 2001 From: Changqing Li Date: Tue, 25 Jun 2019 14:25:08 +0800 Subject: [PATCH] do not import target module while cross compile Some modules such as dynamic library maybe cann't be imported while cross compile, we just check whether does the module exist. Signed-off-by: Bian Naimeng update to version 4.10.5, and switch to python3 Signed-off-by: Changqing Li --- buildtools/wafsamba/samba_bundled.py | 27 +++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/buildtools/wafsamba/samba_bundled.py b/buildtools/wafsamba/samba_bundled.py index 60ce7da..5468a36 100644 --- a/buildtools/wafsamba/samba_bundled.py +++ b/buildtools/wafsamba/samba_bundled.py @@ -4,6 +4,7 @@ import sys from waflib import Build, Options, Logs from waflib.Configure import conf from wafsamba import samba_utils +import importlib.util, os def PRIVATE_NAME(bld, name, private_extension, private_library): '''possibly rename a library to include a bundled extension''' @@ -249,17 +250,27 @@ def CHECK_BUNDLED_SYSTEM_PYTHON(conf, libname, modulename, minversion='0.0.0'): # versions minversion = minimum_library_version(conf, libname, minversion) - try: - m = __import__(modulename) - except ImportError: - found = False - else: + # Find module in PYTHONPATH + spec = importlib.util._find_spec_from_path(modulename, [os.environ["PYTHONPATH"]]) + if spec: try: - version = m.__version__ - except AttributeError: + module = importlib.util.module_from_spec(spec) + spec.loader.load_module(module) + except ImportError: found = False + + if conf.env.CROSS_COMPILE: + # Some modules such as dynamic library maybe cann't be imported + # while cross compile, we just check whether the module exist + Logs.warn('Cross module[%s] has been found, but can not be loaded.' % (spec.name)) + found = True else: - found = tuplize_version(version) >= tuplize_version(minversion) + try: + version = module.__version__ + except AttributeError: + found = False + else: + found = tuplize_version(version) >= tuplize_version(minversion) if not found and not conf.LIB_MAY_BE_BUNDLED(libname): Logs.error('ERROR: Python module %s of version %s not found, and bundling disabled' % (libname, minversion)) sys.exit(1) -- 2.7.4