build_scripts.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. """ Modified version of build_scripts that handles building scripts from functions.
  2. """
  3. from __future__ import division, absolute_import, print_function
  4. from distutils.command.build_scripts import build_scripts as old_build_scripts
  5. from numpy.distutils import log
  6. from numpy.distutils.misc_util import is_string
  7. class build_scripts(old_build_scripts):
  8. def generate_scripts(self, scripts):
  9. new_scripts = []
  10. func_scripts = []
  11. for script in scripts:
  12. if is_string(script):
  13. new_scripts.append(script)
  14. else:
  15. func_scripts.append(script)
  16. if not func_scripts:
  17. return new_scripts
  18. build_dir = self.build_dir
  19. self.mkpath(build_dir)
  20. for func in func_scripts:
  21. script = func(build_dir)
  22. if not script:
  23. continue
  24. if is_string(script):
  25. log.info(" adding '%s' to scripts" % (script,))
  26. new_scripts.append(script)
  27. else:
  28. [log.info(" adding '%s' to scripts" % (s,)) for s in script]
  29. new_scripts.extend(list(script))
  30. return new_scripts
  31. def run (self):
  32. if not self.scripts:
  33. return
  34. self.scripts = self.generate_scripts(self.scripts)
  35. # Now make sure that the distribution object has this list of scripts.
  36. # setuptools' develop command requires that this be a list of filenames,
  37. # not functions.
  38. self.distribution.scripts = self.scripts
  39. return old_build_scripts.run(self)
  40. def get_source_files(self):
  41. from numpy.distutils.misc_util import get_script_files
  42. return get_script_files(self.scripts)