Add wxUSE_COMPILER_TLS to allow disabling compiler TLS support.

Compiler TLS support is broken under Win32/MSVC when used for a code which is
part of a dynamically loaded DLL, so allow disabling it.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71792 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2012-06-17 21:34:47 +00:00
parent 233f786e8e
commit b33e9f4031
14 changed files with 113 additions and 4 deletions

7
configure vendored
View File

@ -32030,7 +32030,7 @@ EOF
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; } ; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
ax_gcc_version_option=yes
@ -32038,7 +32038,7 @@ $as_echo "yes" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
ax_gcc_version_option=no
@ -32509,6 +32509,9 @@ done
fi
$as_echo "#define wxUSE_COMPILER_TLS 1" >>confdefs.h
if test "$wxUSE_THREADS" = "yes"; then
$as_echo "#define wxUSE_THREADS 1" >>confdefs.h

View File

@ -5226,6 +5226,10 @@ dnl AC_CHECK_FUNC(getaddrinfo, AC_DEFINE(HAVE_GETADDRINFO), [
dnl ]
dnl )
dnl This is currently always defined under Unix, there is no reason to ever
dnl disable compiler TLS support there.
AC_DEFINE(wxUSE_COMPILER_TLS)
if test "$wxUSE_THREADS" = "yes"; then
AC_DEFINE(wxUSE_THREADS)

View File

@ -92,6 +92,7 @@ library:
@itemdef{wxUSE_COLOURPICKERCTRL, Use wxColourPickerCtrl class.}
@itemdef{wxUSE_COMBOBOX, Use wxComboBox class.}
@itemdef{wxUSE_COMBOCTRL, Use wxComboCtrl class.}
@itemdef{wxUSE_COMPILER_TLS, Can be set to 0 to prevent using compile thread-specific variables support.}
@itemdef{wxUSE_CONFIG, Use wxConfig and related classes.}
@itemdef{wxUSE_CONFIG_NATIVE, When enabled use native OS configuration instead of the wxFileConfig class.}
@itemdef{wxUSE_CONSOLE_EVENTLOOP, Enable event loop in console programs.}

View File

@ -92,6 +92,14 @@
# endif
#endif /* wxUSE_ANY */
#ifndef wxUSE_COMPILER_TLS
# ifdef wxABORT_ON_CONFIG_ERROR
# error "wxUSE_COMPILER_TLS must be defined, please read comment near the top of this file."
# else
# define wxUSE_COMPILER_TLS 0
# endif
#endif /* !defined(wxUSE_COMPILER_TLS) */
#ifndef wxUSE_CONSOLE_EVENTLOOP
# ifdef wxABORT_ON_CONFIG_ERROR
# error "wxUSE_CONSOLE_EVENTLOOP must be defined, please read comment near the top of this file."

View File

@ -267,6 +267,17 @@
// Recommended setting: 1 if you want to support multiple languages
#define wxUSE_PRINTF_POS_PARAMS 1
// Enable the use of compiler-specific thread local storage keyword, if any.
// This is used for wxTLS_XXX() macros implementation and normally should use
// the compiler-provided support as it's simpler and more efficient, but must
// not use it if wxWidgets is used in a dynamically loaded Win32 (i.e. using
// LoadLibrary()/GetProcAddress()) as this triggers a bug in compiler TLS
// support that results in crashes when any TLS variables are used. So if you
// are building a Win32 DLL using wxWidgets that can be loaded dynamically, set
// this to 0.
//
// Default is 1, but set to 0 if the scenario above is applicable.
#define wxUSE_COMPILER_TLS 1
// ----------------------------------------------------------------------------
// Interoperability with the standard library.

View File

@ -267,6 +267,17 @@
// Recommended setting: 1 if you want to support multiple languages
#define wxUSE_PRINTF_POS_PARAMS 1
// Enable the use of compiler-specific thread local storage keyword, if any.
// This is used for wxTLS_XXX() macros implementation and normally should use
// the compiler-provided support as it's simpler and more efficient, but must
// not use it if wxWidgets is used in a dynamically loaded Win32 (i.e. using
// LoadLibrary()/GetProcAddress()) as this triggers a bug in compiler TLS
// support that results in crashes when any TLS variables are used. So if you
// are building a Win32 DLL using wxWidgets that can be loaded dynamically, set
// this to 0.
//
// Default is 1, but set to 0 if the scenario above is applicable.
#define wxUSE_COMPILER_TLS 1
// ----------------------------------------------------------------------------
// Interoperability with the standard library.

View File

@ -267,6 +267,17 @@
// Recommended setting: 1 if you want to support multiple languages
#define wxUSE_PRINTF_POS_PARAMS 1
// Enable the use of compiler-specific thread local storage keyword, if any.
// This is used for wxTLS_XXX() macros implementation and normally should use
// the compiler-provided support as it's simpler and more efficient, but must
// not use it if wxWidgets is used in a dynamically loaded Win32 (i.e. using
// LoadLibrary()/GetProcAddress()) as this triggers a bug in compiler TLS
// support that results in crashes when any TLS variables are used. So if you
// are building a Win32 DLL using wxWidgets that can be loaded dynamically, set
// this to 0.
//
// Default is 1, but set to 0 if the scenario above is applicable.
#define wxUSE_COMPILER_TLS 1
// ----------------------------------------------------------------------------
// Interoperability with the standard library.

View File

@ -267,6 +267,17 @@
// Recommended setting: 1 if you want to support multiple languages
#define wxUSE_PRINTF_POS_PARAMS 1
// Enable the use of compiler-specific thread local storage keyword, if any.
// This is used for wxTLS_XXX() macros implementation and normally should use
// the compiler-provided support as it's simpler and more efficient, but must
// not use it if wxWidgets is used in a dynamically loaded Win32 (i.e. using
// LoadLibrary()/GetProcAddress()) as this triggers a bug in compiler TLS
// support that results in crashes when any TLS variables are used. So if you
// are building a Win32 DLL using wxWidgets that can be loaded dynamically, set
// this to 0.
//
// Default is 1, but set to 0 if the scenario above is applicable.
#define wxUSE_COMPILER_TLS 1
// ----------------------------------------------------------------------------
// Interoperability with the standard library.

View File

@ -267,6 +267,17 @@
// Recommended setting: 1 if you want to support multiple languages
#define wxUSE_PRINTF_POS_PARAMS 1
// Enable the use of compiler-specific thread local storage keyword, if any.
// This is used for wxTLS_XXX() macros implementation and normally should use
// the compiler-provided support as it's simpler and more efficient, but must
// not use it if wxWidgets is used in a dynamically loaded Win32 (i.e. using
// LoadLibrary()/GetProcAddress()) as this triggers a bug in compiler TLS
// support that results in crashes when any TLS variables are used. So if you
// are building a Win32 DLL using wxWidgets that can be loaded dynamically, set
// this to 0.
//
// Default is 1, but set to 0 if the scenario above is applicable.
#define wxUSE_COMPILER_TLS 1
// ----------------------------------------------------------------------------
// Interoperability with the standard library.

View File

@ -268,6 +268,17 @@
// Recommended setting: 1 if you want to support multiple languages
#define wxUSE_PRINTF_POS_PARAMS 1
// Enable the use of compiler-specific thread local storage keyword, if any.
// This is used for wxTLS_XXX() macros implementation and normally should use
// the compiler-provided support as it's simpler and more efficient, but must
// not use it if wxWidgets is used in a dynamically loaded Win32 (i.e. using
// LoadLibrary()/GetProcAddress()) as this triggers a bug in compiler TLS
// support that results in crashes when any TLS variables are used. So if you
// are building a Win32 DLL using wxWidgets that can be loaded dynamically, set
// this to 0.
//
// Default is 1, but set to 0 if the scenario above is applicable.
#define wxUSE_COMPILER_TLS 1
// ----------------------------------------------------------------------------
// Interoperability with the standard library.

View File

@ -263,6 +263,17 @@
// Recommended setting: 1 if you want to support multiple languages
#define wxUSE_PRINTF_POS_PARAMS 1
// Enable the use of compiler-specific thread local storage keyword, if any.
// This is used for wxTLS_XXX() macros implementation and normally should use
// the compiler-provided support as it's simpler and more efficient, but must
// not use it if wxWidgets is used in a dynamically loaded Win32 (i.e. using
// LoadLibrary()/GetProcAddress()) as this triggers a bug in compiler TLS
// support that results in crashes when any TLS variables are used. So if you
// are building a Win32 DLL using wxWidgets that can be loaded dynamically, set
// this to 0.
//
// Default is 1, but set to 0 if the scenario above is applicable.
#define wxUSE_COMPILER_TLS 1
// ----------------------------------------------------------------------------
// Interoperability with the standard library.

View File

@ -22,10 +22,13 @@
#if !wxUSE_THREADS
#define wxHAS_COMPILER_TLS
#define wxTHREAD_SPECIFIC_DECL
// otherwise try to find the compiler-specific way to handle TLS unless
// explicitly disabled by setting wxUSE_COMPILER_TLS to 0 (it is 1 by default).
#elif wxUSE_COMPILER_TLS
// __thread keyword is not supported correctly by MinGW, at least in some
// configurations, see http://sourceforge.net/support/tracker.php?aid=2837047
// and when in doubt we prefer to not use it at all.
#elif defined(HAVE___THREAD_KEYWORD) && !defined(__MINGW32__)
#if defined(HAVE___THREAD_KEYWORD) && !defined(__MINGW32__)
#define wxHAS_COMPILER_TLS
#define wxTHREAD_SPECIFIC_DECL __thread
// MSVC has its own version which might be supported by some other Windows
@ -33,7 +36,8 @@
#elif wxCHECK_VISUALC_VERSION(7)
#define wxHAS_COMPILER_TLS
#define wxTHREAD_SPECIFIC_DECL __declspec(thread)
#endif
#endif // compilers
#endif // wxUSE_COMPILER_TLS
// ----------------------------------------------------------------------------
// define wxTLS_TYPE()

View File

@ -266,6 +266,17 @@
// Recommended setting: 1 if you want to support multiple languages
#define wxUSE_PRINTF_POS_PARAMS 1
// Enable the use of compiler-specific thread local storage keyword, if any.
// This is used for wxTLS_XXX() macros implementation and normally should use
// the compiler-provided support as it's simpler and more efficient, but must
// not use it if wxWidgets is used in a dynamically loaded Win32 (i.e. using
// LoadLibrary()/GetProcAddress()) as this triggers a bug in compiler TLS
// support that results in crashes when any TLS variables are used. So if you
// are building a Win32 DLL using wxWidgets that can be loaded dynamically, set
// this to 0.
//
// Default is 1, but set to 0 if the scenario above is applicable.
#define wxUSE_COMPILER_TLS 1
// ----------------------------------------------------------------------------
// Interoperability with the standard library.

View File

@ -202,6 +202,7 @@
#define wxUSE_PRINTF_POS_PARAMS 0
#define wxUSE_COMPILER_TLS 0
#define wxUSE_STL 0