DJGPP support added

This commit is contained in:
Juan Manuel Guerrero
2002-02-13 16:13:31 +00:00
parent 9cbe3c4878
commit cc20bc3166
6 changed files with 96 additions and 16 deletions

View File

@@ -1,3 +1,31 @@
2002-02-13 Guerrero, Juan Manuel <st001906@hrz1.hrz.tu-darmstadt.de>
* 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 <akim@epita.fr> 2002-02-11 Akim Demaille <akim@epita.fr>
* tests/regression.at (%nonassoc and eof): Don't include non * tests/regression.at (%nonassoc and eof): Don't include non

2
NEWS
View File

@@ -3,6 +3,8 @@ Bison News
Changes in version 1.33a: Changes in version 1.33a:
* DJGPP support added.
* Fix portability problems within the test suite. * Fix portability problems within the test suite.
Changes in version 1.33, 2002-02-07: Changes in version 1.33, 2002-02-07:

View File

@@ -304,6 +304,8 @@ Invoking Bison
* Bison Options:: All the options described in detail, * Bison Options:: All the options described in detail,
in alphabetical order by short options. in alphabetical order by short options.
* Option Cross Key:: Alphabetical list of long 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. * VMS Invocation:: Bison command syntax on VMS.
Copying This Manual Copying This Manual
@@ -5047,6 +5049,8 @@ will produce @file{output.c++} and @file{outfile.h++}.
in alphabetical order by short options. in alphabetical order by short options.
* Environment Variables:: Variables which affect Bison execution. * Environment Variables:: Variables which affect Bison execution.
* Option Cross Key:: Alphabetical list of long 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. * VMS Invocation:: Bison command syntax on VMS.
@end menu @end menu
@@ -5244,6 +5248,39 @@ the corresponding short option.
@end example @end example
@end ifinfo @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 @node VMS Invocation
@section Invoking Bison under VMS @section Invoking Bison under VMS
@cindex invoking Bison under VMS @cindex invoking Bison under VMS

View File

@@ -214,7 +214,7 @@ skeleton_find (const char *envvar, const char *skeleton_name)
{ {
const char *res = getenv (envvar); const char *res = getenv (envvar);
#if defined (MSDOS) || defined (_WIN32) #if (defined (MSDOS) && !defined(__DJGPP__)) || defined (_WIN32)
const char *cp = getenv ("INIT"); const char *cp = getenv ("INIT");
if (!res) if (!res)
{ {
@@ -249,7 +249,7 @@ skeleton_find (const char *envvar, const char *skeleton_name)
strcpy (res + (cp - program_name), skel_name); strcpy (res + (cp - program_name), skel_name);
} }
} }
#endif /* defined (MSDOS) || defined (_WIN32) */ #endif /* (defined (MSDOS) && !defined (__DJGPP__)) || defined (_WIN32) */
if (!res) if (!res)
res = skeleton_name; res = skeleton_name;
@@ -452,9 +452,7 @@ compute_output_file_names (void)
spec_verbose_file = stringappend (short_base_name, EXT_OUTPUT); spec_verbose_file = stringappend (short_base_name, EXT_OUTPUT);
attrsfile = stringappend (short_base_name, EXT_STYPE_H); attrsfile = stringappend (short_base_name, EXT_STYPE_H);
#ifndef MSDOS attrsfile = stringappend (attrsfile, EXT_TYPE (header_extension));
attrsfile = stringappend (attrsfile, header_extension);
#endif /* MSDOS */
} }
@@ -523,9 +521,7 @@ output_files (void)
obstack_save (&attrs_obstack, attrsfile); obstack_save (&attrs_obstack, attrsfile);
obstack_free (&attrs_obstack, NULL); obstack_free (&attrs_obstack, NULL);
temp_name = stringappend (short_base_name, EXT_GUARD_C); temp_name = stringappend (short_base_name, EXT_GUARD_C);
#ifndef MSDOS temp_name = stringappend (temp_name, EXT_TYPE (src_extension));
temp_name = stringappend (temp_name, src_extension);
#endif /* MSDOS */
obstack_save (&guard_obstack, temp_name); obstack_save (&guard_obstack, temp_name);
obstack_free (&guard_obstack, NULL); obstack_free (&guard_obstack, NULL);
} }

View File

@@ -160,10 +160,15 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
| Process the options. | | 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. */ troublesome when looking for `.tab' etc. */
#ifdef MSDOS #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 #else
# define AS_FILE_NAME(File) (File) # define AS_FILE_NAME(File) (File)
#endif #endif

View File

@@ -239,7 +239,7 @@ do { \
# define MINSHORT -32768 # define MINSHORT -32768
#endif #endif
#if defined (MSDOS) && !defined (__GO32__) #if defined (MSDOS) && !defined (__GO32__) && !defined (__DJGPP__)
# define BITS_PER_WORD 16 # define BITS_PER_WORD 16
# define MAXTABLE 16383 # define MAXTABLE 16383
#else #else
@@ -261,19 +261,31 @@ do { \
# define EXT_OUTPUT ".output" # define EXT_OUTPUT ".output"
# define EXT_STYPE_H "_stype" # define EXT_STYPE_H "_stype"
# define EXT_GUARD_C "_guard" # define EXT_GUARD_C "_guard"
# define EXT_TYPE(ext) (ext)
#else /* ! VMS */ #else /* ! VMS */
# ifdef MSDOS # ifdef MSDOS
/* MS DOS. */ # if defined (__DJGPP__)
# define EXT_TAB "_tab" /* DJGPP */
# define EXT_OUTPUT ".out" # define EXT_TAB ((pathconf (NULL, _PC_NAME_MAX) > 12) ? ".tab" : "_tab")
# define EXT_STYPE_H ".sth" # define EXT_OUTPUT ((pathconf (NULL, _PC_NAME_MAX) > 12) ? ".output" : ".out")
# define EXT_GUARD_C ".guc" # 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 */ # else /* ! MSDOS */
/* Standard. */ /* Standard. */
# define EXT_TAB ".tab" # define EXT_TAB ".tab"
# define EXT_OUTPUT ".output" # define EXT_OUTPUT ".output"
# define EXT_STYPE_H ".stype" # define EXT_STYPE_H ".stype"
# define EXT_GUARD_C ".guard" # define EXT_GUARD_C ".guard"
# define EXT_TYPE(ext) (ext)
# endif /* ! MSDOS */ # endif /* ! MSDOS */
#endif /* ! VMS */ #endif /* ! VMS */