[clang] [clang][python][test] Move python binding tests to lit framework (PR #142948)

Rainer Orth via cfe-commits cfe-commits at lists.llvm.org
Fri Jun 6 05:27:26 PDT 2025


================
@@ -0,0 +1,22 @@
+def is_libclang_loadable():
+    try:
+        sys.path.append(os.path.join(config.clang_src_dir, "bindings/python"))
+        from clang.cindex import Config
+        conf = Config()
+        Config.set_library_path(config.clang_lib_dir)
+        conf.lib
+        return True
+    except Exception as e:
+        # Benign error modes.
+        if "wrong ELF class: ELFCLASS32" in str(e):
+            return False
+        elif "No such file or directory" in str(e):
+            return False
+        # Unknown error modes.
+        else:
+            return True
----------------
rorth wrote:

The intent (and it worked for me) is as follows:

- If `libclang.so` cannot be loaded, this can be for two reasons so far:
  - In a 32-bit build on a 64-bit system, the resulting 32-bit `libclang.so` cannot be loaded into the system's 64-bit `python`.  This is as expected, nothing to be done about that, thus the lib is truely considered unloadable.
  - If `libclang.so` is missing completely, this must be because building it has been disabled somehow (probably with `-DLLVM_ENABLE_PIC=OFF`.  Again, this is intentional and nothing to be done.
- However, in other cases there may well be a bug lurking here.  Consider (just for the sake of argument) a `libclang.so` matching `python`'s ELF class, but built with missing dependencies so it's not self-contained and cannot be loaded.  This is simply a bug that could/should be fixed.  Therefore, I return `True` for unknown/unhandled errors, which lets the test to `FAIL`, forcing investigation.  The failure may be benign yet not currently handled, or there may be a real bug that needs fixing.

If I always return `False` on a failure to load `libclang.so`, such bugs would go unnoticed.


https://github.com/llvm/llvm-project/pull/142948


More information about the cfe-commits mailing list