calibre/setup/installers.py

90 lines
2.7 KiB
Python

#!/usr/bin/env python2
# vim:fileencoding=utf-8
# License: GPLv3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
from __future__ import (unicode_literals, division, absolute_import,
print_function)
import os, sys, subprocess
from setup import Command
def build_single(which, bitness, shutdown=True):
d = os.path.dirname
base = d(d(os.path.abspath(__file__)))
build_calibre = os.path.join(d(base), 'build-calibre')
build_calibre = os.environ.get('BUILD_CALIBRE_LOCATION', build_calibre)
if not os.path.isdir(build_calibre):
raise SystemExit('Cannot find the build-calibre code. Set the environment variable BUILD_CALIBRE_LOCATION to point to it')
cmd = [sys.executable, os.path.join(build_calibre, which)]
if bitness:
cmd.append(bitness)
cmd.append('calibre')
env = os.environ.copy()
env['CALIBRE_SRC_DIR'] = base
ret = subprocess.Popen(cmd, env=env, cwd=build_calibre).wait()
if ret != 0:
raise SystemExit(ret)
dist = os.path.join(build_calibre, 'build', which)
if bitness:
dist = os.path.join(dist, bitness)
dist = os.path.join(dist, 'dist')
for x in os.listdir(dist):
print(x)
os.link(os.path.join(dist, x), os.path.join(base, 'dist', x))
if shutdown and which != 'linux':
cmd = [sys.executable, os.path.join(build_calibre, which), 'shutdown']
subprocess.Popen(cmd, env=env, cwd=build_calibre).wait()
class BuildInstaller(Command):
OS = BITNESS = ''
def add_options(self, parser):
parser.add_option('--dont-shutdown', default=False, action='store_true',
help='Do not shutdown the VM after building')
def run(self, opts):
build_single(self.OS, self.BITNESS, not opts.dont_shutdown)
class BuildInstallers(BuildInstaller):
OS = ''
def run(self, opts):
bits = '64 32'.split()
for bitness in bits:
shutdown = bitness is bits[-1] and not opts.dont_shutdown
build_single(self.OS, bitness, shutdown)
class Linux32(BuildInstaller):
OS = 'linux'
BITNESS = '32'
description = 'Build the 32-bit linux calibre installer'
class Linux64(BuildInstaller):
OS = 'linux'
BITNESS = '64'
description = 'Build the 64-bit linux calibre installer'
class Win32(BuildInstaller):
OS = 'win'
BITNESS = '32'
description = 'Build the 32-bit windows calibre installers'
class Win64(BuildInstaller):
OS = 'win'
BITNESS = '64'
description = 'Build the 64-bit windows calibre installer'
class OSX(BuildInstaller):
OS = 'osx'
class Linux(BuildInstallers):
OS = 'linux'
class Win(BuildInstallers):
OS = 'win'