MacPorts custom installation prefix and precompiled binaries

Joshua Root jmr at
Sun Aug 7 16:18:33 UTC 2022

On 2022-8-7 18:29 , Jordan Ellis Coppard via macports-dev wrote:
> Hello,
> I read in the docs that if MacPorts is installed anywhere other than 
> /opt/local that precompiled binaries can not be used. I cannot find this 
> statement again so I am unsure if there was additional explanation for 
> why; so.. why?
> I'd like to be able to use MacPorts at a custom prefix but still also 
> use precompiled binaries sometimes (particularly those using Rust) due 
> to the incredibly long compilation times.
> /Jordan

You may be remembering <>.

Slight technicality, it's not that you can't use precompiled binaries 
with prefixes other than /opt/local, but rather you can only use 
precompiled binaries that were built for the prefix that you are using, 
and the ones on were built for /opt/local.

The most immediate problem with installing a package built for one 
prefix into a different prefix is that simply extracting the package 
will give you files in the wrong location. Easily fixable, right? But 
then the files themselves can contain references to absolute paths that 
are in the wrong prefix, for example mach-o files record what they are 
linked with, scripts contain a shebang line that could say something 
like "/opt/local/bin/python3.10", paths to config files may be baked 
into executables, and so on.

All of this is fixable… given sufficient work. Some of it can be fairly 
simply automated, some would require extensive rewriting of upstream 
code. What you want is called "relocatable packages", and we currently 
have no support for that in MacPorts. If it were added, it could not 
automatically apply to all ports; we would have to manually flag which 
ports are relocatable, since while some software may build in a way that 
supports relocation out of the box, much will not.

- Josh

More information about the macports-dev mailing list