| | 1 | {{{kmk}}} is the {{{make}}} program in [wiki:kBuild kBuild], e.g. it is what you invoke from the commandline or editor to perform the actual build. {{{kmk}}} is based on the latest [wiki:GNUmake GNU make] release, currently 3.81, but provides a bunch of additional features required by the [wiki:kBuild kBuild] makefile scripts. |
| | 2 | |
| | 3 | Why not use vanilla [wiki:GNUmake GNU make]? There are several reasons: |
| | 4 | * When [wiki:kBuild kBuild] was reborn using [wiki:GNUmake GNU make] (an earlier incarnation of the project was based on FreeBSD make) the 3.81 release was about 2 years ahead. [wiki:kBuild kBuild] relies on many features introduced after 3.80. Requiring 3.81 to be installed still isn't a viable option. |
| | 5 | * Be able to add new features without having trouble getting them accepted or having to wait 3-4 years until the next [wiki:GNUmake GNU make] version is released and makes it out to all the corners of the world. |
| | 6 | * Be able to fix bugs fast, same reasoning as above. |
| | 7 | * Not having to require a specific, perhaps even unreleased, [wiki:GNUmake GNU make] version. |
| | 8 | * Not having to deal with missing features and bugs specific to various [wiki:GNUmake GNU make] versions and ports. |
| | 9 | * Finally, because we can. :-) |
| | 10 | |
| | 11 | The current {{{kmk}}} code contains the following changes from [wiki:GNUmake GNU make]: |
| | 12 | * It has some extra predefined variables: |
| | 13 | * {{{KMK_VERSION}}} |
| | 14 | * {{{KMK_FEATURES}}} |
| | 15 | * {{{KBUILD_VERSION}}} |
| | 16 | * {{{KBUILD_VERSION_MAJOR}}} |
| | 17 | * {{{KBUILD_VERSION_MINOR}}} |
| | 18 | * {{{KBUILD_VERSION_PATCH}}} |
| | 19 | * {{{PATH_KBUILD}}} - only when '''installed''' on *nix. |
| | 20 | * {{{PATH_KBUILD_BIN}}} - only when '''installed''' on *nix. |
| | 21 | * It has a few new builtin functions: |
| | 22 | * {{{toupper}}} |
| | 23 | * {{{tolower}}} |
| | 24 | * {{{compvar}}} |
| | 25 | * {{{kb-src-tool}}} (kBuild internal) |
| | 26 | * {{{kb-obj-base}}} (kBuild internal) |
| | 27 | * {{{kb-obj-suff}}} (kBuild internal) |
| | 28 | * {{{kb-src-prop}}} (kBuild internal) |
| | 29 | * {{{kb-src-one}}} (kBuild internal) |
| | 30 | * It contains bugfixes for several bugs in the Windows and OS/2 ports, most importantly path case mixups, broken shell invocation, and abspath. |
| | 31 | * It has several performance improvements with respect to the kind of work [wiki:kBuild kBuild] puts make thru. Most notably, keeping name and value lengths for variables and thereby skipping a lot of {{{strlen()}}} and being able to use {{{memcpy()}}} instead of {{{strcpy()}}}, and the variable expansion optimization ({{{+=}}}). The latter was a major issue with the way [wiki:kBuild kBuild] is scripted. |
| | 32 | * A bunch of builtin utilities which will be invoked without spawning new process or shell. Most of these are taken from BSD. |
| | 33 | * kmk_builtin_append |
| | 34 | * kmk_builtin_cp |
| | 35 | * kmk_builtin_echo |
| | 36 | * kmk_builtin_install |
| | 37 | * kmk_builtin_ln |
| | 38 | * kmk_builtin_mkdir |
| | 39 | * kmk_builtin_rm (clean just wouldn't work without this) |
| | 40 | * kmk_builtin_rmdir |
| | 41 | On the todo list is: |
| | 42 | * kmk_builtin_mv |
| | 43 | * ... |
| | 44 | |
| | 45 | |
| | 46 | |