setenv.m4 | setenv.m4 | |||
---|---|---|---|---|
# setenv.m4 serial 16 | # setenv.m4 serial 26 | |||
dnl Copyright (C) 2001-2004, 2006-2010 Free Software Foundation, Inc. | dnl Copyright (C) 2001-2004, 2006-2014 Free Software Foundation, Inc. | |||
dnl This file is free software; the Free Software Foundation | dnl This file is free software; the Free Software Foundation | |||
dnl gives unlimited permission to copy and/or distribute it, | dnl gives unlimited permission to copy and/or distribute it, | |||
dnl with or without modifications, as long as this notice is preserved. | dnl with or without modifications, as long as this notice is preserved. | |||
AC_DEFUN([gl_FUNC_SETENV], | AC_DEFUN([gl_FUNC_SETENV], | |||
[ | [ | |||
AC_REQUIRE([gl_FUNC_SETENV_SEPARATE]) | AC_REQUIRE([gl_FUNC_SETENV_SEPARATE]) | |||
if test $HAVE_SETENV$REPLACE_SETENV != 10; then | AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles | |||
AC_LIBOBJ([setenv]) | ||||
fi | ||||
]) | ||||
# Like gl_FUNC_SETENV, except prepare for separate compilation (no AC_LIBOB | ||||
J). | ||||
AC_DEFUN([gl_FUNC_SETENV_SEPARATE], | ||||
[ | ||||
AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) | ||||
AC_CHECK_FUNCS_ONCE([setenv]) | ||||
if test $ac_cv_func_setenv = no; then | if test $ac_cv_func_setenv = no; then | |||
HAVE_SETENV=0 | HAVE_SETENV=0 | |||
else | else | |||
AC_CACHE_CHECK([whether setenv validates arguments], | AC_CACHE_CHECK([whether setenv validates arguments], | |||
[gl_cv_func_setenv_works], | [gl_cv_func_setenv_works], | |||
[AC_RUN_IFELSE([AC_LANG_PROGRAM([[ | [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ | |||
#include <stdlib.h> | #include <stdlib.h> | |||
#include <errno.h> | #include <errno.h> | |||
#include <string.h> | #include <string.h> | |||
]], [[ | ]], [[ | |||
if (setenv ("", "", 0) != -1) return 1; | int result = 0; | |||
if (errno != EINVAL) return 2; | { | |||
if (setenv ("a", "=", 1) != 0) return 3; | if (setenv ("", "", 0) != -1) | |||
if (strcmp (getenv ("a"), "=") != 0) return 4; | result |= 1; | |||
else if (errno != EINVAL) | ||||
result |= 2; | ||||
} | ||||
{ | ||||
if (setenv ("a", "=", 1) != 0) | ||||
result |= 4; | ||||
else if (strcmp (getenv ("a"), "=") != 0) | ||||
result |= 8; | ||||
} | ||||
return result; | ||||
]])], | ]])], | |||
[gl_cv_func_setenv_works=yes], [gl_cv_func_setenv_works=no], | [gl_cv_func_setenv_works=yes], [gl_cv_func_setenv_works=no], | |||
[gl_cv_func_setenv_works="guessing no"])]) | [case "$host_os" in | |||
if test "$gl_cv_func_setenv_works" != yes; then | # Guess yes on glibc systems. | |||
REPLACE_SETENV=1 | *-gnu*) gl_cv_func_setenv_works="guessing yes" ;; | |||
AC_LIBOBJ([setenv]) | # If we don't know, assume the worst. | |||
fi | *) gl_cv_func_setenv_works="guessing no" ;; | |||
esac | ||||
])]) | ||||
case "$gl_cv_func_setenv_works" in | ||||
*yes) ;; | ||||
*) | ||||
REPLACE_SETENV=1 | ||||
;; | ||||
esac | ||||
fi | fi | |||
]) | ||||
# Like gl_FUNC_SETENV, except prepare for separate compilation | ||||
# (no REPLACE_SETENV, no AC_LIBOBJ). | ||||
AC_DEFUN([gl_FUNC_SETENV_SEPARATE], | ||||
[ | ||||
AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) | ||||
AC_CHECK_DECLS_ONCE([setenv]) | ||||
if test $ac_cv_have_decl_setenv = no; then | ||||
HAVE_DECL_SETENV=0 | ||||
fi | ||||
AC_CHECK_FUNCS_ONCE([setenv]) | ||||
gl_PREREQ_SETENV | gl_PREREQ_SETENV | |||
]) | ]) | |||
AC_DEFUN([gl_FUNC_UNSETENV], | AC_DEFUN([gl_FUNC_UNSETENV], | |||
[ | [ | |||
AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) | AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) | |||
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles | ||||
AC_CHECK_DECLS_ONCE([unsetenv]) | ||||
if test $ac_cv_have_decl_unsetenv = no; then | ||||
HAVE_DECL_UNSETENV=0 | ||||
fi | ||||
AC_CHECK_FUNCS([unsetenv]) | AC_CHECK_FUNCS([unsetenv]) | |||
if test $ac_cv_func_unsetenv = no; then | if test $ac_cv_func_unsetenv = no; then | |||
HAVE_UNSETENV=0 | HAVE_UNSETENV=0 | |||
AC_LIBOBJ([unsetenv]) | ||||
gl_PREREQ_UNSETENV | ||||
else | else | |||
HAVE_UNSETENV=1 | ||||
dnl Some BSDs return void, failing to do error checking. | dnl Some BSDs return void, failing to do error checking. | |||
AC_CACHE_CHECK([for unsetenv() return type], [gt_cv_func_unsetenv_ret], | AC_CACHE_CHECK([for unsetenv() return type], [gt_cv_func_unsetenv_ret], | |||
[AC_TRY_COMPILE([#include <stdlib.h> | [AC_COMPILE_IFELSE( | |||
[AC_LANG_PROGRAM( | ||||
[[ | ||||
#undef _BSD | ||||
#define _BSD 1 /* unhide unsetenv declaration in OSF/1 5.1 <stdlib.h> */ | ||||
#include <stdlib.h> | ||||
extern | extern | |||
#ifdef __cplusplus | #ifdef __cplusplus | |||
"C" | "C" | |||
#endif | #endif | |||
#if defined(__STDC__) || defined(__cplusplus) | ||||
int unsetenv (const char *name); | int unsetenv (const char *name); | |||
#else | ]], | |||
int unsetenv(); | [[]])], | |||
#endif | [gt_cv_func_unsetenv_ret='int'], | |||
], , gt_cv_func_unsetenv_ret='int', gt_cv_func_unsetenv_ret='void')]) | [gt_cv_func_unsetenv_ret='void'])]) | |||
if test $gt_cv_func_unsetenv_ret = 'void'; then | if test $gt_cv_func_unsetenv_ret = 'void'; then | |||
AC_DEFINE([VOID_UNSETENV], [1], [Define to 1 if unsetenv returns void | AC_DEFINE([VOID_UNSETENV], [1], [Define to 1 if unsetenv returns void | |||
instead of int.]) | instead of int.]) | |||
REPLACE_UNSETENV=1 | REPLACE_UNSETENV=1 | |||
AC_LIBOBJ([unsetenv]) | ||||
fi | fi | |||
dnl Solaris 10 unsetenv does not remove all copies of a name. | dnl Solaris 10 unsetenv does not remove all copies of a name. | |||
AC_CACHE_CHECK([whether unsetenv works on duplicates], | dnl Haiku alpha 2 unsetenv gets confused by assignment to environ. | |||
dnl OpenBSD 4.7 unsetenv("") does not fail. | ||||
AC_CACHE_CHECK([whether unsetenv obeys POSIX], | ||||
[gl_cv_func_unsetenv_works], | [gl_cv_func_unsetenv_works], | |||
[AC_RUN_IFELSE([AC_LANG_PROGRAM([[ | [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ | |||
#include <stdlib.h> | #include <stdlib.h> | |||
#include <errno.h> | ||||
extern char **environ; | ||||
]], [[ | ]], [[ | |||
char entry[] = "b=2"; | char entry1[] = "a=1"; | |||
char entry2[] = "b=2"; | ||||
char *env[] = { entry1, entry2, NULL }; | ||||
if (putenv ((char *) "a=1")) return 1; | if (putenv ((char *) "a=1")) return 1; | |||
if (putenv (entry)) return 2; | if (putenv (entry2)) return 2; | |||
entry[0] = 'a'; | entry2[0] = 'a'; | |||
unsetenv ("a"); | unsetenv ("a"); | |||
if (getenv ("a")) return 3; | if (getenv ("a")) return 3; | |||
if (!unsetenv ("") || errno != EINVAL) return 4; | ||||
entry2[0] = 'b'; | ||||
environ = env; | ||||
if (!getenv ("a")) return 5; | ||||
entry2[0] = 'a'; | ||||
unsetenv ("a"); | ||||
if (getenv ("a")) return 6; | ||||
]])], | ]])], | |||
[gl_cv_func_unsetenv_works=yes], [gl_cv_func_unsetenv_works=no], | [gl_cv_func_unsetenv_works=yes], [gl_cv_func_unsetenv_works=no], | |||
[gl_cv_func_unsetenv_works="guessing no"])]) | [case "$host_os" in | |||
if test "$gl_cv_func_unsetenv_works" != yes; then | # Guess yes on glibc systems. | |||
REPLACE_UNSETENV=1 | *-gnu*) gl_cv_func_unsetenv_works="guessing yes" ;; | |||
AC_LIBOBJ([unsetenv]) | # If we don't know, assume the worst. | |||
fi | *) gl_cv_func_unsetenv_works="guessing no" ;; | |||
esac | ||||
])]) | ||||
case "$gl_cv_func_unsetenv_works" in | ||||
*yes) ;; | ||||
*) | ||||
REPLACE_UNSETENV=1 | ||||
;; | ||||
esac | ||||
fi | fi | |||
]) | ]) | |||
# Prerequisites of lib/setenv.c. | # Prerequisites of lib/setenv.c. | |||
AC_DEFUN([gl_PREREQ_SETENV], | AC_DEFUN([gl_PREREQ_SETENV], | |||
[ | [ | |||
AC_REQUIRE([AC_FUNC_ALLOCA]) | AC_REQUIRE([AC_FUNC_ALLOCA]) | |||
AC_REQUIRE([gl_ENVIRON]) | AC_REQUIRE([gl_ENVIRON]) | |||
AC_CHECK_HEADERS_ONCE([unistd.h]) | AC_CHECK_HEADERS_ONCE([unistd.h]) | |||
AC_CHECK_HEADERS([search.h]) | AC_CHECK_HEADERS([search.h]) | |||
End of changes. 18 change blocks. | ||||
40 lines changed or deleted | 88 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |