Failure in building GFortran on Cygwin
Corinna Vinschen
corinna-cygwin@cygwin.com
Sat Dec 1 12:00:00 GMT 2007
On Dec 1 03:14, Brian Dessent wrote:
> Corinna Vinschen wrote:
>
> > Unfortunately it doesn't work for variables. We can hide the timezone
> > function, but how do we alias timezone to _timezone in libcygwin.a?
>
> Why does the variable need to be renamed? Can't we continue to call it
> _timezone internally and then "#define timezone _timezone" in a public
> header? It looks like this is already what we get in <cygwin/time.h> if
> we simply stop defining __timezonefunc__.
That's the default case starting with 1.5.25. You get timezone
by this #define in cygwin/time.h.
The problem right now is that this clashes with the previous definition
of `struct timezone'. What happens is this:
struct timezone { int foo; }; // by including sys/time.h
[...]
#define timezone _timezone // sys/time.h includes cygwin/time.h
[...]
struct timezone tzp; // the application defines this tzp var
So `struct timezone tzp' becomes `struct _timezone tzp' which is
an unknown structure type.
I have a simple patch for this which just reorders sys/time.h slightly.
The effect is that the #define is pulled in front of the structure
definition so all timezone gets _timezone and that's it.
> Or is pulluting the namespace with a macro called "timezone" too
> hideous? In that case we could try declaring it "extern long timezone
> asm("_timezone");" in the header.
Erm... sorry if my lack of assembler inlining shows, but that really
works? If so, it looks like a rather elegant solution to me. I'll give
it a try.
Corinna
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Project Co-Leader cygwin AT cygwin DOT com
Red Hat
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
More information about the Cygwin
mailing list