+++ /dev/null
-# po-debconf -- lintian check script -*- perl -*-
-
-# Copyright (C) 2002-2004 by Denis Barbier <barbier@linuxfr.org>
-#
-# 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 2 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, you can find it on the World Wide
-# Web at http://www.gnu.org/copyleft/gpl.html, or write to the Free
-# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
-# MA 02110-1301, USA.
-
-package Lintian::po_debconf;
-use strict;
-use Tags;
-use Util;
-
-sub run {
-
-my $pkg = shift;
-my $type = shift;
-
-# First, check wether this package seems to use debconf but not po-debconf.
-# Read the templates file and look at the template names it provides, since
-# some shared templates aren't translated.
-opendir(DEB, 'debfiles')
- or fail("Can't open debfiles directory.");
-my $has_template = my $has_depends = my $has_config = 0;
-my @lang_templates;
-for my $file (readdir(DEB)) {
- next if -d "debfiles/$file";
- if ($file =~ m/^(.+\.)?templates(\..+)?$/) {
- if ($file =~ m/templates\.\w\w(_\w\w)?$/) {
- push (@lang_templates, $file);
- } else {
- open(PO, '<', "debfiles/$file")
- or fail("Can't open debfiles/$file file.");
- while (<PO>) {
- tag "translated-default-field", "$file: $."
- if (m/^_Default(Choice)?: [^\[]*$/);
- if (/^Template: (\S+)/i) {
- my $template = $1;
- next if $template =~ m,^shared/packages-(wordlist|ispell)$,;
- next if $template =~ m,/languages$,;
- $has_template = 1;
- }
- }
- close PO;
- }
- }
-}
-closedir(DEB);
-
-#TODO: check whether all templates are named in TEMPLATES.pot
-if ( $has_template ) {
- if ( ! -d "debfiles/po" ) {
- tag "not-using-po-debconf", "";
- return 0;
- }
-} else {
- return 0;
-}
-
-# If we got here, we're using po-debconf, so there shouldn't be any stray
-# language templates left over from debconf-mergetemplate.
-for (@lang_templates) {
- tag "stray-translated-debconf-templates", $_ unless /templates\.in$/;
-}
-
-# yada builds its template and po/POTFILES.in dynamically at build time, so
-# excuse yada from some of these checks (including the out of date templates
-# check).
-my $missing_files = 0;
-my $yada = 0;
-if (open (RULES, '<', 'debfiles/rules')) {
- local $_;
- while (<RULES>) {
- if (m%^\t\s*(?:perl debian/)?yada\s%) {
- $yada = 1;
- $missing_files = 1;
- }
- }
-}
-
-if (!$yada && -f "debfiles/po/POTFILES.in") {
- open(POTFILES, '<', "debfiles/po/POTFILES.in")
- or fail("Can't open debfiles/po/POTFILES.in.");
- while (<POTFILES>) {
- chomp;
- s/.*\]\s*//;
- # Cannot check files which are not under debian/
- next if m,^\.\./, or $_ eq '';
- unless (-f "debfiles/$_") {
- tag "missing-file-from-potfiles-in", "$_";
- $missing_files = 1;
- }
- }
- close(POTFILES);
-} elsif (!$yada) {
- tag "missing-potfiles-in", "";
- $missing_files = 1;
-}
-if (! -f "debfiles/po/templates.pot") {
- tag "missing-templates-pot", "";
- $missing_files = 1;
-}
-
-if (-x "/usr/bin/msgcmp" && -x "/usr/share/intltool-debian/intltool-update" ) {
- if ($missing_files == 0) {
- $ENV{"INTLTOOL_EXTRACT"} ||= "/usr/share/intltool-debian/intltool-extract";
- system_env("cd debfiles/po && /usr/share/intltool-debian/intltool-update --gettext-package=test --pot");
- system_env("/usr/bin/msgcmp --use-untranslated debfiles/po/test.pot debfiles/po/templates.pot >/dev/null 2>&1"
- . "&& /usr/bin/msgcmp --use-untranslated debfiles/po/templates.pot debfiles/po/test.pot >/dev/null 2>&1") == 0
- or tag "newer-debconf-templates";
- }
-} else {
- fail("either msgcmp or intltool-update not found");
-}
-
-if (! -x "/usr/bin/msgfmt" ) {
- fail("msgfmt not found");
-}
-opendir(DEBIAN, 'debfiles/po')
- or fail("Can't open debfiles/po directory.");
-while (defined(my $file=readdir(DEBIAN))) {
- next unless $file =~ m/\.po$/;
- tag "misnamed-po-file", "debian/po/$file"
- unless ($file =~ /^[a-z]{2,3}(_[A-Z]{2})?\.po$/);
- local ($/) = "\n\n";
- $_ = '';
- open(PO, '<', "debfiles/po/$file")
- or fail("Can't open debfiles/po/$file file.");
- while (<PO>) {
- last if m/^msgstr/m;
- }
- close(PO);
- unless ($_) {
- tag "invalid-po-file", "debian/po/$file";
- next;
- }
- s/"\n"//g;
- my $charset = '';
- if (m/charset=(.*?)\\n/) {
- $charset = ($1 eq 'CHARSET' ? '' : $1);
- }
- tag "unknown-encoding-in-po-file", "debian/po/$file"
- unless length($charset);
- system_env("msgfmt -o /dev/null debfiles/po/$file 2>/dev/null") == 0
- or tag "invalid-po-file", "debian/po/$file";
-}
-
-}
-
-1;
-
-# Local Variables:
-# indent-tabs-mode: t
-# cperl-indent-level: 8
-# End:
-# vim: syntax=perl