Date: Sat, 31 Aug 2013 16:42:46 +0200 From: Dimitry Andric <dim@FreeBSD.org> To: Guido Falsi <madpilot@freebsd.org> Cc: Baptiste Daroussin <bapt@FreeBSD.org>, Boris Samorodov <bsam@passap.ru>, Peter Wemm <peter@wemm.org>, FreeBSD ports list <freebsd-ports@FreeBSD.org> Subject: Re: svn commit: r325668 - head/x11-toolkits/open-motif Message-ID: <2EBE9400-E1EF-4F3D-9C63-8454DA05ED90@FreeBSD.org> In-Reply-To: <5221FD7C.1040501@FreeBSD.org> References: <201308300952.r7U9qKsF026518@svn.freebsd.org> <52206DF8.1000401@FreeBSD.org> <5221CEB4.7090109@passap.ru> <B9A33C6E-B731-4862-B50E-74F52924FB7E@FreeBSD.org> <5221FD7C.1040501@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Aug 31, 2013, at 16:28, Guido Falsi <madpilot@freebsd.org> wrote: > On 08/31/13 15:38, Dimitry Andric wrote: ... >> Yes, the basic problem is that programs do "#include <iconv.h>", = which >> pulls in /usr/local/include/iconv.h (the GNU version) instead of >> /usr/include/iconv.h (the base version). The GNU version redefines = all >> the iconv-related functions to point to the GNU implementations. >> However, most configure scripts fail to detect that the linker flags >> should then be modified to add -L/usr/local/lib -liconv. >>=20 >> I don't know of a good way to force ports to ignore the GNU version = of >> iconv.h, and use the base iconv.h instead. Maybe we should rename = the >> GNU version to gnuiconv.h, and use some sort of wrapper header to = make >> sure ports only get the GNU version when they really want or need it. ... > I have spent a few hours experimenting and produced this PR: >=20 > http://www.freebsd.org/cgi/query-pr.cgi?pr=3Dports/181693 >=20 > The fixes themselves are trivial and for the subset of ports I have = tested it seems to work fine. I have asked for an exp-run since I don't = have the horsepower to properly test all the ports tree in an acceptable = time frame. >=20 > Most of the problematic ports seem not to work because of our patches = in the ports tree forcing them to look in /usr/local/ for iiconv, while = the software itself would prefer to use the system iconv implementation = if left to it's own devices. >=20 > My patch there is a little messy perhaps, since I had to make all the = Makefile changes conditional to the OS version. I'm quite sure cleaner = patches can be worked out, but I wanted to set some starting point. >=20 > I hope my work on this to be useful, and will try to improve it. I'm = quite open to suggestions and improvements. Thats why I decided to send = this email. I don't think your approach will work correctly. For every port, you basically add: +.if !exists(/usr/include/iconv.h) && ${OSVERSION} < 1000043 LIB_DEPENDS+=3D libiconv.so.3:${PORTSDIR}/converters/libiconv +.endif However, if someone has the libiconv port installed through some other means, almost any iconv-using port will still find the GNU iconv.h header before the base iconv.h header, so the problem of linking against the base iconv implementation is not solved. I suspect that the only robust way of solving this is with a wrapper header in /usr/local/include. Or by entirely banning GNU iconv. ;-) -Dimitry
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?2EBE9400-E1EF-4F3D-9C63-8454DA05ED90>