Merge pull request #934 from mesonbuild/wip/tingping/gnome-yelp
gnome: Add yelp() functionpull/918/head
commit
b50f3e6976
11 changed files with 231 additions and 0 deletions
@ -0,0 +1,118 @@ |
|||||||
|
# Copyright 2016 Patrick Griffis <tingping@tingping.se> |
||||||
|
|
||||||
|
# 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 sys, os |
||||||
|
import subprocess |
||||||
|
import shutil |
||||||
|
import argparse |
||||||
|
from mesonbuild import mlog |
||||||
|
from mesonbuild.mesonlib import MesonException |
||||||
|
from mesonbuild.scripts import destdir_join |
||||||
|
|
||||||
|
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, project_id, sources): |
||||||
|
# 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, project_id, langs): |
||||||
|
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, blddir, langs): |
||||||
|
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, sources, langs): |
||||||
|
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, blddir, sources, media, langs, install_dir, destdir, project_id, symlinks): |
||||||
|
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('Installing %s to %s.' %(infile, outfile)) |
||||||
|
shutil.copyfile(infile, outfile) |
||||||
|
shutil.copystat(infile, outfile) |
||||||
|
for m in media: |
||||||
|
infile = os.path.join(srcdir, lang, m) |
||||||
|
outfile = os.path.join(indir, m) |
||||||
|
if not os.path.exists(infile): |
||||||
|
if lang == 'C': |
||||||
|
mlog.log(mlog.bold('Warning:'), 'Media file "%s" did not exist in C directory' %m) |
||||||
|
elif symlinks: |
||||||
|
srcfile = os.path.join(c_install_dir, m) |
||||||
|
mlog.log('Symlinking %s to %s.' %(outfile, srcfile)) |
||||||
|
if '/' in m or '\\' in m: |
||||||
|
os.makedirs(os.path.dirname(outfile), exist_ok=True) |
||||||
|
os.symlink(srcfile, outfile) |
||||||
|
continue |
||||||
|
symfile = os.path.join(install_dir, m) |
||||||
|
mlog.log('Installing %s to %s.' %(infile, outfile)) |
||||||
|
if '/' in m or '\\' in m: |
||||||
|
os.makedirs(os.path.dirname(outfile), exist_ok=True) |
||||||
|
shutil.copyfile(infile, outfile) |
||||||
|
shutil.copystat(infile, outfile) |
||||||
|
|
||||||
|
def run(args): |
||||||
|
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 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) |
||||||
|
|
@ -0,0 +1,8 @@ |
|||||||
|
<page xmlns="http://projectmallard.org/1.0/" |
||||||
|
xmlns:its="http://www.w3.org/2005/11/its" |
||||||
|
type="guide" |
||||||
|
id="index"> |
||||||
|
<title> |
||||||
|
Hello! |
||||||
|
</title> |
||||||
|
</page> |
@ -0,0 +1 @@ |
|||||||
|
hello |
@ -0,0 +1,13 @@ |
|||||||
|
msgid "" |
||||||
|
msgstr "" |
||||||
|
"Project-Id-Version: meson master\n" |
||||||
|
"Language: de\n" |
||||||
|
"MIME-Version: 1.0\n" |
||||||
|
"Content-Type: text/plain; charset=UTF-8\n" |
||||||
|
"Content-Transfer-Encoding: 8bit\n" |
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n" |
||||||
|
|
||||||
|
#. (itstool) path: page/title |
||||||
|
#: C/index.page:5 |
||||||
|
msgid "Hello!" |
||||||
|
msgstr "Hallo!" |
@ -0,0 +1,13 @@ |
|||||||
|
msgid "" |
||||||
|
msgstr "" |
||||||
|
"Project-Id-Version: meson master\n" |
||||||
|
"Language: es\n" |
||||||
|
"MIME-Version: 1.0\n" |
||||||
|
"Content-Type: text/plain; charset=UTF-8\n" |
||||||
|
"Content-Transfer-Encoding: 8bit\n" |
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n" |
||||||
|
|
||||||
|
#. (itstool) path: page/title |
||||||
|
#: C/index.page:5 |
||||||
|
msgid "Hello!" |
||||||
|
msgstr "¡Hola!" |
@ -0,0 +1 @@ |
|||||||
|
Hola. |
@ -0,0 +1,7 @@ |
|||||||
|
gnome = import('gnome') |
||||||
|
|
||||||
|
gnome.yelp('meson', |
||||||
|
sources: 'index.page', |
||||||
|
media: 'media/test.txt', |
||||||
|
languages: ['de', 'es'], |
||||||
|
) |
@ -0,0 +1,5 @@ |
|||||||
|
usr/share/help/C/meson/index.page |
||||||
|
usr/share/help/C/meson/media/test.txt |
||||||
|
usr/share/help/es/meson/index.page |
||||||
|
usr/share/help/es/meson/media/test.txt |
||||||
|
usr/share/help/de/meson/index.page |
@ -0,0 +1,2 @@ |
|||||||
|
project('yelp', 'c') |
||||||
|
subdir('help') |
Loading…
Reference in new issue