def run(self): """ Distutils calls this method to run the command """ from Cython.Build import cythonize # Provides all of our build options config = self.distribution.get_command_obj('configure') config.run() defs_file = localpath('h5py', 'defs.pyx') func_file = localpath('h5py', 'api_functions.txt') config_file = localpath('h5py', 'config.pxi') # Rebuild low-level defs if missing or stale if not op.isfile(defs_file) or os.stat(func_file).st_mtime > os.stat( defs_file).st_mtime: print("Executing api_gen rebuild of defs") api_gen.run() # Rewrite config.pxi file if needed if not op.isfile(config_file) or config.rebuild_required: with open(config_file, 'wb') as f: if config.mpi: import mpi4py from distutils.version import StrictVersion v2 = StrictVersion( mpi4py.__version__) > StrictVersion("1.3.1") else: v2 = False s = """\ # This file is automatically generated by the h5py setup script. Don't modify. DEF MPI = %(mpi)s DEF MPI4PY_V2 = %(mpi4py_v2)s DEF HDF5_VERSION = %(version)s DEF SWMR_MIN_HDF5_VERSION = (1,9,178) """ s %= { 'mpi': bool(config.mpi), 'mpi4py_v2': bool(v2), 'version': tuple(int(x) for x in config.hdf5_version.split('.')) } s = s.encode('utf-8') f.write(s) # Run Cython print("Executing cythonize()") self.extensions = cythonize(self._make_extensions(config), force=config.rebuild_required or self.force) self.check_rerun_cythonize() # Perform the build build_ext.run(self) # Mark the configuration as built config.reset_rebuild()
def run(self): """ Distutils calls this method to run the command """ from Cython import __version__ as cython_version from Cython.Build import cythonize import numpy # This allows ccache to recognise the files when pip builds in a temp # directory. It speeds up repeatedly running tests through tox with # ccache configured (CC="ccache gcc"). It should have no effect if # ccache is not in use. os.environ['CCACHE_BASEDIR'] = op.dirname(op.abspath(__file__)) os.environ['CCACHE_NOHASHDIR'] = '1' # Get configuration from environment variables config = BuildConfig.from_env() config.summarise() defs_file = localpath('h5py', 'defs.pyx') func_file = localpath('h5py', 'api_functions.txt') config_file = localpath('h5py', 'config.pxi') # Rebuild low-level defs if missing or stale if not op.isfile(defs_file) or os.stat(func_file).st_mtime > os.stat(defs_file).st_mtime: print("Executing api_gen rebuild of defs") api_gen.run() # Rewrite config.pxi file if needed s = """\ # This file is automatically generated by the h5py setup script. Don't modify. DEF MPI = %(mpi)s DEF HDF5_VERSION = %(version)s DEF SWMR_MIN_HDF5_VERSION = (1,9,178) DEF VDS_MIN_HDF5_VERSION = (1,9,233) DEF VOL_MIN_HDF5_VERSION = (1,11,5) DEF COMPLEX256_SUPPORT = %(complex256_support)s DEF NUMPY_BUILD_VERSION = '%(numpy_version)s' DEF CYTHON_BUILD_VERSION = '%(cython_version)s' """ s %= { 'mpi': bool(config.mpi), 'version': config.hdf5_version, 'complex256_support': hasattr(numpy, 'complex256'), 'numpy_version': numpy.__version__, 'cython_version': cython_version, } write_if_changed(config_file, s) # Run Cython print("Executing cythonize()") self.extensions = cythonize(self._make_extensions(config), force=config.changed() or self.force, language_level=3) # Perform the build build_ext.run(self) # Record the configuration we built config.record_built()
def run(self): """ Distutils calls this method to run the command """ from Cython.Build import cythonize import numpy # This allows ccache to recognise the files when pip builds in a temp # directory. It speeds up repeatedly running tests through tox with # ccache configured (CC="ccache gcc"). It should have no effect if # ccache is not in use. os.environ['CCACHE_BASEDIR'] = op.dirname(op.abspath(__file__)) os.environ['CCACHE_NOHASHDIR'] = '1' # Provides all of our build options config = self.distribution.get_command_obj('configure') config.run() defs_file = localpath('h5py', 'defs.pyx') func_file = localpath('h5py', 'api_functions.txt') config_file = localpath('h5py', 'config.pxi') # Rebuild low-level defs if missing or stale if not op.isfile(defs_file) or os.stat(func_file).st_mtime > os.stat(defs_file).st_mtime: print("Executing api_gen rebuild of defs") api_gen.run() # Rewrite config.pxi file if needed if not op.isfile(config_file) or config.rebuild_required: with open(config_file, 'wb') as f: s = """\ # This file is automatically generated by the h5py setup script. Don't modify. DEF MPI = %(mpi)s DEF HDF5_VERSION = %(version)s DEF SWMR_MIN_HDF5_VERSION = (1,9,178) DEF VDS_MIN_HDF5_VERSION = (1,9,233) DEF VOL_MIN_HDF5_VERSION = (1,11,5) DEF COMPLEX256_SUPPORT = %(complex256_support)s """ s %= { 'mpi': bool(config.mpi), 'version': tuple(int(x) for x in config.hdf5_version.split('.')), 'complex256_support': hasattr(numpy, 'complex256'), } s = s.encode('utf-8') f.write(s) # Run Cython print("Executing cythonize()") self.extensions = cythonize(self._make_extensions(config), force=config.rebuild_required or self.force, language_level=3) self.check_rerun_cythonize() # Perform the build build_ext.run(self) # Mark the configuration as built config.reset_rebuild()
# Only reconfigure and rebuild if settings have actually changed. if newcontents != oldcontents: with open(localpath('h5py/config.pxi'), 'wb') as f: f.write(newcontents) for m in MODULES: os.utime(localpath('h5py', m + '.pyx'), None) # --- Pre-compiling API generation -------------------------------------------- if not op.isfile(localpath('h5py', 'defs.pyx')): if not HAVE_CYTHON: raise ValueError( "A modern version of Cython is required to build from source") import api_gen api_gen.run() # --- Determine configuration settings ---------------------------------------- settings = configure.scrape_eargs() # lowest priority settings.update(configure.scrape_cargs()) # highest priority HDF5 = settings.get('hdf5') HDF5_VERSION = settings.get('hdf5_version') MPI = settings.setdefault('mpi', False) if MPI: if not HAVE_CYTHON: raise ValueError("Cython is required to compile h5py in MPI mode") try: import mpi4py