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 <biannm@cn.fujitsu.com>

Index: ldb-1.1.26/buildtools/wafsamba/samba_bundled.py
===================================================================
--- ldb-1.1.26.orig/buildtools/wafsamba/samba_bundled.py
+++ ldb-1.1.26/buildtools/wafsamba/samba_bundled.py
@@ -2,6 +2,7 @@
 
 import sys
 import Build, Options, Logs
+import imp, os
 from Configure import conf
 from samba_utils import TO_LIST
 
@@ -230,17 +231,32 @@ def CHECK_BUNDLED_SYSTEM_PYTHON(conf, li
     # versions
     minversion = minimum_library_version(conf, libname, minversion)
 
-    try:
-        m = __import__(modulename)
-    except ImportError:
-        found = False
-    else:
+    # Find module in PYTHONPATH
+    stuff = imp.find_module(modulename, [os.environ["PYTHONPATH"]])
+    if stuff:
         try:
-            version = m.__version__
-        except AttributeError:
+            m = imp.load_module(modulename, stuff[0], stuff[1], stuff[2])
+        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.' % (stuff[1]))
+                found = True
         else:
-            found = tuplize_version(version) >= tuplize_version(minversion)
+            try:
+                version = m.__version__
+            except AttributeError:
+                found = False
+            else:
+                found = tuplize_version(version) >= tuplize_version(minversion)
+        finally:
+            if stuff[0]:
+                stuff[0].close()
+    else:
+        found = False
+
     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)
