Commit 1c7102c9 authored by Jason R. Coombs's avatar Jason R. Coombs

Move specialized Windows behavior to a specialized subclass

--HG--
extra : rebase_source : f56a411c3cace611952133b96a48ed92888f75a1
parent 29e0ce1e
...@@ -1799,51 +1799,63 @@ class ScriptWriter(object): ...@@ -1799,51 +1799,63 @@ class ScriptWriter(object):
""" """
Yield write_script() argument tuples for a distribution's entrypoints Yield write_script() argument tuples for a distribution's entrypoints
""" """
gen_class = cls.get_writer(wininst)
spec = str(dist.as_requirement()) spec = str(dist.as_requirement())
header = get_script_header("", executable, wininst) header = get_script_header("", executable, wininst)
for type_ in 'console', 'gui': for type_ in 'console', 'gui':
group = type_ + '_scripts' group = type_ + '_scripts'
for name, ep in dist.get_entry_map(group).items(): for name, ep in dist.get_entry_map(group).items():
script_text = cls.template % locals() script_text = gen_class.template % locals()
for res in cls._get_script_args(type_, name, header, for res in gen_class._get_script_args(type_, name, header,
script_text, wininst): script_text):
yield res yield res
@classmethod @classmethod
def _get_script_args(cls, type_, name, dist, executable, wininst): def get_writer(cls, force_windows):
if sys.platform=='win32' or wininst: if force_windows or sys.platform=='win32':
# On Windows/wininst, add a .py extension and an .exe launcher return WindowsScriptWriter
if type_=='gui': return cls
launcher_type = 'gui'
ext = '-script.pyw' @classmethod
old = ['.pyw'] def _get_script_args(cls, type_, name, header, script_text):
new_header = re.sub('(?i)python.exe','pythonw.exe',header) # Simply write the stub with no extension.
else: yield (name, header+script_text)
launcher_type = 'cli'
ext = '-script.py'
old = ['.py','.pyc','.pyo'] class WindowsScriptWriter(ScriptWriter):
new_header = re.sub('(?i)pythonw.exe','python.exe',header) @classmethod
if os.path.exists(new_header[2:-1].strip('"')) or sys.platform!='win32': def _get_script_args(cls, type_, name, header, script_text):
hdr = new_header """
else: For Windows, add a .py extension and an .exe launcher
hdr = header """
yield (name+ext, hdr+script_text, 't', [name+x for x in old]) if type_=='gui':
yield ( launcher_type = 'gui'
name+'.exe', get_win_launcher(launcher_type), ext = '-script.pyw'
'b' # write in binary mode old = ['.pyw']
) new_header = re.sub('(?i)python.exe','pythonw.exe',header)
if not is_64bit():
# install a manifest for the launcher to prevent Windows
# from detecting it as an installer (which it will for
# launchers like easy_install.exe). Consider only
# adding a manifest for launchers detected as installers.
# See Distribute #143 for details.
m_name = name + '.exe.manifest'
yield (m_name, load_launcher_manifest(name), 't')
else: else:
# On other platforms, we assume the right thing to do is to launcher_type = 'cli'
# just write the stub with no extension. ext = '-script.py'
yield (name, header+script_text) old = ['.py','.pyc','.pyo']
new_header = re.sub('(?i)pythonw.exe','python.exe',header)
if os.path.exists(new_header[2:-1].strip('"')) or sys.platform!='win32':
hdr = new_header
else:
hdr = header
yield (name+ext, hdr+script_text, 't', [name+x for x in old])
yield (
name+'.exe', get_win_launcher(launcher_type),
'b' # write in binary mode
)
if not is_64bit():
# install a manifest for the launcher to prevent Windows
# from detecting it as an installer (which it will for
# launchers like easy_install.exe). Consider only
# adding a manifest for launchers detected as installers.
# See Distribute #143 for details.
m_name = name + '.exe.manifest'
yield (m_name, load_launcher_manifest(name), 't')
# for backward-compatibility # for backward-compatibility
get_script_args = ScriptWriter.get_script_args get_script_args = ScriptWriter.get_script_args
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment