74 lines
2.0 KiB
Python
74 lines
2.0 KiB
Python
#!/usr/bin/python3
|
|
|
|
import os
|
|
|
|
from pathlib import Path
|
|
from setuptools import Command, setup
|
|
from setuptools.command.build import build as OriginalBuildCommand
|
|
|
|
class BuildCommand(OriginalBuildCommand):
|
|
sub_commands = [('build_mo', None), *OriginalBuildCommand.sub_commands]
|
|
|
|
|
|
class BuildMoSubCommand(Command):
|
|
description = 'Compile .po files into .mo files'
|
|
|
|
files = None
|
|
|
|
def initialize_options(self):
|
|
self.files = None
|
|
self.editable_mode = False
|
|
self.build_lib = None
|
|
|
|
def finalize_options(self):
|
|
self.set_undefined_options("build_py", ("build_lib", "build_lib"))
|
|
|
|
def run(self):
|
|
files = self._get_files()
|
|
|
|
for build_file, source_file in files.items():
|
|
if not self.editable_mode:
|
|
# Parent directory required for msgfmt to work correctly
|
|
Path(build_file).parent.mkdir(parents=True, exist_ok=True)
|
|
self.spawn(['msgfmt', source_file, '-o', build_file])
|
|
|
|
def _get_files(self):
|
|
if self.files is not None:
|
|
return self.files
|
|
|
|
files = {}
|
|
|
|
localedir = Path('safeeyes/config/locale')
|
|
po_dirs = [l.joinpath('LC_MESSAGES') for l in localedir.iterdir() if l.is_dir()]
|
|
for po_dir in po_dirs:
|
|
po_files = [f
|
|
for f in po_dir.iterdir()
|
|
if f.is_file() and f.suffix == '.po']
|
|
for po_file in po_files:
|
|
mo_file = po_file.with_suffix(".mo")
|
|
|
|
source_file = po_file
|
|
build_file = mo_file
|
|
|
|
if not self.editable_mode:
|
|
build_file = Path(self.build_lib).joinpath(build_file)
|
|
|
|
files[str(build_file)] = str(source_file)
|
|
|
|
self.files = files
|
|
return files
|
|
|
|
def get_output_mapping(self):
|
|
return self._get_files()
|
|
|
|
def get_outputs(self):
|
|
return self._get_files().keys()
|
|
|
|
def get_source_files(self):
|
|
return self._get_files().values()
|
|
|
|
|
|
setup(
|
|
cmdclass={'build': BuildCommand, 'build_mo': BuildMoSubCommand}
|
|
)
|