MacPorts 1.5.2 now available

Jason Stelzer mental at neverlight.com
Wed Aug 22 07:24:03 PDT 2007


On Aug 22, 2007, at 9:34 AM, Jay Sachs wrote:

>> export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/opt/local/lib"
>> CFLAGS="-L/opt/local/lib -I/opt/local/include" ./configure
>
> Just to be clear, neither of those excludes /usr/local/ 
> {include,lib} -- they just put /opt/local into the search path. I  
> suspect that you'd really want /opt/local first in the library  
> path, e.g.
>
> export DYLD_LIBRARY_PATH="/opt/local/lib:$DYLD_LIBRARY_PATH"
>

Be careful with DYLD_LIBRARY_PATH at runtime. Depending on which  
application you're using at the time, dyld may use the wrong library  
at runtime.

I alluded to this before, but does anyone know the moral equivalent  
to a -rpath linker directive on os x?

It would help in this situation a great deal. Elf executables can be  
linked in a way that includes path information to the libraries used  
at compile time. The down side to this is that if you go changing  
paths around where stuff is installed, things break. The up side to  
it is that you know what library is used at runtime when a binary is  
executed from a (relatively) sane environment. I'm sure rpath isn't  
bulletproof, but it does help.

I'm not seeing anything similar in the ld or dyld man pages. Without  
this ability you're going to have a problem when you go to launch 2  
different binaries that were compiled with 'the same but different'  
versions of a library.

> I think completely avoiding /opt/local is more hygienic -- that way  
> MP only depends on Apple-provided libraries and on libraries it  
> itself manages.
>
>

Have you tried expressly setting DYLD_FALLBACK_LIBRARY_PATH at  
compile time?  By  default,  it  is  set  to $(HOME)/lib:/usr/local/ 
lib:/lib:/usr/lib. Having $HOME/lib first seems goofy to me, but I  
don't actually have a $HOME/lib. My understanding is that overriding  
this would effectively cut /usr/local out of the library search path  
entirely. Again, I'm just going by the dyld man page. This would at  
least help the compile/upgrade phase of macports by excluding the  
stuff in /usr/local thus achieving your goal of only using macports/ 
apple libraries.


It's just my opinion but I believe that you're best off managing  
systems as a whole. Use macports where possible and install custom  
stuff that leverages your managed packages. The alternative,  
installing the same library in multiple places, is just asking for  
versioning problems that will be very frustrating to track down. If  
you're going to pursue the alternative I recommend finding a way to  
link binaries in such a way that hints as to what path to prefer is  
included for linked libraries. That would make for the sanest setup.  
I just don't happen to know how to do that on a mac.

As to the OP question about using gem with a macports installed  
version of ruby, I can't answer that directly. However, if you had  
(just for instance) a macports install of perl, then it is self  
contained. As long as the right perl is in your path, installing a  
perl module will result in it going under /opt/local (by default). I  
believe ruby is similar.


--
J.





More information about the macports-users mailing list