summarylogtreecommitdiffstats
path: root/0040-mingw-add-ModuleFileName-dir-to-PATH.patch
blob: c04ca93b169c419145b98cd30f9d378366a7ac70 (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
From a8c10ce1867cef6470abf110d26cfc47ed4c5e5a Mon Sep 17 00:00:00 2001
From: Ray Donnelly <mingw.android@gmail.com>
Date: Thu, 17 Jun 2021 18:51:48 +0530
Subject: [PATCH 040/N] mingw add ModuleFileName dir to PATH
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Co-authored-by: Алексей <alexey.pawlow@gmail.com>
Co-authored-by: Christoph Reiter <reiter.christoph@gmail.com>
---
 Modules/getpath.c | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/Modules/getpath.c b/Modules/getpath.c
index 3010182..c52e0df 100644
--- a/Modules/getpath.c
+++ b/Modules/getpath.c
@@ -1641,6 +1641,36 @@ calculate_path(PyCalculatePath *calculate, _PyPathConfig *pathconfig)
         return status;
     }
 
+#ifdef MS_WINDOWS
+    if (calculate->path_env) {
+        wchar_t *module_path, *norm_path;
+        // Add path of executable/dll to system path. This
+        // is so that the correct tcl??.dll and tk??.dll get used.
+        module_path = calculate->dll_path[0] ? calculate->dll_path : pathconfig->program_full_path;
+        norm_path = (wchar_t *)alloca(sizeof(wchar_t) * (wcslen(module_path) + 1));
+        if (norm_path) {
+            wchar_t *slashes, *end, *new_path;
+            wcscpy(norm_path, module_path);
+            slashes = wcschr(norm_path, L'/');
+            while (slashes) {
+                *slashes = L'\\';
+                slashes = wcschr(slashes + 1, L'/');
+            }
+            end = wcsrchr(norm_path, L'\\') ? wcsrchr(norm_path, L'\\') : norm_path + wcslen(norm_path);
+            end[1] = L'\0';
+
+            new_path = (wchar_t *)alloca(sizeof(wchar_t) * (wcslen(L"PATH=") + wcslen(calculate->path_env) + 1 + wcslen(norm_path) + 1));
+            if (new_path) {
+                wcscpy(new_path, L"PATH=");
+                wcscat(new_path, calculate->path_env);
+                wcscat(new_path, L";");
+                wcscat(new_path, norm_path);
+                _wputenv(new_path);
+            }
+        }
+    }
+#endif
+
     if ((!calculate->prefix_found || !calculate->exec_prefix_found)
         && calculate->warnings)
     {
-- 
2.32.0