Changes in 0.5.1

* ZMK now defines `ZMK.BugFixes` as a set of identifiers of issues that were
  known and addressed inside the library. Specific bugs may gain stable identifiers
  that, once addressed, are added to the list in the next release of the library.

  This mechanism is intended to enable hot-fixes, which are applied to the
  makefile of a specific project, which update or replace part of zmk to fix a
  specific issue while doing so in a way which eventually disables the
  workaround.

* The Symlink template is now documented with a dedicated manual page

* The Symlink template no longer retains the sub-directory related to the
  placement in the development tree after installation, matching the behavior
  of the Program template.

  This is a backwards incompatible change resulting from the fact that
  previous behavior was simply wrong. There are additional tests checking
  various combinations of this behavior now.

  This issue is identified in ZMK.BugFixes as zmk-issue-80

* ZMK integration tests no longer fail on Haiku

Changes in 0.5:

* The Program.Test template no longer fails with syntax error when computing
  test coverage.

* The Toolchain module no longer misidentifies clang on FreeBSD.

* The Toolchain module has initial integration test suite that checks the real
  interaction with the host system. The integration test suite has reference
  data for FreeBSD and MacOS.

* The Coverity module gained support for checking if scan result is viable for
  submission and an ability to submit the scan automatically, using the new
  `upload-coverity-scan` target. See the manual page for additional information
  about project configuration.

* ZMK now supports additional static analysis tools: clang-tidy, clang-analyzer
  (via scan-build), cppcheck and sparse. They each define a CamelCase-named
  module and a Sources attribute which includes the set of files to scan.

* The distclean no longer forgets to run clean target.

* ZMK now allows installing multiple headers simultaneously with the
  use of the HeaderGroup template. HeaderGroup supports group customization of
  InstallDir and InstallMode and otherwise behaves identical to the Header
  template used multiple times, manually.

* The ClangTidy template now passes `-- $(CPPFLAGS)` if there are non-empty
  CPPFLAGS defined. This can be used to provide include paths and macro
  definitions appropriate for the project.

* The Sparse module now passes $(Sparse.Options) via CFLAGS set at the environment
  level before invoking recursive $(MAKE). This avoids clobbering CFLAGS set in
  the build system (e.g. to pass -fpic) as make treats command line overrides
  differently from environment values.

* The Configure module now supports setting the target triplet. The generated
  configuration script handles the --target= command line option and the result
  is available as $(Configure.TargetArchTriplet).

* The configure script now accepts --exec_prefix= as an alternate spelling of
  --exec-prefix.

* The configure script now accepts but ignores --oldincludedir for compatibility
  with some build systems.

* The Configure module now supports configuration of static and dynamic
  libraries with the new configuration script options: --enable-static,
  --disable-static, --enable-dynamic and --disable-dynamic. Both library types
  are enabled by default. The values are stored and inhibit expansion of
  appropriate templates.

* The Header and HeaderGroup template no longer expand $(includedir) too early,
  allowing customized includedir to be respected.

* The Configure module no longer breaks in out-of-tree builds and no special
  care is required to support that anymore.

* ZMK is now able to use an explicit sysroot for all activities.
  The configure script now accepts --with-libtool-sysroot which sets
  $(Configure.SysRoot). The Toolchain module defines $(Toolchain.SysRoot) which
  defaults to whatever was configured. The templates ObjectGroup, Library.So,
  Library.DyLib and Program now pass the sysroot argument when
  Toolchain.SysRoot is non-empty. Lastly the PVS module similarly passes
  a non-empty sysroot when invoking the pre-processor.

Changes in 0.4.2:

* The PVS module no longer fails when running the pvs-report target.

* The Header module no longer clobbers custom InstallDir.

* The Library.DyLib template no longer creates symlink foo -> foo.dylib when
  the library is not versioned. In addition the amount of code shared between
  Library.So and Library.DyLib has increased.

Changes in 0.4.1:

* The Library.So template no longer creates symlink foo -> foo.so when the
  library is not versioned.

* The ObjectGroup template no longer fails during out-of-tree builds with
  dependency generation and sub-directories in source file paths by attempting
  to put the generated dependency information alongside the source code.

* The ObjectGroup template no longer fails during out-of-tree builds when
  the original project explicitly uses $(ZMK.OutOfTreeSourcePath).

* The PVS module no longer fails when the original project uses
  sub-directories to organize the source tree.

Backwards incompatible changes in 0.4:

* The Configure module introduces a backwards incompatible change in the
  name of the generated configuration file. In older releases the file was
  called GNUmakefile.configure.mk, starting with this release the name is
  config.$(NAME).mk. $(NAME) is the name of the project, also available as
  $(Project.Name). This also restricts the configuration system to projects
  that define a name. The background of this change is a realization that prior
  approach caused confusing an buggy behavior, where Make would search the
  include path, which also contains all of PATH, for *any* file named
  GNUmakefile.configure.mk and include the first one it found.

  Projects using zmk are advised to change their manually included
  configuration file to one that contains their project name.

Changes in 0.4:

* The Symlink template used by Library.So and Library.DyLib will now work
  correctly when invoked with -B switch (aka --always-make), by force-creating
  symbolic links that already exist.

* Program template no longer forgets to add the .exe suffix to installed executables.

* The ObjectGroup template used by Program, Program.Test, Library.A, Library.So
  and Library.DyLib now supports sub-directories in source file names. Object files
  created by the object group are now created in directories corresponding to the source
  files.

* The ObjectGroup template now supports additional C++ extensions: .cxx and .cc.
  This is in addition to the .cpp extension that was supported before.

* The ObjectGroup template used by Program, Program.Test, Library.A, Library.So
  and Library.DyLib is now performing rudimentary detection of a missing compiler.

* The GitVersion module now provides GitVersion.Origin attribute
  to indicate how the version information was obtained. The value "git" is used
  when git history along with git tags were used. The value "file" is used when
  the .version file was read.

* The Tarball.Src template no longer breaks when used from a dist archive.

* The Program and Script modules no longer attempt to transform installed name
  when the Configure module is not imported.

* The internal toolchain.GCC module no longer attempts to invoke gcc and g++
  if they are not installed.

* The ManPage module again checks for errors in manual pages. This feature
  was disabled in an earlier release as it was showing a problem with zmk
  that was not understood at the time.

* The Tarball.Src module only signs the release if both GPG and GPG keys are
  available.

Changes in 0.3.8:

* The release archive now contains the full collection of test files.

Changes in 0.3.7:

* The release archive no longer contains the pre-compiled manual pages. Instead
  the .in files are shipped, to be compiled locally.

Changes in 0.3.6:

* InstallUninstall no longer reuses the relative directory in the source tree
  to represent the target directory. Instead the InstallDir property is the
  only way to influence the final path. This was a late discovery but one that
  is ultimately only sensible. ZMK itself was adjusted to install correctly in
  this new scheme.

Changes in 0.3.5:

* Make distclean no longer breaks building of packages in Debian, by not
  removing the bundled zmk and the configure script that current packaging
  helpers cannot yet re-generate from zmk itself.

Changes in 0.3.4:

 * GitVersion no longer interferes with downstream packaging of releases
   by bundling the .version file for snapshots and tagged releases alike.

Changes in 0.3.3:

 * Tests no longer hang on case-insensitive filesystems.

 * The Directory module no longer issues warnings on MacOS

Changes in 0.3.2:

 * The ManPage module no longer installs files to the /man directory.

Changes in 0.3.1:

 * The GitVersion module now follows public/private variable naming scheme.
   The only public attribute is GitVersion.Active, which expands to yes if
   the module has altered VERSION as compared to what was set in the makefile.

 * The Tarball.Src module no longer attempts to sign releases in CI systems
   and no longer issues warnings if the GitVersion module is not used.

Changes in 0.3:

 * For future extensibility backwards compatibility is dropped. All symbols are
   different. By the time this release is finalized a compatibility module may
   be introduced, if practical.

   - All variables now use CamelCase, not under_score. This includes template
	 instance variables, so for example "hello.sources" becomes
	 "hello.Sources".
   - All public variables are capitalized. This includes variables scoped with
	 the "ZMK.PublicName". Private variables are named like "ZMK.privateName"
	 and cannot be relied for backward compatibility across releases. All
	 public variables should be documented in the manual page corresponding to
	 the module or template name.
   - All custom variables are prefixed with module name, or "ZMK.".
   - Modules are imported with the ZMK.Import function, replacing "import".
	 Modules no longer have the "Module." prefix as it was somewhat redundant.
   - Templates are expanded with the ZMK.Expand function, replacing "spawn".
	 Templates no longer have the "Template." prefix as it was equally
	 redundant.
   - All module names are now using CamelCase naming. Some modules were
	 renamed, for example "git-version" became "GitVersion" and "PVS-Studio"
	 became just "PVS"

 * Introduction of manual pages for zmk. This is a longer effort but eventually
   all modules, templates, variables and rules will be documented.

 * Examples are now part of the distribution archive.

 * The true_false example illustrates how preprocessor options can
   vary per target, even if the same source file is used in more than one
   program.

 * Examples are now much more terse and to the point.

 * The Directories module now warns if DESTDIR is defined inside a makefile.

 * The Toolchain module no longer removes all object files.

 * The Toolchain module now prefixes all non-standard variables with
   Toolchain, to avoid confusion and clashes with user code.

 * The Tarball.Src module no longer signs the release archive
   from a git-versioned snapshot.

 * The Tarball module, when used on Darwin, no longer now forgets to
   add the versioned top-level directory, matching the experience on Linux.

 * The GitVersion module now detects some CI systems and alerts the
   user of a possibility of a shallow git clone.

 * Test suite is now part of the distribution archive. All examples are tested,
   some modules are also separately tested, to ensure coverage.

 * C++ is now supported for all programs and library types.

 * Objective C is now supported for all programs and library types. Certain
   special features related to gnu-step were dropped. Those are better applied
   in actual project makefiles where they can be precise and accurate.

 * Numerous smaller bug were found and fixed.

Changes in 0.2:

 * The Template.data module now handles nested directories better.

 * The Module.configure module can now synthesize the configure script.

 * The configure script now handles --runstatedir=DIR option.

 * The configure script no longer considers --build=TRIPLET as cross-compiling,
   both --build=TRIPLET and --host=TRIPLET must be used and must differ for
   that to happen.

 * The configure script now supports --help and --version options.

 * The Module.git-version module now strips leading "v" from tags.

 * The Module.git-version module no longer clashes with Debian packaging
   and now collaborates with Template.tarball.src module to store the version
   in a .version file.

 * The new Template.tarball.src module now creates GPG signatures for
   release tarball and handles the .version file.

 * ZMK now generates all required files and stores them into source archives
   created with Template.tarball.src. Generated data can be removed with the
   distclean target.

Changes in 0.1:

 * Initial release with the build system extracted out of libzt.
