Commit 1cbc93fb authored by Yang Tse's avatar Yang Tse
Browse files

Refactor how preprocessor symbol _THREAD_SAFE definition is done.
parent a8ddd6ce
Loading
Loading
Loading
Loading
+11 −0
Original line number Original line Diff line number Diff line
@@ -48,6 +48,17 @@
/* system header files in our config files, avoid this at any cost. */
/* system header files in our config files, avoid this at any cost. */
/* ================================================================ */
/* ================================================================ */


/*
 * 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
 * Tru64 needs _REENTRANT set for a few function prototypes and
 * things to appear in the system header files. Unixware needs it
 * things to appear in the system header files. Unixware needs it
+1 −21
Original line number Original line Diff line number Diff line
@@ -82,6 +82,7 @@ dnl This defines _ALL_SOURCE for AIX
CARES_CHECK_AIX_ALL_SOURCE
CARES_CHECK_AIX_ALL_SOURCE


dnl Our configure and build reentrant settings
dnl Our configure and build reentrant settings
CARES_CONFIGURE_THREAD_SAFE
CARES_CONFIGURE_REENTRANT
CARES_CONFIGURE_REENTRANT


dnl check for how to do large files
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
dnl Default is to try the thread-safe versions of a few functions
OPT_THREAD=on
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_ARG_ENABLE(thread,dnl
AC_HELP_STRING([--disable-thread],[don't look for thread-safe functions])
AC_HELP_STRING([--disable-thread],[don't look for thread-safe functions])
AC_HELP_STRING([--enable-thread],[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 http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixprggd/ \
dnl genprogc/thread_quick_ref.htm
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 **********************************************************************
dnl Back to "normal" configuring
dnl Back to "normal" configuring
+98 −2
Original line number Original line Diff line number Diff line
@@ -422,8 +422,8 @@ dnl must be unconditionally done for this platform.
dnl Internal macro for CARES_CONFIGURE_REENTRANT.
dnl Internal macro for CARES_CONFIGURE_REENTRANT.


AC_DEFUN([CARES_CHECK_NEED_REENTRANT_SYSTEM], [
AC_DEFUN([CARES_CHECK_NEED_REENTRANT_SYSTEM], [
  case $host in
  case $host_os in
    *-*-solaris*)
    solaris*)
      tmp_need_reentrant="yes"
      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 CARES_CONFIGURE_FROM_NOW_ON_WITH_REENTRANT
dnl -------------------------------------------------
dnl -------------------------------------------------
dnl This macro ensures that configuration tests done
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 CARES_CONFIGURE_REENTRANT
dnl -------------------------------------------------
dnl -------------------------------------------------
dnl This first checks if the preprocessor _REENTRANT
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
  #
])
+1 −29
Original line number Original line Diff line number Diff line
@@ -148,6 +148,7 @@ dnl This defines _ALL_SOURCE for AIX
CURL_CHECK_AIX_ALL_SOURCE
CURL_CHECK_AIX_ALL_SOURCE


dnl Our configure and build reentrant settings
dnl Our configure and build reentrant settings
CURL_CONFIGURE_THREAD_SAFE
CURL_CONFIGURE_REENTRANT
CURL_CONFIGURE_REENTRANT


dnl check for how to do large files
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
dnl Default is to try the thread-safe versions of a few functions
OPT_THREAD=on
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_ARG_ENABLE(thread,dnl
AC_HELP_STRING([--disable-thread],[don't look for thread-safe functions])
AC_HELP_STRING([--disable-thread],[don't look for thread-safe functions])
AC_HELP_STRING([--enable-thread],[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 http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/aixprggd/ \
dnl genprogc/thread_quick_ref.htm
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 **********************************************************************
dnl Back to "normal" configuring
dnl Back to "normal" configuring
+4 −4
Original line number Original line Diff line number Diff line
@@ -640,9 +640,12 @@
/* Define to 1 if you need the malloc.h header file even with stdlib.h */
/* Define to 1 if you need the malloc.h header file even with stdlib.h */
/* #undef NEED_MALLOC_H */
/* #undef NEED_MALLOC_H */


/* need REENTRANT defined */
/* Define to 1 if _REENTRANT preprocessor symbol must be defined. */
/* #undef NEED_REENTRANT */
/* #undef NEED_REENTRANT */


/* Define to 1 if _THREAD_SAFE preprocessor symbol must be defined. */
/* #undef NEED_THREAD_SAFE */

/* cpu-machine-OS */
/* cpu-machine-OS */
#ifdef __WINS__
#ifdef __WINS__
#define OS "i386-pc-epoc32"
#define OS "i386-pc-epoc32"
@@ -767,9 +770,6 @@
/* Define for large files, on AIX-style hosts. */
/* Define for large files, on AIX-style hosts. */
/* #undef _LARGE_FILES */
/* #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. */
/* Define to empty if `const' does not conform to ANSI C. */
/* #undef const */
/* #undef const */


Loading