%% /usr/local/src/lcc/lcc-4.1.beta.8/NEWS, Fri Apr 13 12:35:50 2001
%% Edit by Nelson H. F. Beebe <beebe@math.utah.edu>

This distribution of lcc-4.1.beta.8 includes the new features listed
below: see the companion ChangeLog file for details on how they were
actually implemented.

************************************************************************
************************************************************************
** Except for a handful of files in src/* with minor changes for bug  **
** fixes, or new command-line option support, almost all of the	      **
** changes have been restricted to the platform-DEPENDENT part of     **
** lcc.  Thus, the lcc book remains the definitive reference (though  **
** for lcc 3.x, not 4.x), and the changes for this release should be  **
** considered primarily a REPACKAGING of lcc.			      **
************************************************************************
************************************************************************

* Incorporate all updates to lcc-4.1 posted at the lcc Web site,

	http://www.cs.princeton.edu/software/lcc/

  including a new patch to src/tree.c received from the lcc developers
  in email of Tue, 27 Mar 2001 14:44:14 -0800 to remove a bogus
  warning message (the generated code was correct).

* All changes to the distribution, relative to lcc-4.1, are under
  revision control (GNU RCS), making it easy to study the history of
  changes to any particular file(s).

* Add support for automatic configuration using the GNU autoconf
  package: builds, tests, and installs can now be done all supported
  platforms with this one-liner:

  	./configure && make all check install

  This is an ENORMOUS improvement over the old manual procedure: a
  build and installation on some systems now takes less than 10
  seconds, and greatly facilitates porting and testing activity.  The
  "make check" target cascades into many subtargets, any of which can
  be invoked alone; this greatly facilitates, and speeds up, testing
  of code generation for a particular platform, or architecture
  family.

  The "make check" runs produce a very clear progress report, and
  automatically skip tests that cannot be done (e.g., because there is
  no code generator yet for the current platform, or because a
  previous requisite test failed).

  If you use GNU make, try "make -s check" to eliminate the
  entering/leaving directory messages that clutter the output.

  The "make check" output is now brief by default, to reduce clutter
  and make it easier to spot problems.  You can obtain the old
  verbose behavior by setting the VERBOSE environment variable to a
  nonempty string, e.g., "env VERBOSE=yes make check".

  All of the conventional GNU standard make targets are provided,
  notably, "all", "check", "clean", "mostlyclean", "distclean",
  "install", and "uninstall".

  The developer has used these eleven systems for testing

		Apple Macintosh PPC G3	Rhapsody 5.6
		Compaq/DEC Alpha	OSF/1 4.0F
		HP 9000/712		HP-UX 10.20
		HP/Intel IA-64		emulated on GNU/Linux 2.2.17-14smp (Red Hat 6.2)
		IBM PowerPC		AIX 4.2
		Intel Pentium II	FreeBSD 4.1.1
		Intel Pentium III	GNU/Linux 2.2.17-14smp (Red Hat 6.2)
		Power Macintosh 233MHz	GNU/Linux 2.2.15pre9
		SGI Origin 200		IRIX 6.5
		Sun SPARC		GNU/Linux 2.2.17-14 (Red Hat 6.2)
		Sun SPARC		Solaris 2.7

  It is expected that only minor changes (apart from the code
  generator issue [see below]) will be required to support any new
  platforms.  Examples include BeOS, OpenBSD, NetBSD, Plan9, ...

* Builds can be done in a tree separate from the distribution tree,
  allowing the latter to reside in a read-only file system, e.g., a
  CD-ROM.  This turns out to be exceedingly convenient in development,
  since builds for many different platforms can be simultaneously in
  progress from a common network-accessible lcc distribution tree.

  Temporary experiments in compiler and configuration options can
  easily be made without having to touch any of the original files.

  Importantly, as new features are introduced, or bug fixes applied,
  they can be immediately tested on all available platforms, giving
  confidence that changes have not introduced new problems that might
  not be discovered until much later, when it would be a lot harder to
  isolate the cause of the problems.

* The system-interface files in etc/* have been completely reorganized
  and standardized, and made amenable to autoconfiguration: no more
  hand editing at end-user sites!

* Fix (rare) bugs in handling of signedness for char, and size of
  wchar_t.

* Fix bad generation of large negative constants in assembly-code byte
  and halfword initializers. [These get truncated to the correct bits,
  so the code was `correct', but still produced assembler warnings.]

* Fix bug in assembly-code generation of floating-point instructions
  on x86 architecture [the assemblers detected this and fix it with a
  warning, so the old code worked `correctly'.]

* Enhance cpp to give better diagnostic for unclosed conditional
  block, increase internal limits to match the largest of the
  C89/C90, C99, and C++98 ISO Standards, and patch bug discovered and
  reported on 10-Mar-2001, wherein #defined (instead of correct
  #define) confused #if/#endif processing.  Also, make -M option
  suppress normal prepocessor output, and extend lcc to support the -M
  option so that "lcc -M *.c >> Makefile" can be used to generate
  dependencies.

* Improve UNIX manual pages for lcc, and write new manual pages for
  cpp and rcc.

* Add interface to GNU assembler on sparc/linux platform to provide a
  workaround for the inability of that assembler to recognize and
  expand the ld2 and st2 pseudo-ops produced in .s files.

* Add new compilation and/or linking options and environment variables:
	-Wo-as=xxx	(LCCAS)
	-Wo-cpp=xxx	(LCCCPP)
	-Wo-ld=xxx	(LCCLD)		[previously implemented, but undocumented]
	-Wo-rcc=xxx	(LCCRCC)
	-copyright
	-dynamic
	-static
	-version

  In addition, GNU/POSIX style --option is recognized as equivalent to
  -option, so now you can do "emacs --version", "gcc --version", "lcc
  --version", ...

* Avoid producing empty .s files with -Wf-target=null, and avoid
  uselessly calling the assembler for -Wf-target values that cannot be
  assembled by native assembler on the current host.

* Add support for several new hosts and -Wf=target options: the
  complete list is now:

	alpha/linux	Compaq/DEC Alpha, GNU/Linux
	alpha/osf	Compaq/DEC Alpha, OSF/1 3.2, 4.x
	mips/irix	big-endian MIPS Rx000, IRIX 5.x, 6.x
	mips/linux	big-endian MIPS Rx000, GNU/Linux
	mips/ultrix	little-endian MIPS Rx000, ULTRIX 4.3
	null      	no output
	sparc/linux	Sun SPARC, GNU/Linux
	sparc/solaris	Sun SPARC, Solaris 2.x
	sparc/sun	Sun SPARC, SunOS 4.x
	symbolic	text rendition of the generated code
	symbolic/osf	text rendition of the generated code for Compaq/DEC OSF/1
	symbolic/irix	text rendition of the generated code for SGI IRIX
	x86/freebsd	Intel x86, FreeBSD
	x86/linux	Intel x86, GNU/Linux
	x86/solaris	Intel x86, Sun Solaris 2.x
	x86/win32	Intel x86, Windows NT 4.0/Windows 95/98/2000

	ia64/freebsd	HP/Intel IA-64, FreeBSD
	ia64/linux	HP/Intel IA-64, GNU/Linux
	ia64/win32	HP/Intel IA-64, Windows NT 4.0/Windows 95/98/2000
	ia64/win64	HP/Intel IA-64, Windows-64
	parisc/hpux	HP PA-RISC, HP-UX 10.x, 11.x
	parisc/linux	HP PA-RISC, GNU/Linux
	ppc/aix   	PowerPC, IBM AIX 4.x
	ppc/linux	PowerPC, GNU/Linux
	ppc/macosx	PowerPC, Mac OS X (Darwin, Rhapsody)

  However, code generators are still lacking for ia64, parisc, and
  ppc, so on those platforms, lcc can function only as a
  cross-assembler and syntax checker, and as a linker of .o files
  produced by other C compilers.  Some of these are not available to
  the current developer, and thus, still require further testing
  (volunteers needed!).

* On FreeBSD, the FILE* struct in stdio.h contains an element,
  _offset, of type long long, which lcc currently treats as long. In an
  lcc-private copy of that file, the type of that element (_offset)
  has been changed to long, and an extra dummy element inserted.  With
  that change, the entire validation suite now passes!  User programs
  that reference types fpos_t or off_t, or call lseek(), fseeko(), or
  ftello(), will almost certainly not work properly when compiled with
  lcc, until "long long" support is fully implemented.
