| [b0c96c6] | 1 | Submitted By: Jim Gifford <jim at cross-lfs dot org> | 
|---|
|  | 2 | Date: 2009-01-08 | 
|---|
|  | 3 | Initial Package Version: 1.6f | 
|---|
|  | 4 | Upstream Status: Unkown | 
|---|
|  | 5 | Origin: Mandriva | 
|---|
|  | 6 | Description: i18n Updates | 
|---|
|  | 7 |  | 
|---|
|  | 8 | diff -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); | 
|---|
|  | 142 | diff -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 "" | 
|---|
|  | 207 | diff -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" | 
|---|
|  | 220 | diff -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 | 
|---|
|  | 283 | diff -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 ~ /^[^ ]/))) { | 
|---|
|  | 313 | diff -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 | } | 
|---|