1New features with AN-2019-09-22: 2 3This is the first localization step for the schily source consolidation. Many 4programs now (hopefully) call gettext() for all strings that need localization. 5 6- The next step will include dgettext() calls for the libraries and the 7 missing programs 8 9- The following step will include the extracted strings 10 11- The last step will include German translations and install support 12 for the resulting binary message object files. 13 14----------> Please test and report compilation problems! <--------- 15 16***** NOTE: As mentioned since 2004, frontends to the tools should ***** 17***** call all programs in the "C" locale ***** 18***** by e.g. calling: LC_ALL=C cdrecord .... ***** 19***** unless these frontends support localized strings ***** 20***** used by the cdrtools with NLS support. ***** 21 22 *** WARNING *** 23 *** Need new smake *** 24 25 *** Due to the fact that schily-tools 2014-04-03 introduced to use new macro 26 *** expansions and a related bug fix in smake, you need a newer smake 27 *** to compile this source. If your smake is too old and aborts, ensure to 28 *** use the recent smake by calling: 29 30 cd ./psmake 31 ./MAKE-all 32 cd .. 33 psmake/smake 34 psmake/smake install 35 36 The new smake version mentioned above is smake-1.2.4 37 The recent smake version is smake-1.3 38 39 *** Due to the fact that schily-tools 2018-01-26 introduced 40 *** optimizations for the Schily version of SunPro Make, you 41 *** need at least the dmake version from 2018/01/11 with support 42 *** for the "export" directive to compile with this makefile system. 43 44 45 WARNING: the new version of the isoinfo program makes use of the 46 *at() series of functions that have been introduced by Sun 47 in August 2001 and added to POSIX.1-2008. For older platforms, 48 libschily now includes emulations for these functions but 49 these emulations have not yet been tested thoroughly. 50 Please report problems! 51 52 BUG WARNING: Please never report bugs only to Linux distributions as 53 they usually do not forward these bug reports upstream and as 54 the Linux distributions typically do not let skilled people 55 check the bugs. We did not hear about a FIFO problem in star 56 for a long time. Then a problem on Linux occurred once 57 every 6000-10000 tries but it did not happen on Solaris after 58 even 10 million tries, so it was not known besides Linux. 59 60- psmake: The portable bootstrap smake compilation environment added 61 a new option "-shell path" to the shell script psmake/MAKE-sh in 62 order to permit to use a different shell to run "configure". 63 64 This helps to compile the boostrap smake binary on platforms where 65 /bin/sh is a broken shell but another (working) shell is present. 66 It may still be needed on Ultrix even though there are now work 67 arounds for various shell bugs on Ultrix. 68 69- conf/cc-config.sh: All "eval" commands with I/O redirection need 70 to be in a subshell in order to work with a V7 shell. This change 71 was needed to support Ultrix. 72 73 Thanks to Robert Clausecker for reporting 74 75- RULES: "configure" is now run by $SHELL instead of "sh". This allows 76 to call: 77 78 smake SHELL=path/to/shell 79 80 with a shell that is able to correctly run configure in case that 81 the default shell is buggy. Note that if you are on such a platform, 82 you need to run MAKE-sh in the directory "psmake" by hand, using the 83 right shell definition via the "-shell path" option. 84 85 Thanks to Robert Clausecker for reporting 86 87- autoconf: Since 2011, we used 88 89 eval echo .... 90 91 in the macro AC_MSG_RESULT() in order to make looping over a group of 92 tests easier. It now turned out that on Ultrix the shell is buggy and 93 aborts 94 95 eval echo foo 1>&6 96 97 with an "illegal io" message. 98 99 In order to work around this problem, we had to expand the 100 AC_MSG_RESULT() in the AC_CHECK_DFUNC() macro to be able to 101 remove the "eval" call from AC_MSG_RESULT() in order to get the 102 previous state. 103 104 This even resulted in 5% performance win for "configure" as a side 105 effect... 106 107 Thanks to Robert Clausecker for reporting 108 109- autoconf: AC_TRY_EVAL() in former times did call "( eval echo ... )" 110 in order to work around a problem in the UNIX V7 shell with I/O 111 redirection for builtin commands. We removed the "( ... )" in 112 March 2016, not knowing the reason why they have been used as we 113 intendedto enhance the "configure" performance. In order to be able to 114 again support the UNIX V7 shell, we now call { eval echo ... ;} since 115 that allows I/O redirection for stdout in the UNIX V7 shell. Since 116 modern shells do not create a sub-shell for this, it does not reduce 117 performance with modern shells. 118 119 The I/I redirection problem for builtin commands in the V7 shell is 120 not present with "eval ... | command" and it can be circumvented with 121 "{ eval ... ;} > ...", for stdout redirection, but with stdin 122 redirection we definitely need "( eval cat ) < file". 123 124 Thanks to Robert Clausecker for reporting 125 126- autoconf: The test AC_PROG_CPPX no longer uses the builtin type(1) but 127 rather the old autoconf concept based on a shell for-loop since we like 128 to support the V7 Bourne Shell. 129 130 Thanks to Robert Clausecker for reporting 131 132- autoconf: A few other cases with "eval" I/O redirection have been 133 modified to run in a subshell in order to support the UNIX V7 shell 134 as well. 135 136 Thanks to Robert Clausecker for reporting 137 138- conf/cc-config.sh: The "eval" calls are now inside () in order to 139 create a sub-shell that is needed to support the V7 Bourne Shell. 140 141- autoconf: Ultrix has int8_t and similar definitions in unusual 142 include files but not in inttypes.h. This tricks out the 143 autoconfiguration tests and we cannot define these types for older 144 platforms. We therfore made the definitions for int8_t and similar 145 optional (using Int8_t in our code) in order to again support Ultrix. 146 147 Thanks to Robert Clausecker for reporting 148 149- Makefile System: Added new configuration files for Ultrix in the 150 directory RULES to support non automake aware make implementations 151 line "gmake". 152 153- Makefile System: Added dummy "else" parts to "if" shell statements 154 in the makefiles in the RULES directory in order to work around a bug 155 in the UNIX V7 shell from 1982 used on Ultrix. The "else" part 156 now contains the dummy command ":" that sets the exit code of 157 the if statement to 0 if the condition was not taken. 158 159 Thanks to Robert Clausecker for reporting 160 161- Makefile System: Modified the default system files temp-*cc*.rul 162 to match the new concept for "mkdir -p" emulation. 163 164- include/schily: various include files have been modified to pass 165 "cstyle" and "hdrchk" from the OpenSolaris build system in order 166 to allow Schillix-ON integration. 167 168- include/schily/fetchdir.h: Added more comment. 169 170- include/schily/resource.h: Added an #include <schily/stdint.h> and 171 moved the rlim_t definition out of the #ifndef RLIMIT_CPU block. 172 This is needed for Ultrix where rlim_t is not a supported system 173 defined type. 174 175 Thanks to Robert Clausecker for reporting 176 177- include/schily/wait.h: The W*() macros on Ultrix do not work cuurectly 178 and this is a result of an incorrect definition for union wait. The 179 Ultrix kernel uses the right bits in the status, so we 180 #undef USE_UNION_WAIT and all W*() macros from the Ultrix system 181 include files. This causes that include/schily/wait.h #define's 182 our working versions as a replacement. 183 184 Thanks to Robert Clausecker for reporting 185 186- libschily/Targets: The indentation has been changed for an easier 187 conversion to the OpenSolaris build system for Schillix-ON integration. 188 189- libschily/dirent.c changed uint32_t -> UInt32_t for more portability 190 to older platforms like Ultrix. 191 192- libschily/gethostname.c changed uint32_t -> UInt32_t for more 193 portability to older platforms like Ultrix. 194 195- libschily/kill.c changed uint32_t -> UInt32_t for more 196 portability to older platforms like Ultrix. 197 198- libschily/uname.c changed uint32_t -> UInt32_t for more 199 portability to older platforms line Ultrix. 200 201- libschily/format.c is now using ~(UIntptr_t)1 instead of just ~1 202 in order to make it work correctly for 64 bit systems. 203 204 Thanks to Robert Clausecker for reporting 205 206- libschily/match.c: The pattern matcher had a problem with parsing 207 patterns like '[[]' after adding support for the POSIX '[[:alpha:]]' 208 and similar methods in August 2017. We now correctly handle the pattern 209 in case that something starts with '[' but does not continue as "[:" 210 and as a result does not seem to be something like '[[:alpha:]]' 211 212- libschily/match.c: A while() loop has been converted to a do ... while() 213 loop in order to support the POSIX way of specifying "[]]" as a set 214 that contains the character ']' wihtout the need to use "\]". 215 216- libschily/match.c: A bug introduced in March 2018 has been fixed 217 by removing "if (ap->Ch != LCLASS) nextitem(ap);" from the parser. 218 219- libfind: A new interface function to the treewalk() function data 220 called walknlen() has been introduced. It returns the length of 221 the last pathname component without a need to call strlen(). 222 This is used in order to be able to check in a performant way whether 223 a pathname ends in slash(es). 224 225- libfind: The index pointer to the last pathname comonent was not 226 initialized in case the name was a command line argument. This 227 caused "find ./foo -name foo" not to match as expected. 228 229 Thanks to Tavian Barnes for reporting. 230 231- libfind: We now call basename() with the last pathname component 232 in order to to be able to correctly deal and match with command 233 lines like: 234 235 find ./foo/// -name foo 236 237 basename() is used here to remove trailing slashes. 238 239- libfind: If we are in the optimized mode that avoids stat() calls, 240 we are not allowed to avoid a stat() in case that the current file 241 may be a symlink and we are told to follow symlinks. If we did avoid 242 the stat() call as we did before, we would miss to follow symlinks 243 that point to directories. 244 245 This problem mainly happened on Linux, where struct dirent contains 246 a d_type member. In this case, libfind made the false assymption that 247 d_type (being a symlink) could not point to a directory. 248 249 Thanks to Tavian Barnes for reporting. 250 251- libfind: schily/fcntl.h is always needed because we need AT_FDCWD that 252 may be missing on older platforms. 253 254 Thanks to Robert Clausecker for reporting 255 256- libfind: find_misc.h now includes schily/time.h since Ultrix 257 is a historic UNIX that needs our definition of struct timespec 258 since that definition is not in system include files. 259 260 Thanks to Robert Clausecker for reporting 261 262- libfind: find_list.c Now using a 263 264 #if defined(S_IFPORT) && S_IFPORT != S_IFIFO 265 266 to work around a strange definition on Ultrix where S_IFPORT == S_IFIFO 267 and where S_IFPORT is not a Solaris event port. 268 269 Thanks to Robert Clausecker for reporting 270 271- cdda2wav/sndconfig.c changed uint32_t -> UInt32_t for better 272 portability to older platforms like Ultrix. 273 274- patch: The order of arguments to the called "ed" command has been 275 wrong when handling "ed type" patches. This bug caused patch to 276 complain with a strange error message like: 277 278 cannot change dir to /bin/red. 279 280 The bug has been introduced when a check for "red" has been made part 281 of the autoconfiguration procedure to support OpenBSD where "red" is 282 missing. 283 284- printf: Some minor changes to permit printf to be compiled on 285 OpenSolaris-ON without using a symlink to the bosh sources. This 286 needs some extra code to always get the right "defs.h" include 287 file. 288 289- printf: Added support for the hexadecimal float formats %a and %A 290 when printf is compiled on OpenSolaris-ON. This helps to make the 291 resulting /usr/bin/printf to behave more similar to the printf 292 command that is built into ksh93. 293 294- SunPro Make: Added code to support an installation in /opt/onbld 295 that is used during the compilation of OpenSolaris-ON. This is needed 296 since the binary is in /opt/onbld/bin/i386/dmake or 297 /opt/onbld/bin/sparc/dmake and thus the relative path to 298 /opt/onbld/share/lib/make/make.rules is different from what is used 299 with a typical installation where the binar is directly in the bin 300 subdirectory. 301 302- star: star -xdev -find typically works to exclude mounted files. 303 It still does not always do what is expected, e.g. in case that /proc 304 is in the tree of scanned files, where files deep in the new mounted 305 tree suddenly have the same FS ID as other filesystems, e.g. the file 306 /proc/<pid>/path/a.out. 307 308 In such cases, "star -find -xdev" is still recommended where the 309 mounted file exclusion is done inside libfind instead of being 310 done inside star. 311 312 Before, files on other filesystems have not been honored at all when 313 using "star -xdev -find ...". 314 315- dotfiles: bsh/dotfiles.bsh.tar.bz2 sh/dotfiles.sh.tar.bz2 and 316 ved/dotfiles.ved.tar.bz2 now have an updated file ~/.termcap that 317 includes the capability kb=\b for the terminal sun-color. 318 This enables automated mapping from backspace to delete for the 319 Solaris console device, since sun keyboards starting from approx. 320 1988 emit a backspace when typing the delete key in the letter block 321 of the keyboard. 322 323- cal: Fixed a typo in the comment for the Gregorian switch day 324 for Prussia. 325 326- cal: The GREGORIAN environment now also supports (besides yyyy/mm/dd) 327 the format yyy-mm-dd. 328 329- cal: The GREGORIAN environment value now may start with a + sign in 330 order to enforce the alternate julian/gregorian switch date even 331 when being in the C locale. This helps to use the right switch date 332 even on machines that only have the C locale installed 333 334- cpp: The yacc parser now checks for the division -2147483648 / -1 335 in order to avoid a core dump from: 336 337 #if -2147483648 / -1 338 code 339 #endif 340 341 Since that cannot be computed on a two's complement machine, 342 -2147483648 is used as the hard coded result for this statement. 343 344 Thanks to Robert Clausecker for reporting 345 346- cpp: The man page now mentions that "cpp -C ..." passes C++ type 347 comments as well. 348 349 Thanks to Robert Clausecker for reporting 350 351- cpp: now avoids some "static unused sccsid" warnings for its code. 352 353- bsh: The version time stamp has been updated 354 355- Bourne Shell: The new function isbinary() that has been introduced 356 in May and that should prevent the shell from interpreting binary 357 files as shell scripts had a problem: 358 359 In case that a disconnected TCP/IP based remote login caused a SIGTERM 360 followed by the read() function on stdin returning EIO, the shell 361 could go into a complex endless loop as the failing read() with 362 "trapnote" set caused a longjmp() before the next prompt without first 363 clearing "trapnote". As a result, the shell did hang endlessly around 364 while just consuming CPU time. 365 366 The shell now avoids to call the read() routine inside isbinary() 367 when "trapnote" is set and this way is able to avoid the longjmp() on 368 error. 369 370- Bourne Shell: Fixed some typos in comment 371 372 Thanks to Robert Clausecker for reporting 373 374- Bourne Shell: print.c: Changed err++ for a BOOL typed variable 375 into err = TRUE. 376 377 Thanks to Robert Clausecker for reporting 378 379- Bourne Shell, with obosh compilation type: Avoid an "unused" warning 380 with word.c 381 382- Bourne Shell: defs.h now includes an "extern int optopt;" in order 383 to support Ultrix where this delcaration is missing in unistd.h. 384 385 Thanks to Robert Clausecker for reporting 386 387- bsh/Bourne Shell: test.c Now using a 388 389 #if defined(S_IFPORT) && S_IFPORT != S_IFIFO 390 391 to work around a strange definition on Ultrix 392 393 Thanks to Robert Clausecker for reporting 394 395- Bourne Shell: New version date 396 397- SCCS changed some uint32_t -> UInt32_t for more portability to 398 older platforms like Ultrix. 399 400- SCCS: diff.c now checks whether file decriptors f1 & f2 are >= 0, 401 becore calling close() in order to avoid thousands of unneeded 402 close() syscalls in case the "files" used to compare are directories. 403 404- SCCS: diff.c Now using a 405 406 #if defined(S_IFPORT) && S_IFPORT != S_IFIFO 407 408 to work around a strange definition on Ultrix 409 410 Thanks to Robert Clausecker for reporting 411 412- SCCS: Using a new version date. 413 414- ved: Changed the pattern "[[\\]]" into "[\\[\\]]" since the 415 pattern matcher supports [[:alpha:]] since 2017. This caused 416 ved to no longer be able to seach for a matching square bracket. 417 418 With the fixes in libschily/match.c (see above), this change was 419 not needed anymore but it does not harm... 420 421 422- SCCS TODO: 423 424 - Convert sccs.c to use -NSCCS in the back end programs instead 425 of converting g-file names from the command line into s.file 426 names in the frontend in order to forward s.file names to the 427 backend programs. Doing it this way allows us to have the SCCS 428 history files "off tree" in a separate directory tree starting 429 with ".sccs/" at the "project root" directory, as the related 430 code to convert path names is in libcomobj::bulkprepare(). 431 432 - Add code to admin(1) and delta(1) to retrieve the list of 433 new or modified files in order to have all important code 434 for a "sccs commit" in a single program that does not need to 435 deal with ARG_MAX limitations. 436 437 - Add code to admin(1), delta(1) and get(1) to maintain/understand 438 the changeset file. 439 440 - Add code to libcomobj to understand the changeset file, 441 which is needed in order to e.g. know the file names and file 442 specific SIDs/state that correspond to a project global SID. 443 444 - Add code to all programs to maintain a lock (for the file 445 $PROJECTHOME/.sccs/SCCS/s.changeset, that would be in the file 446 $PROJECTHOME/.sccs/SCCS/z.changeset) to maintain a project 447 global lock. 448 449 - Find/verify a complete transactional model that allows to repair 450 complex changes to the set of files for a project that have 451 been aborted in the middle. The current idea is to create the 452 file $PROJECTHOME/.sccs/changeset with the deltas to the 453 changeset during a complex update operation. 454 455 - Find a way to decide when to use SCCS v6 type history files. 456 For the project mode, this is needed in order to prevent 457 historic SCCS implementations to believe they could modify 458 files without knowing about project global locks. 459 460 461 462 463 464- Bourne Shell Missing features for POSIX compliance: 465 466 - Support for $'...' quoting (this is not needed for the current 467 version of POSIX but for the next POSIX 468 version that will be named SUSv8). 469 The development of SUSv8 will start in 470 late 2016. 471 472 We are now expecting the Bourne Shell to be fully POSIX compliant. 473 474- Bourne Shell further TODO list: 475 476 - Finish loadable builtin support. 477 478 - POSIX does not allow us to implement ". -h", so we will 479 add a "source" builtin to be able to implement "source -h" 480 481- The following builtins (that are available in bsh) are still missing in 482 the Bourne Shell: 483 484 err echo with output going to stderr 485 glob echo with '\0' instead of ' ' between args 486 env a builtin version of /usr/bin/env 487 488 The following bsh intrinsics are still missing in the Bourne Shell: 489 490 - the restricted bsh has restriction features that 491 are missing in the Bourne shell. 492 493 - source -h read file into history but do not execute 494 495 and probably more features not yet identified to be bsh unique. 496 497 498 499Author: 500 501Joerg Schilling 502D-13353 Berlin 503Germany 504 505Email: joerg@schily.net, joerg.schilling@fokus.fraunhofer.de 506 507Please mail bugs and suggestions to me. 508