[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