This is a port of GNU Bison @VERSION@ to MSDOS/DJGPP.

Copyright (C) 2005, 2006 Free Software Foundation, Inc.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.


1.:     DJGPP specific changes.
	=======================

	The DJGPP port of Bison offers LFN and SFN support depending on which
	OS it is running. If LFN support is available or not is determinated at
	run time.  If LFN support is available (DOS session under Win9X, Win2K,
	WinXP, etc.) the standard posix file name extensions will be used.
	These are: y.tab.c, y.tab.c++, y.tab.h, y.output, etc.  If only SFN
	support is available (plain DOS), then the standard MSDOS short file
	names will be used. These are: y_tab.c, y_tab.h, y.out, etc.
	It should be noticed that this bison version needs the m4 program as
	back end to generate the parser file (y.tab.c etc.) from the skeleton
	files.  This implies that m4 must always be installed to get bison
	working.  m4 will use a couple of m4 scripts that will be installed in
	/dev/env/DJDIR/share/bison and shall not be removed.
	It should also be noticed that the skeleton files bison.simple and
	bison.hairy are no longer supported.  This applies also to the environ-
	ment variables BISON_HAIRY and BISON_SIMPLE.  Those variables are *no*
	longer honored at all.
	The kind of skeleton file bison.hairy is no longer supported at all.
	The skeleton file bison.simple is now called yacc.c and is an m4 script.
	The other two skeleton files supported by this bison version are glr.c
	and lalr1.cc.  The first one is a generalized LR C parser based on
	Bison's LALR(1) tables and the second one is a experimental C++ parser
	class.
	As has been told before, bison uses m4 to generate the parser file.
	This is done by forking and using pipes for the IPC.  MSDOS does not
	support this functionality so this has been reproduced in the usual
	way by redirecting stdin and stdout of bison and m4 to temporary files
	and processing these files in sequence.  All the changes to the sources
	are documented in the djgpp/diffs file.

	Please **read** the docs.


2.:     Installing the binary package.
	==============================

2.1.:   Copy the binary distribution into the top DJGPP installation directory,
	just unzip it preserving the directory structure running *ONE* of the
	following commands:
	  unzip32 bsn@PACKAGE_VERSION@b.zip      or
	  djtarx bsn@PACKAGE_VERSION@b.zip       or
	  pkunzip -d bsn@PACKAGE_VERSION@b.zip



3.:     Building the binaries from sources.
	===================================

3.1.:   Create a temporary directory and copy the source package into the
	directory.  If you download the source distribution from one of the
	DJGPP sites, just unzip it preserving the directory structure
	running *ONE* of the following commands:
	  unzip32 bsn@PACKAGE_VERSION@s.zip      or
	  djtarx bsn@PACKAGE_VERSION@s.zip       or
	  pkunzip -d bsn@PACKAGE_VERSION@s.zip
	and proceed to the paragraph 3.3, below.

3.2.:   Source distributions downloaded from one of the GNU FTP sites need
	some more work to unpack, if LFN support is not available.  If LFN is
	available then you can extract the source files from the archive with
	any unzip program and proceed to the paragraph 3.3, below.  Any file
	name issue will be handled by the the DJGPP configuration files.
	To unpack the source distribution on SFN systems, first, you MUST use
	the `djunpack' batch file to unzip the package.  That is because some
	file names in the official distributions need to be changed to avoid
	problems on the various platforms supported by DJGPP.
	`djunpack' invokes the `djtar' program (that is part of the basic DJGPP
	development kit) to rename these files on the fly given a file with
	name mappings; the distribution includes a file `djgpp/fnchange.lst'
	with the necessary mappings.  So you need first to retrieve that batch
	file, and then invoke it to unpack the distribution.  Here's how:

	  djtar -x -p -o bison-@VERSION@/djgpp/djunpack.bat bison-@VERSION@.tar.gz > djunpack.bat
	  djunpack bison-@VERSION@.tar.gz

	(The name of the distribution archive and the leading directory of the
	path to `djunpack.bat' in the distribution will be different for
	versions of Bison other than @VERSION@.)

	If the argument to `djunpack.bat' include leading directories, it MUST
	be given with the DOS-style backslashes; Unix-style forward slashes
	will NOT work.

	If the distribution comes as a .tar.bz2 archive, and your version of
	`djtar' doesn't support bzip2 decompression, you need to unpack it as
	follows:

	  bnzip2 bison-@VERSION@.tar.bz2
	  djtar -x -p -o bison-@VERSION@/djgpp/djunpack.bat bison-@VERSION@.tar > djunpack.bat
	  djunpack bison-@VERSION@.tar

3.3.:   To build the binaries you will need the following binary packages:
	  djdev203.zip (or a later but NOT a prior version)
	  bsh204b.zip  (or a later but NOT a prior version)
	  gcc410b.zip, gpp410b.zip, bnu2161b.zip, mak3791b.zip,
	  fil40b.zip, shl20jb.zip, txt20b.zip,
	  txi48b.zip, grep24b.zip, sed415b.zip,
	  m4-144b.zip.

	If you want to run the check you will need also:
	  dif287b.zip

	All this packages can be found in the v2gnu directory of any
	ftp.delorie.com mirror.
	You will need bsh204b.zip or later and *NOT* a prior version or
	the build will fail.  The same applies to djdev203.zip.  Please note
	that Bison requires m4-144b.zip or later to work properly.  All the
	other packages are the ones I have used to build the binaries
	from this source.  Previuos versions of this packages may do the
	job as well but I have not tested this.

3.4.:   If for some reason you want to reconfigure the package cd into the top
	srcdir (bison-@TREE_VERSION@) and run the following commands:
	  del djgpp\config.cache
	  make clean
	  djgpp\config

	Please note that you *MUST* delete the config.cache file in the djgpp
	subdir or you will not really reconfigure the sources because the
	configuration informations will be read from the cache file instead
	of being newly computed.
	To build the programs in a directory other than where the sources are,
	you must add the parameter that specifies the source directory,
	e.g:
	  x:\src\gnu\bison-@TREE_VERSION@\djgpp\config x:/src/gnu/bison-@TREE_VERSION@

	Lets assume you want to build the binaries in a directory placed on a
	different drive (z:\build in this case) from where the sources are,
	then you will run the following commands:
	  z:
	  md \build
	  cd \build
	  x:\src\gnu\bison-@TREE_VERSION@\djgpp\config x:/src/gnu/bison-@TREE_VERSION@

	The order of the options and the srcdir option does not matter.  You
	*MUST* use forward slashes to specify the source directory.

	The batch file will set same environment variables, make MSDOS specific
	modifications to the Makefile.in's and supply all other needed options
	to the configure script.

3.5.:   To compile the package run from the top srcdir the command:
	  make

3.6.:   Now you can run the tests if you like.  From the top srcdir run the
	command:
	  make check

	No test should fail but the tests #131 (Doxygen Public Documentation)
	and #132 (Doxygen Private Documentation) will be skipped.  Please note
	that the testsuite only works with LFN available.  On plain DOS, most
	of the tests will fail due to invalid DOS names.

3.7.:   To install the binaries, header, library, catalogs, and info docs
	run the following command from the top srcdir:
	  make install

	This will install the products into your DJGPP installation tree given
	by the default prefix "/dev/env/DJDIR".  If you prefer to install them
	into some other directory you will have to set prefix to the appropiate
	value:
	  make install prefix=z:/some/other/place



	Send GNU bison specific bug reports to <bug-bison@gnu.org>.
	Send suggestions and bug reports concerning the DJGPP port to
	comp.os.msdos.djgpp or <djgpp@delorie.com>.


Enjoy.

	Guerrero, Juan Manuel <juan.guerrero@gmx.de>
