On Dec 11, 2007 12:40 PM, Andy Dougherty <[EMAIL PROTECTED]> wrote:
> On Tue, 11 Dec 2007, Jim Keenan wrote:
>
> > >From: Andy Dougherty via RT
> > >Date: 2007/12/11 Tue AM 08:38:17 CST
> > >Subject: Re: [perl #48459] [PATCH]:   Refactor config/inter/progs.pm into 
> > >2 config steps
> >
> > >
> > >I don't think this will work.  Specifically, to conduct a "basic test of
> > >that compiler's functioning" you need to compile *and link* a program, but
> > >you haven't picked a linker yet.
> >
> > Andy, that's what I thought at first, and you may well be correct.
> >
> > However, as I read the code in the current HEAD of
> > config/inter/progs.pm, the *only* variable passed to the internal
> > test_compiler subroutine is $cc (line 130).  $cc is assigned to much
> > farther up inside the runstep() method (lines 61-62), and immediately
> > thereafter assigned to the 'cc' argument in the Parrot::Configure object
> > (line 63).  All the other values you mention are assigned between lines
> > 64 and 130, but, AFAICT, none of those assignments depend on either $cc
> > or the value assigned to 'cc' inside the configuration object.  The
> > test_compiler() method, *as written*, does not appear to depend at all
> > on any of the other values located on the system or selected at the
> > prompt, and it does not appear to depend on the Parrot::Configure
> > object.  If so, then the refactoring I suggested is plausible.
>
> I think you're missing three things:
>
> 1.  test_compiler() calls cc_build(), which most definitely does need to
> use $ccflags and $link.
>
> 2.  The settings of things like ccflags and ldflags *could* depend on
> the compiler, even if the current inter/progs.pm file doesn't actually
> implement that.  Recognizing that some compilers are available on more
> than one platform, it makes sense to handle them in inter/progs.pm, not
> duplicate them in different hints files.  For now, though, such
> information is buried in various hints files.  For example, look at
> hints/linux.pm -- three different compilers are dealt with there.
>
> 3.  Triggers (or callbacks) can change the flow in hidden ways.  For
> example, the solaris hints file sets the value of $link depending on
> whether the user is using cc or gcc.
>
> > Of course, it may very well be that test_compiler() was misconceived all
> > along and that it *should* have been passed the current state of the
> > Parrot::Configure object ($conf).  What do you think?
>
> cc_build() consults the global $conf, and hence doesn't need it passed in.
> I would certainly agree that the flow of information isn't well controlled
> here.  Passing the object in sometimes and other times consulting the
> global object does seem like a recipe for confusion.  It might make sense
> to always do one or the other.
>
hints/linux.pm should really have separate flags for even g++, since
some warnings just don't work on g++.

I think it would be good if we could break out compilers separately
from the operating system.  This is especially useful for Sun Studio,
where ccflags cross operating systems.  Intel C tends to follow what
the primary system compilers, but it still runs on three distinct
operating system with some slight differences across the environments.

Steve Peters
[EMAIL PROTECTED]

Reply via email to