diff --git a/source/dub/compilers/buildsettings.d b/source/dub/compilers/buildsettings.d index e752e80..0708615 100644 --- a/source/dub/compilers/buildsettings.d +++ b/source/dub/compilers/buildsettings.d @@ -12,6 +12,8 @@ import std.array : array; import std.algorithm : filter; import std.path : globMatch; +static if (__VERSION__ >= 2067) + import std.typecons : BitFlags; /// BuildPlatform specific settings, like needed libraries or additional @@ -94,9 +96,12 @@ void addPostGenerateCommands(in string[] value...) { add(postGenerateCommands, value, false); } void addPreBuildCommands(in string[] value...) { add(preBuildCommands, value, false); } void addPostBuildCommands(in string[] value...) { add(postBuildCommands, value, false); } - void addRequirements(in BuildRequirements[] value...) { foreach (v; value) this.requirements |= v; } - void addOptions(in BuildOptions[] value...) { foreach (v; value) this.options |= v; } - void removeOptions(in BuildOptions[] value...) { foreach (v; value) this.options &= ~v; } + void addRequirements(in BuildRequirement[] value...) { foreach (v; value) this.requirements |= v; } + void addRequirements(in BuildRequirements value) { this.requirements |= value; } + void addOptions(in BuildOption[] value...) { foreach (v; value) this.options |= v; } + void addOptions(in BuildOptions value) { this.options |= value; } + void removeOptions(in BuildOption[] value...) { foreach (v; value) this.options &= ~v; } + void removeOptions(in BuildOptions value) { this.options &= ~value; } // Adds vals to arr without adding duplicates. private void add(ref string[] arr, in string[] vals, bool no_duplicates = true) @@ -203,7 +208,7 @@ object } -enum BuildRequirements { +enum BuildRequirement { none = 0, /// No special requirements allowWarnings = 1<<0, /// Warnings do not abort compilation silenceWarnings = 1<<1, /// Don't show warnings @@ -217,7 +222,46 @@ noDefaultFlags = 1<<9, /// Do not issue any of the default build flags (e.g. -debug, -w, -property etc.) - use only for development purposes } -enum BuildOptions { + struct BuildRequirements { + import dub.internal.vibecompat.data.serialization : ignore; + + static if (__VERSION__ >= 2067) { + @ignore BitFlags!BuildRequirement values; + this(BuildRequirement req) { values = req; } + deprecated("Use BuildRequirement.* instead.") { + enum none = BuildRequirement.none; + enum allowWarnings = BuildRequirement.allowWarnings; + enum silenceWarnings = BuildRequirement.silenceWarnings; + enum disallowDeprecations = BuildRequirement.disallowDeprecations; + enum silenceDeprecations = BuildRequirement.silenceDeprecations; + enum disallowInlining = BuildRequirement.disallowInlining; + enum disallowOptimization = BuildRequirement.disallowOptimization; + enum requireBoundsCheck = BuildRequirement.requireBoundsCheck; + enum requireContracts = BuildRequirement.requireContracts; + enum relaxProperties = BuildRequirement.relaxProperties; + enum noDefaultFlags = BuildRequirement.noDefaultFlags; + } + } else { + @ignore BuildRequirement values; + this(BuildRequirement req) { values = req; } + BuildRequirement[] toRepresentation() + const { + BuildRequirement[] ret; + for (int f = 1; f <= BuildRequirement.max; f *= 2) + if (values & f) ret ~= cast(BuildRequirement)f; + return ret; + } + static BuildRequirements fromRepresentation(BuildRequirement[] v) + { + BuildRequirements ret; + foreach (f; v) ret.values |= f; + return ret; + } + } + alias values this; + } + +enum BuildOption { none = 0, /// Use compiler defaults debugMode = 1<<0, /// Compile in debug mode (enables contracts, -debug) releaseMode = 1<<1, /// Compile in release mode (disables assertions and bounds checks, -release) @@ -241,3 +285,54 @@ deprecationErrors = 1<<19, /// Stop compilation upon usage of deprecated features (-de) property = 1<<20, /// DEPRECATED: Enforce property syntax (-property) } + + struct BuildOptions { + import dub.internal.vibecompat.data.serialization : ignore; + + static if (__VERSION__ >= 2067) { + @ignore BitFlags!BuildOption values; + this(BuildOption opt) { values = opt; } + deprecated("Use BuildOption.* instead.") { + enum none = BuildOption.none; + enum debugMode = BuildOption.debugMode; + enum releaseMode = BuildOption.releaseMode; + enum coverage = BuildOption.coverage; + enum debugInfo = BuildOption.debugInfo; + enum debugInfoC = BuildOption.debugInfoC; + enum alwaysStackFrame = BuildOption.alwaysStackFrame; + enum stackStomping = BuildOption.stackStomping; + enum inline = BuildOption.inline; + enum noBoundsCheck = BuildOption.noBoundsCheck; + enum optimize = BuildOption.optimize; + enum profile = BuildOption.profile; + enum unittests = BuildOption.unittests; + enum verbose = BuildOption.verbose; + enum ignoreUnknownPragmas = BuildOption.ignoreUnknownPragmas; + enum syntaxOnly = BuildOption.syntaxOnly; + enum warnings = BuildOption.warnings; + enum warningsAsErrors = BuildOption.warningsAsErrors; + enum ignoreDeprecations = BuildOption.ignoreDeprecations; + enum deprecationWarnings = BuildOption.deprecationWarnings; + enum deprecationErrors = BuildOption.deprecationErrors; + enum property = BuildOption.property; + } + } else { + @ignore BuildOption values; + this(BuildOption opt) { values = opt; } + BuildOption[] toRepresentation() + const { + BuildOption[] ret; + for (int f = 1; f <= BuildOption.max; f *= 2) + if (values & f) ret ~= cast(BuildOption)f; + return ret; + } + static BuildOptions fromRepresentation(BuildOption[] v) + { + BuildOptions ret; + foreach (f; v) ret.values |= f; + return ret; + } + } + + alias values this; + } diff --git a/source/dub/compilers/compiler.d b/source/dub/compilers/compiler.d index 1f47a3d..32ffae3 100644 --- a/source/dub/compilers/compiler.d +++ b/source/dub/compilers/compiler.d @@ -106,22 +106,22 @@ ]; struct SpecialOption { - BuildOptions[] flags; + BuildOption[] flags; string alternative; } static immutable SpecialOption[] s_specialOptions = [ - {[BuildOptions.debugMode], "Call DUB with --build=debug"}, - {[BuildOptions.releaseMode], "Call DUB with --build=release"}, - {[BuildOptions.coverage], "Call DUB with --build=cov or --build=unittest-cov"}, - {[BuildOptions.debugInfo], "Call DUB with --build=debug"}, - {[BuildOptions.inline], "Call DUB with --build=release"}, - {[BuildOptions.noBoundsCheck], "Call DUB with --build=release-nobounds"}, - {[BuildOptions.optimize], "Call DUB with --build=release"}, - {[BuildOptions.profile], "Call DUB with --build=profile"}, - {[BuildOptions.unittests], "Call DUB with --build=unittest"}, - {[BuildOptions.warnings, BuildOptions.warningsAsErrors], "Use \"buildRequirements\" to control the warning level"}, - {[BuildOptions.ignoreDeprecations, BuildOptions.deprecationWarnings, BuildOptions.deprecationErrors], "Use \"buildRequirements\" to control the deprecation warning level"}, - {[BuildOptions.property], "This flag is deprecated and has no effect"} + {[BuildOption.debugMode], "Call DUB with --build=debug"}, + {[BuildOption.releaseMode], "Call DUB with --build=release"}, + {[BuildOption.coverage], "Call DUB with --build=cov or --build=unittest-cov"}, + {[BuildOption.debugInfo], "Call DUB with --build=debug"}, + {[BuildOption.inline], "Call DUB with --build=release"}, + {[BuildOption.noBoundsCheck], "Call DUB with --build=release-nobounds"}, + {[BuildOption.optimize], "Call DUB with --build=release"}, + {[BuildOption.profile], "Call DUB with --build=profile"}, + {[BuildOption.unittests], "Call DUB with --build=unittest"}, + {[BuildOption.warnings, BuildOption.warningsAsErrors], "Use \"buildRequirements\" to control the warning level"}, + {[BuildOption.ignoreDeprecations, BuildOption.deprecationWarnings, BuildOption.deprecationErrors], "Use \"buildRequirements\" to control the deprecation warning level"}, + {[BuildOption.property], "This flag is deprecated and has no effect"} ]; bool got_preamble = false; @@ -169,16 +169,16 @@ */ void enforceBuildRequirements(ref BuildSettings settings) { - settings.addOptions(BuildOptions.warningsAsErrors); - if (settings.requirements & BuildRequirements.allowWarnings) { settings.options &= ~BuildOptions.warningsAsErrors; settings.options |= BuildOptions.warnings; } - if (settings.requirements & BuildRequirements.silenceWarnings) settings.options &= ~(BuildOptions.warningsAsErrors|BuildOptions.warnings); - if (settings.requirements & BuildRequirements.disallowDeprecations) { settings.options &= ~(BuildOptions.ignoreDeprecations|BuildOptions.deprecationWarnings); settings.options |= BuildOptions.deprecationErrors; } - if (settings.requirements & BuildRequirements.silenceDeprecations) { settings.options &= ~(BuildOptions.deprecationErrors|BuildOptions.deprecationWarnings); settings.options |= BuildOptions.ignoreDeprecations; } - if (settings.requirements & BuildRequirements.disallowInlining) settings.options &= ~BuildOptions.inline; - if (settings.requirements & BuildRequirements.disallowOptimization) settings.options &= ~BuildOptions.optimize; - if (settings.requirements & BuildRequirements.requireBoundsCheck) settings.options &= ~BuildOptions.noBoundsCheck; - if (settings.requirements & BuildRequirements.requireContracts) settings.options &= ~BuildOptions.releaseMode; - if (settings.requirements & BuildRequirements.relaxProperties) settings.options &= ~BuildOptions.property; + settings.addOptions(BuildOption.warningsAsErrors); + if (settings.requirements & BuildRequirement.allowWarnings) { settings.options &= ~BuildOption.warningsAsErrors; settings.options |= BuildOption.warnings; } + if (settings.requirements & BuildRequirement.silenceWarnings) settings.options &= ~(BuildOption.warningsAsErrors|BuildOption.warnings); + if (settings.requirements & BuildRequirement.disallowDeprecations) { settings.options &= ~(BuildOption.ignoreDeprecations|BuildOption.deprecationWarnings); settings.options |= BuildOption.deprecationErrors; } + if (settings.requirements & BuildRequirement.silenceDeprecations) { settings.options &= ~(BuildOption.deprecationErrors|BuildOption.deprecationWarnings); settings.options |= BuildOption.ignoreDeprecations; } + if (settings.requirements & BuildRequirement.disallowInlining) settings.options &= ~BuildOption.inline; + if (settings.requirements & BuildRequirement.disallowOptimization) settings.options &= ~BuildOption.optimize; + if (settings.requirements & BuildRequirement.requireBoundsCheck) settings.options &= ~BuildOption.noBoundsCheck; + if (settings.requirements & BuildRequirement.requireContracts) settings.options &= ~BuildOption.releaseMode; + if (settings.requirements & BuildRequirement.relaxProperties) settings.options &= ~BuildOption.property; } diff --git a/source/dub/compilers/dmd.d b/source/dub/compilers/dmd.d index 1286c7f..e2fb472 100644 --- a/source/dub/compilers/dmd.d +++ b/source/dub/compilers/dmd.d @@ -25,27 +25,27 @@ class DmdCompiler : Compiler { private static immutable s_options = [ - tuple(BuildOptions.debugMode, ["-debug"]), - tuple(BuildOptions.releaseMode, ["-release"]), - tuple(BuildOptions.coverage, ["-cov"]), - tuple(BuildOptions.debugInfo, ["-g"]), - tuple(BuildOptions.debugInfoC, ["-gc"]), - tuple(BuildOptions.alwaysStackFrame, ["-gs"]), - tuple(BuildOptions.stackStomping, ["-gx"]), - tuple(BuildOptions.inline, ["-inline"]), - tuple(BuildOptions.noBoundsCheck, ["-noboundscheck"]), - tuple(BuildOptions.optimize, ["-O"]), - tuple(BuildOptions.profile, ["-profile"]), - tuple(BuildOptions.unittests, ["-unittest"]), - tuple(BuildOptions.verbose, ["-v"]), - tuple(BuildOptions.ignoreUnknownPragmas, ["-ignore"]), - tuple(BuildOptions.syntaxOnly, ["-o-"]), - tuple(BuildOptions.warnings, ["-wi"]), - tuple(BuildOptions.warningsAsErrors, ["-w"]), - tuple(BuildOptions.ignoreDeprecations, ["-d"]), - tuple(BuildOptions.deprecationWarnings, ["-dw"]), - tuple(BuildOptions.deprecationErrors, ["-de"]), - tuple(BuildOptions.property, ["-property"]), + tuple(BuildOption.debugMode, ["-debug"]), + tuple(BuildOption.releaseMode, ["-release"]), + tuple(BuildOption.coverage, ["-cov"]), + tuple(BuildOption.debugInfo, ["-g"]), + tuple(BuildOption.debugInfoC, ["-gc"]), + tuple(BuildOption.alwaysStackFrame, ["-gs"]), + tuple(BuildOption.stackStomping, ["-gx"]), + tuple(BuildOption.inline, ["-inline"]), + tuple(BuildOption.noBoundsCheck, ["-noboundscheck"]), + tuple(BuildOption.optimize, ["-O"]), + tuple(BuildOption.profile, ["-profile"]), + tuple(BuildOption.unittests, ["-unittest"]), + tuple(BuildOption.verbose, ["-v"]), + tuple(BuildOption.ignoreUnknownPragmas, ["-ignore"]), + tuple(BuildOption.syntaxOnly, ["-o-"]), + tuple(BuildOption.warnings, ["-wi"]), + tuple(BuildOption.warningsAsErrors, ["-w"]), + tuple(BuildOption.ignoreDeprecations, ["-d"]), + tuple(BuildOption.deprecationWarnings, ["-dw"]), + tuple(BuildOption.deprecationErrors, ["-de"]), + tuple(BuildOption.property, ["-property"]), ]; @property string name() const { return "dmd"; } diff --git a/source/dub/compilers/gdc.d b/source/dub/compilers/gdc.d index a82339c..04dbbc7 100644 --- a/source/dub/compilers/gdc.d +++ b/source/dub/compilers/gdc.d @@ -25,27 +25,27 @@ class GdcCompiler : Compiler { private static immutable s_options = [ - tuple(BuildOptions.debugMode, ["-fdebug"]), - tuple(BuildOptions.releaseMode, ["-frelease"]), - tuple(BuildOptions.coverage, ["-fprofile-arcs", "-ftest-coverage"]), - tuple(BuildOptions.debugInfo, ["-g"]), - tuple(BuildOptions.debugInfoC, ["-g", "-fdebug-c"]), - //tuple(BuildOptions.alwaysStackFrame, ["-X"]), - //tuple(BuildOptions.stackStomping, ["-X"]), - tuple(BuildOptions.inline, ["-finline-functions"]), - tuple(BuildOptions.noBoundsCheck, ["-fno-bounds-check"]), - tuple(BuildOptions.optimize, ["-O3"]), - tuple(BuildOptions.profile, ["-pg"]), - tuple(BuildOptions.unittests, ["-funittest"]), - tuple(BuildOptions.verbose, ["-fd-verbose"]), - tuple(BuildOptions.ignoreUnknownPragmas, ["-fignore-unknown-pragmas"]), - tuple(BuildOptions.syntaxOnly, ["-fsyntax-only"]), - tuple(BuildOptions.warnings, ["-Wall"]), - tuple(BuildOptions.warningsAsErrors, ["-Werror", "-Wall"]), - tuple(BuildOptions.ignoreDeprecations, ["-Wno-deprecated"]), - tuple(BuildOptions.deprecationWarnings, ["-Wdeprecated"]), - tuple(BuildOptions.deprecationErrors, ["-Werror", "-Wdeprecated"]), - tuple(BuildOptions.property, ["-fproperty"]), + tuple(BuildOption.debugMode, ["-fdebug"]), + tuple(BuildOption.releaseMode, ["-frelease"]), + tuple(BuildOption.coverage, ["-fprofile-arcs", "-ftest-coverage"]), + tuple(BuildOption.debugInfo, ["-g"]), + tuple(BuildOption.debugInfoC, ["-g", "-fdebug-c"]), + //tuple(BuildOption.alwaysStackFrame, ["-X"]), + //tuple(BuildOption.stackStomping, ["-X"]), + tuple(BuildOption.inline, ["-finline-functions"]), + tuple(BuildOption.noBoundsCheck, ["-fno-bounds-check"]), + tuple(BuildOption.optimize, ["-O3"]), + tuple(BuildOption.profile, ["-pg"]), + tuple(BuildOption.unittests, ["-funittest"]), + tuple(BuildOption.verbose, ["-fd-verbose"]), + tuple(BuildOption.ignoreUnknownPragmas, ["-fignore-unknown-pragmas"]), + tuple(BuildOption.syntaxOnly, ["-fsyntax-only"]), + tuple(BuildOption.warnings, ["-Wall"]), + tuple(BuildOption.warningsAsErrors, ["-Werror", "-Wall"]), + tuple(BuildOption.ignoreDeprecations, ["-Wno-deprecated"]), + tuple(BuildOption.deprecationWarnings, ["-Wdeprecated"]), + tuple(BuildOption.deprecationErrors, ["-Werror", "-Wdeprecated"]), + tuple(BuildOption.property, ["-fproperty"]), ]; @property string name() const { return "gdc"; } diff --git a/source/dub/compilers/ldc.d b/source/dub/compilers/ldc.d index 3dcfa54..35ae0f0 100644 --- a/source/dub/compilers/ldc.d +++ b/source/dub/compilers/ldc.d @@ -25,27 +25,27 @@ class LdcCompiler : Compiler { private static immutable s_options = [ - tuple(BuildOptions.debugMode, ["-d-debug"]), - tuple(BuildOptions.releaseMode, ["-release"]), - //tuple(BuildOptions.coverage, ["-?"]), - tuple(BuildOptions.debugInfo, ["-g"]), - tuple(BuildOptions.debugInfoC, ["-gc"]), - //tuple(BuildOptions.alwaysStackFrame, ["-?"]), - //tuple(BuildOptions.stackStomping, ["-?"]), - tuple(BuildOptions.inline, ["-enable-inlining"]), - tuple(BuildOptions.noBoundsCheck, ["-disable-boundscheck"]), - tuple(BuildOptions.optimize, ["-O"]), - //tuple(BuildOptions.profile, ["-?"]), - tuple(BuildOptions.unittests, ["-unittest"]), - tuple(BuildOptions.verbose, ["-v"]), - tuple(BuildOptions.ignoreUnknownPragmas, ["-ignore"]), - tuple(BuildOptions.syntaxOnly, ["-o-"]), - tuple(BuildOptions.warnings, ["-wi"]), - tuple(BuildOptions.warningsAsErrors, ["-w"]), - tuple(BuildOptions.ignoreDeprecations, ["-d"]), - tuple(BuildOptions.deprecationWarnings, ["-dw"]), - tuple(BuildOptions.deprecationErrors, ["-de"]), - tuple(BuildOptions.property, ["-property"]), + tuple(BuildOption.debugMode, ["-d-debug"]), + tuple(BuildOption.releaseMode, ["-release"]), + //tuple(BuildOption.coverage, ["-?"]), + tuple(BuildOption.debugInfo, ["-g"]), + tuple(BuildOption.debugInfoC, ["-gc"]), + //tuple(BuildOption.alwaysStackFrame, ["-?"]), + //tuple(BuildOption.stackStomping, ["-?"]), + tuple(BuildOption.inline, ["-enable-inlining"]), + tuple(BuildOption.noBoundsCheck, ["-disable-boundscheck"]), + tuple(BuildOption.optimize, ["-O"]), + //tuple(BuildOption.profile, ["-?"]), + tuple(BuildOption.unittests, ["-unittest"]), + tuple(BuildOption.verbose, ["-v"]), + tuple(BuildOption.ignoreUnknownPragmas, ["-ignore"]), + tuple(BuildOption.syntaxOnly, ["-o-"]), + tuple(BuildOption.warnings, ["-wi"]), + tuple(BuildOption.warningsAsErrors, ["-w"]), + tuple(BuildOption.ignoreDeprecations, ["-d"]), + tuple(BuildOption.deprecationWarnings, ["-dw"]), + tuple(BuildOption.deprecationErrors, ["-de"]), + tuple(BuildOption.property, ["-property"]), ]; @property string name() const { return "ldc"; } diff --git a/source/dub/description.d b/source/dub/description.d index 7c7e22c..64eda56 100644 --- a/source/dub/description.d +++ b/source/dub/description.d @@ -61,8 +61,8 @@ string[] postGenerateCommands; string[] preBuildCommands; string[] postBuildCommands; - @byName BuildRequirements[] buildRequirements; - @byName BuildOptions[] options; + @byName BuildRequirement[] buildRequirements; + @byName BuildOption[] options; SourceFileDescription[] files; } diff --git a/source/dub/generators/build.d b/source/dub/generators/build.d index ee949fe..e453047 100644 --- a/source/dub/generators/build.d +++ b/source/dub/generators/build.d @@ -82,7 +82,7 @@ { // run the generated executable auto buildsettings = targets[m_project.rootPackage.name].buildSettings; - if (settings.run && !(buildsettings.options & BuildOptions.syntaxOnly)) { + if (settings.run && !(buildsettings.options & BuildOption.syntaxOnly)) { auto exe_file_path = Path(buildsettings.targetPath) ~ getTargetFileName(buildsettings, settings.platform); runTarget(exe_file_path, buildsettings, settings.runArgs, settings); } @@ -91,7 +91,7 @@ private void buildTarget(GeneratorSettings settings, BuildSettings buildsettings, in Package pack, string config, in Package[] packages, in Path[] additional_dep_files) { auto cwd = Path(getcwd()); - bool generate_binary = !(buildsettings.options & BuildOptions.syntaxOnly); + bool generate_binary = !(buildsettings.options & BuildOption.syntaxOnly); auto build_id = computeBuildID(config, buildsettings, settings); @@ -134,7 +134,7 @@ } // determine basic build properties - auto generate_binary = !(buildsettings.options & BuildOptions.syntaxOnly); + auto generate_binary = !(buildsettings.options & BuildOption.syntaxOnly); logInfo("Building %s %s configuration \"%s\", build type %s.", pack.name, pack.vers, config, settings.buildType); @@ -223,7 +223,7 @@ { auto cwd = Path(getcwd()); - auto generate_binary = !(buildsettings.options & BuildOptions.syntaxOnly); + auto generate_binary = !(buildsettings.options & BuildOption.syntaxOnly); auto is_static_library = buildsettings.targetType == TargetType.staticLibrary || buildsettings.targetType == TargetType.library; // make file paths relative to shrink the command line @@ -373,7 +373,7 @@ void buildWithCompiler(GeneratorSettings settings, BuildSettings buildsettings) { - auto generate_binary = !(buildsettings.options & BuildOptions.syntaxOnly); + auto generate_binary = !(buildsettings.options & BuildOption.syntaxOnly); auto is_static_library = buildsettings.targetType == TargetType.staticLibrary || buildsettings.targetType == TargetType.library; Path target_file; diff --git a/source/dub/generators/generator.d b/source/dub/generators/generator.d index 5b8db64..ab16f72 100644 --- a/source/dub/generators/generator.d +++ b/source/dub/generators/generator.d @@ -108,7 +108,7 @@ foreach (pack; m_project.getTopologicalPackageList(true, null, configs)) { BuildSettings buildsettings; buildsettings.processVars(m_project, pack, pack.getBuildSettings(settings.platform, configs[pack.name]), true); - bool generate_binary = !(buildsettings.options & BuildOptions.syntaxOnly); + bool generate_binary = !(buildsettings.options & BuildOption.syntaxOnly); finalizeGeneration(pack.name, buildsettings, pack.path, Path(bs.targetPath), generate_binary); } @@ -219,7 +219,7 @@ m_project.addBuildTypeSettings(buildsettings, settings.platform, settings.buildType); settings.compiler.extractBuildOptions(buildsettings); - enforce (generates_binary || pack !is m_project.rootPackage || (buildsettings.options & BuildOptions.syntaxOnly), + enforce (generates_binary || pack !is m_project.rootPackage || (buildsettings.options & BuildOption.syntaxOnly), format("Main package must have a binary target type, not %s. Cannot build.", tt)); targets[pack.name].buildSettings = buildsettings.dup; diff --git a/source/dub/generators/visuald.d b/source/dub/generators/visuald.d index 49f35aa..ca64372 100644 --- a/source/dub/generators/visuald.d +++ b/source/dub/generators/visuald.d @@ -257,10 +257,10 @@ ret.formattedWrite(" \n", to!string(type), arch); // debug and optimize setting - ret.formattedWrite(" %s\n", buildsettings.options & BuildOptions.debugInfo ? "1" : "0"); - ret.formattedWrite(" %s\n", buildsettings.options & BuildOptions.optimize ? "1" : "0"); - ret.formattedWrite(" %s\n", buildsettings.options & BuildOptions.inline ? "1" : "0"); - ret.formattedWrite(" %s\n", buildsettings.options & BuildOptions.releaseMode ? "1" : "0"); + ret.formattedWrite(" %s\n", buildsettings.options & BuildOption.debugInfo ? "1" : "0"); + ret.formattedWrite(" %s\n", buildsettings.options & BuildOption.optimize ? "1" : "0"); + ret.formattedWrite(" %s\n", buildsettings.options & BuildOption.inline ? "1" : "0"); + ret.formattedWrite(" %s\n", buildsettings.options & BuildOption.releaseMode ? "1" : "0"); // Lib or exe? enum @@ -308,7 +308,7 @@ if (output_type != StaticLib) ret.formattedWrite(" %s %s\n", linkLibs, addLinkFiles); // Unittests - ret.formattedWrite(" %s\n", buildsettings.options & BuildOptions.unittests ? "1" : "0"); + ret.formattedWrite(" %s\n", buildsettings.options & BuildOption.unittests ? "1" : "0"); // compute directory for intermediate files (need dummy/ because of how -op determines the resulting path) size_t ndummy = 0; @@ -337,7 +337,7 @@ ret.put(" 0\n"); ret.put(" 0\n"); ret.put(" 0\n"); - ret.formattedWrite(" %s\n", buildsettings.options & BuildOptions.verbose ? "1" : "0"); + ret.formattedWrite(" %s\n", buildsettings.options & BuildOption.verbose ? "1" : "0"); ret.put(" 0\n"); ret.put(" 0\n"); ret.formattedWrite(" %s\n", arch == "x64" ? 1 : 0); @@ -353,18 +353,18 @@ ret.put(" 0\n"); ret.put(" 0\n"); ret.put(" 0\n"); - ret.formattedWrite(" %s\n", buildsettings.options & BuildOptions.noBoundsCheck ? "1" : "0"); + ret.formattedWrite(" %s\n", buildsettings.options & BuildOption.noBoundsCheck ? "1" : "0"); ret.put(" 0\n"); ret.put(" 1\n"); - ret.formattedWrite(" %s\n", buildsettings.options & BuildOptions.warningsAsErrors ? "1" : "0"); - ret.formattedWrite(" %s\n", buildsettings.options & BuildOptions.warnings ? "1" : "0"); - ret.formattedWrite(" %s\n", buildsettings.options & BuildOptions.property ? "1" : "0"); - ret.formattedWrite(" %s\n", buildsettings.options & BuildOptions.alwaysStackFrame ? "1" : "0"); + ret.formattedWrite(" %s\n", buildsettings.options & BuildOption.warningsAsErrors ? "1" : "0"); + ret.formattedWrite(" %s\n", buildsettings.options & BuildOption.warnings ? "1" : "0"); + ret.formattedWrite(" %s\n", buildsettings.options & BuildOption.property ? "1" : "0"); + ret.formattedWrite(" %s\n", buildsettings.options & BuildOption.alwaysStackFrame ? "1" : "0"); ret.put(" 0\n"); - ret.formattedWrite(" %s\n", buildsettings.options & BuildOptions.coverage ? "1" : "0"); + ret.formattedWrite(" %s\n", buildsettings.options & BuildOption.coverage ? "1" : "0"); ret.put(" 0\n"); ret.put(" 2\n"); - ret.formattedWrite(" %s\n", buildsettings.options & BuildOptions.ignoreUnknownPragmas ? "1" : "0"); + ret.formattedWrite(" %s\n", buildsettings.options & BuildOption.ignoreUnknownPragmas ? "1" : "0"); ret.formattedWrite(" %s\n", settings.compiler.name == "ldc" ? 2 : settings.compiler.name == "gdc" ? 1 : 0); ret.formattedWrite(" 0\n"); ret.formattedWrite(" %s\n", bin_path.toNativeString()); diff --git a/source/dub/internal/vibecompat/data/serialization.d b/source/dub/internal/vibecompat/data/serialization.d index c68cde0..6903a05 100644 --- a/source/dub/internal/vibecompat/data/serialization.d +++ b/source/dub/internal/vibecompat/data/serialization.d @@ -450,7 +450,7 @@ private T deserializeImpl(T, alias Policy, Serializer, ATTRIBUTES...)(ref Serializer deserializer) { import std.typecons : Nullable; - static if (__VERSION__ >= 2067) import std.typecons : ButFlags; + static if (__VERSION__ >= 2067) import std.typecons : BitFlags; static assert(Serializer.isSupportedValueType!string, "All serializers must support string values."); static assert(Serializer.isSupportedValueType!(typeof(null)), "All serializers must support null values."); diff --git a/source/dub/internal/vibecompat/data/utils.d b/source/dub/internal/vibecompat/data/utils.d index a171fe3..7d4359c 100644 --- a/source/dub/internal/vibecompat/data/utils.d +++ b/source/dub/internal/vibecompat/data/utils.d @@ -240,7 +240,8 @@ static if (!__traits(compiles, TypeTuple!(__traits(getMember, T, M)))) enum isPublicMember = false; else { alias MEM = TypeTuple!(__traits(getMember, T, M)); - enum isPublicMember = __traits(getProtection, MEM).among("public", "export"); + enum _prot = __traits(getProtection, MEM); + enum isPublicMember = _prot == "public" || _prot == "export"; } } diff --git a/source/dub/package_.d b/source/dub/package_.d index c6eaa05..5af1912 100644 --- a/source/dub/package_.d +++ b/source/dub/package_.d @@ -287,7 +287,7 @@ logDiagnostic("Using custom build type '%s'.", build_type); pbt.getPlatformSettings(settings, platform, this.path); } else { - with(BuildOptions) switch (build_type) { + with(BuildOption) switch (build_type) { default: throw new Exception(format("Unknown build type for %s: '%s'", this.name, build_type)); case "plain": break; case "debug": settings.addOptions(debugMode, debugInfo); break; @@ -401,14 +401,14 @@ ret.postBuildCommands = bs.postBuildCommands; // prettify build requirements output - for (int i = 1; i <= BuildRequirements.max; i <<= 1) - if (bs.requirements & i) - ret.buildRequirements ~= cast(BuildRequirements)i; + for (int i = 1; i <= BuildRequirement.max; i <<= 1) + if (bs.requirements & cast(BuildRequirement)i) + ret.buildRequirements ~= cast(BuildRequirement)i; // prettify options output - for (int i = 1; i <= BuildOptions.max; i <<= 1) - if (bs.options & i) - ret.options ~= cast(BuildOptions)i; + for (int i = 1; i <= BuildOption.max; i <<= 1) + if (bs.options & cast(BuildOption)i) + ret.options ~= cast(BuildOption)i; // collect all possible source files and determine their types SourceFileRole[string] sourceFileTypes; diff --git a/source/dub/project.d b/source/dub/project.d index c4b104c..36a1ab6 100644 --- a/source/dub/project.d +++ b/source/dub/project.d @@ -531,7 +531,7 @@ void addBuildTypeSettings(ref BuildSettings dst, in BuildPlatform platform, string build_type) { - bool usedefflags = !(dst.requirements & BuildRequirements.noDefaultFlags); + bool usedefflags = !(dst.requirements & BuildRequirement.noDefaultFlags); if (usedefflags) { BuildSettings btsettings; m_rootPackage.addBuildTypeSettings(btsettings, platform, build_type); diff --git a/source/dub/recipe/json.d b/source/dub/recipe/json.d index 2ffe0a9..24cb3f7 100644 --- a/source/dub/recipe/json.d +++ b/source/dub/recipe/json.d @@ -221,13 +221,13 @@ case "buildRequirements": BuildRequirements reqs; foreach (req; deserializeJson!(string[])(value)) - reqs |= to!BuildRequirements(req); + reqs |= to!BuildRequirement(req); bs.buildRequirements[suffix] = reqs; break; case "buildOptions": BuildOptions options; foreach (opt; deserializeJson!(string[])(value)) - options |= to!BuildOptions(opt); + options |= to!BuildOption(opt); bs.buildOptions[suffix] = options; break; } @@ -266,13 +266,13 @@ foreach (suffix, arr; bs.postBuildCommands) ret["postBuildCommands"~suffix] = serializeToJson(arr); foreach (suffix, arr; bs.buildRequirements) { string[] val; - foreach (i; [EnumMembers!BuildRequirements]) + foreach (i; [EnumMembers!BuildRequirement]) if (arr & i) val ~= to!string(i); ret["buildRequirements"~suffix] = serializeToJson(val); } foreach (suffix, arr; bs.buildOptions) { string[] val; - foreach (i; [EnumMembers!BuildOptions]) + foreach (i; [EnumMembers!BuildOption]) if (arr & i) val ~= to!string(i); ret["buildOptions"~suffix] = serializeToJson(val); } diff --git a/source/dub/recipe/packagerecipe.d b/source/dub/recipe/packagerecipe.d index d844424..0a26059 100644 --- a/source/dub/recipe/packagerecipe.d +++ b/source/dub/recipe/packagerecipe.d @@ -235,8 +235,8 @@ auto nodef = false; auto noprop = false; foreach (req; this.buildRequirements) { - if (req & BuildRequirements.noDefaultFlags) nodef = true; - if (req & BuildRequirements.relaxProperties) noprop = true; + if (req & BuildRequirement.noDefaultFlags) nodef = true; + if (req & BuildRequirement.relaxProperties) noprop = true; } if (noprop) { diff --git a/source/dub/recipe/sdl.d b/source/dub/recipe/sdl.d index 5b1b173..6a82abb 100644 --- a/source/dub/recipe/sdl.d +++ b/source/dub/recipe/sdl.d @@ -112,8 +112,8 @@ case "postGenerateCommands": setting.parsePlatformStringArray(bs.postGenerateCommands); break; case "preBuildCommands": setting.parsePlatformStringArray(bs.preBuildCommands); break; case "postBuildCommands": setting.parsePlatformStringArray(bs.postBuildCommands); break; - case "buildRequirements": setting.parsePlatformEnumArray!BuildRequirements(bs.buildRequirements); break; - case "buildOptions": setting.parsePlatformEnumArray!BuildOptions(bs.buildOptions); break; + case "buildRequirements": setting.parsePlatformEnumArray!BuildRequirement(bs.buildRequirements); break; + case "buildOptions": setting.parsePlatformEnumArray!BuildOption(bs.buildOptions); break; } } @@ -205,8 +205,10 @@ string platform; if ("platform" in t.attributes) platform = t.attributes["platform"][0].value.get!string; - foreach (v; t.values) + foreach (v; t.values) { + if (platform !in dst) dst[platform] = Es.init; dst[platform] |= v.get!string.to!E; + } } private void enforceSDL(bool condition, lazy string message, Tag tag, string file = __FILE__, int line = __LINE__) @@ -334,8 +336,8 @@ assert(rec.buildSettings.workingDirectory == "working directory"); assert(rec.buildSettings.subConfigurations.length == 1); assert(rec.buildSettings.subConfigurations["projectname:subpackage2"] == "library"); - assert(rec.buildSettings.buildRequirements == ["": BuildRequirements.allowWarnings | BuildRequirements.silenceDeprecations]); - assert(rec.buildSettings.buildOptions == ["": BuildOptions.verbose | BuildOptions.ignoreUnknownPragmas]); + assert(rec.buildSettings.buildRequirements == ["": cast(BuildRequirements)(BuildRequirement.allowWarnings | BuildRequirement.silenceDeprecations)]); + assert(rec.buildSettings.buildOptions == ["": cast(BuildOptions)(BuildOption.verbose | BuildOption.ignoreUnknownPragmas)]); assert(rec.buildSettings.libs == ["": ["lib1", "lib2", "lib3"]]); assert(rec.buildSettings.sourceFiles == ["": ["source1", "source2", "source3"]]); assert(rec.buildSettings.sourcePaths == ["": ["sourcepath1", "sourcepath2", "sourcepath3"]]);