[Python-checkins] cpython (2.7): Issue #1602133: 'environ' is not really available with shared libraries on OSX

ronald.oussoren python-checkins at python.org
Fri Jan 25 18:03:22 CET 2013


http://hg.python.org/cpython/rev/864b9836dae6
changeset:   81729:864b9836dae6
branch:      2.7
parent:      81725:11a18263ceb7
user:        Ronald Oussoren <ronaldoussoren at mac.com>
date:        Fri Jan 25 17:55:39 2013 +0100
summary:
  Issue #1602133: 'environ' is not really available with shared libraries on OSX

There already was a workaround for this for framework builds on OSX,
this changeset enables the same workaround for shared libraries.

Closes #1602133

files:
  Misc/NEWS             |  3 +++
  Modules/posixmodule.c |  7 ++++---
  2 files changed, 7 insertions(+), 3 deletions(-)


diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -181,6 +181,9 @@
 - 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 #10538: When using the "s*" code with PyArg_ParseTuple() to fill a
   Py_buffer structure with data from an object supporting only the old
   PyBuffer interface, a reference to the source objects is now properly added
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -441,9 +441,10 @@
 #endif
 
 /* 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;
@@ -463,7 +464,7 @@
     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

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list