| #*************************************************************************** |
| # _ _ ____ _ |
| # Project ___| | | | _ \| | |
| # / __| | | | |_) | | |
| # | (__| |_| | _ <| |___ |
| # \___|\___/|_| \_\_____| |
| # |
| # Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al. |
| # |
| # This software is licensed as described in the file COPYING, which |
| # you should have received as part of this distribution. The terms |
| # are also available at https://curl.haxx.se/docs/copyright.html. |
| # |
| # You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| # copies of the Software, and permit persons to whom the Software is |
| # furnished to do so, under the terms of the COPYING file. |
| # |
| # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| # KIND, either express or implied. |
| # |
| #*************************************************************************** |
| |
| # File version for 'aclocal' use. Keep it a single number. |
| # serial 10 |
| |
| dnl Note 1 |
| dnl ------ |
| dnl None of the CURL_CHECK_NEED_REENTRANT_* macros shall use HAVE_FOO_H to |
| dnl conditionally include header files. These macros are used early in the |
| dnl configure process much before header file availability is known. |
| |
| |
| dnl CURL_CHECK_NEED_REENTRANT_ERRNO |
| dnl ------------------------------------------------- |
| dnl Checks if the preprocessor _REENTRANT definition |
| dnl makes errno available as a preprocessor macro. |
| |
| AC_DEFUN([CURL_CHECK_NEED_REENTRANT_ERRNO], [ |
| AC_COMPILE_IFELSE([ |
| AC_LANG_PROGRAM([[ |
| #include <errno.h> |
| ]],[[ |
| if(0 != errno) |
| return 1; |
| ]]) |
| ],[ |
| tmp_errno="yes" |
| ],[ |
| tmp_errno="no" |
| ]) |
| if test "$tmp_errno" = "yes"; then |
| AC_COMPILE_IFELSE([ |
| AC_LANG_PROGRAM([[ |
| #include <errno.h> |
| ]],[[ |
| #ifdef errno |
| int dummy=1; |
| #else |
| force compilation error |
| #endif |
| ]]) |
| ],[ |
| tmp_errno="errno_macro_defined" |
| ],[ |
| AC_COMPILE_IFELSE([ |
| AC_LANG_PROGRAM([[ |
| #define _REENTRANT |
| #include <errno.h> |
| ]],[[ |
| #ifdef errno |
| int dummy=1; |
| #else |
| force compilation error |
| #endif |
| ]]) |
| ],[ |
| tmp_errno="errno_macro_needs_reentrant" |
| tmp_need_reentrant="yes" |
| ]) |
| ]) |
| fi |
| ]) |
| |
| |
| dnl CURL_CHECK_NEED_REENTRANT_GMTIME_R |
| dnl ------------------------------------------------- |
| dnl Checks if the preprocessor _REENTRANT definition |
| dnl makes function gmtime_r compiler visible. |
| |
| AC_DEFUN([CURL_CHECK_NEED_REENTRANT_GMTIME_R], [ |
| AC_LINK_IFELSE([ |
| AC_LANG_FUNC_LINK_TRY([gmtime_r]) |
| ],[ |
| tmp_gmtime_r="yes" |
| ],[ |
| tmp_gmtime_r="no" |
| ]) |
| if test "$tmp_gmtime_r" = "yes"; then |
| AC_EGREP_CPP([gmtime_r],[ |
| #include <sys/types.h> |
| #include <time.h> |
| ],[ |
| tmp_gmtime_r="proto_declared" |
| ],[ |
| AC_EGREP_CPP([gmtime_r],[ |
| #define _REENTRANT |
| #include <sys/types.h> |
| #include <time.h> |
| ],[ |
| tmp_gmtime_r="proto_needs_reentrant" |
| tmp_need_reentrant="yes" |
| ]) |
| ]) |
| fi |
| ]) |
| |
| |
| dnl CURL_CHECK_NEED_REENTRANT_LOCALTIME_R |
| dnl ------------------------------------------------- |
| dnl Checks if the preprocessor _REENTRANT definition |
| dnl makes function localtime_r compiler visible. |
| |
| AC_DEFUN([CURL_CHECK_NEED_REENTRANT_LOCALTIME_R], [ |
| AC_LINK_IFELSE([ |
| AC_LANG_FUNC_LINK_TRY([localtime_r]) |
| ],[ |
| tmp_localtime_r="yes" |
| ],[ |
| tmp_localtime_r="no" |
| ]) |
| if test "$tmp_localtime_r" = "yes"; then |
| AC_EGREP_CPP([localtime_r],[ |
| #include <sys/types.h> |
| #include <time.h> |
| ],[ |
| tmp_localtime_r="proto_declared" |
| ],[ |
| AC_EGREP_CPP([localtime_r],[ |
| #define _REENTRANT |
| #include <sys/types.h> |
| #include <time.h> |
| ],[ |
| tmp_localtime_r="proto_needs_reentrant" |
| tmp_need_reentrant="yes" |
| ]) |
| ]) |
| fi |
| ]) |
| |
| |
| dnl CURL_CHECK_NEED_REENTRANT_STRERROR_R |
| dnl ------------------------------------------------- |
| dnl Checks if the preprocessor _REENTRANT definition |
| dnl makes function strerror_r compiler visible. |
| |
| AC_DEFUN([CURL_CHECK_NEED_REENTRANT_STRERROR_R], [ |
| AC_LINK_IFELSE([ |
| AC_LANG_FUNC_LINK_TRY([strerror_r]) |
| ],[ |
| tmp_strerror_r="yes" |
| ],[ |
| tmp_strerror_r="no" |
| ]) |
| if test "$tmp_strerror_r" = "yes"; then |
| AC_EGREP_CPP([strerror_r],[ |
| #include <sys/types.h> |
| #include <string.h> |
| ],[ |
| tmp_strerror_r="proto_declared" |
| ],[ |
| AC_EGREP_CPP([strerror_r],[ |
| #define _REENTRANT |
| #include <sys/types.h> |
| #include <string.h> |
| ],[ |
| tmp_strerror_r="proto_needs_reentrant" |
| tmp_need_reentrant="yes" |
| ]) |
| ]) |
| fi |
| ]) |
| |
| |
| dnl CURL_CHECK_NEED_REENTRANT_STRTOK_R |
| dnl ------------------------------------------------- |
| dnl Checks if the preprocessor _REENTRANT definition |
| dnl makes function strtok_r compiler visible. |
| |
| AC_DEFUN([CURL_CHECK_NEED_REENTRANT_STRTOK_R], [ |
| AC_LINK_IFELSE([ |
| AC_LANG_FUNC_LINK_TRY([strtok_r]) |
| ],[ |
| tmp_strtok_r="yes" |
| ],[ |
| tmp_strtok_r="no" |
| ]) |
| if test "$tmp_strtok_r" = "yes"; then |
| AC_EGREP_CPP([strtok_r],[ |
| #include <sys/types.h> |
| #include <string.h> |
| ],[ |
| tmp_strtok_r="proto_declared" |
| ],[ |
| AC_EGREP_CPP([strtok_r],[ |
| #define _REENTRANT |
| #include <sys/types.h> |
| #include <string.h> |
| ],[ |
| tmp_strtok_r="proto_needs_reentrant" |
| tmp_need_reentrant="yes" |
| ]) |
| ]) |
| fi |
| ]) |
| |
| |
| dnl CURL_CHECK_NEED_REENTRANT_INET_NTOA_R |
| dnl ------------------------------------------------- |
| dnl Checks if the preprocessor _REENTRANT definition |
| dnl makes function inet_ntoa_r compiler visible. |
| |
| AC_DEFUN([CURL_CHECK_NEED_REENTRANT_INET_NTOA_R], [ |
| AC_LINK_IFELSE([ |
| AC_LANG_FUNC_LINK_TRY([inet_ntoa_r]) |
| ],[ |
| tmp_inet_ntoa_r="yes" |
| ],[ |
| tmp_inet_ntoa_r="no" |
| ]) |
| if test "$tmp_inet_ntoa_r" = "yes"; then |
| AC_EGREP_CPP([inet_ntoa_r],[ |
| #include <sys/types.h> |
| #include <sys/socket.h> |
| #include <netinet/in.h> |
| #include <arpa/inet.h> |
| ],[ |
| tmp_inet_ntoa_r="proto_declared" |
| ],[ |
| AC_EGREP_CPP([inet_ntoa_r],[ |
| #define _REENTRANT |
| #include <sys/types.h> |
| #include <sys/socket.h> |
| #include <netinet/in.h> |
| #include <arpa/inet.h> |
| ],[ |
| tmp_inet_ntoa_r="proto_needs_reentrant" |
| tmp_need_reentrant="yes" |
| ]) |
| ]) |
| fi |
| ]) |
| |
| |
| dnl CURL_CHECK_NEED_REENTRANT_GETHOSTBYADDR_R |
| dnl ------------------------------------------------- |
| dnl Checks if the preprocessor _REENTRANT definition |
| dnl makes function gethostbyaddr_r compiler visible. |
| |
| AC_DEFUN([CURL_CHECK_NEED_REENTRANT_GETHOSTBYADDR_R], [ |
| AC_LINK_IFELSE([ |
| AC_LANG_FUNC_LINK_TRY([gethostbyaddr_r]) |
| ],[ |
| tmp_gethostbyaddr_r="yes" |
| ],[ |
| tmp_gethostbyaddr_r="no" |
| ]) |
| if test "$tmp_gethostbyaddr_r" = "yes"; then |
| AC_EGREP_CPP([gethostbyaddr_r],[ |
| #include <sys/types.h> |
| #include <netdb.h> |
| ],[ |
| tmp_gethostbyaddr_r="proto_declared" |
| ],[ |
| AC_EGREP_CPP([gethostbyaddr_r],[ |
| #define _REENTRANT |
| #include <sys/types.h> |
| #include <netdb.h> |
| ],[ |
| tmp_gethostbyaddr_r="proto_needs_reentrant" |
| tmp_need_reentrant="yes" |
| ]) |
| ]) |
| fi |
| ]) |
| |
| |
| dnl CURL_CHECK_NEED_REENTRANT_GETHOSTBYNAME_R |
| dnl ------------------------------------------------- |
| dnl Checks if the preprocessor _REENTRANT definition |
| dnl makes function gethostbyname_r compiler visible. |
| |
| AC_DEFUN([CURL_CHECK_NEED_REENTRANT_GETHOSTBYNAME_R], [ |
| AC_LINK_IFELSE([ |
| AC_LANG_FUNC_LINK_TRY([gethostbyname_r]) |
| ],[ |
| tmp_gethostbyname_r="yes" |
| ],[ |
| tmp_gethostbyname_r="no" |
| ]) |
| if test "$tmp_gethostbyname_r" = "yes"; then |
| AC_EGREP_CPP([gethostbyname_r],[ |
| #include <sys/types.h> |
| #include <netdb.h> |
| ],[ |
| tmp_gethostbyname_r="proto_declared" |
| ],[ |
| AC_EGREP_CPP([gethostbyname_r],[ |
| #define _REENTRANT |
| #include <sys/types.h> |
| #include <netdb.h> |
| ],[ |
| tmp_gethostbyname_r="proto_needs_reentrant" |
| tmp_need_reentrant="yes" |
| ]) |
| ]) |
| fi |
| ]) |
| |
| |
| dnl CURL_CHECK_NEED_REENTRANT_GETPROTOBYNAME_R |
| dnl ------------------------------------------------- |
| dnl Checks if the preprocessor _REENTRANT definition |
| dnl makes function getprotobyname_r compiler visible. |
| |
| AC_DEFUN([CURL_CHECK_NEED_REENTRANT_GETPROTOBYNAME_R], [ |
| AC_LINK_IFELSE([ |
| AC_LANG_FUNC_LINK_TRY([getprotobyname_r]) |
| ],[ |
| tmp_getprotobyname_r="yes" |
| ],[ |
| tmp_getprotobyname_r="no" |
| ]) |
| if test "$tmp_getprotobyname_r" = "yes"; then |
| AC_EGREP_CPP([getprotobyname_r],[ |
| #include <sys/types.h> |
| #include <netdb.h> |
| ],[ |
| tmp_getprotobyname_r="proto_declared" |
| ],[ |
| AC_EGREP_CPP([getprotobyname_r],[ |
| #define _REENTRANT |
| #include <sys/types.h> |
| #include <netdb.h> |
| ],[ |
| tmp_getprotobyname_r="proto_needs_reentrant" |
| tmp_need_reentrant="yes" |
| ]) |
| ]) |
| fi |
| ]) |
| |
| |
| dnl CURL_CHECK_NEED_REENTRANT_GETSERVBYPORT_R |
| dnl ------------------------------------------------- |
| dnl Checks if the preprocessor _REENTRANT definition |
| dnl makes function getservbyport_r compiler visible. |
| |
| AC_DEFUN([CURL_CHECK_NEED_REENTRANT_GETSERVBYPORT_R], [ |
| AC_LINK_IFELSE([ |
| AC_LANG_FUNC_LINK_TRY([getservbyport_r]) |
| ],[ |
| tmp_getservbyport_r="yes" |
| ],[ |
| tmp_getservbyport_r="no" |
| ]) |
| if test "$tmp_getservbyport_r" = "yes"; then |
| AC_EGREP_CPP([getservbyport_r],[ |
| #include <sys/types.h> |
| #include <netdb.h> |
| ],[ |
| tmp_getservbyport_r="proto_declared" |
| ],[ |
| AC_EGREP_CPP([getservbyport_r],[ |
| #define _REENTRANT |
| #include <sys/types.h> |
| #include <netdb.h> |
| ],[ |
| tmp_getservbyport_r="proto_needs_reentrant" |
| tmp_need_reentrant="yes" |
| ]) |
| ]) |
| fi |
| ]) |
| |
| |
| dnl CURL_CHECK_NEED_REENTRANT_FUNCTIONS_R |
| dnl ------------------------------------------------- |
| dnl Checks if the preprocessor _REENTRANT definition |
| dnl makes several _r functions compiler visible. |
| dnl Internal macro for CURL_CONFIGURE_REENTRANT. |
| |
| AC_DEFUN([CURL_CHECK_NEED_REENTRANT_FUNCTIONS_R], [ |
| if test "$tmp_need_reentrant" = "no"; then |
| CURL_CHECK_NEED_REENTRANT_GMTIME_R |
| fi |
| if test "$tmp_need_reentrant" = "no"; then |
| CURL_CHECK_NEED_REENTRANT_LOCALTIME_R |
| fi |
| if test "$tmp_need_reentrant" = "no"; then |
| CURL_CHECK_NEED_REENTRANT_STRERROR_R |
| fi |
| if test "$tmp_need_reentrant" = "no"; then |
| CURL_CHECK_NEED_REENTRANT_STRTOK_R |
| fi |
| if test "$tmp_need_reentrant" = "no"; then |
| CURL_CHECK_NEED_REENTRANT_INET_NTOA_R |
| fi |
| if test "$tmp_need_reentrant" = "no"; then |
| CURL_CHECK_NEED_REENTRANT_GETHOSTBYADDR_R |
| fi |
| if test "$tmp_need_reentrant" = "no"; then |
| CURL_CHECK_NEED_REENTRANT_GETHOSTBYNAME_R |
| fi |
| if test "$tmp_need_reentrant" = "no"; then |
| CURL_CHECK_NEED_REENTRANT_GETPROTOBYNAME_R |
| fi |
| if test "$tmp_need_reentrant" = "no"; then |
| CURL_CHECK_NEED_REENTRANT_GETSERVBYPORT_R |
| fi |
| ]) |
| |
| |
| dnl CURL_CHECK_NEED_REENTRANT_SYSTEM |
| dnl ------------------------------------------------- |
| dnl Checks if the preprocessor _REENTRANT definition |
| dnl must be unconditionally done for this platform. |
| dnl Internal macro for CURL_CONFIGURE_REENTRANT. |
| |
| AC_DEFUN([CURL_CHECK_NEED_REENTRANT_SYSTEM], [ |
| case $host_os in |
| solaris*) |
| tmp_need_reentrant="yes" |
| ;; |
| *) |
| tmp_need_reentrant="no" |
| ;; |
| esac |
| ]) |
| |
| |
| 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 |
| dnl after this will execute with preprocessor symbol |
| dnl _REENTRANT defined. This macro also ensures that |
| dnl the generated config file defines NEED_REENTRANT |
| dnl and that in turn curl_setup.h will define _REENTRANT. |
| dnl Internal macro for CURL_CONFIGURE_REENTRANT. |
| |
| AC_DEFUN([CURL_CONFIGURE_FROM_NOW_ON_WITH_REENTRANT], [ |
| AC_DEFINE(NEED_REENTRANT, 1, |
| [Define to 1 if _REENTRANT preprocessor symbol must be defined.]) |
| cat >>confdefs.h <<_EOF |
| #ifndef _REENTRANT |
| # define _REENTRANT |
| #endif |
| _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 curl_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 |
| 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 to make visible to |
| dnl the compiler a set of *_r functions. Finally, if |
| dnl _REENTRANT 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_REENTRANT], [ |
| AC_PREREQ([2.50])dnl |
| # |
| AC_MSG_CHECKING([if _REENTRANT is already defined]) |
| AC_COMPILE_IFELSE([ |
| AC_LANG_PROGRAM([[ |
| ]],[[ |
| #ifdef _REENTRANT |
| int dummy=1; |
| #else |
| force compilation error |
| #endif |
| ]]) |
| ],[ |
| AC_MSG_RESULT([yes]) |
| tmp_reentrant_initially_defined="yes" |
| ],[ |
| AC_MSG_RESULT([no]) |
| tmp_reentrant_initially_defined="no" |
| ]) |
| # |
| if test "$tmp_reentrant_initially_defined" = "no"; then |
| AC_MSG_CHECKING([if _REENTRANT is actually needed]) |
| CURL_CHECK_NEED_REENTRANT_SYSTEM |
| if test "$tmp_need_reentrant" = "no"; then |
| CURL_CHECK_NEED_REENTRANT_ERRNO |
| fi |
| if test "$tmp_need_reentrant" = "no"; then |
| CURL_CHECK_NEED_REENTRANT_FUNCTIONS_R |
| fi |
| if test "$tmp_need_reentrant" = "yes"; then |
| AC_MSG_RESULT([yes]) |
| else |
| AC_MSG_RESULT([no]) |
| fi |
| fi |
| # |
| AC_MSG_CHECKING([if _REENTRANT is onwards defined]) |
| if test "$tmp_reentrant_initially_defined" = "yes" || |
| test "$tmp_need_reentrant" = "yes"; then |
| CURL_CONFIGURE_FROM_NOW_ON_WITH_REENTRANT |
| AC_MSG_RESULT([yes]) |
| else |
| AC_MSG_RESULT([no]) |
| fi |
| # |
| ]) |
| |
| |
| 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 |
| # |
| ]) |