aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/scripts
diff options
context:
space:
mode:
authorPablo Correa Gómez <ablocorrea@hotmail.com>2021-11-09 22:26:56 +0100
committerEli Schwartz <eschwartz@archlinux.org>2022-01-02 00:34:53 -0500
commit26c1869a142a952ffa23fe566a255b259304a39b (patch)
treeb1e8c1e204b69dc5c4149224ffd41db5f8861157 /mesonbuild/scripts
parent270843ed34779a8080c728cdda633793b882511a (diff)
downloadmeson-26c1869a142a952ffa23fe566a255b259304a39b.zip
meson-26c1869a142a952ffa23fe566a255b259304a39b.tar.gz
meson-26c1869a142a952ffa23fe566a255b259304a39b.tar.bz2
modules/gnome: replace yelphelper with run and custom targets
This is basically a rewrite of the gnome.yelp target to remove the ad-hoc script, which generates multiple issues, including meson not knowing which files were installed. Closes #7653 Closes #9539 Closes #6916 Closes #2775 Closes #7034 Closes #1052 Related #9105 Related #1601
Diffstat (limited to 'mesonbuild/scripts')
-rw-r--r--mesonbuild/scripts/yelphelper.py133
1 files changed, 0 insertions, 133 deletions
diff --git a/mesonbuild/scripts/yelphelper.py b/mesonbuild/scripts/yelphelper.py
deleted file mode 100644
index 374104b..0000000
--- a/mesonbuild/scripts/yelphelper.py
+++ /dev/null
@@ -1,133 +0,0 @@
-# Copyright 2016 The Meson development team
-
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-
-# http://www.apache.org/licenses/LICENSE-2.0
-
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import os
-import subprocess
-import shutil
-import argparse
-from .. import mlog
-from ..mesonlib import has_path_sep
-from . import destdir_join
-from .gettext import read_linguas
-import typing as T
-
-parser = argparse.ArgumentParser()
-parser.add_argument('command')
-parser.add_argument('--id', dest='project_id')
-parser.add_argument('--subdir', dest='subdir')
-parser.add_argument('--installdir', dest='install_dir')
-parser.add_argument('--sources', dest='sources')
-parser.add_argument('--media', dest='media', default='')
-parser.add_argument('--langs', dest='langs', default='')
-parser.add_argument('--symlinks', type=bool, dest='symlinks', default=False)
-
-def build_pot(srcdir: str, project_id: str, sources: T.List[str]) -> None:
- # Must be relative paths
- sources = [os.path.join('C', source) for source in sources]
- outfile = os.path.join(srcdir, project_id + '.pot')
- subprocess.call(['itstool', '-o', outfile] + sources)
-
-def update_po(srcdir: str, project_id: str, langs: T.List[str]) -> None:
- potfile = os.path.join(srcdir, project_id + '.pot')
- for lang in langs:
- pofile = os.path.join(srcdir, lang, lang + '.po')
- subprocess.call(['msgmerge', '-q', '-o', pofile, pofile, potfile])
-
-def build_translations(srcdir: str, blddir: str, langs: T.List[str]) -> None:
- for lang in langs:
- outdir = os.path.join(blddir, lang)
- os.makedirs(outdir, exist_ok=True)
- subprocess.call([
- 'msgfmt', os.path.join(srcdir, lang, lang + '.po'),
- '-o', os.path.join(outdir, lang + '.gmo')
- ])
-
-def merge_translations(blddir: str, sources: T.List[str], langs: T.List[str]) -> None:
- for lang in langs:
- subprocess.call([
- 'itstool', '-m', os.path.join(blddir, lang, lang + '.gmo'),
- '-o', os.path.join(blddir, lang)
- ] + sources)
-
-def install_help(srcdir: str, blddir: str, sources: T.List[str], media: T.List[str], langs: T.List[str], install_dir: str, destdir: str, project_id: str, symlinks: bool) -> None:
- c_install_dir = os.path.join(install_dir, 'C', project_id)
- for lang in langs + ['C']:
- indir = destdir_join(destdir, os.path.join(install_dir, lang, project_id))
- os.makedirs(indir, exist_ok=True)
- for source in sources:
- infile = os.path.join(srcdir if lang == 'C' else blddir, lang, source)
- outfile = os.path.join(indir, source)
- mlog.log(f'Installing {infile} to {outfile}')
- shutil.copy2(infile, outfile)
- for m in media:
- infile = os.path.join(srcdir, lang, m)
- outfile = os.path.join(indir, m)
- c_infile = os.path.join(srcdir, 'C', m)
- if not os.path.exists(infile):
- if not os.path.exists(c_infile):
- mlog.warning('Media file "%s" did not exist in C directory' % m)
- continue
- elif symlinks:
- srcfile = os.path.join(c_install_dir, m)
- mlog.log(f'Symlinking {outfile} to {srcfile}.')
- if has_path_sep(m):
- os.makedirs(os.path.dirname(outfile), exist_ok=True)
- try:
- try:
- os.symlink(srcfile, outfile)
- except FileExistsError:
- os.remove(outfile)
- os.symlink(srcfile, outfile)
- continue
- except (NotImplementedError, OSError):
- mlog.warning('Symlinking not supported, falling back to copying')
- infile = c_infile
- else:
- # Lang doesn't have media file so copy it over 'C' one
- infile = c_infile
- mlog.log(f'Installing {infile} to {outfile}')
- if has_path_sep(m):
- os.makedirs(os.path.dirname(outfile), exist_ok=True)
- shutil.copyfile(infile, outfile)
- shutil.copystat(infile, outfile)
-
-def run(args: T.List[str]) -> int:
- options = parser.parse_args(args)
- langs = options.langs.split('@@') if options.langs else []
- media = options.media.split('@@') if options.media else []
- sources = options.sources.split('@@')
- destdir = os.environ.get('DESTDIR', '')
- src_subdir = os.path.join(os.environ['MESON_SOURCE_ROOT'], options.subdir)
- build_subdir = os.path.join(os.environ['MESON_BUILD_ROOT'], options.subdir)
- abs_sources = [os.path.join(src_subdir, 'C', source) for source in sources]
-
- if not langs:
- langs = read_linguas(src_subdir)
-
- if options.command == 'pot':
- build_pot(src_subdir, options.project_id, sources)
- elif options.command == 'update-po':
- build_pot(src_subdir, options.project_id, sources)
- update_po(src_subdir, options.project_id, langs)
- elif options.command == 'build':
- if langs:
- build_translations(src_subdir, build_subdir, langs)
- elif options.command == 'install':
- install_dir = os.path.join(os.environ['MESON_INSTALL_PREFIX'], options.install_dir)
- if langs:
- build_translations(src_subdir, build_subdir, langs)
- merge_translations(build_subdir, abs_sources, langs)
- install_help(src_subdir, build_subdir, sources, media, langs, install_dir,
- destdir, options.project_id, options.symlinks)
- return 0