]> granicus.if.org Git - python/commitdiff
Issue #1602133: 'environ' is not really available with shared libraries on OSX
authorRonald Oussoren <ronaldoussoren@mac.com>
Fri, 25 Jan 2013 16:57:13 +0000 (17:57 +0100)
committerRonald Oussoren <ronaldoussoren@mac.com>
Fri, 25 Jan 2013 16:57:13 +0000 (17:57 +0100)
There already was a workaround for this for framework builds on OSX,
this changeset enables the same workaround for shared libraries.

Closes #1602133

Misc/NEWS
Modules/posixmodule.c

index da71cd610fe1bb92e359b84806ea98eb33dffd3f..e19c06948da5ee00a83db6b09209a736a8548439 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -197,6 +197,9 @@ Core and Builtins
 - Issue #13521: dict.setdefault() now does only one lookup for the given key,
   making it "atomic" for many purposes.  Patch by Filip GruszczyƄski.
 
+- Issue #1602133: on Mac OS X a shared library build (``--enable-shared``)
+  now fills the ``os.environ`` variable correctly.
+
 - Issue #14471: Fix a possible buffer overrun in the winreg module.
 
 Library
index e7e530589cffd54ff82d623c16265347050c8ea3..4179c0ef0746500f04f11c94a84c7d635b442c62 100644 (file)
@@ -501,9 +501,10 @@ win32_get_reparse_tag(HANDLE reparse_point_handle, ULONG *reparse_tag)
 #endif /* MS_WINDOWS */
 
 /* Return a dictionary corresponding to the POSIX environment table */
-#ifdef WITH_NEXT_FRAMEWORK
+#if defined(WITH_NEXT_FRAMEWORK) || (defined(__APPLE__) && defined(Py_ENABLE_SHARED))
 /* On Darwin/MacOSX a shared library or framework has no access to
-** environ directly, we must obtain it with _NSGetEnviron().
+** environ directly, we must obtain it with _NSGetEnviron(). See also
+** man environ(7).
 */
 #include <crt_externs.h>
 static char **environ;
@@ -528,7 +529,7 @@ convertenviron(void)
     d = PyDict_New();
     if (d == NULL)
         return NULL;
-#ifdef WITH_NEXT_FRAMEWORK
+#if defined(WITH_NEXT_FRAMEWORK) || (defined(__APPLE__) && defined(Py_ENABLE_SHARED))
     if (environ == NULL)
         environ = *_NSGetEnviron();
 #endif