summaryrefslogtreecommitdiff
blob: 0b32d8dcfa4d29dd45ae313aed23f495beff1171 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
From fb6f33082a42202c55dc3d5cbc984cc9b6b01629 Mon Sep 17 00:00:00 2001
From: Emmanuele Bassi <ebassi@gnome.org>
Date: Mon, 25 Dec 2023 00:06:53 +0000
Subject: [PATCH] tests: Do not use PYTHONPATH to import giscanner

The PYTHONPATH environment variable will prepend its contents to
sys.path; since giscanner contains an ast sub-module, we are going to
cause a collision with Python's own ast module. In some cases, Python
3.12's distutils compatibility shim will try to import Python's ast,
which will end up trying to import giscanner.ast instead.

Instead of prepending the giscanner build directory, we can append it,
and keep the current project layout.

See: #429
---
 tests/scanner/meson.build   | 2 +-
 tests/warn/meson.build      | 5 +----
 tests/warn/warningtester.py | 9 +++++++++
 3 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/tests/scanner/meson.build b/tests/scanner/meson.build
index e77c2de03..c92ce6474 100644
--- a/tests/scanner/meson.build
+++ b/tests/scanner/meson.build
@@ -1,7 +1,7 @@
 scanner_test_env = environment()
 scanner_test_env.prepend('PYTHONPATH', test_env_common_pypath)
 if test_env_common_path.length() > 0
-    scanner_test_env.prepend('PATH', test_env_common_path)
+  scanner_test_env.prepend('PATH', test_env_common_path)
 endif
 
 scanner_test_files = [
diff --git a/tests/warn/meson.build b/tests/warn/meson.build
index 9641787f7..c57268081 100644
--- a/tests/warn/meson.build
+++ b/tests/warn/meson.build
@@ -23,10 +23,7 @@ warn_tests = [
 warn_test_env = environment()
 warn_test_env.set('UNINSTALLED_INTROSPECTION_SRCDIR', source_root)
 warn_test_env.set('TOP_BUILDDIR', build_root)
-warn_test_env.set(
-  'PYTHONPATH',
-  build_root,
-  join_paths(build_root, 'giscanner'))
+warn_test_env.set('GISCANNER_DIR', build_root, build_root / 'giscanner')
 
 # FIXME: Glib as a subproject (used on Windows mostly).
 if glib_dep.type_name() == 'pkgconfig'
diff --git a/tests/warn/warningtester.py b/tests/warn/warningtester.py
index acb271f23..cce2827b1 100644
--- a/tests/warn/warningtester.py
+++ b/tests/warn/warningtester.py
@@ -11,6 +11,15 @@ sys.path.insert(0, path)
 builtins.__dict__['DATADIR'] = path
 builtins.__dict__['GIR_DIR'] = path
 
+# We cannot use PYTHONPATH, because it would prepend the giscanner
+# root, and we have an "ast" module that conflicts with Python's
+# own ast. In some cases, Python's distutils ends up importing ast,
+# and that will end up trying to import giscanner.ast
+path = os.getenv('GISCANNER_DIR', None)
+assert path is not None
+for p in path.split(os.pathsep):
+    sys.path.append(p)
+
 from giscanner.annotationparser import GtkDocCommentBlockParser
 from giscanner.ast import Include, Namespace
 from giscanner.introspectablepass import IntrospectablePass
-- 
GitLab