Mercurial > hg > octave-shane > gnulib-hg
changeset 9721:1d443a80afc4
New module 'environ'.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Sun, 24 Feb 2008 16:40:15 +0100 |
parents | 46b3aff8518a |
children | bf2be774be35 |
files | ChangeLog doc/posix-functions/environ.texi lib/execute.c lib/pipe.c lib/setenv.c lib/unistd.in.h lib/unsetenv.c m4/environ.m4 m4/setenv.m4 m4/unistd_h.m4 modules/environ modules/execute modules/pipe modules/setenv modules/unistd modules/unsetenv |
diffstat | 16 files changed, 134 insertions(+), 51 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,30 @@ +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.
--- a/doc/posix-functions/environ.texi +++ b/doc/posix-functions/environ.texi @@ -4,17 +4,14 @@ 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 @@ -27,6 +24,10 @@ #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.
--- a/lib/execute.c +++ b/lib/execute.c @@ -1,5 +1,5 @@ /* 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 @@ -54,10 +54,6 @@ #endif -#if ! HAVE_ENVIRON_DECL -extern char **environ; -#endif - #ifndef STDIN_FILENO # define STDIN_FILENO 0 #endif
--- a/lib/pipe.c +++ b/lib/pipe.c @@ -1,5 +1,5 @@ /* 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 @@ -53,10 +53,6 @@ #endif -#if ! HAVE_ENVIRON_DECL -extern char **environ; -#endif - #ifndef STDIN_FILENO # define STDIN_FILENO 0 #endif
--- a/lib/setenv.c +++ b/lib/setenv.c @@ -1,4 +1,4 @@ -/* 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 @@ -40,9 +40,6 @@ #if !_LIBC # define __environ environ -# ifndef HAVE_ENVIRON_DECL -extern char **environ; -# endif #endif #if _LIBC
--- a/lib/unistd.in.h +++ b/lib/unistd.in.h @@ -1,5 +1,5 @@ /* 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 @@ -86,6 +86,26 @@ #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@
--- a/lib/unsetenv.c +++ b/lib/unsetenv.c @@ -1,4 +1,4 @@ -/* 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 @@ -29,9 +29,6 @@ #if !_LIBC # define __environ environ -# ifndef HAVE_ENVIRON_DECL -extern char **environ; -# endif #endif #if _LIBC
new file mode 100644 --- /dev/null +++ b/m4/environ.m4 @@ -0,0 +1,36 @@ +# 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]) +])
--- a/m4/setenv.m4 +++ b/m4/setenv.m4 @@ -1,5 +1,5 @@ -# 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. @@ -53,38 +53,19 @@ 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) ])
--- a/m4/unistd_h.m4 +++ b/m4/unistd_h.m4 @@ -1,5 +1,5 @@ -# 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. @@ -34,6 +34,7 @@ [ 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]) @@ -49,6 +50,7 @@ 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])
new file mode 100644 --- /dev/null +++ b/modules/environ @@ -0,0 +1,24 @@ +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 +
--- a/modules/execute +++ b/modules/execute @@ -16,6 +16,7 @@ stdbool strpbrk unistd +environ configure.ac: gl_EXECUTE
--- a/modules/pipe +++ b/modules/pipe @@ -16,6 +16,7 @@ stdbool strpbrk unistd +environ configure.ac: gl_PIPE
--- a/modules/setenv +++ b/modules/setenv @@ -10,6 +10,7 @@ malloca alloca-opt unistd +environ configure.ac: gl_FUNC_SETENV
--- a/modules/unistd +++ b/modules/unistd @@ -25,6 +25,7 @@ -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' \ @@ -39,6 +40,7 @@ -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' \