/**
 This package implements a meta-build system in D, with the build
 descriptions in D.  At its core is a set of data definitions that
 allow a user to specify arbitrary build descriptions at compile-time,
 including the usage of functions that only run at run-time (so a
 build can, for example, automatically include every file in a
 directory).

 The build is contained in a $(D reggaefile.d) file, which must define
 one and only one function returning an object of type $(D
 Build). This function is usually generated from the provided $(D
 build) template mixin for maximum convenience.

 A $(D Build) struct only serves as a top-level container for
 $(Target) structs. Each one of these can include other dependent
 $(Target) structs recursively and form the basis of the build
 descripton. The $(D build) module contains these data definitions,
 please refer to the documentation therein for more information.

 As well as these low-level data definitions, reggae provides built-in
 high-level rules to automate common build system tasks for D, C, and
 C++. These can be found in the reggae.rules package and its
 subpackages. There is also a $(D reggae.rules.dub) package for accessing
 targets defined in/by dub.

 Right now the $(D objectFile) and $(D objectFiles) rules generate
 the appropriate commands to build an object file (or object files
 in the case of the latter) for a given source language. There is
 no current mechanism to support other languages as plugins but
 that's how it's planned to be in the future.

 End-users will probably not use $(D objectFile) directly, there
 are higher level rules for compiling all or nearly all source
 files in a directory and its subdirectories. For D there is even
 a rule to compile, link and find all dependencies for a D executable
 called $(D executable). There are many examples in the Cucumber tests.

 Reggae works by using backends. Currently, there are three: the
 ninja, make and binary backends. The first two generate files for
 those two build systems in the same manner as CMake and Premake
 do. The latter produces a binary executable that when run will check
 dependencies and execute build commands as appropriate.
 */
module reggae;


public import reggae.core;
public import reggae.rules;


// reggae as a library: tool generated by rdmd
version(reggaelib) {
    public import reggae.reggae;
}