diff options
author | Dave Korn <dave.korn.cygwin@gmail.com> | 2011-12-06 20:31:31 +0000 |
---|---|---|
committer | Dave Korn <davek@gcc.gnu.org> | 2011-12-06 20:31:31 +0000 |
commit | 5fa3ea21352a956a05859c65a2107f019c16013c (patch) | |
tree | 6005299b48b36986550a31c13d9a70d4ec01a4ce /gcc | |
parent | 8535715d0fb7c430787c257a9fc14cb34794e676 (diff) | |
download | gcc-5fa3ea21352a956a05859c65a2107f019c16013c.tar.gz |
Makefile.in (LIBGNAT_TARGET_PAIRS [windows targets]): Correctly detect cygwin...
* gcc-interface/Makefile.in (LIBGNAT_TARGET_PAIRS [windows targets]):
Correctly detect cygwin, which no longer has the '32' suffix, and use
appropriate implementations of the sockets and memory packages.
* sysdep.c (WIN_SETMODE): New define to choose the correct spelling of
setmode/_setmode for MinGW and Cygwin, respectively.
(__gnat_set_binary_mode [windows targets]): Use the above, and enable
the windows version for Cygwin as well as MinGW.
(__gnat_set_text_mode [windows targets]): Likewise.
(__gnat_ttyname [windows targets]): Provide a Cygwin implementation
in addition to the MinGW version.
(__gnat_is_windows_xp): Make available to Cygwin as well as MinGW.
(__gnat_get_stack_bounds): Likewise.
From-SVN: r182065
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 15 | ||||
-rw-r--r-- | gcc/ada/gcc-interface/Makefile.in | 24 | ||||
-rw-r--r-- | gcc/ada/sysdep.c | 53 |
3 files changed, 72 insertions, 20 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index f9977b6a37a..94875aba18a 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,18 @@ +2011-12-06 Dave Korn <dave.korn.cygwin@gmail.com> + + * gcc-interface/Makefile.in (LIBGNAT_TARGET_PAIRS [windows targets]): + Correctly detect cygwin, which no longer has the '32' suffix, and use + appropriate implementations of the sockets and memory packages. + * sysdep.c (WIN_SETMODE): New define to choose the correct spelling of + setmode/_setmode for MinGW and Cygwin, respectively. + (__gnat_set_binary_mode [windows targets]): Use the above, and enable + the windows version for Cygwin as well as MinGW. + (__gnat_set_text_mode [windows targets]): Likewise. + (__gnat_ttyname [windows targets]): Provide a Cygwin implementation + in addition to the MinGW version. + (__gnat_is_windows_xp): Make available to Cygwin as well as MinGW. + (__gnat_get_stack_bounds): Likewise. + 2011-12-05 Bob Duff <duff@adacore.com> * sem_ch4.adb: Minor comment fix. diff --git a/gcc/ada/gcc-interface/Makefile.in b/gcc/ada/gcc-interface/Makefile.in index 32d8e428178..f6aac1c38e7 100644 --- a/gcc/ada/gcc-interface/Makefile.in +++ b/gcc/ada/gcc-interface/Makefile.in @@ -1580,18 +1580,32 @@ ifeq ($(strip $(filter-out avr none powerpc% eabispe leon% erc32% unknown elf,$( indepsw.adb<indepsw-gnu.adb endif -ifeq ($(strip $(filter-out cygwin32% mingw32% pe,$(osys))),) - LIBGNAT_TARGET_PAIRS = \ +ifeq ($(strip $(filter-out cygwin% mingw32% pe,$(osys))),) + # Cygwin provides a full Posix environment, and so we use the default + # versions of s-memory and g-socthi rather than the Windows-specific + # MinGW versions. Ideally we would use all the default versions for + # Cygwin and none of the MinGW versions, but for historical reasons + # the Cygwin port has always been a CygMing frankenhybrid and it is + # a long-term project to disentangle them. + ifeq ($(strip $(filter-out cygwin%,$(osys))),) + LIBGNAT_TARGET_PAIRS = \ + s-memory.adb<s-memory.adb \ + g-socthi.ads<g-socthi.ads \ + g-socthi.adb<g-socthi.adb + else + LIBGNAT_TARGET_PAIRS = \ + s-memory.adb<s-memory-mingw.adb \ + g-socthi.ads<g-socthi-mingw.ads \ + g-socthi.adb<g-socthi-mingw.adb + endif + LIBGNAT_TARGET_PAIRS += \ a-dirval.adb<a-dirval-mingw.adb \ a-excpol.adb<a-excpol-abort.adb \ s-gloloc.adb<s-gloloc-mingw.adb \ s-inmaop.adb<s-inmaop-dummy.adb \ - s-memory.adb<s-memory-mingw.adb \ s-taspri.ads<s-taspri-mingw.ads \ s-tasinf.adb<s-tasinf-mingw.adb \ s-tasinf.ads<s-tasinf-mingw.ads \ - g-socthi.ads<g-socthi-mingw.ads \ - g-socthi.adb<g-socthi-mingw.adb \ g-stsifd.adb<g-stsifd-sockets.adb \ g-soliop.ads<g-soliop-mingw.ads \ $(ATOMICS_TARGET_PAIRS) diff --git a/gcc/ada/sysdep.c b/gcc/ada/sysdep.c index a4456f56a24..2b99a32b132 100644 --- a/gcc/ada/sysdep.c +++ b/gcc/ada/sysdep.c @@ -120,38 +120,44 @@ extern struct tm *localtime_r(const time_t *, struct tm *); */ -#if defined(WINNT) +#if defined (WINNT) || defined (__CYGWIN__) const char __gnat_text_translation_required = 1; +#ifdef __CYGWIN__ +#define WIN_SETMODE setmode +#include <io.h> +#else +#define WIN_SETMODE _setmode +#endif + void __gnat_set_binary_mode (int handle) { - _setmode (handle, O_BINARY); + WIN_SETMODE (handle, O_BINARY); } void __gnat_set_text_mode (int handle) { - _setmode (handle, O_TEXT); + WIN_SETMODE (handle, O_TEXT); } -#ifdef __MINGW32__ -#include <windows.h> - -/* Return the name of the tty. Under windows there is no name for - the tty, so this function, if connected to a tty, returns the generic name - "console". */ +#ifdef __CYGWIN__ char * __gnat_ttyname (int filedes) { - if (isatty (filedes)) - return "console"; - else - return NULL; + extern char *ttyname (int); + + return ttyname (filedes); } +#endif /* __CYGWIN__ */ + +#if defined (__CYGWIN__) || defined (__MINGW32__) +#include <windows.h> + #ifndef RTX int __gnat_is_windows_xp (void); @@ -178,7 +184,7 @@ __gnat_is_windows_xp (void) return is_win_xp; } -#endif +#endif /* !RTX */ /* Get the bounds of the stack. The stack pointer is supposed to be initialized to BASE when a thread is created and the stack can be extended @@ -198,7 +204,24 @@ __gnat_get_stack_bounds (void **base, void **limit) *limit = tib->StackLimit; } -#endif /* !__MINGW32__ */ +#endif /* __CYGWIN__ || __MINGW32__ */ + +#ifdef __MINGW32__ + +/* Return the name of the tty. Under windows there is no name for + the tty, so this function, if connected to a tty, returns the generic name + "console". */ + +char * +__gnat_ttyname (int filedes) +{ + if (isatty (filedes)) + return "console"; + else + return NULL; +} + +#endif /* __MINGW32__ */ #else |