diff --git a/setup/installer/osx/app/launcher.c b/setup/installer/osx/app/launcher.c index c36909efde..6a668f97af 100644 --- a/setup/installer/osx/app/launcher.c +++ b/setup/installer/osx/app/launcher.c @@ -12,6 +12,6 @@ static const char PYVER[] = "**PYVER**"; int main(int argc, const char **argv, const char **envp) { - return run(ENV_VARS, ENV_VAR_VALS, PROGRAM, MODULE, FUNCTION, PYVER, argc, argv, envp); + return run(ENV_VARS, ENV_VAR_VALS, PROGRAM, MODULE, FUNCTION, PYVER, **IS_GUI**, argc, argv, envp); } diff --git a/setup/installer/osx/app/main.py b/setup/installer/osx/app/main.py index 117bbc613a..6e711f9246 100644 --- a/setup/installer/osx/app/main.py +++ b/setup/installer/osx/app/main.py @@ -10,6 +10,7 @@ import sys, os, shutil, plistlib, subprocess, glob, zipfile, tempfile, \ py_compile, stat, operator, time from functools import partial from contextlib import contextmanager +from itertools import repeat abspath, join, basename = os.path.abspath, os.path.join, os.path.basename @@ -92,8 +93,8 @@ def compile_launchers(contents_dir, xprograms, pyver): src = src.replace('/*ENV_VARS*/', env) src = src.replace('/*ENV_VAR_VALS*/', env_vals) programs = [lib] - for program, x in xprograms.items(): - module, func = x + for program, x in xprograms.iteritems(): + module, func, ptype = x info('\tCompiling', program) out = join(contents_dir, 'MacOS', program) programs.append(out) @@ -101,6 +102,7 @@ def compile_launchers(contents_dir, xprograms, pyver): psrc = psrc.replace('**MODULE**', module) psrc = psrc.replace('**FUNCTION**', func) psrc = psrc.replace('**PYVER**', pyver) + psrc = psrc.replace('**IS_GUI**', ('1' if ptype == 'gui' else '0')) fsrc = '/tmp/%s.c'%program with open(fsrc, 'wb') as f: f.write(psrc) @@ -230,9 +232,9 @@ class Py2App(object): programs = {} progs = [] for x in ('console', 'gui'): - progs += list(zip(basenames[x], main_modules[x], main_functions[x])) - for program, module, func in progs: - programs[program] = (module, func) + progs += list(zip(basenames[x], main_modules[x], main_functions[x], repeat(x))) + for program, module, func, ptype in progs: + programs[program] = (module, func, ptype) programs = compile_launchers(self.contents_dir, programs, self.version_info) for out in programs: diff --git a/setup/installer/osx/app/site.py b/setup/installer/osx/app/site.py index a0b408f728..f38fe6cf77 100644 --- a/setup/installer/osx/app/site.py +++ b/setup/installer/osx/app/site.py @@ -31,7 +31,7 @@ for dir in sys.path: # if they only differ in case); turn relative paths into absolute # paths. dir, dircase = makepath(dir) - if not dircase in _dirs_in_sys_path: + if dircase not in _dirs_in_sys_path: L.append(dir) _dirs_in_sys_path[dircase] = 1 sys.path[:] = L @@ -55,7 +55,7 @@ def addsitedir(sitedir): else: reset = 0 sitedir, sitedircase = makepath(sitedir) - if not sitedircase in _dirs_in_sys_path: + if sitedircase not in _dirs_in_sys_path: sys.path.append(sitedir) # Add path component try: names = os.listdir(sitedir) @@ -92,7 +92,7 @@ def addpackage(sitedir, name): if dir[-1] == '\n': dir = dir[:-1] dir, dircase = makepath(sitedir, dir) - if not dircase in _dirs_in_sys_path and os.path.exists(dir): + if dircase not in _dirs_in_sys_path and os.path.exists(dir): sys.path.append(dir) _dirs_in_sys_path[dircase] = 1 if reset: @@ -184,8 +184,15 @@ def setup_asl(): def main(): global __file__ - base = sys.resourcepath + if sys.calibre_is_gui_app and not ( + sys.stdout.isatty() or sys.stderr.isatty() or sys.stdin.isatty()): + try: + setup_asl() + except: + pass # Failure to log to Console.app is not critical + + base = sys.resourcepath sys.frozen = 'macosx_app' sys.new_app_bundle = True abs__file__() @@ -193,16 +200,4 @@ def main(): add_calibre_vars(base) addsitedir(sys.site_packages) - launched_by_launch_services = False - - for arg in tuple(sys.argv[1:]): - if arg.startswith('-psn_'): - sys.argv.remove(arg) - launched_by_launch_services = True - if launched_by_launch_services: - try: - setup_asl() - except: - pass # Failure to log to Console.app is not critical - return run_entry_point() diff --git a/setup/installer/osx/app/util.c b/setup/installer/osx/app/util.c index b8e1e360fd..c7d390af45 100644 --- a/setup/installer/osx/app/util.c +++ b/setup/installer/osx/app/util.c @@ -46,7 +46,7 @@ set_env_vars(const char **ENV_VARS, const char **ENV_VAR_VALS, const char* exe_p } void initialize_interpreter(const char **ENV_VARS, const char **ENV_VAR_VALS, - char *PROGRAM, const char *MODULE, const char *FUNCTION, const char *PYVER, + char *PROGRAM, const char *MODULE, const char *FUNCTION, const char *PYVER, int IS_GUI, const char* exe_path, const char *rpath, int argc, const char **argv) { PyObject *pargv, *v; int i; @@ -83,6 +83,7 @@ void initialize_interpreter(const char **ENV_VARS, const char **ENV_VAR_VALS, PySys_SetObject("calibre_basename", PyBytes_FromString(PROGRAM)); PySys_SetObject("calibre_module", PyBytes_FromString(MODULE)); PySys_SetObject("calibre_function", PyBytes_FromString(FUNCTION)); + PySys_SetObject("calibre_is_gui_app", ((IS_GUI) ? Py_True : Py_False)); PySys_SetObject("resourcepath", PyBytes_FromString(rpath)); snprintf(path, 3000, "%s/site-packages", pyhome); PySys_SetObject("site_packages", PyBytes_FromString(pyhome)); @@ -154,7 +155,7 @@ EXPORT int run(const char **ENV_VARS, const char **ENV_VAR_VALS, char *PROGRAM, const char *MODULE, const char *FUNCTION, const char *PYVER, - int argc, const char **argv, const char **envp) { + int IS_GUI, int argc, const char **argv, const char **envp) { char *pathPtr = NULL, *t = NULL; char buf[3*PATH_MAX]; int ret = 0, i; @@ -190,7 +191,7 @@ run(const char **ENV_VARS, const char **ENV_VAR_VALS, char *PROGRAM, char rpath[PATH_MAX+1], exe_path[PATH_MAX+1]; snprintf(exe_path, PATH_MAX+1, "%s/Contents", pathPtr); snprintf(rpath, PATH_MAX+1, "%s/Resources", exe_path); - initialize_interpreter(ENV_VARS, ENV_VAR_VALS, PROGRAM, MODULE, FUNCTION, PYVER, + initialize_interpreter(ENV_VARS, ENV_VAR_VALS, PROGRAM, MODULE, FUNCTION, PYVER, IS_GUI, exe_path, rpath, argc, argv); site = PyImport_ImportModule("site"); diff --git a/setup/installer/osx/app/util.h b/setup/installer/osx/app/util.h index 636af4db13..5b5dfc0453 100644 --- a/setup/installer/osx/app/util.h +++ b/setup/installer/osx/app/util.h @@ -1,5 +1,5 @@ #pragma once int run(const char **ENV_VARS, const char **ENV_VAR_VALS, char *PROGRAM, - const char *MODULE, const char *FUNCTION, const char *PYVER, + const char *MODULE, const char *FUNCTION, const char *PYVER, int IS_GUI, int argc, const char **argv, const char **envp);