File: setup.py

package info (click to toggle)
retext 8.1.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,780 kB
  • sloc: python: 5,363; xml: 149; makefile: 20; sh: 8
file content (96 lines) | stat: -rwxr-xr-x 3,422 bytes parent folder | download
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,
    }
)