New features with AN-2020-04-18:

This is the first localization step for the schily source consolidation. Many
programs now (hopefully) call gettext() for all strings that need localization.

-	The next step will include dgettext() calls for the libraries and the
	missing programs

-	The following step will include the extracted strings

-	The last step will include German translations and install support
	for the resulting binary message object files.

----------> Please test and report compilation problems! <---------

***** NOTE: As mentioned since 2004, frontends to the tools should *****
*****		call all programs in the "C" locale		   *****
*****		by e.g. calling: LC_ALL=C cdrecord ....		   *****
*****		unless these frontends support localized strings   *****
*****		used by the cdrtools with NLS support.		   *****

		*** WARNING        ***
		*** Need new smake ***

	*** Due to the fact that schily-tools 2014-04-03 introduced to use new macro
	*** expansions and a related bug fix in smake, you need a newer smake
	*** to compile this source. If your smake is too old and aborts, ensure to
	*** use the recent smake by calling:

	cd ./psmake
	./MAKE-all
	cd ..
	psmake/smake
	psmake/smake install

	The new smake version mentioned above is smake-1.2.4
	The recent smake version is smake-1.3

	*** Due to the fact that schily-tools 2018-01-26 introduced
	*** optimizations for the Schily version of SunPro Make, you
	*** need at least the dmake version from 2018/01/11 with support
	*** for the "export" directive to compile with this makefile system.


	WARNING: the new version of the isoinfo program makes use of the 
		*at() series of functions that have been introduced by Sun
		in August 2001 and added to POSIX.1-2008. For older platforms,
		libschily now includes emulations for these functions but
		these emulations have not yet been tested thoroughly.
		Please report problems!

	BUG WARNING: Please never report bugs only to Linux distributions as
		they usually do not forward these bug reports upstream and as
		the Linux distributions typically do not let skilled people
		check the bugs. We did not hear about a FIFO problem in star
		for a long time. Then a problem on Linux occurred once
		every 6000-10000 tries but it did not happen on Solaris after
		even 10 million tries, so it was not known besides Linux.

	BUG WARNIG: GNU make release 4.3 starts too early with parallel
		execution (when reading Makefiles and evaluating rules for
		"include" statements already). Since GNU make does not
		support a concept for correct ordering of such actions,
		you need to be prepared to see gmake-4.3 fail in parallel
		mode. If you are interested in reliable parallel execution,
		it is recommended to use the included "dmake" program with
		a command line like:

			dmake -j10 -f SMakefile

		from the top level directory


-	Makefile system: Support for creating shared libraries on SGI IRIX
	has been added.

-	Makefile system: Support for RUNPATH in IRIX ELF binaries has been
	added.

-	Makefile system: Support for the new automake features in the SunPro
	Make program (see below) has been added to the makefile system. This
	helps to work around portability problems to systems like IRIX that
	have a buggy sed(1) command that fails with commands like:

	sed 'y%ABCDEFGHIJKLMNOPQRSTUVWXYZ, /\\()"%abcdefghijklmnopqrstuvwxyz,------%'

	because they incorrectly onl assume a single backslash in that command.

-	Makefile system: the IRIX compiler driver RULES/cc-sgi.rul has been
	reduced to one single file and RULES/cc-sgi32.rul RULES/cc-sgi64.rul
	are now symlinks to the file RULES/cc-sgi.rul

-	Makefile system: IRIX now supports explicit 32 bit compilation targets
	using:

		smake CCOM=cc32

-	Unit test suite: The "seq" emulation did write "seq not found" on IRIX
	because ksh88 on IRIX writes this text to stderr instead of using
	stdout (as expected). We now redirect stderr as well as stdout to
	suppress the message.

-	librmt: A few small enhancements have been added to the man pages.
	This was a result of a code review for SchilliX-ON by
	Eric Ackermann

-	smake: A new option -a has been added. This option allows to tell
	smake not to set up the automake specific make macros MAKE_ARCH,
	MAKE_OS and similar. The identifying macro MAKE_NAME=smake is still
	set up in order to allow to select the right make specific include
	rules.

-	smake: the file archconf.c has been modified to use a simplified
	interface in order to be able to use mostly identical code in 
	SunPro Make for ease of future maintenance.

-	SunPro Make: Support to automake features similar to smake
	has been added. SunPro Make now calls uname(2)/sysinfo(2) and sets
	up MAKE_* make macros with content from the uname/sysinfo information.
	This is implemented with the slightly modified archconf.c from
	smake (see above), where it is used since 1995.

-	SunPro Make: An option -a (similar to the new option -a in smake)
	has been added. Like in smake, the identifying macro MAKE_NAME=smake
	is still set up in order to allow to select the right make specific
	include rules. 

-	SunPro Make: IRIX has a definition for struct ranlib in <ar.h>
	that was in conflict with the definition from our ar.cc

-	SunPro make: IRIX includes netname2host() in libc, but it does
	not provide any prototype in the system include files. We now
	add an own prototype in pmake.cc to allow to use this 
	function in C++

-	SunPro Make: make did not forward the -r option to sub-make
	processes. This was definitely a bug as it caused unexpected results
	in the sub-make processes.

-	star: Several of the unit tests did assume that they are run in
	the MET timezone. So they worked in Berlin (the residence of the
	developer) but failed elsewhere. We now explicitely set TZ=MET in
	the unit tests order to allow to pass the tests anywhere on the
	world.

-	star: The unit tests port/lpath.sh did not work on IRIX because
	the "rm" command on IRIX is buggy and does not remove long path
	names (path names longer than PATH_MAX). We now use a recursive
	shell function to remove the long path.

-	star: The new shell function in port/lpath.sh did crash Linux in
	case that /bin/sh is "dash". "dash" is not POSIX compliant and
	fails to support arbitrary long working directory names. Whe therefore
	try to run the long path removal with "bosh", or at least "bash".
	Only if none of both is present, we fall back to the system default
	shell "/bin/sh".

-	SCCS: sccslog(1) did assume that errno != 0 is a hint for a problem
	with time conversions, but IRIX mktime() sets errno to a value != 0
	without returning -1 and without failing.

-	SCCS: Added a new sccs get unit test for excluded releases taken from
	a CSSC bug report from Øyvind Gjerstad

-	SCCS: Added %Z% to the file content for some tests to avoid the
	"No id keywords" warning

-	Bourne Shell: IRIX has ls(1) installed as /sbin/ls and this caused
	some of our unit tests to fail. We now only check for "bin/ls" and
	no longer for "/bin/ls" in "type" return messages.

-	Bourne Shell/bsh: signames.c has been modified to work correctly if the
	number of statically defined realtime signals is odd. This applies to
	NetBSD and caused the shells to miss RTMIN+15 on NetBSD.

	Thanks to Robert Elz for reporting

-	Bourne Shell: A new trap code "ERR" as been introduced. This is modeled
	after a feature from ksh88. "trap cmd ERR" causes "cmd" to be called
	whenever a command causes a non-zero exit code. The "cmd" is not called
	in case that with "set -e" the shell would not exit.

	This is not required by POSIX but helpful.

-	Bourne Shell: A new set of unit tests for the ERR trap has been added.

-	Bourne Shell: An attempt to fix the POSIX behavior for set -e from
	October 2018 has been identified to be wrong. If we kept that change,
	a list with "set -e; ..." and a failing command would not exit as
	expected.

-	Bourne Shell: A new piece of code has been added to handle set -e
	for function calls.

-	Bourne Shell: The man page now better explains the behavior, if in
	set -e mode.

-	Bourne Shell: print.c::prs_cntl() could cause a buffer overflow with
	"unprintable" multi byte UNICODE characters that are printed as list
	of octal escape sequences. the buffer overflow happened because there
	was only redzone space for one such octal escape sequence.

	Thanks to Heiko Eißfeldt for reporting


-	SCCS TODO:

	-	Convert sccs.c to use -NSCCS in the back end programs instead
		of converting g-file names from the command line into s.file
		names in the frontend in order to forward s.file names to the
		backend programs. Doing it this way allows us to have the SCCS
		history files "off tree" in a separate directory tree starting
		with ".sccs/" at the "project root" directory, as the related
		code to convert path names is in libcomobj::bulkprepare().

	-	Add code to admin(1) and delta(1) to retrieve the list of
		new or modified files in order to have all important code
		for a "sccs commit" in a single program that does not need to
		deal with ARG_MAX limitations.

	-	Add code to admin(1), delta(1) and get(1) to maintain/understand
		the changeset file.

	-	Add code to libcomobj to understand the changeset file,
		which is needed in order to e.g. know the file names and file
		specific SIDs/state that correspond to a project global SID.

	-	Add code to all programs to maintain a lock (for the file
		$PROJECTHOME/.sccs/SCCS/s.changeset, that would be in the file
		$PROJECTHOME/.sccs/SCCS/z.changeset) to maintain a project
		global lock.

	-	Find/verify a complete transactional model that allows to repair
		complex changes to the set of files for a project that have
		been aborted in the middle. The current idea is to create the
		file $PROJECTHOME/.sccs/changeset with the deltas to the
		changeset during a complex update operation.

	-	Find a way to decide when to use SCCS v6 type history files.

		For the project mode, this is needed in order to prevent 
		historic SCCS implementations to believe they could modify
		files without knowing about project global locks.

		Currently, SCCS V67 needs to be anebale manually for every
		history file using "admin".





-	Bourne Shell Missing features for POSIX compliance:

	- Support for $'...' quoting (this is not needed for the current
					version of POSIX but for the next POSIX
					version that will be named SUSv8).
					The development of SUSv8 will start in
					late 2016.

	We are now expecting the Bourne Shell to be fully POSIX compliant.

-	Bourne Shell further TODO list:

	-	Finish loadable builtin support.

	-	POSIX does not allow us to implement ". -h", so we will
		add a "source" builtin to be able to implement "source -h"

-	The following builtins (that are available in bsh) are still missing in
	the Bourne Shell:

	err			echo with output going to stderr
	glob			echo with '\0' instead of ' ' between args
	env			a builtin version of /usr/bin/env

	The following bsh intrinsics are still missing in the Bourne Shell:

	-			the restricted bsh has restriction features that
				are missing in the Bourne shell.

	-	source -h	read file into history but do not execute

	and probably more features not yet identified to be bsh unique.



Author:

Joerg Schilling
D-13353 Berlin
Germany

Email: 	joerg@schily.net, joerg.schilling@fokus.fraunhofer.de

Please mail bugs and suggestions to me.