Changes between Initial Version and Version 1 of kmk


Ignore:
Timestamp:
Nov 23, 2006, 9:50:14 PM (18 years ago)
Author:
bird
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • kmk

    v1 v1  
     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
     3Why 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
     11The 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