New features of SCCS-5.02: The upcoming SCCS-6.0 will introduce a new SCCS history file format that intentionally causes historic SCCS implementations to abort (to prevent file corruption) but that can be easily converted back into a SCCS-5.x compliant history file using a conversion program. This conversion will not cause a loss of information as the new information will be encoded as special comment that is accepted by all other SCCS implementations except for currently "CSSC". See the file TODO_V6 for more information. Please join the discussion mainling list for the development of enhancements on: http://lists.berlios.de/mailman/listinfo/sccs-devel sccs-devel@lists.berlios.de New features included with SCCS-5.02: This is the first step towards the upcoming SCCS v6, as this version of SCCS starts to support features that cannot be implemented in a way that is understood by earlier versions of SCCS. As the SCCS v6 file format is not yet fully defined and we don't like to create files by accident that are not understood by older versions, you need to set the environment variable "SCCS_VERSION" to enable the new features. This is a temporary hack to make the transition to SCCS v6 more smoothly. When SCCS v6 is ready, the environment variable will go away and there will be a program to convert SCCS v4 history files to SCCS v6 history files and vice versa. SCCS v6 features then will not be permitted to be added in case the SCCS history file is in SCCS v4 form. SCCS was changed to now have the same idea of what is a "text file" as diff(1). There are no longer limitations on text files that are caused by SCCS. If the environment variable "SCCS_VERSION" is set, SCCS will only create uuencoded non-text archives in case a file contains one or more null byte. - SCCS now supports to archive files as text files even when they contain lines that start with ^A. This is a SCCS Version 6 feature. If you like to use this feature now, you need to set the environment variable "SCCS_VERSION". To implement support for text lines that start with ^A, SCCS now checks for "^A^A" at the beginning of a line in the history file and extracts "^A^Atext" it as "^Atext". - SCCS now supports to archive files as text files even when their last line does not end in a newline character. This is a SCCS Version 6 feature. If you like to use this feature now, you need to set the environment variable "SCCS_VERSION". To implement support for text lines at the end of a file that do not end in a newline, SCCS now checks for "^AN" at the beginning of a line in the history file and extracts "^ANtext" it as "text" without a trailing newline. The text "^AN^Atext" is extracted as "^Atext" without a need for an additional quoting. - SCCS now supports to archive files as text files even when they do not end in a newline character. This is SCCS Version 6 feature. If you like to use this feature now, you need to set the environment variable "SCCS_VERSION". This need to set "SCCS_VERSION" applies to admin(1), delta(1) and val(1). The latter will flag a file as "corrupted" in case "SCCS_VERSION" is not set and the file uses SCCS version 6 features. The first two will not introduce SCCS v6 features unless "SCCS_VERSION" is set. - SCCS bdiff bow is compatible to diff(1) and outputs a newline even after files that do not end in a newline NOTE: Several changes have been made in order to make code code compile with the Microsoft C compiler. SCCS does however not yet fully compile with MSC and the code that compiles may not yet work. Microsoft ignores nearly any standard in OS and compiler environments, this makes it hard to support code on that platform. SCCS compiles and works fine with Cygwin. The test suite is passed fine with SCCS cygwin binaries. - A new environment variable MKLINKS_COPY allows to tell all MKLINS scripts to generate file copies rather than symlinks. Call: MKLINKS_COPY=true export MKLINKS_COPY to enable this feature - Run an additional test -h command in MKLNKS to verify whether mingw supports symlinks - MKLINKS now creates copies instead of symlink when we use MSC as MSC does not support to read symlinks files - Changed the default Microsoft compiler version to VC9 - Fixed the vc9-setup files to make VC9 work. - Newer Cygwin "tail" versions do no longer support UNIX syntax. change tail +2 to tail -n +2 in RULES/cc-mcs.rul to allow to use the Microsoft compiler again - Let include/schily/archdefs.h define the standard processor #defines when compiling with MSC. - New include file include/schily/windows.h works around the oddities from the MSC include file windows.h - include/schily/stdio.h now defines popen()/pclose() to _popen()/_pclose() if on WIN-DOS - include/schily/limits.h now defines PIPE_BUF - include/schily/utsname.h now defines struct utsname for our MSC uname() emulation. - New autoconf tests for memcmp() and memccpy() - New autoconf tests for spawn*(), cwait() process.h - New autoconf tests for pipe() / _pipe() - include/schily/unistd.h now defines pipe() via _pipe() on WIN-DOS - Many rewritten autoconf tests in order to work around the oddities from MSC (cl). - New functions zerobytes() and cmpmbytes() added to libschily. - libschily/gettimeofday.c now supports MinGW - New functions zerobytes() and cmpmbytes() added to libschily. - Fixed libschily/gettimeofday.c to compile with MSC - Fixed libschily/sleep.c to compile with MSC - Fixed libschily/usleep.c to be empty with MSC as sleep.c includes a working usleep() - libschily/gethostname.c enhanced to support Win-DOS with cl.exe - libschily/uname.c New function to support Win-DOS with cl.exe - libschily/dirent.c New functions: opendir()/closedir()/readdir() to support Win-DOS with cl.exe - libschily/kill.c New function to support Win-DOS with cl.exe - libfind/find.c disables -exec in case there is no fork(). This is in order to support MINGW - New autoconf tests for: getpwnam getpwent getpwuid setpwent endpwent getgrnam getgrent getgrgid setgrent endgrent This is in order to support MINGW - libschily now supports fallback implementations for: getpwnam getpwent getpwuid setpwent endpwent getgrnam getgrent getgrgid setgrent endgrent This is in order to support MINGW - libschily now supports fallback implementations for: getuid geteuid setuid seteuid getgid getegid setgid setegid This is in order to support MINGW - SCCS delta no longer exists in a separate version under /usr/xpg4/bin as the POSIX definition for delta(1) has been fixed to match the actual behavior of the vanilla delta(1) program. - The SCCS delta man page has been updated to reflect the removal of /usr/xpg4/bin/delta - The SVR4 package description file has been updated to reflect the removal of /usr/xpg4/bin/delta - The SCCS get man page has been updated to mention that -x works not only with /usr/xpg4/bin/get - The SCCS admin man page metter mentions the POSIX aspects for the 'i' and 'l' flags in the SCCS history files. - The SCCS admin page and the sccsfile man page now have a better description for the 'j' flag (Joint Editing). - The sccsfile man page now has a complete description on how the checksum is computed - The sccs man page now mentions that only the statisctics numbers in the SCCS history files are limted in range from 00000 to 99999. Other numbers are not limited to allow an arbitrary number of deltas. - A variable "dirname" in admin.c has renamed to "dir_name" to avoid a problem with the function dirname() and K&R compilers. - Struct "apply" was reduced in size from 3xint to 3xchar. This is important with hundreds of thousands of deltas in order to limit the SCCS memory footprint. - A bug in fmalloc.c (introduced by Sun in the past 20 years) has been fixed: fmalloc() no longer mallocs sizeof (int) (typically 4) times more memory than needed. This is important with hundreds of thousands of deltas in order to limit the SCCS memory footprint. - Copying SCCS history now gives better performance as it no longer calls a path name manipulation function for each written line in a history file. - strchr() is used instead of the local function any() to speed up things. - The zero() function was speed up with code from fillbytes.c to speed up clearing large chunks of data. - The diff program now reads bigger chunks of data and uses memcmp() to speed up operation. All speed ups indroduced in the past 6 months cause that this version of SCCS only consumes aprox. 1/3 of the CPU time from Sun SCCS. - Android is not POSIX (by not defining various functions as functions in libc as required by POSIX) because it tries to define many functions that are part of the standard as inline macros in include files only. This breaks autoconf, so we needed to rewrite some tests (e.g for getpagesize, tcgetpgrp, tcsetpgrp) - The Schily autoconf system has been enhanced to support cross compilation. Schily autoconf is based on GNU autoconf and GNU autoconf does not support cross compilation because it needs to run scripts on the target system for some of the tests. The "configure" script that is delivered with the Schily makefile system runs 718 tests and 68 of them need to be run on the target system. The Schily autoconf system now supports a method to run these 65 tests natively on a target system. You either need a machine with remote login features or you need an emulator with a method to copy files into the emulated system and to run binaries on the emulated system as e.g. the Android emulator. We currently deliver three scripts for "remote" execution of programs on the target system: runrmt_ssh runs the commands remove via ssh runrmt_rsh runs the commands remove via rsh runrmt_android runs the commands remove via the debug bridge If you need to remotely run programs on a system that is not supported by one of there three scripts, you need to modify one of them to match your needs. To enable Cross Compilation use the following environment variables: CONFIG_RMTCALL= Set up to point to a script that does the remote execution, e.g.: CONFIG_RMTCALL=`pwd`/conf/runrmt_ssh CONFIG_RMTHOST= Set up to point to your remote host, e.g.: CONFIG_RMTHOST=hostname or CONFIG_RMTHOST=user@hostname use a dummy if you like to use something like to the Android emulator. CONFIG_RMTDEBUG= Set to something non-null in order to let the remote execution script mark remote comands. This will result in configure messages like: checking bits in minor device number... REMOTE 8 Note that smake includes automake features that automatically retrieve system ID information. For this reason, you need to overwrite related macros from the command line if you like to do a cross compilation. Related make macros: K_ARCH= # (sun4v) Kernel ARCH filled from uname -m / arch -k M_ARCH= # (sun4) Machine filled from arch P_ARCH= # (sparc) CPU ARCH filled from uname -p / mach OSNAME= # sunos, linux, .... OSREL= # 5.11 OSVERSION= # snv_130 CCOM= # generic compiler name (e.g. "gcc") CC_COM= # compiler to call (name + basic args) ARCH= overwrites M_ARCH and P_ARCH It is usually suffucient to set ARCH and OSNAME. In order to use a cross compiler environment instead of a native compiler, set the make macro CC_COM to something different than "cc". If you are on Linux and like to compile for Android, do the following: 1) set up CC acording to the instructions from the cross compiler tool chain 2) set environment variables CONFIG_RMTCALL / CONFIG_RMTHOST, e.g.: setenv CONFIG_RMTCALL `pwd`/conf/runrmt_android setenv CONFIG_RMTHOST NONE 3) call smake: smake ARCH=armv5 OSNAME=linux CCOM=gcc "CC_COM=$CC" - Several programs no longer test for HAVE_DEV_* but for HAVE__DEV_* as we did switch from hand written tests for /dev/tty, /dev/null and similar to AC_CHECK_FILES(/dev/tty /dev/null /dev/zero) - The setup for the PATHs needed by Visual Studio 9 has been corrected. - autoconf has been modified to avoid optimizing away code that is intended for testing. This help to work against a problem with detecting mbrtowc() on MinGW - autoconf now tests for mbtowc() and wctomb() - RULES/i*86-mingw32_nt-gcc.rul now link against -lmingw32 instead of -lmgw32. - include/schily/stat.h now defines S_IREAD/S_IWRITE/S_IEXEC These macros are available on typical UNIX systems but not on Android. The definition comes from UNIX V7 and is not in POSIX. Needed by SCCS and the Bourne Shell - include/schily/wait.h now defines WIFCONTINUED() if needed - include/schily/wchar.h now defines mbtowc() to mbrtowc() if needed (e.g. on Android) - include/schily/ccomdefs.h now correctly knows about the GCC release that introduced __attribute__ (used). - Fixed a cplusplus bug in schily/stdlib.h - Fixed wrong bracketing for C++ in include/schily/utypes.h - Added a workaround for MSC to include/schily/utypes.h MSC believes that a 32 bit int and a 32 bit long are incompatible and cannot even be casted, so we need to make uint32_t a n unsigned long - SCCS help2 now ignores LC_MESSAGES with MSC as MS does not support localized message strings. SCCS now has been tested to compile and work on the following platforms: - SunOS-4.x - SunOS-5.x (Solaris 2.x, 7, 8, 9, 10, 11) - FreeBSD - HP-UX - Linux - Mac OS X - AIX - IRIX - VMS - Cygwin The portability now reached a state that should allow SCCS to compile and run on other platforms too. SCCS compiles and has been verified on all major platforms.