9578053 Jan 22 2022 distfiles.gentoo.org/distfiles/gajim-1.3.3-2.tar.gz
This commit is contained in:
parent
a5b3822651
commit
4c1b226bff
1045 changed files with 753037 additions and 18 deletions
216
setup.py
Normal file
216
setup.py
Normal file
|
|
@ -0,0 +1,216 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
if sys.version_info < (3, 7):
|
||||
sys.exit('Gajim needs Python 3.7+')
|
||||
|
||||
from setuptools import setup, find_packages
|
||||
from setuptools import Command
|
||||
from setuptools.command.build_py import build_py as _build
|
||||
from setuptools.command.install import install as _install
|
||||
from distutils import log
|
||||
from distutils.util import newer
|
||||
from pathlib import Path
|
||||
|
||||
pos = Path('po').glob('*.po')
|
||||
ALL_LINGUAS = sorted([x.stem for x in pos])
|
||||
MAN_FILES = ['gajim.1', 'gajim-history-manager.1', 'gajim-remote.1']
|
||||
META_FILES = [('data/org.gajim.Gajim.desktop', 'share/applications', '--desktop'),
|
||||
('data/org.gajim.Gajim.appdata.xml', 'share/metainfo', '--xml')]
|
||||
cwd = Path(__file__).resolve().parent
|
||||
build_dir = cwd / 'build'
|
||||
|
||||
|
||||
def update_trans():
|
||||
'''
|
||||
Update translation files
|
||||
'''
|
||||
template = Path('po') / 'gajim.pot'
|
||||
files = list(Path('gajim').rglob('*.py'))
|
||||
files.extend(Path('gajim').rglob('*.ui'))
|
||||
files.append(Path('data') / 'org.gajim.Gajim.desktop.in')
|
||||
files.append(Path('data') / 'org.gajim.Gajim.appdata.xml.in')
|
||||
cmd = 'xgettext -c# --from-code=utf-8 --keyword=Q_ -o %s %s' % (
|
||||
template, ' '.join([str(f) for f in files]))
|
||||
if os.system(cmd) != 0:
|
||||
msg = f'ERROR: {template} could not be created!\n'
|
||||
raise SystemExit(msg)
|
||||
|
||||
for lang in ALL_LINGUAS:
|
||||
po_file = Path('po') / (lang + '.po')
|
||||
cmd = f'msgmerge -U {po_file} {template}'
|
||||
if os.system(cmd) != 0:
|
||||
msg = 'ERROR: Updating language translation file failed.'
|
||||
ask = msg + '\n Continue updating y/n [n] '
|
||||
reply = input(ask)
|
||||
if reply in ['n', 'N']:
|
||||
raise SystemExit(msg)
|
||||
log.info('Updating %s', po_file)
|
||||
|
||||
|
||||
def build_trans(build_cmd):
|
||||
'''
|
||||
Translate the language files into gajim.mo
|
||||
'''
|
||||
for lang in ALL_LINGUAS:
|
||||
po_file = Path('po') / (lang + '.po')
|
||||
mo_file = build_dir / 'mo' / lang / 'LC_MESSAGES' / 'gajim.mo'
|
||||
mo_dir = mo_file.parent
|
||||
if not (mo_dir.is_dir() or mo_dir.is_symlink()):
|
||||
mo_dir.mkdir(parents=True)
|
||||
|
||||
if newer(po_file, mo_file):
|
||||
cmd = f'msgfmt {po_file} -o {mo_file}'
|
||||
if os.system(cmd) != 0:
|
||||
mo_file.unlink()
|
||||
msg = 'ERROR: Building language translation files failed.'
|
||||
ask = msg + '\n Continue building y/n [n] '
|
||||
reply = input(ask)
|
||||
if reply in ['n', 'N']:
|
||||
raise SystemExit(msg)
|
||||
log.info('Compiling %s >> %s', po_file, mo_file)
|
||||
|
||||
|
||||
def install_trans(install_cmd):
|
||||
data_files = install_cmd.distribution.data_files
|
||||
for lang in ALL_LINGUAS:
|
||||
mo_file = str(build_dir / 'mo' / lang / 'LC_MESSAGES' / 'gajim.mo')
|
||||
target = f'share/locale/{lang}/LC_MESSAGES'
|
||||
data_files.append((target, [mo_file]))
|
||||
|
||||
|
||||
def build_man(build_cmd):
|
||||
'''
|
||||
Compress Gajim manual files
|
||||
'''
|
||||
newdir = build_dir / 'man'
|
||||
if not (newdir.is_dir() or newdir.is_symlink()):
|
||||
newdir.mkdir()
|
||||
|
||||
for man in MAN_FILES:
|
||||
filename = Path('data') / man
|
||||
man_file_gz = newdir / (man + '.gz')
|
||||
if man_file_gz.exists():
|
||||
if newer(filename, man_file_gz):
|
||||
man_file_gz.unlink()
|
||||
else:
|
||||
continue
|
||||
|
||||
import gzip
|
||||
# Binary io, so open is OK
|
||||
with open(filename, 'rb') as f_in,\
|
||||
gzip.open(man_file_gz, 'wb') as f_out:
|
||||
f_out.writelines(f_in)
|
||||
log.info('Compiling %s >> %s', filename, man_file_gz)
|
||||
|
||||
|
||||
def install_man(install_cmd):
|
||||
data_files = install_cmd.distribution.data_files
|
||||
man_dir = build_dir / 'man'
|
||||
target = 'share/man/man1'
|
||||
|
||||
for man in MAN_FILES:
|
||||
man_file_gz = str(man_dir / (man + '.gz'))
|
||||
data_files.append((target, [man_file_gz]))
|
||||
|
||||
|
||||
def build_intl(build_cmd):
|
||||
'''
|
||||
Merge translation files into desktop and mime files
|
||||
'''
|
||||
base = build_dir
|
||||
|
||||
for filename, _, option in META_FILES:
|
||||
newfile = base / filename
|
||||
newdir = newfile.parent
|
||||
if not(newdir.is_dir() or newdir.is_symlink()):
|
||||
newdir.mkdir()
|
||||
merge(Path(filename + '.in'), newfile, option)
|
||||
|
||||
|
||||
def install_intl(install_cmd):
|
||||
data_files = install_cmd.distribution.data_files
|
||||
|
||||
for filename, target, _ in META_FILES:
|
||||
data_files.append((target, [str(build_dir / filename)]))
|
||||
|
||||
|
||||
def merge(in_file, out_file, option, po_dir='po'):
|
||||
'''
|
||||
Run the msgfmt command.
|
||||
'''
|
||||
if in_file.exists():
|
||||
cmd = (('msgfmt %(opt)s -d %(po_dir)s --template %(in_file)s '
|
||||
'-o %(out_file)s') %
|
||||
{'opt': option,
|
||||
'po_dir': po_dir,
|
||||
'in_file': in_file,
|
||||
'out_file': out_file})
|
||||
if os.system(cmd) != 0:
|
||||
msg = ('ERROR: %s was not merged into the translation files!\n' %
|
||||
out_file)
|
||||
raise SystemExit(msg)
|
||||
log.info('Compiling %s >> %s', in_file, out_file)
|
||||
|
||||
|
||||
class build(_build):
|
||||
def run(self):
|
||||
build_trans(self)
|
||||
if sys.platform != 'win32':
|
||||
build_man(self)
|
||||
build_intl(self)
|
||||
_build.run(self)
|
||||
|
||||
|
||||
class install(_install):
|
||||
def run(self):
|
||||
install_trans(self)
|
||||
if sys.platform != 'win32':
|
||||
install_man(self)
|
||||
install_intl(self)
|
||||
_install.run(self)
|
||||
|
||||
|
||||
class update_po(Command):
|
||||
description = "Update po files"
|
||||
user_options = []
|
||||
|
||||
def initialize_options(self):
|
||||
pass
|
||||
|
||||
def finalize_options(self):
|
||||
pass
|
||||
|
||||
def run(self):
|
||||
update_trans()
|
||||
|
||||
|
||||
# only install subdirectories of data
|
||||
data_files_app_icon = [
|
||||
("share/icons/hicolor/scalable/apps",
|
||||
["gajim/data/icons/hicolor/scalable/apps/org.gajim.Gajim.svg"]),
|
||||
("share/icons/hicolor/scalable/apps",
|
||||
["gajim/data/icons/hicolor/scalable/apps/org.gajim.Gajim-symbolic.svg"])
|
||||
]
|
||||
|
||||
data_files = data_files_app_icon
|
||||
|
||||
setup(
|
||||
cmdclass={
|
||||
'build_py': build,
|
||||
'install': install,
|
||||
'update_po': update_po,
|
||||
},
|
||||
entry_points={
|
||||
'console_scripts': [
|
||||
'gajim-remote = gajim.gajim_remote:main',
|
||||
],
|
||||
'gui_scripts': [
|
||||
'gajim = gajim.gajim:main',
|
||||
'gajim-history-manager = gajim.history_manager:main',
|
||||
]
|
||||
},
|
||||
data_files=data_files
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue