Release Notes for Critical Mass Modula-3 5.2.6 ---------------------------------------------- CM3 5.2.6 features a new target platform for Linux on PowerPCs, an updated code generator based on gcc 3.2.3, and several bug fixes and minor improvements. The originally intended support for NT386GNU does not work yet due to problems with the code generator for the Cygwin emulation and has been postponed till a later release. Changes since 5.2.4 ------------------- o New target platform PPC_LINUX: Linux running on PowerPC CM3 now supports another operating system on PPC hardware. Cross-compilation and a complete source build have been performed on the following system: Linux spyro 2.4.21-ben1 #3 Mon Jun 16 23:37:01 EDT 2003 ppc 7455, altivec supported GNU/Linux The gcc-based code generator is configured for powerpc-apple-linuxelf. o Import of gcc 3.2.2 and gcc 3.2.3 as base for cm3cg: The CM3 code generator for POSIX platforms is now based on gcc 3.2.3, which should provide some bug fixes and better support for cross-compilation. The import of gcc 3.3 into CM3 is pending. o Fixes for the errno problem in all Unix interfaces: errno must not be a variable since that is not guaranteed by POSIX; CM3 now uses a short piece of C code to interface to errno. The effect is that CM3 now should run again with all recent versions of the GNU C library. o Fix for process environment handling on WIN32 platforms: It seems that in recent Windows releases the representation of the environment passed to every program in main has changed from a flat, traditional NT style to a standard POSIX pointer array. This of course breaks some code accessing the environment variables. As I don't know about any criterium to decide which format to expect, I've again used an environment setting to choose between the two and made the POSIX behaviour default: USE_FLAT_ENV=yes|true|1 will enable the old behaviour. o Fix for Trestle keyboard input on WIN32 platforms: Make the interpretation of WM_CHAR events in Trestle depend on the value of the environment variable USE_EVENT_WM_CHAR. Heeding WM_CHAR events seems superflous to me and leeds to double input characters on my Windows 2000 installation, but has been included in the code forever, so I am unwilling to remove the feature without further evidence. Instead, users can set USE_EVENT_WM_CHAR in the environment if they experience problems for the next time. The default now is to ignore WM_CHAR events. o Merge-in of NT386GNU platform from PM3 (still dysfunctional) The code for target platform NT386GNU, which supports M3 based on the Cygwin POSIX emulation for Windows, has been merged into CM3. Unfortunately, I haven't yet been able to successfully cross-compile for this platform, nor have I been able to build a working code generator (cm3cg) on Cygwin yet. Work will continue for this platform. o Fixes and improvements for MachineIDPosix: Rewrite fragile MachineId.CanGet in C. o Fix the bug reported by Jay Krell about accidental creation of circular symbolic links when the builder runs repeatedly without m3makefile. This was caused by incorporating the files found in the *derived* directory into the generated m3makefile. The builder now explicitly checks for this special case. (This was version 5.2.5 of the compiler). o Use of stack walker disabled for all CM3 platforms by default: add override M3_USE_STACK_WALKER = FALSE to all currently active platforms using stack walkers, thus turning off jump table generation which newer gccs don't like. Conditionally compile stack walker code for exception handling in the libraries depending on M3_USE_STACK_WALKER (only if this variable is defined and TRUE). o Added support for UDP module on WIN32. o Add import of comctl32.lib for builds on the NT386 platform. o Fix shipping on WIN32 platforms (broken by PPC_DARWIN optimization): Preserving file modification times does not work under WIN32 for unknown reasons. As it completely breaks shipping, I've ignored any exceptions raised by trying to change permissions for the time being. If anybody feels an urge to analyse this failure and remove the TRY ... EXCEPT ELSE END statements or implement some proper exception handling, this would of course be very appreciated. But I'd doubt that this can be done in a operating system independent way... o Quake extensions/fixes: Improve evaluation of environment variables for temporary directory, shell, and shell command option; add QUAKE_SHELL QUAKE_SHELL_OPTION QUAKE_TMPDIR to override everything from the process environment. o Add -trace option to cm3 for quake tracing. o Fix for m3bundle: avoid segmentation violation when run without proper arguments. o Several fixes for the cross-compilation and bootstrapping scripts made during the PPC_LINUX porting. o Update porting information in www/porting.html. Bug Reports ----------- As always, bug reports should be send to the GNATS database at elego Software Solutions GmbH (bugs@elego.de). The web pages at www.elegosoft.com offer a nice interface for this. Other Resources --------------- Since January two mailing lists for the development of Modula-3 exist: m3devel@elegosoft.com and m3commit@elegosoft.com. The first is for discussions about planned CM3 and PM3 development and general Modula-3 topics, the second distributes the commit log messages of the CM3 and PM3 repositories via e-mail. You can read archives of these lists at http://mailarchive.elegosoft.com/Zope/m3/m3devel http://mailarchive.elegosoft.com/Zope/m3/m3commit If you want to subscribe to these lists, send mail to wagner@elegosoft.com. www.elegosoft.com also provides the complete CVS repositories, distribution archives, documentation, and various download facilities (CVS, CVSup, FTP, HTTP) for CM3 and PM3. Acknowledgments --------------- Mike Frysinger set up one of his PowerPC machines running Linux for me to use for the PPC_LINUX port. John Polstra contributed the code to fix the errno problems in the Unix interfaces. Anthony Hosking applied all the errno fixes to cm3, and contributed several fixes of his own and a rewrite of the fragile MachineId.CanGet in C. Darko Volaric added support for the UDP on WIN32 platforms. Many people from the m3devel mailing list helped with discussing and analyzing bugs and problems I found in the m3 and gcc code. All mistakes and oversights should probably be blamed on Olaf Wagner (that's me :-)