Have Autoconf test for _NSGetEnviron presence
authorHerbert Valerio Riedel <hvr@gnu.org>
Sun, 31 Jan 2016 15:54:04 +0000 (16:54 +0100)
committerHerbert Valerio Riedel <hvr@gnu.org>
Sun, 31 Jan 2016 15:56:15 +0000 (16:56 +0100)
System/Posix/Env.hsc
System/Posix/Env/ByteString.hsc
configure.ac

index 6412bae..7d5f04c 100644 (file)
@@ -78,9 +78,8 @@ getEnvironmentPrim = do
       mapM peekFilePath arr
 
 getCEnviron :: IO (Ptr CString)
-
-#if darwin_HOST_OS
--- You should not access _environ directly on Darwin in a bundle/shared library.
+#if HAVE__NSGETENVIRON
+-- You should not access @char **environ@ directly on Darwin in a bundle/shared library.
 -- See #2458 and http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man7/environ.7.html
 getCEnviron = nsGetEnviron >>= peek
 
@@ -88,7 +87,6 @@ foreign import ccall unsafe "_NSGetEnviron"
    nsGetEnviron :: IO (Ptr (Ptr CString))
 #else
 getCEnviron = peek c_environ_p
-
 foreign import ccall unsafe "&environ"
    c_environ_p :: Ptr (Ptr CString)
 #endif
index 57b03aa..c6c374c 100644 (file)
@@ -69,8 +69,8 @@ getEnvironmentPrim = do
   mapM B.packCString arr
 
 getCEnviron :: IO (Ptr CString)
-#if darwin_HOST_OS
--- You should not access _environ directly on Darwin in a bundle/shared library.
+#if HAVE__NSGETENVIRON
+-- You should not access @char **environ@ directly on Darwin in a bundle/shared library.
 -- See #2458 and http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man7/environ.7.html
 getCEnviron = nsGetEnviron >>= peek
 
index 5b6eb7c..fdc27e4 100644 (file)
@@ -40,6 +40,10 @@ AC_CHECK_FUNCS([readdir_r])
 dnl not available on android so check for it
 AC_CHECK_FUNCS([telldir seekdir])
 
+dnl When available, _NSGetEnviron() (defined in <crt_externs.h>) is
+dnl the preferred way to access environ(7)
+AC_CHECK_FUNCS([_NSGetEnviron])
+
 dnl This is e.g. available as a GNU extension in glibc 2.11+
 AC_CHECK_DECLS([execvpe])
 AC_CHECK_FUNCS([execvpe])