mirror of
https://github.com/wassname/scikit-image.git
synced 2026-06-29 20:02:22 +08:00
91 lines
2.8 KiB
Python
91 lines
2.8 KiB
Python
#!/usr/bin/env python
|
|
|
|
import os
|
|
import shutil
|
|
import hashlib
|
|
|
|
base_path = os.path.dirname(__file__)
|
|
|
|
def same_cython(f0, f1):
|
|
'''Compare two Cython generated C-files, based on their md5-sum.
|
|
|
|
Returns True if the files are identical, False if not. The first
|
|
lines are skipped, due to the timestamp printed there.
|
|
|
|
'''
|
|
def md5sum(f):
|
|
m = hashlib.new('md5')
|
|
while True:
|
|
d = f.read(8096)
|
|
if not d:
|
|
break
|
|
m.update(d)
|
|
return m.hexdigest()
|
|
|
|
f0 = file(f0)
|
|
f0.readline()
|
|
|
|
f1 = file(f1)
|
|
f1.readline()
|
|
|
|
return md5sum(f0) == md5sum(f1)
|
|
|
|
|
|
def configuration(parent_package='', top_path=None):
|
|
from numpy.distutils.misc_util import Configuration, get_numpy_include_dirs
|
|
|
|
config = Configuration('opencv', parent_package, top_path)
|
|
|
|
config.add_data_dir('tests')
|
|
|
|
# since distutils/cython has problems, we'll check to see if cython is
|
|
# installed and use that to rebuild the .c files, if not, we'll just build
|
|
# directly from the included .c files
|
|
|
|
cython_files = ['opencv_backend.pyx', 'opencv_cv.pyx']
|
|
|
|
try:
|
|
import Cython
|
|
for pyxfile in [os.path.join(base_path, f) for f in cython_files]:
|
|
# make a backup of the good c files
|
|
c_file = pyxfile.rstrip('pyx') + 'c'
|
|
c_file_new = c_file + '.new'
|
|
|
|
# run cython compiler
|
|
os.system('cython -o %s %s' % (c_file_new, pyxfile))
|
|
|
|
# if the resulting file is small, cython compilation failed
|
|
size = os.path.getsize(c_file_new)
|
|
if size < 100:
|
|
print "Cython compilation of %s failed. Using " \
|
|
"pre-generated file." % os.path.basename(pyxfile)
|
|
continue
|
|
|
|
# if the generated .c file differs from the one provided,
|
|
# use that one instead
|
|
if not same_cython(c_file_new, c_file):
|
|
shutil.copy(c_file_new, c_file)
|
|
|
|
except ImportError:
|
|
# if cython is not found, we just build from the included .c files
|
|
pass
|
|
|
|
for pyxfile in cython_files:
|
|
c_file = pyxfile.rstrip('pyx') + 'c'
|
|
config.add_extension(pyxfile.rstrip('.pyx'),
|
|
sources=[c_file],
|
|
include_dirs=[get_numpy_include_dirs()])
|
|
|
|
return config
|
|
|
|
if __name__ == '__main__':
|
|
from numpy.distutils.core import setup
|
|
setup(maintainer = 'Scikits.Image Developers',
|
|
author = 'Steven C. Colbert',
|
|
maintainer_email = 'scikits-image@googlegroups.com',
|
|
description = 'OpenCV wrapper for NumPy arrays',
|
|
url = 'http://stefanv.github.com/scikits.image/',
|
|
license = 'SciPy License (BSD Style)',
|
|
**(configuration(top_path='').todict())
|
|
)
|