From 349edbe472ea28d25516f4a503ef1b10110f5cda Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 21 Jul 2008 16:55:15 -0700 Subject: [PATCH] IGN:Integrate lit2oeb --- Makefile | 10 ++++----- installer/windows/freeze.py | 22 ++++++++++++++++++- osx_installer.py | 25 +++++++++++++++++++++- src/calibre/__init__.py | 36 ++++++++++++++++++-------------- src/calibre/ebooks/lit/reader.py | 11 +++------- src/calibre/gui2/cover_flow.py | 3 ++- src/calibre/gui2/main.py | 5 ++--- src/calibre/linux.py | 2 ++ src/calibre/translations/nl.po | 10 +++++---- src/calibre/utils/lzx/setup.py | 15 +++++++++++++ 10 files changed, 100 insertions(+), 39 deletions(-) create mode 100644 src/calibre/utils/lzx/setup.py diff --git a/Makefile b/Makefile index 399c086d95..e2dc7770df 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ PYTHON = python all : plugins gui2 translations resources -plugins : src/calibre/plugins pictureflow +plugins : src/calibre/plugins pictureflow lzx src/calibre/plugins: mkdir -p src/calibre/plugins @@ -39,10 +39,10 @@ pictureflow : rm -rf src/calibre/gui2/pictureflow/.build rm -rf src/calibre/gui2/pictureflow/PyQt/.build lzx : - mkdir -p src/calibre/plugins && rm -f src/calibre/plugins/*pictureflow* && \ - cd src/calibre/utils/lzx && mkdir .build && cd .build && \ - ${PYTHON} ../configure.py && make && cd - && \ - cp src/calibre/utils/lzx/.build/lzx.so src/calibre/plugins/ && \ + mkdir -p src/calibre/plugins && rm -f src/calibre/plugins/lzx.so && \ + cd src/calibre/utils/lzx && \ + ${PYTHON} setup.py build --build-base=.build && cd - && \ + cp src/calibre/utils/lzx/.build/lib*/lzx.so src/calibre/plugins/ && \ rm -rf src/calibre/utils/lzx/.build/ pot : diff --git a/installer/windows/freeze.py b/installer/windows/freeze.py index 7dc5a8bbf3..576ea5c5a9 100644 --- a/installer/windows/freeze.py +++ b/installer/windows/freeze.py @@ -50,6 +50,25 @@ class BuildEXE(py2exe.build_exe.py2exe): ''' + def build_distutil_plugins(self): + plugins = [ + ('lzx', os.path.join('utils', 'lzx')), + ] + for name, path in plugins: + print 'Building plugin', name + path = os.path.abspath(os.path.join('src', 'calibre', path)) + cwd = os.getcwd() + dd = os.path.join(cwd, self.dist_dir) + os.chdir(path) + try: + if os.path.exists('.build'): + shutil.rmtree('.build') + subprocess.check_call(('python', 'setup.py', 'build', '--build-base', '.build')) + plugin = os.path.abspath(glob.glob('.build\\lib*\\%s.pyd'%name)[0]) + shutil.copyfile(plugin, os.path.join(dd, os.path.basename(plugin))) + finally: + os.chdir(cwd) + def build_plugins(self): cwd = os.getcwd() dd = os.path.join(cwd, self.dist_dir) @@ -80,6 +99,7 @@ class BuildEXE(py2exe.build_exe.py2exe): if not os.path.exists(self.dist_dir): os.makedirs(self.dist_dir) print 'Building custom plugins...' + self.build_distutil_plugins() self.build_plugins() py2exe.build_exe.py2exe.run(self) qtsvgdll = None @@ -189,7 +209,7 @@ def main(args=sys.argv): 'calibre.ebooks.lrf.feeds.*', 'lxml', 'lxml._elementpath', 'genshi', 'path', 'pydoc', 'IPython.Extensions.*', - 'calibre.web.feeds.recipes.*', + 'calibre.web.feeds.recipes.*', 'PyQt4.QtWebKit', 'PyQt4.QtNetwork', ], 'packages' : ['PIL'], diff --git a/osx_installer.py b/osx_installer.py index c092650de6..c07702727d 100644 --- a/osx_installer.py +++ b/osx_installer.py @@ -171,6 +171,28 @@ _check_symlinks_prescript() subprocess.check_call(['/usr/bin/install_name_tool', '-change', '/Library/Frameworks/Python.framework/Versions/2.5/Python', '@executable_path/../Frameworks/Python.framework/Versions/2.5/Python', f]) + def build_distutils_plugins(self): + plugins = [ + ('lzx', os.path.join('utils', 'lzx')), + ] + files = [] + env = {'PATH':os.environ['PATH']} + for name, path in plugins: + print 'Building plugin', name + path = os.path.abspath(os.path.join('src', 'calibre', path)) + cwd = os.getcwd() + os.chdir(path) + try: + if os.path.exists('.build'): + shutil.rmtree('.build') + subprocess.check_call((sys.executable, 'setup.py', 'build', '--build-base', '.build'), + env=env) + plugin = os.path.abspath(glob.glob('.build/lib*/%s.so'%name)[0]) + files.append([plugin, os.path.basename(plugin)]) + finally: + os.chdir(cwd) + return files + def build_plugins(self): cwd = os.getcwd() qmake = '/Users/kovid/qt/bin/qmake' @@ -205,6 +227,7 @@ _check_symlinks_prescript() def run(self): + plugin_files = self.build_distutils_plugins() py2app.run(self) resource_dir = os.path.join(self.dist_dir, APPNAME + '.app', 'Contents', 'Resources') @@ -227,7 +250,7 @@ _check_symlinks_prescript() os.chmod(path, stat.S_IXUSR|stat.S_IXGRP|stat.S_IXOTH|stat.S_IREAD\ |stat.S_IWUSR|stat.S_IROTH|stat.S_IRGRP) self.add_qt_plugins() - plugin_files = self.build_plugins() + plugin_files += self.build_plugins() print print 'Adding clit' diff --git a/src/calibre/__init__.py b/src/calibre/__init__.py index 2237024963..0a11a02705 100644 --- a/src/calibre/__init__.py +++ b/src/calibre/__init__.py @@ -563,22 +563,6 @@ def strftime(fmt, t=time.localtime()): except: return unicode(result, 'utf-8', 'replace') -if islinux and not getattr(sys, 'frozen', False): - import pkg_resources - plugins = pkg_resources.resource_filename(__appname__, 'plugins') - sys.path.insert(1, plugins) - -if iswindows and hasattr(sys, 'frozen'): - sys.path.insert(1, os.path.dirname(sys.executable)) - -try: - import pictureflow - pictureflowerror = '' -except Exception, err: - pictureflow = None - pictureflowerror = str(err) - - def entity_to_unicode(match, exceptions=[], encoding='cp1252'): ''' @param match: A match object such that '&'+match.group(1)';' is the entity. @@ -621,3 +605,23 @@ if isosx: for font in fonts: exec 'from calibre.ebooks.lrf.fonts.liberation.'+font+' import font_data' open(os.path.join(fdir, font+'.ttf'), 'wb').write(font_data) + +if islinux and not getattr(sys, 'frozen', False): + import pkg_resources + plugins = pkg_resources.resource_filename(__appname__, 'plugins') + sys.path.insert(1, plugins) + +if iswindows and getattr(sys, 'frozen', False): + sys.path.insert(1, os.path.dirname(sys.executable)) + + +plugins = {} +for plugin in ['pictureflow', 'lzx']: + try: + p, err = __import__(plugin), '' + except Exception, err: + p = None + err = str(err) + plugins[plugin] = (p, err) + + diff --git a/src/calibre/ebooks/lit/reader.py b/src/calibre/ebooks/lit/reader.py index 2850b05a2b..4a97571bfb 100644 --- a/src/calibre/ebooks/lit/reader.py +++ b/src/calibre/ebooks/lit/reader.py @@ -9,17 +9,12 @@ __copyright__ = '2008, Kovid Goyal ' \ import sys, struct, cStringIO, os import functools -import codecs -from itertools import repeat - -from calibre import relpath -from calibre.ebooks.metadata import MetaInformation -from calibre.ebooks.metadata.opf import OPFReader from calibre.ebooks.lit import LitError from calibre.ebooks.lit.maps import OPF_MAP, HTML_MAP import calibre.ebooks.lit.mssha1 as mssha1 import calibre.ebooks.lit.msdes as msdes -import calibre.utils.lzx as lzx +from calibre import plugins +lzx, lxzerror = plugins['lzx'] OPF_DECL = """