This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Failure in building GFortran on Cygwin


On Dec  1 11:13, Christopher Faylor wrote:
> On Sat, Dec 01, 2007 at 11:31:55AM +0100, Corinna Vinschen wrote:
> >On Nov 30 16:36, Christopher Faylor wrote:
> >> But we do have a fairly transparent way of dealing with this problem which
> >> will allow any ancient apps to continue to work.  We used it for the transition
> >> from 32 -> 64 bit file I/O.
> >
> >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 do you say that?  It should just be a simple aliasing.

Because it doesn't work, AFAICS.  Actual aliasing in localtime.cc as in

  extern long timezone __attribute__ ((alias("_timezone")));

doesn't work because it breaks generating cygdll.a due to multiple
definitions of timezone, the function in times.cc, the variable in
localtime.cc.

Using the NEW_FUNCTIONS mechanism in Makefile.in doesn't work either.
Apply this patch:

Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/Makefile.in,v
retrieving revision 1.202
diff -u -p -r1.202 Makefile.in
--- Makefile.in 1 Dec 2007 13:04:43 -0000       1.202
+++ Makefile.in 1 Dec 2007 17:01:32 -0000
@@ -214,7 +214,8 @@ NEW_FUNCTIONS:=regcomp posix_regcomp \
 	      stat _stat64 \
 	      telldir _telldir64 \
 	      tmpfile _tmpfile64 \
-	      truncate _truncate64
+	      truncate _truncate64 \
+	      timezone _timezone
 
 API_VER:=$(srcdir)/include/cygwin/version.h
 
Index: include/cygwin/time.h
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/include/cygwin/time.h,v
retrieving revision 1.7
diff -u -p -r1.7 time.h
--- include/cygwin/time.h       1 Dec 2007 13:49:45 -0000       1.7
+++ include/cygwin/time.h       1 Dec 2007 17:01:32 -0000
@@ -29,7 +29,7 @@ time_t __cdecl timegm (struct tm *);
 extern int daylight __asm__ ("__daylight");
 
 #ifndef __timezonefunc__
-extern long timezone __asm__ ("__timezone");
+extern long timezone;
 #endif
 #endif
 
When you build this application:

  #include <sys/time.h>

  int
  main ()
  {
    printf ("&timezone = %p\n", &timezone);
    printf ("&_timezone = %p\n", &_timezone);
    return 0;
  }

The result will be something like this:

  $ ./test-timezone
  &timezone = 0x401170
  &_timezone = 0x611942c0

So timezone is not the same as _timezone in the application and
only _timezone will be handled inside of Cygwin.

Am I missing something?


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/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]