build: use getenv() replacement function for systems which lack it
authorYang Tse <yangsita@gmail.com>
Wed, 23 Mar 2011 12:44:42 +0000 (13:44 +0100)
committerYang Tse <yangsita@gmail.com>
Wed, 23 Mar 2011 12:44:42 +0000 (13:44 +0100)
Makefile.inc
Makefile.netware
ares_getenv.c [new file with mode: 0644]
ares_getenv.h [new file with mode: 0644]
ares_private.h
config-dos.h
config-win32.h
configure.ac
m4/cares-functions.m4
vc/cares/vc6cares.dsp

index 6a68fce..13dcb07 100644 (file)
@@ -11,6 +11,7 @@ CSOURCES = ares__close_sockets.c      \
   ares_fds.c                           \
   ares_free_hostent.c                  \
   ares_free_string.c                   \
+  ares_getenv.c                                \
   ares_gethostbyaddr.c                 \
   ares_gethostbyname.c                 \
   ares_getnameinfo.c                   \
@@ -47,6 +48,7 @@ HHEADERS = ares.h                     \
   ares_build.h                         \
   ares_data.h                          \
   ares_dns.h                           \
+  ares_getenv.h                                \
   ares_ipv6.h                          \
   ares_library_init.h                  \
   ares_llist.h                         \
index 1e014ed..0cb1530 100644 (file)
@@ -357,6 +357,7 @@ endif
        @echo $(DL)#define HAVE_ERRNO_H 1$(DL) >> $@
        @echo $(DL)#define HAVE_ERR_H 1$(DL) >> $@
        @echo $(DL)#define HAVE_FCNTL_H 1$(DL) >> $@
+       @echo $(DL)#define HAVE_GETENV 1$(DL) >> $@
        @echo $(DL)#define HAVE_GETHOSTBYADDR 1$(DL) >> $@
        @echo $(DL)#define HAVE_GETHOSTBYNAME 1$(DL) >> $@
        @echo $(DL)#define HAVE_GETHOSTNAME 1$(DL) >> $@
diff --git a/ares_getenv.c b/ares_getenv.c
new file mode 100644 (file)
index 0000000..1b2e85d
--- /dev/null
@@ -0,0 +1,30 @@
+
+
+/* Copyright 1998 by the Massachusetts Institute of Technology.
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, provided that the above copyright
+ * notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting
+ * documentation, and that the name of M.I.T. not be used in
+ * advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission.
+ * M.I.T. makes no representations about the suitability of
+ * this software for any purpose.  It is provided "as is"
+ * without express or implied warranty.
+ */
+
+#include "ares_setup.h"
+#include "ares_getenv.h"
+
+#ifndef HAVE_GETENV
+
+char *ares_getenv(const char *name)
+{
+#ifdef _WIN32_WCE
+  return NULL;
+#endif
+}
+
+#endif
diff --git a/ares_getenv.h b/ares_getenv.h
new file mode 100644 (file)
index 0000000..6da6cc5
--- /dev/null
@@ -0,0 +1,26 @@
+#ifndef HEADER_CARES_GETENV_H
+#define HEADER_CARES_GETENV_H
+
+
+/* Copyright 1998 by the Massachusetts Institute of Technology.
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, provided that the above copyright
+ * notice appear in all copies and that both that copyright
+ * notice and this permission notice appear in supporting
+ * documentation, and that the name of M.I.T. not be used in
+ * advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission.
+ * M.I.T. makes no representations about the suitability of
+ * this software for any purpose.  It is provided "as is"
+ * without express or implied warranty.
+ */
+
+#include "ares_setup.h"
+
+#ifndef HAVE_GETENV
+extern char *ares_getenv(const char *name);
+#endif
+
+#endif /* HEADER_CARES_GETENV_H */
index bf21abd..01a79b6 100644 (file)
 #include "ares_ipv6.h"
 #include "ares_llist.h"
 
+#ifndef HAVE_GETENV
+#  include "ares_getenv.h"
+#  define getenv(ptr) ares_getenv(ptr)
+#endif
+
 #ifndef HAVE_STRDUP
 #  include "ares_strdup.h"
 #  define strdup(ptr) ares_strdup(ptr)
index c74425e..d15a177 100644 (file)
@@ -9,6 +9,7 @@
 #define PACKAGE  "c-ares"
 
 #define HAVE_ERRNO_H           1
+#define HAVE_GETENV            1
 #define HAVE_GETTIMEOFDAY      1
 #define HAVE_IOCTLSOCKET       1
 #define HAVE_IOCTLSOCKET_FIONBIO   1
index 5d13f4c..d426c47 100644 (file)
@@ -93,6 +93,9 @@
 /* Define if you have the closesocket function.  */
 #define HAVE_CLOSESOCKET 1
 
+/* Define if you have the getenv function.  */
+#define HAVE_GETENV 1
+
 /* Define if you have the gethostname function.  */
 #define HAVE_GETHOSTNAME 1
 
index 6f5f9d3..d5be61c 100644 (file)
@@ -524,6 +524,7 @@ CARES_CHECK_FUNC_CONNECT
 CARES_CHECK_FUNC_FCNTL
 CARES_CHECK_FUNC_FREEADDRINFO
 CARES_CHECK_FUNC_GETADDRINFO
+CARES_CHECK_FUNC_GETENV
 CARES_CHECK_FUNC_GETHOSTBYADDR
 CARES_CHECK_FUNC_GETHOSTBYNAME
 CARES_CHECK_FUNC_GETHOSTNAME
index 28fb1e5..bddd9b4 100644 (file)
@@ -1,6 +1,6 @@
 #***************************************************************************
 #
-# Copyright (C) 2008 - 2010 by Daniel Stenberg et al
+# Copyright (C) 2008 - 2011 by Daniel Stenberg et al
 #
 # Permission to use, copy, modify, and distribute this software and its
 # documentation for any purpose and without fee is hereby granted, provided
@@ -15,7 +15,7 @@
 #***************************************************************************
 
 # File version for 'aclocal' use. Keep it a single number.
-# serial 40
+# serial 41
 
 
 dnl CARES_INCLUDES_ARPA_INET
@@ -1084,6 +1084,91 @@ AC_DEFUN([CARES_CHECK_FUNC_GETADDRINFO], [
 ])
 
 
+dnl CARES_CHECK_FUNC_GETENV
+dnl -------------------------------------------------
+dnl Verify if getenv is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable cares_disallow_getenv, then
+dnl HAVE_GETENV will be defined.
+
+AC_DEFUN([CARES_CHECK_FUNC_GETENV], [
+  AC_REQUIRE([CARES_INCLUDES_STDLIB])dnl
+  #
+  tst_links_getenv="unknown"
+  tst_proto_getenv="unknown"
+  tst_compi_getenv="unknown"
+  tst_allow_getenv="unknown"
+  #
+  AC_MSG_CHECKING([if getenv can be linked])
+  AC_LINK_IFELSE([
+    AC_LANG_FUNC_LINK_TRY([getenv])
+  ],[
+    AC_MSG_RESULT([yes])
+    tst_links_getenv="yes"
+  ],[
+    AC_MSG_RESULT([no])
+    tst_links_getenv="no"
+  ])
+  #
+  if test "$tst_links_getenv" = "yes"; then
+    AC_MSG_CHECKING([if getenv is prototyped])
+    AC_EGREP_CPP([getenv],[
+      $cares_includes_stdlib
+    ],[
+      AC_MSG_RESULT([yes])
+      tst_proto_getenv="yes"
+    ],[
+      AC_MSG_RESULT([no])
+      tst_proto_getenv="no"
+    ])
+  fi
+  #
+  if test "$tst_proto_getenv" = "yes"; then
+    AC_MSG_CHECKING([if getenv is compilable])
+    AC_COMPILE_IFELSE([
+      AC_LANG_PROGRAM([[
+        $cares_includes_stdlib
+      ]],[[
+        if(0 != getenv(0))
+          return 1;
+      ]])
+    ],[
+      AC_MSG_RESULT([yes])
+      tst_compi_getenv="yes"
+    ],[
+      AC_MSG_RESULT([no])
+      tst_compi_getenv="no"
+    ])
+  fi
+  #
+  if test "$tst_compi_getenv" = "yes"; then
+    AC_MSG_CHECKING([if getenv usage allowed])
+    if test "x$cares_disallow_getenv" != "xyes"; then
+      AC_MSG_RESULT([yes])
+      tst_allow_getenv="yes"
+    else
+      AC_MSG_RESULT([no])
+      tst_allow_getenv="no"
+    fi
+  fi
+  #
+  AC_MSG_CHECKING([if getenv might be used])
+  if test "$tst_links_getenv" = "yes" &&
+     test "$tst_proto_getenv" = "yes" &&
+     test "$tst_compi_getenv" = "yes" &&
+     test "$tst_allow_getenv" = "yes"; then
+    AC_MSG_RESULT([yes])
+    AC_DEFINE_UNQUOTED(HAVE_GETENV, 1,
+      [Define to 1 if you have the getenv function.])
+    ac_cv_func_getenv="yes"
+  else
+    AC_MSG_RESULT([no])
+    ac_cv_func_getenv="no"
+  fi
+])
+
+
 dnl CARES_CHECK_FUNC_GETHOSTBYADDR
 dnl -------------------------------------------------
 dnl Verify if gethostbyaddr is available, prototyped,
index 866f6f5..dc124ff 100644 (file)
@@ -198,6 +198,10 @@ SOURCE=..\..\ares_free_string.c
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\ares_getenv.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\ares_gethostbyaddr.c\r
 # End Source File\r
 # Begin Source File\r
@@ -342,6 +346,10 @@ SOURCE=..\..\ares_dns.h
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\ares_getenv.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\ares_ipv6.h\r
 # End Source File\r
 # Begin Source File\r