Tim,
On 2005 Aug 9 , at 14.04, Tim Jenness wrote:
> I'll address this to you as the maintainer of the fortran
> autoconf system rather than a Starlink person.... Feel free to
> ignore me.
I could never do that....
> 1. Did the patches ever get off? (sorry)
Not yet. I'd hoped to send them off in a blaze of glory on 31 July,
and very nearly got there (I thought), but ran out of time. I didn't
have a chance to look at them at all last week, for rather pressing
non-work reasons. This week, I got them all packaged up neatly,
ready to go, then test-applied the patch to the autoconf CVS HEAD
(lovely), built the result (lovely), ran the regression tests (oh
dear...).
I know that Toby has some quite substantial working-but-uncommitted
changes (slightly worrying, but not a problem in itself). However it
looks as if some draft of his changes may have made its way onto the
branch, which changes the autoconf FC interface just enough to break
a test. We've never noticed, because it's in macro AC_FC_FREEFORM,
which we never use. I've mailed him to see if he can clarify. I
imagine that very few folk in fact use that macro, so breaking it
would probably be defensible; in fact, I think very few folk can use
the FC interface at all, as it's so limited, in the 2.59 release, as
to be practically useless.
> 2. I'm playing with a g95 and I'm getting trouble with the
> autoconf tests. Specifically:
>
> eg in astrom:
>
> configure:4187: WARNING: Use AC_PROG_FC with AC_PROG_FPP, instead
> of AC_PROG_F77
This is the result of a `if test "X$F77" != X; then' test, and so
would be triggered if there is a $F77 defined in the environment.
No, it's not a very sensible test....
If you want to override a non-f77 compiler, you should define FC=xxx
in a ./configure argument.
> configure:4541: checking for fixed form Fortran preprocessor features
> configure:4555: g95-64 -o conftest conftest.F >&5
> ld: /usr/local/g95-20050808src-64/bin/../lib/gcc-lib/powerpc-apple-
> darwin8.2.0/4.0.1//libf95.dylib bad magic number (not a Mach-O file)
> configure:4561: $? = 1
> configure: failed program was:
> | #define OK
> | program main
> | #ifndef OK
> | syntax error
> | #endif
> |
>
> This fails and everything dies because I have a case insenitive
> file system. The problem is that the fortran runtime library is
> 64bit and so I really really need $(FLAGS) to be included for the
> compiler tests to actually work. You will note that the first test
> did include $(FFLAGS) (and passed) but the second test failed. I'm
> hoping this is an easy fix...
This might be harder. I have a note from Toby which suggests that
there's a larger mess here:
> The question then arises how one compiles in free form, and how one
> compiles using different source extensions. Starlink's current
> version (and
> indeed the version in currently-released autoconf) treat these as
> separate questions, when in fact they are not. The compiler flags
> necessary to compile free-form source depend on the extension of the
> file; and the compiler flags for a particular source extension depend
> on the format of the source.
>
> So - I've deprecated AC_FC_SRCEXT and AC_FPP_SRCEXT (the second of
> which
> I introduced myself, so is safe enough to lose - the first of which
> needs to be kept around for backwards compatibility, however broken)
> And then I've extended AC_FC_FREEFORM and AC_FC_FIXEDFORM to accept a
> first argument of a suffix; they then create all the appropriate
> variables tagged with FIXED_<SRCEXT> etc.
> I've then also added an analogous AC_FPP_FREEFORM and
> AC_FPP_FIXEDFORM.
> (which are no-ops for indirect compilation)
So that the resolution to this appears to have an unholy link with
the regression failures mentioned at the top of this message.
What this means is that (a) I'll have to mail Toby to try to get him
to commit his recent changes onto the dev-nxg-20040116-add-fpp-
support branch, and to brace himself for some arguments when we do
put the patches in (he's already anticipated that this will have to
be a two-man job on the list), and (b) you/we might as well hack away
at the fortran.m4 that's on the HEAD, because it's probably doomed.
I think I've spotted a potential fix, though, or at least an error in
a plausibly important place. In macro AC_LANG(Fortran), the variable
$FCFLAGS is used (variable $FFLAGS is for the F77 interface only,
$FCFLAGS is for the FC interface which is the one the Preprocessable
Fortran `language' is based on). In the macro AC_LANG(Preprocessed
Fortran), ac_compile and ac_link are set to $ac_fpp_compile and
$ac_fpp_link respectively, and these are in turn set at various
points in the rest of the file, inside macros rich with FIXMEs, which
are the ones whose logic Toby seems to think is largely broken.
However, each time ac_fpp_{compile,link} are set, they use $FFLAGS
rather than $FCFLAGS, and there's a lot of switching back and forth
between languages at crucial points, and indeed there's a PWD note
which fixes a problem by popping then pushing the `Preprocessed
Fortran' language, purely so that the newly defined $ac_fpp_
{link,compile} are respected.
So, without having a completely convincing story of what's going on,
I suspect that the problem you describe is falling foul of this
somewhere. At least, it might be worth replacing $FFLAGS with
$FCFLAGS each time ac_fpp_{compile,link} is set, making sure that
FCFLAGS is set to the 64-bit options you need, and seeing what
happens. If that works on the HEAD, then you or I could make the
same fix on the dev branch, albeit with the expectation that it'll be
stomped on by a more substantial/robust rewrite at some point in the
near future.
Migrating the dev branch to the HEAD isn't a major task.
How does that sound?
...apart from `two steps forward two steps back'.
Norman
--
----------------------------------------------------------------------
Norman Gray / http://www.astro.gla.ac.uk/users/norman/
Physics & Astronomy, Glasgow University, UK
|