Read about our upcoming Code of Conduct on this issue

Commit c2b19cbf authored by Raphaël Gomès's avatar Raphaël Gomès
Browse files

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
parent 2ce31dbde4b1
......@@ -29,134 +29,6 @@ int strcpy_s(char *d, size_t n, const char *s)
#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 @@ int _tmain(int argc, TCHAR *argv[])
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) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment