summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/ac-macros/misc.m417
-rw-r--r--configure.in27
-rw-r--r--extra/yassl/src/Makefile.am1
-rw-r--r--extra/yassl/src/yassl_imp.cpp2
-rw-r--r--extra/yassl/src/yassl_int.cpp4
-rw-r--r--extra/yassl/taocrypt/include/runtime.hpp7
-rw-r--r--extra/yassl/taocrypt/src/Makefile.am1
-rw-r--r--extra/yassl/taocrypt/src/integer.cpp15
-rw-r--r--extra/yassl/taocrypt/src/rsa.cpp32
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