1 /**
2  This package implements a meta-build system in D, with the build
3  descriptions in D.  At its core is a set of data definitions that
4  allow a user to specify arbitrary build descriptions at compile-time,
5  including the usage of functions that only run at run-time (so a
6  build can, for example, automatically include every file in a
7  directory).
8 
9  The build is contained in a $(D reggaefile.d) file, which must define
10  one and only one function returning an object of type $(D
11  Build). This function is usually generated from the provided $(D
12  build) template mixin for maximum convenience.
13 
14  A $(D Build) struct only serves as a top-level container for
15  $(Target) structs. Each one of these can include other dependent
16  $(Target) structs recursively and form the basis of the build
17  descripton. The $(D build) module contains these data definitions,
18  please refer to the documentation therein for more information.
19 
20  As well as these low-level data definitions, reggae provides built-in
21  high-level rules to automate common build system tasks for D, C, and
22  C++. These can be found in the reggae.rules package and its
23  subpackages. There is also a $(D reggae.rules.dub) package for accessing
24  targets defined in/by dub.
25 
26  Right now the $(D objectFile) and $(D objectFiles) rules generate
27  the appropriate commands to build an object file (or object files
28  in the case of the latter) for a given source language. There is
29  no current mechanism to support other languages as plugins but
30  that's how it's planned to be in the future.
31 
32  End-users will probably not use $(D objectFile) directly, there
33  are higher level rules for compiling all or nearly all source
34  files in a directory and its subdirectories. For D there is even
35  a rule to compile, link and find all dependencies for a D executable
36  called $(D executable). There are many examples in the Cucumber tests.
37 
38  Reggae works by using backends. Currently, there are three: the
39  ninja, make and binary backends. The first two generate files for
40  those two build systems in the same manner as CMake and Premake
41  do. The latter produces a binary executable that when run will check
42  dependencies and execute build commands as appropriate.
43  */
44 
45 
46 module reggae;
47 
48 public import reggae.core;
49 
50 version(minimal) {
51     //only pure D builds supported
52     public import reggae.rules;
53 } else {
54     //include all features
55     public import reggae.rules;
56     public import reggae.backend.make;
57     public import reggae.backend.ninja;
58     public import reggae.backend.tup;
59     public import reggae.dub.info;
60 }
61 
62 // reggae as a library: tool generated by rdmd
63 version(reggaelib) {
64     public import reggae.reggae;
65 }