Example #1
0
def build_sdist(sdist_directory, config_settings=None):
    """
    Function for building source distributions, satisfies PEP-517.
    """
    assert isinstance(sdist_directory, str)
    assert config_settings is None or isinstance(config_settings, dict)

    generate_build_info("sdist", strict=True)

    files = [
        f for f in glob.glob("src/datatable/**/*.py", recursive=True)
        if "_datatable_builder.py" not in f
    ]
    files += glob.glob("src/core/**/*.cc", recursive=True)
    files += glob.glob("src/core/**/*.h", recursive=True)
    files += glob.glob("ci/xbuild/*.py")
    files += [f for f in glob.glob("tests/**/*.py", recursive=True)]
    files += [f for f in glob.glob("tests_random/*.py")]
    files += ["src/datatable/include/datatable.h"]
    files.sort()
    files += ["ci/ext.py", "ci/__init__.py"]
    files += ["pyproject.toml"]
    files += ["LICENSE"]
    # See `is_source_distribution()`
    assert "VERSION.txt" not in files

    meta = get_meta()
    wb = xbuild.Wheel(files, **meta)
    wb.log = create_logger(verbosity=3)
    sdist_file = wb.build_sdist(sdist_directory)
    return sdist_file
Example #2
0
def build_wheel(wheel_directory,
                config_settings=None,
                metadata_directory=None):
    """
    Function for building wheels, satisfies requirements of PEP-517.
    """
    if config_settings is None:
        config_settings = {}
    assert isinstance(wheel_directory, str)
    assert isinstance(config_settings, dict)
    assert metadata_directory is None
    reuse_extension = config_settings.pop("reuse_extension", False)
    reuse_version = config_settings.pop("reuse_version", None)
    debug_wheel = config_settings.pop("debug", False)

    if is_source_distribution() and reuse_version is None:
        config_settings["reuse_version"] = True

    if not reuse_version:
        flavor = "custom" if reuse_extension else \
                 "debug" if debug_wheel else \
                 "build"
        generate_build_info(flavor, strict=True)
    assert os.path.isfile("src/datatable/_build_info.py")

    if reuse_extension:
        pyver = "%d%d" % sys.version_info[:2]
        soext = "dll" if sys.platform == "win32" else "so"
        pattern = "src/datatable/lib/_datatable.cpython-%s*.%s" % (pyver,
                                                                   soext)
        sofiles = glob.glob(pattern)
        if not sofiles:
            raise SystemExit("Extension file %s not found" % pattern)
        if len(sofiles) > 1:
            raise SystemExit("Multiple extension files found: %r" %
                             (sofiles, ))
        so_file = sofiles[0]
    else:
        so_file = build_extension(cmd=("debug" if debug_wheel else "build"),
                                  verbosity=3)

    files = glob.glob("src/datatable/**/*.py", recursive=True)
    files += [so_file]
    files += ["src/datatable/include/datatable.h"]
    files = [
        (f, f[4:])  # (src_file, destination_file)
        for f in files if "_datatable_builder.py" not in f
    ]
    files.sort()

    meta = get_meta()
    wb = xbuild.Wheel(files, **meta, **config_settings)
    wb.log = create_logger(verbosity=3)
    wheel_file = wb.build_wheel(wheel_directory)
    return wheel_file
Example #3
0
def build_wheel(wheel_directory,
                config_settings=None,
                metadata_directory=None):
    """
    Function for building wheels, satisfies requirements of PEP-517.
    """
    if config_settings is None:
        config_settings = {}
    assert isinstance(wheel_directory, str)
    assert isinstance(config_settings, dict)
    assert metadata_directory is None

    if is_source_distribution() and "reuse_version" not in config_settings:
        config_settings["reuse_version"] = True

    if not config_settings.pop("reuse_version", False):
        generate_build_info("build", strict=True)
    assert os.path.isfile("src/datatable/_build_info.py")

    if config_settings.pop("reuse_extension", False):
        soext = "dll" if sys.platform == "win32" else "so"
        sofiles = glob.glob("src/datatable/lib/_datatable*." + soext)
        if not sofiles:
            raise SystemExit("Extension file src/datatable/lib/_datatable*.%s "
                             "not found" % soext)
        if len(sofiles) > 1:
            raise SystemExit("Multiple extension files found: %r" %
                             (sofiles, ))
        so_file = sofiles[0]
    else:
        so_file = build_extension(cmd="build", verbosity=3)

    files = glob.glob("src/datatable/**/*.py", recursive=True)
    files += [so_file]
    files += ["src/datatable/include/datatable.h"]
    files = [
        (f, f[4:])  # (src_file, destination_file)
        for f in files if "_datatable_builder.py" not in f
    ]
    files.sort()

    meta = get_meta()
    wb = xbuild.Wheel(files, **meta, **config_settings)
    wb.log = create_logger(verbosity=3)
    wheel_file = wb.build_wheel(wheel_directory)
    return wheel_file