diff options
-rw-r--r-- | config/ac-macros/misc.m4 | 17 | ||||
-rw-r--r-- | configure.in | 27 | ||||
-rw-r--r-- | extra/yassl/src/Makefile.am | 1 | ||||
-rw-r--r-- | extra/yassl/src/yassl_imp.cpp | 2 | ||||
-rw-r--r-- | extra/yassl/src/yassl_int.cpp | 4 | ||||
-rw-r--r-- | extra/yassl/taocrypt/include/runtime.hpp | 7 | ||||
-rw-r--r-- | extra/yassl/taocrypt/src/Makefile.am | 1 | ||||
-rw-r--r-- | extra/yassl/taocrypt/src/integer.cpp | 15 | ||||
-rw-r--r-- | extra/yassl/taocrypt/src/rsa.cpp | 32 |
9 files changed, 52 insertions, 54 deletions
diff --git a/config/ac-macros/misc.m4 b/config/ac-macros/misc.m4 index d75dedafa2a..8c961ef84e0 100644 --- a/config/ac-macros/misc.m4 +++ b/config/ac-macros/misc.m4 @@ -693,3 +693,20 @@ dnl --------------------------------------------------------------------------- dnl END OF MYSQL_CHECK_BIG_TABLES SECTION dnl --------------------------------------------------------------------------- +dnl MYSQL_NEEDS_MYSYS_NEW +AC_DEFUN([MYSQL_NEEDS_MYSYS_NEW], +[AC_CACHE_CHECK([needs mysys_new helpers], mysql_use_mysys_new, +[ +AC_LANG_PUSH(C++) +AC_TRY_LINK([], [ +class A { public: int b; }; A *a=new A; a->b=10; delete a; +], mysql_use_mysys_new=no, mysql_use_mysys_new=yes) +AC_LANG_POP(C++) +]) +if test "$mysql_use_mysys_new" = "yes" +then + AC_DEFINE([USE_MYSYS_NEW], [1], [Needs to use mysys_new helpers]) +fi +]) + + diff --git a/configure.in b/configure.in index 8b0a0ddeb56..dfed8dda43e 100644 --- a/configure.in +++ b/configure.in @@ -336,32 +336,6 @@ AC_SUBST(LD) AC_SUBST(INSTALL_SCRIPT) export CC CXX CFLAGS LD LDFLAGS AR -if test "$GXX" = "yes" -then - # mysqld requires -fno-implicit-templates. - # Disable exceptions as they seams to create problems with gcc and threads. - # mysqld doesn't use run-time-type-checking, so we disable it. - CXXFLAGS="$CXXFLAGS -fno-implicit-templates -fno-exceptions -fno-rtti" - - CXX_VERNO=`echo $CXX_VERSION | sed -e 's/[[^0-9. ]]//g; s/^ *//g; s/ .*//g'` - case "$CXX_VERNO" in - 3.*) - USE_MYSYS_NEW="-DUSE_MYSYS_NEW" # yassl needs it - if echo $CXX | grep gcc > /dev/null 2>&1 - then - # If you are using 'gcc' 3.0 (not g++) to compile C++ programs on Linux, - # we will gets some problems when linking static programs. - # The following code is used to fix this problem. - CXXFLAGS="$CXXFLAGS $USE_MYSYS_NEW" - AC_MSG_WARN([Using MYSYS_NEW for static linking with gcc]) - fi - ;; - *) - USE_MYSYS_NEW="" - ;; - esac - AC_SUBST(USE_MYSYS_NEW) -fi # Avoid bug in fcntl on some versions of linux AC_MSG_CHECKING("if we should use 'skip-locking' as default for $target_os") @@ -1730,6 +1704,7 @@ AC_TYPE_OFF_T AC_STRUCT_ST_RDEV AC_HEADER_TIME AC_STRUCT_TM +MYSQL_NEEDS_MYSYS_NEW # AC_CHECK_SIZEOF return 0 when it does not find the size of a # type. We want a error instead. AC_CHECK_SIZEOF(char, 1) diff --git a/extra/yassl/src/Makefile.am b/extra/yassl/src/Makefile.am index 9dd8a09b00b..3dbd7bac03a 100644 --- a/extra/yassl/src/Makefile.am +++ b/extra/yassl/src/Makefile.am @@ -5,4 +5,3 @@ libyassl_a_SOURCES = buffer.cpp cert_wrapper.cpp crypto_wrapper.cpp \ handshake.cpp lock.cpp log.cpp socket_wrapper.cpp ssl.cpp \ timer.cpp yassl_imp.cpp yassl_error.cpp yassl_int.cpp EXTRA_DIST = ../include/*.hpp ../include/openssl/*.h -AM_CXXFLAGS=@USE_MYSYS_NEW@ diff --git a/extra/yassl/src/yassl_imp.cpp b/extra/yassl/src/yassl_imp.cpp index ba2fbd8cc07..c1485cce986 100644 --- a/extra/yassl/src/yassl_imp.cpp +++ b/extra/yassl/src/yassl_imp.cpp @@ -2092,6 +2092,7 @@ void InitClientKeyFactory(ClientKeyFactory& ckf) } // namespace #ifdef __GNUC__ +namespace mySTL { template class mySTL::list<unsigned char*>; template yaSSL::del_ptr_zero mySTL::for_each(mySTL::list<unsigned char*>::iterator, mySTL::list<unsigned char*>::iterator, yaSSL::del_ptr_zero); template mySTL::pair<int, yaSSL::Message* (*)()>* mySTL::uninit_copy<mySTL::pair<int, yaSSL::Message* (*)()>*, mySTL::pair<int, yaSSL::Message* (*)()>*>(mySTL::pair<int, yaSSL::Message* (*)()>*, mySTL::pair<int, yaSSL::Message* (*)()>*, mySTL::pair<int, yaSSL::Message* (*)()>*); @@ -2112,5 +2113,6 @@ template yaSSL::del_ptr_zero mySTL::for_each<mySTL::list<yaSSL::SSL_SESSION*>::i template yaSSL::del_ptr_zero mySTL::for_each<mySTL::list<yaSSL::input_buffer*>::iterator, yaSSL::del_ptr_zero>(mySTL::list<yaSSL::input_buffer*>::iterator, mySTL::list<yaSSL::input_buffer*>::iterator, yaSSL::del_ptr_zero); template yaSSL::del_ptr_zero mySTL::for_each<mySTL::list<yaSSL::output_buffer*>::iterator, yaSSL::del_ptr_zero>(mySTL::list<yaSSL::output_buffer*>::iterator, mySTL::list<yaSSL::output_buffer*>::iterator, yaSSL::del_ptr_zero); template yaSSL::del_ptr_zero mySTL::for_each<mySTL::list<yaSSL::x509*>::iterator, yaSSL::del_ptr_zero>(mySTL::list<yaSSL::x509*>::iterator, mySTL::list<yaSSL::x509*>::iterator, yaSSL::del_ptr_zero); +} #endif diff --git a/extra/yassl/src/yassl_int.cpp b/extra/yassl/src/yassl_int.cpp index 5f918b0a356..4cc2b85fccc 100644 --- a/extra/yassl/src/yassl_int.cpp +++ b/extra/yassl/src/yassl_int.cpp @@ -1951,7 +1951,7 @@ char* X509_NAME::GetName() X509::X509(const char* i, size_t iSz, const char* s, size_t sSz) : issuer_(i, iSz), subject_(s, sSz) {} - + X509_NAME* X509::GetIssuer() { @@ -1967,7 +1967,9 @@ X509_NAME* X509::GetSubject() } // namespace #ifdef __GNUC__ +namespace mySTL { template yaSSL::yassl_int_cpp_local1::SumData mySTL::for_each<mySTL::list<yaSSL::input_buffer*>::iterator, yaSSL::yassl_int_cpp_local1::SumData>(mySTL::list<yaSSL::input_buffer*>::iterator, mySTL::list<yaSSL::input_buffer*>::iterator, yaSSL::yassl_int_cpp_local1::SumData); template yaSSL::yassl_int_cpp_local1::SumBuffer mySTL::for_each<mySTL::list<yaSSL::output_buffer*>::iterator, yaSSL::yassl_int_cpp_local1::SumBuffer>(mySTL::list<yaSSL::output_buffer*>::iterator, mySTL::list<yaSSL::output_buffer*>::iterator, yaSSL::yassl_int_cpp_local1::SumBuffer); template mySTL::list<yaSSL::SSL_SESSION*>::iterator mySTL::find_if<mySTL::list<yaSSL::SSL_SESSION*>::iterator, yaSSL::yassl_int_cpp_local2::sess_match>(mySTL::list<yaSSL::SSL_SESSION*>::iterator, mySTL::list<yaSSL::SSL_SESSION*>::iterator, yaSSL::yassl_int_cpp_local2::sess_match); +} #endif diff --git a/extra/yassl/taocrypt/include/runtime.hpp b/extra/yassl/taocrypt/include/runtime.hpp index 5b9e13df644..e2c04af44f4 100644 --- a/extra/yassl/taocrypt/include/runtime.hpp +++ b/extra/yassl/taocrypt/include/runtime.hpp @@ -25,10 +25,11 @@ -#if !defined(yaSSL_NEW_HPP) && defined(USE_MYSYS_NEW) +#if !defined(yaSSL_NEW_HPP) && defined(__GNUC__) #define yaSSL_NEW_HPP +#if __GNUC__ > 2 #include <cstdlib> @@ -66,4 +67,6 @@ static int __cxa_pure_virtual() } // extern "C" -#endif // yaSSL_NEW_HPP +#endif // __GNUC__ > 2 +#endif // yaSSL_NEW_HPP && __GNUC__ + diff --git a/extra/yassl/taocrypt/src/Makefile.am b/extra/yassl/taocrypt/src/Makefile.am index 4bf901b76ea..b00e6081c23 100644 --- a/extra/yassl/taocrypt/src/Makefile.am +++ b/extra/yassl/taocrypt/src/Makefile.am @@ -5,4 +5,3 @@ libtaocrypt_a_SOURCES = aes.cpp aestables.cpp algebra.cpp arc4.cpp asn.cpp \ coding.cpp dh.cpp des.cpp dsa.cpp file.cpp hash.cpp integer.cpp \ md2.cpp md5.cpp misc.cpp random.cpp ripemd.cpp rsa.cpp sha.cpp EXTRA_DIST = ../include/*.hpp -AM_CXXFLAGS=@USE_MYSYS_NEW@ diff --git a/extra/yassl/taocrypt/src/integer.cpp b/extra/yassl/taocrypt/src/integer.cpp index 20a968d78e3..c95170722ae 100644 --- a/extra/yassl/taocrypt/src/integer.cpp +++ b/extra/yassl/taocrypt/src/integer.cpp @@ -4168,16 +4168,13 @@ Integer CRT(const Integer &xp, const Integer &p, const Integer &xq, return p * (u * (xq-xp) % q) + xp; } - - -} // namespace - #ifdef __GNUC__ -template TaoCrypt::Integer TaoCrypt::StringToInteger<char>(char const*); -template TaoCrypt::Integer TaoCrypt::StringToInteger<wchar_t>(wchar_t const*); -template class TaoCrypt::EuclideanDomainOf<TaoCrypt::Integer>; -template class TaoCrypt::AbstractEuclideanDomain<TaoCrypt::Integer>; -template unsigned int TaoCrypt::DivideThreeWordsByTwo<unsigned int, TaoCrypt::DWord>(unsigned int*, unsigned int, unsigned int, TaoCrypt::DWord*); +template Integer StringToInteger<char>(char const*); +template Integer StringToInteger<wchar_t>(wchar_t const*); +template class EuclideanDomainOf<Integer>; +template class AbstractEuclideanDomain<Integer>; +template unsigned int DivideThreeWordsByTwo<unsigned int, DWord>(unsigned int*, unsigned int, unsigned int, DWord*); #endif +} // namespace diff --git a/extra/yassl/taocrypt/src/rsa.cpp b/extra/yassl/taocrypt/src/rsa.cpp index da8cd697a7c..ecb2288f1c2 100644 --- a/extra/yassl/taocrypt/src/rsa.cpp +++ b/extra/yassl/taocrypt/src/rsa.cpp @@ -211,24 +211,28 @@ word32 SSL_Decrypt(const RSA_PublicKey& key, const byte* sig, byte* plain) lengths.PaddedBlockBitLength(), plain); } +#ifdef __GNUC__ +template AllocatorWithCleanup<unsigned char>::pointer StdReallocate<unsigned char, AllocatorWithCleanup<unsigned char> >(AllocatorWithCleanup<unsigned char>&, unsigned char*, AllocatorWithCleanup<unsigned char>::size_type, AllocatorWithCleanup<unsigned char>::size_type, bool); +template AllocatorWithCleanup<unsigned int>::pointer StdReallocate<unsigned int, AllocatorWithCleanup<unsigned int> >(AllocatorWithCleanup<unsigned int>&, unsigned int*, AllocatorWithCleanup<unsigned int>::size_type, AllocatorWithCleanup<unsigned int>::size_type, bool); +template class AbstractGroup<Integer>; +template class AbstractRing<Integer>; +template class RSA_Decryptor<RSA_BlockType2>; +template class RSA_Encryptor<RSA_BlockType1>; +template class RSA_Encryptor<RSA_BlockType2>; +#endif } // namespace #ifdef __GNUC__ -template TaoCrypt::AllocatorWithCleanup<unsigned char>::pointer TaoCrypt::StdReallocate<unsigned char, TaoCrypt::AllocatorWithCleanup<unsigned char> >(TaoCrypt::AllocatorWithCleanup<unsigned char>&, unsigned char*, TaoCrypt::AllocatorWithCleanup<unsigned char>::size_type, TaoCrypt::AllocatorWithCleanup<unsigned char>::size_type, bool); -template TaoCrypt::AllocatorWithCleanup<unsigned int>::pointer TaoCrypt::StdReallocate<unsigned int, TaoCrypt::AllocatorWithCleanup<unsigned int> >(TaoCrypt::AllocatorWithCleanup<unsigned int>&, unsigned int*, TaoCrypt::AllocatorWithCleanup<unsigned int>::size_type, TaoCrypt::AllocatorWithCleanup<unsigned int>::size_type, bool); -template TaoCrypt::Integer* mySTL::uninit_copy<TaoCrypt::Integer*, TaoCrypt::Integer*>(TaoCrypt::Integer*, TaoCrypt::Integer*, TaoCrypt::Integer*); -template TaoCrypt::Integer* mySTL::uninit_fill_n<TaoCrypt::Integer*, unsigned int, TaoCrypt::Integer>(TaoCrypt::Integer*, unsigned int, TaoCrypt::Integer const&); -template TaoCrypt::WindowSlider* mySTL::uninit_copy<TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*>(TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*); -template class TaoCrypt::AbstractGroup<TaoCrypt::Integer>; -template class TaoCrypt::AbstractRing<TaoCrypt::Integer>; -template class TaoCrypt::RSA_Decryptor<TaoCrypt::RSA_BlockType2>; -template class TaoCrypt::RSA_Encryptor<TaoCrypt::RSA_BlockType1>; -template class TaoCrypt::RSA_Encryptor<TaoCrypt::RSA_BlockType2>; -template mySTL::vector<TaoCrypt::Integer>* mySTL::uninit_fill_n<mySTL::vector<TaoCrypt::Integer>*, unsigned int, mySTL::vector<TaoCrypt::Integer> >(mySTL::vector<TaoCrypt::Integer>*, unsigned int, mySTL::vector<TaoCrypt::Integer> const&); -template void mySTL::destroy<TaoCrypt::Integer*>(TaoCrypt::Integer*, TaoCrypt::Integer*); -template void mySTL::destroy<TaoCrypt::WindowSlider*>(TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*); -template void mySTL::destroy<mySTL::vector<TaoCrypt::Integer>*>(mySTL::vector<TaoCrypt::Integer>*, mySTL::vector<TaoCrypt::Integer>*); +namespace mySTL { +template TaoCrypt::Integer* uninit_copy<TaoCrypt::Integer*, TaoCrypt::Integer*>(TaoCrypt::Integer*, TaoCrypt::Integer*, TaoCrypt::Integer*); +template TaoCrypt::Integer* uninit_fill_n<TaoCrypt::Integer*, unsigned int, TaoCrypt::Integer>(TaoCrypt::Integer*, unsigned int, TaoCrypt::Integer const&); +template TaoCrypt::WindowSlider* uninit_copy<TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*>(TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*); +template vector<TaoCrypt::Integer>* uninit_fill_n<vector<TaoCrypt::Integer>*, unsigned int, vector<TaoCrypt::Integer> >(vector<TaoCrypt::Integer>*, unsigned int, vector<TaoCrypt::Integer> const&); +template void destroy<TaoCrypt::Integer*>(TaoCrypt::Integer*, TaoCrypt::Integer*); +template void destroy<TaoCrypt::WindowSlider*>(TaoCrypt::WindowSlider*, TaoCrypt::WindowSlider*); +template void destroy<vector<TaoCrypt::Integer>*>(vector<TaoCrypt::Integer>*, vector<TaoCrypt::Integer>*); +} #endif |