source: patches/man-1.6f-i18n-1.patch @ b0c96c6

clfs-1.2clfs-2.1clfs-3.0.0-systemdclfs-3.0.0-sysvinitsystemdsysvinit
Last change on this file since b0c96c6 was b0c96c6, checked in by Jim Gifford <clfs@…>, 15 years ago

Added Internationalization Patch to Man

  • Property mode set to 100644
File size: 10.3 KB
RevLine 
[b0c96c6]1Submitted By: Jim Gifford <jim at cross-lfs dot org>
2Date: 2009-01-08
3Initial Package Version: 1.6f
4Upstream Status: Unkown
5Origin: Mandriva
6Description: i18n Updates
7
8diff -Naur man-1.6f.orig/catopen/catopen.c man-1.6f/catopen/catopen.c
9--- man-1.6f.orig/catopen/catopen.c     2005-08-20 16:26:06.000000000 -0700
10+++ man-1.6f/catopen/catopen.c  2009-01-08 22:01:17.000000000 -0800
11@@ -9,22 +9,63 @@
12 extern char *index (const char *, int);         /* not always in <string.h> */
13 extern char *my_malloc(int);   /* in util.c */
14 
15+/* if the program has sgid/suid privileges then getenv doesn't return
16+ * NLSPATH; so we set here a good default value.
17+ */
18 #ifndef DEFAULT_NLSPATH
19 # if __GLIBC__ >= 2
20-#  define DEFAULT_NLSPATH "/usr/share/locale/%L/%N"
21+#  define DEFAULT_NLSPATH "/usr/share/locale/%L/%N:/usr/share/locale/%l_%t/%N:/usr/share/locale/%l/%N"
22 # else
23 #  define DEFAULT_NLSPATH "/usr/lib/locale/%N/%L"
24 # endif
25 #endif
26 
27-static nl_catd my_catopenpath(char *name, char *path);
28+static nl_catd my_catopenpath(char *name, char *path, char *lang);
29 
30 static                         /* this source included in gripes.c */
31 nl_catd
32 my_catopen(char *name, int oflag) {
33-  nl_catd fd;
34+  nl_catd fd = (nl_catd) -1;
35+
36+  /* using first the my_catopenpath, which looks with LANGUAGE
37+   * and only if it fails ressort to catopen, it gives better i18n
38+   */
39+  {
40+    char *nlspath, *lang, *s;
41 
42-  fd = catopen(name, oflag);
43+    /*
44+     * "If NLSPATH does not exist in the environment, or if a
45+     * message catalog cannot be opened in any of the paths specified
46+     * by NLSPATH, then an implementation defined default path is used"
47+     */
48+    nlspath = getenv("NLSPATH");
49+    if (!nlspath)
50+      nlspath = DEFAULT_NLSPATH;
51+
52+    lang = getenv("LANGUAGE");
53+    if (!lang)
54+      lang = getenv("LC_ALL");
55+    if (!lang)
56+      lang = getenv("LC_MESSAGES");
57+    if (!lang)
58+      lang = getenv("LANG");
59+    if (!lang)
60+      lang = "";
61+
62+    while(*lang && (fd == (nl_catd) -1)) {
63+      s = index(lang, ':');
64+      if (s) *s = 0;
65+        fd = my_catopenpath(name, nlspath, lang);
66+      if (s) lang=s+1;
67+      else lang = "";
68+    }
69+    if (fd == (nl_catd) -1)
70+      fd = my_catopenpath(name, nlspath, "en");
71+  }
72+
73+  /* still not found, use the system catopen */
74+  if (fd == (nl_catd) -1)
75+    fd = catopen(name, oflag);
76 
77   if (fd == (nl_catd) -1 && oflag) {
78     oflag = 0;
79@@ -32,8 +73,6 @@
80   }
81 
82   if (fd == (nl_catd) -1) {
83-    char *nlspath;
84-
85     /* The libc catopen fails - let us see if we can do better */
86     /* The quotes below are from X/Open, XPG 1987, Vol. 3. */
87 
88@@ -58,17 +97,6 @@
89 #endif
90     }
91 
92-    /*
93-     * "If NLSPATH does not exist in the environment, or if a
94-     * message catalog cannot be opened in any of the paths specified
95-     * by NLSPATH, then an implementation defined default path is used"
96-     */
97-
98-    nlspath = getenv("NLSPATH");
99-    if (nlspath)
100-      fd = my_catopenpath(name, nlspath);
101-    if (fd == (nl_catd) -1)
102-      fd = my_catopenpath(name, DEFAULT_NLSPATH);
103   }
104   return fd;
105 }
106@@ -90,15 +118,13 @@
107  *
108  */
109 static nl_catd
110-my_catopenpath(char *name, char *nlspath) {
111-  int fd;
112+my_catopenpath(char *name, char *nlspath, char *lang) {
113   nl_catd cfd = (nl_catd) -1;
114-  char *path0, *path, *s, *file, *lang, *lang_l, *lang_t, *lang_c;
115+  char *path0, *path, *s, *file, *lang_l, *lang_t, *lang_c;
116   int langsz, namesz, sz, lang_l_sz, lang_t_sz, lang_c_sz;
117 
118   namesz = strlen(name);
119 
120-  lang = getenv("LANG");
121   if (!lang)
122     lang = "";
123   langsz = strlen(lang);
124@@ -194,14 +220,9 @@
125       path = s+1;
126     } else
127       path = 0;
128-    fd = open(file, O_RDONLY);
129-    if (fd != -1) {
130-      /* we found the right catalog - but we don't know the
131-        type of nl_catd, so close it again and ask libc */
132-      close(fd);
133-      cfd = catopen(file, 0);
134-      break;
135-    }
136+       cfd = catopen(file, 0);
137+       if (cfd != (nl_catd) -1)
138+                       break;
139   }
140 
141   free(path0);
142diff -Naur man-1.6f.orig/configure man-1.6f/configure
143--- man-1.6f.orig/configure     2007-08-20 21:15:21.000000000 -0700
144+++ man-1.6f/configure  2009-01-08 22:29:17.000000000 -0800
145@@ -412,9 +412,9 @@
146       fi
147     done
148   done
149-  troff=""
150-  nroff=""
151-  jnroff=""
152+  troff=/usr/bin/troff
153+  nroff=/usr/bin/nroff
154+  jnroff=/usr/bin/nroff
155   eqn=""
156   neqn=""
157   jneqn=""
158@@ -472,29 +472,32 @@
159   done
160 # -Tlatin1 is bad when utf8 is used, but needed for groff, not for nroff
161 # Hmm - also needed for nroff, to prevent double conversion on uxterm
162+  Fgroff=/usr/bin/groff
163+  Fnroff=/usr/bin/nroff
164+  Fjnroff=/usr/bin/nroff
165   if test $Fgroff = "missing"
166   then
167     if test $Fnroff = "missing"
168     then
169-      nroff="nroff -Tlatin1 -mandoc"
170+      nroff="nroff -Tutf8 -mandoc"
171     else
172-      nroff="$Fnroff -Tlatin1 -mandoc"
173+      nroff="$Fnroff -Tutf8 -mandoc"
174     fi
175     troff="troff -mandoc"
176     echo "Warning: could not find groff"
177   else
178     if test $Fnroff = "missing"
179     then
180-      nroff="$Fgroff -Tlatin1 -mandoc"
181+      nroff="$Fgroff -Tutf8 -mandoc"
182     else
183-      nroff="$Fnroff -Tlatin1 -mandoc"
184+      nroff="$Fnroff -Tutf8 -mandoc"
185     fi
186     troff="$Fgroff -Tps -mandoc"
187-    jnroff="$Fgroff -Tnippon -mandocj"
188+    jnroff="$Fjnroff -Tutf8 -mandocj"
189   fi
190   eqn="$Fgeqn -Tps"
191-  neqn="$Fgeqn -Tlatin1"
192-  jneqn="$Fgeqn -Tnippon"
193+  neqn="$Fgeqn -Tutf8"
194+  jneqn="$Fgeqn -Tutf8"
195   tbl="$Fgtbl"
196   col="$Fcol"
197   vgrind="$Fvgrind"
198@@ -960,7 +963,7 @@
199 
200 # What sections do we anticipate?
201 
202-tmpsections="1 1p 8 2 3 3p 4 5 6 7 9 0p tcl n l p o"
203+tmpsections="1 1p 8 2 3 3p 3pm 4 5 6 7 9 0p tcl n l p o"
204 
205 if [ x$default = x ]; then
206   echo ""
207diff -Naur man-1.6f.orig/msgs/inst.sh man-1.6f/msgs/inst.sh
208--- man-1.6f.orig/msgs/inst.sh  2005-08-20 16:26:06.000000000 -0700
209+++ man-1.6f/msgs/inst.sh       2009-01-08 22:01:46.000000000 -0800
210@@ -27,8 +27,7 @@
211 for j in $M; do
212   if [ -f $j ]; then
213     i=`echo $j | sed -e 's/mess.//; s/.cat//'`
214-    dest=`echo $locdir | sed -e "s/%N/man/; s/%L/$i/"`
215-    dest=${PREFIX}$dest
216+    dest=${PREFIX}/`echo $locdir | sed -e "s/%N/man/; s/%L/$i/"`
217     echo "mkdir -p `dirname $dest`"
218     mkdir -p `dirname $dest`;
219     echo "install -c -m 644 $j $dest"
220diff -Naur man-1.6f.orig/src/apropos.sh man-1.6f/src/apropos.sh
221--- man-1.6f.orig/src/apropos.sh        2005-08-20 16:26:06.000000000 -0700
222+++ man-1.6f/src/apropos.sh     2009-01-08 22:02:47.000000000 -0800
223@@ -60,16 +60,56 @@
224     esac
225 done
226 
227+# list of languages to look for
228+LANG_LIST=`echo $LANGUAGE:$LC_ALL:$LC_MESSAGES:$LANG | tr ':' ' '`
229+DIR_LIST=""
230+for d in /var/cache/man $manpath /usr/lib
231+do
232+    for l in $LANG_LIST
233+    do
234+        if [ -d $d/$l ]
235+        then
236+            # check that the path is not already in the list
237+            if ! echo "$DIR_LIST" | grep " $d/$l\b" > /dev/null
238+            then
239+                DIR_LIST="$DIR_LIST $d/$l"
240+            fi
241+        fi
242+    done
243+    DIR_LIST="$DIR_LIST $d"
244+    # check that the path is not already in the list
245+    if ! echo "$DIR_LIST" | grep " $d\b" > /dev/null
246+    then
247+        DIR_LIST="$DIR_LIST $d/$l"
248+    fi
249+done
250+
251 while [ "$1" != "" ]
252 do
253     found=0
254-    for d in /var/cache/man $manpath /usr/lib
255+    # in order not to display lines in more than one language for
256+    # a same man page; we check that a given man page name
257+    # hasn't already been displayed
258+    BAZ=""
259+    for d in $DIR_LIST
260     do
261         if [ -f $d/whatis ]
262         then
263-            if grep -"$grepopt1" "$grepopt2""$1" $d/whatis
264+            if FOO=`grep -"$grepopt1" "$grepopt2""$1" $d/whatis`
265             then
266-                found=1
267+                # the LC_ALL=C is needed in case the text is
268+                # in a different encoding than the locale
269+                BAR=`echo -e "$FOO" | LC_ALL=C sed 's/ - .*$//' | tr ' []' '_' | sort -u`
270+                for i in $BAR
271+                do
272+                    if ! echo "$BAZ" | grep "$i" > /dev/null
273+                    then
274+                        BAZ="$BAZ $i"
275+                        i="^`echo $i | sed 's:_\+:\\\(\[_ \]\\\|\\\[\\\|\\\]\\\)\\\+:g'`"
276+                        echo -e "$FOO" | grep "$i"
277+                        found=1
278+                    fi
279+                done
280 # Some people are satisfied with a single occurrence
281 # But it is better to give all
282 #               break
283diff -Naur man-1.6f.orig/src/makewhatis.sh man-1.6f/src/makewhatis.sh
284--- man-1.6f.orig/src/makewhatis.sh     2007-09-17 11:35:14.000000000 -0700
285+++ man-1.6f/src/makewhatis.sh  2009-01-08 22:02:47.000000000 -0800
286@@ -55,6 +55,9 @@
287 dc=
288 for d in /usr/man/preformat /usr/man /usr/share/man/preformat /usr/share/man
289 do
290+    if [ -n "$LANG" -a -d "$d/$LANG" ]; then
291+       if [ x$dc = x ]; then dm="$d/$LANG"; else dm=$dc:"$d/$LANG"; fi
292+    fi
293     if [ -d $d ]; then
294        if [ x$dc = x ]; then dc=$d; else dc=$dc:$d; fi
295     fi
296@@ -227,7 +230,7 @@
297            section=$i
298            curdir=$mandir/${pages}$i
299            export section verbose curdir
300-           find $mandir/${pages}$i/. -name '*' $findarg0 $findarg -print | $AWK '
301+           find $mandir/${pages}$i/. -name '*' $findarg0 $findarg -print | LC_ALL=C $AWK -v MAN_NAME="$MAN_NAME" -v MAN_DESCRIPTION="$MAN_DESCRIPTION" '
302 
303            function readline() {
304               if (use_zcat || use_bzcat || use_lzcat) {
305@@ -315,6 +318,7 @@
306                  if ($1 ~ /^\.[Ss][HhYS]/ ||
307                    (pages == "cat" &&
308                    ($1 ~ /^S[yYeE]/ || $1 ~ /^DESCRIPTION/ ||
309+                    $1 ~ MAN_DESCRIPTION ||
310                     $1 ~ /^COMMAND/ || $1 ~ /^OVERVIEW/ ||
311                     $1 ~ /^STRUCTURES/ || $1 ~ /^INTRODUCTION/ ||
312                     $0 ~ /^[^ ]/))) {
313diff -Naur man-1.6f.orig/src/manpath.c man-1.6f/src/manpath.c
314--- man-1.6f.orig/src/manpath.c 2006-08-03 14:18:33.000000000 -0700
315+++ man-1.6f/src/manpath.c      2009-01-08 22:01:17.000000000 -0800
316@@ -282,13 +282,14 @@
317                /* We cannot use "lang = setlocale(LC_MESSAGES, NULL)" or so:
318                   the return value of setlocale is an opaque string. */
319                /* POSIX prescribes the order: LC_ALL, LC_MESSAGES, LANG */
320-               if((lang = getenv("LC_ALL")) != NULL)
321+               /* LANGUAGE is GNU/Linux and overrules all */
322+               if((lang = getenv("LANGUAGE")) != NULL)
323                        split2(dir, lang, add_to_mandirlist_x, perrs);
324-               if((lang = getenv("LC_MESSAGES")) != NULL)
325+               else if((lang = getenv("LC_ALL")) != NULL)
326                        split2(dir, lang, add_to_mandirlist_x, perrs);
327-               if((lang = getenv("LANG")) != NULL)
328+               else if((lang = getenv("LC_MESSAGES")) != NULL)
329                        split2(dir, lang, add_to_mandirlist_x, perrs);
330-               if((lang = getenv("LANGUAGE")) != NULL)
331+               else if((lang = getenv("LANG")) != NULL)
332                        split2(dir, lang, add_to_mandirlist_x, perrs);
333                add_to_mandirlist_x(dir, 0, perrs);
334        }
Note: See TracBrowser for help on using the repository browser.