133 lines
4.0 KiB
Meson
133 lines
4.0 KiB
Meson
|
# First we use the XML file to be able to do gettext translation
|
||
|
ms_installer_config_xml = i18n.merge_file(
|
||
|
input : 'setup.isl.xml.in',
|
||
|
output: '@BASENAME@',
|
||
|
data_dirs: meson.current_source_dir(),
|
||
|
po_dir: po_windows_installer_dir,
|
||
|
install: false,
|
||
|
)
|
||
|
|
||
|
languages = [
|
||
|
{ 'code': 'bg', },
|
||
|
{ 'code': 'ca', },
|
||
|
{ 'code': 'cs', },
|
||
|
{ 'code': 'da', },
|
||
|
{ 'code': 'de', },
|
||
|
{ 'code': 'el', },
|
||
|
{ 'code': 'en', 'default': true, },
|
||
|
{ 'code': 'en_GB', },
|
||
|
{ 'code': 'eo', },
|
||
|
{ 'code': 'es', },
|
||
|
{ 'code': 'eu', },
|
||
|
{ 'code': 'fi', },
|
||
|
{ 'code': 'fr', },
|
||
|
{ 'code': 'gl', },
|
||
|
{ 'code': 'he', },
|
||
|
{ 'code': 'hu', },
|
||
|
{ 'code': 'id', },
|
||
|
{ 'code': 'is', },
|
||
|
{ 'code': 'it', },
|
||
|
{ 'code': 'ja', },
|
||
|
{ 'code': 'ka', },
|
||
|
{ 'code': 'kab', 'langname': 'Taqbaylit' },
|
||
|
{ 'code': 'ko', },
|
||
|
{ 'code': 'lt', },
|
||
|
{ 'code': 'lv', },
|
||
|
{ 'code': 'mr', },
|
||
|
{ 'code': 'ms', },
|
||
|
{ 'code': 'nl', },
|
||
|
{ 'code': 'pl', },
|
||
|
{ 'code': 'pt', },
|
||
|
{ 'code': 'pt_BR', },
|
||
|
{ 'code': 'ro', },
|
||
|
{ 'code': 'ru', },
|
||
|
{ 'code': 'sk', },
|
||
|
{ 'code': 'sl', },
|
||
|
{ 'code': 'sv', },
|
||
|
{ 'code': 'tr', },
|
||
|
{ 'code': 'uk', },
|
||
|
{ 'code': 'vi', },
|
||
|
{ 'code': 'zh_CN', },
|
||
|
{ 'code': 'zh_TW', },
|
||
|
]
|
||
|
|
||
|
addbom = find_program(meson.current_source_dir() / 'addbom.sh')
|
||
|
|
||
|
# Then, we generate the .isl file for each language using some xsltproc magic
|
||
|
foreach language : languages
|
||
|
lang_code = language.get('code')
|
||
|
|
||
|
if 'default' in language
|
||
|
lang_check = 'value[not(@xml:lang)]'
|
||
|
else
|
||
|
lang_check = 'value[lang(\'@0@\')]'.format(lang_code)
|
||
|
endif
|
||
|
|
||
|
pika_ms_installer_lang_xsl = configure_file(
|
||
|
input: 'pika-ms-installer-config.xsl.in',
|
||
|
output: 'pika-ms-installer-config-@0@.xsl'.format(lang_code),
|
||
|
configuration: { 'LANG_CHECK': lang_check },
|
||
|
)
|
||
|
|
||
|
nobom_setup_isl = '@0@-nobom.setup.isl'.format(lang_code)
|
||
|
nobom_setup_isl_tmp = custom_target(nobom_setup_isl,
|
||
|
input : [ ms_installer_config_xml, pika_ms_installer_lang_xsl ],
|
||
|
output: nobom_setup_isl,
|
||
|
command: [
|
||
|
xsltproc,
|
||
|
'--xinclude',
|
||
|
'--output', '@OUTPUT@',
|
||
|
'@INPUT1@',
|
||
|
'@INPUT0@',
|
||
|
],
|
||
|
build_by_default: true,
|
||
|
)
|
||
|
|
||
|
setup_isl = '@0@.setup.isl'.format(lang_code)
|
||
|
# Inno-Setup absolutely requires a BOM to recognize UTF-8 files.
|
||
|
# Here I am working around 3 issues in meson:
|
||
|
# 1. We can't easily combine commands in meson. So either we combine
|
||
|
# them in an external script, or we run several custom_target(). I do
|
||
|
# a mix of both because custom_target() has too many bugs.
|
||
|
# 2. To concat a BOM to the file, I'd like to simply call this Python
|
||
|
# code:
|
||
|
# 'open("@OUTPUT@", "wb").write(b"\\xEF\\xBB\\xBF" + open("@INPUT@", "rb").read())'
|
||
|
# Unfortunately we can't pass several @INPUT@/@OUTPUT@ in a same arg.
|
||
|
# See: https://github.com/mesonbuild/meson/issues/7696
|
||
|
# 3. Antislashes are replaced with slashes in custom_target(). I tried
|
||
|
# some weird trick encoding a string to UTF-8 instead of using the
|
||
|
# well known BOM bytes directly. Unfortunately result was not
|
||
|
# consistent on all platforms (at least Linux and Windows).
|
||
|
# See https://github.com/mesonbuild/meson/issues/1564
|
||
|
custom_target(setup_isl,
|
||
|
input : [ nobom_setup_isl_tmp, 'addbom.sh' ],
|
||
|
output: [ setup_isl ],
|
||
|
command: [
|
||
|
addbom, '@INPUT0@', '@OUTPUT@'
|
||
|
],
|
||
|
build_by_default: true,
|
||
|
)
|
||
|
|
||
|
if 'langname' in language
|
||
|
# Some languages may have no default language file provided by
|
||
|
# InnoSetup. When this happens, we must at least complete a very
|
||
|
# basic file showing the language name, otherwise it shows as
|
||
|
# "English".
|
||
|
newlang_isl = '@0@.isl'.format(language.get('code'))
|
||
|
newlang_conf = configuration_data()
|
||
|
newlang_conf.set('LANGNAME', language.get('langname'))
|
||
|
configure_file(
|
||
|
input : 'newlang.isl.in',
|
||
|
output : newlang_isl,
|
||
|
configuration : newlang_conf
|
||
|
)
|
||
|
endif
|
||
|
endforeach
|
||
|
|
||
|
test('windows-installer-langs',
|
||
|
find_program('test-installer-langs.sh'),
|
||
|
env: [
|
||
|
'PIKA_TESTING_ABS_TOP_SRCDIR=' + meson.project_source_root(),
|
||
|
],
|
||
|
suite: 'build')
|