On Aug 13, 2013, at 09:15, Peter Wemm <pe...@freebsd.org> wrote: > Author: peter > Date: Tue Aug 13 07:15:01 2013 > New Revision: 254273 > URL: http://svnweb.freebsd.org/changeset/base/254273 > > Log: > The iconv in libc did two things - implement the standard APIs, the GNU > extensions and also tried to be link time compatible with ports libiconv. > This splits that functionality and enables the parts that shouldn't > interfere with the port by default. > > WITH_ICONV (now on by default) - adds iconv.h, iconv_open(3) etc. > WITH_LIBICONV_COMPAT (off by default) adds the libiconv_open etc API, linker > symbols and even a stub libiconv.so.3 that are good enough to be able > to 'pkg delete -f libiconv' on a running system and reasonably expect it > to work. > > I have tortured many machines over the last few days to try and reduce > the possibilities of foot-shooting as much as I can. I've successfully > recompiled to enable and disable the libiconv_compat modes, ports that use > libiconv alongside system iconv etc. If you don't enable the > WITH_LIBICONV_COMPAT switch, they don't share symbol space. > > This is an extension of behavior on other system. iconv(3) is a standard > libc interface and libiconv port expects to be able to run alongside it on > systems that have it.
Unfortunately I expect this will break many ports, when the libiconv port is installed. A simple example is the following: #include <iconv.h> int main(void) { iconv_t ic = iconv_open("UTF-8", "ISO-8859-1"); iconv_close(ic); return 0; } If you compile this on a system after r254273 with -I/usr/local/include, and the libiconv port installed, it will result in: $ cc -I/usr/local/include iconv-test.c -o iconv-test /tmp/iconv-test-I1ltw1.o: In function `main': iconv-test.c:(.text+0x21): undefined reference to `libiconv_open' iconv-test.c:(.text+0x2f): undefined reference to `libiconv_close' cc: error: linker command failed with exit code 1 (use -v to see invocation) This is because libiconv's iconv.h does: #define iconv_open libiconv_open ... #define iconv_close libiconv_close and so on for most of its functions. -Dimitry _______________________________________________ freebsd-ports@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-ports To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"