Chris@87: """ Modified version of build_scripts that handles building scripts from functions. Chris@87: Chris@87: """ Chris@87: from __future__ import division, absolute_import, print_function Chris@87: Chris@87: from distutils.command.build_scripts import build_scripts as old_build_scripts Chris@87: from numpy.distutils import log Chris@87: from numpy.distutils.misc_util import is_string Chris@87: Chris@87: class build_scripts(old_build_scripts): Chris@87: Chris@87: def generate_scripts(self, scripts): Chris@87: new_scripts = [] Chris@87: func_scripts = [] Chris@87: for script in scripts: Chris@87: if is_string(script): Chris@87: new_scripts.append(script) Chris@87: else: Chris@87: func_scripts.append(script) Chris@87: if not func_scripts: Chris@87: return new_scripts Chris@87: Chris@87: build_dir = self.build_dir Chris@87: self.mkpath(build_dir) Chris@87: for func in func_scripts: Chris@87: script = func(build_dir) Chris@87: if not script: Chris@87: continue Chris@87: if is_string(script): Chris@87: log.info(" adding '%s' to scripts" % (script,)) Chris@87: new_scripts.append(script) Chris@87: else: Chris@87: [log.info(" adding '%s' to scripts" % (s,)) for s in script] Chris@87: new_scripts.extend(list(script)) Chris@87: return new_scripts Chris@87: Chris@87: def run (self): Chris@87: if not self.scripts: Chris@87: return Chris@87: Chris@87: self.scripts = self.generate_scripts(self.scripts) Chris@87: # Now make sure that the distribution object has this list of scripts. Chris@87: # setuptools' develop command requires that this be a list of filenames, Chris@87: # not functions. Chris@87: self.distribution.scripts = self.scripts Chris@87: Chris@87: return old_build_scripts.run(self) Chris@87: Chris@87: def get_source_files(self): Chris@87: from numpy.distutils.misc_util import get_script_files Chris@87: return get_script_files(self.scripts)