aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-devtools/python/python-m2crypto/0001-M2Crypto-Error-fix.patch
blob: 2a74b68505dbf5e524a02b91ab4ddc3f69066dae (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
159
160
161
162
From 02a24ac541df68033d4efd7e2f8a1b92dc49328d Mon Sep 17 00:00:00 2001
From: Li xin <lixin.fnst@cn.fujitsu.com>
Date: Mon, 27 Jul 2015 05:06:20 +0900
Subject: [PATCH] M2Crypto: Error fix.

After swig upgrade from 3.0.2 to 3.0.6,build the recipes which
depends on python-m2crypto will occur errors like this:
SALT_LEN = m2.PKCS5_SALT_LEN
AttributeError: 'module' object has no attribute 'PKCS5_SALT_LEN'
since python-m2crypto depends on swig-native

Ref:
https://github.com/martinpaljak/M2Crypto/issues/60#issuecomment-75735489

This patch is from:
http://pkgs.fedoraproject.org/cgit/m2crypto.git/tree/m2crypto-0.21.1-swig-3.0.5.patch

Upstream-Status: pending

Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com>
---
 M2Crypto/__init__.py |  4 ++--
 M2Crypto/m2.py       |  2 +-
 SWIG/_lib.i          |  4 ++++
 SWIG/_pkcs7.i        |  1 +
 setup.py             | 26 +++++++++++++++++++++++++-
 5 files changed, 33 insertions(+), 4 deletions(-)

diff --git a/M2Crypto/__init__.py b/M2Crypto/__init__.py
index e7acfe7..02f4d28 100644
--- a/M2Crypto/__init__.py
+++ b/M2Crypto/__init__.py
@@ -19,7 +19,7 @@ Copyright 2008-2011 Heikki Toivonen. All rights reserved.
 version_info = (0, 21, 1)
 version = '.'.join([str(_v) for _v in version_info])
 
-import __m2crypto
+import _m2crypto
 import m2
 import ASN1
 import AuthCookie
@@ -57,4 +57,4 @@ import util
 encrypt=1
 decrypt=0
 
-__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 42dc180..47a53b8 100644
--- a/SWIG/_lib.i
+++ b/SWIG/_lib.i
@@ -100,6 +100,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);
 
@@ -185,6 +186,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();
 
@@ -204,6 +206,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();
 
@@ -227,6 +230,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 174f40a..7bffbfc 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 e7c49eb..b98abe0 100644
--- a/setup.py
+++ b/setup.py
@@ -20,6 +20,7 @@ except ImportError:
     from distutils.command import build_ext
 
 from distutils.core import Extension
+from distutils.file_util import copy_file
 
 
 class _M2CryptoBuildExt(build_ext.build_ext):
@@ -57,7 +58,17 @@ class _M2CryptoBuildExt(build_ext.build_ext):
         self.swig_opts.append('-includeall')
         #self.swig_opts.append('-D__i386__') # Uncomment for early OpenSSL 0.9.7 versions, or on Fedora Core if build fails
         #self.swig_opts.append('-DOPENSSL_NO_EC') # Try uncommenting if you can't build with EC disabled
-        
+        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'))
+
         self.include_dirs += [os.path.join(self.openssl, opensslIncludeDir),
                               os.path.join(os.getcwd(), 'SWIG')]        
             
@@ -71,6 +82,19 @@ 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.version_info < (2,4):
 
-- 
1.8.4.2