2007-12-21 Takao Fujiwara <[email protected]>
authorfujiwara
Fri, 21 Dec 2007 12:22:10 +0000
changeset 11345 ac6e3d53f95a
parent 11344 8999bfb5823c
child 11346 8db1dbc9c1cf
2007-12-21 Takao Fujiwara <[email protected]> * SUNWlibpopt.spec: Updated * patches/popt-01-g11n-i18n-stdio.diff: Added to fix '--help' option on none UTF-8. CR 6186542
ChangeLog
SUNWlibpopt.spec
patches/popt-01-g11n-i18n-stdio.diff
--- a/ChangeLog	Thu Dec 20 23:05:09 2007 +0000
+++ b/ChangeLog	Fri Dec 21 12:22:10 2007 +0000
@@ -1,3 +1,9 @@
+2007-12-21  Takao Fujiwara  <[email protected]>
+
+	* SUNWlibpopt.spec: Updated
+	* patches/popt-01-g11n-i18n-stdio.diff: Added to fix '--help' option
+	  on none UTF-8. CR 6186542
+
 2007-12-20  Brian Cameron  <[email protected]>
 
 	* base-specs/poppler.spec:  Bump to 0.6.3.
--- a/SUNWlibpopt.spec	Thu Dec 20 23:05:09 2007 +0000
+++ b/SUNWlibpopt.spec	Fri Dec 21 12:22:10 2007 +0000
@@ -19,6 +19,8 @@
 Source:                  ftp://ftp.mirrorservice.org/sites/ftp.rpm.org/pub/rpm/dist/rpm-4.1.x/popt-%{version}.tar.gz
 Source1:                 %{name}-manpages-0.1.tar.gz
 Source2:                 l10n-configure.sh
+# date:2007-12-21 owner:fujiwara type:bug bugster:6186542 bugzilla:178413 state:upstream
+Patch1:                  popt-01-g11n-i18n-stdio.diff
 SUNW_BaseDir:            %{_prefix}
 BuildRoot:               %{_tmppath}/%{name}-%{version}-build
 
@@ -32,6 +34,9 @@
 %prep
 %setup -c -n %name-%version
 gzcat %SOURCE1 | tar xf -
+cd popt-%version
+%patch1 -p1
+cd ..
 
 %ifarch amd64 sparcv9
 cp -rp popt-%version popt-%version-64
@@ -57,6 +62,10 @@
 CFLAGS="$RPM_OPT_FLAGS"
 export CFLAGS
 
+libtoolize -f
+aclocal $ACLOCAL_FLAGS
+autoconf
+automake -a -c -f
 ./configure $CONFLAGS					\
             --libdir=%{_libdir}/%{_arch64}		\
             --libexecdir=%{_libexecdir}/%{_arch64}	\
@@ -67,6 +76,10 @@
 %endif
 
 cd popt-%version
+libtoolize -f
+aclocal $ACLOCAL_FLAGS
+autoconf
+automake -a -c -f
 CFLAGS="$CFLAGS32"	\
 ./configure $CONFLAGS
 make -j $CPUS
@@ -114,6 +127,9 @@
 
 
 %changelog
+* Fri Dec 21 2007 - [email protected]
+- Add popt-01-g11n-i18n-stdio.diff. Fixes '--help' option on none UTF-8.
+  CR 6186542
 * Wed Dec 19 2007 - [email protected]
 - Change FTP location to ftp.mirrorservices.org.
   ftp.rpm.org does not longer seem available/to exist
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/popt-01-g11n-i18n-stdio.diff	Fri Dec 21 12:22:10 2007 +0000
@@ -0,0 +1,382 @@
+--- popt-1.7/Makefile.am.orig	2007-12-21 19:40:03.495254000 +0900
++++ popt-1.7/Makefile.am	2007-12-21 19:42:56.088304000 +0900
+@@ -15,13 +15,13 @@ noinst_HEADERS = findme.h poptint.h syst
+ 
+ noinst_PROGRAMS = test1 test2 test3
+ test1_SOURCES = test1.c
+-test1_LDFLAGS = -all-static
++test1_LDFLAGS =
+ test1_LDADD = $(lib_LTLIBRARIES)
+ test2_SOURCES = test2.c
+-test2_LDFLAGS = -all-static
++test2_LDFLAGS =
+ test2_LDADD = $(lib_LTLIBRARIES)
+ test3_SOURCES = test3.c
+-test3_LDFLAGS = -all-static
++test3_LDFLAGS =
+ test3_LDADD = $(lib_LTLIBRARIES)
+ 
+ noinst_SCRIPTS = testit.sh
+@@ -33,7 +33,7 @@ TESTS = testit.sh
+ 
+ include_HEADERS = popt.h
+ lib_LTLIBRARIES = libpopt.la
+-libpopt_la_SOURCES = popt.c findme.c poptparse.c poptconfig.c popthelp.c
++libpopt_la_SOURCES = popt.c findme.c poptparse.c poptconfig.c popthelp.c poptint.c
+ 
+ man_MANS = popt.3
+ 
+--- popt-1.7/configure.in.orig	2007-12-21 19:40:09.557770000 +0900
++++ popt-1.7/configure.in	2007-12-21 20:07:17.961454000 +0900
+@@ -1,9 +1,8 @@
+ AC_INIT(popt.h)
+ AC_CANONICAL_SYSTEM
+ AC_PREREQ(2.12)
+-AC_CONFIG_HEADERS
+ AM_INIT_AUTOMAKE(popt, 1.7)
+-AM_CONFIG_HEADER(config.h)
++AC_CONFIG_HEADERS(config.h)
+ 
+ ALL_LINGUAS="cs da de es eu_ES fi fr gl hu id is it ja ko no pl pt pt_BR ro ru sk sl sr sv tr uk wa zh zh_CN.GB2312"
+ 
+@@ -50,7 +49,7 @@ else
+ fi
+ AC_SUBST(TARGET)
+ 
+-AC_CHECK_HEADERS(alloca.h float.h libintl.h mcheck.h unistd.h)
++AC_CHECK_HEADERS(alloca.h float.h libintl.h mcheck.h unistd.h langinfo.h)
+ AC_MSG_CHECKING(for /usr/ucblib in LIBS)
+ if test -d /usr/ucblib ; then
+ 	if test "$build" = "mips-sni-sysv4" ; then
+@@ -73,10 +72,10 @@ then
+   AC_MSG_RESULT(yes)
+ fi
+ 
+-AC_CHECK_FUNCS(strerror mtrace getuid geteuid)
+ AC_CHECK_FUNC(setreuid, [], [
+     AC_CHECK_LIB(ucb, setreuid, [if echo $LIBS | grep -- -lucb >/dev/null ;then :; else LIBS="$LIBS -lc -lucb" USEUCB=y;fi])
+ ])
++AC_CHECK_FUNCS(getuid geteuid mtrace __secure_getenv setregid strerror iconv)
+ 
+ AM_GNU_GETTEXT
+ 
+--- popt-1.7/popt.h.orig	2007-12-21 20:31:45.455134000 +0900
++++ popt-1.7/popt.h	2007-12-21 20:32:06.508963000 +0900
+@@ -34,6 +34,8 @@
+ #define	POPT_ARG_FLOAT		8	/*!< arg will be converted to float */
+ #define	POPT_ARG_DOUBLE		9	/*!< arg will be converted to double */
+ 
++#define POPT_ARG_MAINCALL   10U     /*!< return (*arg) (argc, argv) */
++
+ #define POPT_ARG_MASK		0x0000FFFF
+ /*@}*/
+ 
+--- popt-1.7/popthelp.c.orig	2007-12-21 19:40:16.105761000 +0900
++++ popt-1.7/popthelp.c	2007-12-21 19:57:18.972191000 +0900
+@@ -208,6 +208,8 @@ static void singleOptionHelp(FILE * fp, 
+     char * defs = NULL;
+     char * left;
+     int nb = maxLeftCol + 1;
++    int displaypad = 0;
++    int xx;
+ 
+     /* Make sure there's more than enough room in target buffer. */
+     if (opt->longName)	nb += strlen(opt->longName);
+@@ -307,8 +309,25 @@ static void singleOptionHelp(FILE * fp, 
+ 		break;
+ 	    }
+ 	} else {
+-	    *le++ = '=';
+-	    strcpy(le, argDescrip);		le += strlen(le);
++	    size_t lelen;
++
++	    *le++ = ((opt->argInfo & POPT_ARG_MASK) == POPT_ARG_MAINCALL)
++	    ? ' ' : '=';
++	    strcpy(le, argDescrip);
++	    lelen = strlen(le);
++	    le += lelen;
++
++#ifdef  POPT_WCHAR_HACK
++	    {   const char * scopy = argDescrip;
++	      mbstate_t t;
++	      size_t n;
++
++	      memset ((void *)&t, 0, sizeof (t)); /* In initial state.  */
++	      /* Determine number of characters.  */
++	      n = mbsrtowcs (NULL, &scopy, strlen(scopy), &t);
++	      displaypad = (int) (lelen-n);
++	    }
++#endif
+ 	}
+ 	if (opt->argInfo & POPT_ARGFLAG_OPTIONAL)
+ 	    *le++ = ']';
+@@ -317,9 +336,9 @@ static void singleOptionHelp(FILE * fp, 
+ /*@=boundswrite@*/
+ 
+     if (help)
+-	fprintf(fp,"  %-*s   ", maxLeftCol, left);
++	xx = POPT_fprintf(fp,"  %-*s   ", (int)(maxLeftCol+displaypad), left);
+     else {
+-	fprintf(fp,"  %s\n", left); 
++	xx = POPT_fprintf(fp,"  %s\n", left); 
+ 	goto out;
+     }
+ 
+@@ -335,22 +354,24 @@ static void singleOptionHelp(FILE * fp, 
+ 	char format[16];
+ 
+ 	ch = help + lineLength - 1;
+-	while (ch > help && !isspace(*ch)) ch--;
++	while (ch > help && !_isspaceptr(ch))
++	    ch = POPT_prev_char (ch);
+ 	if (ch == help) break;		/* give up */
+-	while (ch > (help + 1) && isspace(*ch)) ch--;
++	while (ch > (help + 1) && _isspaceptr(ch))
++	    ch = POPT_prev_char (ch);
+ 	ch++;
+ 
+ 	sprintf(format, "%%.%ds\n%%%ds", (int) (ch - help), indentLength);
+ 	/*@-formatconst@*/
+-	fprintf(fp, format, help, " ");
++	xx = POPT_fprintf(fp, format, help, " ");
+ 	/*@=formatconst@*/
+ 	help = ch;
+-	while (isspace(*help) && *help) help++;
++	while (_isspaceptr(help) && *help) help++;
+ 	helpLength = strlen(help);
+     }
+ /*@=boundsread@*/
+ 
+-    if (helpLength) fprintf(fp, "%s\n", help);
++    if (helpLength) xx = POPT_fprintf(fp, "%s\n", help);
+ 
+ out:
+     /*@-dependenttrans@*/
+@@ -443,6 +464,7 @@ static void singleTableHelp(poptContext 
+ {
+     const struct poptOption * opt;
+     const char *sub_transdom;
++    int xx;
+ 
+     if (table == poptAliasOptions) {
+ 	itemHelp(fp, con->aliases, con->numAliases, left, NULL);
+@@ -466,7 +488,7 @@ static void singleTableHelp(poptContext 
+ 	    sub_transdom = translation_domain;
+ 	    
+ 	if (opt->descrip)
+-	    fprintf(fp, "\n%s\n", D_(sub_transdom, opt->descrip));
++	    xx = POPT_fprintf(fp, "\n%s\n", D_(sub_transdom, opt->descrip));
+ 
+ 	singleTableHelp(con, fp, opt->arg, left, sub_transdom);
+     }
+--- popt-1.7/poptint.c.orig	1970-01-01 09:00:00.000000000 +0900
++++ popt-1.7/poptint.c	2007-12-21 19:57:56.997312000 +0900
+@@ -0,0 +1,156 @@
++#include "system.h"
++#include <stdarg.h>
++#include "poptint.h"
++
++#ifdef HAVE_ICONV
++static /*@only@*/ /*@null@*/ char *
++strdup_locale_from_utf8 (/*@null@*/ char *buffer)
++	/*@*/
++{
++    char *codeset = NULL;
++    char *dest_str;
++    iconv_t fd;
++
++    if (buffer == NULL)
++	return NULL;
++
++#ifdef HAVE_LANGINFO_H
++/*@-type@*/
++    codeset = nl_langinfo (CODESET);
++/*@=type@*/
++#endif
++
++    if (codeset && strcmp(codeset, "UTF-8")
++     && (fd = iconv_open(codeset, "UTF-8")) != (iconv_t)-1)
++    {
++	char *pin = buffer;
++	char *pout = NULL;
++	size_t ib, ob, dest_size;
++	int done;
++	int is_error;
++	size_t err;
++	char *shift_pin = NULL;
++	int xx;
++
++	err = iconv(fd, NULL, &ib, &pout, &ob);
++	dest_size = ob = ib = strlen(buffer);
++	dest_str = pout = malloc((dest_size + 1) * sizeof(*dest_str));
++	if (dest_str)
++	    *dest_str = '\0';
++	done = is_error = 0;
++	if (pout != NULL)
++	while (!done && !is_error) {
++	    err = iconv(fd, &pin, &ib, &pout, &ob);
++
++	    if (err == (size_t)-1) {
++		switch (errno) {
++		case EINVAL:
++		    done = 1;
++		    /*@switchbreak@*/ break;
++		case E2BIG:
++		{   size_t used = pout - dest_str;
++		    dest_size *= 2;
++		    dest_str = realloc(dest_str, (dest_size + 1) * sizeof(*dest_str));
++		    if (dest_str == NULL) {
++			is_error = 1;
++			continue;
++		    }
++		    pout = dest_str + used;
++		    ob = dest_size - used;
++		}   /*@switchbreak@*/ break;
++		case EILSEQ:
++		    is_error = 1;
++		    /*@switchbreak@*/ break;
++		default:
++		    is_error = 1;
++		    /*@switchbreak@*/ break;
++		}
++	    } else {
++		if (shift_pin == NULL) {
++		    shift_pin = pin;
++		    pin = NULL;
++		    ib = 0;
++		} else {
++		    done = 1;
++		}
++	    }
++	}
++	xx = iconv_close(fd);
++	if (pout)
++	    *pout = '\0';
++	if (dest_str != NULL)
++	    dest_str = xstrdup(dest_str);
++    } else {
++	dest_str = xstrdup(buffer);
++    }
++
++    return dest_str;
++}
++#endif
++
++/*@-mustmod@*/	/* LCL: can't see the ap modification. */
++static /*@only@*/ /*@null@*/ char *
++strdup_vprintf (const char *format, va_list ap)
++	/*@modifies ap @*/
++{
++    char *buffer;
++    char c;
++    va_list apc;
++    int xx;
++
++/*@-noeffectuncon -unrecog @*/
++    va_copy(apc, ap);	/* XXX linux amd64/ppc needs a copy. */
++/*@=noeffectuncon =unrecog @*/
++
++    buffer = calloc(sizeof(*buffer), vsnprintf (&c, 1, format, ap) + 1);
++    if (buffer != NULL)
++	xx = vsprintf(buffer, format, apc);
++
++    va_end(apc);
++
++    return buffer;
++}
++/*@=mustmod@*/
++
++char *
++POPT_prev_char (const char *str)
++{
++    char *p = (char *)str;
++
++    while (1) {
++	p--;
++	if ((*p & 0xc0) != (char)0x80)
++	    return (char *)p;
++    }
++}
++
++int
++POPT_fprintf (FILE* stream, const char *format, ...)
++{
++    int retval = 0;
++    va_list args;
++    char *buffer = NULL;
++#ifdef HAVE_ICONV
++    char *locale_str = NULL;
++#endif
++
++    va_start (args, format);
++    buffer = strdup_vprintf(format, args);
++    va_end (args);
++    if (buffer == NULL)
++	return retval;
++
++#ifdef HAVE_ICONV
++    locale_str = strdup_locale_from_utf8(buffer);
++    if (locale_str) {
++	retval = fprintf(stream, "%s", locale_str);
++	free(locale_str);
++    } else
++#endif
++    {
++	retval = fprintf(stream, "%s", buffer);
++    }
++    free (buffer);
++
++    return retval;
++}
+--- popt-1.7/poptint.h.orig	2007-12-21 19:40:22.696680000 +0900
++++ popt-1.7/poptint.h	2007-12-21 20:00:39.593387000 +0900
+@@ -113,4 +113,37 @@ struct poptContext_s {
+ 
+ #define N_(foo) foo
+ 
++#ifdef HAVE_ICONV
++#include <iconv.h>
++#if defined(__LCLINT__)
++/*@-declundef -incondefs @*/
++extern /*@only@*/ iconv_t iconv_open(const char *__tocode, const char *__fromcode)
++    /*@*/;
++
++extern size_t iconv(iconv_t __cd, /*@null@*/ char ** __inbuf,
++            /*@out@*/ size_t * __inbytesleft,
++            /*@out@*/ char ** __outbuf,
++            /*@out@*/ size_t * __outbytesleft)
++    /*@modifies __cd,
++        *__inbuf, *__inbytesleft, *__outbuf, *__outbytesleft @*/;
++
++extern int iconv_close(/*@only@*/ iconv_t __cd)
++    /*@modifies __cd @*/;
++/*@=declundef =incondefs @*/
++#endif
++#endif
++
++#ifdef HAVE_LANGINFO_H
++#include <langinfo.h>
++#if defined(__LCLINT__)
++/*@-declundef -incondefs @*/
++extern char *nl_langinfo (nl_item __item)
++    /*@*/;
++/*@=declundef =incondefs @*/
++#endif
++#endif
++
++int   POPT_fprintf (FILE* steam, const char *format, ...);
++char *POPT_prev_char (const char *str);
++
+ #endif
+--- popt-1.7/system.h.orig	2007-12-21 20:01:08.290683000 +0900
++++ popt-1.7/system.h	2007-12-21 20:01:59.455124000 +0900
+@@ -13,6 +13,9 @@ extern __const __int32_t *__ctype_touppe
+ 
+ #include <ctype.h>
+ 
++/* XXX isspace(3) has i18n encoding signednesss issues on Solaris. */
++#define _isspaceptr(_chp)   isspace((int)(*(unsigned char *)(_chp)))
++
+ #include <errno.h>
+ #include <fcntl.h>
+ #include <limits.h>