/* ============================================================================== This file is part of the JUCE 6 technical preview. Copyright (c) 2020 - Raw Material Software Limited You may use this code under the terms of the GPL v3 (see www.gnu.org/licenses). For this technical preview, this file is not subject to commercial licensing. JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE DISCLAIMED. ============================================================================== */ #pragma once //============================================================================== class CompileEngineSettings { public: CompileEngineSettings (ValueTree& projectRoot) : tree (projectRoot.getOrCreateChildWithName ("LIVE_SETTINGS", nullptr) .getOrCreateChildWithName (getLiveSettingsSubType(), nullptr)), buildEnabledValue (tree, Ids::buildEnabled, nullptr, false), continuousRebuildEnabledValue (tree, Ids::continuousRebuildEnabled, nullptr, false), warningsEnabledValue (tree, Ids::warningsEnabled, nullptr, true), userHeaderPathValue (tree, Ids::headerPath, nullptr), systemHeaderPathValue (tree, Ids::systemHeaderPath, nullptr), extraDLLsValue (tree, Ids::extraDLLs, nullptr), extraCompilerFlagsValue (tree, Ids::extraCompilerFlags, nullptr), extraPreprocessorDefsValue (tree, Ids::defines, nullptr), windowsTargetPlatformValue (tree, Ids::windowsTargetPlatformVersion, nullptr, "10.0.16299.0") { } //============================================================================== void setBuildEnabled (bool enabled) noexcept { buildEnabledValue = enabled; } void setContinuousRebuildEnabled (bool enabled) noexcept { continuousRebuildEnabledValue = enabled; } void setWarningsEnabled (bool enabled) { warningsEnabledValue = enabled; } bool isBuildEnabled() const noexcept { return buildEnabledValue.get(); } bool isContinuousRebuildEnabled() const noexcept { return continuousRebuildEnabledValue.get(); } bool areWarningsEnabled() const noexcept { return warningsEnabledValue.get(); } String getUserHeaderPathString() const noexcept { return userHeaderPathValue.get(); } String getSystemHeaderPathString() const noexcept { return systemHeaderPathValue.get(); } String getExtraDLLsString() const noexcept { return extraDLLsValue.get(); } String getExtraCompilerFlagsString() const noexcept { return extraCompilerFlagsValue.get(); } String getExtraPreprocessorDefsString() const noexcept { return extraPreprocessorDefsValue.get(); } String getWindowsTargetPlatformVersionString() const noexcept { return windowsTargetPlatformValue.get(); } //============================================================================== void getLiveSettings (PropertyListBuilder& props) { props.addSearchPathProperty (userHeaderPathValue, "User Header Paths", "User header search paths."); props.addSearchPathProperty (systemHeaderPathValue, "System Header Paths", "System header search paths."); props.add (new TextPropertyComponent (extraPreprocessorDefsValue, "Preprocessor Definitions", 32768, true), "Extra preprocessor definitions. Use the form \"NAME1=value NAME2=value\", using whitespace or commas " "to separate the items - to include a space or comma in a definition, precede it with a backslash."); props.add (new TextPropertyComponent (extraCompilerFlagsValue, "Extra Compiler Flags", 2048, true), "Extra command-line flags to be passed to the compiler. This string can contain references to preprocessor" " definitions in the form ${NAME_OF_DEFINITION}, which will be replaced with their values."); props.add (new TextPropertyComponent (extraDLLsValue, "Extra Dynamic Libraries", 2048, true), "Extra dynamic libs that the running code may require. Use new-lines or commas to separate the items."); props.add (new TextPropertyComponent (windowsTargetPlatformValue, "Windows Target Platform", 256, false), "The Windows target platform to use."); } private: ValueTree tree; ValueWithDefault buildEnabledValue, continuousRebuildEnabledValue, warningsEnabledValue, userHeaderPathValue, systemHeaderPathValue, extraDLLsValue, extraCompilerFlagsValue, extraPreprocessorDefsValue, windowsTargetPlatformValue; //============================================================================== String getLiveSettingsSubType() const noexcept { #if JUCE_MAC return "OSX"; #elif JUCE_WINDOWS return "WINDOWS"; #elif JUCE_LINUX return "LINUX"; #else // unknown platform?! jassertfalse; return {}; #endif } //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CompileEngineSettings) };