About new default configure-{c(pp|xx)?,ld}flags
Paul Guyot
pguyot at kallisys.net
Mon Jun 11 01:37:43 PDT 2007
On May 27, 2007, at 3:59 PM, Ryan Schmidt wrote:
> On May 26, 2007, at 04:44, Paul Guyot wrote:
>
>> On May 26, 2007, at 5:48 AM, N_Ox wrote:
>>
>>> The new configure flags change made in 1.4 seems to cause
>>> problems with some ports (at least 2, maybe more).
>>> This change introduces things like default ldflags -L/opt/local/lib.
>>> The problem with these flags is that some ports write ENV flags
>>> before the configure script ones.
>>> On a port upgrade, this causes gcc to include the installed
>>> headers instead of the distfile ones, the same goes
>>> for ld and liking against libs.
>>>
>>> As this is useful only if the port depends on some other ports,
>>> why not put these defaults settings only if
>>> the port does depend on another one?
>>
>> This problem is not new and it is not related to the default
>> flags. For example, it occurs with ruby where, before I patched
>> it, the bootstrap ruby interpreter that was used was the one in /
>> opt/local on upgrade.
>>
>> The virtual chroot technology will fix that globally, by hiding a
>> previous version of an installed port on upgrade. In the
>> meanwhile, port maintainers are invited to fix the problem on each
>> port. And removing ldflags is only a partial fix, as a previous
>> version of the software could be elsewhere on the -L path (e.g.
>> in /usr/).
>
> I'm not sure how to fix this for my ports, nor even how to detect
> whether it is a problem for my ports. So I would certainly
> appreciate if this virtual chroot could be implemented to fix it
> globally. (What's "virtual" about this chroot, by the way?)
Virtual chroot is currently implemented by Eugene Pimenov, one of the
three GSoC intern for this summer.
It consists in making ports believe the world is different from what
it really is when they are compiled. The current idea is to have the
following mapping:
/usr/bin -> /usr/bin (r/o)
/usr/sbin -> /usr/sbin (r/o)
/var -> /var
/etc -> /etc (r/o)
/tmp -> /tmp
/opt/local -> only ports declared as dependencies (r/o)
/* -> /Developer/SDKs/10.x.x/*
This is virtual because we avoid copying everything to achieve this
functionality. The plan is to do it with library injection, yet
Eugene noticed there might be some problem with non-flat namespace
libraries/tools. This is the same technology than the one used with
the trace mode.
Paul
More information about the macports-dev
mailing list