aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPJ Eby <distutils-sig@python.org>2006-12-29 01:32:46 +0000
committerPJ Eby <distutils-sig@python.org>2006-12-29 01:32:46 +0000
commit47f061eef1d9c4832b9a4394e84642811356ad10 (patch)
tree50e19bb4bf2eab1f8c25ca90f3b2e785d884bb96
parent3f14d160421187a37ccfb91f1e7fce6d54378cb6 (diff)
downloadexternal_python_setuptools-47f061eef1d9c4832b9a4394e84642811356ad10.tar.gz
external_python_setuptools-47f061eef1d9c4832b9a4394e84642811356ad10.tar.bz2
external_python_setuptools-47f061eef1d9c4832b9a4394e84642811356ad10.zip
Partial support for cross-platform generation of bdist_wininst .exe's.
Unfortunately, bdist_wininst doesn't fix up #! lines, so python.exe or pythonw.exe have to be on PATH for generated scripts to work. This could probably be fixed up with a post-install script, but that's a job for another day. (backport from trunk) --HG-- branch : setuptools-0.6 extra : convert_revision : svn%3A6015fed2-1504-0410-9fe1-9d1591cc4771/sandbox/branches/setuptools-0.6%4053186
-rwxr-xr-xREADME.txt4
-rwxr-xr-xsetuptools/command/bdist_wininst.py7
-rwxr-xr-xsetuptools/command/easy_install.py12
-rwxr-xr-xsetuptools/command/install_scripts.py8
4 files changed, 20 insertions, 11 deletions
diff --git a/README.txt b/README.txt
index d9b11301..dc93fdf3 100755
--- a/README.txt
+++ b/README.txt
@@ -23,7 +23,9 @@ version.
Once installation is complete, you will find an ``easy_install.exe`` program in
your Python ``Scripts`` subdirectory. Be sure to add this directory to your
-``PATH`` environment variable, if you haven't already done so.
+``PATH`` environment variable, if you haven't already done so. You must also
+have your Python installation directory (e.g. ``C:\\Python23``) on the
+``PATH``.
RPM-Based Systems
diff --git a/setuptools/command/bdist_wininst.py b/setuptools/command/bdist_wininst.py
index 9881f3b1..d2a8a4b1 100755
--- a/setuptools/command/bdist_wininst.py
+++ b/setuptools/command/bdist_wininst.py
@@ -28,3 +28,10 @@ class bdist_wininst(_bdist_wininst):
cmd.install_lib = None # work around distutils bug
return cmd
+ def run(self):
+ self._is_running = True
+ try:
+ _bdist_wininst.run(self)
+ finally:
+ self._is_running = False
+
diff --git a/setuptools/command/easy_install.py b/setuptools/command/easy_install.py
index a565be4f..8f2aa457 100755
--- a/setuptools/command/easy_install.py
+++ b/setuptools/command/easy_install.py
@@ -1408,7 +1408,7 @@ class PthDistributions(Environment):
return path
-def get_script_header(script_text, executable=sys_executable):
+def get_script_header(script_text, executable=sys_executable, wininst=False):
"""Create a #! line, getting options (if any) from script_text"""
from distutils.command.build_scripts import first_line_re
first = (script_text+'\n').splitlines()[0]
@@ -1418,6 +1418,8 @@ def get_script_header(script_text, executable=sys_executable):
options = match.group(1) or ''
if options:
options = ' '+options
+ if wininst and sys.platform!='win32':
+ executable = "python.exe"
hdr = "#!%(executable)s%(options)s\n" % locals()
if unicode(hdr,'ascii','ignore').encode('ascii') != hdr:
# Non-ascii path to sys.executable, use -x to prevent warnings
@@ -1431,8 +1433,6 @@ def get_script_header(script_text, executable=sys_executable):
return hdr
-
-
def auto_chmod(func, arg, exc):
if func is os.remove and os.name=='nt':
os.chmod(arg, stat.S_IWRITE)
@@ -1515,10 +1515,10 @@ def is_python_script(script_text, filename):
-def get_script_args(dist, executable=sys_executable):
+def get_script_args(dist, executable=sys_executable, wininst=False):
"""Yield write_script() argument tuples for a distribution's entrypoints"""
spec = str(dist.as_requirement())
- header = get_script_header("", executable)
+ header = get_script_header("", executable, wininst)
for group in 'console_scripts', 'gui_scripts':
for name,ep in dist.get_entry_map(group).items():
script_text = (
@@ -1531,7 +1531,7 @@ def get_script_args(dist, executable=sys_executable):
" load_entry_point(%(spec)r, %(group)r, %(name)r)()\n"
")\n"
) % locals()
- if sys.platform=='win32':
+ if sys.platform=='win32' or wininst:
# On Windows, add a .py extension and an .exe launcher
if group=='gui_scripts':
ext, launcher = '-script.pyw', 'gui.exe'
diff --git a/setuptools/command/install_scripts.py b/setuptools/command/install_scripts.py
index fc156dce..904704df 100755
--- a/setuptools/command/install_scripts.py
+++ b/setuptools/command/install_scripts.py
@@ -29,16 +29,16 @@ class install_scripts(_install_scripts):
)
bs_cmd = self.get_finalized_command('build_scripts')
executable = getattr(bs_cmd,'executable',sys_executable)
-
- for args in get_script_args(dist, 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)
-
-
def write_script(self, script_name, contents, mode="t", *ignored):
"""Write an executable file to the scripts directory"""
log.info("Installing %s script to %s", script_name, self.install_dir)