mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-05-31 04:04:13 -04:00
Using ruff. Does not change any translatable strings. There are still several thousand usages of % left that ruff wont auto-convert. Get to them someday.
106 lines
2.7 KiB
Python
106 lines
2.7 KiB
Python
#!/usr/bin/env python
|
|
# License: GPLv3 Copyright: 2016, Kovid Goyal <kovid at kovidgoyal.net>
|
|
|
|
|
|
import io
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
import tarfile
|
|
import time
|
|
|
|
|
|
def printf(*args, **kw):
|
|
print(*args, **kw)
|
|
sys.stdout.flush()
|
|
|
|
|
|
def download_file(url):
|
|
from urllib.request import urlopen
|
|
count = 5
|
|
while count > 0:
|
|
count -= 1
|
|
try:
|
|
printf('Downloading', url)
|
|
return urlopen(url).read()
|
|
except Exception:
|
|
if count <= 0:
|
|
raise
|
|
print('Download failed retrying...')
|
|
time.sleep(1)
|
|
|
|
|
|
def sw():
|
|
sw = os.environ['SW']
|
|
os.chdir(sw)
|
|
url = 'https://download.calibre-ebook.com/ci/calibre7/windows-64.tar.xz'
|
|
tarball = download_file(url)
|
|
with tarfile.open(fileobj=io.BytesIO(tarball)) as tf:
|
|
tf.extractall()
|
|
printf('Download complete')
|
|
|
|
|
|
def sanitize_path():
|
|
needed_paths = []
|
|
executables = 'git.exe curl.exe rapydscript.cmd node.exe'.split()
|
|
for p in os.environ['PATH'].split(os.pathsep):
|
|
for x in tuple(executables):
|
|
if os.path.exists(os.path.join(p, x)):
|
|
needed_paths.append(p)
|
|
executables.remove(x)
|
|
sw = os.environ['SW']
|
|
paths = rf'{sw}\private\python\bin {sw}\private\python\Lib\site-packages\pywin32_system32 {sw}\bin {sw}\qt\bin C:\Windows\System32'.split() + needed_paths
|
|
os.environ['PATH'] = os.pathsep.join(paths)
|
|
print('PATH:', os.environ['PATH'])
|
|
|
|
|
|
def python_exe():
|
|
return os.path.join(os.environ['SW'], 'private', 'python', 'python.exe')
|
|
|
|
|
|
def build():
|
|
sanitize_path()
|
|
cmd = [python_exe(), 'setup.py', 'bootstrap', '--ephemeral']
|
|
printf(*cmd)
|
|
p = subprocess.Popen(cmd)
|
|
raise SystemExit(p.wait())
|
|
|
|
|
|
def test():
|
|
sanitize_path()
|
|
for q in ('test', 'test_rs'):
|
|
cmd = [python_exe(), 'setup.py', q]
|
|
printf(*cmd)
|
|
p = subprocess.Popen(cmd)
|
|
if p.wait() != 0:
|
|
raise SystemExit(p.returncode)
|
|
|
|
|
|
def setup_env():
|
|
os.environ['SW'] = SW = r'C:\r\sw64\sw'
|
|
os.makedirs(SW, exist_ok=True)
|
|
os.environ['QMAKE'] = os.path.join(SW, r'qt\bin\qmake')
|
|
os.environ['CALIBRE_QT_PREFIX'] = os.path.join(SW, r'qt')
|
|
os.environ['CI'] = 'true'
|
|
os.environ['OPENSSL_MODULES'] = os.path.join(SW, 'lib', 'ossl-modules')
|
|
os.environ['PIPER_TTS_DIR'] = os.path.join(SW, 'piper')
|
|
|
|
|
|
def main():
|
|
q = sys.argv[-1]
|
|
setup_env()
|
|
if q == 'bootstrap':
|
|
build()
|
|
elif q == 'test':
|
|
test()
|
|
elif q == 'install':
|
|
sw()
|
|
else:
|
|
if len(sys.argv) == 1:
|
|
raise SystemExit('Usage: win-ci.py sw|build|test')
|
|
raise SystemExit(f'{sys.argv[-1]!r} is not a valid action')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|