]> granicus.if.org Git - python/commitdiff
bpo-38234: Fix test_embed.test_init_setpath_config() on FreeBSD (GH-16406)
authorVictor Stinner <vstinner@redhat.com>
Thu, 26 Sep 2019 02:01:49 +0000 (04:01 +0200)
committerGitHub <noreply@github.com>
Thu, 26 Sep 2019 02:01:49 +0000 (04:01 +0200)
Explicitly preinitializes with a Python preconfiguration to avoid
Py_SetPath() implicit preinitialization with a compat
preconfiguration.

Fix also test_init_setpath() and test_init_setpythonhome() on macOS:
use self.test_exe as the executable (and base_executable), rather
than shutil.which('python3').

Lib/test/test_embed.py
Programs/_testembed.c

index 8855e907c253706cf4cda17839a85d1a524aa9f9..92b5136db7ea9af2f5a422dc104e51c10169a7c1 100644 (file)
@@ -15,6 +15,7 @@ import textwrap
 
 
 MS_WINDOWS = (os.name == 'nt')
+MACOS = (sys.platform == 'darwin')
 
 PYMEM_ALLOCATOR_NOT_SET = 0
 PYMEM_ALLOCATOR_DEBUG = 2
@@ -1011,7 +1012,10 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
             executable = self.test_exe
         else:
             program_name = 'python3'
-            executable = shutil.which(program_name) or ''
+            if MACOS:
+                executable = self.test_exe
+            else:
+                executable = shutil.which(program_name) or ''
         config.update({
             'program_name': program_name,
             'base_executable': executable,
@@ -1054,13 +1058,8 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
             'executable': 'conf_executable',
         }
         env = {'TESTPATH': os.path.pathsep.join(paths)}
-        # Py_SetPath() preinitialized Python using the compat API,
-        # so we need preconfig_api=API_COMPAT.
         self.check_all_configs("test_init_setpath_config", config,
-                               api=API_PYTHON,
-                               preconfig_api=API_COMPAT,
-                               env=env,
-                               ignore_stderr=True)
+                               api=API_PYTHON, env=env, ignore_stderr=True)
 
     def module_search_paths(self, prefix=None, exec_prefix=None):
         config = self._get_expected_config()
index 14fca24f318f018e16fcf3c83ad154476e7e8a9a..83c266b885af18c9dceae88c28f015bafe414e0d 100644 (file)
@@ -1448,6 +1448,17 @@ static int test_init_setpath(void)
 
 static int test_init_setpath_config(void)
 {
+    PyStatus status;
+    PyPreConfig preconfig;
+    PyPreConfig_InitPythonConfig(&preconfig);
+
+    /* Explicitly preinitializes with Python preconfiguration to avoid
+      Py_SetPath() implicit preinitialization with compat preconfiguration. */
+    status = Py_PreInitialize(&preconfig);
+    if (PyStatus_Exception(status)) {
+        Py_ExitStatusException(status);
+    }
+
     char *env = getenv("TESTPATH");
     if (!env) {
         fprintf(stderr, "missing TESTPATH env var\n");
@@ -1462,7 +1473,6 @@ static int test_init_setpath_config(void)
     PyMem_RawFree(path);
     putenv("TESTPATH=");
 
-    PyStatus status;
     PyConfig config;
 
     status = PyConfig_InitPythonConfig(&config);