-
Notifications
You must be signed in to change notification settings - Fork 199
/
setup.py
executable file
·96 lines (79 loc) · 3.34 KB
/
setup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#!/usr/bin/env python3
import logging
import os
from glob import glob
from os.path import join
from subprocess import check_call, check_output
from setuptools import Command, setup
from setuptools.command.build import build
from setuptools.command.install import install
from setuptools.command.sdist import sdist
class retext_build_translations(Command):
description = 'Build .qm files from .ts files using lrelease'
user_options = []
def initialize_options(self):
pass
def finalize_options(self):
pass
def run(self):
environment = dict(os.environ, QT_SELECT='6')
# Add Qt 6 binaries directory to PATH.
try:
qt6_path = check_output(('qmake6', '-query', 'QT_INSTALL_BINS'))
except OSError:
logging.exception('Could not run qmake6:')
else:
qt6_path = qt6_path.decode('utf-8').rstrip()
environment['PATH'] = qt6_path + os.pathsep + environment['PATH']
for ts_file in glob(join('ReText', 'locale', '*.ts')):
try:
check_call(('lrelease', ts_file), env=environment)
except Exception:
logging.exception('Failed to build translations:')
break
class retext_build(build):
sub_commands = [('build_translations', None)] + build.sub_commands
class retext_sdist(sdist):
def run(self):
self.run_command('build_translations')
sdist.run(self)
class retext_install(install):
def change_roots(self, *names):
self.orig_install_scripts = self.install_scripts
self.orig_install_data = self.install_data
self.orig_install_lib = self.install_lib
install.change_roots(self, *names)
def run(self):
install.run(self)
if self.root is None:
self.orig_install_scripts = self.install_scripts
self.orig_install_data = self.install_data
self.orig_install_lib = self.install_lib
retext = join(self.orig_install_scripts, 'retext')
desktop_file_path = join(self.install_data, 'share', 'applications',
'me.mitya57.ReText.desktop')
if self.root and self.root.endswith('/wheel'):
# Desktop files don't allow relative paths, and we don't know the
# absolute path when building a wheel.
logging.info('removing the .desktop file from the wheel')
os.remove(desktop_file_path)
return
# Fix Exec and Icon fields in the desktop file
icon_path = join(self.orig_install_lib, 'ReText', 'icons', 'retext.svg')
with open(desktop_file_path, encoding="utf-8") as desktop_file:
desktop_contents = desktop_file.read()
logging.info('fixing Exec line in %s', desktop_file_path)
desktop_contents = desktop_contents.replace('Exec=retext', f'Exec={retext}')
if self.orig_install_data != '/usr':
logging.info('fixing Icon line in %s', desktop_file_path)
desktop_contents = desktop_contents.replace('Icon=retext', f'Icon={icon_path}')
with open(desktop_file_path, 'w', encoding="utf-8") as desktop_file:
desktop_file.write(desktop_contents)
setup(
cmdclass={
'build_translations': retext_build_translations,
'build': retext_build,
'sdist': retext_sdist,
'install': retext_install,
}
)