[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

20030804: udunits on cygwin


>Date: Mon, 04 Aug 2003 11:35:05 -0700
>From: "Flynn, Connor J" <address@hidden>
>Organization: NOAA/PNL
>To: Steve Emmerson <address@hidden>
>Subject: RE: 20030804: udunits on cygwin

The above message contained the following:

> I'm not sure I can answer your questions very well but I'll try.  
> Regarding the Fortran compiler and flags, they aren't actually necessary
> per se.  The problem I was having was this:.  After an apparently
> successful run of "configure", "make" would bomb out at line 132 of the
> file cfortran.h with a big long message starting with "cfortran.h:
> Can't find your environment among:". From examination of cfortran.h, it
> looks like that error condition is tripped based on whether a valid
> Fortran environment was found.  After your reply I tried a few
> alternatives including -DNAGf90Fortran which works nicely and doesn't
> require setting or defining any other Fortran related flags. 

Ensuring that one of the C macros referenced in the file "cfortran.h" was
defined would probably have been sufficient -- although it wouldn't
guarantee that the Fortran interface would work.  If defining
NAGf90Fortran make the Fortran interface work under Cygwin, then that's
good news.

> With regards to CXX, my guess is that there is probably a typo in the
> configure file such that when the makefile is generated it accidentally
> references CXX instead of CC.  (Maybe the person who created it uses C++
> a lot and it just naturally flew from their finger tips?  I don't know.)
> If I don't define CXX I get the following result from make: 
> 1. making `all' in directory /usr/local/udunits-1.11.7/src/udunits
> 2. make[1]: Entering directory `/usr/local/udunits-1.11.7/src/udunits'
> 3. make[2]: Entering directory `/usr/local/udunits-1.11.7/src/udunits'
> 4. gcc -c -O -I../lib -I../port/misc -DNAGf90Fortran udunits.c
> 5. -o udunits udunits.o -L/usr/local/udunits-1.11.7/src/lib -ludunits
> -L/usr/local/udunits-1.11.7/src/port/misc -ludport
> 6. -o: not found
> 7. make[2]: *** [udunits] Error 1
> 8. make[2]: Leaving directory `/usr/local/udunits-1.11.7/src/udunits'
> 9. make[1]: *** [program] Error 2
> 10. make[1]: Leaving directory `/usr/local/udunits-1.11.7/src/udunits'
> 11. make: *** [udunits/all] Error 1

I think I understand the problem.  Cygwin doesn't distinguish between,
for example, files "foo.c" and file "foo.C": they both refer to the same
file.  This non-standard behavior means that case-sensitive makefile rules 
won't work.  There are some in the UDUNITS package.

> To me this looks like the first call (to gcc) on line 4 works but the
> subsequent call on line 5 lacks any reference to a compiler so it bombs.
> When I define a value for "CXX" (both in my environment and in the
> configure script) line 5 above proceeds properly because the compiler
> defined by CXX appears instead of a blank.  When you mentioned that
> udunits doesn't use C++ I tried defining "CXX=gcc".  This proceeds fine
> but still requires the modification to the configure script or you get
> the result above.
> Does this explain what's happening?  
> Connor
> > Why is it important to define a Fortran and C++ compiler (environment
> > variables FC and CXX)?  The UDUNITS package doesn't use them.

Steve Emmerson