Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
New semantic versioning scheme; disable vmalloc in release builds
As of this commit, ksh 93u+m has a standard semantic version number <https://semver.org/>, beginning with 1.0.0-alpha. This is added to the version string in a way that should be compatible with scripts parsing ${.sh.version} or $(ksh --version). This addition does not replace the release date and does not affect $((.sh.version)). For non-release builds, the version string will be: FORK/VERSION+HASH YYYY-MM-DD e.g.: 93u+m/1.0.0-alpha+41ef7f76 2021-01-03 For release builds, it will be: FORK/VERSION YYYY-MM-DD e.g.: 93u+m/1.0.0 2021-01-03 It is now automatically decided by bin/package whether to build a release or development build. When building from a directory that is not a git repository, or if the current git branch name starts with a number (e.g. '1.0'), the release build is enabled; otherwise a development build is the default. This is arranged by adding -D flags to $CCFLAGS as described below. These flags are prepended to $CCFLAGS, so they can be overridden by adding your own -D or -U flags via the environment. In addition, AST vmalloc is disabled for release builds as of this commit, forcing the use of the OS's standard malloc(3). In 2021, this is generally more reliable, faster, and more economical with memory than AST vmalloc. Several memory leaks and crashing bugs are avoided, e.g.: <#95>. For development builds, vmalloc stays enabled (along with its known bugs) because this allows the use of the vmstat builtin, making it much more efficient to test for memory leaks. For more info, see the regression test script: src/cmd/ksh93/tests/leaks.sh bin/package, src/cmd/INIT/package.sh: - Add flags for build type. In $CCFLAGS, define _AST_ksh_release if we're not on any git branch or on a git branch whose name starts with a number. Otherwise, define _AST_git_commit as the first 8 characters of the current git commit hash. src/lib/libast/features/vmalloc: - If _AST_ksh_release is defined, disable vmalloc and force use of the operating system's malloc. Discussion: #95 src/cmd/ksh93/include/version.h: - Define new format for version string, adding a semantic version number as well as (for non-release builds) the git commit hash. src/cmd/ksh93/sh/init.c: e_version[]: - Add a 'v' to the ${.sh.version} feature string if ksh was compiled with vmalloc enabled. This allows scripts, such as regression tests, to detect this. src/cmd/ksh93/data/builtins.c: sh_optksh[]: - Add a copyright line crediting the contributors to ksh 93u+m. Resolves: #95
- Loading branch information