From 8b931484766f8786cd4c18061779bc42a7fb9acc Mon Sep 17 00:00:00 2001 From: Damian Eads Date: Tue, 27 Oct 2009 14:47:25 -0700 Subject: [PATCH] Based on scikits/image/opencv/setup.py --- scikits/image/morphology/setup.py | 90 +++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 scikits/image/morphology/setup.py diff --git a/scikits/image/morphology/setup.py b/scikits/image/morphology/setup.py new file mode 100644 index 00000000..fde41252 --- /dev/null +++ b/scikits/image/morphology/setup.py @@ -0,0 +1,90 @@ +#!/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('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_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()]) + + return config + +if __name__ == '__main__': + from numpy.distutils.core import setup + setup(maintainer = 'Scikits.Image Developers', + author = 'Damian Eads', + maintainer_email = 'scikits-image@googlegroups.com', + description = 'Morphology Wrapper', + url = 'http://stefanv.github.com/scikits.image/', + license = 'SciPy License (BSD Style)', + **(configuration(top_path='').todict()) + )