mirror of
https://https.git.savannah.gnu.org/git/gnulib.git
synced 2026-04-28 06:33:36 +00:00
Add infrastructure for handling gnulib localizations.
* po/Makefile: New file. * po/Makevars: New file, based on the template from GNU gettext. * gnulib-l10n/README: New file. * gnulib-l10n/configure.ac: New file. * gnulib-l10n/Makefile.am: New file. * gnulib-l10n/m4/Makefile.am: New file. * gnulib-l10n/autogen.sh: New file. * gnulib-l10n/autoclean.sh: New file. * Makefile (gnulib.pot, gnulib-tp-snapshot, gnulib-l10n-release): New targets.
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -6,3 +6,4 @@
|
||||
allsnippets.tmp
|
||||
amsnippet.tmp
|
||||
testdir*
|
||||
/po/gnulib.pot
|
||||
|
||||
14
ChangeLog
14
ChangeLog
@@ -1,3 +1,17 @@
|
||||
2024-12-08 Bruno Haible <bruno@clisp.org>
|
||||
|
||||
Add infrastructure for handling gnulib localizations.
|
||||
* po/Makefile: New file.
|
||||
* po/Makevars: New file, based on the template from GNU gettext.
|
||||
* gnulib-l10n/README: New file.
|
||||
* gnulib-l10n/configure.ac: New file.
|
||||
* gnulib-l10n/Makefile.am: New file.
|
||||
* gnulib-l10n/m4/Makefile.am: New file.
|
||||
* gnulib-l10n/autogen.sh: New file.
|
||||
* gnulib-l10n/autoclean.sh: New file.
|
||||
* Makefile (gnulib.pot, gnulib-tp-snapshot, gnulib-l10n-release): New
|
||||
targets.
|
||||
|
||||
2024-12-08 Bruno Haible <bruno@clisp.org>
|
||||
|
||||
bison-i18n: Improve usability.
|
||||
|
||||
72
Makefile
72
Makefile
@@ -14,10 +14,16 @@ SHELL=bash
|
||||
# Produce some files that are not stored in the repository.
|
||||
all:
|
||||
|
||||
# ==============================================================================
|
||||
# Documentation
|
||||
|
||||
# Produce the documentation in readable form.
|
||||
info html dvi pdf:
|
||||
cd doc && $(MAKE) $@ && $(MAKE) mostlyclean
|
||||
|
||||
# ==============================================================================
|
||||
# Various checks
|
||||
|
||||
# Collect the names of rules starting with 'sc_'.
|
||||
syntax-check-rules := $(sort $(shell sed -n 's/^\(sc_[a-zA-Z0-9_-]*\):.*/\1/p'\
|
||||
Makefile))
|
||||
@@ -246,6 +252,9 @@ sc_check_GL_INLINE_HEADER_use:
|
||||
sc_check_copyright:
|
||||
@./check-copyright
|
||||
|
||||
# ==============================================================================
|
||||
# Regenerating some files
|
||||
|
||||
# Regenerate some files that are stored in the repository.
|
||||
regen: build-aux/bootstrap MODULES.html
|
||||
|
||||
@@ -261,6 +270,9 @@ build-aux/bootstrap: top/gen-bootstrap.sed top/bootstrap top/bootstrap-funclib.s
|
||||
MODULES.html: MODULES.html.sh
|
||||
./MODULES.html.sh > MODULES.html
|
||||
|
||||
# ==============================================================================
|
||||
# Updating copyright notices
|
||||
|
||||
# A perl BEGIN block to set Y to the current year number and W to Y-1.
|
||||
_year_and_prev = BEGIN{@t=localtime(time); $$y=$$t[5]+1900; $$w=$$y-1}
|
||||
|
||||
@@ -305,3 +317,63 @@ update-copyright:
|
||||
perl -pi -e \
|
||||
'$(_year_and_prev) s/^(scriptversion=)$$w.*/$$1$$y-01-01.00/i' \
|
||||
build-aux/gendocs.sh
|
||||
|
||||
# ==============================================================================
|
||||
# Maintaining localizations
|
||||
|
||||
# Creates an up-to-date POT file (in the po/ directory).
|
||||
gnulib.pot:
|
||||
cd po && make
|
||||
|
||||
# Creates a snapshot tarball for the Translation Project. Once created,
|
||||
# 1. upload it to alpha.gnu.org via
|
||||
# $ build-aux/gnupload --to alpha.gnu.org:gnulib gnulib-????????.tar.gz
|
||||
# 2. notify <coordinator@translationproject.org>
|
||||
gnulib-tp-snapshot: gnulib.pot
|
||||
version=`date -u +"%Y%m%d"`; \
|
||||
dir=gnulib-$$version; \
|
||||
mkdir $$dir \
|
||||
&& for file in `find lib -type f` `find po -type f` COPYING; do \
|
||||
case $$file in \
|
||||
*.orig | *.rej | *~ | '.#'* | '#'*'#' ) ;; \
|
||||
*) \
|
||||
mkdir -p $$dir/`dirname $$file` || exit 1; \
|
||||
ln $$file $$dir/$$file || exit 1; \
|
||||
esac; \
|
||||
done \
|
||||
&& { echo 'This tarball contains the GNU gnulib sources relevant for translators.'; \
|
||||
echo 'It is only meant for use by the translators and the translation coordinator.'; \
|
||||
echo 'If you are a developer, use a git checkout of the GNU gnulib project instead.'; \
|
||||
} > $$dir/README \
|
||||
&& tar --owner=root --group=root -cf $$dir.tar $$dir \
|
||||
&& gzip -9 --force $$dir.tar \
|
||||
&& rm -rf $$dir \
|
||||
&& ls -l $$dir.tar.gz
|
||||
|
||||
# Creates a tarball with the gnulib localizations. Once created,
|
||||
# 1. upload it to ftp.gnu.org via
|
||||
# $ build-aux/gnupload --to ftp.gnu.org:gnulib gnulib-l10n-????????.tar.gz
|
||||
# 2. notify your preferred distros so that they pick it up.
|
||||
gnulib-l10n-release: gnulib.pot
|
||||
cp doc/COPYING.LESSERv2 gnulib-l10n/COPYING
|
||||
mkdir -p gnulib-l10n/po \
|
||||
&& cp po/Makevars gnulib-l10n/po/Makevars \
|
||||
&& cp po/gnulib.pot gnulib-l10n/po/gnulib.pot
|
||||
cd gnulib-l10n \
|
||||
&& ./autogen.sh \
|
||||
&& (cd po \
|
||||
&& rm -f *.po \
|
||||
&& wget --mirror --level=1 -nd -nv -A.po https://translationproject.org/latest/gnulib/ \
|
||||
&& touch POTFILES.in \
|
||||
&& ls -1 *.po | LC_ALL=C sort | sed -e 's/\.po$$//' > LINGUAS \
|
||||
&& for file in *.po; do msgmerge --update --lang=$${file%.po} --previous $$file gnulib.pot || exit 1; done \
|
||||
&& for file in *.po; do msgfmt -c -o $${file%.po}.gmo $$file || exit 1; done \
|
||||
) \
|
||||
&& ./configure \
|
||||
&& make distcheck \
|
||||
&& mv gnulib-l10n-????????.tar.gz .. \
|
||||
&& make distclean \
|
||||
&& ./autoclean.sh
|
||||
ls -l gnulib-l10n-????????.tar.gz
|
||||
|
||||
# ==============================================================================
|
||||
|
||||
21
gnulib-l10n/Makefile.am
Normal file
21
gnulib-l10n/Makefile.am
Normal file
@@ -0,0 +1,21 @@
|
||||
## Makefile for the toplevel directory of the GNU gnulib localizations
|
||||
## Copyright (C) 2024 Free Software Foundation, Inc.
|
||||
##
|
||||
## This program is free software: you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation; either version 3 of the License, or
|
||||
## (at your option) any later version.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
## Process this file with automake to produce Makefile.in.
|
||||
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
|
||||
SUBDIRS = m4 po
|
||||
4
gnulib-l10n/README
Normal file
4
gnulib-l10n/README
Normal file
@@ -0,0 +1,4 @@
|
||||
This package contains the localizations (translations) of messages for
|
||||
GNU gnulib code.
|
||||
|
||||
It is under LGPLv2+.
|
||||
53
gnulib-l10n/autoclean.sh
Executable file
53
gnulib-l10n/autoclean.sh
Executable file
@@ -0,0 +1,53 @@
|
||||
#!/bin/sh
|
||||
# GNU gnulib localizations.
|
||||
# This file is in the public domain.
|
||||
#
|
||||
# Script for cleaning all autogenerated files.
|
||||
|
||||
test ! -f Makefile || make distclean
|
||||
rm -rf autom4te.cache
|
||||
|
||||
# Brought in by autopoint.
|
||||
rm -f ABOUT-NLS
|
||||
rm -f config.rpath
|
||||
rm -f m4/gettext.m4
|
||||
rm -f m4/build-to-host.m4
|
||||
rm -f m4/host-cpu-c-abi.m4
|
||||
rm -f m4/iconv.m4
|
||||
rm -f m4/intlmacosx.m4
|
||||
rm -f m4/lib-ld.m4
|
||||
rm -f m4/lib-link.m4
|
||||
rm -f m4/lib-prefix.m4
|
||||
rm -f m4/nls.m4
|
||||
rm -f m4/po.m4
|
||||
rm -f m4/progtest.m4
|
||||
rm -f po/Makefile.in.in
|
||||
rm -f po/remove-potcdate.sed
|
||||
|
||||
# Generated by aclocal.
|
||||
rm -f aclocal.m4
|
||||
|
||||
# Generated by autoconf.
|
||||
rm -f configure
|
||||
|
||||
# Fetched from the Translation Project.
|
||||
rm -f po/*.po
|
||||
|
||||
# Copied from elsewhere.
|
||||
rm -f COPYING
|
||||
rm -f po/Makevars
|
||||
rm -f po/gnulib.pot
|
||||
|
||||
# Generated or brought in by automake.
|
||||
rm -f Makefile.in
|
||||
rm -f m4/Makefile.in
|
||||
rm -f INSTALL
|
||||
rm -f compile
|
||||
rm -f install-sh
|
||||
rm -f missing
|
||||
rm -f config.guess
|
||||
rm -f config.sub
|
||||
rm -f po/POTFILES.in
|
||||
rm -f po/LINGUAS
|
||||
rm -f po/stamp-po
|
||||
rm -f po/*.gmo
|
||||
19
gnulib-l10n/autogen.sh
Executable file
19
gnulib-l10n/autogen.sh
Executable file
@@ -0,0 +1,19 @@
|
||||
#!/bin/sh
|
||||
# GNU gnulib localizations.
|
||||
# This file is in the public domain.
|
||||
#
|
||||
# Script for regenerating all autogenerated files.
|
||||
|
||||
autopoint -f
|
||||
rm po/Makevars.template
|
||||
rm po/Rules-quot
|
||||
rm po/boldquot.sed
|
||||
rm po/en@boldquot.header
|
||||
rm po/en@quot.header
|
||||
rm po/insert-header.sed
|
||||
rm po/quot.sed
|
||||
|
||||
aclocal -I m4
|
||||
autoconf
|
||||
automake --add-missing --copy
|
||||
rm -rf autom4te.cache
|
||||
33
gnulib-l10n/configure.ac
Normal file
33
gnulib-l10n/configure.ac
Normal file
@@ -0,0 +1,33 @@
|
||||
dnl Configuration for the GNU gnulib localizations
|
||||
dnl Copyright (C) 2024 Free Software Foundation, Inc.
|
||||
dnl
|
||||
dnl This program is free software: you can redistribute it and/or modify
|
||||
dnl it under the terms of the GNU General Public License as published by
|
||||
dnl the Free Software Foundation; either version 3 of the License, or
|
||||
dnl (at your option) any later version.
|
||||
dnl
|
||||
dnl This program is distributed in the hope that it will be useful,
|
||||
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
dnl GNU General Public License for more details.
|
||||
dnl
|
||||
dnl You should have received a copy of the GNU General Public License
|
||||
dnl along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_INIT([gnulib-l10n], m4_esyscmd([date -u +"%Y%m%d"]), [bug-gnulib@gnu.org])
|
||||
AC_CONFIG_SRCDIR([configure.ac])
|
||||
AM_INIT_AUTOMAKE([1.13 foreign tar-ustar])
|
||||
|
||||
dnl Override automake's tar command used for creating distributions.
|
||||
am__tar='${AMTAR} chf - --format=ustar --owner=root --group=root "$$tardir"'
|
||||
|
||||
AM_GNU_GETTEXT([external])
|
||||
AM_GNU_GETTEXT_VERSION([0.23])
|
||||
|
||||
AC_CONFIG_FILES([Makefile])
|
||||
AC_CONFIG_FILES([m4/Makefile])
|
||||
AC_CONFIG_FILES([po/Makefile.in])
|
||||
|
||||
AC_OUTPUT
|
||||
22
gnulib-l10n/m4/Makefile.am
Normal file
22
gnulib-l10n/m4/Makefile.am
Normal file
@@ -0,0 +1,22 @@
|
||||
## Makefile for the m4 directory of the GNU gnulib localizations
|
||||
## Copyright (C) 2024 Free Software Foundation, Inc.
|
||||
##
|
||||
## This program is free software: you can redistribute it and/or modify
|
||||
## it under the terms of the GNU General Public License as published by
|
||||
## the Free Software Foundation; either version 3 of the License, or
|
||||
## (at your option) any later version.
|
||||
##
|
||||
## This program is distributed in the hope that it will be useful,
|
||||
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
## GNU General Public License for more details.
|
||||
##
|
||||
## You should have received a copy of the GNU General Public License
|
||||
## along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
## Process this file with automake to produce Makefile.in.
|
||||
|
||||
EXTRA_DIST = \
|
||||
gettext.m4 build-to-host.m4 host-cpu-c-abi.m4 \
|
||||
iconv.m4 intlmacosx.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 \
|
||||
nls.m4 po.m4 progtest.m4
|
||||
18
po/Makefile
Normal file
18
po/Makefile
Normal file
@@ -0,0 +1,18 @@
|
||||
all: gnulib.pot
|
||||
|
||||
include Makevars
|
||||
|
||||
VERSION != date -u +"%Y%m%d"
|
||||
|
||||
$(DOMAIN).pot: force
|
||||
xgettext --default-domain=$(DOMAIN) --directory=.. \
|
||||
--add-comments=TRANSLATORS: \
|
||||
--copyright-holder='$(COPYRIGHT_HOLDER)' \
|
||||
--package-name='GNU gnulib' \
|
||||
--package-version='$(VERSION)' \
|
||||
--msgid-bugs-address='$(MSGID_BUGS_ADDRESS)' \
|
||||
$(XGETTEXT_OPTIONS) \
|
||||
`cd .. && LC_ALL=C grep -l '[^A-Za-z_]_(' \`find lib '(' -name '*.c' -o -name '*.h' -o -name '*.y' ')' | LC_ALL=C sort\``
|
||||
mv $(DOMAIN).po $(DOMAIN).pot
|
||||
|
||||
force:
|
||||
89
po/Makevars
Normal file
89
po/Makevars
Normal file
@@ -0,0 +1,89 @@
|
||||
# Makefile variables for PO directory in any package using GNU gettext.
|
||||
#
|
||||
# Copyright (C) 2003-2024 Free Software Foundation, Inc.
|
||||
# This file, Makevars, is free software; the Free Software Foundation
|
||||
# gives unlimited permission to use, copy, distribute, and modify it.
|
||||
|
||||
# Usually the message domain is the same as the package name.
|
||||
DOMAIN = gnulib
|
||||
|
||||
# These two variables depend on the location of this directory.
|
||||
subdir = po
|
||||
top_builddir = ..
|
||||
|
||||
# These options get passed to xgettext.
|
||||
XGETTEXT_OPTIONS = \
|
||||
--keyword=_ --flag=_:1:pass-c-format \
|
||||
--keyword=N_ --flag=N_:1:pass-c-format \
|
||||
--flag=error:3:c-format --flag=error_at_line:5:c-format \
|
||||
--flag=verror:3:c-format --flag=verror_at_line:5:c-format \
|
||||
--flag=argp_error:2:c-format --flag=argp_failure:4:c-format \
|
||||
--flag=asprintf:2:c-format --flag=vasprintf:2:c-format --flag=xasprintf:1:c-format \
|
||||
--flag=aszprintf:2:c-format --flag=vaszprintf:2:c-format \
|
||||
--flag=xprintf:1:c-format --flag=xvprintf:1:c-format --flag=xfprintf:2:c-format --flag=xvfprintf:2:c-format
|
||||
|
||||
# This is the copyright holder that gets inserted into the header of the
|
||||
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
|
||||
# package. (Note that the msgstr strings, extracted from the package's
|
||||
# sources, belong to the copyright holder of the package.) Translators are
|
||||
# expected to transfer the copyright for their translations to this person
|
||||
# or entity, or to disclaim their copyright. The empty string stands for
|
||||
# the public domain; in this case the translators are expected to disclaim
|
||||
# their copyright.
|
||||
COPYRIGHT_HOLDER = Free Software Foundation, Inc.
|
||||
|
||||
# This tells whether or not to prepend "GNU " prefix to the package
|
||||
# name that gets inserted into the header of the $(DOMAIN).pot file.
|
||||
# Possible values are "yes", "no", or empty. If it is empty, try to
|
||||
# detect it automatically by scanning the files in $(top_srcdir) for
|
||||
# "GNU packagename" string.
|
||||
PACKAGE_GNU = yes
|
||||
|
||||
# This is the email address or URL to which the translators shall report
|
||||
# bugs in the untranslated strings:
|
||||
# - Strings which are not entire sentences, see the maintainer guidelines
|
||||
# in the GNU gettext documentation, section 'Preparing Strings'.
|
||||
# - Strings which use unclear terms or require additional context to be
|
||||
# understood.
|
||||
# - Strings which make invalid assumptions about notation of date, time or
|
||||
# money.
|
||||
# - Pluralisation problems.
|
||||
# - Incorrect English spelling.
|
||||
# - Incorrect formatting.
|
||||
# It can be your email address, or a mailing list address where translators
|
||||
# can write to without being subscribed, or the URL of a web page through
|
||||
# which the translators can contact you.
|
||||
MSGID_BUGS_ADDRESS = bug-gnulib@gnu.org
|
||||
|
||||
# This is the list of locale categories, beyond LC_MESSAGES, for which the
|
||||
# message catalogs shall be used. It is usually empty.
|
||||
EXTRA_LOCALE_CATEGORIES =
|
||||
|
||||
# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
|
||||
# context. Possible values are "yes" and "no". Set this to yes if the
|
||||
# package uses functions taking also a message context, like pgettext(), or
|
||||
# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
|
||||
USE_MSGCTXT = no
|
||||
|
||||
# These options get passed to msgmerge.
|
||||
# Useful options are in particular:
|
||||
# --previous to keep previous msgids of translated messages
|
||||
MSGMERGE_OPTIONS =
|
||||
|
||||
# These options get passed to msginit.
|
||||
# If you want to disable line wrapping when writing PO files, add
|
||||
# --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and
|
||||
# MSGINIT_OPTIONS.
|
||||
MSGINIT_OPTIONS =
|
||||
|
||||
# This tells whether or not to regenerate a PO file when $(DOMAIN).pot
|
||||
# has changed. Possible values are "yes" and "no". Set this to no if
|
||||
# the POT file is checked in the repository and the version control
|
||||
# program ignores timestamps.
|
||||
PO_DEPENDS_ON_POT = yes
|
||||
|
||||
# This tells whether or not to forcibly update $(DOMAIN).pot and
|
||||
# regenerate PO files on "make dist". Possible values are "yes" and
|
||||
# "no". Set this to no if the POT file and PO files are maintained
|
||||
# externally.
|
||||
DIST_DEPENDS_ON_UPDATE_PO = yes
|
||||
Reference in New Issue
Block a user