summaryrefslogtreecommitdiff
path: root/pbr/packaging.py
diff options
context:
space:
mode:
Diffstat (limited to 'pbr/packaging.py')
-rw-r--r--pbr/packaging.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/pbr/packaging.py b/pbr/packaging.py
index 197a721..04e3290 100644
--- a/pbr/packaging.py
+++ b/pbr/packaging.py
@@ -30,7 +30,9 @@ from distutils.command import install as du_install
import distutils.errors
from distutils import log
import pkg_resources
+from setuptools.command import easy_install
from setuptools.command import install
+from setuptools.command import install_scripts
from setuptools.command import sdist
try:
@@ -430,6 +432,68 @@ def have_nose():
return _have_nose
+_script_text = """# PBR Generated from %(group)r
+
+import sys
+
+from %(module_name)s import %(func)s
+
+
+if __name__ == "__main__":
+ sys.exit(%(func)s())
+"""
+
+
+def _get_script_args(dist, executable, is_wininst):
+ """Override entrypoints console_script."""
+ header = easy_install.get_script_header("", executable, is_wininst)
+ for group in 'console_scripts', 'gui_scripts':
+ for name, ep in dist.get_entry_map(group).items():
+ script_text = _script_text % dict(
+ group=group,
+ module_name=ep.module_name,
+ func=ep.attrs[0])
+ yield (name, header+script_text)
+
+
+class LocalInstallScripts(install_scripts.install_scripts):
+ """Intercepts console scripts entry_points."""
+ command_name = 'install_scripts'
+
+ def run(self):
+ if os.name != 'nt':
+ get_script_args = _get_script_args
+ else:
+ get_script_args = easy_install.get_script_args
+
+ import distutils.command.install_scripts
+
+ self.run_command("egg_info")
+ if self.distribution.scripts:
+ # run first to set up self.outfiles
+ distutils.command.install_scripts.install_scripts.run(self)
+ else:
+ self.outfiles = []
+ if self.no_ep:
+ # don't install entry point scripts into .egg file!
+ return
+
+ ei_cmd = self.get_finalized_command("egg_info")
+ dist = pkg_resources.Distribution(
+ ei_cmd.egg_base,
+ pkg_resources.PathMetadata(ei_cmd.egg_base, ei_cmd.egg_info),
+ ei_cmd.egg_name, ei_cmd.egg_version,
+ )
+ bs_cmd = self.get_finalized_command('build_scripts')
+ executable = getattr(
+ bs_cmd, 'executable', easy_install.sys_executable)
+ is_wininst = getattr(
+ self.get_finalized_command("bdist_wininst"), '_is_running', False
+ )
+ for args in get_script_args(dist, executable, is_wininst):
+ self.write_script(*args)
+
+
class LocalSDist(sdist.sdist):
"""Builds the ChangeLog and Authors files from VC first."""