~ubuntu-branches/ubuntu/karmic/calibre/karmic

« back to all changes in this revision

Viewing changes to src/calibre/linux.py

  • Committer: Bazaar Package Importer
  • Author(s): Martin Pitt
  • Date: 2009-07-30 12:49:41 UTC
  • mfrom: (1.3.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20090730124941-qjdsmri25zt8zocn
Tags: 0.6.3+dfsg-0ubuntu1
* New upstream release. Please see http://calibre.kovidgoyal.net/new_in_6/
  for the list of new features and changes.
* remove_postinstall.patch: Update for new version.
* build_debug.patch: Does not apply any more, disable for now. Might not be
  necessary any more.
* debian/copyright: Fix reference to versionless GPL.
* debian/rules: Drop obsolete dh_desktop call.
* debian/rules: Add workaround for weird Python 2.6 setuptools behaviour of
  putting compiled .so files into src/calibre/plugins/calibre/plugins
  instead of src/calibre/plugins.
* debian/rules: Drop hal fdi moving, new upstream version does not use hal
  any more. Drop hal dependency, too.
* debian/rules: Install udev rules into /lib/udev/rules.d.
* Add debian/calibre.preinst: Remove unmodified
  /etc/udev/rules.d/95-calibre.rules on upgrade.
* debian/control: Bump Python dependencies to 2.6, since upstream needs
  it now.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
3
3
''' Post installation script for linux '''
4
4
import sys, os, shutil
5
 
from subprocess import check_call, call
 
5
from subprocess import check_call
6
6
 
7
7
from calibre import __version__, __appname__
8
 
from calibre.devices import devices
 
8
from calibre.customize.ui import device_plugins
9
9
 
10
 
DEVICES = devices()
 
10
DEVICES = device_plugins()
11
11
 
12
12
DESTDIR = ''
13
13
if os.environ.has_key('DESTDIR'):
15
15
 
16
16
entry_points = {
17
17
        'console_scripts': [ \
18
 
                             'prs500    = calibre.devices.prs500.cli.main:main',
19
 
                             'lrf-meta  = calibre.ebooks.lrf.meta:main',
20
 
                             'rtf-meta  = calibre.ebooks.metadata.rtf:main',
21
 
                             'pdf-meta  = calibre.ebooks.metadata.pdf:main',
22
 
                             'lit-meta  = calibre.ebooks.metadata.lit:main',
23
 
                             'imp-meta  = calibre.ebooks.metadata.imp:main',
24
 
                             'rb-meta   = calibre.ebooks.metadata.rb:main',
25
 
                             'opf-meta  = calibre.ebooks.metadata.opf2:main',
26
 
                             'odt-meta  = calibre.ebooks.metadata.odt:main',
27
 
                             'epub-meta = calibre.ebooks.metadata.epub:main',
28
 
                             'mobi-meta = calibre.ebooks.metadata.mobi:main',
29
 
                             'txt2lrf   = calibre.ebooks.lrf.txt.convert_from:main',
30
 
                             'html2lrf  = calibre.ebooks.lrf.html.convert_from:main',
31
 
                             'html2oeb  = calibre.ebooks.html:main',
32
 
                             'html2epub = calibre.ebooks.epub.from_html:main',
33
 
                             'odt2oeb   = calibre.ebooks.odt.to_oeb:main',
34
 
                             'markdown-calibre  = calibre.ebooks.markdown.markdown:main',
35
 
                             'lit2lrf   = calibre.ebooks.lrf.lit.convert_from:main',
36
 
                             'epub2lrf  = calibre.ebooks.lrf.epub.convert_from:main',
37
 
                             'rtf2lrf   = calibre.ebooks.lrf.rtf.convert_from:main',
38
 
                             'web2disk  = calibre.web.fetch.simple:main',
39
 
                             'feeds2disk = calibre.web.feeds.main:main',
40
 
                             'calibre-server = calibre.library.server:main',
41
 
                             'feeds2lrf  = calibre.ebooks.lrf.feeds.convert_from:main',
42
 
                             'feeds2epub = calibre.ebooks.epub.from_feeds:main',
43
 
                             'feeds2mobi = calibre.ebooks.mobi.from_feeds:main',
44
 
                             'web2lrf   = calibre.ebooks.lrf.web.convert_from:main',
45
 
                             'pdf2lrf   = calibre.ebooks.lrf.pdf.convert_from:main',
46
 
                             'mobi2lrf  = calibre.ebooks.lrf.mobi.convert_from:main',
47
 
                             'fb22lrf   = calibre.ebooks.lrf.fb2.convert_from:main',
48
 
                             'fb2-meta  = calibre.ebooks.metadata.fb2:main',
49
 
                             'any2lrf   = calibre.ebooks.lrf.any.convert_from:main',
50
 
                             'any2epub  = calibre.ebooks.epub.from_any:main',
51
 
                             'any2lit   = calibre.ebooks.lit.from_any:main',
52
 
                             'any2mobi  = calibre.ebooks.mobi.from_any:main',
53
 
                             'lrf2lrs   = calibre.ebooks.lrf.lrfparser:main',
54
 
                             'lrs2lrf   = calibre.ebooks.lrf.lrs.convert_from:main',
55
 
                             'pdfreflow = calibre.ebooks.lrf.pdf.reflow:main',
56
 
                             'librarything = calibre.ebooks.metadata.library_thing:main',
57
 
                             'mobi2oeb  = calibre.ebooks.mobi.reader:main',
58
 
                             'oeb2mobi  = calibre.ebooks.mobi.writer:main',
59
 
                             'lit2oeb   = calibre.ebooks.lit.reader:main',
60
 
                             'oeb2lit   = calibre.ebooks.lit.writer:main',
61
 
                             'comic2lrf = calibre.ebooks.lrf.comic.convert_from:main',
62
 
                             'comic2epub = calibre.ebooks.epub.from_comic:main',
63
 
                             'comic2mobi = calibre.ebooks.mobi.from_comic:main',
64
 
                             'comic2pdf  = calibre.ebooks.pdf.from_comic:main',
65
 
                             'calibre-debug      = calibre.debug:main',
66
 
                             'calibredb          = calibre.library.cli:main',
67
 
                             'calibre-fontconfig = calibre.utils.fontconfig:main',
68
 
                             'calibre-parallel   = calibre.parallel:main',
69
 
                             'calibre-customize  = calibre.customize.ui:main',
70
 
                             'pdftrim = calibre.ebooks.pdf.pdftrim:main' ,
71
 
                             'fetch-ebook-metadata = calibre.ebooks.metadata.fetch:main',
72
 
                             'calibre-smtp = calibre.utils.smtp:main',
73
 
                           ],
 
18
             'ebook-device       = calibre.devices.prs500.cli.main:main',
 
19
             'ebook-meta         = calibre.ebooks.metadata.cli:main',
 
20
             'ebook-convert      = calibre.ebooks.conversion.cli:main',
 
21
             'markdown-calibre   = calibre.ebooks.markdown.markdown:main',
 
22
             'web2disk           = calibre.web.fetch.simple:main',
 
23
             'calibre-server     = calibre.library.server:main',
 
24
             'lrf2lrs            = calibre.ebooks.lrf.lrfparser:main',
 
25
             'lrs2lrf            = calibre.ebooks.lrf.lrs.convert_from:main',
 
26
             'librarything       = calibre.ebooks.metadata.library_thing:main',
 
27
             'calibre-debug      = calibre.debug:main',
 
28
             'calibredb          = calibre.library.cli:main',
 
29
             'calibre-parallel   = calibre.utils.ipc.worker:main',
 
30
             'calibre-customize  = calibre.customize.ui:main',
 
31
             'calibre-complete   = calibre.utils.complete:main',
 
32
             'pdfmanipulate      = calibre.ebooks.pdf.manipulate.cli:main',
 
33
             'fetch-ebook-metadata = calibre.ebooks.metadata.fetch:main',
 
34
             'calibre-smtp = calibre.utils.smtp:main',
 
35
        ],
74
36
        'gui_scripts'    : [
75
 
                            __appname__+' = calibre.gui2.main:main',
76
 
                            'lrfviewer = calibre.gui2.lrf_renderer.main:main',
77
 
                            'ebook-viewer       = calibre.gui2.viewer.main:main',
 
37
            __appname__+' = calibre.gui2.main:main',
 
38
            'lrfviewer    = calibre.gui2.lrf_renderer.main:main',
 
39
            'ebook-viewer = calibre.gui2.viewer.main:main',
78
40
                            ],
79
41
      }
80
42
 
171
133
    return open(path, mode)
172
134
 
173
135
def setup_completion(fatal_errors):
 
136
    manifest = []
174
137
    try:
175
138
        print 'Setting up bash completion...',
176
139
        sys.stdout.flush()
177
 
        from calibre.ebooks.lrf.html.convert_from import option_parser as htmlop
178
 
        from calibre.ebooks.lrf.txt.convert_from import option_parser as txtop
179
 
        from calibre.ebooks.lrf.meta import option_parser as metaop
 
140
        from calibre.ebooks.metadata.cli import option_parser as metaop, filetypes as meta_filetypes
180
141
        from calibre.ebooks.lrf.lrfparser import option_parser as lrf2lrsop
181
142
        from calibre.gui2.lrf_renderer.main import option_parser as lrfviewerop
182
 
        from calibre.ebooks.lrf.pdf.reflow import option_parser as pdfhtmlop
183
 
        from calibre.ebooks.mobi.reader import option_parser as mobioeb
184
 
        from calibre.ebooks.lit.reader import option_parser as lit2oeb
185
 
        from calibre.web.feeds.main import option_parser as feeds2disk
 
143
        from calibre.web.fetch.simple import option_parser as web2disk
186
144
        from calibre.web.feeds.recipes import titles as feed_titles
187
 
        from calibre.ebooks.lrf.feeds.convert_from import option_parser as feeds2lrf
188
 
        from calibre.ebooks.metadata.epub import option_parser as epub_meta
189
 
        from calibre.ebooks.lrf.comic.convert_from import option_parser as comicop
190
 
        from calibre.ebooks.epub.from_html import option_parser as html2epub
191
 
        from calibre.ebooks.html import option_parser as html2oeb
192
 
        from calibre.ebooks.odt.to_oeb import option_parser as odt2oeb
193
 
        from calibre.ebooks.epub.from_feeds import option_parser as feeds2epub
194
 
        from calibre.ebooks.mobi.from_feeds import option_parser as feeds2mobi
195
 
        from calibre.ebooks.epub.from_any import option_parser as any2epub
196
 
        from calibre.ebooks.lit.from_any import option_parser as any2lit
197
 
        from calibre.ebooks.epub.from_comic import option_parser as comic2epub
198
 
        from calibre.ebooks.mobi.from_any import option_parser as any2mobi
199
145
        from calibre.ebooks.metadata.fetch import option_parser as fem_op
200
 
        from calibre.ebooks.mobi.writer import option_parser as oeb2mobi
201
146
        from calibre.gui2.main import option_parser as guiop
202
147
        from calibre.utils.smtp import option_parser as smtp_op
203
148
        any_formats = ['epub', 'htm', 'html', 'xhtml', 'xhtm', 'rar', 'zip',
204
149
             'txt', 'lit', 'rtf', 'pdf', 'prc', 'mobi', 'fb2', 'odt']
205
 
        f = open_file('/etc/bash_completion.d/libprs500')
206
 
        f.close()
207
 
        os.remove(f.name)
208
 
        manifest = []
209
 
        f = open_file('/etc/bash_completion.d/calibre')
 
150
        if os.path.exists('/usr/share/bash-completion'):
 
151
            f = open_file('/usr/share/bash-completion/calibre')
 
152
        else:
 
153
            f = open_file('/etc/bash_completion.d/calibre')
210
154
        manifest.append(f.name)
211
155
 
212
156
        f.write('# calibre Bash Shell Completion\n')
213
 
        f.write(opts_and_exts('html2lrf', htmlop,
214
 
                              ['htm', 'html', 'xhtml', 'xhtm', 'rar', 'zip', 'php']))
215
 
        f.write(opts_and_exts('txt2lrf', txtop, ['txt']))
216
 
        f.write(opts_and_exts('lit2lrf', htmlop, ['lit']))
217
 
        f.write(opts_and_exts('epub2lrf', htmlop, ['epub']))
218
 
        f.write(opts_and_exts('rtf2lrf', htmlop, ['rtf']))
219
 
        f.write(opts_and_exts('mobi2lrf', htmlop, ['mobi', 'prc']))
220
 
        f.write(opts_and_exts('fb22lrf', htmlop, ['fb2']))
221
 
        f.write(opts_and_exts('pdf2lrf', htmlop, ['pdf']))
222
 
        f.write(opts_and_exts('any2lrf', htmlop, any_formats))
223
157
        f.write(opts_and_exts('calibre', guiop, any_formats))
224
 
        f.write(opts_and_exts('any2epub', any2epub, any_formats))
225
 
        f.write(opts_and_exts('any2lit', any2lit, any_formats))
226
 
        f.write(opts_and_exts('any2mobi', any2mobi, any_formats))
227
 
        f.write(opts_and_exts('oeb2mobi', oeb2mobi, ['opf']))
228
158
        f.write(opts_and_exts('lrf2lrs', lrf2lrsop, ['lrf']))
229
 
        f.write(opts_and_exts('lrf-meta', metaop, ['lrf']))
230
 
        f.write(opts_and_exts('rtf-meta', metaop, ['rtf']))
231
 
        f.write(opts_and_exts('pdf-meta', metaop, ['pdf']))
232
 
        f.write(opts_and_exts('lit-meta', metaop, ['lit']))
233
 
        f.write(opts_and_exts('imp-meta', metaop, ['imp']))
234
 
        f.write(opts_and_exts('rb-meta',  metaop, ['rb']))
235
 
        f.write(opts_and_exts('opf-meta', metaop, ['opf']))
236
 
        f.write(opts_and_exts('odt-meta', metaop, ['odt', 'ods', 'odf', 'odg', 'odp']))
237
 
        f.write(opts_and_exts('epub-meta', epub_meta, ['epub']))
 
159
        f.write(opts_and_exts('ebook-meta', metaop, list(meta_filetypes())))
238
160
        f.write(opts_and_exts('lrfviewer', lrfviewerop, ['lrf']))
239
 
        f.write(opts_and_exts('pdfrelow', pdfhtmlop, ['pdf']))
240
 
        f.write(opts_and_exts('mobi2oeb', mobioeb, ['mobi', 'prc']))
241
 
        f.write(opts_and_exts('lit2oeb', lit2oeb, ['lit']))
242
 
        f.write(opts_and_exts('comic2lrf', comicop, ['cbz', 'cbr']))
243
 
        f.write(opts_and_exts('comic2epub', comic2epub, ['cbz', 'cbr']))
244
 
        f.write(opts_and_exts('comic2mobi', comic2epub, ['cbz', 'cbr']))
245
 
        f.write(opts_and_exts('comic2pdf', comic2epub, ['cbz', 'cbr']))
246
 
        f.write(opts_and_words('feeds2disk', feeds2disk, feed_titles))
247
 
        f.write(opts_and_words('feeds2lrf', feeds2lrf, feed_titles))
248
 
        f.write(opts_and_words('feeds2epub', feeds2epub, feed_titles))
249
 
        f.write(opts_and_words('feeds2mobi', feeds2mobi, feed_titles))
 
161
        f.write(opts_and_words('web2disk', web2disk, feed_titles))
250
162
        f.write(opts_and_words('fetch-ebook-metadata', fem_op, []))
251
163
        f.write(opts_and_words('calibre-smtp', smtp_op, []))
252
 
        f.write(opts_and_exts('html2epub', html2epub, ['html', 'htm', 'xhtm', 'xhtml', 'opf']))
253
 
        f.write(opts_and_exts('html2oeb', html2oeb, ['html', 'htm', 'xhtm', 'xhtml']))
254
 
        f.write(opts_and_exts('odt2oeb', odt2oeb, ['odt']))
255
164
        f.write('''
256
165
_prs500_ls()
257
166
{
322
231
       ;;
323
232
  esac
324
233
}
325
 
complete -o nospace  -F _prs500 prs500
 
234
complete -o nospace  -F _prs500 ebook-device
326
235
 
 
236
complete -o nospace -C calibre-complete ebook-convert
327
237
''')
328
238
        f.close()
329
239
        print 'done'
352
262
               '''BUS=="usb", SYSFS{idProduct}=="029b", SYSFS{idVendor}=="054c", MODE="660", GROUP="%s"\n'''%(group,)
353
263
             )
354
264
    udev.close()
355
 
    fdi = open_file('/usr/share/hal/fdi/policy/20thirdparty/10-calibre.fdi')
356
 
    manifest.append(fdi.name)
357
 
    fdi.write('<?xml version="1.0" encoding="UTF-8"?>\n\n<deviceinfo version="0.2">\n')
358
 
    for cls in DEVICES:
359
 
        fdi.write(\
360
 
'''
361
 
  <device>
362
 
      <match key="usb_device.vendor_id" int="%(vendor_id)s">
363
 
          <match key="usb_device.product_id" int="%(product_id)s">
364
 
              <match key="usb_device.device_revision_bcd" int="%(bcd)s">
365
 
                  <merge key="calibre.deviceclass" type="string">%(cls)s</merge>
366
 
              </match>
367
 
          </match>
368
 
      </match>
369
 
  </device>
370
 
'''%dict(cls=cls.__name__, vendor_id=cls.VENDOR_ID, product_id=cls.PRODUCT_ID,
371
 
         prog=__appname__, bcd=cls.BCD))
372
 
        fdi.write('\n'+cls.get_fdi())
373
 
    fdi.write('\n</deviceinfo>\n')
374
 
    fdi.close()
375
 
    if reload:
376
 
        called = False
377
 
        for hal in ('hald', 'hal', 'haldaemon'):
378
 
            hal = os.path.join('/etc/init.d', hal)
379
 
            if os.access(hal, os.X_OK):
380
 
                call((hal, 'restart'))
381
 
                called = True
382
 
                break
383
 
        if not called and os.access('/etc/rc.d/rc.hald', os.X_OK):
384
 
            call(('/etc/rc.d/rc.hald', 'restart'))
385
 
 
386
 
        try:
387
 
            check_call('udevadm control --reload_rules', shell=True)
388
 
        except:
389
 
            try:
390
 
                check_call('udevcontrol reload_rules', shell=True)
391
 
            except:
392
 
                try:
393
 
                    check_call('/etc/init.d/udev reload', shell=True)
394
 
                except:
395
 
                    if fatal_errors:
396
 
                        raise Exception("Couldn't reload udev, you may have to reboot")
397
 
                    print >>sys.stderr, "Couldn't reload udev, you may have to reboot"
398
265
    return manifest
399
266
 
400
267
def option_parser():
403
270
    parser.add_option('--use-destdir', action='store_true', default=False, dest='destdir',
404
271
                      help='If set, respect the environment variable DESTDIR when installing files')
405
272
    parser.add_option('--do-not-reload-udev-hal', action='store_true', dest='dont_reload', default=False,
406
 
                      help='If set, do not try to reload udev rules and HAL FDI files')
 
273
                      help='Does nothing. Present for legacy reasons.')
407
274
    parser.add_option('--group-file', default='/etc/group', dest='group_file',
408
275
                      help='File from which to read group information. Default: %default')
409
276
    parser.add_option('--dont-check-root', action='store_true', default=False, dest='no_root',
467
334
        os.chdir(config_dir)
468
335
        for f in os.listdir('.'):
469
336
            if os.stat(f).st_uid == 0:
470
 
                os.unlink(f)
 
337
                os.rmdir(f) if os.path.isdir(f) else os.unlink(f)
 
338
    if os.stat(config_dir).st_uid == 0:
 
339
        os.rmdir(config_dir)
471
340
 
472
341
def binary_install():
473
342
    manifest = os.path.join(getattr(sys, 'frozen_path'), 'manifest')
602
471
if __name__ == '__main__':
603
472
    post_install()
604
473
 
605
 
 
606
 
 
607