gajim-plural/setup.py

226 lines
7.3 KiB
Python
Raw Normal View History

2017-06-14 00:05:04 +02:00
#!/usr/bin/env python3
import os
import sys
if sys.version_info[0] < 3:
sys.exit('Tried to install with Python 2, gajim only supports Python 3.')
import codecs
from setuptools import setup, find_packages
2017-09-16 00:21:49 +02:00
from setuptools import Command
from setuptools.command.build_py import build_py as _build
2017-06-14 00:05:04 +02:00
from distutils import log
from distutils.util import convert_path, newer
import gajim
pos = [x for x in os.listdir('po') if x[-3:] == ".po"]
ALL_LINGUAS = sorted([os.path.split(x)[-1][:-3] for x in pos])
cwd = os.path.dirname(os.path.realpath(__file__))
2017-06-14 00:05:04 +02:00
def build_trans(build_cmd):
'''
Translate the language files into gajim.mo
'''
data_files = build_cmd.distribution.data_files
for lang in ALL_LINGUAS:
po_file = os.path.join('po', lang + '.po')
mo_file = os.path.join(cwd, 'mo', lang, 'LC_MESSAGES', 'gajim.mo')
2017-06-14 00:05:04 +02:00
mo_dir = os.path.dirname(mo_file)
if not (os.path.isdir(mo_dir) or os.path.islink(mo_dir)):
2017-06-14 00:05:04 +02:00
os.makedirs(mo_dir)
if newer(po_file, mo_file):
cmd = 'msgfmt %s -o %s' % (po_file, mo_file)
if os.system(cmd) != 0:
os.remove(mo_file)
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)
#linux specific piece:
target = 'share/locale/' + lang + '/LC_MESSAGES'
data_files.append((target, [mo_file]))
2017-06-14 00:05:04 +02:00
def build_man(build_cmd):
'''
Compress Gajim manual files
2017-06-14 00:05:04 +02:00
'''
data_files = build_cmd.distribution.data_files
for man in ['gajim.1', 'gajim-history-manager.1', 'gajim-remote.1']:
filename = os.path.join('data', man)
newdir = os.path.join(cwd, 'man')
if not (os.path.isdir(newdir) or os.path.islink(newdir)):
2017-06-14 00:05:04 +02:00
os.makedirs(newdir)
import gzip
man_file_gz = os.path.join(newdir, man + '.gz')
if os.path.exists(man_file_gz):
if newer(filename, man_file_gz):
os.remove(man_file_gz)
else:
filename = False
if filename:
#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)
src = cwd + '/man' + '/' + man + '.gz'
2017-06-14 00:05:04 +02:00
target = 'share/man/man1'
data_files.append((target, [src]))
def build_intl(build_cmd):
'''
Merge translation files into desktop and mime files
'''
data_files = build_cmd.distribution.data_files
base = cwd
2017-06-14 00:05:04 +02:00
2017-09-08 23:32:19 +02:00
merge_files = (('data/org.gajim.Gajim.desktop', 'share/applications', '--desktop'),
('data/gajim-remote.desktop', 'share/applications', '--desktop'),
('data/org.gajim.Gajim.appdata.xml', 'share/metainfo', '--xml'))
2017-06-14 00:05:04 +02:00
for filename, target, option in merge_files:
filenamelocal = convert_path(filename)
newfile = os.path.join(base, filenamelocal)
newdir = os.path.dirname(newfile)
if not(os.path.isdir(newdir) or os.path.islink(newdir)):
os.makedirs(newdir)
merge(filenamelocal + '.in', newfile, option)
data_files.append((target, [base + '/' + filename]))
def substitute_variables(filename_in, filename_out, subst_vars):
'''
Substitute variables in a file.
'''
f_in = codecs.open(filename_in, encoding='utf-8')
f_out = codecs.open(filename_out, encoding='utf-8', mode='w')
for line in f_in:
for variable, substitution in subst_vars:
line = line.replace(variable, substitution)
f_out.write(line)
f_in.close()
f_out.close()
2017-09-08 23:32:19 +02:00
def merge(in_file, out_file, option, po_dir='po'):
2017-06-14 00:05:04 +02:00
'''
2017-09-08 23:32:19 +02:00
Run the msgfmt command.
2017-06-14 00:05:04 +02:00
'''
if (not os.path.exists(out_file) and os.path.exists(in_file)):
2017-09-08 23:32:19 +02:00
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})
2017-06-14 00:05:04 +02:00
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':
2017-06-14 00:05:04 +02:00
build_man(self)
build_intl(self)
_build.run(self)
2017-09-16 00:21:49 +02:00
class test(Command):
description = "Run all tests"
user_options = []
def initialize_options(self):
pass
def finalize_options(self):
pass
def run(self):
os.system("./test/runtests.py")
class test_nogui(test):
description = "Run tests without GUI"
def run(self):
os.system("./test/runtests.py -n")
package_data_activities = ['data/activities/*/*/*.png']
2017-06-14 00:05:04 +02:00
package_data_emoticons = ['data/emoticons/*/emoticons_theme.py',
'data/emoticons/*/*.png',
'data/emoticons/*/LICENSE']
package_data_gui = ['data/gui/*.ui']
2017-09-18 21:07:50 +02:00
package_data_icons = ['data/icons/hicolor/*/*/*.png',
'data/icons/hicolor/*/*/*.svg']
package_data_iconsets = ['data/iconsets/*/*/*.gif',
'data/iconsets/*/*/*.png',
'data/iconsets/transports/*/*/*.png']
package_data_moods = ['data/moods/*/*.png']
2017-09-18 21:07:50 +02:00
package_data_other = ['data/other/*']
package_data_sounds = ['data/sounds/*.wav']
2017-06-14 00:05:04 +02:00
package_data_style = ['data/style/gajim.css']
package_plugins_data = ['plugins/*/*']
package_data = (package_data_activities
+ package_data_emoticons
2017-06-14 00:05:04 +02:00
+ package_data_gui
+ package_data_icons
+ package_data_iconsets
+ package_data_moods
2017-09-03 00:26:08 +02:00
+ package_data_other
+ package_data_sounds
+ package_data_style
+ package_plugins_data)
2017-06-14 00:05:04 +02:00
# only install subdirectories of data
data_files_app_icon = [
2017-09-18 21:07:50 +02:00
("share/icons/hicolor/64x64/apps", ["gajim/data/icons/hicolor/64x64/apps/org.gajim.Gajim.png"]),
("share/icons/hicolor/128x128/apps", ["gajim/data/icons/hicolor/128x128/apps/org.gajim.Gajim.png"]),
("share/icons/hicolor/scalable/apps", ["gajim/data/icons/hicolor/scalable/apps/org.gajim.Gajim.svg"])
2017-06-14 00:05:04 +02:00
]
data_files = data_files_app_icon
setup(
name = "gajim",
2017-09-08 23:37:45 +02:00
description = 'A GTK+ Jabber client',
2017-09-15 22:51:18 +02:00
version = gajim.__version__,
author = "Philipp Hörist, Yann Leboulanger",
author_email = "gajim-devel@gajim.org",
2017-06-14 00:05:04 +02:00
url = 'https://gajim.org',
2017-09-14 23:34:31 +02:00
license = 'GPL v3',
classifiers = [
'Programming Language :: Python :: 3',
],
2017-06-14 00:05:04 +02:00
cmdclass = {
'build_py': build,
2017-09-16 00:21:49 +02:00
'test': test,
'test_nogui': test_nogui,
2017-06-14 00:05:04 +02:00
},
scripts = [
'scripts/gajim',
'scripts/gajim-history-manager',
'scripts/gajim-remote' ],
2017-09-15 22:51:18 +02:00
packages = find_packages(exclude=["gajim.dev", "test*"]),
2017-06-14 00:05:04 +02:00
package_data = {'gajim': package_data},
data_files = data_files,
2017-09-15 22:51:18 +02:00
install_requires = [
'dbus-python',
'nbxmpp',
'pyOpenSSL'
],
2017-06-14 00:05:04 +02:00
)