]> git.saurik.com Git - bison.git/commitdiff
DJGPP support added
authorJuan Manuel Guerrero <juan.guerrero@gmx.de>
Wed, 13 Feb 2002 16:13:31 +0000 (16:13 +0000)
committerJuan Manuel Guerrero <juan.guerrero@gmx.de>
Wed, 13 Feb 2002 16:13:31 +0000 (16:13 +0000)
ChangeLog
NEWS
doc/bison.texinfo
src/files.c
src/getargs.c
src/system.h

index ca37ec813af18c0a5253266d277c06f0e5915f74..e76bc28768fe588e6479632e6652e4818eb7b2ad 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
 
        * tests/regression.at (%nonassoc and eof): Don't include non
diff --git a/NEWS b/NEWS
index ae8879792b1d95ed4fb7a526cc83356b3ab71bb9..809aa0a7d8e2cc305a9b4aff76db11b56a502158 100644 (file)
--- 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.
 \f
 Changes in version 1.33, 2002-02-07:
index 2e5fefa74cfea020e3c82b76b88f5cef73c7fdc3..7f8fbed7cb7a1568ed6ed5195ee809852093fe98 100644 (file)
@@ -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
index a0cd662279fa88438db5cbbf0b31fc582bafb231..83c863ffcaa9b1465a35d00706f2999cf58e713c 100644 (file)
@@ -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);
     }
index 4d1cb1acf94897177763c76293bca198dc09b311..02cfb845fbd40b467027716a16418b3354d0e321 100644 (file)
@@ -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
index 8d480333b61f45298cea700fd0bfece8cd5f5f4d..65a61c273acb4734e359b7c338a298afe44cf0e8 100644 (file)
@@ -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 */