port install gnat-gcc

Boey Maun Suang boeyms at macports.org
Thu Jun 18 02:17:39 PDT 2009

Hi Ryan,

On 16/06/2009, at 8:18 PM, Ryan Schmidt wrote:

> On Jun 15, 2009, at 00:36, Boey Maun Suang wrote:
>> If it's of any interest to anyone, I've been having a go at  
>> creating a port that builds in the recommended way by downloading a  
>> bootstrap compiler and uses that to build GCC with Ada support, as  
>> the ghc port does.  (Because of the way that GCC builds and  
>> installs itself with absolute path references, the only way that I  
>> can see to get that to work would be to have the bootstrap built  
>> for installation into a temporary subdirectory of /var/tmp, have  
>> that build and install GCC with Ada support on the local machine,  
>> and then delete the bootstrap compiler -- though that may mean that  
>> it won't work with trace mode on).
> Why /var/tmp and not ${destroot}?

I know what I want to say, but I'm not sure about the best way to  
explain it, so please ask questions about anything that isn't clear.   
I also apologise for the redundancy if I mention anything that you  
already know about.

Firstly, I just want to make clear that it's the bootstrap compiler  
that I'm talking about extracting into a subdirectory of /var/tmp, for  
use to build and install a new GCC into ${prefix}.  That is, during  
the extract phase, the bootstrap compiler gets extracted into  
subdirectory of /var/tmp, and the source gets extracted into $ 
{workpath} as usual; the configure and build phases will then use the  
bootstrap in /var/tmp to build a new GCC that will be destrooted into $ 
{destroot}${prefix} and finally installed into ${prefix}.

The problem is that the GCC build process requires its final install  
prefix to be an absolute one; configure refuses to accept any relative  
components in the argument to --prefix.  Consequently, all of the path  
references within the files in any GCC build are absolute ones.  This  
includes references to required dynamic libraries, but there are  
probably other path references elsewhere that I haven't yet found  
(e.g. in internal configuration files).  It is the latter that means  
that I cannot be sure that changing the paths to dynamic libraries in  
GCC's executables and dynamic libraries using install_name_tool will  
be sufficient; that could break the compiler in ways that are not easy  
to detect or fix.

Thus, to be sure that a build of GCC can be reliably used as a  
bootstrap compiler, it has to be installed (temporarily) in the same  
absolute location on every machine.  ${destroot} won't work because it  
depends on ${prefix}, which is allowed to vary.  The bootstrap  
compiler also needs to be installed in a place where we can be sure  
that it won't interfere with other parts of the system, and can be  
easily deleted when it's finished with, and as far as I know, /var/tmp  
is the best place for such things.

(Of course, one could theoretically change the GCC build process to  
enable it to accept relative path installations, but I'm confident  
that that would be far more effort than it would be worth.  It's  
certainly beyond my ability and pain threshold.)

Consequently, I can't see any relative location to which we can  
extract a GCC bootstrap, and /var/tmp is the best absolute path that I  
can think of for this purpose.

Incidentally, I used otool on the executables in the current ghc  
bootstrap compiler, and they contain _absolute_ references to /opt/ 
local/lib/libgmp.3.dylib, so for those who try to install MacPorts ghc  
and who have configured ${prefix} to be other than /opt/local, the  
build will either fail due to the non-existence of /opt/local/lib/ 
libgmp.3.dylib, or (in accordance with the dyld(1) man page's  
variables), it will silently pick up libgmp.3.dylib in another  
location, such as /usr/local/lib, when it is run.  I haven't looked  
into it, but we may find that the ghc bootstrap actually has this same  
problem, just not in such an obvious or severe form.

As always, your thoughts (and those of others on the list) would be  

Kind regards,

Maun Suang

Boey Maun Suang
Email: boeyms at macports dot org

More information about the macports-users mailing list