From 1c60c7ac4cba9b947696f795dc16c8761f6bce38 Mon Sep 17 00:00:00 2001 From: Ronald Oussoren Date: Fri, 25 Jan 2013 17:55:39 +0100 Subject: [PATCH] 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 --- Misc/NEWS | 3 +++ Modules/posixmodule.c | 7 ++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS index 1f6875de42..3a4a6cc179 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -181,6 +181,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 #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 index 21a6739d21..d2742a0ee1 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -441,9 +441,10 @@ _PyVerify_fd_dup2(int fd1, int fd2) #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 static char **environ; @@ -463,7 +464,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 -- 2.50.1