Homegrown destroot, maybe chroot?

Jann Röder roederja at student.ethz.ch
Sun Mar 11 03:38:19 PDT 2007

There are two solutions for your library problem:
1. Export DYLD_LIBRARY_PATH before launching the software, so that the
linker knows where to find the libraries
2. When building the libraries pass -install_name ${prefix}/lib/$outfile
to the linker. ${prefix}/lib/$outfile is the final installation
destination of the library. This approach requires patching the makefile.

Hope this helps.

Ryan Schmidt wrote:
> This question isn't about using MacPorts but about how MacPorts does
> something that I want to do elsewhere. How does it do the destroot phase?
> I have some software I would like to build. It happens to be Graphviz.
> There are a dozen other packages on which Graphviz depends. Ultimately
> they need to go into a location under /usr/local which would require
> root access, but I would like to build them in a user-writable temporary
> location first.
> If I'm not mistaken, MacPorts accomplishes its destroot phase by using,
> usually
> make install DESTDIR=/foo
> where /foo is the destroot directory of the work directory. The software
> gets installed in /foo/opt/local/whatever. Then, later, during the
> install phase, everything from /foo gets merged with the real
> /opt/local. Right? Right.
> What if I have multiple packages I want to install in the temporary
> directory before installing? Say I want to install libpng, which depends
> on zlib. But if zlib is only in the temporary destroot directory, the
> libpng build won't find it there when I've told it the dependencies are
> to be found in /usr/local. And if I instead tell libpng to link with
> zlib in the temporary destroot, won't that be the location where libpng
> forever looks for zlib, even after I've tried to install everything in
> /usr/local?
> Is there a way to make this work? Maybe something I need to do in
> addition to setting DESTDIR during make install? Or is there a different
> option? It occurs to me to try to use a chroot, but I've never used one
> before. Does that sound like a good thing to try -- make a chroot which
> contains an empty /usr/local directory, links (hard links?) to /usr/bin,
> /usr/X11R6, /System, and other things the build is likely to need, and
> do the build in there, letting it think it's writing to the real
> /usr/local when it's really not? Any other suggestions for building
> multiple packages in a temporary directory before installation?
> Thanks for any insight you can offer.
> The ultimate goal, in case you're wondering, is that I would like to do
> a complete build of Graphviz -- from decompressing the source archives,
> all the way up to creating a disk image containing an installer package
> -- without requiring root access. Running the installer package would
> require root access, but I don't want the build system to require root.

More information about the macports-dev mailing list