5
5
from setuptools import Distribution
6
6
from setuptools .command .sdist import sdist
7
7
from setuptools .extension import Extension
8
+ import subprocess
8
9
import platform
9
10
import re
10
11
import sys
28
29
file = sys .stderr )
29
30
SOURCE_EXT = 'c'
30
31
31
- get_output = None
32
32
33
- try :
34
- import commands
35
- get_output = commands .getoutput
36
- except ImportError :
37
- import subprocess
33
+ def get_output (* args , ** kwargs ):
34
+ res = subprocess .check_output (* args , shell = True , ** kwargs )
35
+ decoded = res .decode ('utf-8' )
36
+ return decoded .strip ()
38
37
39
- def _get_output (* args , ** kwargs ):
40
- res = subprocess .check_output (* args , shell = True , ** kwargs )
41
- decoded = res .decode ('utf-8' )
42
- return decoded .strip ()
43
-
44
- get_output = _get_output
45
38
46
39
# get the compile and link args
47
40
link_args , compile_args = [
@@ -231,14 +224,25 @@ def ext_modules(self):
231
224
del self ._cythonized_ext_modules
232
225
233
226
227
+ def make_extension (name_fmt , module , ** kwargs ):
228
+ """Helper method to remove the repetition in extension declarations."""
229
+ source = name_fmt .replace ('.' , '/' ) % module + '.' + SOURCE_EXT
230
+ if not os .path .exists (source ):
231
+ raise OSError (source )
232
+ return Extension (
233
+ name_fmt % module ,
234
+ extra_link_args = link_args ,
235
+ extra_compile_args = compile_args ,
236
+ library_dirs = library_dirs ,
237
+ libraries = libraries ,
238
+ sources = [source ],
239
+ ** kwargs
240
+ )
241
+
242
+
234
243
# detect support
235
244
def main_file (module ):
236
- return Extension ('gssapi.raw.%s' % module ,
237
- extra_link_args = link_args ,
238
- extra_compile_args = compile_args ,
239
- library_dirs = library_dirs ,
240
- libraries = libraries ,
241
- sources = ['gssapi/raw/%s.%s' % (module , SOURCE_EXT )])
245
+ return make_extension ('gssapi.raw.%s' , module )
242
246
243
247
244
248
ENUM_EXTS = []
@@ -248,43 +252,28 @@ def extension_file(module, canary):
248
252
if ENABLE_SUPPORT_DETECTION and not hasattr (GSSAPI_LIB , canary ):
249
253
print ('Skipping the %s extension because it '
250
254
'is not supported by your GSSAPI implementation...' % module )
251
- return None
252
- else :
253
- enum_ext_path = 'gssapi/raw/_enum_extensions/ext_%s.%s' % (module ,
254
- SOURCE_EXT )
255
- if os .path .exists (enum_ext_path ):
256
- ENUM_EXTS .append (
257
- Extension ('gssapi.raw._enum_extensions.ext_%s' % module ,
258
- extra_link_args = link_args ,
259
- extra_compile_args = compile_args ,
260
- sources = [enum_ext_path ],
261
- library_dirs = library_dirs ,
262
- libraries = libraries ,
263
- include_dirs = ['gssapi/raw/' ]))
264
-
265
- return Extension ('gssapi.raw.ext_%s' % module ,
266
- extra_link_args = link_args ,
267
- extra_compile_args = compile_args ,
268
- library_dirs = library_dirs ,
269
- libraries = libraries ,
270
- sources = ['gssapi/raw/ext_%s.%s' % (module ,
271
- SOURCE_EXT )])
255
+ return
256
+
257
+ try :
258
+ ENUM_EXTS .append (
259
+ make_extension ('gssapi.raw._enum_extensions.ext_%s' , module ,
260
+ include_dirs = ['gssapi/raw/' ])
261
+ )
262
+ except OSError :
263
+ pass
264
+
265
+ return make_extension ('gssapi.raw.ext_%s' , module )
272
266
273
267
274
268
def gssapi_modules (lst ):
275
269
# filter out missing files
276
270
res = [mod for mod in lst if mod is not None ]
277
271
278
272
# add in supported mech files
279
- MECHS_SUPPORTED = os .environ .get ('GSSAPI_MECHS' , 'krb5' ).split (',' )
280
- for mech in MECHS_SUPPORTED :
281
- res .append (Extension ('gssapi.raw.mech_%s' % mech ,
282
- extra_link_args = link_args ,
283
- extra_compile_args = compile_args ,
284
- library_dirs = library_dirs ,
285
- libraries = libraries ,
286
- sources = ['gssapi/raw/mech_%s.%s' % (mech ,
287
- SOURCE_EXT )]))
273
+ res .extend (
274
+ make_extension ('gssapi.raw.mech_%s' , mech )
275
+ for mech in os .environ .get ('GSSAPI_MECHS' , 'krb5' ).split (',' )
276
+ )
288
277
289
278
# add in any present enum extension files
290
279
res .extend (ENUM_EXTS )
0 commit comments