New features with AN-2019-09-22: 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. - psmake: The portable bootstrap smake compilation environment added a new option "-shell path" to the shell script psmake/MAKE-sh in order to permit to use a different shell to run "configure". This helps to compile the boostrap smake binary on platforms where /bin/sh is a broken shell but another (working) shell is present. It may still be needed on Ultrix even though there are now work arounds for various shell bugs on Ultrix. - conf/cc-config.sh: All "eval" commands with I/O redirection need to be in a subshell in order to work with a V7 shell. This change was needed to support Ultrix. Thanks to Robert Clausecker for reporting - RULES: "configure" is now run by $SHELL instead of "sh". This allows to call: smake SHELL=path/to/shell with a shell that is able to correctly run configure in case that the default shell is buggy. Note that if you are on such a platform, you need to run MAKE-sh in the directory "psmake" by hand, using the right shell definition via the "-shell path" option. Thanks to Robert Clausecker for reporting - autoconf: Since 2011, we used eval echo .... in the macro AC_MSG_RESULT() in order to make looping over a group of tests easier. It now turned out that on Ultrix the shell is buggy and aborts eval echo foo 1>&6 with an "illegal io" message. In order to work around this problem, we had to expand the AC_MSG_RESULT() in the AC_CHECK_DFUNC() macro to be able to remove the "eval" call from AC_MSG_RESULT() in order to get the previous state. This even resulted in 5% performance win for "configure" as a side effect... Thanks to Robert Clausecker for reporting - autoconf: AC_TRY_EVAL() in former times did call "( eval echo ... )" in order to work around a problem in the UNIX V7 shell with I/O redirection for builtin commands. We removed the "( ... )" in March 2016, not knowing the reason why they have been used as we intendedto enhance the "configure" performance. In order to be able to again support the UNIX V7 shell, we now call { eval echo ... ;} since that allows I/O redirection for stdout in the UNIX V7 shell. Since modern shells do not create a sub-shell for this, it does not reduce performance with modern shells. The I/I redirection problem for builtin commands in the V7 shell is not present with "eval ... | command" and it can be circumvented with "{ eval ... ;} > ...", for stdout redirection, but with stdin redirection we definitely need "( eval cat ) < file". Thanks to Robert Clausecker for reporting - autoconf: The test AC_PROG_CPPX no longer uses the builtin type(1) but rather the old autoconf concept based on a shell for-loop since we like to support the V7 Bourne Shell. Thanks to Robert Clausecker for reporting - autoconf: A few other cases with "eval" I/O redirection have been modified to run in a subshell in order to support the UNIX V7 shell as well. Thanks to Robert Clausecker for reporting - conf/cc-config.sh: The "eval" calls are now inside () in order to create a sub-shell that is needed to support the V7 Bourne Shell. - autoconf: Ultrix has int8_t and similar definitions in unusual include files but not in inttypes.h. This tricks out the autoconfiguration tests and we cannot define these types for older platforms. We therfore made the definitions for int8_t and similar optional (using Int8_t in our code) in order to again support Ultrix. Thanks to Robert Clausecker for reporting - Makefile System: Added new configuration files for Ultrix in the directory RULES to support non automake aware make implementations line "gmake". - Makefile System: Added dummy "else" parts to "if" shell statements in the makefiles in the RULES directory in order to work around a bug in the UNIX V7 shell from 1982 used on Ultrix. The "else" part now contains the dummy command ":" that sets the exit code of the if statement to 0 if the condition was not taken. Thanks to Robert Clausecker for reporting - Makefile System: Modified the default system files temp-*cc*.rul to match the new concept for "mkdir -p" emulation. - include/schily: various include files have been modified to pass "cstyle" and "hdrchk" from the OpenSolaris build system in order to allow Schillix-ON integration. - include/schily/fetchdir.h: Added more comment. - include/schily/resource.h: Added an #include and moved the rlim_t definition out of the #ifndef RLIMIT_CPU block. This is needed for Ultrix where rlim_t is not a supported system defined type. Thanks to Robert Clausecker for reporting - include/schily/wait.h: The W*() macros on Ultrix do not work cuurectly and this is a result of an incorrect definition for union wait. The Ultrix kernel uses the right bits in the status, so we #undef USE_UNION_WAIT and all W*() macros from the Ultrix system include files. This causes that include/schily/wait.h #define's our working versions as a replacement. Thanks to Robert Clausecker for reporting - libschily/Targets: The indentation has been changed for an easier conversion to the OpenSolaris build system for Schillix-ON integration. - libschily/dirent.c changed uint32_t -> UInt32_t for more portability to older platforms like Ultrix. - libschily/gethostname.c changed uint32_t -> UInt32_t for more portability to older platforms like Ultrix. - libschily/kill.c changed uint32_t -> UInt32_t for more portability to older platforms like Ultrix. - libschily/uname.c changed uint32_t -> UInt32_t for more portability to older platforms line Ultrix. - libschily/format.c is now using ~(UIntptr_t)1 instead of just ~1 in order to make it work correctly for 64 bit systems. Thanks to Robert Clausecker for reporting - libschily/match.c: The pattern matcher had a problem with parsing patterns like '[[]' after adding support for the POSIX '[[:alpha:]]' and similar methods in August 2017. We now correctly handle the pattern in case that something starts with '[' but does not continue as "[:" and as a result does not seem to be something like '[[:alpha:]]' - libschily/match.c: A while() loop has been converted to a do ... while() loop in order to support the POSIX way of specifying "[]]" as a set that contains the character ']' wihtout the need to use "\]". - libschily/match.c: A bug introduced in March 2018 has been fixed by removing "if (ap->Ch != LCLASS) nextitem(ap);" from the parser. - libfind: A new interface function to the treewalk() function data called walknlen() has been introduced. It returns the length of the last pathname component without a need to call strlen(). This is used in order to be able to check in a performant way whether a pathname ends in slash(es). - libfind: The index pointer to the last pathname comonent was not initialized in case the name was a command line argument. This caused "find ./foo -name foo" not to match as expected. Thanks to Tavian Barnes for reporting. - libfind: We now call basename() with the last pathname component in order to to be able to correctly deal and match with command lines like: find ./foo/// -name foo basename() is used here to remove trailing slashes. - libfind: If we are in the optimized mode that avoids stat() calls, we are not allowed to avoid a stat() in case that the current file may be a symlink and we are told to follow symlinks. If we did avoid the stat() call as we did before, we would miss to follow symlinks that point to directories. This problem mainly happened on Linux, where struct dirent contains a d_type member. In this case, libfind made the false assymption that d_type (being a symlink) could not point to a directory. Thanks to Tavian Barnes for reporting. - libfind: schily/fcntl.h is always needed because we need AT_FDCWD that may be missing on older platforms. Thanks to Robert Clausecker for reporting - libfind: find_misc.h now includes schily/time.h since Ultrix is a historic UNIX that needs our definition of struct timespec since that definition is not in system include files. Thanks to Robert Clausecker for reporting - libfind: find_list.c Now using a #if defined(S_IFPORT) && S_IFPORT != S_IFIFO to work around a strange definition on Ultrix where S_IFPORT == S_IFIFO and where S_IFPORT is not a Solaris event port. Thanks to Robert Clausecker for reporting - cdda2wav/sndconfig.c changed uint32_t -> UInt32_t for better portability to older platforms like Ultrix. - patch: The order of arguments to the called "ed" command has been wrong when handling "ed type" patches. This bug caused patch to complain with a strange error message like: cannot change dir to /bin/red. The bug has been introduced when a check for "red" has been made part of the autoconfiguration procedure to support OpenBSD where "red" is missing. - printf: Some minor changes to permit printf to be compiled on OpenSolaris-ON without using a symlink to the bosh sources. This needs some extra code to always get the right "defs.h" include file. - printf: Added support for the hexadecimal float formats %a and %A when printf is compiled on OpenSolaris-ON. This helps to make the resulting /usr/bin/printf to behave more similar to the printf command that is built into ksh93. - SunPro Make: Added code to support an installation in /opt/onbld that is used during the compilation of OpenSolaris-ON. This is needed since the binary is in /opt/onbld/bin/i386/dmake or /opt/onbld/bin/sparc/dmake and thus the relative path to /opt/onbld/share/lib/make/make.rules is different from what is used with a typical installation where the binar is directly in the bin subdirectory. - star: star -xdev -find typically works to exclude mounted files. It still does not always do what is expected, e.g. in case that /proc is in the tree of scanned files, where files deep in the new mounted tree suddenly have the same FS ID as other filesystems, e.g. the file /proc//path/a.out. In such cases, "star -find -xdev" is still recommended where the mounted file exclusion is done inside libfind instead of being done inside star. Before, files on other filesystems have not been honored at all when using "star -xdev -find ...". - dotfiles: bsh/dotfiles.bsh.tar.bz2 sh/dotfiles.sh.tar.bz2 and ved/dotfiles.ved.tar.bz2 now have an updated file ~/.termcap that includes the capability kb=\b for the terminal sun-color. This enables automated mapping from backspace to delete for the Solaris console device, since sun keyboards starting from approx. 1988 emit a backspace when typing the delete key in the letter block of the keyboard. - cal: Fixed a typo in the comment for the Gregorian switch day for Prussia. - cal: The GREGORIAN environment now also supports (besides yyyy/mm/dd) the format yyy-mm-dd. - cal: The GREGORIAN environment value now may start with a + sign in order to enforce the alternate julian/gregorian switch date even when being in the C locale. This helps to use the right switch date even on machines that only have the C locale installed - cpp: The yacc parser now checks for the division -2147483648 / -1 in order to avoid a core dump from: #if -2147483648 / -1 code #endif Since that cannot be computed on a two's complement machine, -2147483648 is used as the hard coded result for this statement. Thanks to Robert Clausecker for reporting - cpp: The man page now mentions that "cpp -C ..." passes C++ type comments as well. Thanks to Robert Clausecker for reporting - cpp: now avoids some "static unused sccsid" warnings for its code. - bsh: The version time stamp has been updated - Bourne Shell: The new function isbinary() that has been introduced in May and that should prevent the shell from interpreting binary files as shell scripts had a problem: In case that a disconnected TCP/IP based remote login caused a SIGTERM followed by the read() function on stdin returning EIO, the shell could go into a complex endless loop as the failing read() with "trapnote" set caused a longjmp() before the next prompt without first clearing "trapnote". As a result, the shell did hang endlessly around while just consuming CPU time. The shell now avoids to call the read() routine inside isbinary() when "trapnote" is set and this way is able to avoid the longjmp() on error. - Bourne Shell: Fixed some typos in comment Thanks to Robert Clausecker for reporting - Bourne Shell: print.c: Changed err++ for a BOOL typed variable into err = TRUE. Thanks to Robert Clausecker for reporting - Bourne Shell, with obosh compilation type: Avoid an "unused" warning with word.c - Bourne Shell: defs.h now includes an "extern int optopt;" in order to support Ultrix where this delcaration is missing in unistd.h. Thanks to Robert Clausecker for reporting - bsh/Bourne Shell: test.c Now using a #if defined(S_IFPORT) && S_IFPORT != S_IFIFO to work around a strange definition on Ultrix Thanks to Robert Clausecker for reporting - Bourne Shell: New version date - SCCS changed some uint32_t -> UInt32_t for more portability to older platforms like Ultrix. - SCCS: diff.c now checks whether file decriptors f1 & f2 are >= 0, becore calling close() in order to avoid thousands of unneeded close() syscalls in case the "files" used to compare are directories. - SCCS: diff.c Now using a #if defined(S_IFPORT) && S_IFPORT != S_IFIFO to work around a strange definition on Ultrix Thanks to Robert Clausecker for reporting - SCCS: Using a new version date. - ved: Changed the pattern "[[\\]]" into "[\\[\\]]" since the pattern matcher supports [[:alpha:]] since 2017. This caused ved to no longer be able to seach for a matching square bracket. With the fixes in libschily/match.c (see above), this change was not needed anymore but it does not harm... - 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. - 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.