morphology: Clean setup.

This commit is contained in:
Stefan van der Walt
2010-01-01 13:08:33 +02:00
parent 93c90377c3
commit 83efa5f109
2 changed files with 5 additions and 4091 deletions
File diff suppressed because it is too large Load Diff
+5 -62
View File
@@ -4,77 +4,20 @@ 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)
from scikits.image._build import cython
base_path = os.path.abspath(os.path.dirname(__file__))
def configuration(parent_package='', top_path=None):
from numpy.distutils.misc_util import Configuration, get_numpy_include_dirs
config = Configuration('morphology', 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(['cmorph.pyx'], working_path=base_path)
cython_files = ['cmorph.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()])
config.add_extension('cmorph', sources=['cmorph.c'],
include_dirs=[get_numpy_include_dirs()])
return config