diff --git a/configure.ac b/configure.ac index 7b20e11c..20d41a70 100644 --- a/configure.ac +++ b/configure.ac @@ -491,6 +491,10 @@ case $host_os in ;; esac +# As a GNU extension, glibc declares environ in unistd.h, which is one of +# the AC_INCLUDES_DEFAULT. +AC_CHECK_DECLS([environ]) + dnl ********************************** dnl *** va_copy checks (from GLib) *** dnl ********************************** diff --git a/dbus/dbus-spawn.c b/dbus/dbus-spawn.c index df6eafd9..0be8800c 100644 --- a/dbus/dbus-spawn.c +++ b/dbus/dbus-spawn.c @@ -45,7 +45,12 @@ #include #endif +#if defined(__APPLE__) +# include +# define environ (*_NSGetEnviron ()) +#elif !HAVE_DECL_ENVIRON extern char **environ; +#endif /** * @addtogroup DBusInternalsUtils diff --git a/dbus/dbus-sysdeps-util.c b/dbus/dbus-sysdeps-util.c index f35c9666..44cc6a23 100644 --- a/dbus/dbus-sysdeps-util.c +++ b/dbus/dbus-sysdeps-util.c @@ -35,6 +35,8 @@ #elif (defined __APPLE__) # include # define environ (*_NSGetEnviron()) +#elif HAVE_DECL_ENVIRON && defined(HAVE_UNISTD_H) +# include #else extern char **environ; #endif diff --git a/dbus/dbus-sysdeps.c b/dbus/dbus-sysdeps.c index c58377bd..d1a96d12 100644 --- a/dbus/dbus-sysdeps.c +++ b/dbus/dbus-sysdeps.c @@ -52,6 +52,8 @@ #elif (defined __APPLE__) # include # define environ (*_NSGetEnviron()) +#elif HAVE_DECL_ENVIRON && defined(HAVE_UNISTD_H) +# include #else extern char **environ; #endif diff --git a/tools/dbus-update-activation-environment.c b/tools/dbus-update-activation-environment.c index 160ac5d0..452e5053 100644 --- a/tools/dbus-update-activation-environment.c +++ b/tools/dbus-update-activation-environment.c @@ -62,9 +62,12 @@ #ifdef DBUS_WIN /* The Windows C runtime uses a different name */ #define environ _environ +#elif defined(__APPLE__) +# include +# define environ (*_NSGetEnviron ()) +#elif HAVE_DECL_ENVIRON && defined(HAVE_UNISTD_H) +# include #else -/* apparently this is the portable way to get the entire environment... - * GNU platforms also put it in unistd.h but that's not portable */ extern char **environ; #endif