-
Notifications
You must be signed in to change notification settings - Fork 0
/
config.py
135 lines (117 loc) · 4.27 KB
/
config.py
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
"""Config on Windows/Unix """
import os, sys, string
from glob import glob
from distutils.core import setup, Extension
from distutils.sysconfig import get_python_inc
huntpaths = ['..', '..\\..', '..\\*', '..\\..\\*']
class Dependency_win:
def __init__(self, name, checkhead, checkinc, lib, define):
self.name = name
self.wildcard = checkhead
self.paths = []
self.path = None
self.inc_dir = None
self.lib_dir = None
self.lib = lib
self.found = 0
self.cflags = ''
self.define= define
self.checkinc=checkinc
def hunt(self):
parent = os.path.abspath('..')
for p in huntpaths:
found = glob(os.path.join(p, self.wildcard))
found.sort() or found.reverse() #reverse sort
for f in found:
if f[:5] == '..'+os.sep+'..' and os.path.abspath(f)[:len(parent)] == parent:
continue
if os.path.isdir(f):
self.paths.append(f)
def choosepath(self):
if not self.paths:
print( 'Path for ', self.name, 'not found.' )
elif len(self.paths) == 1:
self.path = self.paths[0]
print( 'Path for '+self.name+':', self.path )
else:
print( 'Select path for '+self.name+':' )
for i in range(len(self.paths)):
print( ' ', i+1, '=', self.paths[i] )
print( ' ', 0, '= <Nothing>' )
choice = input('Select 0-%s (1=default):' % len(self.paths) )
if not choice: choice = 1
else: choice = int(choice)
if(choice):
self.path = self.paths[choice-1]
def findhunt(self, base, paths, file):
for h in paths:
hh = os.path.join(base, h)
if os.path.isdir(hh):
if os.path.isfile( os.path.join( hh, file )):
return hh.replace('\\', '/')
return base.replace('\\', '/')
def configure(self, inc_hunt, lib_hunt):
self.hunt()
self.choosepath()
if self.path:
self.found = 1
self.inc_dir = self.findhunt(self.path, inc_hunt, self.checkinc)
self.lib_dir = self.findhunt(self.path, lib_hunt, self.lib+ '.lib')
return self
class Dependency_unix:
def __init__(self, name, checkhead, checkinc, lib, define):
self.name = name
self.inc_dir = None
self.lib_dir = None
self.lib = lib
self.found = 0
self.checklib = lib
self.checkinc = checkinc
self.define= define
def configure(self, incdirs, libdirs):
incname = self.checkinc
libname = self.checklib
for dir in incdirs:
path = os.path.join(dir, incname)
if os.path.isfile(path):
self.inc_dir = dir
break
for dir in libdirs:
path1 = os.path.join(dir, libname+ '.a')
path2 = os.path.join(dir, libname+ '.so')
if os.path.isfile(path1):
self.lib_dir = dir
self.lib= self.lib[ 3: ]
break
if os.path.isfile(path2):
self.lib_dir = dir
self.lib= self.lib[ 3: ]
break
if self.lib_dir and self.inc_dir:
print( self.name + ' '[len(self.name):] + ': found' )
if self.inc_dir in ( '/usr/include', '/usr/local/include' ):
self.inc_dir= None
self.found = 1
else:
print( self.name + ' '[len(self.name):] + ': not found' )
return self
def extensions( MODULE, FILES, INC_DIRS, LIB_DIRS, DEFINES, LIBS ):
res= []
for ext in FILES:
ext_files= []
files= FILES[ ext ]
d= files[ '#dir' ]
for fSet in files:
if fSet!= '#dir':
ext_files+= [ os.path.join( d, fSet, x ) for x in files[ fSet ] ]
res.append(
Extension(
MODULE+ '.'+ ext,
ext_files,
include_dirs= INC_DIRS+ [ d+ '/' ],
library_dirs= LIB_DIRS,
libraries= LIBS,
define_macros= DEFINES
)
)
return res