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 }