From: Juan Manuel Guerrero Date: Wed, 13 Feb 2002 16:13:31 +0000 (+0000) Subject: DJGPP support added X-Git-Tag: BISON-1_33a~12 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/cc20bc31666ee02db39906ef4c976539fb7f5e04 DJGPP support added --- diff --git a/ChangeLog b/ChangeLog index ca37ec81..e76bc287 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,31 @@ +2002-02-13 Guerrero, Juan Manuel + + * doc/bison.texinfo: Add DJGPP specific information about + file name extensions used on different file systems. + + * src/files.c (output_files): MSDOS conditional removed. + New macro EXT_TYPE will provide at runtime the appropiate + output file extension. + (skeleton_find) [MSDOS]: __DJGPP__ conditional added to + inhibit the use of DOSish code. POSIX like behaviour. + + * src/getargs.c [AS_FILE_NAME]: __DJGPP__ conditional added. + Check at runtime if LFN-API (case preserving) is available or not. + Do not unconditionly convert upper case strings in lower case strings. + + * src/system.h [MSDOS] [__GO32__]: __DJGPP__ conditional added. + __GO32__ is obsolete and its use is deprecated. + [MSDOS]: __DJGPP__ conditional added. Use pathconf + to choose POSIX or DOS file extensions at run time. + [MSDOS] [__DJGPP__]: New macro EXT_TYPE. If LFN-API is + available, the src or header file extension (.c or .h) will be + added to the output file name. If no LFN-API is available no src + or header file extension will be added to the output file name. + [MSDOS] [!__DJGPP__]: New macro EXT_TYPE. Src file and header + file extension will never be added to the output file name. + [!MSDOS]: New macro EXT_TYPE. Src file and header file + extensions will always be added to the output file name. + 2002-02-11 Akim Demaille * tests/regression.at (%nonassoc and eof): Don't include non diff --git a/NEWS b/NEWS index ae887979..809aa0a7 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,8 @@ Bison News Changes in version 1.33a: +* DJGPP support added. + * Fix portability problems within the test suite. Changes in version 1.33, 2002-02-07: diff --git a/doc/bison.texinfo b/doc/bison.texinfo index 2e5fefa7..7f8fbed7 100644 --- a/doc/bison.texinfo +++ b/doc/bison.texinfo @@ -304,6 +304,8 @@ Invoking Bison * Bison Options:: All the options described in detail, in alphabetical order by short options. * Option Cross Key:: Alphabetical list of long options. +* Extension Limitations Under DOS:: Bison output files extension differences + depending on the DOS/Windows file system flavour used. * VMS Invocation:: Bison command syntax on VMS. Copying This Manual @@ -5047,6 +5049,8 @@ will produce @file{output.c++} and @file{outfile.h++}. in alphabetical order by short options. * Environment Variables:: Variables which affect Bison execution. * Option Cross Key:: Alphabetical list of long options. +* Extension Limitations Under DOS:: Bison output files extension differences + depending on the DOS/Windows file system flavour used. * VMS Invocation:: Bison command syntax on VMS. @end menu @@ -5244,6 +5248,39 @@ the corresponding short option. @end example @end ifinfo +@node Extension Limitations Under DOS +@section Extension Limitations under DOS +@cindex extension limitations under DOS +@cindex DOS + +On DOS/Windows 9X systems the file name extensions of the output files, +like @file{.tab.c}, that may be used depend on the file system in use. +The plain DOS file system has limited file name length, does not allow +the use of a set of certain illicit characters and does not allow more +than a single dot in the file name. + +The DJGPP port of @code{bison} will detect at runtime if (LFN) long file name +support is available or not. LFN support will be available in a DOS session +under Windows 9X and successors. Windows NT 4.0 needs a special LFN driver +(@file(ntlfn08b.zip) or later available at any simtelnet mirror in the /v2misc +dir) for proper LFN support in a DOS session. If LFN support is available the +DJGPP port of @code{bison} will use the standard POSIX file name extensions +of the output files. If LFN support is not available, then the DJGPP port +of @code{bison} will use DOS specific file name extensions. + +@noindent This table summarizes the used extensions: + +@multitable @columnfractions 0.1 0.45 0.45 +@item @tab LFN extension (Win9X) @tab SFN extension (plain DOS) +@item @tab @file{.tab.c} @tab @file{_tab.c} +@item @tab @file{.tab.h} @tab @file{_tab.h} +@item @tab @file{.tab.cpp} @tab @file{_tab.cpp} +@item @tab @file{.tab.hpp} @tab @file{_tab.hpp} +@item @tab @file{.output} @tab @file{.out} +@item @tab @file{.stype.h} @tab @file{.sth} +@item @tab @file{.guard.c} @tab @file{.guc} +@end multitable + @node VMS Invocation @section Invoking Bison under VMS @cindex invoking Bison under VMS diff --git a/src/files.c b/src/files.c index a0cd6622..83c863ff 100644 --- a/src/files.c +++ b/src/files.c @@ -214,7 +214,7 @@ skeleton_find (const char *envvar, const char *skeleton_name) { const char *res = getenv (envvar); -#if defined (MSDOS) || defined (_WIN32) +#if (defined (MSDOS) && !defined(__DJGPP__)) || defined (_WIN32) const char *cp = getenv ("INIT"); if (!res) { @@ -249,7 +249,7 @@ skeleton_find (const char *envvar, const char *skeleton_name) strcpy (res + (cp - program_name), skel_name); } } -#endif /* defined (MSDOS) || defined (_WIN32) */ +#endif /* (defined (MSDOS) && !defined (__DJGPP__)) || defined (_WIN32) */ if (!res) res = skeleton_name; @@ -452,9 +452,7 @@ compute_output_file_names (void) spec_verbose_file = stringappend (short_base_name, EXT_OUTPUT); attrsfile = stringappend (short_base_name, EXT_STYPE_H); -#ifndef MSDOS - attrsfile = stringappend (attrsfile, header_extension); -#endif /* MSDOS */ + attrsfile = stringappend (attrsfile, EXT_TYPE (header_extension)); } @@ -523,9 +521,7 @@ output_files (void) obstack_save (&attrs_obstack, attrsfile); obstack_free (&attrs_obstack, NULL); temp_name = stringappend (short_base_name, EXT_GUARD_C); -#ifndef MSDOS - temp_name = stringappend (temp_name, src_extension); -#endif /* MSDOS */ + temp_name = stringappend (temp_name, EXT_TYPE (src_extension)); obstack_save (&guard_obstack, temp_name); obstack_free (&guard_obstack, NULL); } diff --git a/src/getargs.c b/src/getargs.c index 4d1cb1ac..02cfb845 100644 --- a/src/getargs.c +++ b/src/getargs.c @@ -160,10 +160,15 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ | Process the options. | `----------------------*/ -/* Under DOS, there is no difference on the case. This can be +/* Under plain DOS, there is no difference on the case. This can be troublesome when looking for `.tab' etc. */ #ifdef MSDOS -# define AS_FILE_NAME(File) (strlwr (File), (File)) +# if defined (__DJGPP__) +/* Windows 9X and successors are case sensitive. */ +# define AS_FILE_NAME(File) ((pathconf ((File), _PC_NAME_MAX) > 12) ? (File) : (strlwr (File), (File))) +# else +# define AS_FILE_NAME(File) (strlwr (File), (File)) +# endif #else # define AS_FILE_NAME(File) (File) #endif diff --git a/src/system.h b/src/system.h index 8d480333..65a61c27 100644 --- a/src/system.h +++ b/src/system.h @@ -239,7 +239,7 @@ do { \ # define MINSHORT -32768 #endif -#if defined (MSDOS) && !defined (__GO32__) +#if defined (MSDOS) && !defined (__GO32__) && !defined (__DJGPP__) # define BITS_PER_WORD 16 # define MAXTABLE 16383 #else @@ -261,19 +261,31 @@ do { \ # define EXT_OUTPUT ".output" # define EXT_STYPE_H "_stype" # define EXT_GUARD_C "_guard" +# define EXT_TYPE(ext) (ext) #else /* ! VMS */ # ifdef MSDOS - /* MS DOS. */ -# define EXT_TAB "_tab" -# define EXT_OUTPUT ".out" -# define EXT_STYPE_H ".sth" -# define EXT_GUARD_C ".guc" +# if defined (__DJGPP__) + /* DJGPP */ +# define EXT_TAB ((pathconf (NULL, _PC_NAME_MAX) > 12) ? ".tab" : "_tab") +# define EXT_OUTPUT ((pathconf (NULL, _PC_NAME_MAX) > 12) ? ".output" : ".out") +# define EXT_STYPE_H ((pathconf (NULL, _PC_NAME_MAX) > 12) ? ".stype" : ".sth") +# define EXT_GUARD_C ((pathconf (NULL, _PC_NAME_MAX) > 12) ? ".guard" : ".guc") +# define EXT_TYPE(ext) ((pathconf (NULL, _PC_NAME_MAX) > 12) ? (ext) : "") +# else /* ! __DJGPP__ */ + /* MS DOS. */ +# define EXT_TAB "_tab" +# define EXT_OUTPUT ".out" +# define EXT_STYPE_H ".sth" +# define EXT_GUARD_C ".guc" +# define EXT_TYPE(ext) "" +# endif # else /* ! MSDOS */ /* Standard. */ # define EXT_TAB ".tab" # define EXT_OUTPUT ".output" # define EXT_STYPE_H ".stype" # define EXT_GUARD_C ".guard" +# define EXT_TYPE(ext) (ext) # endif /* ! MSDOS */ #endif /* ! VMS */