diff --git a/installer/osx/freeze.py b/installer/osx/freeze.py index de93a344c2..3ec24d3aba 100644 --- a/installer/osx/freeze.py +++ b/installer/osx/freeze.py @@ -3,7 +3,7 @@ __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal ' ''' Create an OSX installer ''' -import sys, re, os, shutil, subprocess, stat, glob, zipfile +import sys, re, os, shutil, subprocess, stat, glob, zipfile, plistlib l = {} exec open('setup.py').read() in l VERSION = l['VERSION'] @@ -36,7 +36,7 @@ loader = open(loader_path, 'w') site_packages = glob.glob(resources_dir+'/lib/python*/site-packages.zip')[0] print >>loader, '#!'+python print >>loader, 'import sys' -print >>loader, 'sys.path.remove('+repr(dirpath)+')' +print >>loader, 'if', repr(dirpath), 'in sys.path: sys.path.remove(', repr(dirpath), ')' print >>loader, 'sys.path.append(', repr(site_packages), ')' print >>loader, 'sys.frozen = "macosx_app"' print >>loader, 'sys.frameworks_dir =', repr(frameworks_dir) @@ -294,10 +294,25 @@ sys.frameworks_dir = os.path.join(os.path.dirname(os.environ['RESOURCEPATH']), ' f.close() print print 'Adding main scripts to site-packages' - f = zipfile.ZipFile(os.path.join(self.dist_dir, APPNAME+'.app', 'Contents', 'Resources', 'lib', 'python2.6', 'site-packages.zip'), 'a', zipfile.ZIP_DEFLATED) + f = zipfile.ZipFile(os.path.join(self.dist_dir, APPNAME+'.app', 'Contents', 'Resources', 'lib', 'python'+sys.version[:3], 'site-packages.zip'), 'a', zipfile.ZIP_DEFLATED) for script in scripts['gui']+scripts['console']: f.write(script, script.partition('/')[-1]) f.close() + print + print 'Creating console.app' + contents_dir = os.path.dirname(resource_dir) + cc_dir = os.path.join(contents_dir, 'console.app', 'Contents') + os.makedirs(cc_dir) + for x in os.listdir(contents_dir): + if x == 'console.app': + continue + if x == 'Info.plist': + plist = plistlib.readPlist(os.path.join(contents_dir, x)) + plist['LSUIElement'] = '1' + plistlib.writePlist(plist, os.path.join(cc_dir, x)) + else: + os.symlink(os.path.join('../..', x), + os.path.join(cc_dir, x)) print print 'Building disk image' BuildAPP.makedmg(os.path.join(self.dist_dir, APPNAME+'.app'), APPNAME+'-'+VERSION) diff --git a/src/calibre/debug.py b/src/calibre/debug.py index 81336953e1..54eadb6b65 100644 --- a/src/calibre/debug.py +++ b/src/calibre/debug.py @@ -21,6 +21,7 @@ Run an embedded python interpreter. 'Module specifications are of the form full.name.of.module,path_to_module.py', default=None ) parser.add_option('-c', '--command', help='Run python code.', default=None) + parser.add_option('-e', '--exec-file', default=None, help='Run the python code in file.') parser.add_option('-g', '--gui', default=False, action='store_true', help='Run the GUI',) parser.add_option('--migrate', action='store_true', default=False, @@ -87,6 +88,9 @@ def main(args=sys.argv): elif opts.command: sys.argv = args[:1] exec opts.command + elif opts.exec_file: + sys.argv = args[:1] + execfile(opts.exec_file) elif opts.migrate: if len(args) < 3: print 'You must specify the path to library1.db and the path to the new library folder' diff --git a/src/calibre/parallel.py b/src/calibre/parallel.py index fa9284ce46..a1a439d579 100644 --- a/src/calibre/parallel.py +++ b/src/calibre/parallel.py @@ -158,21 +158,27 @@ class WorkerMother(object): self.executable = os.path.join(os.path.dirname(sys.executable), 'calibre-parallel.exe' if isfrozen else 'Scripts\\calibre-parallel.exe') elif isosx: - self.executable = sys.executable + self.executable = self.gui_executable = sys.executable self.prefix = '' if isfrozen: fd = getattr(sys, 'frameworks_dir') contents = os.path.dirname(fd) + self.gui_executable = os.path.join(contents, 'MacOS', + os.path.basename(sys.executable)) + contents = os.path.join(contents, 'console.app', 'Contents') + self.executable = os.path.join(contents, 'MacOS', + os.path.basename(sys.executable)) + resources = os.path.join(contents, 'Resources') + fd = os.path.join(contents, 'Frameworks') sp = os.path.join(resources, 'lib', 'python'+sys.version[:3], 'site-packages.zip') - self.prefix += 'import sys; sys.frameworks_dir = "%s"; sys.frozen = "macosx_app"; '%fd self.prefix += 'sys.path.insert(0, %s); '%repr(sp) if fd not in os.environ['PATH']: self.env['PATH'] = os.environ['PATH']+':'+fd self.env['PYTHONHOME'] = resources - self.env['MAGICK_HOME'] = os.path.join(getattr(sys, 'frameworks_dir'), 'ImageMagick') - self.env['DYLD_LIBRARY_PATH'] = os.path.join(getattr(sys, 'frameworks_dir'), 'ImageMagick', 'lib') + self.env['MAGICK_HOME'] = os.path.join(fd, 'ImageMagick') + self.env['DYLD_LIBRARY_PATH'] = os.path.join(fd, 'ImageMagick', 'lib') else: self.executable = os.path.join(getattr(sys, 'frozen_path'), 'calibre-parallel') \ if isfrozen else 'calibre-parallel' @@ -186,7 +192,7 @@ class WorkerMother(object): for func in ('spawn_free_spirit', 'spawn_worker'): setattr(self, func, getattr(self, func+'_'+ext)) - + def cleanup_child_windows(self, child, name=None, fd=None): try: child.kill() @@ -219,7 +225,8 @@ class WorkerMother(object): def spawn_free_spirit_osx(self, arg, type='free_spirit'): script = 'from calibre.parallel import main; main(args=["calibre-parallel", %s]);'%repr(arg) - cmdline = [self.executable, '-c', self.prefix+script] + exe = self.gui_executable if type == 'free_spirit' else self.executable + cmdline = [exe, '-c', self.prefix+script] child = WorkerStatus(subprocess.Popen(cmdline, env=self.get_env())) atexit.register(self.cleanup_child_linux, child) return child