Re: convutf8.cpp:236: error: invalid conversion from 'const char**' to 'char**'

Rich Megginson <[email protected]> Tue, 25 Jan 2011 20:19:50 -0700
Newsgroups gmane.comp.mozilla.devel.directory
Message-ID <[email protected]>
On 01/25/2011 11:00 AM, Mark Craig wrote:
> Hello,
>
>
> I am trying to compile the LDAP C SDK, but failing to compile convutf8.cpp
> as shown inline. What should I do differently to get the C SDK to compile?
>
>
> Mac OS X 10.5.8
>
> Xcode 3.1.4 developer tools
>
> I put all the code next to my NetBeans projects. Yet I am compiling from the
> command line for now.
>
>
> First I do the NSS step, getting the code from CVS. This all seems to work
> fine.
>
>
> export CVSROOT=:pserver:[email protected]:/cvsroot
>
> cvs co mozilla/nsprpub
>
> cvs co mozilla/security/coreconf mozilla/security/nss mozilla/security/dbm
> mozilla/dbm
>
> cd mozilla/security/nss/
>
> make nss_build_all
>
>
> Autoconf for the C SDK seems to find NSS and NSPR. But then something goes
> haywire with convutf8.cpp...
>
>
> hg clone http://hg.mozilla.org/projects/ldap-sdks/ mozilla/directory
>
> cd mozilla/directory/c-sdk
>
> ./configure --with-nss --with-nspr --enable-clu
>
> make
>
> c++ -o convutf8.o -c     -pipe -Wmost -fno-common -pthread -O   -UDEBUG
> -DNDEBUG=1 -DXP_UNIX=1 -DDARWIN=1 -DHAVE_BSD_FLOCK=1 -Di386=1
> -DHAVE_LCHOWN=1 -DHAVE_STRERROR=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1
>      -DNET_SSL  -DNO_LIBLCACHE -DLDAP_REFERRALS     -DNS_DOMESTIC
> -DFORCE_PR_LOG -D_PR_PTHREADS -UHAVE_CVAR_BUILT_ON_SEM
> -I/Users/mark/NetBeansProjects/mozilla/dist/public/nss
> -I/Users/mark/NetBeansProjects/mozilla/dist/Darwin9.8.0_DBG.OBJ/include
> -I../../../../../dist/public/ldap -I../../../ldap/include  convutf8.cpp
>
> convutf8.cpp: In function 'char* convert_to_utf8(const char*, const char*)':
>
> convutf8.cpp:236: error: invalid conversion from 'const char**' to 'char**'
>
> convutf8.cpp:236: error:   initializing argument 2 of 'size_t iconv(void*,
> char**, size_t*, char**, size_t*)'
>
> convutf8.cpp:239: error: invalid conversion from 'const char**' to 'char**'
>
> convutf8.cpp:239: error:   initializing argument 2 of 'size_t iconv(void*,
> char**, size_t*, char**, size_t*)'
>
> convutf8.cpp:242: error: invalid conversion from 'const char**' to 'char**'
>
> convutf8.cpp:242: error:   initializing argument 2 of 'size_t iconv(void*,
> char**, size_t*, char**, size_t*)'
>
> make[2]: *** [convutf8.o] Error 1
>
> make[1]: *** [export] Error 2
>
> make: *** [export] Error 2
>
>
> Thanks for your help.

Looks like convutf8.cpp was not ported to this platform.  Note that 
--enable-clu is not used for Thunderbird builds which is probably why no 
one has seen this before.  The problem is here beginning on line 90:
/* Type used for the src parameter to iconv() (the 2nd parameter) */

#if defined(_HPUX_SOURCE) || defined(__GLIBC__)
#define LDAPTOOL_ICONV_SRC_TYPE	char **		/* HP/UX and glibc (Linux) */
#else
#define LDAPTOOL_ICONV_SRC_TYPE const char **	/* all others */
#endif

Looks like on this platform the iconv() function expects char ** not 
const char **.  Since you're not using HPUX or GLIBC, 
LDAPTOOL_ICONV_SRC_TYPE is being defined as const char **.

If you can edit the source or add a patch, you could add an
#ifndef LDAPTOOL_ICONV_SRC_TYPE
...
#endif

block around this code, and add a define of
#define LDAPTOOL_ICONV_SRC_TYPE	char **
wherever you set your defines/build flags for your project.

>
> Regards,
>
> Mark

Cheers, Mark!