Skip site navigation (1)Skip section navigation (2)
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>