diff options
Diffstat (limited to 'dev-python/pypy3-bin')
-rw-r--r-- | dev-python/pypy3-bin/files/2.4.0-21_all_distutils_c++.patch | 251 | ||||
-rw-r--r-- | dev-python/pypy3-bin/files/pypy3-2.4.0-libressl.patch | 187 | ||||
-rw-r--r-- | dev-python/pypy3-bin/pypy3-bin-2.4.0-r4.ebuild | 13 |
3 files changed, 448 insertions, 3 deletions
diff --git a/dev-python/pypy3-bin/files/2.4.0-21_all_distutils_c++.patch b/dev-python/pypy3-bin/files/2.4.0-21_all_distutils_c++.patch new file mode 100644 index 000000000000..90525d56aeca --- /dev/null +++ b/dev-python/pypy3-bin/files/2.4.0-21_all_distutils_c++.patch @@ -0,0 +1,251 @@ +http://bugs.python.org/issue1222585 + +--- Lib/distutils/cygwinccompiler.py ++++ Lib/distutils/cygwinccompiler.py +@@ -136,9 +136,13 @@ + self.set_executables(compiler='gcc -mcygwin -O -Wall', + compiler_so='gcc -mcygwin -mdll -O -Wall', + compiler_cxx='g++ -mcygwin -O -Wall', ++ compiler_so_cxx='g++ -mcygwin -mdll -O -Wall', + linker_exe='gcc -mcygwin', + linker_so=('%s -mcygwin %s' % +- (self.linker_dll, shared_option))) ++ (self.linker_dll, shared_option)), ++ linker_exe_cxx='g++ -mcygwin', ++ linker_so_cxx=('%s -mcygwin %s' % ++ (self.linker_dll, shared_option))) + + # cygwin and mingw32 need different sets of libraries + if self.gcc_version == "2.91.57": +@@ -162,8 +166,12 @@ + raise CompileError(msg) + else: # for other files use the C-compiler + try: +- self.spawn(self.compiler_so + cc_args + [src, '-o', obj] + +- extra_postargs) ++ if self.detect_language(src) == 'c++': ++ self.spawn(self.compiler_so_cxx + cc_args + [src, '-o', obj] + ++ extra_postargs) ++ else: ++ self.spawn(self.compiler_so + cc_args + [src, '-o', obj] + ++ extra_postargs) + except DistutilsExecError as msg: + raise CompileError(msg) + +@@ -294,10 +302,15 @@ + self.set_executables(compiler='gcc -mno-cygwin -O -Wall', + compiler_so='gcc -mno-cygwin -mdll -O -Wall', + compiler_cxx='g++ -mno-cygwin -O -Wall', ++ compiler_so_cxx='g++ -mno-cygwin -mdll -O -Wall', + linker_exe='gcc -mno-cygwin', + linker_so='%s -mno-cygwin %s %s' + % (self.linker_dll, shared_option, +- entry_point)) ++ entry_point), ++ linker_exe_cxx='g++ -mno-cygwin', ++ linker_so_cxx='%s -mno-cygwin %s %s' ++ % (self.linker_dll, shared_option, ++ entry_point)) + # Maybe we should also append -mthreads, but then the finished + # dlls need another dll (mingwm10.dll see Mingw32 docs) + # (-mthreads: Support thread-safe exception handling on `Mingw32') +--- Lib/distutils/emxccompiler.py ++++ Lib/distutils/emxccompiler.py +@@ -63,8 +63,12 @@ + # XXX optimization, warnings etc. should be customizable. + self.set_executables(compiler='gcc -Zomf -Zmt -O3 -fomit-frame-pointer -mprobe -Wall', + compiler_so='gcc -Zomf -Zmt -O3 -fomit-frame-pointer -mprobe -Wall', ++ compiler_cxx='g++ -Zomf -Zmt -O3 -fomit-frame-pointer -mprobe -Wall', ++ compiler_so_cxx='g++ -Zomf -Zmt -O3 -fomit-frame-pointer -mprobe -Wall', + linker_exe='gcc -Zomf -Zmt -Zcrtdll', +- linker_so='gcc -Zomf -Zmt -Zcrtdll -Zdll') ++ linker_so='gcc -Zomf -Zmt -Zcrtdll -Zdll', ++ linker_exe_cxx='g++ -Zomf -Zmt -Zcrtdll', ++ linker_so_cxx='g++ -Zomf -Zmt -Zcrtdll -Zdll') + + # want the gcc library statically linked (so that we don't have + # to distribute a version dependent on the compiler we have) +@@ -81,8 +85,12 @@ + raise CompileError(msg) + else: # for other files use the C-compiler + try: +- self.spawn(self.compiler_so + cc_args + [src, '-o', obj] + +- extra_postargs) ++ if self.detect_language(src) == 'c++': ++ self.spawn(self.compiler_so_cxx + cc_args + [src, '-o', obj] + ++ extra_postargs) ++ else: ++ self.spawn(self.compiler_so + cc_args + [src, '-o', obj] + ++ extra_postargs) + except DistutilsExecError as msg: + raise CompileError(msg) + +--- Lib/distutils/sysconfig_cpython.py ++++ Lib/distutils/sysconfig_cpython.py +@@ -170,9 +170,12 @@ + _osx_support.customize_compiler(_config_vars) + _config_vars['CUSTOMIZED_OSX_COMPILER'] = 'True' + +- (cc, cxx, opt, cflags, ccshared, ldshared, shlib_suffix, ar, ar_flags) = \ +- get_config_vars('CC', 'CXX', 'OPT', 'CFLAGS', +- 'CCSHARED', 'LDSHARED', 'SHLIB_SUFFIX', 'AR', 'ARFLAGS') ++ (cc, cxx, ccshared, ldshared, ldcxxshared, shlib_suffix, ar, ar_flags) = \ ++ get_config_vars('CC', 'CXX', 'CCSHARED', 'LDSHARED', 'LDCXXSHARED', ++ 'SHLIB_SUFFIX', 'AR', 'ARFLAGS') ++ ++ cflags = '' ++ cxxflags = '' + + newcc = None + if 'CC' in os.environ: +@@ -181,19 +184,27 @@ + cxx = os.environ['CXX'] + if 'LDSHARED' in os.environ: + ldshared = os.environ['LDSHARED'] ++ if 'LDCXXSHARED' in os.environ: ++ ldcxxshared = os.environ['LDCXXSHARED'] + if 'CPP' in os.environ: + cpp = os.environ['CPP'] + else: + cpp = cc + " -E" # not always + if 'LDFLAGS' in os.environ: + ldshared = ldshared + ' ' + os.environ['LDFLAGS'] ++ ldcxxshared = ldcxxshared + ' ' + os.environ['LDFLAGS'] + if 'CFLAGS' in os.environ: +- cflags = opt + ' ' + os.environ['CFLAGS'] ++ cflags = os.environ['CFLAGS'] + ldshared = ldshared + ' ' + os.environ['CFLAGS'] ++ if 'CXXFLAGS' in os.environ: ++ cxxflags = os.environ['CXXFLAGS'] ++ ldcxxshared = ldcxxshared + ' ' + os.environ['CXXFLAGS'] + if 'CPPFLAGS' in os.environ: + cpp = cpp + ' ' + os.environ['CPPFLAGS'] + cflags = cflags + ' ' + os.environ['CPPFLAGS'] ++ cxxflags = cxxflags + ' ' + os.environ['CPPFLAGS'] + ldshared = ldshared + ' ' + os.environ['CPPFLAGS'] ++ ldcxxshared = ldcxxshared + ' ' + os.environ['CPPFLAGS'] + if 'AR' in os.environ: + ar = os.environ['AR'] + if 'ARFLAGS' in os.environ: +@@ -202,13 +213,17 @@ + archiver = ar + ' ' + ar_flags + + cc_cmd = cc + ' ' + cflags ++ cxx_cmd = cxx + ' ' + cxxflags + compiler.set_executables( + preprocessor=cpp, + compiler=cc_cmd, + compiler_so=cc_cmd + ' ' + ccshared, +- compiler_cxx=cxx, ++ compiler_cxx=cxx_cmd, ++ compiler_so_cxx=cxx_cmd + ' ' + ccshared, + linker_so=ldshared, + linker_exe=cc, ++ linker_so_cxx=ldcxxshared, ++ linker_exe_cxx=cxx, + archiver=archiver) + + compiler.shared_lib_extension = shlib_suffix +--- Lib/distutils/unixccompiler.py ++++ Lib/distutils/unixccompiler.py +@@ -52,14 +52,17 @@ + # are pretty generic; they will probably have to be set by an outsider + # (eg. using information discovered by the sysconfig about building + # Python extensions). +- executables = {'preprocessor' : None, +- 'compiler' : ["cc"], +- 'compiler_so' : ["cc"], +- 'compiler_cxx' : ["cc"], +- 'linker_so' : ["cc", "-shared"], +- 'linker_exe' : ["cc"], +- 'archiver' : ["ar", "-cr"], +- 'ranlib' : None, ++ executables = {'preprocessor' : None, ++ 'compiler' : ["cc"], ++ 'compiler_so' : ["cc"], ++ 'compiler_cxx' : ["c++"], ++ 'compiler_so_cxx' : ["c++"], ++ 'linker_so' : ["cc", "-shared"], ++ 'linker_exe' : ["cc"], ++ 'linker_so_cxx' : ["c++", "-shared"], ++ 'linker_exe_cxx' : ["c++"], ++ 'archiver' : ["ar", "-cr"], ++ 'ranlib' : None, + } + + if sys.platform[:6] == "darwin": +@@ -108,12 +111,19 @@ + + def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts): + compiler_so = self.compiler_so ++ compiler_so_cxx = self.compiler_so_cxx + if sys.platform == 'darwin': + compiler_so = _osx_support.compiler_fixup(compiler_so, + cc_args + extra_postargs) ++ compiler_so_cxx = _osx_support.compiler_fixup(compiler_so_cxx, ++ cc_args + extra_postargs) + try: +- self.spawn(compiler_so + cc_args + [src, '-o', obj] + +- extra_postargs) ++ if self.detect_language(src) == 'c++': ++ self.spawn(compiler_so_cxx + cc_args + [src, '-o', obj] + ++ extra_postargs) ++ else: ++ self.spawn(compiler_so + cc_args + [src, '-o', obj] + ++ extra_postargs) + except DistutilsExecError as msg: + raise CompileError(msg) + +@@ -171,22 +181,16 @@ + ld_args.extend(extra_postargs) + self.mkpath(os.path.dirname(output_filename)) + try: +- if target_desc == CCompiler.EXECUTABLE: +- linker = self.linker_exe[:] ++ if target_lang == "c++": ++ if target_desc == CCompiler.EXECUTABLE: ++ linker = self.linker_exe_cxx[:] ++ else: ++ linker = self.linker_so_cxx[:] + else: +- linker = self.linker_so[:] +- if target_lang == "c++" and self.compiler_cxx: +- # skip over environment variable settings if /usr/bin/env +- # is used to set up the linker's environment. +- # This is needed on OSX. Note: this assumes that the +- # normal and C++ compiler have the same environment +- # settings. +- i = 0 +- if os.path.basename(linker[0]) == "env": +- i = 1 +- while '=' in linker[i]: +- i += 1 +- linker[i] = self.compiler_cxx[i] ++ if target_desc == CCompiler.EXECUTABLE: ++ linker = self.linker_exe[:] ++ else: ++ linker = self.linker_so[:] + + if sys.platform == 'darwin': + linker = _osx_support.compiler_fixup(linker, ld_args) +--- Lib/_osx_support.py ++++ Lib/_osx_support.py +@@ -14,13 +14,13 @@ + # configuration variables that may contain universal build flags, + # like "-arch" or "-isdkroot", that may need customization for + # the user environment +-_UNIVERSAL_CONFIG_VARS = ('CFLAGS', 'LDFLAGS', 'CPPFLAGS', 'BASECFLAGS', +- 'BLDSHARED', 'LDSHARED', 'CC', 'CXX', +- 'PY_CFLAGS', 'PY_LDFLAGS', 'PY_CPPFLAGS', +- 'PY_CORE_CFLAGS') ++_UNIVERSAL_CONFIG_VARS = ('CFLAGS', 'CXXFLAGS', 'LDFLAGS', 'CPPFLAGS', ++ 'BASECFLAGS', 'BLDSHARED', 'LDSHARED', 'LDCXXSHARED', ++ 'CC', 'CXX', 'PY_CFLAGS', 'PY_LDFLAGS', ++ 'PY_CPPFLAGS', 'PY_CORE_CFLAGS') + + # configuration variables that may contain compiler calls +-_COMPILER_CONFIG_VARS = ('BLDSHARED', 'LDSHARED', 'CC', 'CXX') ++_COMPILER_CONFIG_VARS = ('BLDSHARED', 'LDSHARED', 'LDCXXSHARED', 'CC', 'CXX') + + # prefix added to original configuration variable names + _INITPRE = '_OSX_SUPPORT_INITIAL_' diff --git a/dev-python/pypy3-bin/files/pypy3-2.4.0-libressl.patch b/dev-python/pypy3-bin/files/pypy3-2.4.0-libressl.patch new file mode 100644 index 000000000000..5852939c5075 --- /dev/null +++ b/dev-python/pypy3-bin/files/pypy3-2.4.0-libressl.patch @@ -0,0 +1,187 @@ +From 66bef80988c9efe60b61c6bc05f3206b4c3df7e8 Mon Sep 17 00:00:00 2001 +From: hasufell <hasufell@gentoo.org> +Date: Mon, 12 Oct 2015 20:43:50 +0200 +Subject: [PATCH] Add LibreSSL support, patches backported from upstream + +https://bitbucket.org/pypy/pypy/pull-requests/333/deal-with-platforms-without-rand_egd-take/diff +--- + pypy/module/_ssl/interp_ssl.py | 34 +++++++++++++++----------- + pypy/module/_ssl/test/test_ssl.py | 8 +++--- + rpython/rlib/ropenssl.py | 6 ++++- + rpython/rtyper/tool/rffi_platform.py | 12 ++++++--- + rpython/rtyper/tool/test/test_rffi_platform.py | 24 +++++++++++++++++- + 5 files changed, 61 insertions(+), 23 deletions(-) + +diff --git a/pypy/module/_ssl/interp_ssl.py b/pypy/module/_ssl/interp_ssl.py +index 0cac165..f210167 100644 +--- a/pypy/module/_ssl/interp_ssl.py ++++ b/pypy/module/_ssl/interp_ssl.py +@@ -310,20 +310,26 @@ if HAVE_OPENSSL_RAND: + res = libssl_RAND_status() + return space.wrap(res) + +- @unwrap_spec(path=str) +- def RAND_egd(space, path): +- """RAND_egd(path) -> bytes +- +- Queries the entropy gather daemon (EGD) on socket path. Returns number +- of bytes read. Raises socket.sslerror if connection to EGD fails or +- if it does provide enough data to seed PRNG.""" +- with rffi.scoped_str2charp(path) as socket_path: +- bytes = libssl_RAND_egd(socket_path) +- if bytes == -1: +- raise ssl_error(space, +- "EGD connection failed or EGD did not return " +- "enough data to seed the PRNG") +- return space.wrap(bytes) ++ if HAVE_OPENSSL_RAND_EGD: ++ @unwrap_spec(path=str) ++ def RAND_egd(space, path): ++ """RAND_egd(path) -> bytes ++ ++ Queries the entropy gather daemon (EGD) on socket path. Returns number ++ of bytes read. Raises socket.sslerror if connection to EGD fails or ++ if it does provide enough data to seed PRNG.""" ++ with rffi.scoped_str2charp(path) as socket_path: ++ bytes = libssl_RAND_egd(socket_path) ++ if bytes == -1: ++ raise ssl_error(space, ++ "EGD connection failed or EGD did not return " ++ "enough data to seed the PRNG") ++ return space.wrap(bytes) ++ else: ++ # Dummy func for platforms missing RAND_egd(). Most likely LibreSSL. ++ @unwrap_spec(path=str) ++ def RAND_egd(space, path): ++ raise ssl_error(space, "RAND_egd unavailable") + + + class SSLSocket(W_Root): +diff --git a/pypy/module/_ssl/test/test_ssl.py b/pypy/module/_ssl/test/test_ssl.py +index 3204610..9722fd5 100644 +--- a/pypy/module/_ssl/test/test_ssl.py ++++ b/pypy/module/_ssl/test/test_ssl.py +@@ -33,7 +33,8 @@ class AppTestSSL: + assert isinstance(_ssl.OPENSSL_VERSION_INFO, tuple) + assert len(_ssl.OPENSSL_VERSION_INFO) == 5 + assert isinstance(_ssl.OPENSSL_VERSION, str) +- assert 'openssl' in _ssl.OPENSSL_VERSION.lower() ++ lower_version = _ssl.OPENSSL_VERSION.lower() ++ assert 'openssl' in lower_version or "libressl" in lower_version + + def test_RAND_add(self): + import _ssl +@@ -64,8 +65,9 @@ class AppTestSSL: + + def test_sslwrap(self): + import ssl, _socket, sys, gc +- if sys.platform == 'darwin' or 'freebsd' in sys.platform: +- skip("hangs indefinitely on OSX & FreeBSD (also on CPython)") ++ if sys.platform == 'darwin' or 'freebsd' in sys.platform or \ ++ 'openbsd' in sys.platform: ++ skip("hangs indefinitely on OSX & BSD (also on CPython)") + s = _socket.socket() + ss = ssl.wrap_socket(s) + +diff --git a/rpython/rlib/ropenssl.py b/rpython/rlib/ropenssl.py +index c36779d..6fe45d0 100644 +--- a/rpython/rlib/ropenssl.py ++++ b/rpython/rlib/ropenssl.py +@@ -168,6 +168,9 @@ OBJ_NAME = rffi.CArrayPtr(OBJ_NAME_st) + + HAVE_OPENSSL_RAND = OPENSSL_VERSION_NUMBER >= 0x0090500f + HAVE_SSL_CTX_CLEAR_OPTIONS = OPENSSL_VERSION_NUMBER >= 0x009080df ++HAVE_OPENSSL_RAND_EGD = rffi_platform.has('RAND_egd("/")', ++ '#include <openssl/rand.h>', ++ libraries=['ssl', 'crypto']) + + def external(name, argtypes, restype, **kw): + kw['compilation_info'] = eci +@@ -194,7 +197,8 @@ ssl_external('CRYPTO_set_id_callback', + if HAVE_OPENSSL_RAND: + ssl_external('RAND_add', [rffi.CCHARP, rffi.INT, rffi.DOUBLE], lltype.Void) + ssl_external('RAND_status', [], rffi.INT) +- ssl_external('RAND_egd', [rffi.CCHARP], rffi.INT) ++ if HAVE_OPENSSL_RAND_EGD: ++ ssl_external('RAND_egd', [rffi.CCHARP], rffi.INT) + ssl_external('SSL_CTX_new', [SSL_METHOD], SSL_CTX) + ssl_external('SSL_get_SSL_CTX', [SSL], SSL_CTX) + ssl_external('TLSv1_method', [], SSL_METHOD) +diff --git a/rpython/rtyper/tool/rffi_platform.py b/rpython/rtyper/tool/rffi_platform.py +index 1760877..1d56c20 100755 +--- a/rpython/rtyper/tool/rffi_platform.py ++++ b/rpython/rtyper/tool/rffi_platform.py +@@ -17,12 +17,15 @@ from rpython.rlib.rarithmetic import r_uint, r_longlong, r_ulonglong, intmask + # + # Helpers for simple cases + +-def eci_from_header(c_header_source, include_dirs=None): ++def eci_from_header(c_header_source, include_dirs=None, libraries=None): + if include_dirs is None: + include_dirs = [] ++ if libraries is None: ++ libraries = [] + return ExternalCompilationInfo( + post_include_bits=[c_header_source], +- include_dirs=include_dirs ++ include_dirs=include_dirs, ++ libraries=libraries, + ) + + def getstruct(name, c_header_source, interesting_fields): +@@ -75,9 +78,10 @@ def getintegerfunctionresult(function, args=None, c_header_source='', includes=[ + CConfig._compilation_info_.includes = includes + return configure(CConfig)['RESULT'] + +-def has(name, c_header_source, include_dirs=None): ++def has(name, c_header_source, include_dirs=None, libraries=None): + class CConfig: +- _compilation_info_ = eci_from_header(c_header_source, include_dirs) ++ _compilation_info_ = \ ++ eci_from_header(c_header_source, include_dirs, libraries) + HAS = Has(name) + return configure(CConfig)['HAS'] + +diff --git a/rpython/rtyper/tool/test/test_rffi_platform.py b/rpython/rtyper/tool/test/test_rffi_platform.py +index bfa069e..4feae87 100644 +--- a/rpython/rtyper/tool/test/test_rffi_platform.py ++++ b/rpython/rtyper/tool/test/test_rffi_platform.py +@@ -271,12 +271,34 @@ def test_array(): + [("d_name", lltype.FixedSizeArray(rffi.CHAR, 1))]) + assert dirent.c_d_name.length == 32 + +-def test_has(): ++def test_has_0001(): + assert rffi_platform.has("x", "int x = 3;") + assert not rffi_platform.has("x", "") + # has() should also not crash if it is given an invalid #include + assert not rffi_platform.has("x", "#include <some/path/which/cannot/exist>") + ++def test_has_0002(): ++ assert rffi_platform.has("pow", "#include <math.h>", libraries=["m"]) ++ ++def test_has_0003(): ++ """multiple libraries""" ++ assert rffi_platform.has("pow", "#include <math.h>", libraries=["m", "c"]) ++ ++def test_has_0004(): ++ """bogus symbol name""" ++ assert not rffi_platform.has("pow", "#include <math.h>", ++ libraries=["boguslibname"]) ++ ++def test_has_0005(): ++ """bogus symbol name and lib name""" ++ assert not rffi_platform.has("bogus_symbol_name", "#include <math.h>", ++ libraries=["boguslibname"]) ++ ++def test_has_0006(): ++ """missing include""" ++ assert not rffi_platform.has("pow", "", libraries=["m"]) ++ ++ + def test_verify_eci(): + eci = ExternalCompilationInfo() + rffi_platform.verify_eci(eci) +-- +2.6.1 + diff --git a/dev-python/pypy3-bin/pypy3-bin-2.4.0-r4.ebuild b/dev-python/pypy3-bin/pypy3-bin-2.4.0-r4.ebuild index 2a4fa3ea87f5..adee3b6a46d6 100644 --- a/dev-python/pypy3-bin/pypy3-bin-2.4.0-r4.ebuild +++ b/dev-python/pypy3-bin/pypy3-bin-2.4.0-r4.ebuild @@ -82,14 +82,21 @@ QA_PREBUILT=" usr/lib*/pypy3/libpypy-c.so" src_prepare() { - epatch "${FILESDIR}/4.0.0-gentoo-path.patch" \ - "${FILESDIR}/1.9-distutils.unixccompiler.UnixCCompiler.runtime_library_dir_option.patch" \ - "${FILESDIR}/2.4.0-ncurses6.patch" + epatch \ + "${FILESDIR}/4.0.0-gentoo-path.patch" \ + "${FILESDIR}/1.9-distutils.unixccompiler.UnixCCompiler.runtime_library_dir_option.patch" + epatch "${FILESDIR}/2.4.0-ncurses6.patch" + epatch "${FILESDIR}"/pypy3-2.4.0-libressl.patch sed -e "s^@EPREFIX@^${EPREFIX}^" \ -e "s^@libdir@^$(get_libdir)^" \ -i lib-python/3/distutils/command/install.py || die + # apply CPython stdlib patches + pushd lib-python/3 > /dev/null || die + epatch "${FILESDIR}"/2.4.0-21_all_distutils_c++.patch + popd > /dev/null || die + epatch_user } |