aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ares/ares_setup.h11
-rw-r--r--ares/configure.ac22
-rw-r--r--ares/m4/cares-reentrant.m4100
-rw-r--r--configure.ac30
-rw-r--r--lib/config-symbian.h8
-rw-r--r--lib/config-tpf.h8
-rw-r--r--lib/config-vxworks.h6
-rw-r--r--lib/setup.h11
-rw-r--r--m4/curl-reentrant.m4101
-rw-r--r--src/setup.h11
10 files changed, 243 insertions, 65 deletions
diff --git a/ares/ares_setup.h b/ares/ares_setup.h
index 589643716..ce81b1fa3 100644
--- a/ares/ares_setup.h
+++ b/ares/ares_setup.h
@@ -49,6 +49,17 @@
/* ================================================================ */
/*
+ * AIX 4.3 and newer needs _THREAD_SAFE defined to build
+ * proper reentrant code. Others may also need it.
+ */
+
+#ifdef NEED_THREAD_SAFE
+# ifndef _THREAD_SAFE
+# define _THREAD_SAFE
+# endif
+#endif
+
+/*
* Tru64 needs _REENTRANT set for a few function prototypes and
* things to appear in the system header files. Unixware needs it
* to build proper reentrant code. Others may also need it.
diff --git a/ares/configure.ac b/ares/configure.ac
index 8f1cddb5b..f1f52a5bc 100644
--- a/ares/configure.ac
+++ b/ares/configure.ac
@@ -82,6 +82,7 @@ dnl This defines _ALL_SOURCE for AIX
CARES_CHECK_AIX_ALL_SOURCE
dnl Our configure and build reentrant settings
+CARES_CONFIGURE_THREAD_SAFE
CARES_CONFIGURE_REENTRANT
dnl check for how to do large files
@@ -384,21 +385,6 @@ AC_HELP_STRING([--enable-libgcc],[use libgcc when linking]),
dnl Default is to try the thread-safe versions of a few functions
OPT_THREAD=on
-dnl detect AIX 4.3 or later
-AC_MSG_CHECKING([AIX 4.3 or later])
-AC_PREPROC_IFELSE([
-#if defined(_AIX) && defined(_AIX43)
-printf("just fine");
-#else
-#error "this is not AIX 4.3 or later"
-#endif
-],
- [ AC_MSG_RESULT([yes])
- RECENTAIX=yes
- OPT_THREAD=off ],
- [ AC_MSG_RESULT([no]) ]
-)
-
AC_ARG_ENABLE(thread,dnl
AC_HELP_STRING([--disable-thread],[don't look for thread-safe functions])
AC_HELP_STRING([--enable-thread],[look for thread-safe functions]),
@@ -427,12 +413,6 @@ dnl Let's hope this split URL remains working:
dnl http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixprggd/ \
dnl genprogc/thread_quick_ref.htm
-if test "x$RECENTAIX" = "xyes"; then
-
- AC_DEFINE(_THREAD_SAFE, 1, [define this if you need it to compile thread-safe code])
-
-fi
-
dnl **********************************************************************
dnl Back to "normal" configuring
diff --git a/ares/m4/cares-reentrant.m4 b/ares/m4/cares-reentrant.m4
index 5793b7791..2c24e557d 100644
--- a/ares/m4/cares-reentrant.m4
+++ b/ares/m4/cares-reentrant.m4
@@ -422,8 +422,8 @@ dnl must be unconditionally done for this platform.
dnl Internal macro for CARES_CONFIGURE_REENTRANT.
AC_DEFUN([CARES_CHECK_NEED_REENTRANT_SYSTEM], [
- case $host in
- *-*-solaris*)
+ case $host_os in
+ solaris*)
tmp_need_reentrant="yes"
;;
*)
@@ -433,6 +433,29 @@ AC_DEFUN([CARES_CHECK_NEED_REENTRANT_SYSTEM], [
])
+dnl CARES_CHECK_NEED_THREAD_SAFE_SYSTEM
+dnl -------------------------------------------------
+dnl Checks if the preprocessor _THREAD_SAFE definition
+dnl must be unconditionally done for this platform.
+dnl Internal macro for CARES_CONFIGURE_THREAD_SAFE.
+
+AC_DEFUN([CARES_CHECK_NEED_THREAD_SAFE_SYSTEM], [
+ case $host_os in
+ aix[[123]].* | aix4.[[012]].*)
+ dnl aix 4.2 and older
+ tmp_need_thread_safe="no"
+ ;;
+ aix*)
+ dnl AIX 4.3 and newer
+ tmp_need_thread_safe="yes"
+ ;;
+ *)
+ tmp_need_thread_safe="no"
+ ;;
+ esac
+])
+
+
dnl CARES_CONFIGURE_FROM_NOW_ON_WITH_REENTRANT
dnl -------------------------------------------------
dnl This macro ensures that configuration tests done
@@ -453,6 +476,26 @@ _EOF
])
+dnl CARES_CONFIGURE_FROM_NOW_ON_WITH_THREAD_SAFE
+dnl -------------------------------------------------
+dnl This macro ensures that configuration tests done
+dnl after this will execute with preprocessor symbol
+dnl _THREAD_SAFE defined. This macro also ensures that
+dnl the generated config file defines NEED_THREAD_SAFE
+dnl and that in turn setup.h will define _THREAD_SAFE.
+dnl Internal macro for CARES_CONFIGURE_THREAD_SAFE.
+
+AC_DEFUN([CARES_CONFIGURE_FROM_NOW_ON_WITH_THREAD_SAFE], [
+AC_DEFINE(NEED_THREAD_SAFE, 1,
+ [Define to 1 if _THREAD_SAFE preprocessor symbol must be defined.])
+cat >>confdefs.h <<_EOF
+#ifndef _THREAD_SAFE
+# define _THREAD_SAFE
+#endif
+_EOF
+])
+
+
dnl CARES_CONFIGURE_REENTRANT
dnl -------------------------------------------------
dnl This first checks if the preprocessor _REENTRANT
@@ -513,3 +556,56 @@ AC_DEFUN([CARES_CONFIGURE_REENTRANT], [
#
])
+
+dnl CARES_CONFIGURE_THREAD_SAFE
+dnl -------------------------------------------------
+dnl This first checks if the preprocessor _THREAD_SAFE
+dnl symbol is already defined. If it isn't currently
+dnl defined a set of checks are performed to verify
+dnl if its definition is required. Finally, if
+dnl _THREAD_SAFE is already defined or needed it takes
+dnl care of making adjustments necessary to ensure
+dnl that it is defined equally for further configure
+dnl tests and generated config file.
+
+AC_DEFUN([CARES_CONFIGURE_THREAD_SAFE], [
+ AC_PREREQ([2.50])dnl
+ #
+ AC_MSG_CHECKING([if _THREAD_SAFE is already defined])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ ]],[[
+#ifdef _THREAD_SAFE
+ int dummy=1;
+#else
+ force compilation error
+#endif
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tmp_thread_safe_initially_defined="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tmp_thread_safe_initially_defined="no"
+ ])
+ #
+ if test "$tmp_thread_safe_initially_defined" = "no"; then
+ AC_MSG_CHECKING([if _THREAD_SAFE is actually needed])
+ CARES_CHECK_NEED_THREAD_SAFE_SYSTEM
+ if test "$tmp_need_thread_safe" = "yes"; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if _THREAD_SAFE is onwards defined])
+ if test "$tmp_thread_safe_initially_defined" = "yes" ||
+ test "$tmp_need_thread_safe" = "yes"; then
+ CARES_CONFIGURE_FROM_NOW_ON_WITH_THREAD_SAFE
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ #
+])
diff --git a/configure.ac b/configure.ac
index d2db6cf54..bc7e0e4bd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -148,6 +148,7 @@ dnl This defines _ALL_SOURCE for AIX
CURL_CHECK_AIX_ALL_SOURCE
dnl Our configure and build reentrant settings
+CURL_CONFIGURE_THREAD_SAFE
CURL_CONFIGURE_REENTRANT
dnl check for how to do large files
@@ -1823,22 +1824,6 @@ esac
dnl Default is to try the thread-safe versions of a few functions
OPT_THREAD=on
-dnl detect AIX 4.3 or later
-dnl see full docs on this reasoning in the lib/hostip.c source file
-AC_MSG_CHECKING([AIX 4.3 or later])
-AC_PREPROC_IFELSE([
-#if defined(_AIX) && defined(_AIX43)
-printf("just fine");
-#else
-#error "this is not AIX 4.3 or later"
-#endif
-],
- [ AC_MSG_RESULT([yes])
- RECENTAIX=yes
- OPT_THREAD=off ],
- [ AC_MSG_RESULT([no]) ]
-)
-
AC_ARG_ENABLE(thread,dnl
AC_HELP_STRING([--disable-thread],[don't look for thread-safe functions])
AC_HELP_STRING([--enable-thread],[look for thread-safe functions]),
@@ -1886,19 +1871,6 @@ dnl Let's hope this split URL remains working:
dnl http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixprggd/ \
dnl genprogc/thread_quick_ref.htm
-if test "x$RECENTAIX" = "xyes"; then
-
- AC_DEFINE(_THREAD_SAFE, 1, [define this if you need it to compile thread-safe code])
-
- dnl is there a localtime_r()
- dnl the old localtime_r check was done here
-
- dnl is there a strerror_r()
- dnl the old strerror_r check was done here
-
- checkfor_gmtime_r="yes"
-fi
-
dnl **********************************************************************
dnl Back to "normal" configuring
diff --git a/lib/config-symbian.h b/lib/config-symbian.h
index b26fe46cd..d3bf20924 100644
--- a/lib/config-symbian.h
+++ b/lib/config-symbian.h
@@ -640,9 +640,12 @@
/* Define to 1 if you need the malloc.h header file even with stdlib.h */
/* #undef NEED_MALLOC_H */
-/* need REENTRANT defined */
+/* Define to 1 if _REENTRANT preprocessor symbol must be defined. */
/* #undef NEED_REENTRANT */
+/* Define to 1 if _THREAD_SAFE preprocessor symbol must be defined. */
+/* #undef NEED_THREAD_SAFE */
+
/* cpu-machine-OS */
#ifdef __WINS__
#define OS "i386-pc-epoc32"
@@ -767,9 +770,6 @@
/* Define for large files, on AIX-style hosts. */
/* #undef _LARGE_FILES */
-/* define this if you need it to compile thread-safe code */
-/* #undef _THREAD_SAFE */
-
/* Define to empty if `const' does not conform to ANSI C. */
/* #undef const */
diff --git a/lib/config-tpf.h b/lib/config-tpf.h
index cea5d3bd9..fd995bf4c 100644
--- a/lib/config-tpf.h
+++ b/lib/config-tpf.h
@@ -559,9 +559,12 @@
/* if you have the zlib.h header file */
/* #undef HAVE_ZLIB_H */
-/* need REENTRANT defined */
+/* Define to 1 if _REENTRANT preprocessor symbol must be defined. */
/* #undef NEED_REENTRANT */
+/* Define to 1 if _THREAD_SAFE preprocessor symbol must be defined. */
+/* #undef NEED_THREAD_SAFE */
+
/* cpu-machine-OS */
#define OS "s390x-ibm-tpf"
@@ -653,9 +656,6 @@
/* Define for large files, on AIX-style hosts. */
/* #undef _LARGE_FILES */
-/* define this if you need it to compile thread-safe code */
-/* #undef _THREAD_SAFE */
-
/* Define to empty if `const' does not conform to ANSI C. */
/* #undef const */
diff --git a/lib/config-vxworks.h b/lib/config-vxworks.h
index 34a8c7172..26b8074d5 100644
--- a/lib/config-vxworks.h
+++ b/lib/config-vxworks.h
@@ -745,6 +745,9 @@
/* Define to 1 if _REENTRANT preprocessor symbol must be defined. */
/* #undef NEED_REENTRANT */
+/* Define to 1 if _THREAD_SAFE preprocessor symbol must be defined. */
+/* #undef NEED_THREAD_SAFE */
+
/* Define to 1 if the open function requires three arguments. */
#define OPEN_NEEDS_ARG3 1
@@ -913,9 +916,6 @@
/* Define for large files, on AIX-style hosts. */
/* #undef _LARGE_FILES */
-/* define this if you need it to compile thread-safe code */
-/* #undef _THREAD_SAFE */
-
/* Define to empty if `const' does not conform to ANSI C. */
/* #undef const */
diff --git a/lib/setup.h b/lib/setup.h
index 5f0de9050..49d14ed09 100644
--- a/lib/setup.h
+++ b/lib/setup.h
@@ -86,6 +86,17 @@
/* ================================================================ */
/*
+ * AIX 4.3 and newer needs _THREAD_SAFE defined to build
+ * proper reentrant code. Others may also need it.
+ */
+
+#ifdef NEED_THREAD_SAFE
+# ifndef _THREAD_SAFE
+# define _THREAD_SAFE
+# endif
+#endif
+
+/*
* Tru64 needs _REENTRANT set for a few function prototypes and
* things to appear in the system header files. Unixware needs it
* to build proper reentrant code. Others may also need it.
diff --git a/m4/curl-reentrant.m4 b/m4/curl-reentrant.m4
index a2aa5a96e..08e145211 100644
--- a/m4/curl-reentrant.m4
+++ b/m4/curl-reentrant.m4
@@ -428,8 +428,8 @@ dnl must be unconditionally done for this platform.
dnl Internal macro for CURL_CONFIGURE_REENTRANT.
AC_DEFUN([CURL_CHECK_NEED_REENTRANT_SYSTEM], [
- case $host in
- *-*-solaris*)
+ case $host_os in
+ solaris*)
tmp_need_reentrant="yes"
;;
*)
@@ -439,6 +439,29 @@ AC_DEFUN([CURL_CHECK_NEED_REENTRANT_SYSTEM], [
])
+dnl CURL_CHECK_NEED_THREAD_SAFE_SYSTEM
+dnl -------------------------------------------------
+dnl Checks if the preprocessor _THREAD_SAFE definition
+dnl must be unconditionally done for this platform.
+dnl Internal macro for CURL_CONFIGURE_THREAD_SAFE.
+
+AC_DEFUN([CURL_CHECK_NEED_THREAD_SAFE_SYSTEM], [
+ case $host_os in
+ aix[[123]].* | aix4.[[012]].*)
+ dnl aix 4.2 and older
+ tmp_need_thread_safe="no"
+ ;;
+ aix*)
+ dnl AIX 4.3 and newer
+ tmp_need_thread_safe="yes"
+ ;;
+ *)
+ tmp_need_thread_safe="no"
+ ;;
+ esac
+])
+
+
dnl CURL_CONFIGURE_FROM_NOW_ON_WITH_REENTRANT
dnl -------------------------------------------------
dnl This macro ensures that configuration tests done
@@ -459,6 +482,26 @@ _EOF
])
+dnl CURL_CONFIGURE_FROM_NOW_ON_WITH_THREAD_SAFE
+dnl -------------------------------------------------
+dnl This macro ensures that configuration tests done
+dnl after this will execute with preprocessor symbol
+dnl _THREAD_SAFE defined. This macro also ensures that
+dnl the generated config file defines NEED_THREAD_SAFE
+dnl and that in turn setup.h will define _THREAD_SAFE.
+dnl Internal macro for CURL_CONFIGURE_THREAD_SAFE.
+
+AC_DEFUN([CURL_CONFIGURE_FROM_NOW_ON_WITH_THREAD_SAFE], [
+AC_DEFINE(NEED_THREAD_SAFE, 1,
+ [Define to 1 if _THREAD_SAFE preprocessor symbol must be defined.])
+cat >>confdefs.h <<_EOF
+#ifndef _THREAD_SAFE
+# define _THREAD_SAFE
+#endif
+_EOF
+])
+
+
dnl CURL_CONFIGURE_REENTRANT
dnl -------------------------------------------------
dnl This first checks if the preprocessor _REENTRANT
@@ -519,3 +562,57 @@ AC_DEFUN([CURL_CONFIGURE_REENTRANT], [
#
])
+
+dnl CURL_CONFIGURE_THREAD_SAFE
+dnl -------------------------------------------------
+dnl This first checks if the preprocessor _THREAD_SAFE
+dnl symbol is already defined. If it isn't currently
+dnl defined a set of checks are performed to verify
+dnl if its definition is required. Finally, if
+dnl _THREAD_SAFE is already defined or needed it takes
+dnl care of making adjustments necessary to ensure
+dnl that it is defined equally for further configure
+dnl tests and generated config file.
+
+AC_DEFUN([CURL_CONFIGURE_THREAD_SAFE], [
+ AC_PREREQ([2.50])dnl
+ #
+ AC_MSG_CHECKING([if _THREAD_SAFE is already defined])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ ]],[[
+#ifdef _THREAD_SAFE
+ int dummy=1;
+#else
+ force compilation error
+#endif
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tmp_thread_safe_initially_defined="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tmp_thread_safe_initially_defined="no"
+ ])
+ #
+ if test "$tmp_thread_safe_initially_defined" = "no"; then
+ AC_MSG_CHECKING([if _THREAD_SAFE is actually needed])
+ CURL_CHECK_NEED_THREAD_SAFE_SYSTEM
+ if test "$tmp_need_thread_safe" = "yes"; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if _THREAD_SAFE is onwards defined])
+ if test "$tmp_thread_safe_initially_defined" = "yes" ||
+ test "$tmp_need_thread_safe" = "yes"; then
+ CURL_CONFIGURE_FROM_NOW_ON_WITH_THREAD_SAFE
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ #
+])
+
diff --git a/src/setup.h b/src/setup.h
index 9120af174..36fde516f 100644
--- a/src/setup.h
+++ b/src/setup.h
@@ -69,6 +69,17 @@
#endif /* HAVE_CONFIG_H */
/*
+ * AIX 4.3 and newer needs _THREAD_SAFE defined to build
+ * proper reentrant code. Others may also need it.
+ */
+
+#ifdef NEED_THREAD_SAFE
+# ifndef _THREAD_SAFE
+# define _THREAD_SAFE
+# endif
+#endif
+
+/*
* Tru64 needs _REENTRANT set for a few function prototypes and
* things to appear in the system header files. Unixware needs it
* to build proper reentrant code. Others may also need it.