66 lines
1.9 KiB
Python
66 lines
1.9 KiB
Python
|
#!/usr/bin/env python
|
||
|
|
||
|
import os
|
||
|
import subprocess
|
||
|
import sys
|
||
|
import traceback
|
||
|
|
||
|
|
||
|
# ink/stitch
|
||
|
#
|
||
|
# stub.py: pyinstaller execution stub
|
||
|
#
|
||
|
# pyinstaller packages the inkstitch extensions into nice tidy executables.
|
||
|
# That's great, but Inkscape can't execute a plain binary as an extension(!).
|
||
|
#
|
||
|
# This Python script exists only to execute the actual extension binary. It
|
||
|
# can be copied to, e.g., "embroider_params.py", in which case it will look
|
||
|
# for a binary at inkstitch/bin/embroider_params.
|
||
|
script_name = os.path.basename(__file__)
|
||
|
|
||
|
if script_name.endswith('.py'):
|
||
|
binary_name = script_name[:-3]
|
||
|
else:
|
||
|
# Probably not right, but we can at least try.
|
||
|
binary_name = script_name
|
||
|
|
||
|
binary_path = os.path.join("inkstitch", "bin", binary_name)
|
||
|
|
||
|
args = sys.argv[:]
|
||
|
args[0] = binary_path
|
||
|
|
||
|
# os.execve works here for Linux, but only this seems to get the
|
||
|
# extension output to Inkscape on Windows
|
||
|
try:
|
||
|
extension = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||
|
stdout, stderr = extension.communicate()
|
||
|
except BaseException:
|
||
|
print >> sys.stderr, "Unexpected error launching Ink/Stitch."
|
||
|
print >> sys.stderr, "If you're having trouble, please file an issue here, including the text below:"
|
||
|
print >> sys.stderr, " https://github.com/inkstitch/inkstitch/issues\n"
|
||
|
print >> sys.stderr, "Tried to launch:", binary_path
|
||
|
print >> sys.stderr, "Arguments:", args
|
||
|
print >> sys.stderr, "Debugging information:\n"
|
||
|
print >> sys.stderr, traceback.format_exc()
|
||
|
sys.exit(1)
|
||
|
|
||
|
if sys.platform == "win32":
|
||
|
import msvcrt
|
||
|
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
|
||
|
|
||
|
if sys.stdout.encoding:
|
||
|
stdout = stdout.decode(sys.stdout.encoding)
|
||
|
|
||
|
sys.stdout.write(stdout)
|
||
|
sys.stdout.flush()
|
||
|
|
||
|
stderr = stderr.strip()
|
||
|
if stderr:
|
||
|
if sys.stderr.encoding:
|
||
|
stderr = stderr.decode(sys.stderr.encoding)
|
||
|
|
||
|
sys.stderr.write(stderr)
|
||
|
sys.stderr.flush()
|
||
|
|
||
|
sys.exit(extension.returncode)
|