Conditionally compiling Fortran 90 extensions using numpy.distutils
I have been working on creating a setup.py file for a sub-module with the aim to conditionally compile a Fortran 90 extension using F2PY depending on the availability of an appropriate compiler on the system. Basically if gfortran or another Fortran 90 compiler is available on the system, the extension should be built. If no compiler is available, the extension should not be built and the build should continue without error. After a bit of work I was able to get a working script which uses numpy.distutils: from os.path import join def configuration(parent_package='', top_path=None): global config from numpy.distutils.misc_util import Configuration config = Configuration('retrieve', parent_package, top_path) config.add_data_dir('tests') # Conditionally add Steiner echo classifier extension. config.add_extension('echo_steiner',sources=[steiner_echo_gen_source]) return config def steiner_echo_gen_source(ext, build_dir): try: config.have_f90c() return [join(config.local_path, 'echo_steiner.pyf'), join(config.local_path, 'src', 'echo_steiner.f90')] except: return None if __name__ == '__main__': from numpy.distutils.core import setup setup(**configuration(top_path='').todict()) Is there a better way of accomplishing this conditional compiling, perhaps without using a global variable or a try/except block? Additionally is the expected behaviour of the have_90c function to raise an exception when a Fortran 90 compiler is not available or is this a bug? From the documentation [1] it was unclear what the results should be. I should mention that the above code snippet was aided greatly by information in the NumPy Packinging documentation [2], NumPy Distutils - Users Guide [3], and code from the f2py utils unit tests [4]. Thanks, - Jonathan Helmus nmrglue.com/jhelmus [1] http://docs.scipy.org/doc/numpy/reference/distutils.html#numpy.distutils.mis... [2] http://docs.scipy.org/doc/numpy/reference/distutils.html [3] http://wiki.scipy.org/Wiki/Documentation/numpy_distutils [4] https://github.com/numpy/numpy/blob/master/numpy/f2py/tests/util.py
participants (1)
-
Jonathan Helmus