Source code for ivpm_build.setup.build_ext

"""Ported from ivpm.setup.BuildExt with distutils.file_util replaced by shutil
and cmake logic delegated to CmakeBuilder.
"""
import os
import shutil
from setuptools.command.build_ext import build_ext as _build_ext

import ivpm_build.setup.ivpm_data as idata
from ivpm_build.cmake.cmake_builder import CmakeBuilder


[docs] class BuildExt(_build_ext):
[docs] def build_extensions(self): proj_dir = os.getcwd() if os.path.isfile(os.path.join(proj_dir, "CMakeLists.txt")): print("build_cmake") debug = False import sys if "-DDEBUG" in sys.argv: debug = True elif os.environ.get("DEBUG", "") in ("1", "y", "Y"): debug = True CmakeBuilder(proj_dir, debug=debug).run() for src, dst in idata.get_ivpm_extdep_data(): shutil.copyfile(src, dst) super().build_extensions()
[docs] def build_extension(self, ext): proj_dir = os.getcwd() print("build_extension: %s" % str(ext)) include_dirs = getattr(ext, "include_dirs", []) setattr(ext, "include_dirs", include_dirs) ret = super().build_extension(ext) build_py = self.get_finalized_command("build_py") ext_name_m = idata.get_ivpm_ext_name_m() for ext in self.extensions: print("Ext: %s" % str(ext)) fullname = self.get_ext_fullname(ext.name) filename = self.get_ext_filename(fullname) print("fullname=%s filename=%s" % (fullname, filename), flush=True) modpath = fullname.split(".") if fullname in ext_name_m.keys(): mapped_filename = idata.expand_libvars(ext_name_m[fullname]) dest_filename = os.path.join( self.build_lib, "/".join(modpath[:-1]), mapped_filename ) else: dest_filename = os.path.join(self.build_lib, filename) src_filename = os.path.join(self.build_lib, filename) print("dest_filename: %s src_filename: %s" % (dest_filename, src_filename)) if src_filename != dest_filename: os.rename(src_filename, dest_filename) return ret
[docs] def copy_extensions_to_source(self): """Like the base class method, but copy libs into proper directory in develop.""" print("copy_extensions_to_source") for hook in idata.get_hooks(idata.Phase_BuildPre): hook(self) build_py = self.get_finalized_command("build_py") ext_name_m = idata.get_ivpm_ext_name_m() for ext in self.extensions: fullname = self.get_ext_fullname(ext.name) filename = self.get_ext_filename(fullname) print("fullname=%s filename=%s" % (fullname, filename), flush=True) modpath = fullname.split(".") package = ".".join(modpath[:-1]) package_dir = build_py.get_package_dir(package) if fullname in ext_name_m.keys(): mapped_filename = idata.expand_libvars(ext_name_m[fullname]) dest_filename = os.path.join(package_dir, mapped_filename) src_filename = os.path.join( self.build_lib, "/".join(modpath[:-1]), mapped_filename ) else: dest_filename = os.path.join(package_dir, os.path.basename(filename)) src_filename = os.path.join(self.build_lib, filename) os.makedirs(os.path.dirname(dest_filename), exist_ok=True) if not self.dry_run: shutil.copy2(src_filename, dest_filename) for hook in idata.get_hooks(idata.Phase_BuildPost): hook(self)