[voikko] Libvoikko 2.1rc3, openoffice.org-voikko 3.1rc2
Harri Pitkänen
hatapitk at iki.fi
Wed Apr 15 23:24:22 EEST 2009
On Wednesday 15 April 2009 21:59:49 Lauri Nurmi wrote:
> Tämän(kin) version kanssa on Mac OS X:ssä seuraava ongelma:
> checking for iconv... yes
> checking for working iconv... no
>
> Tästä seuraa ainakin se, että HAVE_ICONV jää määrittelemättä, ja
> utils/utils.cpp:n kääntäminen epäonnistuu koska kaksi funktiota ei
> palauta mitään (ja varoitukset käsitellään virheinä):
>
> utils/utils.cpp: In function ‘wchar_t* libvoikko::voikko_cstrtoucs4
> (const char*, const char*, size_t)’:
> utils/utils.cpp:103: warning: control reaches end of non-void function
> utils/utils.cpp: In function ‘char* libvoikko::voikko_ucs4tocstr
> (const wchar_t*, const char*, size_t)’:
> utils/utils.cpp:170: warning: control reaches end of non-void function
>
> Varsinainen ongelma on tietysti HAVE_ICONVin puuttuminen, mutta
> toinen asia sitten on mitä noiden funktioiden pitäisi palauttaa siinä
> tapauksessa, vai kuuluisiko niiden edes kääntyä.
Nuo funktiot ovat välttämättömät. Ne vaativat vähintään toteutuksen, joka
pystyy muuntamaan merkkijonoja UTF8- ja UCS32-koodausten välillä (tai jos
sizeof(wchar_t)==2, UTF8- ja UTF16-koodausten välillä). Tämän pystyy melko
varmasti tekemään OS X:ssä ilman iconvia, vastaava WIN32-apia käyttävä
toteutus on jo olemassa.
> Tuo "working iconv... no" johtuu config.login mukaan tällaisesta
> virheestä:
> conftest.cpp: In function 'int main()':
> conftest.cpp:58: error: invalid conversion from 'char**' to 'const
> char**'
> conftest.cpp:58: error: initializing argument 2 of 'size_t libiconv
> (void*, con
> st char**, size_t*, char**, size_t*)'
>
> Syynä on se, että Mac OS X 10.4:n APIssa vielä tuo 2. parametri on
> (ihan viisaasti) const char**, mutta Linuxeissa ja OS X 10.5:ssä se
> on (tavallaan tyhmästi) char**. Kyseinen testikoodi taitaa kuitenkin
> olla autoconf-systeemin itsensä tuottamaa, lieneekö se helposti
> korjattavissa edes?
Autoconf-makron pitäisi mielestäni ymmärtää tuokin erikoisuus. Se lopulta
generoi config.h-tiedostoon makron ICONV_CONST, jonka avulla koodi voidaan
kirjoittaa toimimaan oikein molemmissa tapauksissa. En tiedä, miksi tuo ei
sitten toimikaan oikein. Voit kokeilla config.h-tiedoston editoimista käsin
niin, että siellä sanotaan
#define HAVE_ICONV 1
#define ICONV_CONST const
Harri
More information about the voikko
mailing list