+2008-02-24 Bruno Haible <bruno@clisp.org>
+
+ New module 'environ'.
+ * modules/environ: New file.
+ * lib/unistd.in.h (environ): New declaration.
+ * m4/environ.m4: New file.
+ (gt_CHECK_VAR_DECL): Moved here from m4/setenv.m4. Undefine gt_cv_var
+ after use.
+ * m4/unistd_h.m4 (gl_UNISTD_H_DEFAULTS): Initialize GNULIB_ENVIRON and
+ HAVE_DECL_ENVIRON.
+ * modules/unistd (Makefile.am): Substitute also GNULIB_ENVIRON and
+ HAVE_DECL_ENVIRON.
+ * doc/posix-functions/environ.texi: Mention module 'environ'. Remove
+ wrong claim that 'environ' is missing on some systems.
+ * modules/execute (Depends-on): Add environ.
+ * lib/execute.c (environ): Remove fallback declaration.
+ * modules/pipe (Depends-on): Add environ.
+ * lib/pipe.c (environ): Remove fallback declaration.
+ * modules/setenv (Depends-on): Add environ.
+ * lib/setenv.c (environ): Remove fallback declaration.
+ * modules/unsetenv (Depends-on): Add environ.
+ * lib/unsetenv.c (environ): Remove fallback declaration.
+ * m4/setenv.m4 (gt_CHECK_VAR_DECL): Remove macro. Moved to
+ m4/environ.m4.
+ (gl_PREREQ_SETENV): Require gl_ENVIRON instead of testing for environ.
+ (gl_PREREQ_UNSETENV): Likewise.
+
2008-02-24 Bruno Haible <bruno@clisp.org>
* doc/posix-functions/environ.texi: Document the MacOS X problem.
POSIX specification: @url{http://www.opengroup.org/susv3xsh/environ.html}
-Gnulib module: ---
+Gnulib module: environ
Portability problems fixed by Gnulib:
@itemize
-@end itemize
-
-Portability problems not fixed by Gnulib:
-@itemize
@item
-This variable is missing on some platforms:
-MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, IRIX 6.5, OSF/1 5.1, Cygwin.
+POSIX does not require this variable to be declared, and it is indeed not
+declared on some platforms:
+MacOS X 10.3, FreeBSD 6.0, NetBSD 3.0, OpenBSD 3.8, IRIX 6.5, Solaris 10.
@item
On MacOS X 10, this variable is not declared. Up to MacOS X 10.4, one can use
@smallexample
#define environ (*_NSGetEnviron())
@end smallexample
This works at least on MacOS X 10.3 and newer.
+@end itemize
+
+Portability problems not fixed by Gnulib:
+@itemize
@item
The address of this variable is not a compile-time constant on some platforms:
mingw.
/* Creation of autonomous subprocesses.
- Copyright (C) 2001-2004, 2006-2007 Free Software Foundation, Inc.
+ Copyright (C) 2001-2004, 2006-2008 Free Software Foundation, Inc.
Written by Bruno Haible <haible@clisp.cons.org>, 2001.
This program is free software: you can redistribute it and/or modify
#endif
-#if ! HAVE_ENVIRON_DECL
-extern char **environ;
-#endif
-
#ifndef STDIN_FILENO
# define STDIN_FILENO 0
#endif
/* Creation of subprocesses, communicating via pipes.
- Copyright (C) 2001-2004, 2006-2007 Free Software Foundation, Inc.
+ Copyright (C) 2001-2004, 2006-2008 Free Software Foundation, Inc.
Written by Bruno Haible <haible@clisp.cons.org>, 2001.
This program is free software: you can redistribute it and/or modify
#endif
-#if ! HAVE_ENVIRON_DECL
-extern char **environ;
-#endif
-
#ifndef STDIN_FILENO
# define STDIN_FILENO 0
#endif
-/* Copyright (C) 1992,1995-1999,2000-2003,2005-2007 Free Software Foundation, Inc.
+/* Copyright (C) 1992,1995-1999,2000-2003,2005-2008 Free Software Foundation, Inc.
This file is part of the GNU C Library.
This program is free software: you can redistribute it and/or modify
#if !_LIBC
# define __environ environ
-# ifndef HAVE_ENVIRON_DECL
-extern char **environ;
-# endif
#endif
#if _LIBC
/* Substitute for and wrapper around <unistd.h>.
- Copyright (C) 2004-2007 Free Software Foundation, Inc.
+ Copyright (C) 2004-2008 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#endif
+#if @GNULIB_ENVIRON@
+# if !@HAVE_DECL_ENVIRON@
+/* Set of environment variables and values. An array of strings of the form
+ "VARIABLE=VALUE", terminated with a NULL. */
+# if defined __APPLE__ && defined __MACH__
+# include <crt_externs.h>
+# define environ (*_NSGetEnviron ())
+# else
+extern char **environ;
+# endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef environ
+# define environ \
+ (GL_LINK_WARNING ("environ is unportable - " \
+ "use gnulib module environ for portability"), \
+ environ)
+#endif
+
+
#if @GNULIB_FCHDIR@
# if @REPLACE_FCHDIR@
-/* Copyright (C) 1992,1995-1999,2000-2002,2005-2007 Free Software Foundation, Inc.
+/* Copyright (C) 1992,1995-1999,2000-2002,2005-2008 Free Software Foundation, Inc.
This file is part of the GNU C Library.
This program is free software: you can redistribute it and/or modify
#if !_LIBC
# define __environ environ
-# ifndef HAVE_ENVIRON_DECL
-extern char **environ;
-# endif
#endif
#if _LIBC
--- /dev/null
+# environ.m4 serial 1
+dnl Copyright (C) 2001-2004, 2006-2008 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_ENVIRON],
+[
+ AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
+ dnl Persuade glibc <unistd.h> to declare environ.
+ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+ gt_CHECK_VAR_DECL([#include <unistd.h>], environ)
+ if test $gt_cv_var_environ_declaration != yes; then
+ HAVE_DECL_ENVIRON=0
+ fi
+])
+
+# Check if a variable is properly declared.
+# gt_CHECK_VAR_DECL(includes,variable)
+AC_DEFUN([gt_CHECK_VAR_DECL],
+[
+ define([gt_cv_var], [gt_cv_var_]$2[_declaration])
+ AC_MSG_CHECKING([if $2 is properly declared])
+ AC_CACHE_VAL(gt_cv_var, [
+ AC_TRY_COMPILE([$1
+ extern struct { int foo; } $2;],
+ [$2.foo = 1;],
+ gt_cv_var=no,
+ gt_cv_var=yes)])
+ AC_MSG_RESULT($gt_cv_var)
+ if test $gt_cv_var = yes; then
+ AC_DEFINE([HAVE_]translit($2, [a-z], [A-Z])[_DECL], 1,
+ [Define if you have the declaration of $2.])
+ fi
+ undefine([gt_cv_var])
+])
-# setenv.m4 serial 9
-dnl Copyright (C) 2001-2004, 2006-2007 Free Software Foundation, Inc.
+# setenv.m4 serial 10
+dnl Copyright (C) 2001-2004, 2006-2008 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
fi
])
-# Check if a variable is properly declared.
-# gt_CHECK_VAR_DECL(includes,variable)
-AC_DEFUN([gt_CHECK_VAR_DECL],
-[
- define([gt_cv_var], [gt_cv_var_]$2[_declaration])
- AC_MSG_CHECKING([if $2 is properly declared])
- AC_CACHE_VAL(gt_cv_var, [
- AC_TRY_COMPILE([$1
- extern struct { int foo; } $2;],
- [$2.foo = 1;],
- gt_cv_var=no,
- gt_cv_var=yes)])
- AC_MSG_RESULT($gt_cv_var)
- if test $gt_cv_var = yes; then
- AC_DEFINE([HAVE_]translit($2, [a-z], [A-Z])[_DECL], 1,
- [Define if you have the declaration of $2.])
- fi
-])
-
# Prerequisites of lib/setenv.c.
AC_DEFUN([gl_PREREQ_SETENV],
[
AC_REQUIRE([AC_FUNC_ALLOCA])
+ AC_REQUIRE([gl_ENVIRON])
AC_CHECK_HEADERS_ONCE(unistd.h)
AC_CHECK_HEADERS(search.h)
AC_CHECK_FUNCS(tsearch)
- gt_CHECK_VAR_DECL([#include <unistd.h>], environ)
])
# Prerequisites of lib/unsetenv.c.
AC_DEFUN([gl_PREREQ_UNSETENV],
[
+ AC_REQUIRE([gl_ENVIRON])
AC_CHECK_HEADERS_ONCE(unistd.h)
- gt_CHECK_VAR_DECL([#include <unistd.h>], environ)
])
-# unistd_h.m4 serial 10
-dnl Copyright (C) 2006-2007 Free Software Foundation, Inc.
+# unistd_h.m4 serial 11
+dnl Copyright (C) 2006-2008 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
[
GNULIB_CHOWN=0; AC_SUBST([GNULIB_CHOWN])
GNULIB_DUP2=0; AC_SUBST([GNULIB_DUP2])
+ GNULIB_ENVIRON=0; AC_SUBST([GNULIB_ENVIRON])
GNULIB_FCHDIR=0; AC_SUBST([GNULIB_FCHDIR])
GNULIB_FTRUNCATE=0; AC_SUBST([GNULIB_FTRUNCATE])
GNULIB_GETCWD=0; AC_SUBST([GNULIB_GETCWD])
HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE])
HAVE_READLINK=1; AC_SUBST([HAVE_READLINK])
HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP])
+ HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON])
HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R])
HAVE_OS_H=0; AC_SUBST([HAVE_OS_H])
HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H])
--- /dev/null
+Description:
+environ variable: storage of environment variables.
+
+Files:
+m4/environ.m4
+
+Depends-on:
+unistd
+
+configure.ac:
+gl_ENVIRON
+gl_UNISTD_MODULE_INDICATOR([environ])
+
+Makefile.am:
+
+Include:
+#include <unistd.h>
+
+License:
+LGPLv2+
+
+Maintainer:
+Bruno Haible
+
stdbool
strpbrk
unistd
+environ
configure.ac:
gl_EXECUTE
stdbool
strpbrk
unistd
+environ
configure.ac:
gl_PIPE
malloca
alloca-opt
unistd
+environ
configure.ac:
gl_FUNC_SETENV
-e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \
-e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \
-e 's|@''GNULIB_DUP2''@|$(GNULIB_DUP2)|g' \
+ -e 's|@''GNULIB_ENVIRON''@|$(GNULIB_ENVIRON)|g' \
-e 's|@''GNULIB_FCHDIR''@|$(GNULIB_FCHDIR)|g' \
-e 's|@''GNULIB_FTRUNCATE''@|$(GNULIB_FTRUNCATE)|g' \
-e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \
-e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \
-e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \
-e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \
+ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \
-e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \
-e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \
-e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \
Depends-on:
stdlib
unistd
+environ
configure.ac:
gl_FUNC_UNSETENV