summaryrefslogtreecommitdiffstats
path: root/external/meta-virtualization/recipes-devtools/python/python-m2crypto/m2crypto-Fix-build-with-SWIG-3.0.5.patch
blob: c40859521bac872eba032dccde5bfd22694a90e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
From 8430e7202407fb1a0a104b0decdcc9da9e41a52b Mon Sep 17 00:00:00 2001
From: Jackie Huang <jackie.huang@windriver.com>
Date: Mon, 4 Apr 2016 23:28:15 -0400
Subject: [PATCH] Fix build with SWIG 3.0.5

See analysis and previous patches in
https://github.com/martinpaljak/M2Crypto/issues/60 and
https://github.com/swig/swig/issues/344, in particular this adds the
build machinery to patch
https://github.com/martinpaljak/M2Crypto/issues/60#issuecomment-75735489

Fixes #47

Author: Miloslav Trmac <mitr@redhat.com>

Upstream-Status: Backport

Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
---
 M2Crypto/__init__.py |  4 ++--
 M2Crypto/m2.py       |  2 +-
 SWIG/_lib.i          |  4 ++++
 SWIG/_pkcs7.i        |  1 +
 setup.py             | 24 ++++++++++++++++++++++++
 5 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/M2Crypto/__init__.py b/M2Crypto/__init__.py
index 647e057..280af94 100644
--- a/M2Crypto/__init__.py
+++ b/M2Crypto/__init__.py
@@ -19,7 +19,7 @@ Copyright 2008-2011 Heikki Toivonen. All rights reserved.
 version_info = (0, 22)
 version = '.'.join([str(_v) for _v in version_info])
 
-import __m2crypto
+import _m2crypto
 import m2
 import ASN1
 import AuthCookie
@@ -47,4 +47,4 @@ import m2xmlrpclib
 import threading
 import util
 
-__m2crypto.lib_init()
+_m2crypto.lib_init()
diff --git a/M2Crypto/m2.py b/M2Crypto/m2.py
index e4bb695..822143f 100644
--- a/M2Crypto/m2.py
+++ b/M2Crypto/m2.py
@@ -25,7 +25,7 @@ Portions created by Open Source Applications Foundation (OSAF) are
 Copyright (C) 2004 OSAF. All Rights Reserved.
 """
 
-from __m2crypto import *
+from _m2crypto import *
 lib_init()
 
 
diff --git a/SWIG/_lib.i b/SWIG/_lib.i
index 0d40698..6cc1a44 100644
--- a/SWIG/_lib.i
+++ b/SWIG/_lib.i
@@ -66,6 +66,7 @@ int ssl_verify_callback(int ok, X509_STORE_CTX *ctx) {
     int cret;
     int new_style_callback = 0, warning_raised_exception=0;
     PyGILState_STATE gilstate;
+    PyObject *self = NULL; /* bug in SWIG_NewPointerObj as of 3.0.5 */
 
     ssl = (SSL *)X509_STORE_CTX_get_app_data(ctx);
 
@@ -151,6 +152,7 @@ int ssl_verify_callback(int ok, X509_STORE_CTX *ctx) {
 void ssl_info_callback(const SSL *s, int where, int ret) {
     PyObject *argv, *retval, *_SSL;
     PyGILState_STATE gilstate;
+    PyObject *self = NULL; /* bug in SWIG_NewPointerObj as of 3.0.5 */
 
     gilstate = PyGILState_Ensure();
 
@@ -170,6 +172,7 @@ DH *ssl_set_tmp_dh_callback(SSL *ssl, int is_export, int keylength) {
     PyObject *argv, *ret, *_ssl;
     DH *dh;
     PyGILState_STATE gilstate;
+    PyObject *self = NULL; /* bug in SWIG_NewPointerObj as of 3.0.5 */
 
     gilstate = PyGILState_Ensure();
 
@@ -193,6 +196,7 @@ RSA *ssl_set_tmp_rsa_callback(SSL *ssl, int is_export, int keylength) {
     PyObject *argv, *ret, *_ssl;
     RSA *rsa;
     PyGILState_STATE gilstate;
+    PyObject *self = NULL; /* bug in SWIG_NewPointerObj as of 3.0.5 */
 
     gilstate = PyGILState_Ensure();
 
diff --git a/SWIG/_pkcs7.i b/SWIG/_pkcs7.i
index 22d791a..20dfbaf 100644
--- a/SWIG/_pkcs7.i
+++ b/SWIG/_pkcs7.i
@@ -157,6 +157,7 @@ PyObject *smime_read_pkcs7(BIO *bio) {
     BIO *bcont = NULL;
     PKCS7 *p7;
     PyObject *tuple, *_p7, *_BIO;
+    PyObject *self = NULL; /* bug in SWIG_NewPointerObj as of 3.0.5 */
 
     if (BIO_method_type(bio) == BIO_TYPE_MEM) {
         /* OpenSSL FAQ explains that this is needed for mem BIO to return EOF,
diff --git a/setup.py b/setup.py
index bac6f9f..f59dc18 100644
--- a/setup.py
+++ b/setup.py
@@ -19,6 +19,7 @@ from setuptools.command import build_ext
 
 from distutils.core import Extension
 from distutils.spawn import find_executable
+from distutils.file_util import copy_file
 
 
 class _M2CryptoBuildExt(build_ext.build_ext):
@@ -77,6 +78,15 @@ class _M2CryptoBuildExt(build_ext.build_ext):
                           [opensslIncludeDir, os.path.join(opensslIncludeDir, "openssl")]]
         self.swig_opts.append('-includeall')
         self.swig_opts.append('-modern')
+        self.swig_opts.append('-builtin')
+
+        # These two lines are a workaround for
+        # http://bugs.python.org/issue2624 , hard-coding that we are only
+        # building a single extension with a known path; a proper patch to
+        # distutils would be in the run phase, when extension name and path are
+        # known.
+        self.swig_opts.append('-outdir')
+        self.swig_opts.append(os.path.join(self.build_lib, 'M2Crypto'))
 
         # Fedora does hat tricks.
         if platform.linux_distribution()[0] in ['Fedora', 'CentOS']:
@@ -98,6 +108,20 @@ class _M2CryptoBuildExt(build_ext.build_ext):
 
         self.library_dirs += [os.path.join(self.openssl, opensslLibraryDir)]
 
+    def run(self):
+        '''Overloaded build_ext implementation to allow inplace=1 to work,
+        which is needed for (python setup.py test).'''
+        # This is another workaround for http://bugs.python.org/issue2624 + the
+        # corresponding lack of support in setuptools' test command. Note that
+        # just using self.inplace in finalize_options() above does not work
+        # because swig is not rerun if the __m2crypto.so extension exists.
+        # Again, hard-coding our extension name and location.
+        build_ext.build_ext.run(self)
+        if self.inplace:
+            copy_file(os.path.join(self.build_lib, 'M2Crypto', '_m2crypto.py'),
+                      os.path.join('M2Crypto', '_m2crypto.py'),
+                      verbose=self.verbose, dry_run=self.dry_run)
+
 if sys.platform == 'darwin':
    my_extra_compile_args = ["-Wno-deprecated-declarations"]
 else:
-- 
1.9.1