Index: trunk/kBuild/doc/COPYING-FDL-1.3
===================================================================
--- trunk/kBuild/doc/COPYING-FDL-1.3	(revision 2146)
+++ trunk/kBuild/doc/COPYING-FDL-1.3	(revision 2146)
@@ -0,0 +1,451 @@
+
+                GNU Free Documentation License
+                 Version 1.3, 3 November 2008
+
+
+ Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+     <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document "free" in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense.  It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does.  But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book.  We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License.  Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein.  The "Document", below,
+refers to any such manual or work.  Any member of the public is a
+licensee, and is addressed as "you".  You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A "Modified Version" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject.  (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.)  The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.  If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant.  The Document may contain zero
+Invariant Sections.  If the Document does not identify any Invariant
+Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.  A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters.  A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text.  A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML, PostScript or PDF designed for human modification.  Examples of
+transparent image formats include PNG, XCF and JPG.  Opaque formats
+include proprietary formats that can be read and edited only by
+proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML, PostScript or PDF produced by some word
+processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page.  For works in
+formats which do not have any title page as such, "Title Page" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+The "publisher" means any person or entity that distributes copies of
+the Document to the public.
+
+A section "Entitled XYZ" means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language.  (Here XYZ stands for a
+specific section name mentioned below, such as "Acknowledgements",
+"Dedications", "Endorsements", or "History".)  To "Preserve the Title"
+of such a section when you modify the Document means that it remains a
+section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document.  These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no
+other conditions whatsoever to those of this License.  You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute.  However, you may accept
+compensation in exchange for copies.  If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover.  Both covers must also clearly and legibly identify
+you as the publisher of these copies.  The front cover must present
+the full title with all words of the title equally prominent and
+visible.  You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to
+give them a chance to provide you with an updated version of the
+Document.
+
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it.  In addition, you must do these things in the Modified Version:
+
+A. Use in the Title Page (and on the covers, if any) a title distinct
+   from that of the Document, and from those of previous versions
+   (which should, if there were any, be listed in the History section
+   of the Document).  You may use the same title as a previous version
+   if the original publisher of that version gives permission.
+B. List on the Title Page, as authors, one or more persons or entities
+   responsible for authorship of the modifications in the Modified
+   Version, together with at least five of the principal authors of the
+   Document (all of its principal authors, if it has fewer than five),
+   unless they release you from this requirement.
+C. State on the Title page the name of the publisher of the
+   Modified Version, as the publisher.
+D. Preserve all the copyright notices of the Document.
+E. Add an appropriate copyright notice for your modifications
+   adjacent to the other copyright notices.
+F. Include, immediately after the copyright notices, a license notice
+   giving the public permission to use the Modified Version under the
+   terms of this License, in the form shown in the Addendum below.
+G. Preserve in that license notice the full lists of Invariant Sections
+   and required Cover Texts given in the Document's license notice.
+H. Include an unaltered copy of this License.
+I. Preserve the section Entitled "History", Preserve its Title, and add
+   to it an item stating at least the title, year, new authors, and
+   publisher of the Modified Version as given on the Title Page.  If
+   there is no section Entitled "History" in the Document, create one
+   stating the title, year, authors, and publisher of the Document as
+   given on its Title Page, then add an item describing the Modified
+   Version as stated in the previous sentence.
+J. Preserve the network location, if any, given in the Document for
+   public access to a Transparent copy of the Document, and likewise
+   the network locations given in the Document for previous versions
+   it was based on.  These may be placed in the "History" section.
+   You may omit a network location for a work that was published at
+   least four years before the Document itself, or if the original
+   publisher of the version it refers to gives permission.
+K. For any section Entitled "Acknowledgements" or "Dedications",
+   Preserve the Title of the section, and preserve in the section all
+   the substance and tone of each of the contributor acknowledgements
+   and/or dedications given therein.
+L. Preserve all the Invariant Sections of the Document,
+   unaltered in their text and in their titles.  Section numbers
+   or the equivalent are not considered part of the section titles.
+M. Delete any section Entitled "Endorsements".  Such a section
+   may not be included in the Modified Version.
+N. Do not retitle any existing section to be Entitled "Endorsements"
+   or to conflict in title with any Invariant Section.
+O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant.  To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version.  Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity.  If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy.  If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History"
+in the various original documents, forming one section Entitled
+"History"; likewise combine any sections Entitled "Acknowledgements",
+and any sections Entitled "Dedications".  You must delete all sections
+Entitled "Endorsements".
+
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other
+documents released under this License, and replace the individual
+copies of this License in the various documents with a single copy
+that is included in the collection, provided that you follow the rules
+of this License for verbatim copying of each of the documents in all
+other respects.
+
+You may extract a single document from such a collection, and
+distribute it individually under this License, provided you insert a
+copy of this License into the extracted document, and follow this
+License in all other respects regarding verbatim copying of that
+document.
+
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an "aggregate" if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections.  You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers.  In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements",
+"Dedications", or "History", the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the
+GNU Free Documentation License from time to time.  Such new versions
+will be similar in spirit to the present version, but may differ in
+detail to address new problems or concerns.  See
+http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation.  If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.  If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
+11. RELICENSING
+
+"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works.  A
+public wiki that anybody can edit is an example of such a server.  A
+"Massive Multiauthor Collaboration" (or "MMC") contained in the site
+means any set of copyrightable works thus published on the MMC site.
+
+"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 
+license published by Creative Commons Corporation, a not-for-profit 
+corporation with a principal place of business in San Francisco, 
+California, as well as future copyleft versions of that license 
+published by that same organization.
+
+"Incorporate" means to publish or republish a Document, in whole or in 
+part, as part of another Document.
+
+An MMC is "eligible for relicensing" if it is licensed under this 
+License, and if all works that were first published under this License 
+somewhere other than this MMC, and subsequently incorporated in whole or 
+in part into the MMC, (1) had no cover texts or invariant sections, and 
+(2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+    Copyright (c)  YEAR  YOUR NAME.
+    Permission is granted to copy, distribute and/or modify this document
+    under the terms of the GNU Free Documentation License, Version 1.3
+    or any later version published by the Free Software Foundation;
+    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+    A copy of the license is included in the section entitled "GNU
+    Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the "with...Texts." line with this:
+
+    with the Invariant Sections being LIST THEIR TITLES, with the
+    Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
Index: trunk/kBuild/doc/Makefile.kmk
===================================================================
--- trunk/kBuild/doc/Makefile.kmk	(revision 2146)
+++ trunk/kBuild/doc/Makefile.kmk	(revision 2146)
@@ -0,0 +1,6 @@
+
+QuickReference-kmk.html: QuickReference-kmk.txt
+	LC_ALL=C rst2html.py --no-generator $< $@
+
+QuickReference-kmk.o: QuickReference-kmk.html
+.PHONY: QuickReference-kmk.o
Index: trunk/kBuild/doc/QuickReference-kmk.html
===================================================================
--- trunk/kBuild/doc/QuickReference-kmk.html	(revision 2146)
+++ trunk/kBuild/doc/QuickReference-kmk.html	(revision 2146)
@@ -0,0 +1,1082 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
+<title>kmk Quick Reference</title>
+<style type="text/css">
+
+/*
+:Author: David Goodger
+:Contact: goodger@users.sourceforge.net
+:Date: $Date$
+:Revision: $Revision$
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+customize this style sheet.
+*/
+
+/* used to remove borders from tables and images */
+.borderless, table.borderless td, table.borderless th {
+  border: 0 }
+
+table.borderless td, table.borderless th {
+  /* Override padding for "table.docutils td" with "! important".
+     The right padding separates the table cells. */
+  padding: 0 0.5em 0 0 ! important }
+
+.first {
+  /* Override more specific margin styles with "! important". */
+  margin-top: 0 ! important }
+
+.last, .with-subtitle {
+  margin-bottom: 0 ! important }
+
+.hidden {
+  display: none }
+
+a.toc-backref {
+  text-decoration: none ;
+  color: black }
+
+blockquote.epigraph {
+  margin: 2em 5em ; }
+
+dl.docutils dd {
+  margin-bottom: 0.5em }
+
+/* Uncomment (and remove this text!) to get bold-faced definition list terms
+dl.docutils dt {
+  font-weight: bold }
+*/
+
+div.abstract {
+  margin: 2em 5em }
+
+div.abstract p.topic-title {
+  font-weight: bold ;
+  text-align: center }
+
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+  margin: 2em ;
+  border: medium outset ;
+  padding: 1em }
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title {
+  font-weight: bold ;
+  font-family: sans-serif }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title {
+  color: red ;
+  font-weight: bold ;
+  font-family: sans-serif }
+
+/* Uncomment (and remove this text!) to get reduced vertical space in
+   compound paragraphs.
+div.compound .compound-first, div.compound .compound-middle {
+  margin-bottom: 0.5em }
+
+div.compound .compound-last, div.compound .compound-middle {
+  margin-top: 0.5em }
+*/
+
+div.dedication {
+  margin: 2em 5em ;
+  text-align: center ;
+  font-style: italic }
+
+div.dedication p.topic-title {
+  font-weight: bold ;
+  font-style: normal }
+
+div.figure {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+div.footer, div.header {
+  clear: both;
+  font-size: smaller }
+
+div.line-block {
+  display: block ;
+  margin-top: 1em ;
+  margin-bottom: 1em }
+
+div.line-block div.line-block {
+  margin-top: 0 ;
+  margin-bottom: 0 ;
+  margin-left: 1.5em }
+
+div.sidebar {
+  margin-left: 1em ;
+  border: medium outset ;
+  padding: 1em ;
+  background-color: #ffffee ;
+  width: 40% ;
+  float: right ;
+  clear: right }
+
+div.sidebar p.rubric {
+  font-family: sans-serif ;
+  font-size: medium }
+
+div.system-messages {
+  margin: 5em }
+
+div.system-messages h1 {
+  color: red }
+
+div.system-message {
+  border: medium outset ;
+  padding: 1em }
+
+div.system-message p.system-message-title {
+  color: red ;
+  font-weight: bold }
+
+div.topic {
+  margin: 2em }
+
+h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
+h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
+  margin-top: 0.4em }
+
+h1.title {
+  text-align: center }
+
+h2.subtitle {
+  text-align: center }
+
+hr.docutils {
+  width: 75% }
+
+img.align-left {
+  clear: left }
+
+img.align-right {
+  clear: right }
+
+ol.simple, ul.simple {
+  margin-bottom: 1em }
+
+ol.arabic {
+  list-style: decimal }
+
+ol.loweralpha {
+  list-style: lower-alpha }
+
+ol.upperalpha {
+  list-style: upper-alpha }
+
+ol.lowerroman {
+  list-style: lower-roman }
+
+ol.upperroman {
+  list-style: upper-roman }
+
+p.attribution {
+  text-align: right ;
+  margin-left: 50% }
+
+p.caption {
+  font-style: italic }
+
+p.credits {
+  font-style: italic ;
+  font-size: smaller }
+
+p.label {
+  white-space: nowrap }
+
+p.rubric {
+  font-weight: bold ;
+  font-size: larger ;
+  color: maroon ;
+  text-align: center }
+
+p.sidebar-title {
+  font-family: sans-serif ;
+  font-weight: bold ;
+  font-size: larger }
+
+p.sidebar-subtitle {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+p.topic-title {
+  font-weight: bold }
+
+pre.address {
+  margin-bottom: 0 ;
+  margin-top: 0 ;
+  font-family: serif ;
+  font-size: 100% }
+
+pre.literal-block, pre.doctest-block {
+  margin-left: 2em ;
+  margin-right: 2em ;
+  background-color: #eeeeee }
+
+span.classifier {
+  font-family: sans-serif ;
+  font-style: oblique }
+
+span.classifier-delimiter {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+span.interpreted {
+  font-family: sans-serif }
+
+span.option {
+  white-space: nowrap }
+
+span.pre {
+  white-space: pre }
+
+span.problematic {
+  color: red }
+
+span.section-subtitle {
+  /* font-size relative to parent (h1..h6 element) */
+  font-size: 80% }
+
+table.citation {
+  border-left: solid 1px gray;
+  margin-left: 1px }
+
+table.docinfo {
+  margin: 2em 4em }
+
+table.docutils {
+  margin-top: 0.5em ;
+  margin-bottom: 0.5em }
+
+table.footnote {
+  border-left: solid 1px black;
+  margin-left: 1px }
+
+table.docutils td, table.docutils th,
+table.docinfo td, table.docinfo th {
+  padding-left: 0.5em ;
+  padding-right: 0.5em ;
+  vertical-align: top }
+
+table.docutils th.field-name, table.docinfo th.docinfo-name {
+  font-weight: bold ;
+  text-align: left ;
+  white-space: nowrap ;
+  padding-left: 0 }
+
+h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
+h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
+  font-size: 100% }
+
+tt.docutils {
+  background-color: #eeeeee }
+
+ul.auto-toc {
+  list-style-type: none }
+
+</style>
+</head>
+<body>
+<div class="document" id="kmk-quick-reference">
+<h1 class="title">kmk Quick Reference</h1>
+<p>This appendix summarizes the directives, text manipulation functions, and
+special variables which <tt class="docutils literal"><span class="pre">kmk</span></tt> understands.</p>
+<!-- See section Special Built-in Target Names and Summary of Options, for other
+summaries. -->
+<div class="section">
+<h1><a id="directives" name="directives">Directives</a></h1>
+<p>Here is a summary of the directives <tt class="docutils literal"><span class="pre">kmk</span></tt> recognizes:</p>
+<blockquote>
+<p>Define a multi-line, recursively-expanded variable:</p>
+<pre class="literal-block">
+define variable
+endef
+</pre>
+<p>Conditionally evaluate part of the makefile:</p>
+<pre class="literal-block">
+ifdef variable
+ifndef variable
+ifeq (a,b)
+ifeq &quot;a&quot; &quot;b&quot;
+ifeq 'a' 'b'
+ifneq (a,b)
+ifneq &quot;a&quot; &quot;b&quot;
+ifneq 'a' 'b'
+if1of (set-a,set-b)
+ifn1of (set-a,set-b)
+if expression
+else
+endif
+</pre>
+<p>Include another makefile:</p>
+<pre class="literal-block">
+include file
+-include file
+sinclude file
+</pre>
+<p>Include another dependency file:</p>
+<pre class="literal-block">
+includedep file
+</pre>
+<p>Define a variable, overriding any previous definition, even one from the
+command line:</p>
+<pre class="literal-block">
+override variable = value
+override variable := value
+override variable += value
+override variable &lt;= value
+override variable ?= value
+override define variable
+endef
+</pre>
+<p>Tell <tt class="docutils literal"><span class="pre">kmk</span></tt> to export all variables to child processes by default:</p>
+<pre class="literal-block">
+export
+</pre>
+<p>Tell <tt class="docutils literal"><span class="pre">kmk</span></tt> whether or not to export a particular variable to child
+processes:</p>
+<pre class="literal-block">
+export variable
+export variable = value
+export variable := value
+export variable += value
+export variable &lt;= value
+export variable ?= value
+unexport variable
+</pre>
+<p>Define a variable in the local context instead of the global one:</p>
+<pre class="literal-block">
+local variable = value
+local variable := value
+local variable += value
+local variable &lt;= value
+local variable ?= value
+local define variable
+endef
+</pre>
+<p>Specify a search path for files matching a <tt class="docutils literal"><span class="pre">%</span></tt> pattern:</p>
+<pre class="literal-block">
+vpath pattern path
+</pre>
+<p>Remove all search paths previously specified for pattern:</p>
+<pre class="literal-block">
+vpath pattern
+</pre>
+<p>Remove all search paths previously specified in any vpath directive:</p>
+<pre class="literal-block">
+vpath
+</pre>
+</blockquote>
+</div>
+<div class="section">
+<h1><a id="automatic-variables" name="automatic-variables">Automatic variables</a></h1>
+<p>Here is a summary of the automatic variables.</p>
+<table border="1" class="docutils">
+<colgroup>
+<col width="14%" />
+<col width="86%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Variable</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td><tt class="docutils literal"><span class="pre">$&#64;</span></tt></td>
+<td>The file name of the target.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">$&lt;</span></tt></td>
+<td>The name of the first prerequisite.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">$?</span></tt></td>
+<td>The names of all the prerequisites that are newer than the
+target, with spaces between them.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">$^</span></tt></td>
+<td>The names of all the prerequisites, duplicates omitted.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">$+</span></tt></td>
+<td>The names of all the prerequisites, duplicates and order
+preserved</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">$*</span></tt></td>
+<td>The stem with which an implicit rule matches.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">$|</span></tt></td>
+<td>The name of all the order only prerequisites.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">$(&#64;D)</span></tt></td>
+<td>The directory part of <tt class="docutils literal"><span class="pre">$&#64;</span></tt>.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">$(&lt;D)</span></tt></td>
+<td>The directory part of <tt class="docutils literal"><span class="pre">$&lt;</span></tt>.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">$(?D)</span></tt></td>
+<td>The directory part of <tt class="docutils literal"><span class="pre">$?</span></tt>.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">$(^D)</span></tt></td>
+<td>The directory part of <tt class="docutils literal"><span class="pre">%^</span></tt>.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">$(+D)</span></tt></td>
+<td>The directory part of <tt class="docutils literal"><span class="pre">$+</span></tt>.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">$(*D)</span></tt></td>
+<td>The directory part of <tt class="docutils literal"><span class="pre">$*</span></tt>.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">$(|D)</span></tt></td>
+<td>The directory part of <tt class="docutils literal"><span class="pre">$|</span></tt>.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">$(&#64;F)</span></tt></td>
+<td>The file-within-directory part of <tt class="docutils literal"><span class="pre">$&#64;</span></tt>.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">$(&lt;F)</span></tt></td>
+<td>The file-within-directory part of <tt class="docutils literal"><span class="pre">$&lt;</span></tt>.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">$(?F)</span></tt></td>
+<td>The file-within-directory part of <tt class="docutils literal"><span class="pre">$?</span></tt>.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">$(^F)</span></tt></td>
+<td>The file-within-directory part of <tt class="docutils literal"><span class="pre">$^</span></tt>.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">$(+F)</span></tt></td>
+<td>The file-within-directory part of <tt class="docutils literal"><span class="pre">$+</span></tt>.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">$(*F)</span></tt></td>
+<td>The file-within-directory part of <tt class="docutils literal"><span class="pre">$*</span></tt>.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">$(|F)</span></tt></td>
+<td>The file-within-directory part of <tt class="docutils literal"><span class="pre">$|</span></tt>.</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section">
+<h1><a id="special-variables" name="special-variables">Special variables</a></h1>
+<p>All variables starting with a <tt class="docutils literal"><span class="pre">.</span></tt> is reserved by <tt class="docutils literal"><span class="pre">kmk</span></tt>. The following
+variables are specially used or/and defined by <tt class="docutils literal"><span class="pre">kmk</span></tt>:</p>
+<table border="1" class="docutils">
+<colgroup>
+<col width="34%" />
+<col width="66%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Variable</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td><tt class="docutils literal"><span class="pre">.DEFAULT_GOAL</span></tt></td>
+<td>The makefile default goal. You can set this in
+the makefile, if you don't it will default to
+the first target that is encountered.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">.FEATURES</span></tt></td>
+<td>List of GNU <tt class="docutils literal"><span class="pre">make</span></tt> features. Do not set this.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">.INCLUDE_DIRS</span></tt></td>
+<td>List of include directories, <tt class="docutils literal"><span class="pre">-I</span></tt> arguments
+and defaults. Do not set this.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">.RECIPEPREFIX</span></tt></td>
+<td>Recipe prefix, defaults to tab.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">.VARIABLES</span></tt></td>
+<td>Special variable which exands to the list of
+variable. Do not set this.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">CURDIR</span></tt></td>
+<td>Set to the pathname of the current working
+directory (after all <tt class="docutils literal"><span class="pre">-C</span></tt> options are
+processed, if any). Do not set this.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">KBUILD_VERSION</span></tt>,
+<tt class="docutils literal"><span class="pre">KBUILD_VERSION_MAJOR</span></tt>,
+<tt class="docutils literal"><span class="pre">KBUILD_VERSION_MINOR</span></tt>,
+<tt class="docutils literal"><span class="pre">KBUILD_VERSION_PATCH</span></tt>,
+<tt class="docutils literal"><span class="pre">KBUILD_KMK_REVISION</span></tt></td>
+<td>The kBuild version string and the break down
+into individual components.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">KBUILD_HOST</span></tt></td>
+<td>The host operating system.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">KBUILD_HOST_ARCH</span></tt></td>
+<td>The host architecture.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">KBUILD_HOST_CPU</span></tt></td>
+<td>The host CPU <tt class="docutils literal"><span class="pre">kmk</span></tt> is built for, set to
+<tt class="docutils literal"><span class="pre">blend</span></tt> if not any particular CPU.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">KBUILD_PATH</span></tt></td>
+<td>Where the kBuild scripts are.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">KBUILD_BIN_PATH</span></tt></td>
+<td>Where the host specific kBuild binaries are.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">KMK</span></tt>,
+<tt class="docutils literal"><span class="pre">MAKE</span></tt></td>
+<td>The name with which <tt class="docutils literal"><span class="pre">kmk</span></tt> was invoked. Using
+this variable in recipes has special meaning.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">KMK_BUILTIN</span></tt></td>
+<td>List of built-in commands.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">KMK_FEATURES</span></tt></td>
+<td>List of <tt class="docutils literal"><span class="pre">kmk</span></tt> specific features.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">KMK_FLAGS</span></tt></td>
+<td><p class="first">The flags given to <tt class="docutils literal"><span class="pre">kmk</span></tt>. You can set this in
+the environment or a makefile to set flags.</p>
+<p class="last">It is never appropriate to use <tt class="docutils literal"><span class="pre">KMK_FLAGS</span></tt>
+directly in a recipe line: its contents may not
+be quoted correctly for use in the shell. Always
+allow recursive <tt class="docutils literal"><span class="pre">kmk</span></tt>'s to obtain these values
+through the environment from its parent.</p>
+</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">KMK_LEVEL</span></tt></td>
+<td>The number of levels of recursion (sub-makes).</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">KMK_VERSION</span></tt></td>
+<td>The GNU <tt class="docutils literal"><span class="pre">make</span></tt> version number.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">MAKECMDGOALS</span></tt></td>
+<td>The targets given to <tt class="docutils literal"><span class="pre">kmk</span></tt> on the command line.
+Do not set this.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">MAKEFILES</span></tt></td>
+<td>Makefiles to be read on every invocation of
+<tt class="docutils literal"><span class="pre">kmk</span></tt>.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">MAKEFILE_LIST</span></tt></td>
+<td>List of the makefiles that <tt class="docutils literal"><span class="pre">kmk</span></tt> has opened.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">MAKESHELL</span></tt></td>
+<td>OS/2 and MS-DOS only, the name of the command
+interpreter that is to be used by <tt class="docutils literal"><span class="pre">kmk</span></tt>. This
+value takes precedence over the value of SHELL.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">SHELL</span></tt></td>
+<td>The name of the default command interpreter,
+kmk_ash. You can set SHELL in the makefile to
+change the shell used to run recipes. The SHELL
+variable is handled specially when importing
+from and exporting to the environment.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">SUFFIXES</span></tt></td>
+<td>The default list of suffixes before <tt class="docutils literal"><span class="pre">kmk</span></tt>
+reads any makefiles (always empty).</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">VPATH</span></tt></td>
+<td>Directory search path for files not found in the
+current directory.</td>
+</tr>
+</tbody>
+</table>
+<p>The following variables reflects <tt class="docutils literal"><span class="pre">kmk</span></tt> options. Do not set these.</p>
+<table border="1" class="docutils">
+<colgroup>
+<col width="49%" />
+<col width="51%" />
+</colgroup>
+<thead valign="bottom">
+<tr><th class="head">Variable</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr><td><tt class="docutils literal"><span class="pre">KMK_OPTS_JOBS</span></tt></td>
+<td>-j slots, <tt class="docutils literal"><span class="pre">0</span></tt> if not given.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">KMK_OPTS_KEEP_GOING</span></tt></td>
+<td>-k indictor (<tt class="docutils literal"><span class="pre">0</span></tt>/<tt class="docutils literal"><span class="pre">1</span></tt>).</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">KMK_OPTS_JUST_PRINT</span></tt></td>
+<td>-n indicator (<tt class="docutils literal"><span class="pre">0</span></tt>/<tt class="docutils literal"><span class="pre">1</span></tt>).</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">KMK_OPTS_PRORITY</span></tt></td>
+<td>--priority level, <tt class="docutils literal"><span class="pre">0</span></tt> if not given.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">KMK_OPTS_AFFINITY</span></tt></td>
+<td>--affinity mask, <tt class="docutils literal"><span class="pre">0</span></tt> if not given.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">KMK_OPTS_STATISTICS</span></tt></td>
+<td>--statistics indicator (<tt class="docutils literal"><span class="pre">0</span></tt>/<tt class="docutils literal"><span class="pre">1</span></tt>).</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">KMK_OPTS_PRINT_TIME</span></tt></td>
+<td>The --print-time value.</td>
+</tr>
+<tr><td><tt class="docutils literal"><span class="pre">KMK_OPTS_PRETTY_COMMAND_PRINTING</span></tt></td>
+<td>--pretty-command-printing indicator.</td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="section">
+<h1><a id="built-in-functions" name="built-in-functions">Built-in functions</a></h1>
+<p>String Manipulation Functions:</p>
+<blockquote>
+<p>Replace <tt class="docutils literal"><span class="pre">from</span></tt> with <tt class="docutils literal"><span class="pre">to</span></tt> in <tt class="docutils literal"><span class="pre">text</span></tt>:</p>
+<pre class="literal-block">
+$(subst from,to,text)
+</pre>
+<p>Replace words matching <tt class="docutils literal"><span class="pre">pattern</span></tt> with <tt class="docutils literal"><span class="pre">replacement</span></tt> in <tt class="docutils literal"><span class="pre">text</span></tt>:</p>
+<pre class="literal-block">
+$(patsubst pattern,replacement,text)
+</pre>
+<p>Remove excess whitespace characters from <tt class="docutils literal"><span class="pre">string</span></tt>:</p>
+<pre class="literal-block">
+$(strip string)
+</pre>
+<p>Locate <tt class="docutils literal"><span class="pre">find</span></tt> in <tt class="docutils literal"><span class="pre">text</span></tt>, returning <tt class="docutils literal"><span class="pre">find</span></tt> if found:</p>
+<pre class="literal-block">
+$(findstring find,text)
+</pre>
+<p>Select words in <tt class="docutils literal"><span class="pre">text</span></tt> that match one of the <tt class="docutils literal"><span class="pre">pattern</span></tt> words:</p>
+<pre class="literal-block">
+$(filter pattern...,text)
+</pre>
+<p>Select words in <tt class="docutils literal"><span class="pre">text</span></tt> that do not match any of the <tt class="docutils literal"><span class="pre">pattern</span></tt> words:</p>
+<pre class="literal-block">
+$(filter-out pattern...,text)
+</pre>
+<p>Sort the words in <tt class="docutils literal"><span class="pre">list</span></tt> lexicographically, removing duplicates:</p>
+<pre class="literal-block">
+$(sort list)
+</pre>
+<p>Sort the words in <tt class="docutils literal"><span class="pre">list</span></tt> lexicographically in reserve order, removing
+duplicates:</p>
+<pre class="literal-block">
+$(rsort list)
+</pre>
+<p>Count the number of words in <tt class="docutils literal"><span class="pre">text</span></tt>:</p>
+<pre class="literal-block">
+$(words text)
+</pre>
+<p>Extract the <tt class="docutils literal"><span class="pre">n</span></tt>th word (one-origin) of <tt class="docutils literal"><span class="pre">text</span></tt>:</p>
+<pre class="literal-block">
+$(word n,text)
+</pre>
+<p>Returns the list of words in <tt class="docutils literal"><span class="pre">text</span></tt> from <tt class="docutils literal"><span class="pre">s</span></tt> to <tt class="docutils literal"><span class="pre">e</span></tt> (one-origin):</p>
+<pre class="literal-block">
+$(wordlist s,e,text)
+</pre>
+<p>Extract the first word of <tt class="docutils literal"><span class="pre">names</span></tt>:</p>
+<pre class="literal-block">
+$(firstword names...)
+</pre>
+<p>Extract the last word of <tt class="docutils literal"><span class="pre">names</span></tt>:</p>
+<pre class="literal-block">
+$(lastword names...)
+</pre>
+<p>Join two parallel lists of words:</p>
+<pre class="literal-block">
+$(join list1,list2)
+</pre>
+<p>Fold <tt class="docutils literal"><span class="pre">text</span></tt> to upper case:</p>
+<pre class="literal-block">
+$(toupper text)
+</pre>
+<p>Fold <tt class="docutils literal"><span class="pre">text</span></tt> to lower case:</p>
+<pre class="literal-block">
+$(tolower text)
+</pre>
+<p>String formatting a la the unix <tt class="docutils literal"><span class="pre">printf</span></tt> command:</p>
+<pre class="literal-block">
+$(printf fmt, arg...)
+</pre>
+</blockquote>
+<p>Functions for file names:</p>
+<blockquote>
+<p>Extract the directory part of each file <tt class="docutils literal"><span class="pre">name</span></tt>:</p>
+<pre class="literal-block">
+$(dir names...)
+</pre>
+<p>Extract the non-directory part of each file <tt class="docutils literal"><span class="pre">name</span></tt>:</p>
+<pre class="literal-block">
+$(notdir names...)
+</pre>
+<p>Extract the suffix (the last <tt class="docutils literal"><span class="pre">.</span></tt> and following characters) of each file
+<tt class="docutils literal"><span class="pre">name</span></tt>:</p>
+<pre class="literal-block">
+$(suffix names...)
+</pre>
+<p>Extract the base name (name without suffix) of each file name:</p>
+<pre class="literal-block">
+$(basename names...)
+</pre>
+<p>Append <tt class="docutils literal"><span class="pre">suffix</span></tt> to each word in <tt class="docutils literal"><span class="pre">names</span></tt>:</p>
+<pre class="literal-block">
+$(addsuffix suffix,names...)
+</pre>
+<p>Prepend <tt class="docutils literal"><span class="pre">prefix</span></tt> to each word in <tt class="docutils literal"><span class="pre">names</span></tt>:</p>
+<pre class="literal-block">
+$(addprefix prefix,names...)
+</pre>
+<p>Find file names matching a shell file name <tt class="docutils literal"><span class="pre">pattern</span></tt> (not a <tt class="docutils literal"><span class="pre">%</span></tt>
+pattern):</p>
+<pre class="literal-block">
+$(wildcard pattern...)
+</pre>
+<p>For each file name in <tt class="docutils literal"><span class="pre">names</span></tt>, expand to an absolute name that does not
+contain any <tt class="docutils literal"><span class="pre">.</span></tt>, <tt class="docutils literal"><span class="pre">..</span></tt>, nor symlinks:</p>
+<pre class="literal-block">
+$(realpath names...)
+</pre>
+<p>For each file name in <tt class="docutils literal"><span class="pre">names</span></tt>, expand to an absolute name that does not
+contain any <tt class="docutils literal"><span class="pre">.</span></tt> or <tt class="docutils literal"><span class="pre">..</span></tt> components, but preserves symlinks:</p>
+<pre class="literal-block">
+$(abspath names...)
+</pre>
+<p>Same as <tt class="docutils literal"><span class="pre">$(abspath</span> <span class="pre">)</span></tt> except that the current directory can be
+specified as <tt class="docutils literal"><span class="pre">curdir</span></tt>:</p>
+<pre class="literal-block">
+$(abspathex names...[, curdir])
+</pre>
+</blockquote>
+<p>Arithmetic Functions:</p>
+<blockquote>
+<p>Returns the sum of the arguments:</p>
+<pre class="literal-block">
+$(int-add addend1, addend2[, addendN])
+</pre>
+<p>Returns the difference between the first argument and the sum of the rest:</p>
+<pre class="literal-block">
+$(int-sub minuend, subtrahend[, subtrahendN])
+</pre>
+<p>Returns the product of the arguments:</p>
+<pre class="literal-block">
+$(int-mul factor1, factor2[, factorN])
+</pre>
+<p>Returns the quotient of first argument and the rest:</p>
+<pre class="literal-block">
+$(int-div dividend, divisor[, divisorN])
+</pre>
+<p>Returns the modulus of the two arguments:</p>
+<pre class="literal-block">
+$(int-mod dividend, divisor)
+</pre>
+<p>Returns the bitwise two-complement of argument:</p>
+<pre class="literal-block">
+$(int-not val)
+</pre>
+<p>Returns the result of a bitwise AND of the arguments:</p>
+<pre class="literal-block">
+$(int-and val1, val2[, valN])
+</pre>
+<p>Returns the result of a bitwise OR of the arguments:</p>
+<pre class="literal-block">
+$(int-or val1, val2[, valN])
+</pre>
+<p>Returns the result of a bitwise XOR of the arguments:</p>
+<pre class="literal-block">
+$(int-xor val1, val2[, valN])
+</pre>
+<p>Returns the <tt class="docutils literal"><span class="pre">kmk</span></tt> boolean (true = non-empty, false = empty) result
+of <tt class="docutils literal"><span class="pre">val1</span> <span class="pre">==</span> <span class="pre">val2</span></tt>:</p>
+<pre class="literal-block">
+$(int-eq val1, val2)
+</pre>
+<p>Returns the <tt class="docutils literal"><span class="pre">kmk</span></tt> boolean result of <tt class="docutils literal"><span class="pre">val1</span> <span class="pre">!=</span> <span class="pre">val2</span></tt>:</p>
+<pre class="literal-block">
+$(int-ne val1, val2)
+</pre>
+<p>Returns the <tt class="docutils literal"><span class="pre">kmk</span></tt> boolean result of <tt class="docutils literal"><span class="pre">val1</span> <span class="pre">&gt;</span> <span class="pre">val2</span></tt>:</p>
+<pre class="literal-block">
+$(int-gt val1, val2)
+</pre>
+<p>Returns the <tt class="docutils literal"><span class="pre">kmk</span></tt> boolean result of <tt class="docutils literal"><span class="pre">val1</span> <span class="pre">&gt;=</span> <span class="pre">val2</span></tt>:</p>
+<pre class="literal-block">
+$(int-ge val1, val2)
+</pre>
+<p>Returns the <tt class="docutils literal"><span class="pre">kmk</span></tt> boolean result of <tt class="docutils literal"><span class="pre">val1</span> <span class="pre">&lt;</span> <span class="pre">val2</span></tt>:</p>
+<pre class="literal-block">
+$(int-lt val1, val2)
+</pre>
+<p>Returns the <tt class="docutils literal"><span class="pre">kmk</span></tt> boolean result of <tt class="docutils literal"><span class="pre">val1</span> <span class="pre">&lt;=</span> <span class="pre">val2</span></tt>:</p>
+<pre class="literal-block">
+$(int-le val1, val2)
+</pre>
+</blockquote>
+<p>(Mostly) Boolean Functions:</p>
+<blockquote>
+<p>Condition is false if the <tt class="docutils literal"><span class="pre">condition</span></tt> evaluates to an empty string
+(stripped). Evaluate the <tt class="docutils literal"><span class="pre">true-part</span></tt> if the condition is true, otherwise
+the <tt class="docutils literal"><span class="pre">false-part</span></tt>:</p>
+<pre class="literal-block">
+$(if condition,true-part[,false-part])
+</pre>
+<p>Test if any of the conditions evalues to non-empty string, returning the
+first one:</p>
+<pre class="literal-block">
+$(or condition1[,condition2[,condition3[...]]])
+</pre>
+<p>Test if all of the conditions evaluates to non-empty strings, returning the
+last one:</p>
+<pre class="literal-block">
+$(and condition1[,condition2[,condition3[...]]])
+</pre>
+<p>Test if the two strings are identical, returning <tt class="docutils literal"><span class="pre">kmk</span></tt> boolean (true =
+non-empty, false = empty):</p>
+<pre class="literal-block">
+$(eq str1, str2)
+</pre>
+<p>Invert a <tt class="docutils literal"><span class="pre">kmk</span></tt> boolean value:</p>
+<pre class="literal-block">
+$(not val)
+</pre>
+<p>Test if <tt class="docutils literal"><span class="pre">variable</span></tt> is defined, returning a <tt class="docutils literal"><span class="pre">kmk</span></tt> boolean value:</p>
+<pre class="literal-block">
+$(defined variable)
+</pre>
+<p>Test if <tt class="docutils literal"><span class="pre">set-a</span></tt> and <tt class="docutils literal"><span class="pre">set-b</span></tt> intersects, returning a <tt class="docutils literal"><span class="pre">kmk</span></tt> boolean
+value:</p>
+<pre class="literal-block">
+$(intersects set-a, set-b)
+</pre>
+<p>Same as <tt class="docutils literal"><span class="pre">$(if</span> <span class="pre">)</span></tt> execpt that the condition is a <tt class="docutils literal"><span class="pre">kmk</span></tt> expression:</p>
+<pre class="literal-block">
+$(if kmk-expression,true-part[,false-part])
+</pre>
+<p>Evalutate the <tt class="docutils literal"><span class="pre">kmk</span></tt> expression returning what it evalues as. This is
+the preferred way of doing arithmentic now:</p>
+<pre class="literal-block">
+$(expr kmk-expression)
+</pre>
+</blockquote>
+<p>Stack Fuctions:</p>
+<blockquote>
+<p>Push <tt class="docutils literal"><span class="pre">item</span></tt> onto the <tt class="docutils literal"><span class="pre">stack-var</span></tt>, returning the empty string:</p>
+<pre class="literal-block">
+$(stack-push stack-var, item)
+</pre>
+<p>Pop the top item off the <tt class="docutils literal"><span class="pre">stack-var</span></tt>:</p>
+<pre class="literal-block">
+$(stack-pop stack-var)
+</pre>
+<p>Pop the top item off the <tt class="docutils literal"><span class="pre">stack-var</span></tt>, returning the empty string:</p>
+<pre class="literal-block">
+$(stack-popv stack-var)
+</pre>
+<p>Get the top item of the <tt class="docutils literal"><span class="pre">stack-var</span></tt>, returning the empty string:</p>
+<pre class="literal-block">
+$(stack-top stack-var)
+</pre>
+</blockquote>
+<p>Advanced Functions:</p>
+<blockquote>
+<p>Evaluates to the contents of the variable <tt class="docutils literal"><span class="pre">var</span></tt>, with no expansion
+performed on it:</p>
+<pre class="literal-block">
+$(value var)
+</pre>
+<p>Evaluate <tt class="docutils literal"><span class="pre">text</span></tt> with <tt class="docutils literal"><span class="pre">var</span></tt> bound to each word in <tt class="docutils literal"><span class="pre">words</span></tt>, and
+concatenate the results (spaced):</p>
+<pre class="literal-block">
+$(foreach var,words,text)
+</pre>
+<p>Evaluate the variable <tt class="docutils literal"><span class="pre">var</span></tt> replacing any references to <tt class="docutils literal"><span class="pre">$(1)</span></tt>,
+<tt class="docutils literal"><span class="pre">$(2)</span></tt> with the first, second, etc. <tt class="docutils literal"><span class="pre">param</span></tt> values:</p>
+<pre class="literal-block">
+$(call var,param,...)
+</pre>
+<p>Evaluate <tt class="docutils literal"><span class="pre">text</span></tt> then read the results as makefile commands. Expands
+to the empty string:</p>
+<pre class="literal-block">
+$(eval text)
+</pre>
+<p>Same as <tt class="docutils literal"><span class="pre">$(eval</span> <span class="pre">text)</span></tt> except that the <tt class="docutils literal"><span class="pre">text</span></tt> is expanded in its
+own variable context:</p>
+<pre class="literal-block">
+$(evalctx text)
+</pre>
+<p>Same as <tt class="docutils literal"><span class="pre">$(eval</span> <span class="pre">$(value</span> <span class="pre">var))</span></tt>:</p>
+<pre class="literal-block">
+$(evalval var)
+</pre>
+<p>Same as <tt class="docutils literal"><span class="pre">$(evalctx</span> <span class="pre">$(value</span> <span class="pre">var))</span></tt>:</p>
+<pre class="literal-block">
+$(evalvalctx var)
+</pre>
+<p>A combination of <tt class="docutils literal"><span class="pre">$(eval</span> <span class="pre">)</span></tt>, <tt class="docutils literal"><span class="pre">$(call</span> <span class="pre">)</span></tt> and <tt class="docutils literal"><span class="pre">$(value</span> <span class="pre">)</span></tt>:</p>
+<pre class="literal-block">
+$(evalcall var)
+</pre>
+<p>A combination of <tt class="docutils literal"><span class="pre">$(eval</span> <span class="pre">)</span></tt> and <tt class="docutils literal"><span class="pre">$(call</span> <span class="pre">)</span></tt>:</p>
+<pre class="literal-block">
+$(evalcall var)
+</pre>
+<p>Remove comments and blank lines from the variable <tt class="docutils literal"><span class="pre">var</span></tt>. Expands to
+the empty string:</p>
+<pre class="literal-block">
+$(eval-opt-var var)
+</pre>
+<p>Returns accessing <tt class="docutils literal"><span class="pre">$&lt;</span></tt> of <tt class="docutils literal"><span class="pre">target</span></tt>, either retriving the whole thing
+or the file at <tt class="docutils literal"><span class="pre">pos</span></tt> (one-origin):</p>
+<pre class="literal-block">
+$(deps target[, pos])
+</pre>
+<p>Returns accessing <tt class="docutils literal"><span class="pre">$+</span></tt> (order + duplicates) of <tt class="docutils literal"><span class="pre">target</span></tt>, either
+retriving the whole thing or the file at <tt class="docutils literal"><span class="pre">pos</span></tt> (one-origin):</p>
+<pre class="literal-block">
+$(deps-all target[, pos])
+</pre>
+<p>Returns accessing <tt class="docutils literal"><span class="pre">$?</span></tt>  of <tt class="docutils literal"><span class="pre">target</span></tt>, either retriving the whole
+thing or the file at <tt class="docutils literal"><span class="pre">pos</span></tt> (one-origin):</p>
+<pre class="literal-block">
+$(deps-newer target[, pos])
+</pre>
+<p>Returns accessing <tt class="docutils literal"><span class="pre">$|</span></tt> (order only)  of <tt class="docutils literal"><span class="pre">target</span></tt>, either retriving the
+whole thing or the file at <tt class="docutils literal"><span class="pre">pos</span></tt> (one-origin):</p>
+<pre class="literal-block">
+$(deps-oo target[, pos])
+</pre>
+</blockquote>
+<p>Command Functions:</p>
+<blockquote>
+<p>Create one or more command lines avoiding the max argument
+length restriction of the host OS:</p>
+<pre class="literal-block">
+$(xargs ar cas mylib.a,$(objects))
+$(xargs ar cas mylib.a,ar as mylib.a,$(objects))
+</pre>
+<p>Returns the commands for the specified target separated by new-line, space,
+or a user defined string. Note that this might not produce the 100% correct
+result if any of the prerequisite automatic variables are used:</p>
+<pre class="literal-block">
+$(commands target)
+$(commands-sc target)
+$(commands-usr target,sep)
+</pre>
+<p>Compares two commands returning the empty string if equal and the 3rd
+argument if not. This differs from <tt class="docutils literal"><span class="pre">$(comp-vars</span> <span class="pre">v1,v2,ne)</span></tt> in that
+line by line is stripped of leading spaces, command prefixes and
+trailing spaces before comparing:</p>
+<pre class="literal-block">
+$(comp-cmds cmds-var1, cmds-var2, ne)
+$(comp-cmds-ex cmds1, cmd2, ne)
+</pre>
+<p>Compares the values of the two variables returning the empty string if
+equal and the 3rd argument if not. Leading and trailing spaces is ignored:</p>
+<pre class="literal-block">
+$(comp-var var1, var2, ne)
+</pre>
+</blockquote>
+<p>Utility functions:</p>
+<blockquote>
+<p>When this function is evaluated, <tt class="docutils literal"><span class="pre">kmk</span></tt> generates a fatal error with the
+message <tt class="docutils literal"><span class="pre">text</span></tt>:</p>
+<pre class="literal-block">
+$(error text...)
+</pre>
+<p>When this function is evaluated, <tt class="docutils literal"><span class="pre">kmk</span></tt> generates a warning with the
+message <tt class="docutils literal"><span class="pre">text</span></tt>:</p>
+<pre class="literal-block">
+$(warning text...)
+</pre>
+<p>When this function is evaluated, <tt class="docutils literal"><span class="pre">kmk</span></tt> generates a info with the
+message <tt class="docutils literal"><span class="pre">text</span></tt>:</p>
+<pre class="literal-block">
+$(info text...)
+</pre>
+<p>Execute a shell <tt class="docutils literal"><span class="pre">command</span></tt> and return its output:</p>
+<pre class="literal-block">
+$(shell command)
+</pre>
+<p>Return a string describing how the <tt class="docutils literal"><span class="pre">kmk</span></tt> variable <tt class="docutils literal"><span class="pre">variable</span></tt> was defined:</p>
+<pre class="literal-block">
+$(origin variable)
+</pre>
+<p>Return a string describing the flavor of the <tt class="docutils literal"><span class="pre">kmk</span></tt> variable <tt class="docutils literal"><span class="pre">variable</span></tt>:</p>
+<pre class="literal-block">
+$(flavor variable)
+</pre>
+<p>Returns the current local time and date formatted in the <tt class="docutils literal"><span class="pre">strftime</span></tt>
+style specifier <tt class="docutils literal"><span class="pre">fmt</span></tt>. <tt class="docutils literal"><span class="pre">fmt</span></tt> defaults to <tt class="docutils literal"><span class="pre">%Y-%m-%dT%H:%M:%S</span></tt> when
+not specified:</p>
+<pre class="literal-block">
+$(date fmt)
+</pre>
+<p>Returns the current UTC time and date formatted in the <tt class="docutils literal"><span class="pre">strftime</span></tt>
+style specifier <tt class="docutils literal"><span class="pre">fmt</span></tt>. <tt class="docutils literal"><span class="pre">fmt</span></tt> defaults to <tt class="docutils literal"><span class="pre">%Y-%m-%dT%H:%M:%SZ</span></tt> when
+not specified:</p>
+<pre class="literal-block">
+$(date-utc fmt)
+</pre>
+<p>Reformats the <tt class="docutils literal"><span class="pre">in</span></tt> time and date using <tt class="docutils literal"><span class="pre">fmt</span></tt>. The <tt class="docutils literal"><span class="pre">in-fmt</span></tt> defaults
+to <tt class="docutils literal"><span class="pre">fmt</span></tt> if not specified. While <tt class="docutils literal"><span class="pre">fmt</span></tt> defaults to
+<tt class="docutils literal"><span class="pre">%Y-%m-%dT%H:%M:%SZ</span></tt> if not specified:</p>
+<pre class="literal-block">
+$(date-utc fmt,time,in-fmt)
+</pre>
+<p>Returns the current nanosecond timestamp (monotonic when possible):</p>
+<pre class="literal-block">
+$(nanots )
+</pre>
+<p>Returns the size of the specified file, or -1 if the size could not
+be obtained. This can be used to check if a file exist or not:</p>
+<pre class="literal-block">
+$(file-size file)
+</pre>
+<p>Searches the <tt class="docutils literal"><span class="pre">PATH</span></tt> <tt class="docutils literal"><span class="pre">kmk</span></tt> variable for the specified <tt class="docutils literal"><span class="pre">files</span></tt>:</p>
+<pre class="literal-block">
+$(which files...)
+</pre>
+<p>OS/2: Returns the specified LIBPATH variable value:</p>
+<pre class="literal-block">
+$(libpath var)
+</pre>
+<p>OS/2: Sets the specified LIBPATH variable value, returning the empty string:</p>
+<pre class="literal-block">
+$(libpath var,value)
+</pre>
+</blockquote>
+<p>Debugging Functions:</p>
+<blockquote>
+<p>Returns various make statistics, if no item is specified a default
+selection is returned:</p>
+<pre class="literal-block">
+$(make-stats item[,itemN])
+</pre>
+<p>Raise a debug breakpoint. Used for debugging <tt class="docutils literal"><span class="pre">kmk</span></tt> makefile parsing:</p>
+<pre class="literal-block">
+$(breakpoint )
+</pre>
+</blockquote>
+</div>
+<div class="section">
+<h1><a id="special-targets" name="special-targets">Special targets</a></h1>
+<p>todo</p>
+<hr class="docutils" />
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field"><th class="field-name">Status:</th><td class="field-body"><p class="first">$Id$</p>
+</td>
+</tr>
+<tr class="field"><th class="field-name">Copyright:</th><td class="field-body"><p class="first">Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
+1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
+2007 Free Software Foundation, Inc.</p>
+<p class="last">Copyright (C) 2008 Knut St. Osmundsen</p>
+</td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+</body>
+</html>
Index: trunk/kBuild/doc/QuickReference-kmk.txt
===================================================================
--- trunk/kBuild/doc/QuickReference-kmk.txt	(revision 2146)
+++ trunk/kBuild/doc/QuickReference-kmk.txt	(revision 2146)
@@ -0,0 +1,717 @@
+
+kmk Quick Reference
+===================
+
+This appendix summarizes the directives, text manipulation functions, and
+special variables which ``kmk`` understands.
+
+.. See section Special Built-in Target Names and Summary of Options, for other
+   summaries.
+
+
+Directives
+----------
+
+Here is a summary of the directives ``kmk`` recognizes:
+
+    Define a multi-line, recursively-expanded variable::
+
+        define variable
+        endef
+
+    Conditionally evaluate part of the makefile::
+
+        ifdef variable
+        ifndef variable
+        ifeq (a,b)
+        ifeq "a" "b"
+        ifeq 'a' 'b'
+        ifneq (a,b)
+        ifneq "a" "b"
+        ifneq 'a' 'b'
+        if1of (set-a,set-b)
+        ifn1of (set-a,set-b)
+        if expression
+        else
+        endif
+
+    Include another makefile::
+
+        include file
+        -include file
+        sinclude file
+
+    Include another dependency file::
+
+        includedep file
+
+    Define a variable, overriding any previous definition, even one from the
+    command line::
+
+        override variable = value
+        override variable := value
+        override variable += value
+        override variable <= value
+        override variable ?= value
+        override define variable
+        endef
+
+    Tell ``kmk`` to export all variables to child processes by default::
+
+        export
+
+    Tell ``kmk`` whether or not to export a particular variable to child
+    processes::
+
+        export variable
+        export variable = value
+        export variable := value
+        export variable += value
+        export variable <= value
+        export variable ?= value
+        unexport variable
+
+    Define a variable in the local context instead of the global one::
+
+        local variable = value
+        local variable := value
+        local variable += value
+        local variable <= value
+        local variable ?= value
+        local define variable
+        endef
+
+    Specify a search path for files matching a ``%`` pattern::
+
+        vpath pattern path
+
+    Remove all search paths previously specified for pattern::
+
+        vpath pattern
+
+    Remove all search paths previously specified in any vpath directive::
+
+        vpath
+
+
+
+Automatic variables
+-------------------
+
+Here is a summary of the automatic variables.
+
++-----------+-----------------------------------------------------------------+
+| Variable  | Description                                                     |
++===========+=================================================================+
+| ``$@``    | The file name of the target.                                    |
++-----------+-----------------------------------------------------------------+
+| ``$<``    | The name of the first prerequisite.                             |
++-----------+-----------------------------------------------------------------+
+| ``$?``    | The names of all the prerequisites that are newer than the      |
+|           | target, with spaces between them.                               |
++-----------+-----------------------------------------------------------------+
+| ``$^``    | The names of all the prerequisites, duplicates omitted.         |
++-----------+-----------------------------------------------------------------+
+| ``$+``    | The names of all the prerequisites, duplicates and order        |
+|           | preserved                                                       |
++-----------+-----------------------------------------------------------------+
+| ``$*``    | The stem with which an implicit rule matches.                   |
++-----------+-----------------------------------------------------------------+
+| ``$|``    | The name of all the order only prerequisites.                   |
++-----------+-----------------------------------------------------------------+
+| ``$(@D)`` | The directory part of ``$@``.                                   |
++-----------+-----------------------------------------------------------------+
+| ``$(<D)`` | The directory part of ``$<``.                                   |
++-----------+-----------------------------------------------------------------+
+| ``$(?D)`` | The directory part of ``$?``.                                   |
++-----------+-----------------------------------------------------------------+
+| ``$(^D)`` | The directory part of ``%^``.                                   |
++-----------+-----------------------------------------------------------------+
+| ``$(+D)`` | The directory part of ``$+``.                                   |
++-----------+-----------------------------------------------------------------+
+| ``$(*D)`` | The directory part of ``$*``.                                   |
++-----------+-----------------------------------------------------------------+
+| ``$(|D)`` | The directory part of ``$|``.                                   |
++-----------+-----------------------------------------------------------------+
+| ``$(@F)`` | The file-within-directory part of ``$@``.                       |
++-----------+-----------------------------------------------------------------+
+| ``$(<F)`` | The file-within-directory part of ``$<``.                       |
++-----------+-----------------------------------------------------------------+
+| ``$(?F)`` | The file-within-directory part of ``$?``.                       |
++-----------+-----------------------------------------------------------------+
+| ``$(^F)`` | The file-within-directory part of ``$^``.                       |
++-----------+-----------------------------------------------------------------+
+| ``$(+F)`` | The file-within-directory part of ``$+``.                       |
++-----------+-----------------------------------------------------------------+
+| ``$(*F)`` | The file-within-directory part of ``$*``.                       |
++-----------+-----------------------------------------------------------------+
+| ``$(|F)`` | The file-within-directory part of ``$|``.                       |
++-----------+-----------------------------------------------------------------+
+
+
+
+Special variables
+-----------------
+
+All variables starting with a ``.`` is reserved by ``kmk``. The following
+variables are specially used or/and defined by ``kmk``:
+
++--------------------------+--------------------------------------------------+
+| Variable                 | Description                                      |
++==========================+==================================================+
+| ``.DEFAULT_GOAL``        | The makefile default goal. You can set this in   |
+|                          | the makefile, if you don't it will default to    |
+|                          | the first target that is encountered.            |
++--------------------------+--------------------------------------------------+
+| ``.FEATURES``            | List of GNU ``make`` features. Do not set this.  |
++--------------------------+--------------------------------------------------+
+| ``.INCLUDE_DIRS``        | List of include directories, ``-I`` arguments    |
+|                          | and defaults. Do not set this.                   |
++--------------------------+--------------------------------------------------+
+| ``.RECIPEPREFIX``        | Recipe prefix, defaults to tab.                  |
++--------------------------+--------------------------------------------------+
+| ``.VARIABLES``           | Special variable which exands to the list of     |
+|                          | variable. Do not set this.                       |
++--------------------------+--------------------------------------------------+
+| ``CURDIR``               | Set to the pathname of the current working       |
+|                          | directory (after all ``-C`` options are          |
+|                          | processed, if any). Do not set this.             |
++--------------------------+--------------------------------------------------+
+| ``KBUILD_VERSION``,      | The kBuild version string and the break down     |
+| ``KBUILD_VERSION_MAJOR``,| into individual components.                      |
+| ``KBUILD_VERSION_MINOR``,|                                                  |
+| ``KBUILD_VERSION_PATCH``,|                                                  |
+| ``KBUILD_KMK_REVISION``  |                                                  |
++--------------------------+--------------------------------------------------+
+| ``KBUILD_HOST``          | The host operating system.                       |
++--------------------------+--------------------------------------------------+
+| ``KBUILD_HOST_ARCH``     | The host architecture.                           |
++--------------------------+--------------------------------------------------+
+| ``KBUILD_HOST_CPU``      | The host CPU ``kmk`` is built for, set to        |
+|                          | ``blend`` if not any particular CPU.             |
++--------------------------+--------------------------------------------------+
+| ``KBUILD_PATH``          | Where the kBuild scripts are.                    |
++--------------------------+--------------------------------------------------+
+| ``KBUILD_BIN_PATH``      | Where the host specific kBuild binaries are.     |
++--------------------------+--------------------------------------------------+
+| ``KMK``,                 | The name with which ``kmk`` was invoked. Using   |
+| ``MAKE``                 | this variable in recipes has special meaning.    |
++--------------------------+--------------------------------------------------+
+| ``KMK_BUILTIN``          | List of built-in commands.                       |
++--------------------------+--------------------------------------------------+
+| ``KMK_FEATURES``         | List of ``kmk`` specific features.               |
++--------------------------+--------------------------------------------------+
+| ``KMK_FLAGS``            | The flags given to ``kmk``. You can set this in  |
+|                          | the environment or a makefile to set flags.      |
+|                          |                                                  |
+|                          | It is never appropriate to use ``KMK_FLAGS``     |
+|                          | directly in a recipe line: its contents may not  |
+|                          | be quoted correctly for use in the shell. Always |
+|                          | allow recursive ``kmk``'s to obtain these values |
+|                          | through the environment from its parent.         |
++--------------------------+--------------------------------------------------+
+| ``KMK_LEVEL``            | The number of levels of recursion (sub-makes).   |
++--------------------------+--------------------------------------------------+
+| ``KMK_VERSION``          | The GNU ``make`` version number.                 |
++--------------------------+--------------------------------------------------+
+| ``MAKECMDGOALS``         | The targets given to ``kmk`` on the command line.|
+|                          | Do not set this.                                 |
++--------------------------+--------------------------------------------------+
+| ``MAKEFILES``            | Makefiles to be read on every invocation of      |
+|                          | ``kmk``.                                         |
++--------------------------+--------------------------------------------------+
+| ``MAKEFILE_LIST``        | List of the makefiles that ``kmk`` has opened.   |
++--------------------------+--------------------------------------------------+
+| ``MAKESHELL``            | OS/2 and MS-DOS only, the name of the command    |
+|                          | interpreter that is to be used by ``kmk``. This  |
+|                          | value takes precedence over the value of SHELL.  |
++--------------------------+--------------------------------------------------+
+| ``SHELL``                | The name of the default command interpreter,     |
+|                          | kmk_ash. You can set SHELL in the makefile to    |
+|                          | change the shell used to run recipes. The SHELL  |
+|                          | variable is handled specially when importing     |
+|                          | from and exporting to the environment.           |
++--------------------------+--------------------------------------------------+
+| ``SUFFIXES``             | The default list of suffixes before ``kmk``      |
+|                          | reads any makefiles (always empty).              |
++--------------------------+--------------------------------------------------+
+| ``VPATH``                | Directory search path for files not found in the |
+|                          | current directory.                               |
++--------------------------+--------------------------------------------------+
+
+
+The following variables reflects ``kmk`` options. Do not set these.
+
++-------------------------------------+---------------------------------------+
+| Variable                            | Description                           |
++=====================================+=======================================+
+| ``KMK_OPTS_JOBS``                   | -j slots, ``0`` if not given.         |
++-------------------------------------+---------------------------------------+
+| ``KMK_OPTS_KEEP_GOING``             | -k indictor (``0``/``1``).            |
++-------------------------------------+---------------------------------------+
+| ``KMK_OPTS_JUST_PRINT``             | -n indicator (``0``/``1``).           |
++-------------------------------------+---------------------------------------+
+| ``KMK_OPTS_PRORITY``                | --priority level, ``0`` if not given. |
++-------------------------------------+---------------------------------------+
+| ``KMK_OPTS_AFFINITY``               | --affinity mask, ``0`` if not given.  |
++-------------------------------------+---------------------------------------+
+| ``KMK_OPTS_STATISTICS``             | --statistics indicator (``0``/``1``). |
++-------------------------------------+---------------------------------------+
+| ``KMK_OPTS_PRINT_TIME``             | The --print-time value.               |
++-------------------------------------+---------------------------------------+
+| ``KMK_OPTS_PRETTY_COMMAND_PRINTING``| --pretty-command-printing indicator.  |
++-------------------------------------+---------------------------------------+
+
+
+
+Built-in functions
+------------------
+
+
+String Manipulation Functions:
+
+    Replace ``from`` with ``to`` in ``text``::
+
+        $(subst from,to,text)
+
+    Replace words matching ``pattern`` with ``replacement`` in ``text``::
+
+        $(patsubst pattern,replacement,text)
+
+    Remove excess whitespace characters from ``string``::
+
+        $(strip string)
+
+    Locate ``find`` in ``text``, returning ``find`` if found::
+
+        $(findstring find,text)
+
+    Select words in ``text`` that match one of the ``pattern`` words::
+
+        $(filter pattern...,text)
+
+    Select words in ``text`` that do not match any of the ``pattern`` words::
+
+        $(filter-out pattern...,text)
+
+    Sort the words in ``list`` lexicographically, removing duplicates::
+
+        $(sort list)
+
+    Sort the words in ``list`` lexicographically in reserve order, removing
+    duplicates::
+
+        $(rsort list)
+
+    Count the number of words in ``text``::
+
+        $(words text)
+
+    Extract the ``n``\th word (one-origin) of ``text``::
+
+        $(word n,text)
+
+    Returns the list of words in ``text`` from ``s`` to ``e`` (one-origin)::
+
+        $(wordlist s,e,text)
+
+    Extract the first word of ``names``::
+
+        $(firstword names...)
+
+    Extract the last word of ``names``::
+
+        $(lastword names...)
+
+    Join two parallel lists of words::
+
+        $(join list1,list2)
+
+    Fold ``text`` to upper case::
+
+        $(toupper text)
+
+    Fold ``text`` to lower case::
+
+        $(tolower text)
+
+    String formatting a la the unix ``printf`` command::
+
+        $(printf fmt, arg...)
+
+
+Functions for file names:
+
+    Extract the directory part of each file ``name``::
+
+        $(dir names...)
+
+    Extract the non-directory part of each file ``name``::
+
+        $(notdir names...)
+
+    Extract the suffix (the last ``.`` and following characters) of each file
+    ``name``::
+
+        $(suffix names...)
+
+    Extract the base name (name without suffix) of each file name::
+
+        $(basename names...)
+
+    Append ``suffix`` to each word in ``names``::
+
+        $(addsuffix suffix,names...)
+
+    Prepend ``prefix`` to each word in ``names``::
+
+        $(addprefix prefix,names...)
+
+    Find file names matching a shell file name ``pattern`` (not a ``%``
+    pattern)::
+
+        $(wildcard pattern...)
+
+    For each file name in ``names``, expand to an absolute name that does not
+    contain any ``.``, ``..``, nor symlinks::
+
+        $(realpath names...)
+
+    For each file name in ``names``, expand to an absolute name that does not
+    contain any ``.`` or ``..`` components, but preserves symlinks::
+
+        $(abspath names...)
+
+    Same as ``$(abspath )`` except that the current directory can be
+    specified as ``curdir``::
+
+        $(abspathex names...[, curdir])
+
+
+Arithmetic Functions:
+
+    Returns the sum of the arguments::
+
+        $(int-add addend1, addend2[, addendN])
+
+    Returns the difference between the first argument and the sum of the rest::
+
+        $(int-sub minuend, subtrahend[, subtrahendN])
+
+    Returns the product of the arguments::
+
+        $(int-mul factor1, factor2[, factorN])
+
+    Returns the quotient of first argument and the rest::
+
+        $(int-div dividend, divisor[, divisorN])
+
+    Returns the modulus of the two arguments::
+
+        $(int-mod dividend, divisor)
+
+    Returns the bitwise two-complement of argument::
+
+        $(int-not val)
+
+    Returns the result of a bitwise AND of the arguments::
+
+        $(int-and val1, val2[, valN])
+
+    Returns the result of a bitwise OR of the arguments::
+
+        $(int-or val1, val2[, valN])
+
+    Returns the result of a bitwise XOR of the arguments::
+
+        $(int-xor val1, val2[, valN])
+
+    Returns the ``kmk`` boolean (true = non-empty, false = empty) result
+    of ``val1 == val2``::
+
+        $(int-eq val1, val2)
+
+    Returns the ``kmk`` boolean result of ``val1 != val2``::
+
+        $(int-ne val1, val2)
+
+    Returns the ``kmk`` boolean result of ``val1 > val2``::
+
+        $(int-gt val1, val2)
+
+    Returns the ``kmk`` boolean result of ``val1 >= val2``::
+
+        $(int-ge val1, val2)
+
+    Returns the ``kmk`` boolean result of ``val1 < val2``::
+
+        $(int-lt val1, val2)
+
+    Returns the ``kmk`` boolean result of ``val1 <= val2``::
+
+        $(int-le val1, val2)
+
+
+(Mostly) Boolean Functions:
+
+    Condition is false if the ``condition`` evaluates to an empty string
+    (stripped). Evaluate the ``true-part`` if the condition is true, otherwise
+    the ``false-part``::
+
+        $(if condition,true-part[,false-part])
+
+    Test if any of the conditions evalues to non-empty string, returning the
+    first one::
+
+        $(or condition1[,condition2[,condition3[...]]])
+
+    Test if all of the conditions evaluates to non-empty strings, returning the
+    last one::
+
+        $(and condition1[,condition2[,condition3[...]]])
+
+
+    Test if the two strings are identical, returning ``kmk`` boolean (true =
+    non-empty, false = empty)::
+
+        $(eq str1, str2)
+
+    Invert a ``kmk`` boolean value::
+
+        $(not val)
+
+    Test if ``variable`` is defined, returning a ``kmk`` boolean value::
+
+        $(defined variable)
+
+    Test if ``set-a`` and ``set-b`` intersects, returning a ``kmk`` boolean
+    value::
+
+        $(intersects set-a, set-b)
+
+    Same as ``$(if )`` execpt that the condition is a ``kmk`` expression::
+
+        $(if kmk-expression,true-part[,false-part])
+
+    Evalutate the ``kmk`` expression returning what it evalues as. This is
+    the preferred way of doing arithmentic now::
+
+        $(expr kmk-expression)
+
+
+Stack Fuctions:
+
+      Push ``item`` onto the ``stack-var``, returning the empty string::
+
+            $(stack-push stack-var, item)
+
+      Pop the top item off the ``stack-var``::
+
+            $(stack-pop stack-var)
+
+      Pop the top item off the ``stack-var``, returning the empty string::
+
+            $(stack-popv stack-var)
+
+      Get the top item of the ``stack-var``, returning the empty string::
+
+            $(stack-top stack-var)
+
+
+Advanced Functions:
+
+    Evaluates to the contents of the variable ``var``, with no expansion
+    performed on it::
+
+        $(value var)
+
+    Evaluate ``text`` with ``var`` bound to each word in ``words``, and
+    concatenate the results (spaced)::
+
+        $(foreach var,words,text)
+
+    Evaluate the variable ``var`` replacing any references to ``$(1)``,
+    ``$(2)`` with the first, second, etc. ``param`` values::
+
+        $(call var,param,...)
+
+    Evaluate ``text`` then read the results as makefile commands. Expands
+    to the empty string::
+
+        $(eval text)
+
+    Same as ``$(eval text)`` except that the ``text`` is expanded in its
+    own variable context::
+
+        $(evalctx text)
+
+    Same as ``$(eval $(value var))``::
+
+        $(evalval var)
+
+    Same as ``$(evalctx $(value var))``::
+
+        $(evalvalctx var)
+
+    A combination of ``$(eval )``, ``$(call )`` and ``$(value )``::
+
+        $(evalcall var)
+
+    A combination of ``$(eval )`` and ``$(call )``::
+
+        $(evalcall var)
+
+    Remove comments and blank lines from the variable ``var``. Expands to
+    the empty string::
+
+        $(eval-opt-var var)
+
+    Returns accessing ``$<`` of ``target``, either retriving the whole thing
+    or the file at ``pos`` (one-origin)::
+
+        $(deps target[, pos])
+
+    Returns accessing ``$+`` (order + duplicates) of ``target``, either
+    retriving the whole thing or the file at ``pos`` (one-origin)::
+
+        $(deps-all target[, pos])
+
+    Returns accessing ``$?``  of ``target``, either retriving the whole
+    thing or the file at ``pos`` (one-origin)::
+
+        $(deps-newer target[, pos])
+
+    Returns accessing ``$|`` (order only)  of ``target``, either retriving the
+    whole thing or the file at ``pos`` (one-origin)::
+
+        $(deps-oo target[, pos])
+
+
+Command Functions:
+
+    Create one or more command lines avoiding the max argument
+    length restriction of the host OS::
+
+        $(xargs ar cas mylib.a,$(objects))
+        $(xargs ar cas mylib.a,ar as mylib.a,$(objects))
+
+
+    Returns the commands for the specified target separated by new-line, space,
+    or a user defined string. Note that this might not produce the 100% correct
+    result if any of the prerequisite automatic variables are used::
+
+        $(commands target)
+        $(commands-sc target)
+        $(commands-usr target,sep)
+
+    Compares two commands returning the empty string if equal and the 3rd
+    argument if not. This differs from ``$(comp-vars v1,v2,ne)`` in that
+    line by line is stripped of leading spaces, command prefixes and
+    trailing spaces before comparing::
+
+        $(comp-cmds cmds-var1, cmds-var2, ne)
+        $(comp-cmds-ex cmds1, cmd2, ne)
+
+
+    Compares the values of the two variables returning the empty string if
+    equal and the 3rd argument if not. Leading and trailing spaces is ignored::
+
+        $(comp-var var1, var2, ne)
+
+
+Utility functions:
+
+    When this function is evaluated, ``kmk`` generates a fatal error with the
+    message ``text``::
+
+        $(error text...)
+
+    When this function is evaluated, ``kmk`` generates a warning with the
+    message ``text``::
+
+        $(warning text...)
+
+    When this function is evaluated, ``kmk`` generates a info with the
+    message ``text``::
+
+        $(info text...)
+
+    Execute a shell ``command`` and return its output::
+
+        $(shell command)
+
+    Return a string describing how the ``kmk`` variable ``variable`` was defined::
+
+        $(origin variable)
+
+    Return a string describing the flavor of the ``kmk`` variable ``variable``::
+
+        $(flavor variable)
+
+    Returns the current local time and date formatted in the ``strftime``
+    style specifier ``fmt``. ``fmt`` defaults to ``%Y-%m-%dT%H:%M:%S`` when
+    not specified::
+
+        $(date fmt)
+
+    Returns the current UTC time and date formatted in the ``strftime``
+    style specifier ``fmt``. ``fmt`` defaults to ``%Y-%m-%dT%H:%M:%SZ`` when
+    not specified::
+
+        $(date-utc fmt)
+
+    Reformats the ``in`` time and date using ``fmt``. The ``in-fmt`` defaults
+    to ``fmt`` if not specified. While ``fmt`` defaults to
+    ``%Y-%m-%dT%H:%M:%SZ`` if not specified::
+
+        $(date-utc fmt,time,in-fmt)
+
+    Returns the current nanosecond timestamp (monotonic when possible)::
+
+        $(nanots )
+
+    Returns the size of the specified file, or -1 if the size could not
+    be obtained. This can be used to check if a file exist or not::
+
+        $(file-size file)
+
+    Searches the ``PATH`` ``kmk`` variable for the specified ``files``::
+
+        $(which files...)
+
+    OS/2: Returns the specified LIBPATH variable value::
+
+        $(libpath var)
+
+    OS/2: Sets the specified LIBPATH variable value, returning the empty string::
+
+        $(libpath var,value)
+
+
+Debugging Functions:
+
+    Returns various make statistics, if no item is specified a default
+    selection is returned::
+
+        $(make-stats item[,itemN])
+
+    Raise a debug breakpoint. Used for debugging ``kmk`` makefile parsing::
+
+        $(breakpoint )
+
+
+
+Special targets
+---------------
+
+todo
+
+
+-----
+
+:Status: $Id$
+:Copyright: Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
+            1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
+            2007 Free Software Foundation, Inc.
+
+            Copyright (C) 2008 Knut St. Osmundsen
