Re: [PATCH 4/4][Ada,DJGPP] Ada support for DJGPP
On 10/10/2016 06:22 PM, Arnaud Charlet wrote: PS. What about last versions of other 2 not yet approved patches (1 and 3)? There have been many back and forth and many updates, so I do not know where we are on these. I'm pretty sure I OKed one of the other parts, but best to resubmit them cleanly (so with latest patches, changelog, etc...). There are no changes since submitting last versions of patches 1 and 3. So I just pointed to messages in mail archives in separate e-mails. Andris
Re: [PATCH 4/4][Ada,DJGPP] Ada support for DJGPP
> >> int > >> __gnat_get_maximum_file_name_length (void) > >> { > >>+#if defined (__DJGPP__) > >>+ return (_use_lfn(".")) ? -1 : 8; > >>+#else > >>return -1; > >>+#endif > >> } > >Is the above change really necessary? Would be nice to get rid of this > >extra code. The rest looks OK to me. > > It is be possible to leave this part out for now. OK without this part then. > PS. What about last versions of other 2 not yet approved patches (1 and 3)? There have been many back and forth and many updates, so I do not know where we are on these. I'm pretty sure I OKed one of the other parts, but best to resubmit them cleanly (so with latest patches, changelog, etc...). Arno
Re: [PATCH 4/4][Ada,DJGPP] Ada support for DJGPP
On 09/25/2016 07:25 PM, Arnaud Charlet wrote: int __gnat_get_maximum_file_name_length (void) { +#if defined (__DJGPP__) + return (_use_lfn(".")) ? -1 : 8; +#else return -1; +#endif } Is the above change really necessary? Would be nice to get rid of this extra code. The rest looks OK to me. It is be possible to leave this part out for now. We could return to this part later separately. Andris PS. What about last versions of other 2 not yet approved patches (1 and 3)? >From bd1698bff232bdc4258c70f49add1869276184db Mon Sep 17 00:00:00 2001 From: Andris PavenisDate: Mon, 10 Oct 2016 18:14:52 +0300 Subject: [PATCH 4/4] [DJGPP, Ada] Ada support * ada/adaint.c: Include process.h, signal.h, dir.h and utime.h for DJGPP. ISALPHA: include and define to isalpha for DJGPP when IN_RTS is defined. (DIR_SEPARATOR) define to '\\' for DJGPP. (__gnat_get_file_names_case_sensitive): return 0 for DJGPP unless overriden in environment (__gnat_is_absolute_path): Support MS-DOS style absolute paths for DJGPP. (__gnat_portable_spawn): Use spewnvp for DJGPP. (__gnat_portable_no_block_spawn): Use spawnvp for DJGPP. (__gnat_portable_wait): Return 0 for DJGPP. --- gcc/ada/adaint.c | 39 --- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c index f317865..17d6f1f 100644 --- a/gcc/ada/adaint.c +++ b/gcc/ada/adaint.c @@ -112,7 +112,18 @@ extern "C" { #endif -#if defined (__MINGW32__) || defined (__CYGWIN__) +#if defined (__DJGPP__) + +/* For isalpha-like tests in the compiler, we're expected to resort to + safe-ctype.h/ISALPHA. This isn't available for the runtime library + build, so we fallback on ctype.h/isalpha there. */ + +#ifdef IN_RTS +#include +#define ISALPHA isalpha +#endif + +#elif defined (__MINGW32__) || defined (__CYGWIN__) #include "mingw32.h" @@ -165,11 +176,16 @@ UINT CurrentCCSEncoding; #include #endif -#if defined (_WIN32) - +#if defined (__DJGPP__) #include #include #include +#include +#undef DIR_SEPARATOR +#define DIR_SEPARATOR '\\' + +#elif defined (_WIN32) + #include #include #include @@ -560,7 +576,7 @@ __gnat_get_file_names_case_sensitive (void) { /* By default, we suppose filesystems aren't case sensitive on Windows and Darwin (but they are on arm-darwin). */ -#if defined (WINNT) \ +#if defined (WINNT) || defined (__DJGPP__) \ || (defined (__APPLE__) && !(defined (__arm__) || defined (__arm64__))) file_names_case_sensitive_cache = 0; #else @@ -576,7 +592,7 @@ __gnat_get_file_names_case_sensitive (void) int __gnat_get_env_vars_case_sensitive (void) { -#if defined (WINNT) +#if defined (WINNT) || defined (__DJGPP__) return 0; #else return 1; @@ -1646,7 +1662,7 @@ __gnat_is_absolute_path (char *name, int length) #else return (length != 0) && (*name == '/' || *name == DIR_SEPARATOR -#if defined (WINNT) +#if defined (WINNT) || defined(__DJGPP__) || (length > 1 && ISALPHA (name[0]) && name[1] == ':') #endif ); @@ -2234,7 +2250,7 @@ __gnat_portable_spawn (char *args[] ATTRIBUTE_UNUSED) #if defined (__vxworks) || defined(__PikeOS__) return -1; -#elif defined (_WIN32) +#elif defined (__DJGPP__) || defined (_WIN32) /* args[0] must be quotes as it could contain a full pathname with spaces */ char *args_0 = args[0]; args[0] = (char *)xmalloc (strlen (args_0) + 3); @@ -2606,6 +2622,12 @@ __gnat_portable_no_block_spawn (char *args[] ATTRIBUTE_UNUSED) /* Not supported. */ return -1; +#elif defined(__DJGPP__) + if (spawnvp (P_WAIT, args[0], args) != 0) +return -1; + else +return 0; + #elif defined (_WIN32) HANDLE h = NULL; @@ -2649,6 +2671,9 @@ __gnat_portable_wait (int *process_status) pid = win32_wait (); +#elif defined (__DJGPP__) + /* Child process has already ended in case of DJGPP. + No need to do anything. Just return success. */ #else pid = waitpid (-1, , 0); -- 2.7.4
Re: [PATCH 4/4][Ada,DJGPP] Ada support for DJGPP
On 09/25/2016 09:10 PM, Arnaud Charlet wrote: Is the above change really necessary? Would be nice to get rid of this extra code. The rest looks OK to me. It is required for support of environment when LFN support is either not available or disabled for some reason (for example FreeDOS without LFN support loaded). Does it matter for GNAT usage/users in practice? Arno It may. I do not actually have information about environments used by poeple using DJGPP build. I'm providing compiler packages for them. There are actually 2 levels of non-LFN support for DJGPP port of CCC: 1) ability to run user compiled programs (the ones which are compatible with required restrictions) without LFN support 2) the ability to compile using GCC in such environment Submitted patches only addresses level 1. I'm not sure I'll ever submit changes for level 2. Absence of these changes does not prevent bootstrapping GCC iwhen LFN is available (like in recent Windows versions). Discussed change belongs to level 1 (ability to run compiled programs without LFN support available). Andris
Re: [PATCH 4/4][Ada,DJGPP] Ada support for DJGPP
> >Is the above change really necessary? Would be nice to get rid of this > >extra code. The rest looks OK to me. > It is required for support of environment when LFN support is either > not available or disabled for some reason (for example FreeDOS > without LFN support loaded). Does it matter for GNAT usage/users in practice? Arno
Re: [PATCH 4/4][Ada,DJGPP] Ada support for DJGPP
On 09/25/2016 07:25 PM, Arnaud Charlet wrote: int __gnat_get_maximum_file_name_length (void) { +#if defined (__DJGPP__) + return (_use_lfn(".")) ? -1 : 8; +#else return -1; +#endif } Is the above change really necessary? Would be nice to get rid of this extra code. The rest looks OK to me. It is required for support of environment when LFN support is either not available or disabled for some reason (for example FreeDOS without LFN support loaded). Andris
Re: [PATCH 4/4][Ada,DJGPP] Ada support for DJGPP
> int > __gnat_get_maximum_file_name_length (void) > { > +#if defined (__DJGPP__) > + return (_use_lfn(".")) ? -1 : 8; > +#else >return -1; > +#endif > } Is the above change really necessary? Would be nice to get rid of this extra code. The rest looks OK to me. Arno
Re: [PATCH 4/4][Ada,DJGPP] Ada support for DJGPP
On 09/04/2016 09:52 PM, Arnaud Charlet wrote: This last patch (4/4) contains DJGPP related changes to adaint.c (except one which belongs to patch 1/4). This patch is quite intrusive. Are all these changes really needed? New version of patch is in attachment. char __gnat_get_default_identifier_character_set (void) { +#if defined (__DJGPP__) + return 'p'; +#else return '1'; +#endif } Why is this needed? Removed in updated version of patch -#elif defined (_WIN32) +#elif defined (__DJGPP__) || defined (_WIN32) /* args[0] must be quotes as it could contain a full pathname with spaces */ char *args_0 = args[0]; args[0] = (char *)xmalloc (strlen (args_0) + 3); @@ -2606,6 +2630,12 @@ __gnat_portable_no_block_spawn (char *args[] ATTRIBUTE_UNUSED) /* Not supported. */ return -1; +#elif defined(__DJGPP__) + if (spawnvp (P_WAIT, args[0], args) != 0) +return -1; + else +return 0; + #elif defined (_WIN32) HANDLE h = NULL; @@ -2649,6 +2679,7 @@ __gnat_portable_wait (int *process_status) pid = win32_wait (); +#elif defined (__DJGPP__) #else You can't add an empty #elif without explaining it with a proper comment. Comment with explanation added in attached version of patch Andris >From 49015a63e708824dbd80fb90520c33b8e1607c43 Mon Sep 17 00:00:00 2001 From: Andris PavenisDate: Thu, 15 Sep 2016 19:31:54 +0300 Subject: [PATCH 4/4] [DJGPP, Ada] Ada support * ada/adaint.c: Include process.h, signal.h, dir.h and utime.h for DJGPP. ISALPHA: include and define to isalpha for DJGPP when IN_RTS is defined. (DIR_SEPARATOR) define to '\\' for DJGPP. (__gnat_get_maximum_file_name_length): decide return value depending on availability of LFN for DJGPP (__gnat_get_file_names_case_sensitive): return 0 for DJGPP unless overriden in environment (__gnat_is_absolute_path): Support MS-DOS style absolute paths for DJGPP. (__gnat_portable_spawn): Use spewnvp for DJGPP. (__gnat_portable_no_block_spawn): Use spawnvp for DJGPP. (__gnat_portable_wait): Return 0 for DJGPP. Signed-off-by: Andris Pavenis --- gcc/ada/adaint.c | 43 --- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c index f317865..ed49ed7 100644 --- a/gcc/ada/adaint.c +++ b/gcc/ada/adaint.c @@ -112,7 +112,18 @@ extern "C" { #endif -#if defined (__MINGW32__) || defined (__CYGWIN__) +#if defined (__DJGPP__) + +/* For isalpha-like tests in the compiler, we're expected to resort to + safe-ctype.h/ISALPHA. This isn't available for the runtime library + build, so we fallback on ctype.h/isalpha there. */ + +#ifdef IN_RTS +#include +#define ISALPHA isalpha +#endif + +#elif defined (__MINGW32__) || defined (__CYGWIN__) #include "mingw32.h" @@ -165,11 +176,16 @@ UINT CurrentCCSEncoding; #include #endif -#if defined (_WIN32) - +#if defined (__DJGPP__) #include #include #include +#include +#undef DIR_SEPARATOR +#define DIR_SEPARATOR '\\' + +#elif defined (_WIN32) + #include #include #include @@ -538,7 +554,11 @@ __gnat_try_lock (char *dir, char *file) int __gnat_get_maximum_file_name_length (void) { +#if defined (__DJGPP__) + return (_use_lfn(".")) ? -1 : 8; +#else return -1; +#endif } /* Return nonzero if file names are case sensitive. */ @@ -560,7 +580,7 @@ __gnat_get_file_names_case_sensitive (void) { /* By default, we suppose filesystems aren't case sensitive on Windows and Darwin (but they are on arm-darwin). */ -#if defined (WINNT) \ +#if defined (WINNT) || defined (__DJGPP__) \ || (defined (__APPLE__) && !(defined (__arm__) || defined (__arm64__))) file_names_case_sensitive_cache = 0; #else @@ -576,7 +596,7 @@ __gnat_get_file_names_case_sensitive (void) int __gnat_get_env_vars_case_sensitive (void) { -#if defined (WINNT) +#if defined (WINNT) || defined (__DJGPP__) return 0; #else return 1; @@ -1646,7 +1666,7 @@ __gnat_is_absolute_path (char *name, int length) #else return (length != 0) && (*name == '/' || *name == DIR_SEPARATOR -#if defined (WINNT) +#if defined (WINNT) || defined(__DJGPP__) || (length > 1 && ISALPHA (name[0]) && name[1] == ':') #endif ); @@ -2234,7 +2254,7 @@ __gnat_portable_spawn (char *args[] ATTRIBUTE_UNUSED) #if defined (__vxworks) || defined(__PikeOS__) return -1; -#elif defined (_WIN32) +#elif defined (__DJGPP__) || defined (_WIN32) /* args[0] must be quotes as it could contain a full pathname with spaces */ char *args_0 = args[0]; args[0] = (char *)xmalloc (strlen (args_0) + 3); @@ -2606,6 +2626,12 @@ __gnat_portable_no_block_spawn (char *args[] ATTRIBUTE_UNUSED) /* Not supported. */ return -1; +#elif defined(__DJGPP__) + if (spawnvp (P_WAIT, args[0], args) != 0) +return -1; + else +return 0; + #elif defined (_WIN32) HANDLE h = NULL; @@ -2649,6 +2675,9 @@ __gnat_portable_wait (int
Re: [PATCH 4/4][Ada,DJGPP] Ada support for DJGPP
> >This last patch (4/4) contains DJGPP related changes to adaint.c > >(except one which belongs to patch 1/4). This patch is quite intrusive. Are all these changes really needed? > char > __gnat_get_default_identifier_character_set (void) > { > +#if defined (__DJGPP__) > + return 'p'; > +#else >return '1'; > +#endif > } Why is this needed? > -#elif defined (_WIN32) > +#elif defined (__DJGPP__) || defined (_WIN32) >/* args[0] must be quotes as it could contain a full pathname with spaces >*/ >char *args_0 = args[0]; >args[0] = (char *)xmalloc (strlen (args_0) + 3); > @@ -2606,6 +2630,12 @@ __gnat_portable_no_block_spawn (char *args[] > ATTRIBUTE_UNUSED) >/* Not supported. */ >return -1; > > +#elif defined(__DJGPP__) > + if (spawnvp (P_WAIT, args[0], args) != 0) > +return -1; > + else > +return 0; > + > #elif defined (_WIN32) > >HANDLE h = NULL; > @@ -2649,6 +2679,7 @@ __gnat_portable_wait (int *process_status) > >pid = win32_wait (); > > +#elif defined (__DJGPP__) > #else You can't add an empty #elif without explaining it with a proper comment. Arno
Re: [PATCH 4/4][Ada,DJGPP] Ada support for DJGPP
On 07/30/2016 08:47 AM, Andris Pavenis wrote: This last patch (4/4) contains DJGPP related changes to adaint.c (except one which belongs to patch 1/4). ChangeLog entry: 2016-07-30 Andris Pavenis* ada/adaint.c: Include process.h, signal.h, dir.h and utime.h for DJGPP. (DIR_SEPARATOR) define to '\\' for DJGPP. (__gnat_get_maximum_file_name_length): decide return value depending on availability of LFN for DJGPP (__gnat_get_file_names_case_sensitive): return 0 for DJGPP unless overriden in environment (__gnat_get_default_identifier_character_set): return '1' for DJGPP (__gnat_is_absolute_path): Support MS-DOS style absolute paths for DJGPP. (__gnat_portable_spawn): Use spewnvp for DJGPP. (__gnat_portable_no_block_spawn): Use spawnvp for DJGPP. (__gnat_portable_wait): Return 0 for DJGPP. New revision of patch is in the attachment. Only 1 additional change: include ctype.h and define ISALPHA to isalpha for DJGPP when IN_RTS is defined. Updated ChangeLog entry is in the attachment. Andris >From 7d102a4d4d5d31d8225e69c3e53f3d4a234515ba Mon Sep 17 00:00:00 2001 From: Andris Pavenis Date: Sat, 3 Sep 2016 08:20:14 +0300 Subject: [PATCH 4/4] [DJGPP, Ada] Ada support * ada/adaint.c: Include process.h, signal.h, dir.h and utime.h for DJGPP. ISALPHA: include and define to isalpha for DJGPP when IN_RTS is defined. (DIR_SEPARATOR) define to '\\' for DJGPP. (__gnat_get_maximum_file_name_length): decide return value depending on availability of LFN for DJGPP (__gnat_get_file_names_case_sensitive): return 0 for DJGPP unless overriden in environment (__gnat_get_default_identifier_character_set): return '1' for DJGPP (__gnat_is_absolute_path): Support MS-DOS style absolute paths for DJGPP. (__gnat_portable_spawn): Use spewnvp for DJGPP. (__gnat_portable_no_block_spawn): Use spawnvp for DJGPP. (__gnat_portable_wait): Return 0 for DJGPP. Signed-off-by: Andris Pavenis --- gcc/ada/adaint.c | 45 ++--- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c index f317865..23fca5d 100644 --- a/gcc/ada/adaint.c +++ b/gcc/ada/adaint.c @@ -112,7 +112,18 @@ extern "C" { #endif -#if defined (__MINGW32__) || defined (__CYGWIN__) +#if defined (__DJGPP__) + +/* For isalpha-like tests in the compiler, we're expected to resort to + safe-ctype.h/ISALPHA. This isn't available for the runtime library + build, so we fallback on ctype.h/isalpha there. */ + +#ifdef IN_RTS +#include +#define ISALPHA isalpha +#endif + +#elif defined (__MINGW32__) || defined (__CYGWIN__) #include "mingw32.h" @@ -165,11 +176,16 @@ UINT CurrentCCSEncoding; #include #endif -#if defined (_WIN32) - +#if defined (__DJGPP__) #include #include #include +#include +#undef DIR_SEPARATOR +#define DIR_SEPARATOR '\\' + +#elif defined (_WIN32) + #include #include #include @@ -538,7 +554,11 @@ __gnat_try_lock (char *dir, char *file) int __gnat_get_maximum_file_name_length (void) { +#if defined (__DJGPP__) + return (_use_lfn(".")) ? -1 : 8; +#else return -1; +#endif } /* Return nonzero if file names are case sensitive. */ @@ -560,7 +580,7 @@ __gnat_get_file_names_case_sensitive (void) { /* By default, we suppose filesystems aren't case sensitive on Windows and Darwin (but they are on arm-darwin). */ -#if defined (WINNT) \ +#if defined (WINNT) || defined (__DJGPP__) \ || (defined (__APPLE__) && !(defined (__arm__) || defined (__arm64__))) file_names_case_sensitive_cache = 0; #else @@ -576,7 +596,7 @@ __gnat_get_file_names_case_sensitive (void) int __gnat_get_env_vars_case_sensitive (void) { -#if defined (WINNT) +#if defined (WINNT) || defined (__DJGPP__) return 0; #else return 1; @@ -586,7 +606,11 @@ __gnat_get_env_vars_case_sensitive (void) char __gnat_get_default_identifier_character_set (void) { +#if defined (__DJGPP__) + return 'p'; +#else return '1'; +#endif } /* Return the current working directory. */ @@ -1646,7 +1670,7 @@ __gnat_is_absolute_path (char *name, int length) #else return (length != 0) && (*name == '/' || *name == DIR_SEPARATOR -#if defined (WINNT) +#if defined (WINNT) || defined(__DJGPP__) || (length > 1 && ISALPHA (name[0]) && name[1] == ':') #endif ); @@ -2234,7 +2258,7 @@ __gnat_portable_spawn (char *args[] ATTRIBUTE_UNUSED) #if defined (__vxworks) || defined(__PikeOS__) return -1; -#elif defined (_WIN32) +#elif defined (__DJGPP__) || defined (_WIN32) /* args[0] must be quotes as it could contain a full pathname with spaces */ char *args_0 = args[0]; args[0] = (char *)xmalloc (strlen (args_0) + 3); @@ -2606,6 +2630,12 @@ __gnat_portable_no_block_spawn (char *args[] ATTRIBUTE_UNUSED) /* Not supported. */ return -1; +#elif defined(__DJGPP__) + if (spawnvp (P_WAIT, args[0], args) != 0) +return -1; + else +return