# HG changeset patch # User Raphaël Gomès # Date 1635340732 -7200 # Node ID 2ec5fbe266591d0c6ec977424b4260e39f4e3ff1 # Parent 2ce31dbde4b17aa87d33cc2148599e500fa1f829 backout: backed out changeset 67d14d4e036c Same as the previous patch, this breaks the Windows CI for some yet unknown reason. Differential Revision: https://phab.mercurial-scm.org/D11727 diff -r 2ce31dbde4b1 -r 2ec5fbe26659 mercurial/exewrapper.c --- a/mercurial/exewrapper.c Wed Oct 27 12:07:58 2021 +0200 +++ b/mercurial/exewrapper.c Wed Oct 27 15:18:52 2021 +0200 @@ -29,134 +29,6 @@ #define _countof(array) (sizeof(array) / sizeof(array[0])) #endif -#if PY_MAJOR_VERSION >= 3 - -#pragma comment(lib, "Advapi32.lib") - -/* python.org installations */ -#define CORE_PATH L"SOFTWARE\\Python\\PythonCore" - -/* Microsoft Store installations */ -#define LOOKASIDE_PATH \ - L"SOFTWARE\\Microsoft\\AppModel\\Lookaside\\user\\Software\\Python\\" \ - L"PythonCore" - -static wchar_t *_locate_python_for_key(HKEY root, LPCWSTR subkey, size_t *size) -{ - wchar_t installPathKey[512]; - wchar_t *executable = NULL; - DWORD type; - DWORD sz = 0; - HKEY ip_key; - LSTATUS status; - - _snwprintf_s(installPathKey, sizeof(installPathKey), _TRUNCATE, - L"%ls\\%d.%d\\InstallPath", subkey, PY_MAJOR_VERSION, - PY_MINOR_VERSION); - - status = - RegOpenKeyExW(root, installPathKey, 0, KEY_QUERY_VALUE, &ip_key); - - if (status != ERROR_SUCCESS) - return NULL; - - status = RegQueryValueExW(ip_key, L"ExecutablePath", NULL, &type, - (LPBYTE)executable, &sz); - if (status == ERROR_SUCCESS) { - /* Allocate extra space so path\to\python.exe can be converted - * to path\to\python39.dll + NUL. - */ - *size = sz + sizeof(_T(HGPYTHONLIB ".dll")) + sizeof(wchar_t); - executable = malloc(*size); - - if (executable) { - status = - RegQueryValueExW(ip_key, L"ExecutablePath", NULL, - &type, (LPBYTE)executable, &sz); - - if (status != ERROR_SUCCESS) { - free(executable); - executable = NULL; - } else { - /* Not all values are stored NUL terminated */ - executable[sz] = L'\0'; - } - } - } - - RegCloseKey(ip_key); - return executable; -} - -static HMODULE load_system_py3(void) -{ - wchar_t *subkeys[] = {CORE_PATH, LOOKASIDE_PATH}; - HKEY roots[] = {HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER}; - - /* Give priority to python.org installs, because MS Store installs can - * break with user profile corruption, and also use some NTFS feature - * that MSYS doesn't understand. - */ - for (int s = 0; s < _countof(subkeys); s++) { - for (int r = 0; r < _countof(roots); r++) { - size_t size = 0; - wchar_t *py = - _locate_python_for_key(roots[r], subkeys[s], &size); - wchar_t *cut = NULL; - HMODULE pydll; - - if (!py) { - continue; - } - - /* Cut off the python executable component */ - cut = wcsrchr(py, L'\\'); - if (cut == NULL) { - free(py); - continue; - } - *cut = 0; - - wcscat_s(py, size, _T("\\" HGPYTHONLIB ".dll")); - - pydll = LoadLibrary(py); - - /* Also load python3.dll, so we don't pick up a random - * one on PATH. We don't search {sys.prefix}\DLLs like - * python.exe because this is commented as "not been a - * normal install layout for a while", and don't search - * LOAD_LIBRARY_SEARCH_APPLICATION_DIR because it's not - * clear what the use case is. - */ - if (pydll != NULL) { - HANDLE py3dll = NULL; - - *cut = 0; - wcscat_s(py, size, L"\\python3.dll"); - - py3dll = LoadLibrary(py); - if (py3dll == NULL) { - const char *err; - err = "failed to load python3.dll " - "for " HGPYTHONLIB ".dll"; - fprintf(stderr, "abort: %s (0x%X)\n", - err, GetLastError()); - exit(255); - } - } - - free(py); - - if (pydll != NULL) { - return pydll; - } - } - } - - return NULL; -} -#endif - static TCHAR pyscript[MAX_PATH + 10]; static TCHAR pyhome[MAX_PATH + 10]; static TCHAR pydllfile[MAX_PATH + 10]; @@ -236,12 +108,6 @@ Py_SetPythonHome(pyhome); } -#if PY_MAJOR_VERSION >= 3 - if (pydll == NULL) { - pydll = load_system_py3(); - } -#endif - if (pydll == NULL) { pydll = LoadLibrary(_T(HGPYTHONLIB) _T(".dll")); if (pydll == NULL) {