[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#636086: [PATCH] Use C.UTF-8 from current libc-bin, rather than our own private en_US.UTF-8



On 2011-08-13 17:12, Niels Thykier wrote:
> On 2011-08-08 07:06, Josh Triplett wrote:
>> On Sat, Aug 06, 2011 at 03:23:12PM +0200, Niels Thykier wrote:
>>> [...]
> 
> Hi,
> 
> I think that is really outside the scope of a Lintian backport.  If such
> a package was created for backports, I would consider it, but I will not
> introduce one in(/for) Lintian.
> 
> Also as far as I can tell, all packages can drop their private C.UTF-8
> maintenance scripts at wheezy + 1 if they migrate correctly during Wheezy.
> 
> ~Niels
> 
> 

Hi

I am suggesting this patch that makes lintian use the C.UTF-8 locale if
provided by libc-bin (checks for presence of /usr/lib/locale/C.UTF-8).
If it is not present, lintian will fall back to (generating and using)
its en_US.UTF-8.
  I would have used a C.UTF-8 locale, but it cannot be generated without
a newer libc as far as I can tell.

Peer review welcome;  I will commit it later this week if there are no
problems with it.

~Niels

>From baf1f710546d61a1cb5e3f068b976c0a5b6bf175 Mon Sep 17 00:00:00 2001
From: Niels Thykier <niels@thykier.net>
Date: Mon, 22 Aug 2011 21:32:02 +0200
Subject: [PATCH] Migrate to C.UTF-8 if libc-bin provides it

---
 checks/manpages      |   19 +++++++++++++++----
 checks/manpages.desc |    2 +-
 debian/control       |    2 +-
 debian/dirs          |    1 -
 debian/postinst      |   12 +++++++++++-
 debian/prerm         |    6 ++++--
 frontend/lintian     |   21 ++++++++++++++-------
 private/runtests     |   19 ++++++++++++-------
 8 files changed, 58 insertions(+), 24 deletions(-)

diff --git a/checks/manpages b/checks/manpages
index 0c63688..dc22e45 100644
--- a/checks/manpages
+++ b/checks/manpages
@@ -218,8 +218,13 @@ foreach my $file (@{$info->sorted_index}) {
 	    if (not defined $pid) {
 		fail("cannot run lexgrog: $!");
 	    } elsif ($pid == 0) {
-		my %newenv = (LC_ALL => 'en_US.UTF-8', PATH => $ENV{PATH},
-			      LOCPATH => $ENV{LOCPATH});
+		my %newenv = (LC_ALL => 'C.UTF-8', PATH => $ENV{PATH});
+		# Fall back to "en_US.UTF-8" if we are using a "private"
+		# locale.
+		if ($ENV{'LOCPATH'} ) {
+		    $newenv{LC_ALL} = 'en_US.UTF-8';
+		    $newenv{LOCPATH} = $ENV{LOCPATH};
+		}
 		undef %ENV;
 		%ENV = %newenv;
 		exec "lexgrog \Q$path\E 2>&1"
@@ -252,8 +257,14 @@ foreach my $file (@{$info->sorted_index}) {
 	if (not defined $pid) {
 	    fail("cannot run man -E UTF-8 -l: $!");
 	} elsif ($pid == 0) {
-	    my %newenv = (LC_ALL => 'en_US.UTF-8', PATH => $ENV{PATH},
-			  MANWIDTH => 80, LOCPATH => $ENV{LOCPATH});
+	    my %newenv = (LC_ALL => 'C.UTF-8', PATH => $ENV{PATH},
+			  MANWIDTH => 80);
+	    # Fall back to "en_US.UTF-8" if we are using a "private"
+	    # locale.
+	    if ($ENV{'LOCPATH'} ) {
+		$newenv{LC_ALL} = 'en_US.UTF-8';
+		$newenv{LOCPATH} = $ENV{LOCPATH};
+	    }
 	    undef %ENV;
 	    %ENV = %newenv;
 	    exec "($cmd >/dev/null) 2>&1"
diff --git a/checks/manpages.desc b/checks/manpages.desc
index d7d1443..66bde96 100644
--- a/checks/manpages.desc
+++ b/checks/manpages.desc
@@ -174,7 +174,7 @@ Info: This man page provokes warnings or errors from man.
  "Debugging" in the groff manual.
  .
  To test this for yourself you can use the following command:
-  LC_ALL=en_US.UTF-8 MANWIDTH=80 man --warnings -E UTF-8 -l &lt;file&gt; &gt;/dev/null
+  LC_ALL=C.UTF-8 MANWIDTH=80 man --warnings -E UTF-8 -l &lt;file&gt; &gt;/dev/null
 
 Tag: manpage-has-errors-from-pod2man
 Severity: normal
diff --git a/debian/control b/debian/control
index 651c575..e1707cd 100644
--- a/debian/control
+++ b/debian/control
@@ -22,6 +22,7 @@ Build-Depends: binutils,
                intltool-debian,
                javahelper (>= 0.32~),
                libapt-pkg-perl,
+               libc-bin (>= 2.13) | locales,
                libclass-accessor-perl,
                libdpkg-perl,
                libdigest-sha-perl,
@@ -37,7 +38,6 @@ Build-Depends: binutils,
                libtext-template-perl,
                libtimedate-perl,
                liburi-perl,
-               locales,
                xz-lzma | lzma,
                man-db,
                perl,
diff --git a/debian/dirs b/debian/dirs
index 419b920..ea49a65 100644
--- a/debian/dirs
+++ b/debian/dirs
@@ -1,5 +1,4 @@
 etc
 usr/bin
 usr/share/lintian
-var/lib/lintian
 var/spool/lintian
diff --git a/debian/postinst b/debian/postinst
index fd7c783..19b1511 100644
--- a/debian/postinst
+++ b/debian/postinst
@@ -17,6 +17,17 @@ gen_locale() {
     fi
 }
 
+#DEBHELPER#
+
+# Do nothing if there is a system locale.
+if [ -d '/usr/lib/locale/C.UTF-8' ] ; then
+    if [ "$1" = 'configure' -a -d "$locale_dir/" ] ; then
+        # except clean up our unused private locale
+        rm -rf "$locale_dir"
+    fi
+    exit 0
+fi
+
 if [ "$1" = "configure" ]; then
     if [ ! -f "$locale_dir/en_US.UTF-8/LC_CTYPE" ] &&
 	[ -f /usr/share/locale/locale.alias ]; then
@@ -39,4 +50,3 @@ if [ "$1" = "triggered" ]; then
     fi
 fi
 
-#DEBHELPER#
diff --git a/debian/prerm b/debian/prerm
index 698ed52..7e21104 100644
--- a/debian/prerm
+++ b/debian/prerm
@@ -3,9 +3,11 @@
 set -e
 
 #
-# Remove our generated locale unless we're only upgrading.
+# Remove our generated locale if we are not upgrading or
+# we are upgrading into a system with a libc provided
+# C.UTF-8 (libc-bin >= 2.13-1)
 
-if [ 'upgrade' != "$1" ] ; then
+if [ 'upgrade' != "$1" -o -d '/usr/lib/locale/C.UTF-8' ] ; then
     rm -rf /var/lib/lintian/
 fi
 
diff --git a/frontend/lintian b/frontend/lintian
index 595539c..e8cc1d4 100755
--- a/frontend/lintian
+++ b/frontend/lintian
@@ -692,13 +692,20 @@ if ($ENV{'LINTIAN_INTERNAL_TESTSUITE'}){
 $opt{'verbose'} = 1 if $debug;
 $ENV{'LINTIAN_DEBUG'} = $debug;
 
-# Use our custom-generated locale for programs we call, if it's available.  We
-# first look in the Lintian root and then in /var/lib/lintian, which is the
-# standard location for the install-time-generated locale.
-if (-d "$LINTIAN_ROOT/locale/en_US.UTF-8") {
-    $ENV{LOCPATH} = "$LINTIAN_ROOT/locale";
-} elsif (-d '/var/lib/lintian/locale/en_US.UTF-8') {
-    $ENV{LOCPATH} = '/var/lib/lintian/locale';
+# Use our custom-generated locale for programs we call, if it's available
+# and the system-wide one is not.  If the system-wide one is not available
+# it is most-likely a system wihtout libc-bin >= 2.13-1.
+if ( ! -d '/usr/lib/locale/C.UTF-8/') {
+    if (-d "$LINTIAN_ROOT/locale/C.UTF-8") {
+	$ENV{LOCPATH} = "$LINTIAN_ROOT/locale";
+    } elsif (-d '/var/lib/lintian/locale/C.UTF-8') {
+	$ENV{LOCPATH} = '/var/lib/lintian/locale';
+    }
+} else {
+    # Clear LOCPATH so checks/manpages uses the C locale
+    # (in the presence of $ENV{LOCPATH}, it will use en_US
+    # because we cannot create C.UTF-8 locales in Squeeze)
+    delete $ENV{LOCPATH};
 }
 
 # }}}
diff --git a/private/runtests b/private/runtests
index 071f2c3..92a46bd 100755
--- a/private/runtests
+++ b/private/runtests
@@ -19,7 +19,6 @@ LC_ALL="C"
 LINTIAN_ROOT=""
 LINTIAN_PROFILE=debian
 LINTIAN_INTERNAL_TESTSUITE=1
-LOCPATH="$(pwd)/debian/test.locale"
 NO_PKG_MANGLE=true
 
 [ "$TEST_WORK_DIR" ] || TEST_WORK_DIR="debian/test-out"
@@ -28,7 +27,6 @@ export LC_ALL
 export LINTIAN_ROOT
 export LINTIAN_PROFILE
 export LINTIAN_INTERNAL_TESTSUITE
-export LOCPATH
 export NO_PKG_MANGLE
 
 fail(){
@@ -36,14 +34,21 @@ fail(){
     exit 1
 }
 
-if [ ! -e "$LOCPATH"/en_US.UTF-8 ] ; then
-    echo "Generating en_US.UTF-8 locale for the test suite"
-    mkdir -p "$LOCPATH"
-    localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias \
-        --quiet "$LOCPATH"/en_US.UTF-8 || fail "Locale generation failed"
+if [ ! -d '/usr/lib/locale/en_US.UTF-8' ] ; then
+    LOCPATH="$(pwd)/debian/test.locale"
+    export LOCPATH
+    if [ ! -e "$LOCPATH"/en_US.UTF-8 ] ; then
+        echo "Generating en_US.UTF-8 locale for the test suite"
+        mkdir -p "$LOCPATH"
+        localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias \
+            --quiet "$LOCPATH"/en_US.UTF-8 || fail "Locale generation failed"
+    fi
+else
+    unset LOCPATH
 fi
 
 t/runtests --dump-logs -k $PARALLEL_ARGS t "$TEST_WORK_DIR" "$@"
 if [ "$TAG" = "" ] ; then
     testset/runtests -k testset "$TEST_WORK_DIR" "$@"
 fi
+
-- 
1.7.5.4


Reply to: