DUB started out as a pure D tool. Compiling files of other languages would have to be realized using custom build commands. While this works in general, it has the obvious drawback of either complicating the package description, or requiring additional build tools, such as "make", to be installed.
This proposal adds built-in support for building C and C++ files. While other important glue languages, such as Objective-C, Java or C# are not part of this document, it lays the groundwork for adding additional languages.
Three new build settings are added: "language", "cflags" and "cxxflags".
name "test-package" language "C++" cxxflags "-pie" platform="posix-gxx" sourceFiles "source/**.CC"
Platform specifications stay the same as for D builds, except that the compiler names are those of the C/C++ compiler.
Build settings affected by language selection
The selected language influences the behavior of certain build settings:
- "dflags": These flags are ignored for building packages with a language other than "D" (the default). However, they are still subject to inheritance to other packages in the package hierarchy.
- "cflags"/"cxxflags": Similarly, these fields only have an effect if they match the selected language. These fields are generally not subject to inheritance.
- "sourcePaths": Depending on the selected language, the file extensions that are searched differ:
- "buildOptions"/"buildRequirements": Build options are matched as good as possible to the current compiler. Not all build options have a corresponding command line flag for every compiler, in which case they will be ignored.
- "stringImportPaths": Ignored for package with a language other than "D", but inherited to upstream projects.
The C/C++ compiler will be selected according to the selected D compiler (Windows+DMD=DMC/VC?).
- How is target type "sourceLibrary" handled? Probably forbidden for the time being