Source code for skbuild.command.generate_source_manifest

"""This module defines custom ``generate_source_manifest`` setuptools
command."""

import os
import subprocess
import sys

from distutils.cmd import Command

from . import set_build_base_mixin
from ..constants import SKBUILD_DIR, SKBUILD_MARKER_FILE
from ..utils import new_style


[docs]class generate_source_manifest(set_build_base_mixin, new_style(Command)): """Custom setuptools command generating a `MANIFEST` file if not already provided.""" description = "generate source MANIFEST" # pylint:disable=no-self-use
[docs] def initialize_options(self): """Set default values for all the options that this command supports.""" pass
[docs] def run(self): """ If neither a `MANIFEST`, nor a `MANIFEST.in` file is provided, and we are in a git repo, try to create a `MANIFEST` file from the output of `git ls-tree --name-only -r HEAD`. We need a reliable way to tell if an existing `MANIFEST` file is one we've generated. distutils already uses a first-line comment to tell if the `MANIFEST` file was generated from `MANIFEST.in`, so we use a dummy file, `_skbuild_MANIFEST`, to avoid confusing distutils. """ do_generate = ( # If there's a MANIFEST.in file, we assume that we had nothing to do # with the project's manifest. not os.path.exists('MANIFEST.in') # otherwise, we check to see that there is no MANIFEST, ... and not os.path.exists('MANIFEST') # ... or ... # ... (if there is one,) that we created it or os.path.exists(SKBUILD_MARKER_FILE()) ) if do_generate: try: with open('MANIFEST', 'wb') as manifest_file: # Since Git < 2.11 does not support --recurse-submodules option, fallback to # regular listing. try: manifest_file.write( subprocess.check_output(['git', 'ls-files', '--recurse-submodules']) ) except subprocess.CalledProcessError: manifest_file.write( subprocess.check_output(['git', 'ls-files']) ) except subprocess.CalledProcessError: sys.stderr.write( '\n\n' 'Since scikit-build could not find MANIFEST.in or ' 'MANIFEST, it tried to generate a MANIFEST file ' 'automatically, but could not because it could not ' 'determine which source files to include.\n\n' 'The command used was "git ls-files"\n' '\n\n' ) raise if not os.path.exists(SKBUILD_DIR()): os.makedirs(SKBUILD_DIR()) with open(SKBUILD_MARKER_FILE(), 'w'): # touch pass
[docs] def finalize_options(self, *args, **kwargs): """Set final values for all the options that this command supports.""" pass