- /**
- Types for project descriptions (dub describe).
-
- Copyright: © 2015-2016 rejectedsoftware e.K.
- License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file.
- Authors: Sönke Ludwig
- */
- module dub.description;
-
- import dub.compilers.buildsettings;
- import dub.dependency;
- import dub.internal.vibecompat.data.serialization;
-
-
- /**
- Describes a complete project for use in IDEs or build tools.
-
- The build settings will be specific to the compiler, platform
- and configuration that has been selected.
- */
- struct ProjectDescription {
- string rootPackage; /// Name of the root package being built
- string configuration; /// Name of the selected build configuration
- string buildType; /// Name of the selected build type
- string compiler; /// Canonical name of the compiler used (e.g. "dmd", "gdc" or "ldc")
- string[] architecture; /// Architecture constants for the selected platform (e.g. `["x86_64"]`)
- string[] platform; /// Platform constants for the selected platform (e.g. `["posix", "osx"]`)
- PackageDescription[] packages; /// All packages in the dependency tree
- TargetDescription[] targets; /// Build targets
- @ignore size_t[string] targetLookup; /// Target index by package name name
-
- /// Targets by name
- ref inout(TargetDescription) lookupTarget(string name) inout
- {
- import std.exception : enforce;
- auto pti = name in targetLookup;
- enforce(pti !is null, "Target '"~name~"' doesn't exist. Is the target type set to \"none\" in the package recipe?");
- return targets[*pti];
- }
-
- /// Projects by name
- ref inout(PackageDescription) lookupPackage(string name) inout
- {
- foreach (ref p; packages)
- if (p.name == name)
- {
- return p;
- }
- throw new Exception("Package '"~name~"' not found in dependency tree.");
- }
-
- /// Root package
- ref inout(PackageDescription) lookupRootPackage() inout { return lookupPackage(rootPackage); }
- }
-
-
- /**
- Describes the build settings and meta data of a single package.
-
- This structure contains the effective build settings and dependencies for
- the selected build platform. This structure is most useful for displaying
- information about a package in an IDE. Use `TargetDescription` instead when
- writing a build-tool.
- */
- struct PackageDescription {
- string path; /// Path to the package
- string name; /// Qualified name of the package
- Version version_; /// Version of the package
- string description;
- string homepage;
- string[] authors;
- string copyright;
- string license;
- string[] dependencies;
-
- bool active; /// Does this package take part in the build?
- string configuration; /// The configuration that is built
- @byName TargetType targetType;
- string targetPath;
- string targetName;
- string targetFileName;
- string workingDirectory;
- string mainSourceFile;
- string[] dflags; /// Flags passed to the D compiler
- string[] lflags; /// Flags passed to the linker
- string[] libs; /// Library names to link against (typically using "-l<name>")
- string[] injectSourceFiles; /// Files that should be injected when this package is dependent upon by a binary image.
- string[] copyFiles; /// Files to copy to the target directory
- string[] extraDependencyFiles; /// Files to check for rebuild dub project
- string[] versions; /// D version identifiers to set
- string[] debugVersions; /// D debug version identifiers to set
- string[] importPaths;
- string[] cImportPaths;
- string[] stringImportPaths;
- string[] preGenerateCommands; /// Commands executed before creating the description, with variables not substituted.
- string[] postGenerateCommands; /// Commands executed after creating the description, with variables not substituted.
- string[] preBuildCommands; /// Commands to execute prior to every build, with variables not substituted.
- string[] postBuildCommands; /// Commands to execute after every build, with variables not substituted.
- string[] preRunCommands; /// Commands to execute prior to every run, with variables not substituted.
- string[] postRunCommands; /// Commands to execute after every run, with variables not substituted.
- string[string] environments;
- string[string] buildEnvironments;
- string[string] runEnvironments;
- string[string] preGenerateEnvironments;
- string[string] postGenerateEnvironments;
- string[string] preBuildEnvironments;
- string[string] postBuildEnvironments;
- string[string] preRunEnvironments;
- string[string] postRunEnvironments;
- @byName BuildRequirement[] buildRequirements;
- @byName BuildOption[] options;
- SourceFileDescription[] files; /// A list of all source/import files possibly used by the package
- }
-
-
- /**
- Describes the settings necessary to build a certain binary target.
- */
- struct TargetDescription {
- string rootPackage; /// Main package associated with this target, this is also the name of the target.
- string[] packages; /// All packages contained in this target (e.g. for target type "sourceLibrary")
- string rootConfiguration; /// Build configuration of the target's root package used for building
- BuildSettings buildSettings; /// Final build settings to use when building the target
- string cacheArtifactPath; /// The full path of the built target in the cache
- string[] dependencies; /// List of all dependencies of this target (package names)
- string[] linkDependencies; /// List of all link-dependencies of this target (target names)
- }
-
- /**
- Description for a single source file known to the package.
- */
- struct SourceFileDescription {
- @byName SourceFileRole role; /// Main role this file plays in the build process
- string path; /// Full path to the file
- }
-
- /**
- Determines the role that a file plays in the build process.
-
- If a file has multiple roles, higher enum values will have precedence, i.e.
- if a file is used both, as a source file and as an import file, it will
- be classified as a source file.
- */
- enum SourceFileRole {
- unusedStringImport, /// Used as a string import for another configuration/platform
- unusedImport, /// Used as an import for another configuration/platform
- unusedSource, /// Used as a source file for another configuration/platform
- stringImport, /// Used as a string import file
- import_, /// Used as an import file
- source /// Used as a source file
- }