| @@ -59,3 +59,6 @@ profile | |||||
| **/doxygen/build | **/doxygen/build | ||||
| **/.idea | **/.idea | ||||
| extras/Projucer/JUCECompileEngine.dylib | extras/Projucer/JUCECompileEngine.dylib | ||||
| .idea | |||||
| **/cmake-build* | |||||
| @@ -0,0 +1,103 @@ | |||||
| # ============================================================================== | |||||
| # | |||||
| # This file is part of the JUCE 6 technical preview. | |||||
| # Copyright (c) 2020 - ROLI Ltd. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # ============================================================================== | |||||
| cmake_minimum_required(VERSION 3.12) | |||||
| project(JUCE VERSION 6.0.0 LANGUAGES C CXX) | |||||
| set_property(GLOBAL PROPERTY USE_FOLDERS YES) | |||||
| include(extras/Build/CMake/JUCEUtils.cmake) | |||||
| set_directory_properties(PROPERTIES | |||||
| JUCE_COMPANY_NAME "JUCE" | |||||
| JUCE_COMPANY_WEBSITE "juce.com" | |||||
| JUCE_COMPANY_EMAIL "info@juce.com" | |||||
| JUCE_COMPANY_COPYRIGHT "Copyright (c) 2020 - ROLI Ltd.") | |||||
| option(JUCE_COPY_PLUGIN_AFTER_BUILD | |||||
| "Whether or not plugins should be installed to the system after building" OFF) | |||||
| set_property(GLOBAL PROPERTY JUCE_COPY_PLUGIN_AFTER_BUILD ${JUCE_COPY_PLUGIN_AFTER_BUILD}) | |||||
| set(CMAKE_CXX_EXTENSIONS FALSE) | |||||
| add_subdirectory(modules) | |||||
| add_subdirectory(extras/Build) | |||||
| # If you want to build the JUCE examples with VST2/AAX support, you'll need to make the VST2/AAX | |||||
| # headers visible to the juce_audio_processors module. You can either set the paths on the command | |||||
| # line, (e.g. -DJUCE_GLOBAL_AAX_SDK_PATH=/path/to/sdk) if you're just building the JUCE examples, or | |||||
| # you can call the `juce_set_*_sdk_path` functions in your own CMakeLists after importing JUCE. | |||||
| if(JUCE_GLOBAL_AAX_SDK_PATH) | |||||
| juce_set_aax_sdk_path("${JUCE_GLOBAL_AAX_SDK_PATH}") | |||||
| endif() | |||||
| if(JUCE_GLOBAL_VST2_SDK_PATH) | |||||
| juce_set_vst2_sdk_path("${JUCE_GLOBAL_VST2_SDK_PATH}") | |||||
| endif() | |||||
| # We don't build anything other than the juceaide by default, because we want to keep configuration | |||||
| # speedy and the number of targets low. If you want to add targets for the extra projects and | |||||
| # example PIPs (there's a lot of them!), specify -DJUCE_BUILD_EXAMPLES=ON and/or | |||||
| # -DJUCE_BUILD_EXTRAS=ON when initially generating your build tree. | |||||
| option(JUCE_BUILD_EXTRAS "Add build targets for the Projucer and other tools" OFF) | |||||
| if(JUCE_BUILD_EXTRAS) | |||||
| add_subdirectory(extras) | |||||
| endif() | |||||
| option(JUCE_BUILD_EXAMPLES "Add build targets for the DemoRunner and PIPs" OFF) | |||||
| if(JUCE_BUILD_EXAMPLES) | |||||
| add_subdirectory(examples) | |||||
| endif() | |||||
| # ================================================================================================== | |||||
| # Install configuration | |||||
| include(CMakePackageConfigHelpers) | |||||
| write_basic_package_version_file("${JUCE_BINARY_DIR}/JUCEConfigVersion.cmake" | |||||
| VERSION ${JUCE_VERSION} | |||||
| COMPATIBILITY ExactVersion | |||||
| ARCH_INDEPENDENT) | |||||
| set(JUCE_INSTALL_DESTINATION "lib/cmake/JUCE-${JUCE_VERSION}" CACHE STRING | |||||
| "The location, relative to the install prefix, where the JUCE config file will be installed") | |||||
| install(EXPORT JUCE NAMESPACE juce:: DESTINATION "${JUCE_INSTALL_DESTINATION}") | |||||
| configure_package_config_file("${JUCE_CMAKE_UTILS_DIR}/JUCEConfig.cmake.in" | |||||
| "${JUCE_BINARY_DIR}/JUCEConfig.cmake" | |||||
| INSTALL_DESTINATION "${JUCE_INSTALL_DESTINATION}") | |||||
| install(FILES "${JUCE_BINARY_DIR}/JUCEConfigVersion.cmake" | |||||
| "${JUCE_BINARY_DIR}/JUCEConfig.cmake" | |||||
| "${JUCE_CMAKE_UTILS_DIR}/LaunchScreen.storyboard" | |||||
| "${JUCE_CMAKE_UTILS_DIR}/PIPAudioProcessor.cpp.in" | |||||
| "${JUCE_CMAKE_UTILS_DIR}/PIPComponent.cpp.in" | |||||
| "${JUCE_CMAKE_UTILS_DIR}/PIPConsole.cpp.in" | |||||
| "${JUCE_CMAKE_UTILS_DIR}/RecentFilesMenuTemplate.nib" | |||||
| "${JUCE_CMAKE_UTILS_DIR}/UnityPluginGUIScript.cs.in" | |||||
| "${JUCE_CMAKE_UTILS_DIR}/copyDir.cmake" | |||||
| "${JUCE_CMAKE_UTILS_DIR}/JUCEUtils.cmake" | |||||
| DESTINATION "${JUCE_INSTALL_DESTINATION}") | |||||
| install(FILES "${JUCE_SOURCE_DIR}/LICENSE.md" | |||||
| DESTINATION "${JUCE_INSTALL_DESTINATION}" | |||||
| RENAME COPYRIGHT) | |||||
| @@ -58,6 +58,8 @@ inline File getExamplesDirectory() noexcept | |||||
| jassert (success); | jassert (success); | ||||
| return mo.toString(); | return mo.toString(); | ||||
| #elif defined PIP_JUCE_EXAMPLES_DIRECTORY_STRING | |||||
| return File { PIP_JUCE_EXAMPLES_DIRECTORY_STRING }; | |||||
| #else | #else | ||||
| auto currentFile = File::getSpecialLocation (File::SpecialLocationType::currentApplicationFile); | auto currentFile = File::getSpecialLocation (File::SpecialLocationType::currentApplicationFile); | ||||
| auto exampleDir = currentFile.getParentDirectory().getChildFile ("examples"); | auto exampleDir = currentFile.getParentDirectory().getChildFile ("examples"); | ||||
| @@ -0,0 +1,17 @@ | |||||
| # ============================================================================== | |||||
| # | |||||
| # This file is part of the JUCE 6 technical preview. | |||||
| # Copyright (c) 2020 - ROLI Ltd. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # ============================================================================== | |||||
| _juce_add_pips() | |||||
| @@ -0,0 +1,17 @@ | |||||
| # ============================================================================== | |||||
| # | |||||
| # This file is part of the JUCE 6 technical preview. | |||||
| # Copyright (c) 2020 - ROLI Ltd. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # ============================================================================== | |||||
| _juce_add_pips() | |||||
| @@ -0,0 +1,104 @@ | |||||
| # Example Audio Plugin CMakeLists.txt | |||||
| # To get started on a new plugin, copy this entire folder (containing this file and C++ sources) to | |||||
| # a convenient location, and then start making modifications. | |||||
| # The first line of any CMake project should be a call to `cmake_minimum_required`, which checks | |||||
| # that the installed CMake will be able to understand the following CMakeLists, and ensures that | |||||
| # CMake's behaviour is compatible with the named version. This is a standard CMake command, so more | |||||
| # information can be found in the CMake docs. | |||||
| cmake_minimum_required(VERSION 3.15) | |||||
| # The top-level CMakeLists.txt file for a project must contain a literal, direct call to the | |||||
| # `project()` command. `project()` sets up some helpful variables that describe source/binary | |||||
| # directories, and the current project version. This is a standard CMake command. | |||||
| project(AUDIO_PLUGIN_EXAMPLE VERSION 0.0.1) | |||||
| # If you've installed JUCE somehow (via a package manager, or directly using the CMake install | |||||
| # target), you'll need to tell this project that it depends on the installed copy of JUCE. If you've | |||||
| # included JUCE directly in your source tree (perhaps as a submodule), you'll need to tell CMake to | |||||
| # include that subdirectory as part of the build. | |||||
| # find_package(JUCE CONFIG REQUIRED) # If you've installed JUCE to your system | |||||
| # or | |||||
| # add_subdirectory(JUCE) # If you've put JUCE in a subdirectory called JUCE | |||||
| # If you are building a VST2 or AAX plugin, CMake needs to be told where to find these SDKs on your | |||||
| # system. This setup should be done before calling `juce_add_plugin`. | |||||
| # juce_set_vst2_sdk_path(...) | |||||
| # juce_set_aax_sdk_path(...) | |||||
| # `juce_add_plugin` adds a static library target with the name passed as the first argument | |||||
| # (AudioPluginExample here). This target is a normal CMake target, but has a lot of extra properties set | |||||
| # up by default. As well as this shared code static library, this function adds targets for each of | |||||
| # the formats specified by the FORMATS arguments. This function accepts many optional arguments. | |||||
| # Check the readme at `examples/CMake` in the JUCE repo for the full list. | |||||
| juce_add_plugin(AudioPluginExample | |||||
| # VERSION ... # Set this if the plugin version is different to the project version | |||||
| # ICON_BIG ... # ICON_* arguments specify a path to an image file to use as an icon for the Standalone | |||||
| # ICON_SMALL ... | |||||
| # COMPANY_NAME ... # Specify the name of the plugin's author | |||||
| # IS_SYNTH TRUE/FALSE # Is this a synth or an effect? | |||||
| # NEEDS_MIDI_INPUT TRUE/FALSE # Does the plugin need midi input? | |||||
| # NEEDS_MIDI_OUTPUT TRUE/FALSE # Does the plugin need midi output? | |||||
| # IS_MIDI_EFFECT TRUE/FALSE # Is this plugin a MIDI effect? | |||||
| # EDITOR_WANTS_KEYBOARD_FOCUS TRUE/FALSE # Does the editor need keyboard focus? | |||||
| # COPY_PLUGIN_AFTER_BUILD TRUE/FALSE # Should the plugin be installed to a default location after building? | |||||
| PLUGIN_MANUFACTURER_CODE Juce # A four-character manufacturer id with at least one upper-case character | |||||
| PLUGIN_CODE Dem0 # A unique four-character plugin id with at least one upper-case character | |||||
| FORMATS AU VST3 Standalone # The formats to build. Other valid formats are: AAX Unity VST AU AUv3 | |||||
| PRODUCT_NAME "Audio Plugin Example") # The name of the final executable, which can differ from the target name | |||||
| # `juce_generate_juce_header` will create a JuceHeader.h for a given target, which will be generated | |||||
| # into your build tree. This should be included with `#include <JuceHeader.h>`. The include path for | |||||
| # this header will be automatically added to the target. The main function of the JuceHeader is to | |||||
| # include all your JUCE module headers; if you're happy to include module headers directly, you | |||||
| # probably don't need to call this. | |||||
| # juce_generate_juce_header(AudioPluginExample) | |||||
| # `target_sources` adds source files to a target. We pass the target that needs the sources as the | |||||
| # first argument, then a visibility parameter for the sources (PRIVATE is normally best practice, | |||||
| # although it doesn't really affect executable targets). Finally, we supply a list of source files | |||||
| # that will be built into the target. This is a standard CMake command. | |||||
| target_sources(AudioPluginExample PRIVATE | |||||
| PluginEditor.cpp | |||||
| PluginProcessor.cpp) | |||||
| # `target_compile_definitions` adds some preprocessor definitions to our target. In a Projucer | |||||
| # project, these might be passed in the 'Preprocessor Definitions' field. JUCE modules also make use | |||||
| # of compile definitions to switch certain features on/off, so if there's a particular feature you | |||||
| # need that's not on by default, check the module header for the correct flag to set here. These | |||||
| # definitions will be visible both to your code, and also the JUCE module code, so for new | |||||
| # definitions, pick unique names that are unlikely to collide! This is a standard CMake command. | |||||
| target_compile_definitions(AudioPluginExample | |||||
| PUBLIC | |||||
| # JUCE_WEB_BROWSER and JUCE_USE_CURL would be on by default, but you might not need them. | |||||
| JUCE_WEB_BROWSER=0 # If you remove this, add `NEEDS_WEB_BROWSER TRUE` to the `juce_add_plugin` call | |||||
| JUCE_USE_CURL=0 # If you remove this, add `NEEDS_CURL TRUE` to the `juce_add_plugin` call | |||||
| JUCE_VST3_CAN_REPLACE_VST2=0) | |||||
| # If your target needs extra binary assets, you can add them here. The first argument is the name of | |||||
| # a new static library target that will include all the binary resources. There is an optional | |||||
| # `NAMESPACE` argument that can specify the namespace of the generated binary data class. Finally, | |||||
| # the SOURCES argument should be followed by a list of source files that should be built into the | |||||
| # static library. These source files can be of any kind (wav data, images, fonts, icons etc.). | |||||
| # Conversion to binary-data will happen when your target is built. | |||||
| # juce_add_binary_data(AudioPluginData SOURCES ...) | |||||
| # `target_link_libraries` links libraries and JUCE modules to other libraries or executables. Here, | |||||
| # we're linking our executable target to the `juce::juce_audio_utils` module. Inter-module | |||||
| # dependencies are resolved automatically, so `juce_core`, `juce_events` and so on will also be | |||||
| # linked automatically. If we'd generated a binary data target above, we would need to link to it | |||||
| # here too. This is a standard CMake command. | |||||
| target_link_libraries(AudioPluginExample PRIVATE | |||||
| # AudioPluginData # If we'd created a binary data target, we'd link to it here | |||||
| juce::juce_audio_utils) | |||||
| @@ -0,0 +1,33 @@ | |||||
| #include "PluginProcessor.h" | |||||
| #include "PluginEditor.h" | |||||
| //============================================================================== | |||||
| AudioPluginAudioProcessorEditor::AudioPluginAudioProcessorEditor (AudioPluginAudioProcessor& p) | |||||
| : AudioProcessorEditor (&p), processorRef (p) | |||||
| { | |||||
| juce::ignoreUnused (processorRef); | |||||
| // Make sure that before the constructor has finished, you've set the | |||||
| // editor's size to whatever you need it to be. | |||||
| setSize (400, 300); | |||||
| } | |||||
| AudioPluginAudioProcessorEditor::~AudioPluginAudioProcessorEditor() | |||||
| { | |||||
| } | |||||
| //============================================================================== | |||||
| void AudioPluginAudioProcessorEditor::paint (juce::Graphics& g) | |||||
| { | |||||
| // (Our component is opaque, so we must completely fill the background with a solid colour) | |||||
| g.fillAll (getLookAndFeel().findColour (juce::ResizableWindow::backgroundColourId)); | |||||
| g.setColour (juce::Colours::white); | |||||
| g.setFont (15.0f); | |||||
| g.drawFittedText ("Hello World!", getLocalBounds(), juce::Justification::centred, 1); | |||||
| } | |||||
| void AudioPluginAudioProcessorEditor::resized() | |||||
| { | |||||
| // This is generally where you'll want to lay out the positions of any | |||||
| // subcomponents in your editor.. | |||||
| } | |||||
| @@ -0,0 +1,22 @@ | |||||
| #pragma once | |||||
| #include "PluginProcessor.h" | |||||
| //============================================================================== | |||||
| class AudioPluginAudioProcessorEditor : public juce::AudioProcessorEditor | |||||
| { | |||||
| public: | |||||
| explicit AudioPluginAudioProcessorEditor (AudioPluginAudioProcessor&); | |||||
| ~AudioPluginAudioProcessorEditor() override; | |||||
| //============================================================================== | |||||
| void paint (juce::Graphics&) override; | |||||
| void resized() override; | |||||
| private: | |||||
| // This reference is provided as a quick way for your editor to | |||||
| // access the processor object that created it. | |||||
| AudioPluginAudioProcessor& processorRef; | |||||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AudioPluginAudioProcessorEditor) | |||||
| }; | |||||
| @@ -0,0 +1,186 @@ | |||||
| #include "PluginProcessor.h" | |||||
| #include "PluginEditor.h" | |||||
| //============================================================================== | |||||
| AudioPluginAudioProcessor::AudioPluginAudioProcessor() | |||||
| : AudioProcessor (BusesProperties() | |||||
| #if ! JucePlugin_IsMidiEffect | |||||
| #if ! JucePlugin_IsSynth | |||||
| .withInput ("Input", juce::AudioChannelSet::stereo(), true) | |||||
| #endif | |||||
| .withOutput ("Output", juce::AudioChannelSet::stereo(), true) | |||||
| #endif | |||||
| ) | |||||
| { | |||||
| } | |||||
| AudioPluginAudioProcessor::~AudioPluginAudioProcessor() | |||||
| { | |||||
| } | |||||
| //============================================================================== | |||||
| const juce::String AudioPluginAudioProcessor::getName() const | |||||
| { | |||||
| return JucePlugin_Name; | |||||
| } | |||||
| bool AudioPluginAudioProcessor::acceptsMidi() const | |||||
| { | |||||
| #if JucePlugin_WantsMidiInput | |||||
| return true; | |||||
| #else | |||||
| return false; | |||||
| #endif | |||||
| } | |||||
| bool AudioPluginAudioProcessor::producesMidi() const | |||||
| { | |||||
| #if JucePlugin_ProducesMidiOutput | |||||
| return true; | |||||
| #else | |||||
| return false; | |||||
| #endif | |||||
| } | |||||
| bool AudioPluginAudioProcessor::isMidiEffect() const | |||||
| { | |||||
| #if JucePlugin_IsMidiEffect | |||||
| return true; | |||||
| #else | |||||
| return false; | |||||
| #endif | |||||
| } | |||||
| double AudioPluginAudioProcessor::getTailLengthSeconds() const | |||||
| { | |||||
| return 0.0; | |||||
| } | |||||
| int AudioPluginAudioProcessor::getNumPrograms() | |||||
| { | |||||
| return 1; // NB: some hosts don't cope very well if you tell them there are 0 programs, | |||||
| // so this should be at least 1, even if you're not really implementing programs. | |||||
| } | |||||
| int AudioPluginAudioProcessor::getCurrentProgram() | |||||
| { | |||||
| return 0; | |||||
| } | |||||
| void AudioPluginAudioProcessor::setCurrentProgram (int index) | |||||
| { | |||||
| juce::ignoreUnused (index); | |||||
| } | |||||
| const juce::String AudioPluginAudioProcessor::getProgramName (int index) | |||||
| { | |||||
| juce::ignoreUnused (index); | |||||
| return {}; | |||||
| } | |||||
| void AudioPluginAudioProcessor::changeProgramName (int index, const juce::String& newName) | |||||
| { | |||||
| juce::ignoreUnused (index, newName); | |||||
| } | |||||
| //============================================================================== | |||||
| void AudioPluginAudioProcessor::prepareToPlay (double sampleRate, int samplesPerBlock) | |||||
| { | |||||
| // Use this method as the place to do any pre-playback | |||||
| // initialisation that you need.. | |||||
| juce::ignoreUnused (sampleRate, samplesPerBlock); | |||||
| } | |||||
| void AudioPluginAudioProcessor::releaseResources() | |||||
| { | |||||
| // When playback stops, you can use this as an opportunity to free up any | |||||
| // spare memory, etc. | |||||
| } | |||||
| bool AudioPluginAudioProcessor::isBusesLayoutSupported (const BusesLayout& layouts) const | |||||
| { | |||||
| #if JucePlugin_IsMidiEffect | |||||
| juce::ignoreUnused (layouts); | |||||
| return true; | |||||
| #else | |||||
| // This is the place where you check if the layout is supported. | |||||
| // In this template code we only support mono or stereo. | |||||
| if (layouts.getMainOutputChannelSet() != juce::AudioChannelSet::mono() | |||||
| && layouts.getMainOutputChannelSet() != juce::AudioChannelSet::stereo()) | |||||
| return false; | |||||
| // This checks if the input layout matches the output layout | |||||
| #if ! JucePlugin_IsSynth | |||||
| if (layouts.getMainOutputChannelSet() != layouts.getMainInputChannelSet()) | |||||
| return false; | |||||
| #endif | |||||
| return true; | |||||
| #endif | |||||
| } | |||||
| void AudioPluginAudioProcessor::processBlock (juce::AudioBuffer<float>& buffer, | |||||
| juce::MidiBuffer& midiMessages) | |||||
| { | |||||
| juce::ignoreUnused (midiMessages); | |||||
| juce::ScopedNoDenormals noDenormals; | |||||
| auto totalNumInputChannels = getTotalNumInputChannels(); | |||||
| auto totalNumOutputChannels = getTotalNumOutputChannels(); | |||||
| // In case we have more outputs than inputs, this code clears any output | |||||
| // channels that didn't contain input data, (because these aren't | |||||
| // guaranteed to be empty - they may contain garbage). | |||||
| // This is here to avoid people getting screaming feedback | |||||
| // when they first compile a plugin, but obviously you don't need to keep | |||||
| // this code if your algorithm always overwrites all the output channels. | |||||
| for (auto i = totalNumInputChannels; i < totalNumOutputChannels; ++i) | |||||
| buffer.clear (i, 0, buffer.getNumSamples()); | |||||
| // This is the place where you'd normally do the guts of your plugin's | |||||
| // audio processing... | |||||
| // Make sure to reset the state if your inner loop is processing | |||||
| // the samples and the outer loop is handling the channels. | |||||
| // Alternatively, you can process the samples with the channels | |||||
| // interleaved by keeping the same state. | |||||
| for (int channel = 0; channel < totalNumInputChannels; ++channel) | |||||
| { | |||||
| auto* channelData = buffer.getWritePointer (channel); | |||||
| juce::ignoreUnused (channelData); | |||||
| // ..do something to the data... | |||||
| } | |||||
| } | |||||
| //============================================================================== | |||||
| bool AudioPluginAudioProcessor::hasEditor() const | |||||
| { | |||||
| return true; // (change this to false if you choose to not supply an editor) | |||||
| } | |||||
| juce::AudioProcessorEditor* AudioPluginAudioProcessor::createEditor() | |||||
| { | |||||
| return new AudioPluginAudioProcessorEditor (*this); | |||||
| } | |||||
| //============================================================================== | |||||
| void AudioPluginAudioProcessor::getStateInformation (juce::MemoryBlock& destData) | |||||
| { | |||||
| // You should use this method to store your parameters in the memory block. | |||||
| // You could do that either as raw data, or use the XML or ValueTree classes | |||||
| // as intermediaries to make it easy to save and load complex data. | |||||
| juce::ignoreUnused (destData); | |||||
| } | |||||
| void AudioPluginAudioProcessor::setStateInformation (const void* data, int sizeInBytes) | |||||
| { | |||||
| // You should use this method to restore your parameters from this memory block, | |||||
| // whose contents will have been created by the getStateInformation() call. | |||||
| juce::ignoreUnused (data, sizeInBytes); | |||||
| } | |||||
| //============================================================================== | |||||
| // This creates new instances of the plugin.. | |||||
| juce::AudioProcessor* JUCE_CALLTYPE createPluginFilter() | |||||
| { | |||||
| return new AudioPluginAudioProcessor(); | |||||
| } | |||||
| @@ -0,0 +1,47 @@ | |||||
| #pragma once | |||||
| #include <juce_audio_processors/juce_audio_processors.h> | |||||
| //============================================================================== | |||||
| class AudioPluginAudioProcessor : public juce::AudioProcessor | |||||
| { | |||||
| public: | |||||
| //============================================================================== | |||||
| AudioPluginAudioProcessor(); | |||||
| ~AudioPluginAudioProcessor() override; | |||||
| //============================================================================== | |||||
| void prepareToPlay (double sampleRate, int samplesPerBlock) override; | |||||
| void releaseResources() override; | |||||
| bool isBusesLayoutSupported (const BusesLayout& layouts) const override; | |||||
| void processBlock (juce::AudioBuffer<float>&, juce::MidiBuffer&) override; | |||||
| //============================================================================== | |||||
| juce::AudioProcessorEditor* createEditor() override; | |||||
| bool hasEditor() const override; | |||||
| //============================================================================== | |||||
| const juce::String getName() const override; | |||||
| bool acceptsMidi() const override; | |||||
| bool producesMidi() const override; | |||||
| bool isMidiEffect() const override; | |||||
| double getTailLengthSeconds() const override; | |||||
| //============================================================================== | |||||
| int getNumPrograms() override; | |||||
| int getCurrentProgram() override; | |||||
| void setCurrentProgram (int index) override; | |||||
| const juce::String getProgramName (int index) override; | |||||
| void changeProgramName (int index, const juce::String& newName) override; | |||||
| //============================================================================== | |||||
| void getStateInformation (juce::MemoryBlock& destData) override; | |||||
| void setStateInformation (const void* data, int sizeInBytes) override; | |||||
| private: | |||||
| //============================================================================== | |||||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AudioPluginAudioProcessor) | |||||
| }; | |||||
| @@ -0,0 +1,19 @@ | |||||
| # ============================================================================== | |||||
| # | |||||
| # This file is part of the JUCE 6 technical preview. | |||||
| # Copyright (c) 2020 - ROLI Ltd. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # ============================================================================== | |||||
| add_subdirectory(AudioPlugin) | |||||
| add_subdirectory(ConsoleApp) | |||||
| add_subdirectory(GuiApp) | |||||
| @@ -0,0 +1,82 @@ | |||||
| # Example Console App CMakeLists.txt | |||||
| # To get started on a new console app, copy this entire folder (containing this file and C++ | |||||
| # sources) to a convenient location, and then start making modifications. For other examples of | |||||
| # CMakeLists for console apps, check `extras/BinaryBuilder` and `extras/UnitTestRunner` in the JUCE | |||||
| # repo. | |||||
| # The first line of any CMake project should be a call to `cmake_minimum_required`, which checks | |||||
| # that the installed CMake will be able to understand the following CMakeLists, and ensures that | |||||
| # CMake's behaviour is compatible with the named version. This is a standard CMake command, so more | |||||
| # information can be found in the CMake docs. | |||||
| cmake_minimum_required(VERSION 3.12) | |||||
| # The top-level CMakeLists.txt file for a project must contain a literal, direct call to the | |||||
| # `project()` command. `project()` sets up some helpful variables that describe source/binary | |||||
| # directories, and the current project version. This is a standard CMake command. | |||||
| project(CONSOLE_APP_EXAMPLE VERSION 0.0.1) | |||||
| # If you've installed JUCE somehow (via a package manager, or directly using the CMake install | |||||
| # target), you'll need to tell this project that it depends on the installed copy of JUCE. If you've | |||||
| # included JUCE directly in your source tree (perhaps as a submodule), you'll need to tell CMake to | |||||
| # include that subdirectory as part of the build. | |||||
| # find_package(JUCE CONFIG REQUIRED) # If you've installed JUCE to your system | |||||
| # or | |||||
| # add_subdirectory(JUCE) # If you've put JUCE in a subdirectory called JUCE | |||||
| # `juce_add_console_app` adds an executable target with the name passed as the first argument | |||||
| # (ConsoleAppExample here). This target is a normal CMake target, but has a lot of extra properties | |||||
| # set up by default. This function accepts many optional arguments. Check the readme at | |||||
| # `examples/CMake/readme.md` in the JUCE repo for the full list. | |||||
| juce_add_console_app(ConsoleAppExample | |||||
| PRODUCT_NAME "Console App Example") # The name of the final executable, which can differ from the target name | |||||
| # `juce_generate_juce_header` will create a JuceHeader.h for a given target, which will be generated | |||||
| # into the build tree. This header should be included with `#include <JuceHeader.h>`. The include | |||||
| # path for this header will be automatically added to the target. The main function of the | |||||
| # JuceHeader is to include all the JUCE module headers for a particular target; if you're happy to | |||||
| # include module headers directly, you probably don't need to call this. | |||||
| # juce_generate_juce_header(ConsoleAppExample) | |||||
| # `target_sources` adds source files to a target. We pass the target that needs the sources as the | |||||
| # first argument, then a visibility parameter for the sources (PRIVATE is normally best practice, | |||||
| # although it doesn't really affect executable targets). Finally, we supply a list of source files | |||||
| # that will be built into the target. This is a standard CMake command. | |||||
| target_sources(ConsoleAppExample PRIVATE | |||||
| Main.cpp) | |||||
| # `target_compile_definitions` adds some preprocessor definitions to our target. In a Projucer | |||||
| # project, these might be passed in the 'Preprocessor Definitions' field. JUCE modules also make use | |||||
| # of compile definitions to switch certain features on/off, so if there's a particular feature you | |||||
| # need that's not on by default, check the module header for the correct flag to set here. These | |||||
| # definitions will be visible both to your code, and also the JUCE module code, so for new | |||||
| # definitions, pick unique names that are unlikely to collide! This is a standard CMake command. | |||||
| target_compile_definitions(ConsoleAppExample PRIVATE | |||||
| # JUCE_WEB_BROWSER and JUCE_USE_CURL would be on by default, but you might not need them. | |||||
| JUCE_WEB_BROWSER=0 # If you remove this, add `NEEDS_WEB_BROWSER TRUE` to the `juce_add_console_app` call | |||||
| JUCE_USE_CURL=0) # If you remove this, add `NEEDS_CURL TRUE` to the `juce_add_console_app` call | |||||
| # If the target needs extra binary assets, they can be added here. The first argument is the name of | |||||
| # a new static library target that will include all the binary resources. There is an optional | |||||
| # `NAMESPACE` argument that can specify the namespace of the generated binary data class. Finally, | |||||
| # the SOURCES argument should be followed by a list of source files that should be built into the | |||||
| # static library. These source files can be of any kind (wav data, images, fonts, icons etc.). | |||||
| # Conversion to binary-data will happen when the target is built. | |||||
| # juce_add_binary_data(ConsoleAppData SOURCES ...) | |||||
| # `target_link_libraries` links libraries and JUCE modules to other libraries or executables. Here, | |||||
| # we're linking our executable target to the `juce::juce_core` module. Inter-module dependencies are | |||||
| # resolved automatically. If you'd generated a binary data target above, you would need to link to | |||||
| # it here too. This is a standard CMake command. | |||||
| target_link_libraries(ConsoleAppExample PRIVATE | |||||
| # ConsoleAppData # If you'd created a binary data target, you'd link to it here | |||||
| juce::juce_core) | |||||
| @@ -0,0 +1,10 @@ | |||||
| #include <juce_core/juce_core.h> | |||||
| int main (int argc, char* argv[]) | |||||
| { | |||||
| // Your code goes here! | |||||
| juce::ignoreUnused (argc, argv); | |||||
| return 0; | |||||
| } | |||||
| @@ -0,0 +1,95 @@ | |||||
| # Example GUI App CMakeLists.txt | |||||
| # To get started on a new GUI app, copy this entire folder (containing this file and C++ sources) to | |||||
| # a convenient location, and then start making modifications. For other examples of CMakeLists for | |||||
| # GUI apps, check `extras/Projucer` and `examples/DemoRunner` in the JUCE repo. | |||||
| # The first line of any CMake project should be a call to `cmake_minimum_required`, which checks | |||||
| # that the installed CMake will be able to understand the following CMakeLists, and ensures that | |||||
| # CMake's behaviour is compatible with the named version. This is a standard CMake command, so more | |||||
| # information can be found in the CMake docs. | |||||
| cmake_minimum_required(VERSION 3.12) | |||||
| # The top-level CMakeLists.txt file for a project must contain a literal, direct call to the | |||||
| # `project()` command. `project()` sets up some helpful variables that describe source/binary | |||||
| # directories, and the current project version. This is a standard CMake command. | |||||
| project(GUI_APP_EXAMPLE VERSION 0.0.1) | |||||
| # If you've installed JUCE somehow (via a package manager, or directly using the CMake install | |||||
| # target), you'll need to tell this project that it depends on the installed copy of JUCE. If you've | |||||
| # included JUCE directly in your source tree (perhaps as a submodule), you'll need to tell CMake to | |||||
| # include that subdirectory as part of the build. | |||||
| # find_package(JUCE CONFIG REQUIRED) # If you've installed JUCE to your system | |||||
| # or | |||||
| # add_subdirectory(JUCE) # If you've put JUCE in a subdirectory called JUCE | |||||
| # If your app depends the VST2 SDK, perhaps to host VST2 plugins, CMake needs to be told where | |||||
| # to find the SDK on your system. This setup should be done before calling `juce_add_gui_app`. | |||||
| # juce_set_vst2_sdk_path(...) | |||||
| # `juce_add_gui_app` adds an executable target with the name passed as the first argument | |||||
| # (GuiAppExample here). This target is a normal CMake target, but has a lot of extra properties set | |||||
| # up by default. This function accepts many optional arguments. Check the readme at `examples/CMake` | |||||
| # in the JUCE repo for the full list. | |||||
| juce_add_gui_app(GuiAppExample | |||||
| # VERSION ... # Set this if the app version is different to the project version | |||||
| # ICON_BIG ... # ICON_* arguments specify a path to an image file to use as an icon | |||||
| # ICON_SMALL ... | |||||
| # DOCUMENT_EXTENSIONS ... # Specify file extensions that should be associated with this app | |||||
| # COMPANY_NAME ... # Specify the name of the app's author | |||||
| PRODUCT_NAME "Gui App Example") # The name of the final executable, which can differ from the target name | |||||
| # `juce_generate_juce_header` will create a JuceHeader.h for a given target, which will be generated | |||||
| # into your build tree. This should be included with `#include <JuceHeader.h>`. The include path for | |||||
| # this header will be automatically added to the target. The main function of the JuceHeader is to | |||||
| # include all your JUCE module headers; if you're happy to include module headers directly, you | |||||
| # probably don't need to call this. | |||||
| # juce_generate_juce_header(GuiAppExample) | |||||
| # `target_sources` adds source files to a target. We pass the target that needs the sources as the | |||||
| # first argument, then a visibility parameter for the sources (PRIVATE is normally best practice, | |||||
| # although it doesn't really affect executable targets). Finally, we supply a list of source files | |||||
| # that will be built into the target. This is a standard CMake command. | |||||
| target_sources(GuiAppExample PRIVATE | |||||
| Main.cpp | |||||
| MainComponent.cpp) | |||||
| # `target_compile_definitions` adds some preprocessor definitions to our target. In a Projucer | |||||
| # project, these might be passed in the 'Preprocessor Definitions' field. JUCE modules also make use | |||||
| # of compile definitions to switch certain features on/off, so if there's a particular feature you | |||||
| # need that's not on by default, check the module header for the correct flag to set here. These | |||||
| # definitions will be visible both to your code, and also the JUCE module code, so for new | |||||
| # definitions, pick unique names that are unlikely to collide! This is a standard CMake command. | |||||
| target_compile_definitions(GuiAppExample PRIVATE | |||||
| # JUCE_WEB_BROWSER and JUCE_USE_CURL would be on by default, but you might not need them. | |||||
| JUCE_WEB_BROWSER=0 # If you remove this, add `NEEDS_WEB_BROWSER TRUE` to the `juce_add_gui_app` call | |||||
| JUCE_USE_CURL=0 # If you remove this, add `NEEDS_CURL TRUE` to the `juce_add_gui_app` call | |||||
| JUCE_APPLICATION_NAME_STRING="$<TARGET_PROPERTY:GuiAppExample,JUCE_PROJECT_NAME>" | |||||
| JUCE_APPLICATION_VERSION_STRING="$<TARGET_PROPERTY:GuiAppExample,JUCE_VERSION>") | |||||
| # If your target needs extra binary assets, you can add them here. The first argument is the name of | |||||
| # a new static library target that will include all the binary resources. There is an optional | |||||
| # `NAMESPACE` argument that can specify the namespace of the generated binary data class. Finally, | |||||
| # the SOURCES argument should be followed by a list of source files that should be built into the | |||||
| # static library. These source files can be of any kind (wav data, images, fonts, icons etc.). | |||||
| # Conversion to binary-data will happen when your target is built. | |||||
| # juce_add_binary_data(GuiAppData SOURCES ...) | |||||
| # `target_link_libraries` links libraries and JUCE modules to other libraries or executables. Here, | |||||
| # we're linking our executable target to the `juce::juce_gui_extra` module. Inter-module | |||||
| # dependencies are resolved automatically, so `juce_core`, `juce_events` and so on will also be | |||||
| # linked automatically. If we'd generated a binary data target above, we would need to link to it | |||||
| # here too. This is a standard CMake command. | |||||
| target_link_libraries(GuiAppExample PRIVATE | |||||
| # GuiAppData # If we'd created a binary data target, we'd link to it here | |||||
| juce::juce_gui_extra) | |||||
| @@ -0,0 +1,101 @@ | |||||
| #include "MainComponent.h" | |||||
| //============================================================================== | |||||
| class GuiAppApplication : public juce::JUCEApplication | |||||
| { | |||||
| public: | |||||
| //============================================================================== | |||||
| GuiAppApplication() {} | |||||
| // We inject these as compile definitions from the CMakeLists.txt | |||||
| // If you've enabled the juce header with `juce_generate_juce_header(<thisTarget>)` | |||||
| // you could `#include <JuceHeader.h>` and use `ProjectInfo::projectName` etc. instead. | |||||
| const juce::String getApplicationName() override { return JUCE_APPLICATION_NAME_STRING; } | |||||
| const juce::String getApplicationVersion() override { return JUCE_APPLICATION_VERSION_STRING; } | |||||
| bool moreThanOneInstanceAllowed() override { return true; } | |||||
| //============================================================================== | |||||
| void initialise (const juce::String& commandLine) override | |||||
| { | |||||
| // This method is where you should put your application's initialisation code.. | |||||
| juce::ignoreUnused (commandLine); | |||||
| mainWindow.reset (new MainWindow (getApplicationName())); | |||||
| } | |||||
| void shutdown() override | |||||
| { | |||||
| // Add your application's shutdown code here.. | |||||
| mainWindow = nullptr; // (deletes our window) | |||||
| } | |||||
| //============================================================================== | |||||
| void systemRequestedQuit() override | |||||
| { | |||||
| // This is called when the app is being asked to quit: you can ignore this | |||||
| // request and let the app carry on running, or call quit() to allow the app to close. | |||||
| quit(); | |||||
| } | |||||
| void anotherInstanceStarted (const juce::String& commandLine) override | |||||
| { | |||||
| // When another instance of the app is launched while this one is running, | |||||
| // this method is invoked, and the commandLine parameter tells you what | |||||
| // the other instance's command-line arguments were. | |||||
| juce::ignoreUnused (commandLine); | |||||
| } | |||||
| //============================================================================== | |||||
| /* | |||||
| This class implements the desktop window that contains an instance of | |||||
| our MainComponent class. | |||||
| */ | |||||
| class MainWindow : public juce::DocumentWindow | |||||
| { | |||||
| public: | |||||
| explicit MainWindow (juce::String name) | |||||
| : DocumentWindow (name, | |||||
| juce::Desktop::getInstance().getDefaultLookAndFeel() | |||||
| .findColour (ResizableWindow::backgroundColourId), | |||||
| DocumentWindow::allButtons) | |||||
| { | |||||
| setUsingNativeTitleBar (true); | |||||
| setContentOwned (new MainComponent(), true); | |||||
| #if JUCE_IOS || JUCE_ANDROID | |||||
| setFullScreen (true); | |||||
| #else | |||||
| setResizable (true, true); | |||||
| centreWithSize (getWidth(), getHeight()); | |||||
| #endif | |||||
| setVisible (true); | |||||
| } | |||||
| void closeButtonPressed() override | |||||
| { | |||||
| // This is called when the user tries to close this window. Here, we'll just | |||||
| // ask the app to quit when this happens, but you can change this to do | |||||
| // whatever you need. | |||||
| JUCEApplication::getInstance()->systemRequestedQuit(); | |||||
| } | |||||
| /* Note: Be careful if you override any DocumentWindow methods - the base | |||||
| class uses a lot of them, so by overriding you might break its functionality. | |||||
| It's best to do all your work in your content component instead, but if | |||||
| you really have to override any DocumentWindow methods, make sure your | |||||
| subclass also calls the superclass's method. | |||||
| */ | |||||
| private: | |||||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainWindow) | |||||
| }; | |||||
| private: | |||||
| std::unique_ptr<MainWindow> mainWindow; | |||||
| }; | |||||
| //============================================================================== | |||||
| // This macro generates the main() routine that launches the app. | |||||
| START_JUCE_APPLICATION (GuiAppApplication) | |||||
| @@ -0,0 +1,25 @@ | |||||
| #include "MainComponent.h" | |||||
| //============================================================================== | |||||
| MainComponent::MainComponent() | |||||
| { | |||||
| setSize (600, 400); | |||||
| } | |||||
| //============================================================================== | |||||
| void MainComponent::paint (juce::Graphics& g) | |||||
| { | |||||
| // (Our component is opaque, so we must completely fill the background with a solid colour) | |||||
| g.fillAll (getLookAndFeel().findColour (juce::ResizableWindow::backgroundColourId)); | |||||
| g.setFont (juce::Font (16.0f)); | |||||
| g.setColour (juce::Colours::white); | |||||
| g.drawText ("Hello World!", getLocalBounds(), juce::Justification::centred, true); | |||||
| } | |||||
| void MainComponent::resized() | |||||
| { | |||||
| // This is called when the MainComponent is resized. | |||||
| // If you add any child components, this is where you should | |||||
| // update their positions. | |||||
| } | |||||
| @@ -0,0 +1,29 @@ | |||||
| #pragma once | |||||
| // CMake builds don't use an AppConfig.h, so it's safe to include juce module headers | |||||
| // directly. If you need to remain compatible with Projucer-generated builds, and | |||||
| // have called `juce_generate_juce_header(<thisTarget>)` in your CMakeLists.txt, | |||||
| // you could `#include <JuceHeader.h>` here instead, to make all your module headers visible. | |||||
| #include <juce_gui_extra/juce_gui_extra.h> | |||||
| //============================================================================== | |||||
| /* | |||||
| This component lives inside our window, and this is where you should put all | |||||
| your controls and content. | |||||
| */ | |||||
| class MainComponent : public juce::Component | |||||
| { | |||||
| public: | |||||
| //============================================================================== | |||||
| MainComponent(); | |||||
| //============================================================================== | |||||
| void paint (juce::Graphics&) override; | |||||
| void resized() override; | |||||
| private: | |||||
| //============================================================================== | |||||
| // Your private member variables go here... | |||||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainComponent) | |||||
| }; | |||||
| @@ -0,0 +1,513 @@ | |||||
| # CMake Template Projects | |||||
| This directory contains project templates which should help you get started using JUCE's CMake | |||||
| support. | |||||
| ## System Requirements | |||||
| - Console and GUI projects require CMake 3.12 or higher. | |||||
| - Plugin projects require CMake 3.15 or higher. | |||||
| - All iOS targets require CMake 3.14 or higher (3.15 or higher for plugins targeting iOS). | |||||
| - Android targets are not currently supported. | |||||
| Most system package managers have packages for CMake, but we recommend using the most recent release | |||||
| from https://cmake.org/download. You should always use a CMake that's newer than your build | |||||
| toolchain, so that CMake can identify your build tools and understand how to invoke them. | |||||
| In addition to CMake you'll need a build toolchain for your platform, such as Xcode or MSVC. | |||||
| ## Getting Started | |||||
| In this directory, you'll find example projects for a GUI app, a console app, and an audio plugin. | |||||
| You can simply copy one of these subdirectories out of the JUCE repo, add JUCE as a submodule, and | |||||
| uncomment the call to `add_subdirectory` where indicated in the CMakeLists.txt. Alternatively, if | |||||
| you've installed JUCE using a package manager or the CMake install target, you can uncomment the | |||||
| call to `find_package`. | |||||
| Once your project is set up, you can generate a build tree for it in the normal way. To get started, | |||||
| you might invoke CMake like this, from the new directory you created. | |||||
| ``` | |||||
| cmake -Bbuild (-GgeneratorName) (-DJUCE_BUILD_EXTRAS=ON) (-DJUCE_BUILD_EXAMPLES=ON) | |||||
| ``` | |||||
| This will create a build tree in a directory named 'build', using the CMakeLists in the current | |||||
| working directory, using the default generator (makefiles on mac/linux, and the most recent Visual | |||||
| Studio on Windows). You can choose a specific generator to use with the `-G` flag (call `cmake -G` | |||||
| to see a full list of generators on your platform). If you included JUCE as a subdirectory, you can | |||||
| enable the Extras and Examples targets by including the last two arguments (they're off by default). | |||||
| There's quite a lot of example projects, and generating project files might take a bit longer when | |||||
| these options are on, so you probably won't want to include them most of the time. | |||||
| Then, to build the project: | |||||
| ``` | |||||
| cmake --build build (--target targetNameFromCMakeLists) (--config Release/Debug/...) | |||||
| ``` | |||||
| This tells cmake to build the target named `targetNameFromCMakeLists`, in the specified | |||||
| configuration, using the appropriate tool. Of course, if you generated makefiles or ninja files, you | |||||
| could call `make` or `ninja` in the build directory. If you generated an IDE project, like an Xcode | |||||
| or Visual Studio project, then you could open the generated project in your IDE. | |||||
| ### Building for iOS | |||||
| To build for iOS, you'll need CMake 3.14 or higher. Using the Xcode generator is highly recommended, | |||||
| as other generators may not automatically find the correct SDK for the iPhone simulator, and may | |||||
| fail to run certain parts of the build, such as compiling icons and processing the app's plist. By | |||||
| default, CMake will build for the same system that originally configured the project, so to enable | |||||
| cross-compilation for iOS, a few extra flags must be passed to the initial CMake invocation: | |||||
| ``` | |||||
| cmake -Bbuild-ios -GXcode -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_DEPLOYMENT_TARGET=9.3 | |||||
| ``` | |||||
| Here we create a build tree in the directory named 'build-ios', using the Xcode generator. The | |||||
| `-DCMAKE_SYSTEM_NAME=iOS` option tells CMake to enable cross-compiling for iOS. The | |||||
| `-DCMAKE_OSX_DEPLOYMENT_TARGET=9.3` option sets the minimum deployment target (it applies to iOS | |||||
| despite the 'OSX' in the variable name!). | |||||
| Once the project has generated, we can open it as normal in Xcode (look for the project file in the | |||||
| build directory). Alternatively, to build from the command-line, we could run this command: | |||||
| ``` | |||||
| cmake --build build-ios --target <targetName> -- -sdk iphonesimulator | |||||
| ``` | |||||
| Here, we're building the target named `<targetName>` from the build tree in the directory | |||||
| `build-ios`. All the arguments after `--` are ignored by CMake, and are passed through to the | |||||
| underlying build tool. In this case, the build tool will be `xcodebuild` because we used the Xcode | |||||
| generator above. We tell xcodebuild that we're building the app for the iOS simulator, which doesn't | |||||
| require special code signing. | |||||
| If we wanted to build for a real device, we would need to pass some extra signing details to the | |||||
| initial CMake configuration command: | |||||
| ``` | |||||
| cmake -Bbuild-ios -GXcode -DCMAKE_SYSTEM_NAME=iOS -DCMAKE_OSX_DEPLOYMENT_TARGET=9.3 \ | |||||
| -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY="iPhone Developer" | |||||
| -DCMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM=<10 character id> | |||||
| ``` | |||||
| The `CODE_SIGN_IDENTITY` is the kind of certificate you want to use (iPhone Developer is appropriate | |||||
| for development) and `DEVELOPMENT_TEAM` is the 10-character ID that can be found by opening the | |||||
| Keychain Access app, finding your development certificate, and checking its 'Organizational Unit' | |||||
| info field. | |||||
| When building the target, you may also need to tell Xcode that it can automatically update | |||||
| provisioning profiles, which is achieved by passing the `-allowProvisioningUpdates` flag: | |||||
| ``` | |||||
| cmake --build build-ios --target <targetName> -- -allowProvisioningUpdates | |||||
| ``` | |||||
| ## API Reference | |||||
| ### `juce_add_<target>` | |||||
| ``` | |||||
| juce_add_gui_app(<target> [KEY value]...) | |||||
| juce_add_console_app(<target> [KEY value]...) | |||||
| juce_add_plugin(<target> [KEY value]...) | |||||
| ``` | |||||
| `juce_add_gui_app` and `juce_add_console_app` add an executable target with name `<target>`. | |||||
| `juce_add_plugin` adds a 'shared code' static library target with name `<target>`, along with extra | |||||
| targets for each of the specified plugin formats. Each of these functions also takes a number of | |||||
| optional arguments in the form of a `KEY` followed by one or more `value`s which can be used to set | |||||
| additional attributes of the target. If these optional arguments aren't specified, their values will | |||||
| fall back to sensible defaults. | |||||
| Each of these arguments adds a property to the resulting target in the form `JUCE_paramName`, where | |||||
| `paramName` is one of the parameter keys below. For example, after a call to | |||||
| `juce_add_gui_app(my_target PRODUCT_NAME "Target")`, the target `my_target` will have a property | |||||
| named `JUCE_PRODUCT_NAME` with the value `"Target"`. After creating a target with one of these | |||||
| commands, properties beginning with `JUCE_` can be _queried_, but changing their values might not | |||||
| have any effect (or might even break things in unexpected ways!), so always pass JUCE target | |||||
| attributes directly to these creation functions, rather than adding them later. | |||||
| - `PRODUCT_NAME` | |||||
| - The name of the output built by this target, similar to CMake's `OUTPUT_NAME` property. If not | |||||
| specified, this will default to the target name. | |||||
| - `VERSION` | |||||
| - A version number string in the format "major.minor.bugfix". If not specified, the `VERSION` of | |||||
| the project containing the target will be used instead. | |||||
| - `BUNDLE_ID` | |||||
| - An identifier string in the form "com.yourcompany.productname" which should uniquely identify | |||||
| this target. Mainly used for macOS builds. If not specified, a default will be generated using | |||||
| the target's `COMPANY_NAME` and `PRODUCT_NAME`. | |||||
| - `MICROPHONE_PERMISSION_ENABLED` | |||||
| - May be either TRUE or FALSE. Adds the appropriate entries to an app's Info.plist. | |||||
| - `MICROPHONE_PERMISSION_TEXT` | |||||
| - The text your app will display when it requests microphone permissions. | |||||
| - `CAMERA_PERMISSION_ENABLED` | |||||
| - May be either TRUE or FALSE. Adds the appropriate entries to an app's Info.plist. | |||||
| - `CAMERA_PERMISSION_TEXT` | |||||
| - The text your app will display when it requests camera permissions. | |||||
| - `BLUETOOTH_PERMISSION_ENABLED` | |||||
| - May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's Info.plist. | |||||
| - `BLUETOOTH_PERMISSION_TEXT` | |||||
| - The text your iOS app will display when it requests bluetooth permissions. | |||||
| - `SEND_APPLE_EVENTS_PERMISSION_ENABLED` | |||||
| - May be either TRUE or FALSE. Enable this to allow your app to send Apple events. | |||||
| - `SEND_APPLE_EVENTS_PERMISSION_TEXT` | |||||
| - The text your app will display when it requests permission to send Apple events. | |||||
| - `FILE_SHARING_ENABLED` | |||||
| - May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's Info.plist. | |||||
| - `DOCUMENT_BROWSER_ENABLED` | |||||
| - May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's Info.plist. | |||||
| - `STATUS_BAR_HIDDEN` | |||||
| - May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's Info.plist. | |||||
| - `BACKGROUND_AUDIO_ENABLED` | |||||
| - May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's Info.plist. | |||||
| - `BACKGROUND_BLE_ENABLED` | |||||
| - May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's Info.plist. | |||||
| - `APP_GROUPS_ENABLED` | |||||
| - May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's entitlements. | |||||
| - `APP_GROUP_IDS` | |||||
| - The app groups to which your iOS app belongs. These will be added to your app's entitlements. | |||||
| - `ICLOUD_PERMISSIONS_ENABLED` | |||||
| - May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's entitlements. | |||||
| - `IPHONE_SCREEN_ORIENTATIONS` | |||||
| - May be, `portrait`, `landscape`, or both (separated by a space). Adds the appropriate entries to | |||||
| an iPhone app's Info.plist. | |||||
| - `IPAD_SCREEN_ORIENTATIONS` | |||||
| - May be, `portrait`, `landscape`, or both (separated by a space). Adds the appropriate entries to | |||||
| an iPad app's Info.plist. | |||||
| - `LAUNCH_STORYBOARD_FILE` | |||||
| - A custom launch storyboard file to use on iOS. If not supplied, a default storyboard will be | |||||
| used. | |||||
| - `CUSTOM_XCASSETS_FOLDER` | |||||
| - A path to an xcassets directory, containing icons and/or launch images for this target. If this | |||||
| is specified, the ICON_BIG and ICON_SMALL arguments will not have an effect on iOS, and a launch | |||||
| storyboard will not be used. | |||||
| - `ICON_BIG`, `ICON_SMALL` | |||||
| - Paths to image files that will be used to generate app icons. If only one of these parameters | |||||
| is specified, then that image will be used for all icon resolutions. If both arguments are | |||||
| specified, then the appropriate image will be picked for each icon resolution. | |||||
| - `COMPANY_COPYRIGHT` | |||||
| - Copyright text which will be added to the app/plugin's Info.plist. The value of this argument | |||||
| will be inherited from the `JUCE_COMPANY_COPYRIGHT` property, so if you want to use the same | |||||
| `COMPANY_COPYRIGHT` for several targets in a build tree, you can call | |||||
| `set_directory_properties(PROPERTIES JUCE_COMPANY_COPYRIGHT ...)` after including JUCE but | |||||
| before adding the targets, and then omit the `COMPANY_COPYRIGHT` argument when creating the | |||||
| individual targets. | |||||
| - `COMPANY_NAME` | |||||
| - The name of this target's author. Will be added to the app/plugin's Info.plist, and may be used | |||||
| to generate part of the `BUNDLE_ID` if no ID was given explicitly. The value of this argument | |||||
| will be inherited from the `JUCE_COMPANY_NAME` property, so if you want to use the same | |||||
| `COMPANY_NAME` for several targets in a build tree, you can call | |||||
| `set_directory_properties(PROPERTIES JUCE_COMPANY_NAME ...)` after including JUCE but before | |||||
| adding the targets, and then omit the `COMPANY_NAME` argument when creating the individual | |||||
| targets. | |||||
| - `COMPANY_WEBSITE` | |||||
| - The address of a website related to this target in some way. The value of this argument will be | |||||
| inherited from the `JUCE_COMPANY_WEBSITE` property, so if you want to use the same | |||||
| `COMPANY_WEBSITE` for several targets in a build tree, you can call | |||||
| `set_directory_properties(PROPERTIES JUCE_COMPANY_WEBSITE ...)` after including JUCE but before | |||||
| adding the targets, and then omit the `COMPANY_WEBSITE` argument when creating the individual | |||||
| targets. | |||||
| - `COMPANY_EMAIL` | |||||
| - An email address for this target's author. The value of this argument will be inherited from the | |||||
| `JUCE_COMPANY_EMAIL` property, so if you want to use the same `COMPANY_EMAIL` for several | |||||
| targets in a build tree, you can call `set_directory_properties(PROPERTIES JUCE_COMPANY_EMAIL | |||||
| ...)` after including JUCE but before adding the targets, and then omit the `COMPANY_EMAIL` | |||||
| argument when creating the individual targets. | |||||
| - `DOCUMENT_EXTENSIONS` | |||||
| - File extensions that should be associated with this target. For example, the Projucer passes | |||||
| the string `jucer` because it wants to open `.jucer` files. If your target has several different | |||||
| document types, you can pass them as multiple arguments, e.g. `DOCUMENT_EXTENSIONS wav mp3 aif`. | |||||
| - `NEEDS_CURL` | |||||
| - On Linux, JUCE may or may not need to link to Curl depending on the compile definitions that are | |||||
| set on a JUCE target. By default, we don't link Curl because you might not need it, but if you | |||||
| get linker or include errors that reference Curl, just set this argument to `TRUE`. | |||||
| - `NEEDS_WEB_BROWSER` | |||||
| - On Linux, JUCE may or may not need to link to Webkit depending on the compile definitions that | |||||
| are set on a JUCE target. By default, we don't link Webkit because you might not need it, but | |||||
| if you get linker or include errors that reference Webkit, just set this argument to `TRUE`. | |||||
| - `NEEDS_STORE_KIT` | |||||
| - On macOS, JUCE may or may not need to link to StoreKit depending on the compile definitions that | |||||
| are set on a JUCE target. By default, we don't link StoreKit because you might not need it, but | |||||
| if you get linker or include errors that reference StoreKit, just set this argument to `TRUE`. | |||||
| - `PUSH_NOTIFICATIONS_ENABLED` | |||||
| - Sets app entitlements to allow push notifications. False by default. | |||||
| - `HARDENED_RUNTIME_ENABLED` | |||||
| - Enables macOS' hardened runtime for this target. Required for notarisation. False by default. | |||||
| - `HARDENED_RUNTIME_OPTIONS` | |||||
| - A set of space-separated entitlement keys that will be added to this target's entitlements | |||||
| plist if `HARDENED_RUNTIME_ENABLED` is `TRUE`. Each key should be in the form | |||||
| `com.apple.security.*` where `*` is a specific entitlement. | |||||
| - `APP_SANDBOX_ENABLED` | |||||
| - Enables macOS' app sandbox for this target. False by default. | |||||
| - `APP_SANDBOX_INHERIT` | |||||
| - Allows child processes to inherit the static entitlements of their parent process. If this | |||||
| is set to `TRUE`, no other app sandbox entitlements will be set on this target. | |||||
| - `APP_SANDBOX_OPTIONS` | |||||
| - A set of space-separated entitlement keys that will be added to this target's entitlements | |||||
| plist if `APP_SANDBOX_ENABLED` is `TRUE`. Each key should be in the form `com.apple.security.*` | |||||
| where `*` is a specific entitlement. | |||||
| - `PLIST_TO_MERGE` | |||||
| - A string to insert into an app/plugin's Info.plist. | |||||
| - `FORMATS` | |||||
| - For plugin targets, specifies the plugin targets to build. Should be provided as a | |||||
| space-separated list. Valid values are `Standalone Unity VST3 AU AUv3 AAX VST`. `AU` and `AUv3` | |||||
| plugins will only be enabled when building on macOS. It is an error to pass `AAX` or `VST` | |||||
| without first calling `juce_set_aax_sdk_path` or `juce_set_vst2_sdk_path` respectively. | |||||
| - `PLUGIN_MANUFACTURER_CODE` | |||||
| - A four-character unique ID for your company. For AU compatibility, this must contain at least | |||||
| one upper-case letter. | |||||
| - `PLUGIN_CODE` | |||||
| - A four-character unique ID for your plugin. For AU compatibility, this must contain at least | |||||
| one upper-case letter. | |||||
| - `DESCRIPTION` | |||||
| - A short description of your plugin. | |||||
| - `IS_SYNTH` | |||||
| - Whether the plugin is a synth. Will be used to set sensible plugin category values if they | |||||
| are not provided explicitly. | |||||
| - `NEEDS_MIDI_INPUT` | |||||
| - Whether the plugin should provide a midi input. | |||||
| - `NEEDS_MIDI_OUTPUT` | |||||
| - Whether the plugin should provide a midi output. | |||||
| - `IS_MIDI_EFFECT` | |||||
| - Whether the plugin is a MIDI effect (some hosts provide a special channel-strip location for | |||||
| MIDI effect plugins). | |||||
| - `EDITOR_WANTS_KEYBOARD_FOCUS` | |||||
| - Whether the plugin requires keyboard focus, or should defer all keyboard handling to the host. | |||||
| - `DISABLE_AAX_BYPASS` | |||||
| - Whether the AAX bypass function should be disabled. | |||||
| - `DISABLE_AAX_MULTI_MONO` | |||||
| - Whether the AAX multi mono bus layout should be disabled. | |||||
| - `AAX_IDENTIFIER` | |||||
| - The bundle ID for the AAX plugin target. Matches the `BUNDLE_ID` by default. | |||||
| - `VST_NUM_MIDI_INS` | |||||
| - For VST2 and VST3 plugins that accept midi, this allows you to configure the number of inputs. | |||||
| - `VST_NUM_MIDI_OUTS` | |||||
| - For VST2 and VST3 plugins that produce midi, this allows you to configure the number of outputs. | |||||
| - `VST2_CATEGORY` | |||||
| - Should be one of: `kPlugCategUnknown`, `kPlugCategEffect`, `kPlugCategSynth`, | |||||
| `kPlugCategAnalysis`, `kPlugCategMatering`, `kPlugCategSpacializer`, `kPlugCategRoomFx`, | |||||
| `kPlugSurroundFx`, `kPlugCategRestoration`, `kPlugCategOfflineProcess`, `kPlugCategShell`, | |||||
| `kPlugCategGenerator`. | |||||
| - `VST3_CATEGORIES` | |||||
| - Should be one or more, separated by spaces, of the following: `Fx`, `Instrument`, `Analyzer`, | |||||
| `Delay`, `Distortion`, `Drum`, `Dynamics`, `EQ`, `External`, `Filter`, `Generator`, `Mastering`, | |||||
| `Modulation`, `Mono`, `Network`, `NoOfflineProcess`, `OnlyOfflineProcess`, `OnlyRT`, | |||||
| `Pitch Shift`, `Restoration`, `Reverb`, `Sampler`, `Spatial`, `Stereo`, `Surround`, `Synth`, | |||||
| `Tools`, `Up-Downmix` | |||||
| - `AU_MAIN_TYPE` | |||||
| - Should be one of: `kAudioUnitType_Effect`, `kAudioUnitType_FormatConverter`, | |||||
| `kAudioUnitType_Generator`, `kAudioUnitType_MIDIProcessor`, `kAudioUnitType_Mixer`, | |||||
| `kAudioUnitType_MusicDevice`, `kAudioUnitType_MusicEffect`, `kAudioUnitType_OfflineEffect`, | |||||
| `kAudioUnitType_Output`, `kAudioUnitType_Panner` | |||||
| - `AU_EXPORT_PREFIX` | |||||
| - A prefix for the names of entry-point functions that your component exposes. Typically this | |||||
| will be a version of your plugin's name that can be used as part of a C++ token. Defaults | |||||
| to your plugin's name with the suffix 'AU'. | |||||
| - `AU_SANDBOX_SAFE` | |||||
| - May be either TRUE or FALSE. Adds the appropriate entries to an AU plugin's Info.plist. | |||||
| - `AAX_CATEGORY` | |||||
| - Should be one of: `AAX_ePlugInCategory_None`, `AAX_ePlugInCategory_EQ`, | |||||
| `AAX_ePlugInCategory_Dynamics`, `AAX_ePlugInCategory_PitchShift`, `AAX_ePlugInCategory_Reverb`, | |||||
| `AAX_ePlugInCategory_Delay`, `AAX_ePlugInCategory_Modulation`, `AAX_ePlugInCategory_Harmonic`, | |||||
| `AAX_ePlugInCategory_NoiseReduction`, `AAX_ePlugInCategory_Dither`, | |||||
| `AAX_ePlugInCategory_SoundField`, `AAX_ePlugInCategory_HWGenerators`, | |||||
| `AAX_ePlugInCategory_SWGenerators`, `AAX_ePlugInCategory_WrappedPlugin`, | |||||
| `AAX_ePlugInCategory_Effect` | |||||
| - `COPY_PLUGIN_AFTER_BUILD` | |||||
| - Whether or not to install the plugin to the current system after building. False by default. | |||||
| If you want all of the plugins in a subdirectory to be installed automatically after building, | |||||
| you can set the property `JUCE_COPY_PLUGIN_AFTER_BUILD` on the directory before adding the | |||||
| plugins, rather than setting this argument on each individual target. Note that on Windows, | |||||
| the default install locations may not be writable by normal user accounts. | |||||
| - `VST_COPY_DIR` | |||||
| - The location to which VST2 (legacy) plugins will be copied after building if | |||||
| `COPY_PLUGIN_AFTER_BUILD` is set on this target. If you want to install all of the VST2 plugins | |||||
| in a subdirectory to a non-default location, you can set the `JUCE_VST_COPY_DIR` property on | |||||
| the directory before adding the plugin targets, rather than setting this argument on each | |||||
| individual target. | |||||
| - `VST3_COPY_DIR` | |||||
| - The location to which VST3 plugins will be copied after building if `COPY_PLUGIN_AFTER_BUILD` | |||||
| is set on this target. If you want to install all of the VST3 plugins in a subdirectory to a | |||||
| non-default location, you can set the `JUCE_VST3_COPY_DIR` property on the directory before | |||||
| adding the plugin targets, rather than setting this argument on each individual target. | |||||
| - `AAX_COPY_DIR` | |||||
| - The location to which AAX plugins will be copied after building if `COPY_PLUGIN_AFTER_BUILD` | |||||
| is set on this target. If you want to install all of the AAX plugins in a subdirectory to a | |||||
| non-default location, you can set the `JUCE_AAX_COPY_DIR` property on the directory before | |||||
| adding the plugin targets, rather than setting this argument on each individual target. | |||||
| - `AU_COPY_DIR` | |||||
| - The location to which AU plugins will be copied after building if `COPY_PLUGIN_AFTER_BUILD` | |||||
| is set on this target. If you want to install all of the AU plugins in a subdirectory to a | |||||
| non-default location, you can set the `JUCE_AU_COPY_DIR` property on the directory before | |||||
| adding the plugin targets, rather than setting this argument on each individual target. | |||||
| - `UNITY_COPY_DIR` | |||||
| - The location to which Unity plugins will be copied after building if `COPY_PLUGIN_AFTER_BUILD` | |||||
| is set on this target. If you want to install all of the Unity plugins in a subdirectory to a | |||||
| non-default location, you can set the `JUCE_UNITY_COPY_DIR` property on the directory before | |||||
| adding the plugin targets, rather than setting this argument on each individual target. | |||||
| Unlike the other `COPY_DIR` arguments, this argument does not have a default value so be sure | |||||
| to set it if you have enabled `COPY_PLUGIN_AFTER_BUILD` and the `Unity` format. | |||||
| ### `juce_add_binary_data` | |||||
| ``` | |||||
| juce_add_binary_data(<name> | |||||
| [NAMESPACE ...] | |||||
| SOURCES ...) | |||||
| ``` | |||||
| Create a static library that embeds the contents of the files passed as arguments to this function. | |||||
| Adds a library target called `<name>` which can be linked into other targets using | |||||
| `target_link_libraries`. The `NAMESPACE` argument is optional. If not provided, the generated files | |||||
| will use the default namespace `BinaryData`. Each of the files located at the paths following | |||||
| `SOURCES` will be encoded and embedded in the resulting static library. This library can be linked | |||||
| as normal using `target_link_libraries(<otherTarget> PRIVATE <name>)`, and the header can be | |||||
| included using `#include <BinaryData.h>`. | |||||
| ### `juce_add_bundle_resources_directory` | |||||
| ``` | |||||
| juce_add_bundle_resources_directory(<target> <folder>) | |||||
| ``` | |||||
| Copy the entire directory at the location `<folder>` into an Apple bundle's resource directory, i.e. | |||||
| the `Resources` directory for a macOS bundle, and the top-level directory of an iOS bundle. | |||||
| ### `juce_generate_juce_header` | |||||
| ``` | |||||
| juce_generate_juce_header(<target>) | |||||
| ``` | |||||
| Introspects the JUCE modules that have been linked to `<target>` and generates a `JuceHeader.h` | |||||
| which contains `#include` statements for each of the module headers. This header also contains an | |||||
| optional `using namespace juce` statement, and an optional `ProjectInfo` block, each of which can be | |||||
| disabled by setting the compile definitions `DONT_SET_USING_JUCE_NAMESPACE` and | |||||
| `JUCE_DONT_DECLARE_PROJECTINFO` respectively. The resulting header can be included with `#include | |||||
| <JuceHeader.h>`. In plain CMake projects which don't require Projucer compatibility, the use of | |||||
| JuceHeader.h is optional. Instead, module headers can be included directly in source files that | |||||
| require them. | |||||
| ### `juce_set_<kind>_sdk_path` | |||||
| ``` | |||||
| juce_set_aax_sdk_path(<absolute path>) | |||||
| juce_set_vst2_sdk_path(<absolute path>) | |||||
| ``` | |||||
| Call these functions from your CMakeLists to set up your local AAX and/or VST2 SDKs. These functions | |||||
| should be called *before* adding any targets that may depend on the AAX/VST2 SDKs (plugin | |||||
| hosts, VST2/AAX plugins etc.). | |||||
| ### `juce_add_module` | |||||
| ``` | |||||
| juce_add_module(<path to module>) | |||||
| juce_add_modules(<names of module>...) | |||||
| ``` | |||||
| `juce_add_module` adds a library target for the JUCE module located at the provided path. `<path>` | |||||
| must be the path to a module directory (e.g. /Users/me/JUCE/modules/juce_core). This will add an | |||||
| interface library with a name matching the directory name of the module. The resulting library can | |||||
| be linked to other targets as normal, using `target_link_libraries`. | |||||
| Due to the way that `INTERFACE` libraries work in CMake, linking to a module added in this way | |||||
| *must* be done using `PRIVATE` visibility. Using `PUBLIC` will cause the module sources to be added | |||||
| both to the target's `SOURCES` and `INTERFACE_SOURCES`, which may result in many copies of the | |||||
| module being built into a single target, which would cause build failures in the best case and | |||||
| silent ODR violations in the worst case. Scary stuff! | |||||
| This command has a few optional arguments: `INSTALL_PATH` and `INSTALL_EXPORT` should be provided if | |||||
| you want the module to be installable through the CMake installation mechanism. `INSTALL_PATH` is a | |||||
| path, relative to the install prefix, to which the module sources will be copied. `INSTALL_EXPORT` | |||||
| specifies the CMake export group for the installed module. ALIAS_NAMESPACE will add an alias for the | |||||
| target(s) with the provided namespace. For example, the following invocation will add a module | |||||
| target named `my_module`, along with an alias named `company::my_module`. | |||||
| ``` | |||||
| juce_add_module(my_module ALIAS_NAMESPACE company)` | |||||
| ``` | |||||
| `juce_add_modules` is a convenience function that can be used to add multiple JUCE modules at once. | |||||
| This version accepts many module paths, rather than just one. For an example of usage, see the | |||||
| CMakeLists in the `modules` directory. | |||||
| ### `juce_add_pip` | |||||
| ``` | |||||
| juce_add_pip(<header>) | |||||
| ``` | |||||
| This function parses the PIP metadata block in the provided header, and adds appropriate build | |||||
| targets for a console app, GUI app, or audio plugin. For audio plugin targets, it builds as many | |||||
| plugin formats as possible. To build AAX or VST2 targets, call `juce_set_aax_sdk_path` and/or | |||||
| `juce_set_vst2_sdk_path` *before* calling `juce_add_pip`. | |||||
| This is mainly provided to build the built-in example projects in the JUCE repo, and for building | |||||
| quick proof-of-concept demo apps with minimal set-up. For any use-case more complex than a | |||||
| proof-of-concept, you should prefer the `juce_add_gui_app`, `juce_add_plugin`, or | |||||
| `juce_add_console_app` functions, which provide more fine-grained control over the properties of | |||||
| your target. | |||||
| @@ -0,0 +1,35 @@ | |||||
| # ============================================================================== | |||||
| # | |||||
| # This file is part of the JUCE 6 technical preview. | |||||
| # Copyright (c) 2020 - ROLI Ltd. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # ============================================================================== | |||||
| add_subdirectory(CMake) | |||||
| add_subdirectory(DemoRunner) | |||||
| function(_juce_add_pips) | |||||
| file(GLOB_RECURSE headers | |||||
| CONFIGURE_DEPENDS LIST_DIRECTORIES false | |||||
| "${CMAKE_CURRENT_SOURCE_DIR}/*.h") | |||||
| foreach(header IN ITEMS ${headers}) | |||||
| juce_add_pip(${header}) | |||||
| endforeach() | |||||
| endfunction() | |||||
| add_subdirectory(Audio) | |||||
| add_subdirectory(BLOCKS) | |||||
| add_subdirectory(DSP) | |||||
| add_subdirectory(GUI) | |||||
| add_subdirectory(Plugins) | |||||
| add_subdirectory(Utilities) | |||||
| @@ -0,0 +1,17 @@ | |||||
| # ============================================================================== | |||||
| # | |||||
| # This file is part of the JUCE 6 technical preview. | |||||
| # Copyright (c) 2020 - ROLI Ltd. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # ============================================================================== | |||||
| _juce_add_pips() | |||||
| @@ -58,6 +58,8 @@ inline File getExamplesDirectory() noexcept | |||||
| jassert (success); | jassert (success); | ||||
| return mo.toString(); | return mo.toString(); | ||||
| #elif defined PIP_JUCE_EXAMPLES_DIRECTORY_STRING | |||||
| return File { PIP_JUCE_EXAMPLES_DIRECTORY_STRING }; | |||||
| #else | #else | ||||
| auto currentFile = File::getSpecialLocation (File::SpecialLocationType::currentApplicationFile); | auto currentFile = File::getSpecialLocation (File::SpecialLocationType::currentApplicationFile); | ||||
| auto exampleDir = currentFile.getParentDirectory().getChildFile ("examples"); | auto exampleDir = currentFile.getParentDirectory().getChildFile ("examples"); | ||||
| @@ -0,0 +1,64 @@ | |||||
| # ============================================================================== | |||||
| # | |||||
| # This file is part of the JUCE 6 technical preview. | |||||
| # Copyright (c) 2020 - ROLI Ltd. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # ============================================================================== | |||||
| juce_add_gui_app(DemoRunner | |||||
| BUNDLE_ID com.juce.demorunner | |||||
| ICON_BIG ${CMAKE_CURRENT_SOURCE_DIR}/Source/JUCEAppIcon.png | |||||
| NEEDS_CURL TRUE | |||||
| NEEDS_WEB_BROWSER TRUE | |||||
| MICROPHONE_PERMISSION_ENABLED TRUE | |||||
| CAMERA_PERMISSION_ENABLED TRUE | |||||
| BLUETOOTH_PERMISSION_ENABLED TRUE | |||||
| FILE_SHARING_ENABLED TRUE | |||||
| DOCUMENT_BROWSER_ENABLED TRUE | |||||
| IPHONE_SCREEN_ORIENTATIONS portrait landscape | |||||
| IPAD_SCREEN_ORIENTATIONS portrait landscape) | |||||
| juce_generate_juce_header(DemoRunner) | |||||
| target_sources(DemoRunner PRIVATE | |||||
| Source/Demos/DemoPIPs1.cpp | |||||
| Source/Demos/DemoPIPs2.cpp | |||||
| Source/Demos/JUCEDemos.cpp | |||||
| Source/Main.cpp | |||||
| Source/UI/DemoContentComponent.cpp | |||||
| Source/UI/MainComponent.cpp) | |||||
| target_compile_definitions(DemoRunner PRIVATE | |||||
| PIP_JUCE_EXAMPLES_DIRECTORY_STRING="${JUCE_SOURCE_DIR}/examples" | |||||
| JUCE_ALLOW_STATIC_NULL_VARIABLES=0 | |||||
| JUCE_DEMO_RUNNER=1 | |||||
| JUCE_STRICT_REFCOUNTEDPOINTER=1 | |||||
| JUCE_UNIT_TESTS=1 | |||||
| JUCE_USE_CAMERA=1 | |||||
| JUCE_USE_CURL=1 | |||||
| JUCE_USE_MP3AUDIOFORMAT=1 | |||||
| JUCE_WEB_BROWSER=1) | |||||
| target_link_libraries(DemoRunner PRIVATE | |||||
| juce::juce_analytics | |||||
| juce::juce_audio_utils | |||||
| juce::juce_blocks_basics | |||||
| juce::juce_box2d | |||||
| juce::juce_dsp | |||||
| juce::juce_opengl | |||||
| juce::juce_osc | |||||
| juce::juce_product_unlocking | |||||
| juce::juce_video) | |||||
| if(CMAKE_SYSTEM_NAME STREQUAL "iOS") | |||||
| juce_add_bundle_resources_directory(DemoRunner ../Assets) | |||||
| endif() | |||||
| @@ -0,0 +1,17 @@ | |||||
| # ============================================================================== | |||||
| # | |||||
| # This file is part of the JUCE 6 technical preview. | |||||
| # Copyright (c) 2020 - ROLI Ltd. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # ============================================================================== | |||||
| _juce_add_pips() | |||||
| @@ -23,24 +23,27 @@ | |||||
| BEGIN_JUCE_PIP_METADATA | BEGIN_JUCE_PIP_METADATA | ||||
| name: AUv3SynthPlugin | |||||
| version: 1.0.0 | |||||
| vendor: JUCE | |||||
| website: http://juce.com | |||||
| description: AUv3 synthesiser audio plugin. | |||||
| name: AUv3SynthPlugin | |||||
| version: 1.0.0 | |||||
| vendor: JUCE | |||||
| website: http://juce.com | |||||
| description: AUv3 synthesiser audio plugin. | |||||
| dependencies: juce_audio_basics, juce_audio_devices, juce_audio_formats, | |||||
| juce_audio_plugin_client, juce_audio_processors, | |||||
| juce_audio_utils, juce_core, juce_data_structures, | |||||
| juce_events, juce_graphics, juce_gui_basics, juce_gui_extra | |||||
| exporters: xcode_mac, xcode_iphone | |||||
| dependencies: juce_audio_basics, juce_audio_devices, juce_audio_formats, | |||||
| juce_audio_plugin_client, juce_audio_processors, | |||||
| juce_audio_utils, juce_core, juce_data_structures, | |||||
| juce_events, juce_graphics, juce_gui_basics, juce_gui_extra | |||||
| exporters: xcode_mac, xcode_iphone | |||||
| moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 | |||||
| moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 | |||||
| type: AudioProcessor | |||||
| mainClass: AUv3SynthProcessor | |||||
| type: AudioProcessor | |||||
| mainClass: AUv3SynthProcessor | |||||
| useLocalCopy: 1 | |||||
| useLocalCopy: 1 | |||||
| pluginCharacteristics: pluginIsSynth, pluginWantsMidiIn | |||||
| extraPluginFormats: AUv3 | |||||
| END_JUCE_PIP_METADATA | END_JUCE_PIP_METADATA | ||||
| @@ -23,24 +23,26 @@ | |||||
| BEGIN_JUCE_PIP_METADATA | BEGIN_JUCE_PIP_METADATA | ||||
| name: ArpeggiatorPlugin | |||||
| version: 1.0.0 | |||||
| vendor: JUCE | |||||
| website: http://juce.com | |||||
| description: Arpeggiator audio plugin. | |||||
| name: ArpeggiatorPlugin | |||||
| version: 1.0.0 | |||||
| vendor: JUCE | |||||
| website: http://juce.com | |||||
| description: Arpeggiator audio plugin. | |||||
| dependencies: juce_audio_basics, juce_audio_devices, juce_audio_formats, | |||||
| juce_audio_plugin_client, juce_audio_processors, | |||||
| juce_audio_utils, juce_core, juce_data_structures, | |||||
| juce_events, juce_graphics, juce_gui_basics, juce_gui_extra | |||||
| exporters: xcode_mac, vs2019 | |||||
| dependencies: juce_audio_basics, juce_audio_devices, juce_audio_formats, | |||||
| juce_audio_plugin_client, juce_audio_processors, | |||||
| juce_audio_utils, juce_core, juce_data_structures, | |||||
| juce_events, juce_graphics, juce_gui_basics, juce_gui_extra | |||||
| exporters: xcode_mac, vs2019 | |||||
| moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 | |||||
| moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 | |||||
| type: AudioProcessor | |||||
| mainClass: Arpeggiator | |||||
| type: AudioProcessor | |||||
| mainClass: Arpeggiator | |||||
| useLocalCopy: 1 | |||||
| useLocalCopy: 1 | |||||
| pluginCharacteristics: pluginWantsMidiIn, pluginProducesMidiOut, pluginIsMidiEffectPlugin | |||||
| END_JUCE_PIP_METADATA | END_JUCE_PIP_METADATA | ||||
| @@ -23,24 +23,28 @@ | |||||
| BEGIN_JUCE_PIP_METADATA | BEGIN_JUCE_PIP_METADATA | ||||
| name: AudioPluginDemo | |||||
| version: 1.0.0 | |||||
| vendor: JUCE | |||||
| website: http://juce.com | |||||
| description: Synthesiser audio plugin. | |||||
| name: AudioPluginDemo | |||||
| version: 1.0.0 | |||||
| vendor: JUCE | |||||
| website: http://juce.com | |||||
| description: Synthesiser audio plugin. | |||||
| dependencies: juce_audio_basics, juce_audio_devices, juce_audio_formats, | |||||
| juce_audio_plugin_client, juce_audio_processors, | |||||
| juce_audio_utils, juce_core, juce_data_structures, | |||||
| juce_events, juce_graphics, juce_gui_basics, juce_gui_extra | |||||
| exporters: xcode_mac, vs2017, vs2019, linux_make, xcode_iphone, androidstudio | |||||
| dependencies: juce_audio_basics, juce_audio_devices, juce_audio_formats, | |||||
| juce_audio_plugin_client, juce_audio_processors, | |||||
| juce_audio_utils, juce_core, juce_data_structures, | |||||
| juce_events, juce_graphics, juce_gui_basics, juce_gui_extra | |||||
| exporters: xcode_mac, vs2017, vs2019, linux_make, xcode_iphone, androidstudio | |||||
| moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 | |||||
| moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 | |||||
| type: AudioProcessor | |||||
| mainClass: JuceDemoPluginAudioProcessor | |||||
| type: AudioProcessor | |||||
| mainClass: JuceDemoPluginAudioProcessor | |||||
| useLocalCopy: 1 | |||||
| useLocalCopy: 1 | |||||
| pluginCharacteristics: pluginIsSynth, pluginWantsMidiIn, pluginProducesMidiOut, | |||||
| pluginEditorRequiresKeys | |||||
| extraPluginFormats: AUv3 | |||||
| END_JUCE_PIP_METADATA | END_JUCE_PIP_METADATA | ||||
| @@ -0,0 +1,17 @@ | |||||
| # ============================================================================== | |||||
| # | |||||
| # This file is part of the JUCE 6 technical preview. | |||||
| # Copyright (c) 2020 - ROLI Ltd. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # ============================================================================== | |||||
| _juce_add_pips() | |||||
| @@ -23,24 +23,26 @@ | |||||
| BEGIN_JUCE_PIP_METADATA | BEGIN_JUCE_PIP_METADATA | ||||
| name: InterAppAudioEffectPlugin | |||||
| version: 1.0.0 | |||||
| vendor: JUCE | |||||
| website: http://juce.com | |||||
| description: Inter-app audio effect plugin. | |||||
| name: InterAppAudioEffectPlugin | |||||
| version: 1.0.0 | |||||
| vendor: JUCE | |||||
| website: http://juce.com | |||||
| description: Inter-app audio effect plugin. | |||||
| dependencies: juce_audio_basics, juce_audio_devices, juce_audio_formats, | |||||
| juce_audio_plugin_client, juce_audio_processors, | |||||
| juce_audio_utils, juce_core, juce_data_structures, | |||||
| juce_events, juce_graphics, juce_gui_basics, juce_gui_extra | |||||
| exporters: xcode_iphone | |||||
| dependencies: juce_audio_basics, juce_audio_devices, juce_audio_formats, | |||||
| juce_audio_plugin_client, juce_audio_processors, | |||||
| juce_audio_utils, juce_core, juce_data_structures, | |||||
| juce_events, juce_graphics, juce_gui_basics, juce_gui_extra | |||||
| exporters: xcode_iphone | |||||
| moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 | |||||
| moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 | |||||
| type: AudioProcessor | |||||
| mainClass: IAAEffectProcessor | |||||
| type: AudioProcessor | |||||
| mainClass: IAAEffectProcessor | |||||
| useLocalCopy: 1 | |||||
| useLocalCopy: 1 | |||||
| extraPluginFormats: IAA | |||||
| END_JUCE_PIP_METADATA | END_JUCE_PIP_METADATA | ||||
| @@ -23,24 +23,26 @@ | |||||
| BEGIN_JUCE_PIP_METADATA | BEGIN_JUCE_PIP_METADATA | ||||
| name: MultiOutSynthPlugin | |||||
| version: 1.0.0 | |||||
| vendor: JUCE | |||||
| website: http://juce.com | |||||
| description: Multi-out synthesiser audio plugin. | |||||
| name: MultiOutSynthPlugin | |||||
| version: 1.0.0 | |||||
| vendor: JUCE | |||||
| website: http://juce.com | |||||
| description: Multi-out synthesiser audio plugin. | |||||
| dependencies: juce_audio_basics, juce_audio_devices, juce_audio_formats, | |||||
| juce_audio_plugin_client, juce_audio_processors, | |||||
| juce_audio_utils, juce_core, juce_data_structures, | |||||
| juce_events, juce_graphics, juce_gui_basics, juce_gui_extra | |||||
| exporters: xcode_mac, vs2019 | |||||
| dependencies: juce_audio_basics, juce_audio_devices, juce_audio_formats, | |||||
| juce_audio_plugin_client, juce_audio_processors, | |||||
| juce_audio_utils, juce_core, juce_data_structures, | |||||
| juce_events, juce_graphics, juce_gui_basics, juce_gui_extra | |||||
| exporters: xcode_mac, vs2019 | |||||
| moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 | |||||
| moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 | |||||
| type: AudioProcessor | |||||
| mainClass: MultiOutSynth | |||||
| type: AudioProcessor | |||||
| mainClass: MultiOutSynth | |||||
| useLocalCopy: 1 | |||||
| useLocalCopy: 1 | |||||
| pluginCharacteristics: pluginIsSynth, pluginWantsMidiIn | |||||
| END_JUCE_PIP_METADATA | END_JUCE_PIP_METADATA | ||||
| @@ -0,0 +1,17 @@ | |||||
| # ============================================================================== | |||||
| # | |||||
| # This file is part of the JUCE 6 technical preview. | |||||
| # Copyright (c) 2020 - ROLI Ltd. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # ============================================================================== | |||||
| _juce_add_pips() | |||||
| @@ -38,6 +38,7 @@ | |||||
| exporters: xcode_mac, xcode_iphone, androidstudio | exporters: xcode_mac, xcode_iphone, androidstudio | ||||
| moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 | moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 | ||||
| JUCE_IN_APP_PURCHASES=1 | |||||
| type: Component | type: Component | ||||
| mainClass: InAppPurchasesDemo | mainClass: InAppPurchasesDemo | ||||
| @@ -37,6 +37,7 @@ | |||||
| exporters: xcode_mac, vs2019, xcode_iphone, androidstudio | exporters: xcode_mac, vs2019, xcode_iphone, androidstudio | ||||
| moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 | moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1 | ||||
| JUCE_PUSH_NOTIFICATIONS=1 | |||||
| type: Component | type: Component | ||||
| mainClass: PushNotificationsDemo | mainClass: PushNotificationsDemo | ||||
| @@ -0,0 +1,27 @@ | |||||
| # ============================================================================== | |||||
| # | |||||
| # This file is part of the JUCE 6 technical preview. | |||||
| # Copyright (c) 2020 - ROLI Ltd. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # ============================================================================== | |||||
| juce_add_gui_app(AudioPerformanceTest BUNDLE_ID com.juce.AudioPerformanceTest) | |||||
| juce_generate_juce_header(AudioPerformanceTest) | |||||
| target_sources(AudioPerformanceTest PRIVATE | |||||
| Source/Main.cpp) | |||||
| target_compile_definitions(AudioPerformanceTest PRIVATE | |||||
| JUCE_USE_CURL=0 JUCE_WEB_BROWSER=0) | |||||
| target_link_libraries(AudioPerformanceTest PRIVATE juce::juce_audio_utils) | |||||
| @@ -0,0 +1,52 @@ | |||||
| # ============================================================================== | |||||
| # | |||||
| # This file is part of the JUCE 6 technical preview. | |||||
| # Copyright (c) 2020 - ROLI Ltd. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # ============================================================================== | |||||
| juce_add_gui_app(AudioPluginHost | |||||
| BUNDLE_ID com.juce.pluginhost | |||||
| ICON_BIG "${CMAKE_CURRENT_SOURCE_DIR}/Source/JUCEAppIcon.png" | |||||
| MICROPHONE_PERMISSION_ENABLED TRUE) | |||||
| juce_generate_juce_header(AudioPluginHost) | |||||
| target_sources(AudioPluginHost PRIVATE | |||||
| Source/HostStartup.cpp | |||||
| Source/Plugins/IOConfigurationWindow.cpp | |||||
| Source/Plugins/InternalPlugins.cpp | |||||
| Source/Plugins/PluginGraph.cpp | |||||
| Source/UI/GraphEditorPanel.cpp | |||||
| Source/UI/MainHostWindow.cpp) | |||||
| target_compile_definitions(AudioPluginHost PRIVATE | |||||
| JUCE_ALSA=1 | |||||
| JUCE_DIRECTSOUND=1 | |||||
| JUCE_PLUGINHOST_AU=1 | |||||
| JUCE_PLUGINHOST_LADSPA=1 | |||||
| JUCE_PLUGINHOST_VST=0 | |||||
| JUCE_PLUGINHOST_VST3=1 | |||||
| JUCE_USE_CAMERA=0 | |||||
| JUCE_USE_CDBURNER=0 | |||||
| JUCE_USE_CDREADER=0 | |||||
| JUCE_USE_CURL=0 | |||||
| JUCE_USE_FLAC=0 | |||||
| JUCE_USE_OGGVORBIS=0 | |||||
| JUCE_WASAPI=1 | |||||
| JUCE_WEB_BROWSER=0) | |||||
| target_link_libraries(AudioPluginHost PRIVATE | |||||
| juce::juce_audio_utils | |||||
| juce::juce_cryptography | |||||
| juce::juce_opengl | |||||
| juce::juce_video) | |||||
| @@ -0,0 +1,25 @@ | |||||
| # ============================================================================== | |||||
| # | |||||
| # This file is part of the JUCE 6 technical preview. | |||||
| # Copyright (c) 2020 - ROLI Ltd. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # ============================================================================== | |||||
| juce_add_console_app(BinaryBuilder) | |||||
| juce_generate_juce_header(BinaryBuilder) | |||||
| target_sources(BinaryBuilder PRIVATE Source/Main.cpp) | |||||
| target_compile_definitions(BinaryBuilder PRIVATE JUCE_USE_CURL=0) | |||||
| target_link_libraries(BinaryBuilder PRIVATE juce::juce_core) | |||||
| @@ -0,0 +1,41 @@ | |||||
| # ============================================================================== | |||||
| # | |||||
| # This file is part of the JUCE library. | |||||
| # Copyright (c) 2017 - ROLI Ltd. | |||||
| # | |||||
| # JUCE is an open source library subject to commercial or open-source | |||||
| # licensing. | |||||
| # | |||||
| # The code included in this file is provided under the terms of the ISC license | |||||
| # http://www.isc.org/downloads/software-support-policy/isc-license. Permission | |||||
| # To use, copy, modify, and/or distribute this software for any purpose with or | |||||
| # without fee is hereby granted provided that the above copyright notice and | |||||
| # this permission notice appear in all copies. | |||||
| # | |||||
| # JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER | |||||
| # EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE | |||||
| # DISCLAIMED. | |||||
| # | |||||
| # ============================================================================== | |||||
| @PACKAGE_INIT@ | |||||
| include("${CMAKE_CURRENT_LIST_DIR}/JUCE.cmake") | |||||
| get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) | |||||
| get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) | |||||
| get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) | |||||
| get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) | |||||
| if(_IMPORT_PREFIX STREQUAL "/") | |||||
| set(_IMPORT_PREFIX "") | |||||
| endif() | |||||
| add_executable(juce::juceaide IMPORTED) | |||||
| set_target_properties(juce::juceaide PROPERTIES | |||||
| IMPORTED_LOCATION "${_IMPORT_PREFIX}/@JUCE_CMAKE_BINARY_BUILDER_NAME@") | |||||
| set(_IMPORT_PREFIX) | |||||
| check_required_components("@PROJECT_NAME@") | |||||
| include("${CMAKE_CURRENT_LIST_DIR}/JUCEUtils.cmake") | |||||
| @@ -0,0 +1,16 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | |||||
| <document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM"> | |||||
| <scenes> | |||||
| <scene sceneID="EHf-IW-A2E"> | |||||
| <objects> | |||||
| <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="" sceneMemberID="firstResponder"/> | |||||
| <viewController id="01J-lp-oVM" sceneMemberID="viewController"> | |||||
| <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3"> | |||||
| <autoresizingMask key="autoresizingMask"/> | |||||
| <color key="backgroundColor" red="0" green="0" blue="0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |||||
| </view> | |||||
| </viewController> | |||||
| </objects> | |||||
| </scene> | |||||
| </scenes> | |||||
| </document> | |||||
| @@ -0,0 +1,16 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file was auto-generated and contains the startup code for a PIP. | |||||
| ============================================================================== | |||||
| */ | |||||
| #include <JuceHeader.h> | |||||
| #include "${JUCE_PIP_HEADER}" | |||||
| //============================================================================== | |||||
| AudioProcessor* JUCE_CALLTYPE createPluginFilter() | |||||
| { | |||||
| return new ${JUCE_PIP_MAIN_CLASS}(); | |||||
| } | |||||
| @@ -1,77 +1,68 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file was auto-generated and contains the startup code for a PIP. | |||||
| ============================================================================== | |||||
| */ | |||||
| %%include_juce%% | |||||
| #include "%%filename%%" | |||||
| %%component_begin%% | |||||
| class Application : public JUCEApplication | |||||
| { | |||||
| public: | |||||
| //============================================================================== | |||||
| Application() {} | |||||
| const String getApplicationName() override { return "%%project_name%%"; } | |||||
| const String getApplicationVersion() override { return "%%project_version%%"; } | |||||
| void initialise (const String&) override { %%startup%% } | |||||
| void shutdown() override { %%shutdown%% } | |||||
| private: | |||||
| class MainWindow : public DocumentWindow | |||||
| { | |||||
| public: | |||||
| MainWindow (const String& name, Component* c, JUCEApplication& a) | |||||
| : DocumentWindow (name, Desktop::getInstance().getDefaultLookAndFeel() | |||||
| .findColour (ResizableWindow::backgroundColourId), | |||||
| DocumentWindow::allButtons), | |||||
| app (a) | |||||
| { | |||||
| setUsingNativeTitleBar (true); | |||||
| setContentOwned (c, true); | |||||
| #if JUCE_ANDROID || JUCE_IOS | |||||
| setFullScreen (true); | |||||
| #else | |||||
| setResizable (true, false); | |||||
| setResizeLimits (300, 250, 10000, 10000); | |||||
| centreWithSize (getWidth(), getHeight()); | |||||
| #endif | |||||
| setVisible (true); | |||||
| } | |||||
| void closeButtonPressed() override | |||||
| { | |||||
| app.systemRequestedQuit(); | |||||
| } | |||||
| private: | |||||
| JUCEApplication& app; | |||||
| //============================================================================== | |||||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainWindow) | |||||
| }; | |||||
| std::unique_ptr<MainWindow> mainWindow; | |||||
| }; | |||||
| //============================================================================== | |||||
| START_JUCE_APPLICATION (Application) | |||||
| %%component_end%% | |||||
| %%audioprocessor_begin%% | |||||
| //============================================================================== | |||||
| AudioProcessor* JUCE_CALLTYPE createPluginFilter() | |||||
| { | |||||
| return new %%class_name%%(); | |||||
| } | |||||
| %%audioprocessor_end%% | |||||
| %%console_begin%% | |||||
| %%console_end%% | |||||
| /* | |||||
| ============================================================================== | |||||
| This file was auto-generated and contains the startup code for a PIP. | |||||
| ============================================================================== | |||||
| */ | |||||
| #include <JuceHeader.h> | |||||
| #include "${JUCE_PIP_HEADER}" | |||||
| class Application : public JUCEApplication | |||||
| { | |||||
| public: | |||||
| //============================================================================== | |||||
| Application() {} | |||||
| const String getApplicationName() override { return "${JUCE_PIP_NAME}"; } | |||||
| const String getApplicationVersion() override { return "${PROJECT_VERSION}"; } | |||||
| void initialise (const String&) override | |||||
| { | |||||
| mainWindow.reset (new MainWindow ("${JUCE_PIP_NAME}", new ${JUCE_PIP_MAIN_CLASS}, *this)); | |||||
| } | |||||
| void shutdown() override { mainWindow = nullptr; } | |||||
| private: | |||||
| class MainWindow : public DocumentWindow | |||||
| { | |||||
| public: | |||||
| MainWindow (const String& name, Component* c, JUCEApplication& a) | |||||
| : DocumentWindow (name, Desktop::getInstance().getDefaultLookAndFeel() | |||||
| .findColour (ResizableWindow::backgroundColourId), | |||||
| DocumentWindow::allButtons), | |||||
| app (a) | |||||
| { | |||||
| setUsingNativeTitleBar (true); | |||||
| setContentOwned (c, true); | |||||
| #if JUCE_ANDROID || JUCE_IOS | |||||
| setFullScreen (true); | |||||
| #else | |||||
| setResizable (true, false); | |||||
| setResizeLimits (300, 250, 10000, 10000); | |||||
| centreWithSize (getWidth(), getHeight()); | |||||
| #endif | |||||
| setVisible (true); | |||||
| } | |||||
| void closeButtonPressed() override | |||||
| { | |||||
| app.systemRequestedQuit(); | |||||
| } | |||||
| private: | |||||
| JUCEApplication& app; | |||||
| //============================================================================== | |||||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainWindow) | |||||
| }; | |||||
| std::unique_ptr<MainWindow> mainWindow; | |||||
| }; | |||||
| //============================================================================== | |||||
| START_JUCE_APPLICATION (Application) | |||||
| @@ -0,0 +1,10 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file was auto-generated and contains the startup code for a PIP. | |||||
| ============================================================================== | |||||
| */ | |||||
| #include <JuceHeader.h> | |||||
| #include "${JUCE_PIP_HEADER}" | |||||
| @@ -6,24 +6,24 @@ using UnityEngine; | |||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||
| using System.Runtime.InteropServices; | using System.Runtime.InteropServices; | ||||
| public class %%plugin_class_name%%GUI : IAudioEffectPluginGUI | |||||
| public class ${plugin_class_name}GUI : IAudioEffectPluginGUI | |||||
| { | { | ||||
| public override string Name { get { return "%%plugin_name%%"; } } | |||||
| public override string Description { get { return "%%plugin_description%%"; } } | |||||
| public override string Vendor { get { return "%%plugin_vendor%%"; } } | |||||
| public override string Name { get { return "${plugin_name}"; } } | |||||
| public override string Description { get { return "${plugin_description}"; } } | |||||
| public override string Vendor { get { return "${plugin_vendor}"; } } | |||||
| //============================================================================== | //============================================================================== | ||||
| [DllImport("%%plugin_name%%")] static extern System.IntPtr getRenderCallback(); | |||||
| [DllImport("${plugin_name}")] static extern System.IntPtr getRenderCallback(); | |||||
| [DllImport("%%plugin_name%%")] static extern void unityInitialiseTexture (int id, System.IntPtr texture, int width, int height); | |||||
| [DllImport("${plugin_name}")] static extern void unityInitialiseTexture (int id, System.IntPtr texture, int width, int height); | |||||
| [DllImport("%%plugin_name%%")] static extern void unityMouseDown (int id, float x, float y, EventModifiers mods, int button); | |||||
| [DllImport("%%plugin_name%%")] static extern void unityMouseDrag (int id, float x, float y, EventModifiers mods, int button); | |||||
| [DllImport("%%plugin_name%%")] static extern void unityMouseUp (int id, float x, float y, EventModifiers mods); | |||||
| [DllImport("${plugin_name}")] static extern void unityMouseDown (int id, float x, float y, EventModifiers mods, int button); | |||||
| [DllImport("${plugin_name}")] static extern void unityMouseDrag (int id, float x, float y, EventModifiers mods, int button); | |||||
| [DllImport("${plugin_name}")] static extern void unityMouseUp (int id, float x, float y, EventModifiers mods); | |||||
| [DllImport("%%plugin_name%%")] static extern void unityKeyEvent (int id, KeyCode code, EventModifiers mods, string name); | |||||
| [DllImport("${plugin_name}")] static extern void unityKeyEvent (int id, KeyCode code, EventModifiers mods, string name); | |||||
| [DllImport("%%plugin_name%%")] static extern void unitySetScreenBounds (int id, float x, float y, float w, float h); | |||||
| [DllImport("${plugin_name}")] static extern void unitySetScreenBounds (int id, float x, float y, float w, float h); | |||||
| //============================================================================== | //============================================================================== | ||||
| private class PluginGUIInstance | private class PluginGUIInstance | ||||
| @@ -38,10 +38,10 @@ public class %%plugin_class_name%%GUI : IAudioEffectPluginGUI | |||||
| } | } | ||||
| public void repaint (Rect r) | public void repaint (Rect r) | ||||
| { | |||||
| { | |||||
| Vector2 newScreenPosition = GUIUtility.GUIToScreenPoint (r.position); | Vector2 newScreenPosition = GUIUtility.GUIToScreenPoint (r.position); | ||||
| if (bounds != r | |||||
| if (bounds != r | |||||
| || screenPosition != newScreenPosition) | || screenPosition != newScreenPosition) | ||||
| { | { | ||||
| screenPosition = newScreenPosition; | screenPosition = newScreenPosition; | ||||
| @@ -51,7 +51,7 @@ public class %%plugin_class_name%%GUI : IAudioEffectPluginGUI | |||||
| setupTexture(); | setupTexture(); | ||||
| } | } | ||||
| GL.IssuePluginEvent (getRenderCallback(), instanceID); | |||||
| GL.IssuePluginEvent (getRenderCallback(), instanceID); | |||||
| texture.SetPixels32 (pixels); | texture.SetPixels32 (pixels); | ||||
| texture.Apply(); | texture.Apply(); | ||||
| @@ -69,7 +69,7 @@ public class %%plugin_class_name%%GUI : IAudioEffectPluginGUI | |||||
| Vector2 relativePos = new Vector2 (mousePos.x - bounds.x, mousePos.y - bounds.y); | Vector2 relativePos = new Vector2 (mousePos.x - bounds.x, mousePos.y - bounds.y); | ||||
| if (eventType == EventType.MouseDown) | |||||
| if (eventType == EventType.MouseDown) | |||||
| { | { | ||||
| unityMouseDown (instanceID, relativePos.x, relativePos.y, mods, Event.current.button); | unityMouseDown (instanceID, relativePos.x, relativePos.y, mods, Event.current.button); | ||||
| GUIUtility.hotControl = GUIUtility.GetControlID (FocusType.Passive); | GUIUtility.hotControl = GUIUtility.GetControlID (FocusType.Passive); | ||||
| @@ -79,7 +79,7 @@ public class %%plugin_class_name%%GUI : IAudioEffectPluginGUI | |||||
| unityMouseUp (instanceID, relativePos.x, relativePos.y, mods); | unityMouseUp (instanceID, relativePos.x, relativePos.y, mods); | ||||
| GUIUtility.hotControl = 0; | GUIUtility.hotControl = 0; | ||||
| } | } | ||||
| else if (eventType == EventType.MouseDrag) | |||||
| else if (eventType == EventType.MouseDrag) | |||||
| { | { | ||||
| unityMouseDrag (instanceID, relativePos.x, relativePos.y, mods, Event.current.button); | unityMouseDrag (instanceID, relativePos.x, relativePos.y, mods, Event.current.button); | ||||
| } | } | ||||
| @@ -0,0 +1,17 @@ | |||||
| # ============================================================================== | |||||
| # | |||||
| # This file is part of the JUCE 6 technical preview. | |||||
| # Copyright (c) 2020 - ROLI Ltd. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # ============================================================================== | |||||
| file(INSTALL ${src} DESTINATION ${dest}) | |||||
| @@ -0,0 +1,20 @@ | |||||
| # ============================================================================== | |||||
| # | |||||
| # This file is part of the JUCE 6 technical preview. | |||||
| # Copyright (c) 2020 - ROLI Ltd. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # ============================================================================== | |||||
| juce_add_module(juce_build_tools ALIAS_NAMESPACE juce) | |||||
| add_subdirectory(juceaide) | |||||
| @@ -0,0 +1,40 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE 6 technical preview. | |||||
| Copyright (c) 2017 - ROLI Ltd. | |||||
| 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. | |||||
| ============================================================================== | |||||
| */ | |||||
| #ifdef JUCE_BUILD_TOOLS_H_INCLUDED | |||||
| /* When you add this cpp file to your project, you mustn't include it in a file where you've | |||||
| already included any other headers - just put it inside a file on its own, possibly with your config | |||||
| flags preceding it, but don't include anything else. That also includes avoiding any automatic prefix | |||||
| header files that the compiler may be using. | |||||
| */ | |||||
| #error "Incorrect use of JUCE cpp file" | |||||
| #endif | |||||
| #include "juce_build_tools.h" | |||||
| #include <numeric> | |||||
| #include "utils/juce_CppTokeniserFunctions.cpp" | |||||
| #include "utils/juce_BuildHelperFunctions.cpp" | |||||
| #include "utils/juce_BinaryResourceFile.cpp" | |||||
| #include "utils/juce_Icons.cpp" | |||||
| #include "utils/juce_PlistOptions.cpp" | |||||
| #include "utils/juce_ResourceFileHelpers.cpp" | |||||
| #include "utils/juce_ResourceRc.cpp" | |||||
| #include "utils/juce_VersionNumbers.cpp" | |||||
| #include "utils/juce_Entitlements.cpp" | |||||
| @@ -0,0 +1,60 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE 6 technical preview. | |||||
| Copyright (c) 2017 - ROLI Ltd. | |||||
| 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. | |||||
| ============================================================================== | |||||
| */ | |||||
| /******************************************************************************* | |||||
| The block below describes the properties of this module, and is read by | |||||
| the Projucer to automatically generate project code that uses it. | |||||
| For details about the syntax and how to create or use a module, see the | |||||
| JUCE Module Format.txt file. | |||||
| BEGIN_JUCE_MODULE_DECLARATION | |||||
| ID: juce_build_tools | |||||
| vendor: juce | |||||
| version: 6.0.0 | |||||
| name: JUCE Build Tools | |||||
| description: Classes for generating intermediate files for JUCE projects. | |||||
| website: http://www.juce.com/juce | |||||
| license: GPL/Commercial | |||||
| dependencies: juce_gui_basics | |||||
| END_JUCE_MODULE_DECLARATION | |||||
| *******************************************************************************/ | |||||
| // This module is shared by juceaide and the Projucer, but should not be | |||||
| // considered 'public'. That is, its API, functionality, and contents (and | |||||
| // existence!) may change between releases without warning. | |||||
| #pragma once | |||||
| #define JUCE_BUILD_TOOLS_H_INCLUDED | |||||
| #include <juce_gui_basics/juce_gui_basics.h> | |||||
| #include "utils/juce_ProjectType.h" | |||||
| #include "utils/juce_BuildHelperFunctions.h" | |||||
| #include "utils/juce_BinaryResourceFile.h" | |||||
| #include "utils/juce_RelativePath.h" | |||||
| #include "utils/juce_Icons.h" | |||||
| #include "utils/juce_PlistOptions.h" | |||||
| #include "utils/juce_ResourceFileHelpers.h" | |||||
| #include "utils/juce_ResourceRc.h" | |||||
| #include "utils/juce_VersionNumbers.h" | |||||
| #include "utils/juce_Entitlements.h" | |||||
| @@ -0,0 +1,280 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE 6 technical preview. | |||||
| Copyright (c) 2017 - ROLI Ltd. | |||||
| 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. | |||||
| ============================================================================== | |||||
| */ | |||||
| namespace juce | |||||
| { | |||||
| namespace build_tools | |||||
| { | |||||
| static const char* resourceFileIdentifierString = "JUCER_BINARY_RESOURCE"; | |||||
| //============================================================================== | |||||
| void ResourceFile::setClassName (const String& name) | |||||
| { | |||||
| className = name; | |||||
| } | |||||
| void ResourceFile::addFile (const File& file) | |||||
| { | |||||
| files.add (file); | |||||
| auto variableNameRoot = makeBinaryDataIdentifierName (file); | |||||
| auto variableName = variableNameRoot; | |||||
| int suffix = 2; | |||||
| while (variableNames.contains (variableName)) | |||||
| variableName = variableNameRoot + String (suffix++); | |||||
| variableNames.add (variableName); | |||||
| } | |||||
| String ResourceFile::getDataVariableFor (const File& file) const | |||||
| { | |||||
| const auto index = files.indexOf (file); | |||||
| jassert (index >= 0); | |||||
| return variableNames[index]; | |||||
| } | |||||
| String ResourceFile::getSizeVariableFor (const File& file) const | |||||
| { | |||||
| return getDataVariableFor (file) + "Size"; | |||||
| } | |||||
| int64 ResourceFile::getTotalDataSize() const | |||||
| { | |||||
| return std::accumulate (files.begin(), | |||||
| files.end(), | |||||
| int64 { 0 }, | |||||
| [] (int64 acc, const File& f) { return acc + f.getSize(); }); | |||||
| } | |||||
| static void writeComment (MemoryOutputStream& mo) | |||||
| { | |||||
| mo << newLine << newLine | |||||
| << " This is an auto-generated file: Any edits you make may be overwritten!" << newLine | |||||
| << newLine | |||||
| << "*/" << newLine | |||||
| << newLine; | |||||
| } | |||||
| Result ResourceFile::writeHeader (MemoryOutputStream& header) | |||||
| { | |||||
| header << "/* ========================================================================================="; | |||||
| writeComment (header); | |||||
| header << "#pragma once" << newLine | |||||
| << newLine | |||||
| << "namespace " << className << newLine | |||||
| << "{" << newLine; | |||||
| for (int i = 0; i < files.size(); ++i) | |||||
| { | |||||
| auto& file = files.getReference(i); | |||||
| if (! file.existsAsFile()) | |||||
| return Result::fail ("Can't open resource file: " + file.getFullPathName()); | |||||
| auto dataSize = file.getSize(); | |||||
| auto variableName = variableNames[i]; | |||||
| FileInputStream fileStream (file); | |||||
| if (fileStream.openedOk()) | |||||
| { | |||||
| header << " extern const char* " << variableName << ";" << newLine; | |||||
| header << " const int " << variableName << "Size = " << (int) dataSize << ";" << newLine << newLine; | |||||
| } | |||||
| } | |||||
| header << " // Number of elements in the namedResourceList and originalFileNames arrays." << newLine | |||||
| << " const int namedResourceListSize = " << files.size() << ";" << newLine | |||||
| << newLine | |||||
| << " // Points to the start of a list of resource names." << newLine | |||||
| << " extern const char* namedResourceList[];" << newLine | |||||
| << newLine | |||||
| << " // Points to the start of a list of resource filenames." << newLine | |||||
| << " extern const char* originalFilenames[];" << newLine | |||||
| << newLine | |||||
| << " // If you provide the name of one of the binary resource variables above, this function will" << newLine | |||||
| << " // return the corresponding data and its size (or a null pointer if the name isn't found)." << newLine | |||||
| << " const char* getNamedResource (const char* resourceNameUTF8, int& dataSizeInBytes);" << newLine | |||||
| << newLine | |||||
| << " // If you provide the name of one of the binary resource variables above, this function will" << newLine | |||||
| << " // return the corresponding original, non-mangled filename (or a null pointer if the name isn't found)." << newLine | |||||
| << " const char* getNamedResourceOriginalFilename (const char* resourceNameUTF8);" << newLine | |||||
| << "}" << newLine; | |||||
| return Result::ok(); | |||||
| } | |||||
| Result ResourceFile::writeCpp (MemoryOutputStream& cpp, const File& headerFile, int& i, const int maxFileSize) | |||||
| { | |||||
| bool isFirstFile = (i == 0); | |||||
| cpp << "/* ==================================== " << resourceFileIdentifierString << " ===================================="; | |||||
| writeComment (cpp); | |||||
| cpp << "namespace " << className << newLine | |||||
| << "{" << newLine; | |||||
| while (i < files.size()) | |||||
| { | |||||
| auto& file = files.getReference(i); | |||||
| auto variableName = variableNames[i]; | |||||
| FileInputStream fileStream (file); | |||||
| if (fileStream.openedOk()) | |||||
| { | |||||
| auto tempVariable = "temp_binary_data_" + String (i); | |||||
| cpp << newLine << "//================== " << file.getFileName() << " ==================" << newLine | |||||
| << "static const unsigned char " << tempVariable << "[] =" << newLine; | |||||
| { | |||||
| MemoryBlock data; | |||||
| fileStream.readIntoMemoryBlock (data); | |||||
| writeDataAsCppLiteral (data, cpp, true, true); | |||||
| } | |||||
| cpp << newLine << newLine | |||||
| << "const char* " << variableName << " = (const char*) " << tempVariable << ";" << newLine; | |||||
| } | |||||
| ++i; | |||||
| if (cpp.getPosition() > maxFileSize) | |||||
| break; | |||||
| } | |||||
| if (isFirstFile) | |||||
| { | |||||
| if (i < files.size()) | |||||
| { | |||||
| cpp << newLine | |||||
| << "}" << newLine | |||||
| << newLine | |||||
| << "#include \"" << headerFile.getFileName() << "\"" << newLine | |||||
| << newLine | |||||
| << "namespace " << className << newLine | |||||
| << "{"; | |||||
| } | |||||
| cpp << newLine | |||||
| << newLine | |||||
| << "const char* getNamedResource (const char* resourceNameUTF8, int& numBytes)" << newLine | |||||
| << "{" << newLine; | |||||
| StringArray returnCodes; | |||||
| for (auto& file : files) | |||||
| { | |||||
| auto dataSize = file.getSize(); | |||||
| returnCodes.add ("numBytes = " + String (dataSize) + "; return " + variableNames[files.indexOf (file)] + ";"); | |||||
| } | |||||
| createStringMatcher (cpp, "resourceNameUTF8", variableNames, returnCodes, 4); | |||||
| cpp << " numBytes = 0;" << newLine | |||||
| << " return nullptr;" << newLine | |||||
| << "}" << newLine | |||||
| << newLine; | |||||
| cpp << "const char* namedResourceList[] =" << newLine | |||||
| << "{" << newLine; | |||||
| for (int j = 0; j < files.size(); ++j) | |||||
| cpp << " " << variableNames[j].quoted() << (j < files.size() - 1 ? "," : "") << newLine; | |||||
| cpp << "};" << newLine << newLine; | |||||
| cpp << "const char* originalFilenames[] =" << newLine | |||||
| << "{" << newLine; | |||||
| for (auto& f : files) | |||||
| cpp << " " << f.getFileName().quoted() << (files.indexOf (f) < files.size() - 1 ? "," : "") << newLine; | |||||
| cpp << "};" << newLine << newLine; | |||||
| cpp << "const char* getNamedResourceOriginalFilename (const char* resourceNameUTF8)" << newLine | |||||
| << "{" << newLine | |||||
| << " for (unsigned int i = 0; i < (sizeof (namedResourceList) / sizeof (namedResourceList[0])); ++i)" << newLine | |||||
| << " {" << newLine | |||||
| << " if (namedResourceList[i] == resourceNameUTF8)" << newLine | |||||
| << " return originalFilenames[i];" << newLine | |||||
| << " }" << newLine | |||||
| << newLine | |||||
| << " return nullptr;" << newLine | |||||
| << "}" << newLine | |||||
| << newLine; | |||||
| } | |||||
| cpp << "}" << newLine; | |||||
| return Result::ok(); | |||||
| } | |||||
| ResourceFile::WriteResult ResourceFile::write (int maxFileSize, | |||||
| String projectLineFeed, | |||||
| File headerFile, | |||||
| std::function<File (int)> getCppFile) | |||||
| { | |||||
| Array<File> filesCreated; | |||||
| { | |||||
| MemoryOutputStream mo; | |||||
| mo.setNewLineString (projectLineFeed); | |||||
| auto r = writeHeader (mo); | |||||
| if (r.failed()) | |||||
| return { r }; | |||||
| if (! overwriteFileWithNewDataIfDifferent (headerFile, mo)) | |||||
| return { Result::fail ("Can't write to file: " + headerFile.getFullPathName()) }; | |||||
| filesCreated.add (headerFile); | |||||
| } | |||||
| int i = 0; | |||||
| int fileIndex = 0; | |||||
| for (;;) | |||||
| { | |||||
| auto cpp = getCppFile (fileIndex); | |||||
| MemoryOutputStream mo; | |||||
| mo.setNewLineString (projectLineFeed); | |||||
| auto r = writeCpp (mo, headerFile, i, maxFileSize); | |||||
| if (r.failed()) | |||||
| return { r, std::move (filesCreated) }; | |||||
| if (! overwriteFileWithNewDataIfDifferent (cpp, mo)) | |||||
| return { Result::fail ("Can't write to file: " + cpp.getFullPathName()), std::move (filesCreated) }; | |||||
| filesCreated.add (cpp); | |||||
| ++fileIndex; | |||||
| if (i >= files.size()) | |||||
| break; | |||||
| } | |||||
| return { Result::ok(), std::move (filesCreated) }; | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,67 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE 6 technical preview. | |||||
| Copyright (c) 2017 - ROLI Ltd. | |||||
| 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. | |||||
| ============================================================================== | |||||
| */ | |||||
| namespace juce | |||||
| { | |||||
| namespace build_tools | |||||
| { | |||||
| class ResourceFile | |||||
| { | |||||
| public: | |||||
| ResourceFile() = default; | |||||
| void setClassName (const String& className); | |||||
| String getClassName() const { return className; } | |||||
| void addFile (const File& file); | |||||
| String getDataVariableFor (const File& file) const; | |||||
| String getSizeVariableFor (const File& file) const; | |||||
| int getNumFiles() const { return files.size (); } | |||||
| const File& getFile (int index) const { return files.getReference (index); } | |||||
| int64 getTotalDataSize() const; | |||||
| struct WriteResult | |||||
| { | |||||
| Result result; | |||||
| Array<File> filesCreated; | |||||
| }; | |||||
| WriteResult write (int maxFileSize, | |||||
| String projectLineFeed, | |||||
| File headerFile, | |||||
| std::function<File (int)> getCppFile); | |||||
| private: | |||||
| Array<File> files; | |||||
| StringArray variableNames; | |||||
| String className { "BinaryData" }; | |||||
| Result writeHeader (MemoryOutputStream&); | |||||
| Result writeCpp (MemoryOutputStream&, const File&, int&, int); | |||||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ResourceFile) | |||||
| }; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,344 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE 6 technical preview. | |||||
| Copyright (c) 2017 - ROLI Ltd. | |||||
| 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. | |||||
| ============================================================================== | |||||
| */ | |||||
| namespace juce | |||||
| { | |||||
| namespace build_tools | |||||
| { | |||||
| void overwriteFileIfDifferentOrThrow (const File& file, const MemoryOutputStream& newData) | |||||
| { | |||||
| if (! overwriteFileWithNewDataIfDifferent (file, newData)) | |||||
| throw SaveError (file); | |||||
| } | |||||
| void overwriteFileIfDifferentOrThrow (const File& file, const String& newData) | |||||
| { | |||||
| if (! overwriteFileWithNewDataIfDifferent (file, newData)) | |||||
| throw SaveError (file); | |||||
| } | |||||
| String replacePreprocessorDefs (const StringPairArray& definitions, String sourceString) | |||||
| { | |||||
| for (int i = 0; i < definitions.size(); ++i) | |||||
| { | |||||
| const String key (definitions.getAllKeys()[i]); | |||||
| const String value (definitions.getAllValues()[i]); | |||||
| sourceString = sourceString.replace ("${" + key + "}", value); | |||||
| } | |||||
| return sourceString; | |||||
| } | |||||
| String getXcodePackageType (ProjectType::Target::Type type) | |||||
| { | |||||
| switch (type) | |||||
| { | |||||
| case ProjectType::Target::Type::GUIApp: | |||||
| case ProjectType::Target::Type::StandalonePlugIn: | |||||
| return "APPL"; | |||||
| case ProjectType::Target::Type::VSTPlugIn: | |||||
| case ProjectType::Target::Type::VST3PlugIn: | |||||
| case ProjectType::Target::Type::AudioUnitPlugIn: | |||||
| case ProjectType::Target::Type::UnityPlugIn: | |||||
| return "BNDL"; | |||||
| case ProjectType::Target::Type::AudioUnitv3PlugIn: | |||||
| return "XPC!"; | |||||
| case ProjectType::Target::Type::AAXPlugIn: | |||||
| case ProjectType::Target::Type::RTASPlugIn: | |||||
| return "TDMw"; | |||||
| case ProjectType::Target::Type::ConsoleApp: | |||||
| case ProjectType::Target::Type::StaticLibrary: | |||||
| case ProjectType::Target::Type::DynamicLibrary: | |||||
| case ProjectType::Target::Type::SharedCodeTarget: | |||||
| case ProjectType::Target::Type::AggregateTarget: | |||||
| case ProjectType::Target::Type::unspecified: | |||||
| default: | |||||
| return {}; | |||||
| } | |||||
| } | |||||
| String getXcodeBundleSignature (ProjectType::Target::Type type) | |||||
| { | |||||
| switch (type) | |||||
| { | |||||
| case ProjectType::Target::Type::GUIApp: | |||||
| case ProjectType::Target::Type::VSTPlugIn: | |||||
| case ProjectType::Target::Type::VST3PlugIn: | |||||
| case ProjectType::Target::Type::AudioUnitPlugIn: | |||||
| case ProjectType::Target::Type::StandalonePlugIn: | |||||
| case ProjectType::Target::Type::AudioUnitv3PlugIn: | |||||
| case ProjectType::Target::Type::UnityPlugIn: | |||||
| return "????"; | |||||
| case ProjectType::Target::Type::AAXPlugIn: | |||||
| case ProjectType::Target::Type::RTASPlugIn: | |||||
| return "PTul"; | |||||
| case ProjectType::Target::Type::ConsoleApp: | |||||
| case ProjectType::Target::Type::StaticLibrary: | |||||
| case ProjectType::Target::Type::DynamicLibrary: | |||||
| case ProjectType::Target::Type::SharedCodeTarget: | |||||
| case ProjectType::Target::Type::AggregateTarget: | |||||
| case ProjectType::Target::Type::unspecified: | |||||
| default: | |||||
| return {}; | |||||
| } | |||||
| } | |||||
| static unsigned int calculateHash (const String& s, const unsigned int hashMultiplier) | |||||
| { | |||||
| auto t = s.toUTF8(); | |||||
| unsigned int hash = 0; | |||||
| while (*t != 0) | |||||
| hash = hashMultiplier * hash + (unsigned int) *t++; | |||||
| return hash; | |||||
| } | |||||
| static unsigned int findBestHashMultiplier (const StringArray& strings) | |||||
| { | |||||
| unsigned int v = 31; | |||||
| for (;;) | |||||
| { | |||||
| SortedSet<unsigned int> hashes; | |||||
| bool collision = false; | |||||
| for (int i = strings.size(); --i >= 0;) | |||||
| { | |||||
| auto hash = calculateHash (strings[i], v); | |||||
| if (hashes.contains (hash)) | |||||
| { | |||||
| collision = true; | |||||
| break; | |||||
| } | |||||
| hashes.add (hash); | |||||
| } | |||||
| if (! collision) | |||||
| break; | |||||
| v += 2; | |||||
| } | |||||
| return v; | |||||
| } | |||||
| String makeValidIdentifier (String s, bool capitalise, bool removeColons, bool allowTemplates, bool allowAsterisks) | |||||
| { | |||||
| if (s.isEmpty()) | |||||
| return "unknown"; | |||||
| if (removeColons) | |||||
| s = s.replaceCharacters (".,;:/@", "______"); | |||||
| else | |||||
| s = s.replaceCharacters (".,;/@", "_____"); | |||||
| for (int i = s.length(); --i > 0;) | |||||
| if (CharacterFunctions::isLetter (s[i]) | |||||
| && CharacterFunctions::isLetter (s[i - 1]) | |||||
| && CharacterFunctions::isUpperCase (s[i]) | |||||
| && ! CharacterFunctions::isUpperCase (s[i - 1])) | |||||
| s = s.substring (0, i) + " " + s.substring (i); | |||||
| String allowedChars ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_ 0123456789"); | |||||
| if (allowTemplates) | |||||
| allowedChars += "<>"; | |||||
| if (! removeColons) | |||||
| allowedChars += ":"; | |||||
| if (allowAsterisks) | |||||
| allowedChars += "*"; | |||||
| StringArray words; | |||||
| words.addTokens (s.retainCharacters (allowedChars), false); | |||||
| words.trim(); | |||||
| auto n = words[0]; | |||||
| if (capitalise) | |||||
| n = n.toLowerCase(); | |||||
| for (int i = 1; i < words.size(); ++i) | |||||
| { | |||||
| if (capitalise && words[i].length() > 1) | |||||
| n << words[i].substring (0, 1).toUpperCase() | |||||
| << words[i].substring (1).toLowerCase(); | |||||
| else | |||||
| n << words[i]; | |||||
| } | |||||
| if (CharacterFunctions::isDigit (n[0])) | |||||
| n = "_" + n; | |||||
| if (isReservedKeyword (n)) | |||||
| n << '_'; | |||||
| return n; | |||||
| } | |||||
| String makeBinaryDataIdentifierName (const File& file) | |||||
| { | |||||
| return makeValidIdentifier (file.getFileName() | |||||
| .replaceCharacters (" .", "__") | |||||
| .retainCharacters ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_0123456789"), | |||||
| false, true, false); | |||||
| } | |||||
| void writeDataAsCppLiteral (const MemoryBlock& mb, OutputStream& out, | |||||
| bool breakAtNewLines, bool allowStringBreaks) | |||||
| { | |||||
| const int maxCharsOnLine = 250; | |||||
| auto data = (const unsigned char*) mb.getData(); | |||||
| int charsOnLine = 0; | |||||
| bool canUseStringLiteral = mb.getSize() < 32768; // MS compilers can't handle big string literals.. | |||||
| if (canUseStringLiteral) | |||||
| { | |||||
| unsigned int numEscaped = 0; | |||||
| for (size_t i = 0; i < mb.getSize(); ++i) | |||||
| { | |||||
| auto num = (unsigned int) data[i]; | |||||
| if (! ((num >= 32 && num < 127) || num == '\t' || num == '\r' || num == '\n')) | |||||
| { | |||||
| if (++numEscaped > mb.getSize() / 4) | |||||
| { | |||||
| canUseStringLiteral = false; | |||||
| break; | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| if (! canUseStringLiteral) | |||||
| { | |||||
| out << "{ "; | |||||
| for (size_t i = 0; i < mb.getSize(); ++i) | |||||
| { | |||||
| auto num = (int) (unsigned int) data[i]; | |||||
| out << num << ','; | |||||
| charsOnLine += 2; | |||||
| if (num >= 10) | |||||
| { | |||||
| ++charsOnLine; | |||||
| if (num >= 100) | |||||
| ++charsOnLine; | |||||
| } | |||||
| if (charsOnLine >= maxCharsOnLine) | |||||
| { | |||||
| charsOnLine = 0; | |||||
| out << newLine; | |||||
| } | |||||
| } | |||||
| out << "0,0 };"; | |||||
| } | |||||
| else | |||||
| { | |||||
| out << "\""; | |||||
| writeEscapeChars (out, (const char*) data, (int) mb.getSize(), | |||||
| maxCharsOnLine, breakAtNewLines, false, allowStringBreaks); | |||||
| out << "\";"; | |||||
| } | |||||
| } | |||||
| void createStringMatcher (OutputStream& out, const String& utf8PointerVariable, | |||||
| const StringArray& strings, const StringArray& codeToExecute, const int indentLevel) | |||||
| { | |||||
| jassert (strings.size() == codeToExecute.size()); | |||||
| auto indent = String::repeatedString (" ", indentLevel); | |||||
| auto hashMultiplier = findBestHashMultiplier (strings); | |||||
| out << indent << "unsigned int hash = 0;" << newLine | |||||
| << newLine | |||||
| << indent << "if (" << utf8PointerVariable << " != nullptr)" << newLine | |||||
| << indent << " while (*" << utf8PointerVariable << " != 0)" << newLine | |||||
| << indent << " hash = " << (int) hashMultiplier << " * hash + (unsigned int) *" << utf8PointerVariable << "++;" << newLine | |||||
| << newLine | |||||
| << indent << "switch (hash)" << newLine | |||||
| << indent << "{" << newLine; | |||||
| for (int i = 0; i < strings.size(); ++i) | |||||
| { | |||||
| out << indent << " case 0x" << hexString8Digits ((int) calculateHash (strings[i], hashMultiplier)) | |||||
| << ": " << codeToExecute[i] << newLine; | |||||
| } | |||||
| out << indent << " default: break;" << newLine | |||||
| << indent << "}" << newLine << newLine; | |||||
| } | |||||
| String unixStylePath (const String& path) { return path.replaceCharacter ('\\', '/'); } | |||||
| String windowsStylePath (const String& path) { return path.replaceCharacter ('/', '\\'); } | |||||
| String currentOSStylePath (const String& path) | |||||
| { | |||||
| #if JUCE_WINDOWS | |||||
| return windowsStylePath (path); | |||||
| #else | |||||
| return unixStylePath (path); | |||||
| #endif | |||||
| } | |||||
| bool isAbsolutePath (const String& path) | |||||
| { | |||||
| return File::isAbsolutePath (path) | |||||
| || path.startsWithChar ('/') // (needed because File::isAbsolutePath will ignore forward-slashes on Windows) | |||||
| || path.startsWithChar ('$') | |||||
| || path.startsWithChar ('~') | |||||
| || (CharacterFunctions::isLetter (path[0]) && path[1] == ':') | |||||
| || path.startsWithIgnoreCase ("smb:"); | |||||
| } | |||||
| String getRelativePathFrom (const File& file, const File& sourceFolder) | |||||
| { | |||||
| #if ! JUCE_WINDOWS | |||||
| // On a non-windows machine, we can't know if a drive-letter path may be relative or not. | |||||
| if (CharacterFunctions::isLetter (file.getFullPathName()[0]) && file.getFullPathName()[1] == ':') | |||||
| return file.getFullPathName(); | |||||
| #endif | |||||
| return file.getRelativePathFrom (sourceFolder); | |||||
| } | |||||
| void writeStreamToFile (const File& file, const std::function<void (MemoryOutputStream&)>& writer) | |||||
| { | |||||
| MemoryOutputStream mo; | |||||
| writer (mo); | |||||
| overwriteFileIfDifferentOrThrow (file, mo); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,79 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE 6 technical preview. | |||||
| Copyright (c) 2017 - ROLI Ltd. | |||||
| 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. | |||||
| ============================================================================== | |||||
| */ | |||||
| namespace juce | |||||
| { | |||||
| namespace build_tools | |||||
| { | |||||
| void overwriteFileIfDifferentOrThrow (const File& file, const MemoryOutputStream& newData); | |||||
| void overwriteFileIfDifferentOrThrow (const File& file, const String& newData); | |||||
| class SaveError | |||||
| { | |||||
| public: | |||||
| SaveError (const String& error) : message (error) | |||||
| {} | |||||
| SaveError (const File& fileThatFailedToWrite) | |||||
| : message ("Can't write to the file: " + fileThatFailedToWrite.getFullPathName()) | |||||
| {} | |||||
| String message; | |||||
| }; | |||||
| String replacePreprocessorDefs (const StringPairArray& definitions, String sourceString); | |||||
| String getXcodePackageType (ProjectType::Target::Type); | |||||
| String getXcodeBundleSignature (ProjectType::Target::Type); | |||||
| inline String hexString8Digits (int value) | |||||
| { | |||||
| return String::toHexString (value).paddedLeft ('0', 8); | |||||
| } | |||||
| String makeValidIdentifier (String s, | |||||
| bool capitalise, | |||||
| bool removeColons, | |||||
| bool allowTemplates, | |||||
| bool allowAsterisks = false); | |||||
| String makeBinaryDataIdentifierName (const File& file); | |||||
| void writeDataAsCppLiteral (const MemoryBlock& mb, | |||||
| OutputStream& out, | |||||
| bool breakAtNewLines, | |||||
| bool allowStringBreaks); | |||||
| void createStringMatcher (OutputStream& out, | |||||
| const String& utf8PointerVariable, | |||||
| const StringArray& strings, | |||||
| const StringArray& codeToExecute, | |||||
| const int indentLevel); | |||||
| String unixStylePath (const String& path); | |||||
| String windowsStylePath (const String& path); | |||||
| String currentOSStylePath (const String& path); | |||||
| bool isAbsolutePath (const String& path); | |||||
| // A windows-aware version of File::getRelativePath() | |||||
| String getRelativePathFrom (const File& file, const File& sourceFolder); | |||||
| void writeStreamToFile (const File& file, const std::function<void (MemoryOutputStream&)>& writer); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,214 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE 6 technical preview. | |||||
| Copyright (c) 2017 - ROLI Ltd. | |||||
| 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. | |||||
| ============================================================================== | |||||
| */ | |||||
| namespace juce | |||||
| { | |||||
| namespace build_tools | |||||
| { | |||||
| static bool isReservedKeyword (String::CharPointerType token, const int tokenLength) noexcept | |||||
| { | |||||
| static const char* const keywords2Char[] = | |||||
| { "do", "if", "or", nullptr }; | |||||
| static const char* const keywords3Char[] = | |||||
| { "and", "asm", "for", "int", "new", "not", "try", "xor", nullptr }; | |||||
| static const char* const keywords4Char[] = | |||||
| { "auto", "bool", "case", "char", "else", "enum", "goto", | |||||
| "long", "this", "true", "void", nullptr }; | |||||
| static const char* const keywords5Char[] = | |||||
| { "bitor", "break", "catch", "class", "compl", "const", "false", "final", | |||||
| "float", "or_eq", "short", "throw", "union", "using", "while", nullptr }; | |||||
| static const char* const keywords6Char[] = | |||||
| { "and_eq", "bitand", "delete", "double", "export", "extern", "friend", | |||||
| "import", "inline", "module", "not_eq", "public", "return", "signed", | |||||
| "sizeof", "static", "struct", "switch", "typeid", "xor_eq", nullptr }; | |||||
| static const char* const keywords7Char[] = | |||||
| { "__cdecl", "_Pragma", "alignas", "alignof", "concept", "default", | |||||
| "mutable", "nullptr", "private", "typedef", "uint8_t", "virtual", | |||||
| "wchar_t", nullptr }; | |||||
| static const char* const keywordsOther[] = | |||||
| { "@class", "@dynamic", "@end", "@implementation", "@interface", "@public", | |||||
| "@private", "@protected", "@property", "@synthesize", "__fastcall", "__stdcall", | |||||
| "atomic_cancel", "atomic_commit", "atomic_noexcept", "char16_t", "char32_t", | |||||
| "co_await", "co_return", "co_yield", "const_cast", "constexpr", "continue", | |||||
| "decltype", "dynamic_cast", "explicit", "namespace", "noexcept", "operator", "override", | |||||
| "protected", "register", "reinterpret_cast", "requires", "static_assert", | |||||
| "static_cast", "synchronized", "template", "thread_local", "typename", "unsigned", | |||||
| "volatile", nullptr }; | |||||
| const char* const* k; | |||||
| switch (tokenLength) | |||||
| { | |||||
| case 2: k = keywords2Char; break; | |||||
| case 3: k = keywords3Char; break; | |||||
| case 4: k = keywords4Char; break; | |||||
| case 5: k = keywords5Char; break; | |||||
| case 6: k = keywords6Char; break; | |||||
| case 7: k = keywords7Char; break; | |||||
| default: | |||||
| if (tokenLength < 2 || tokenLength > 16) | |||||
| return false; | |||||
| k = keywordsOther; | |||||
| break; | |||||
| } | |||||
| for (int i = 0; k[i] != nullptr; ++i) | |||||
| if (token.compare (CharPointer_ASCII (k[i])) == 0) | |||||
| return true; | |||||
| return false; | |||||
| } | |||||
| static bool isReservedKeyword (const String& token) noexcept | |||||
| { | |||||
| return isReservedKeyword (token.getCharPointer(), token.length()); | |||||
| } | |||||
| //============================================================================== | |||||
| /** Takes a UTF8 string and writes it to a stream using standard C++ escape sequences for any | |||||
| non-ascii bytes. | |||||
| Although not strictly a tokenising function, this is still a function that often comes in | |||||
| handy when working with C++ code! | |||||
| Note that addEscapeChars() is easier to use than this function if you're working with Strings. | |||||
| @see addEscapeChars | |||||
| */ | |||||
| static void writeEscapeChars (OutputStream& out, const char* utf8, const int numBytesToRead, | |||||
| const int maxCharsOnLine, const bool breakAtNewLines, | |||||
| const bool replaceSingleQuotes, const bool allowStringBreaks) | |||||
| { | |||||
| int charsOnLine = 0; | |||||
| bool lastWasHexEscapeCode = false; | |||||
| bool trigraphDetected = false; | |||||
| for (int i = 0; i < numBytesToRead || numBytesToRead < 0; ++i) | |||||
| { | |||||
| auto c = (unsigned char) utf8[i]; | |||||
| bool startNewLine = false; | |||||
| switch (c) | |||||
| { | |||||
| case '\t': out << "\\t"; trigraphDetected = false; lastWasHexEscapeCode = false; charsOnLine += 2; break; | |||||
| case '\r': out << "\\r"; trigraphDetected = false; lastWasHexEscapeCode = false; charsOnLine += 2; break; | |||||
| case '\n': out << "\\n"; trigraphDetected = false; lastWasHexEscapeCode = false; charsOnLine += 2; startNewLine = breakAtNewLines; break; | |||||
| case '\\': out << "\\\\"; trigraphDetected = false; lastWasHexEscapeCode = false; charsOnLine += 2; break; | |||||
| case '\"': out << "\\\""; trigraphDetected = false; lastWasHexEscapeCode = false; charsOnLine += 2; break; | |||||
| case '?': | |||||
| if (trigraphDetected) | |||||
| { | |||||
| out << "\\?"; | |||||
| charsOnLine++; | |||||
| trigraphDetected = false; | |||||
| } | |||||
| else | |||||
| { | |||||
| out << "?"; | |||||
| trigraphDetected = true; | |||||
| } | |||||
| lastWasHexEscapeCode = false; | |||||
| charsOnLine++; | |||||
| break; | |||||
| case 0: | |||||
| if (numBytesToRead < 0) | |||||
| return; | |||||
| out << "\\0"; | |||||
| lastWasHexEscapeCode = true; | |||||
| trigraphDetected = false; | |||||
| charsOnLine += 2; | |||||
| break; | |||||
| case '\'': | |||||
| if (replaceSingleQuotes) | |||||
| { | |||||
| out << "\\\'"; | |||||
| lastWasHexEscapeCode = false; | |||||
| trigraphDetected = false; | |||||
| charsOnLine += 2; | |||||
| break; | |||||
| } | |||||
| // deliberate fall-through... | |||||
| default: | |||||
| if (c >= 32 && c < 127 && ! (lastWasHexEscapeCode // (have to avoid following a hex escape sequence with a valid hex digit) | |||||
| && CharacterFunctions::getHexDigitValue (c) >= 0)) | |||||
| { | |||||
| out << (char) c; | |||||
| lastWasHexEscapeCode = false; | |||||
| trigraphDetected = false; | |||||
| ++charsOnLine; | |||||
| } | |||||
| else if (allowStringBreaks && lastWasHexEscapeCode && c >= 32 && c < 127) | |||||
| { | |||||
| out << "\"\"" << (char) c; | |||||
| lastWasHexEscapeCode = false; | |||||
| trigraphDetected = false; | |||||
| charsOnLine += 3; | |||||
| } | |||||
| else | |||||
| { | |||||
| out << (c < 16 ? "\\x0" : "\\x") << String::toHexString ((int) c); | |||||
| lastWasHexEscapeCode = true; | |||||
| trigraphDetected = false; | |||||
| charsOnLine += 4; | |||||
| } | |||||
| break; | |||||
| } | |||||
| if ((startNewLine || (maxCharsOnLine > 0 && charsOnLine >= maxCharsOnLine)) | |||||
| && (numBytesToRead < 0 || i < numBytesToRead - 1)) | |||||
| { | |||||
| charsOnLine = 0; | |||||
| out << "\"" << newLine << "\""; | |||||
| lastWasHexEscapeCode = false; | |||||
| } | |||||
| } | |||||
| } | |||||
| /** Takes a string and returns a version of it where standard C++ escape sequences have been | |||||
| used to replace any non-ascii bytes. | |||||
| Although not strictly a tokenising function, this is still a function that often comes in | |||||
| handy when working with C++ code! | |||||
| @see writeEscapeChars | |||||
| */ | |||||
| static String addEscapeChars (const String& s) | |||||
| { | |||||
| MemoryOutputStream mo; | |||||
| writeEscapeChars (mo, s.toRawUTF8(), -1, -1, false, true, true); | |||||
| return mo.toString(); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,109 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE 6 technical preview. | |||||
| Copyright (c) 2017 - ROLI Ltd. | |||||
| 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. | |||||
| ============================================================================== | |||||
| */ | |||||
| namespace juce | |||||
| { | |||||
| namespace build_tools | |||||
| { | |||||
| String EntitlementOptions::getEntitlementsFileContent() const | |||||
| { | |||||
| String content = | |||||
| "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" | |||||
| "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n" | |||||
| "<plist version=\"1.0\">\n" | |||||
| "<dict>\n"; | |||||
| const auto entitlements = getEntitlements(); | |||||
| for (auto& key : entitlements.getAllKeys()) | |||||
| content += "\t<key>" + key + "</key>\n\t" + entitlements[key] + "\n"; | |||||
| return content + "</dict>\n</plist>\n"; | |||||
| } | |||||
| StringPairArray EntitlementOptions::getEntitlements() const | |||||
| { | |||||
| StringPairArray entitlements; | |||||
| if (isiOS) | |||||
| { | |||||
| if (isAudioPluginProject && shouldEnableIAA) | |||||
| entitlements.set ("inter-app-audio", "<true/>"); | |||||
| if (isiCloudPermissionsEnabled) | |||||
| { | |||||
| entitlements.set ("com.apple.developer.icloud-container-identifiers", | |||||
| "<array>\n" | |||||
| " <string>iCloud.$(CFBundleIdentifier)</string>\n" | |||||
| " </array>"); | |||||
| entitlements.set ("com.apple.developer.icloud-services", | |||||
| "<array>\n" | |||||
| " <string>CloudDocuments</string>\n" | |||||
| " </array>"); | |||||
| entitlements.set ("com.apple.developer.ubiquity-container-identifiers", | |||||
| "<array>\n" | |||||
| " <string>iCloud.$(CFBundleIdentifier)</string>\n" | |||||
| " </array>"); | |||||
| } | |||||
| } | |||||
| if (isPushNotificationsEnabled) | |||||
| entitlements.set (isiOS ? "aps-environment" | |||||
| : "com.apple.developer.aps-environment", | |||||
| "<string>development</string>"); | |||||
| if (isAppGroupsEnabled) | |||||
| { | |||||
| auto appGroups = StringArray::fromTokens (appGroupIdString, ";", {}); | |||||
| auto groups = String ("<array>"); | |||||
| for (auto group : appGroups) | |||||
| groups += "\n\t\t<string>" + group.trim() + "</string>"; | |||||
| groups += "\n\t</array>"; | |||||
| entitlements.set ("com.apple.security.application-groups", groups); | |||||
| } | |||||
| if (isHardenedRuntimeEnabled) | |||||
| for (auto& option : hardenedRuntimeOptions) | |||||
| entitlements.set (option, "<true/>"); | |||||
| if (isAppSandboxEnabled || (! isiOS && isAudioPluginProject && type == ProjectType::Target::AudioUnitv3PlugIn)) | |||||
| { | |||||
| entitlements.set ("com.apple.security.app-sandbox", "<true/>"); | |||||
| if (isAppSandboxInhertianceEnabled) | |||||
| { | |||||
| // no other sandbox options can be specified if sandbox inheritance is enabled! | |||||
| jassert (appSandboxOptions.isEmpty()); | |||||
| entitlements.set ("com.apple.security.inherit", "<true/>"); | |||||
| } | |||||
| if (isAppSandboxEnabled) | |||||
| for (auto& option : appSandboxOptions) | |||||
| entitlements.set (option, "<true/>"); | |||||
| } | |||||
| return entitlements; | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,48 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE 6 technical preview. | |||||
| Copyright (c) 2017 - ROLI Ltd. | |||||
| 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. | |||||
| ============================================================================== | |||||
| */ | |||||
| namespace juce | |||||
| { | |||||
| namespace build_tools | |||||
| { | |||||
| struct EntitlementOptions final | |||||
| { | |||||
| String getEntitlementsFileContent() const; | |||||
| ProjectType::Target::Type type = ProjectType::Target::GUIApp; | |||||
| bool isiOS = false; | |||||
| bool isAudioPluginProject = false; | |||||
| bool shouldEnableIAA = false; | |||||
| bool isiCloudPermissionsEnabled = false; | |||||
| bool isPushNotificationsEnabled = false; | |||||
| bool isAppGroupsEnabled = false; | |||||
| bool isHardenedRuntimeEnabled = false; | |||||
| bool isAppSandboxEnabled = false; | |||||
| bool isAppSandboxInhertianceEnabled = false; | |||||
| String appGroupIdString; | |||||
| StringArray hardenedRuntimeOptions; | |||||
| StringArray appSandboxOptions; | |||||
| private: | |||||
| StringPairArray getEntitlements() const; | |||||
| }; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,497 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE 6 technical preview. | |||||
| Copyright (c) 2017 - ROLI Ltd. | |||||
| 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. | |||||
| ============================================================================== | |||||
| */ | |||||
| namespace juce | |||||
| { | |||||
| namespace build_tools | |||||
| { | |||||
| Array<Drawable*> asArray (const Icons& icons) | |||||
| { | |||||
| Array<Drawable*> result; | |||||
| if (icons.small != nullptr) | |||||
| result.add (icons.small.get()); | |||||
| if (icons.big != nullptr) | |||||
| result.add (icons.big.get()); | |||||
| return result; | |||||
| } | |||||
| namespace mac | |||||
| { | |||||
| static Image fixIconImageSize (Drawable& image) | |||||
| { | |||||
| const int validSizes[] = { 16, 32, 64, 128, 256, 512, 1024 }; | |||||
| auto w = image.getWidth(); | |||||
| auto h = image.getHeight(); | |||||
| int bestSize = 16; | |||||
| for (int size : validSizes) | |||||
| { | |||||
| if (w == h && w == size) | |||||
| { | |||||
| bestSize = w; | |||||
| break; | |||||
| } | |||||
| if (jmax (w, h) > size) | |||||
| bestSize = size; | |||||
| } | |||||
| return rescaleImageForIcon (image, bestSize); | |||||
| } | |||||
| static void writeIconData (MemoryOutputStream& out, const Image& image, const char* type) | |||||
| { | |||||
| MemoryOutputStream pngData; | |||||
| PNGImageFormat pngFormat; | |||||
| pngFormat.writeImageToStream (image, pngData); | |||||
| out.write (type, 4); | |||||
| out.writeIntBigEndian (8 + (int) pngData.getDataSize()); | |||||
| out << pngData; | |||||
| } | |||||
| } // namespace mac | |||||
| void writeMacIcon (const Icons& icons, OutputStream& out) | |||||
| { | |||||
| MemoryOutputStream data; | |||||
| auto smallest = std::numeric_limits<int>::max(); | |||||
| Drawable* smallestImage = nullptr; | |||||
| const auto images = asArray (icons); | |||||
| for (int i = 0; i < images.size(); ++i) | |||||
| { | |||||
| auto image = mac::fixIconImageSize (*images[i]); | |||||
| jassert (image.getWidth() == image.getHeight()); | |||||
| if (image.getWidth() < smallest) | |||||
| { | |||||
| smallest = image.getWidth(); | |||||
| smallestImage = images[i]; | |||||
| } | |||||
| switch (image.getWidth()) | |||||
| { | |||||
| case 16: mac::writeIconData (data, image, "icp4"); break; | |||||
| case 32: mac::writeIconData (data, image, "icp5"); break; | |||||
| case 64: mac::writeIconData (data, image, "icp6"); break; | |||||
| case 128: mac::writeIconData (data, image, "ic07"); break; | |||||
| case 256: mac::writeIconData (data, image, "ic08"); break; | |||||
| case 512: mac::writeIconData (data, image, "ic09"); break; | |||||
| case 1024: mac::writeIconData (data, image, "ic10"); break; | |||||
| default: break; | |||||
| } | |||||
| } | |||||
| jassert (data.getDataSize() > 0); // no suitable sized images? | |||||
| // If you only supply a 1024 image, the file doesn't work on 10.8, so we need | |||||
| // to force a smaller one in there too.. | |||||
| if (smallest > 512 && smallestImage != nullptr) | |||||
| mac::writeIconData (data, rescaleImageForIcon (*smallestImage, 512), "ic09"); | |||||
| out.write ("icns", 4); | |||||
| out.writeIntBigEndian ((int) data.getDataSize() + 8); | |||||
| out << data; | |||||
| } | |||||
| Image getBestIconForSize (const Icons& icons, | |||||
| int size, | |||||
| bool returnNullIfNothingBigEnough) | |||||
| { | |||||
| auto* const im = [&]() -> Drawable* | |||||
| { | |||||
| if ((icons.small != nullptr) != (icons.big != nullptr)) | |||||
| return icons.small != nullptr ? icons.small.get() : icons.big.get(); | |||||
| if (icons.small != nullptr && icons.big != nullptr) | |||||
| { | |||||
| if (icons.small->getWidth() >= size && icons.big->getWidth() >= size) | |||||
| return icons.small->getWidth() < icons.big->getWidth() ? icons.small.get() : icons.big.get(); | |||||
| if (icons.small->getWidth() >= size) | |||||
| return icons.small.get(); | |||||
| if (icons.big->getWidth() >= size) | |||||
| return icons.big.get(); | |||||
| } | |||||
| return nullptr; | |||||
| }(); | |||||
| if (im == nullptr) | |||||
| return {}; | |||||
| if (returnNullIfNothingBigEnough && im->getWidth() < size && im->getHeight() < size) | |||||
| return {}; | |||||
| return rescaleImageForIcon (*im, size); | |||||
| } | |||||
| namespace win | |||||
| { | |||||
| static void writeBMPImage (const Image& image, const int w, const int h, MemoryOutputStream& out) | |||||
| { | |||||
| int maskStride = (w / 8 + 3) & ~3; | |||||
| out.writeInt (40); // bitmapinfoheader size | |||||
| out.writeInt (w); | |||||
| out.writeInt (h * 2); | |||||
| out.writeShort (1); // planes | |||||
| out.writeShort (32); // bits | |||||
| out.writeInt (0); // compression | |||||
| out.writeInt ((h * w * 4) + (h * maskStride)); // size image | |||||
| out.writeInt (0); // x pixels per meter | |||||
| out.writeInt (0); // y pixels per meter | |||||
| out.writeInt (0); // clr used | |||||
| out.writeInt (0); // clr important | |||||
| Image::BitmapData bitmap (image, Image::BitmapData::readOnly); | |||||
| int alphaThreshold = 5; | |||||
| int y; | |||||
| for (y = h; --y >= 0;) | |||||
| { | |||||
| for (int x = 0; x < w; ++x) | |||||
| { | |||||
| auto pixel = bitmap.getPixelColour (x, y); | |||||
| if (pixel.getAlpha() <= alphaThreshold) | |||||
| { | |||||
| out.writeInt (0); | |||||
| } | |||||
| else | |||||
| { | |||||
| out.writeByte ((char) pixel.getBlue()); | |||||
| out.writeByte ((char) pixel.getGreen()); | |||||
| out.writeByte ((char) pixel.getRed()); | |||||
| out.writeByte ((char) pixel.getAlpha()); | |||||
| } | |||||
| } | |||||
| } | |||||
| for (y = h; --y >= 0;) | |||||
| { | |||||
| int mask = 0, count = 0; | |||||
| for (int x = 0; x < w; ++x) | |||||
| { | |||||
| auto pixel = bitmap.getPixelColour (x, y); | |||||
| mask <<= 1; | |||||
| if (pixel.getAlpha() <= alphaThreshold) | |||||
| mask |= 1; | |||||
| if (++count == 8) | |||||
| { | |||||
| out.writeByte ((char) mask); | |||||
| count = 0; | |||||
| mask = 0; | |||||
| } | |||||
| } | |||||
| if (mask != 0) | |||||
| out.writeByte ((char) mask); | |||||
| for (int i = maskStride - w / 8; --i >= 0;) | |||||
| out.writeByte (0); | |||||
| } | |||||
| } | |||||
| static void writeIcon (const Array<Image>& images, OutputStream& out) | |||||
| { | |||||
| out.writeShort (0); // reserved | |||||
| out.writeShort (1); // .ico tag | |||||
| out.writeShort ((short) images.size()); | |||||
| MemoryOutputStream dataBlock; | |||||
| int imageDirEntrySize = 16; | |||||
| int dataBlockStart = 6 + images.size() * imageDirEntrySize; | |||||
| for (int i = 0; i < images.size(); ++i) | |||||
| { | |||||
| auto oldDataSize = dataBlock.getDataSize(); | |||||
| auto& image = images.getReference (i); | |||||
| auto w = image.getWidth(); | |||||
| auto h = image.getHeight(); | |||||
| if (w >= 256 || h >= 256) | |||||
| { | |||||
| PNGImageFormat pngFormat; | |||||
| pngFormat.writeImageToStream (image, dataBlock); | |||||
| } | |||||
| else | |||||
| { | |||||
| writeBMPImage (image, w, h, dataBlock); | |||||
| } | |||||
| out.writeByte ((char) w); | |||||
| out.writeByte ((char) h); | |||||
| out.writeByte (0); | |||||
| out.writeByte (0); | |||||
| out.writeShort (1); // colour planes | |||||
| out.writeShort (32); // bits per pixel | |||||
| out.writeInt ((int) (dataBlock.getDataSize() - oldDataSize)); | |||||
| out.writeInt (dataBlockStart + (int) oldDataSize); | |||||
| } | |||||
| jassert (out.getPosition() == dataBlockStart); | |||||
| out << dataBlock; | |||||
| } | |||||
| } // namespace win | |||||
| void writeWinIcon (const Icons& icons, OutputStream& os) | |||||
| { | |||||
| Array<Image> images; | |||||
| int sizes[] = { 16, 32, 48, 256 }; | |||||
| for (int size : sizes) | |||||
| { | |||||
| auto im = getBestIconForSize (icons, size, true); | |||||
| if (im.isValid()) | |||||
| images.add (im); | |||||
| } | |||||
| if (images.size() > 0) | |||||
| win::writeIcon (images, os); | |||||
| } | |||||
| void writeMacIcon (const Icons& icons, const File& file) | |||||
| { | |||||
| writeStreamToFile (file, [&] (juce::MemoryOutputStream& mo) { writeMacIcon (icons, mo); }); | |||||
| } | |||||
| void writeWinIcon (const Icons& icons, const File& file) | |||||
| { | |||||
| writeStreamToFile (file, [&] (juce::MemoryOutputStream& mo) { writeWinIcon (icons, mo); }); | |||||
| } | |||||
| Image rescaleImageForIcon (Drawable& d, const int size) | |||||
| { | |||||
| if (auto* drawableImage = dynamic_cast<DrawableImage*> (&d)) | |||||
| { | |||||
| auto im = SoftwareImageType().convert (drawableImage->getImage()); | |||||
| if (im.getWidth() == size && im.getHeight() == size) | |||||
| return im; | |||||
| // (scale it down in stages for better resampling) | |||||
| while (im.getWidth() > 2 * size && im.getHeight() > 2 * size) | |||||
| im = im.rescaled (im.getWidth() / 2, | |||||
| im.getHeight() / 2); | |||||
| Image newIm (Image::ARGB, size, size, true, SoftwareImageType()); | |||||
| Graphics g (newIm); | |||||
| g.drawImageWithin (im, 0, 0, size, size, | |||||
| RectanglePlacement::centred | RectanglePlacement::onlyReduceInSize, false); | |||||
| return newIm; | |||||
| } | |||||
| Image im (Image::ARGB, size, size, true, SoftwareImageType()); | |||||
| Graphics g (im); | |||||
| d.drawWithin (g, im.getBounds().toFloat(), RectanglePlacement::centred, 1.0f); | |||||
| return im; | |||||
| } | |||||
| struct AppIconType | |||||
| { | |||||
| const char* idiom; | |||||
| const char* sizeString; | |||||
| const char* filename; | |||||
| const char* scale; | |||||
| int size; | |||||
| }; | |||||
| static const AppIconType iOSAppIconTypes[] | |||||
| { | |||||
| { "iphone", "20x20", "Icon-Notification-20@2x.png", "2x", 40 }, | |||||
| { "iphone", "20x20", "Icon-Notification-20@3x.png", "3x", 60 }, | |||||
| { "iphone", "29x29", "Icon-29.png", "1x", 29 }, | |||||
| { "iphone", "29x29", "Icon-29@2x.png", "2x", 58 }, | |||||
| { "iphone", "29x29", "Icon-29@3x.png", "3x", 87 }, | |||||
| { "iphone", "40x40", "Icon-Spotlight-40@2x.png", "2x", 80 }, | |||||
| { "iphone", "40x40", "Icon-Spotlight-40@3x.png", "3x", 120 }, | |||||
| { "iphone", "57x57", "Icon.png", "1x", 57 }, | |||||
| { "iphone", "57x57", "Icon@2x.png", "2x", 114 }, | |||||
| { "iphone", "60x60", "Icon-60@2x.png", "2x", 120 }, | |||||
| { "iphone", "60x60", "Icon-@3x.png", "3x", 180 }, | |||||
| { "ipad", "20x20", "Icon-Notifications-20.png", "1x", 20 }, | |||||
| { "ipad", "20x20", "Icon-Notifications-20@2x.png", "2x", 40 }, | |||||
| { "ipad", "29x29", "Icon-Small-1.png", "1x", 29 }, | |||||
| { "ipad", "29x29", "Icon-Small@2x-1.png", "2x", 58 }, | |||||
| { "ipad", "40x40", "Icon-Spotlight-40.png", "1x", 40 }, | |||||
| { "ipad", "40x40", "Icon-Spotlight-40@2x-1.png", "2x", 80 }, | |||||
| { "ipad", "50x50", "Icon-Small-50.png", "1x", 50 }, | |||||
| { "ipad", "50x50", "Icon-Small-50@2x.png", "2x", 100 }, | |||||
| { "ipad", "72x72", "Icon-72.png", "1x", 72 }, | |||||
| { "ipad", "72x72", "Icon-72@2x.png", "2x", 144 }, | |||||
| { "ipad", "76x76", "Icon-76.png", "1x", 76 }, | |||||
| { "ipad", "76x76", "Icon-76@2x.png", "2x", 152 }, | |||||
| { "ipad", "83.5x83.5", "Icon-83.5@2x.png", "2x", 167 }, | |||||
| { "ios-marketing", "1024x1024", "Icon-AppStore-1024.png", "1x", 1024 } | |||||
| }; | |||||
| static void createiOSIconFiles (const Icons& icons, File appIconSet) | |||||
| { | |||||
| const auto images = asArray (icons); | |||||
| if (! images.isEmpty()) | |||||
| { | |||||
| for (auto& type : iOSAppIconTypes) | |||||
| { | |||||
| auto image = rescaleImageForIcon (*images.getFirst(), type.size); | |||||
| if (image.hasAlphaChannel()) | |||||
| { | |||||
| Image background (Image::RGB, image.getWidth(), image.getHeight(), false); | |||||
| Graphics g (background); | |||||
| g.fillAll (Colours::white); | |||||
| g.drawImageWithin (image, 0, 0, image.getWidth(), image.getHeight(), | |||||
| RectanglePlacement::centred | RectanglePlacement::onlyReduceInSize); | |||||
| image = background; | |||||
| } | |||||
| MemoryOutputStream pngData; | |||||
| PNGImageFormat pngFormat; | |||||
| pngFormat.writeImageToStream (image, pngData); | |||||
| overwriteFileIfDifferentOrThrow (appIconSet.getChildFile (type.filename), pngData); | |||||
| } | |||||
| } | |||||
| } | |||||
| static String getiOSAssetContents (var images) | |||||
| { | |||||
| DynamicObject::Ptr v (new DynamicObject()); | |||||
| var info (new DynamicObject()); | |||||
| info.getDynamicObject()->setProperty ("version", 1); | |||||
| info.getDynamicObject()->setProperty ("author", "xcode"); | |||||
| v->setProperty ("images", images); | |||||
| v->setProperty ("info", info); | |||||
| return JSON::toString (var (v.get())); | |||||
| } | |||||
| //============================================================================== | |||||
| static String getiOSAppIconContents() | |||||
| { | |||||
| var images; | |||||
| for (auto& type : iOSAppIconTypes) | |||||
| { | |||||
| DynamicObject::Ptr d (new DynamicObject()); | |||||
| d->setProperty ("idiom", type.idiom); | |||||
| d->setProperty ("size", type.sizeString); | |||||
| d->setProperty ("filename", type.filename); | |||||
| d->setProperty ("scale", type.scale); | |||||
| images.append (var (d.get())); | |||||
| } | |||||
| return getiOSAssetContents (images); | |||||
| } | |||||
| struct ImageType | |||||
| { | |||||
| const char* orientation; | |||||
| const char* idiom; | |||||
| const char* subtype; | |||||
| const char* extent; | |||||
| const char* scale; | |||||
| const char* filename; | |||||
| int width; | |||||
| int height; | |||||
| }; | |||||
| static const ImageType iOSLaunchImageTypes[] | |||||
| { | |||||
| { "portrait", "iphone", nullptr, "full-screen", "2x", "LaunchImage-iphone-2x.png", 640, 960 }, | |||||
| { "portrait", "iphone", "retina4", "full-screen", "2x", "LaunchImage-iphone-retina4.png", 640, 1136 }, | |||||
| { "portrait", "ipad", nullptr, "full-screen", "1x", "LaunchImage-ipad-portrait-1x.png", 768, 1024 }, | |||||
| { "landscape","ipad", nullptr, "full-screen", "1x", "LaunchImage-ipad-landscape-1x.png", 1024, 768 }, | |||||
| { "portrait", "ipad", nullptr, "full-screen", "2x", "LaunchImage-ipad-portrait-2x.png", 1536, 2048 }, | |||||
| { "landscape","ipad", nullptr, "full-screen", "2x", "LaunchImage-ipad-landscape-2x.png", 2048, 1536 } | |||||
| }; | |||||
| static void createiOSLaunchImageFiles (const File& launchImageSet) | |||||
| { | |||||
| for (auto& type : iOSLaunchImageTypes) | |||||
| { | |||||
| Image image (Image::ARGB, type.width, type.height, true); // (empty black image) | |||||
| image.clear (image.getBounds(), Colours::black); | |||||
| MemoryOutputStream pngData; | |||||
| PNGImageFormat pngFormat; | |||||
| pngFormat.writeImageToStream (image, pngData); | |||||
| build_tools::overwriteFileIfDifferentOrThrow (launchImageSet.getChildFile (type.filename), pngData); | |||||
| } | |||||
| } | |||||
| static String getiOSLaunchImageContents() | |||||
| { | |||||
| var images; | |||||
| for (auto& type : iOSLaunchImageTypes) | |||||
| { | |||||
| DynamicObject::Ptr d (new DynamicObject()); | |||||
| d->setProperty ("orientation", type.orientation); | |||||
| d->setProperty ("idiom", type.idiom); | |||||
| d->setProperty ("extent", type.extent); | |||||
| d->setProperty ("minimum-system-version", "7.0"); | |||||
| d->setProperty ("scale", type.scale); | |||||
| d->setProperty ("filename", type.filename); | |||||
| if (type.subtype != nullptr) | |||||
| d->setProperty ("subtype", type.subtype); | |||||
| images.append (var (d.get())); | |||||
| } | |||||
| return getiOSAssetContents (images); | |||||
| } | |||||
| RelativePath createXcassetsFolderFromIcons (const Icons& icons, | |||||
| const File& targetFolder, | |||||
| String projectFilenameRootString) | |||||
| { | |||||
| const auto assets = targetFolder.getChildFile (projectFilenameRootString) | |||||
| .getChildFile ("Images.xcassets"); | |||||
| const auto iconSet = assets.getChildFile ("AppIcon.appiconset"); | |||||
| const auto launchImage = assets.getChildFile ("LaunchImage.launchimage"); | |||||
| overwriteFileIfDifferentOrThrow (iconSet.getChildFile ("Contents.json"), getiOSAppIconContents()); | |||||
| createiOSIconFiles (icons, iconSet); | |||||
| overwriteFileIfDifferentOrThrow (launchImage.getChildFile ("Contents.json"), getiOSLaunchImageContents()); | |||||
| createiOSLaunchImageFiles (launchImage); | |||||
| return { assets, targetFolder, RelativePath::buildTargetFolder }; | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,42 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE 6 technical preview. | |||||
| Copyright (c) 2017 - ROLI Ltd. | |||||
| 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. | |||||
| ============================================================================== | |||||
| */ | |||||
| namespace juce | |||||
| { | |||||
| namespace build_tools | |||||
| { | |||||
| struct Icons | |||||
| { | |||||
| std::unique_ptr<Drawable> small; | |||||
| std::unique_ptr<Drawable> big; | |||||
| }; | |||||
| Array<Drawable*> asArray (const Icons&); | |||||
| void writeMacIcon (const Icons&, const File&); | |||||
| void writeWinIcon (const Icons&, const File&); | |||||
| Image getBestIconForSize (const Icons& icons, | |||||
| int size, | |||||
| bool returnNullIfNothingBigEnough); | |||||
| Image rescaleImageForIcon (Drawable& d, const int size); | |||||
| RelativePath createXcassetsFolderFromIcons (const Icons& icons, | |||||
| const File& targetFolder, | |||||
| String projectFilenameRootString); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,354 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE 6 technical preview. | |||||
| Copyright (c) 2017 - ROLI Ltd. | |||||
| 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. | |||||
| ============================================================================== | |||||
| */ | |||||
| namespace juce | |||||
| { | |||||
| namespace build_tools | |||||
| { | |||||
| //============================================================================== | |||||
| static bool keyFoundAndNotSequentialDuplicate (XmlElement& xml, const String& key) | |||||
| { | |||||
| forEachXmlChildElementWithTagName (xml, element, "key") | |||||
| { | |||||
| if (element->getAllSubText().trim().equalsIgnoreCase (key)) | |||||
| { | |||||
| if (element->getNextElement() != nullptr && element->getNextElement()->hasTagName ("key")) | |||||
| { | |||||
| // found broken plist format (sequential duplicate), fix by removing | |||||
| xml.removeChildElement (element, true); | |||||
| return false; | |||||
| } | |||||
| // key found (not sequential duplicate) | |||||
| return true; | |||||
| } | |||||
| } | |||||
| // key not found | |||||
| return false; | |||||
| } | |||||
| static bool addKeyIfNotFound (XmlElement& xml, const String& key) | |||||
| { | |||||
| if (! keyFoundAndNotSequentialDuplicate (xml, key)) | |||||
| { | |||||
| xml.createNewChildElement ("key")->addTextElement (key); | |||||
| return true; | |||||
| } | |||||
| return false; | |||||
| } | |||||
| static void addPlistDictionaryKey (XmlElement& xml, const String& key, const String& value) | |||||
| { | |||||
| if (addKeyIfNotFound (xml, key)) | |||||
| xml.createNewChildElement ("string")->addTextElement (value); | |||||
| } | |||||
| template <size_t N> | |||||
| static void addPlistDictionaryKey (XmlElement& xml, const String& key, const char (&value) [N]) | |||||
| { | |||||
| addPlistDictionaryKey (xml, key, String { value }); | |||||
| } | |||||
| static void addPlistDictionaryKey (XmlElement& xml, const String& key, const bool value) | |||||
| { | |||||
| if (addKeyIfNotFound (xml, key)) | |||||
| xml.createNewChildElement (value ? "true" : "false"); | |||||
| } | |||||
| static void addPlistDictionaryKey (XmlElement& xml, const String& key, int value) | |||||
| { | |||||
| if (addKeyIfNotFound (xml, key)) | |||||
| xml.createNewChildElement ("integer")->addTextElement (String (value)); | |||||
| } | |||||
| //============================================================================== | |||||
| static void addArrayToPlist (XmlElement& dict, String arrayKey, const StringArray& arrayElements) | |||||
| { | |||||
| dict.createNewChildElement ("key")->addTextElement (arrayKey); | |||||
| auto* plistStringArray = dict.createNewChildElement ("array"); | |||||
| for (auto& e : arrayElements) | |||||
| plistStringArray->createNewChildElement ("string")->addTextElement (e); | |||||
| } | |||||
| void PlistOptions::write (const File& infoPlistFile) const | |||||
| { | |||||
| writeStreamToFile (infoPlistFile, [&] (MemoryOutputStream& mo) { write (mo); }); | |||||
| } | |||||
| void PlistOptions::write (MemoryOutputStream& mo) const | |||||
| { | |||||
| XmlElement::TextFormat format; | |||||
| format.dtd = "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">"; | |||||
| createXML()->writeTo (mo, format); | |||||
| } | |||||
| std::unique_ptr<XmlElement> PlistOptions::createXML() const | |||||
| { | |||||
| auto plist = parseXML (plistToMerge); | |||||
| if (plist == nullptr || ! plist->hasTagName ("plist")) | |||||
| plist.reset (new XmlElement ("plist")); | |||||
| auto* dict = plist->getChildByName ("dict"); | |||||
| if (dict == nullptr) | |||||
| dict = plist->createNewChildElement ("dict"); | |||||
| if (microphonePermissionEnabled) | |||||
| addPlistDictionaryKey (*dict, "NSMicrophoneUsageDescription", microphonePermissionText); | |||||
| if (cameraPermissionEnabled) | |||||
| addPlistDictionaryKey (*dict, "NSCameraUsageDescription", cameraPermissionText); | |||||
| if (iOS) | |||||
| { | |||||
| if (bluetoothPermissionEnabled) | |||||
| { | |||||
| addPlistDictionaryKey (*dict, "NSBluetoothAlwaysUsageDescription", bluetoothPermissionText); | |||||
| addPlistDictionaryKey (*dict, "NSBluetoothPeripheralUsageDescription", bluetoothPermissionText); // needed for pre iOS 13.0 | |||||
| } | |||||
| addPlistDictionaryKey (*dict, "LSRequiresIPhoneOS", true); | |||||
| if (type != ProjectType::Target::AudioUnitv3PlugIn) | |||||
| addPlistDictionaryKey (*dict, "UIViewControllerBasedStatusBarAppearance", false); | |||||
| if (shouldAddStoryboardToProject) | |||||
| addPlistDictionaryKey (*dict, "UILaunchStoryboardName", storyboardName); | |||||
| } | |||||
| else | |||||
| { | |||||
| if (sendAppleEventsPermissionEnabled) | |||||
| addPlistDictionaryKey (*dict, "NSAppleEventsUsageDescription", sendAppleEventsPermissionText); | |||||
| } | |||||
| addPlistDictionaryKey (*dict, "CFBundleExecutable", executableName); | |||||
| if (! iOS) // (NB: on iOS this causes error ITMS-90032 during publishing) | |||||
| addPlistDictionaryKey (*dict, "CFBundleIconFile", iconFile.exists() ? iconFile.getFileName() : String()); | |||||
| addPlistDictionaryKey (*dict, "CFBundleIdentifier", bundleIdentifier); | |||||
| addPlistDictionaryKey (*dict, "CFBundleName", projectName); | |||||
| // needed by NSExtension on iOS | |||||
| addPlistDictionaryKey (*dict, "CFBundleDisplayName", projectName); | |||||
| addPlistDictionaryKey (*dict, "CFBundlePackageType", getXcodePackageType (type)); | |||||
| addPlistDictionaryKey (*dict, "CFBundleSignature", getXcodeBundleSignature (type)); | |||||
| addPlistDictionaryKey (*dict, "CFBundleShortVersionString", version); | |||||
| addPlistDictionaryKey (*dict, "CFBundleVersion", version); | |||||
| addPlistDictionaryKey (*dict, "NSHumanReadableCopyright", companyCopyright); | |||||
| addPlistDictionaryKey (*dict, "NSHighResolutionCapable", true); | |||||
| auto replacedDocExtensions = StringArray::fromTokens (replacePreprocessorDefs (allPreprocessorDefs, | |||||
| documentExtensions), ",", {}); | |||||
| replacedDocExtensions.trim(); | |||||
| replacedDocExtensions.removeEmptyStrings (true); | |||||
| if (! replacedDocExtensions.isEmpty() && type != ProjectType::Target::AudioUnitv3PlugIn) | |||||
| { | |||||
| dict->createNewChildElement ("key")->addTextElement ("CFBundleDocumentTypes"); | |||||
| auto* dict2 = dict->createNewChildElement ("array")->createNewChildElement ("dict"); | |||||
| XmlElement* arrayTag = nullptr; | |||||
| for (auto ex : replacedDocExtensions) | |||||
| { | |||||
| if (ex.startsWithChar ('.')) | |||||
| ex = ex.substring (1); | |||||
| if (arrayTag == nullptr) | |||||
| { | |||||
| dict2->createNewChildElement ("key")->addTextElement ("CFBundleTypeExtensions"); | |||||
| arrayTag = dict2->createNewChildElement ("array"); | |||||
| addPlistDictionaryKey (*dict2, "CFBundleTypeName", ex); | |||||
| addPlistDictionaryKey (*dict2, "CFBundleTypeRole", "Editor"); | |||||
| addPlistDictionaryKey (*dict2, "CFBundleTypeIconFile", "Icon"); | |||||
| addPlistDictionaryKey (*dict2, "NSPersistentStoreTypeKey", "XML"); | |||||
| } | |||||
| arrayTag->createNewChildElement ("string")->addTextElement (ex); | |||||
| } | |||||
| } | |||||
| if (fileSharingEnabled && type != ProjectType::Target::AudioUnitv3PlugIn) | |||||
| addPlistDictionaryKey (*dict, "UIFileSharingEnabled", true); | |||||
| if (documentBrowserEnabled) | |||||
| addPlistDictionaryKey (*dict, "UISupportsDocumentBrowser", true); | |||||
| if (statusBarHidden && type != ProjectType::Target::AudioUnitv3PlugIn) | |||||
| addPlistDictionaryKey (*dict, "UIStatusBarHidden", true); | |||||
| if (iOS) | |||||
| { | |||||
| if (type != ProjectType::Target::AudioUnitv3PlugIn) | |||||
| { | |||||
| // Forcing full screen disables the split screen feature and prevents error ITMS-90475 | |||||
| addPlistDictionaryKey (*dict, "UIRequiresFullScreen", true); | |||||
| addPlistDictionaryKey (*dict, "UIStatusBarHidden", true); | |||||
| addIosScreenOrientations (*dict); | |||||
| addIosBackgroundModes (*dict); | |||||
| } | |||||
| if (type == ProjectType::Target::StandalonePlugIn && enableIAA) | |||||
| { | |||||
| XmlElement audioComponentsPlistKey ("key"); | |||||
| audioComponentsPlistKey.addTextElement ("AudioComponents"); | |||||
| dict->addChildElement (new XmlElement (audioComponentsPlistKey)); | |||||
| XmlElement audioComponentsPlistEntry ("array"); | |||||
| auto* audioComponentsDict = audioComponentsPlistEntry.createNewChildElement ("dict"); | |||||
| addPlistDictionaryKey (*audioComponentsDict, "name", IAAPluginName); | |||||
| addPlistDictionaryKey (*audioComponentsDict, "manufacturer", pluginManufacturerCode.substring (0, 4)); | |||||
| addPlistDictionaryKey (*audioComponentsDict, "type", IAATypeCode); | |||||
| addPlistDictionaryKey (*audioComponentsDict, "subtype", pluginCode.substring (0, 4)); | |||||
| addPlistDictionaryKey (*audioComponentsDict, "version", versionAsHex); | |||||
| dict->addChildElement (new XmlElement (audioComponentsPlistEntry)); | |||||
| } | |||||
| } | |||||
| const auto extraOptions = [&]() -> Array<XmlElement> | |||||
| { | |||||
| if (type == ProjectType::Target::Type::AudioUnitPlugIn) | |||||
| return createExtraAudioUnitTargetPlistOptions(); | |||||
| if (type == ProjectType::Target::Type::AudioUnitv3PlugIn) | |||||
| return createExtraAudioUnitV3TargetPlistOptions(); | |||||
| return {}; | |||||
| }(); | |||||
| for (auto& e : extraOptions) | |||||
| dict->addChildElement (new XmlElement (e)); | |||||
| return plist; | |||||
| } | |||||
| void PlistOptions::addIosScreenOrientations (XmlElement& dict) const | |||||
| { | |||||
| String screenOrientations[] = { iPhoneScreenOrientations, iPadScreenOrientations }; | |||||
| String plistSuffix[] = { "", "~ipad" }; | |||||
| auto orientationsAreTheSame = screenOrientations[0] == screenOrientations[1]; | |||||
| for (int i = 0; i < (orientationsAreTheSame ? 1 : 2); ++i) | |||||
| { | |||||
| StringArray iOSOrientations; | |||||
| if (screenOrientations[i].contains ("portrait")) { iOSOrientations.add ("UIInterfaceOrientationPortrait"); } | |||||
| if (screenOrientations[i].contains ("landscape")) { iOSOrientations.add ("UIInterfaceOrientationLandscapeLeft"); iOSOrientations.add ("UIInterfaceOrientationLandscapeRight"); } | |||||
| addArrayToPlist (dict, String ("UISupportedInterfaceOrientations") + plistSuffix[i], iOSOrientations); | |||||
| } | |||||
| } | |||||
| void PlistOptions::addIosBackgroundModes (XmlElement& dict) const | |||||
| { | |||||
| StringArray iosBackgroundModes; | |||||
| if (backgroundAudioEnabled) iosBackgroundModes.add ("audio"); | |||||
| if (backgroundBleEnabled) iosBackgroundModes.add ("bluetooth-central"); | |||||
| if (pushNotificationsEnabled) iosBackgroundModes.add ("remote-notification"); | |||||
| addArrayToPlist (dict, "UIBackgroundModes", iosBackgroundModes); | |||||
| } | |||||
| Array<XmlElement> PlistOptions::createExtraAudioUnitTargetPlistOptions() const | |||||
| { | |||||
| XmlElement plistKey ("key"); | |||||
| plistKey.addTextElement ("AudioComponents"); | |||||
| XmlElement plistEntry ("array"); | |||||
| auto* dict = plistEntry.createNewChildElement ("dict"); | |||||
| auto truncatedCode = pluginManufacturerCode.substring (0, 4); | |||||
| auto pluginSubType = pluginCode.substring (0, 4); | |||||
| if (truncatedCode.toLowerCase() == truncatedCode) | |||||
| { | |||||
| throw SaveError ("AudioUnit plugin code identifiers invalid!\n\n" | |||||
| "You have used only lower case letters in your AU plugin manufacturer identifier. " | |||||
| "You must have at least one uppercase letter in your AU plugin manufacturer " | |||||
| "identifier code."); | |||||
| } | |||||
| addPlistDictionaryKey (*dict, "name", pluginManufacturer + ": " + pluginName); | |||||
| addPlistDictionaryKey (*dict, "description", pluginDescription); | |||||
| addPlistDictionaryKey (*dict, "factoryFunction", pluginAUExportPrefix + "Factory"); | |||||
| addPlistDictionaryKey (*dict, "manufacturer", truncatedCode); | |||||
| addPlistDictionaryKey (*dict, "type", auMainType.removeCharacters ("'")); | |||||
| addPlistDictionaryKey (*dict, "subtype", pluginSubType); | |||||
| addPlistDictionaryKey (*dict, "version", versionAsHex); | |||||
| if (isAuSandboxSafe) | |||||
| { | |||||
| addPlistDictionaryKey (*dict, "sandboxSafe", true); | |||||
| } | |||||
| else | |||||
| { | |||||
| dict->createNewChildElement ("key")->addTextElement ("resourceUsage"); | |||||
| auto* resourceUsageDict = dict->createNewChildElement ("dict"); | |||||
| addPlistDictionaryKey (*resourceUsageDict, "network.client", true); | |||||
| addPlistDictionaryKey (*resourceUsageDict, "temporary-exception.files.all.read-write", true); | |||||
| } | |||||
| return { plistKey, plistEntry }; | |||||
| } | |||||
| Array<XmlElement> PlistOptions::createExtraAudioUnitV3TargetPlistOptions() const | |||||
| { | |||||
| XmlElement plistKey ("key"); | |||||
| plistKey.addTextElement ("NSExtension"); | |||||
| XmlElement plistEntry ("dict"); | |||||
| addPlistDictionaryKey (plistEntry, "NSExtensionPrincipalClass", pluginAUExportPrefix + "FactoryAUv3"); | |||||
| addPlistDictionaryKey (plistEntry, "NSExtensionPointIdentifier", "com.apple.AudioUnit-UI"); | |||||
| plistEntry.createNewChildElement ("key")->addTextElement ("NSExtensionAttributes"); | |||||
| auto* dict = plistEntry.createNewChildElement ("dict"); | |||||
| dict->createNewChildElement ("key")->addTextElement ("AudioComponents"); | |||||
| auto* componentArray = dict->createNewChildElement ("array"); | |||||
| auto* componentDict = componentArray->createNewChildElement ("dict"); | |||||
| addPlistDictionaryKey (*componentDict, "name", pluginManufacturer + ": " + pluginName); | |||||
| addPlistDictionaryKey (*componentDict, "description", pluginDescription); | |||||
| addPlistDictionaryKey (*componentDict, "factoryFunction", pluginAUExportPrefix + "FactoryAUv3"); | |||||
| addPlistDictionaryKey (*componentDict, "manufacturer", pluginManufacturerCode.substring (0, 4)); | |||||
| addPlistDictionaryKey (*componentDict, "type", auMainType.removeCharacters ("'")); | |||||
| addPlistDictionaryKey (*componentDict, "subtype", pluginCode.substring (0, 4)); | |||||
| addPlistDictionaryKey (*componentDict, "version", versionAsHex); | |||||
| addPlistDictionaryKey (*componentDict, "sandboxSafe", true); | |||||
| componentDict->createNewChildElement ("key")->addTextElement ("tags"); | |||||
| auto* tagsArray = componentDict->createNewChildElement ("array"); | |||||
| tagsArray->createNewChildElement ("string") | |||||
| ->addTextElement (isPluginSynth ? "Synth" : "Effects"); | |||||
| return { plistKey, plistEntry }; | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,95 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE 6 technical preview. | |||||
| Copyright (c) 2017 - ROLI Ltd. | |||||
| 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. | |||||
| ============================================================================== | |||||
| */ | |||||
| namespace juce | |||||
| { | |||||
| namespace build_tools | |||||
| { | |||||
| class PlistOptions final | |||||
| { | |||||
| public: | |||||
| void write (const File& infoPlistFile) const; | |||||
| //============================================================================== | |||||
| ProjectType::Target::Type type = ProjectType::Target::Type::GUIApp; | |||||
| String executableName; | |||||
| String bundleIdentifier; | |||||
| String plistToMerge; | |||||
| bool iOS = false; | |||||
| bool microphonePermissionEnabled = false; | |||||
| String microphonePermissionText; | |||||
| bool cameraPermissionEnabled = false; | |||||
| String cameraPermissionText; | |||||
| bool bluetoothPermissionEnabled = false; | |||||
| String bluetoothPermissionText; | |||||
| bool sendAppleEventsPermissionEnabled = false; | |||||
| String sendAppleEventsPermissionText; | |||||
| bool shouldAddStoryboardToProject = false; | |||||
| String storyboardName; | |||||
| File iconFile; | |||||
| String projectName; | |||||
| String version; | |||||
| String companyCopyright; | |||||
| StringPairArray allPreprocessorDefs; | |||||
| String documentExtensions; | |||||
| bool fileSharingEnabled = false; | |||||
| bool documentBrowserEnabled = false; | |||||
| bool statusBarHidden = false; | |||||
| bool backgroundAudioEnabled = false; | |||||
| bool backgroundBleEnabled = false; | |||||
| bool pushNotificationsEnabled = false; | |||||
| bool enableIAA = false; | |||||
| String IAAPluginName; | |||||
| String pluginManufacturerCode; | |||||
| String IAATypeCode; | |||||
| String pluginCode; | |||||
| int versionAsHex = 0; | |||||
| String iPhoneScreenOrientations; | |||||
| String iPadScreenOrientations; | |||||
| String pluginName; | |||||
| String pluginManufacturer; | |||||
| String pluginDescription; | |||||
| String pluginAUExportPrefix; | |||||
| String auMainType; | |||||
| bool isAuSandboxSafe = false; | |||||
| bool isPluginSynth = false; | |||||
| private: | |||||
| void write (MemoryOutputStream&) const; | |||||
| std::unique_ptr<XmlElement> createXML() const; | |||||
| void addIosScreenOrientations (XmlElement&) const; | |||||
| void addIosBackgroundModes (XmlElement&) const; | |||||
| Array<XmlElement> createExtraAudioUnitTargetPlistOptions() const; | |||||
| Array<XmlElement> createExtraAudioUnitV3TargetPlistOptions() const; | |||||
| }; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,268 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE 6 technical preview. | |||||
| Copyright (c) 2017 - ROLI Ltd. | |||||
| 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. | |||||
| ============================================================================== | |||||
| */ | |||||
| namespace juce | |||||
| { | |||||
| namespace build_tools | |||||
| { | |||||
| //============================================================================== | |||||
| class ProjectType | |||||
| { | |||||
| public: | |||||
| //============================================================================== | |||||
| virtual ~ProjectType() { getAllTypes().removeFirstMatchingValue (this); } | |||||
| const String& getType() const noexcept { return type; } | |||||
| const String& getDescription() const noexcept { return desc; } | |||||
| //============================================================================== | |||||
| static Array<ProjectType*> getAllTypes(); | |||||
| static const ProjectType* findType (const String& typeCode) | |||||
| { | |||||
| const auto& types = getAllTypes(); | |||||
| for (auto i = types.size(); --i >= 0;) | |||||
| if (types.getUnchecked(i)->getType() == typeCode) | |||||
| return types.getUnchecked(i); | |||||
| jassertfalse; | |||||
| return nullptr; | |||||
| } | |||||
| //============================================================================== | |||||
| virtual bool isStaticLibrary() const { return false; } | |||||
| virtual bool isDynamicLibrary() const { return false; } | |||||
| virtual bool isGUIApplication() const { return false; } | |||||
| virtual bool isCommandLineApp() const { return false; } | |||||
| virtual bool isAudioPlugin() const { return false; } | |||||
| //============================================================================== | |||||
| struct Target | |||||
| { | |||||
| enum Type | |||||
| { | |||||
| GUIApp = 0, | |||||
| ConsoleApp = 1, | |||||
| StaticLibrary = 2, | |||||
| DynamicLibrary = 3, | |||||
| VSTPlugIn = 10, | |||||
| VST3PlugIn = 11, | |||||
| AAXPlugIn = 12, | |||||
| RTASPlugIn = 13, | |||||
| AudioUnitPlugIn = 14, | |||||
| AudioUnitv3PlugIn = 15, | |||||
| StandalonePlugIn = 16, | |||||
| UnityPlugIn = 17, | |||||
| SharedCodeTarget = 20, // internal | |||||
| AggregateTarget = 21, | |||||
| unspecified = 30 | |||||
| }; | |||||
| enum TargetFileType | |||||
| { | |||||
| executable = 0, | |||||
| staticLibrary = 1, | |||||
| sharedLibraryOrDLL = 2, | |||||
| pluginBundle = 3, | |||||
| macOSAppex = 4, | |||||
| unknown = 5 | |||||
| }; | |||||
| //============================================================================== | |||||
| explicit Target (Type targetType) : type (targetType) {} | |||||
| const char* getName() const noexcept | |||||
| { | |||||
| switch (type) | |||||
| { | |||||
| case GUIApp: return "App"; | |||||
| case ConsoleApp: return "ConsoleApp"; | |||||
| case StaticLibrary: return "Static Library"; | |||||
| case DynamicLibrary: return "Dynamic Library"; | |||||
| case VSTPlugIn: return "VST"; | |||||
| case VST3PlugIn: return "VST3"; | |||||
| case AudioUnitPlugIn: return "AU"; | |||||
| case StandalonePlugIn: return "Standalone Plugin"; | |||||
| case AudioUnitv3PlugIn: return "AUv3 AppExtension"; | |||||
| case AAXPlugIn: return "AAX"; | |||||
| case RTASPlugIn: return "RTAS"; | |||||
| case UnityPlugIn: return "Unity Plugin"; | |||||
| case SharedCodeTarget: return "Shared Code"; | |||||
| case AggregateTarget: return "All"; | |||||
| case unspecified: | |||||
| default: break; | |||||
| } | |||||
| return "undefined"; | |||||
| } | |||||
| static Type typeFromName (const juce::String& name) | |||||
| { | |||||
| if (name == "App") return Type::GUIApp; | |||||
| if (name == "ConsoleApp") return Type::ConsoleApp; | |||||
| if (name == "Static Library") return Type::StaticLibrary; | |||||
| if (name == "Dynamic Library") return Type::DynamicLibrary; | |||||
| if (name == "VST") return Type::VSTPlugIn; | |||||
| if (name == "VST3") return Type::VST3PlugIn; | |||||
| if (name == "AU") return Type::AudioUnitPlugIn; | |||||
| if (name == "Standalone Plugin") return Type::StandalonePlugIn; | |||||
| if (name == "AUv3 AppExtension") return Type::AudioUnitv3PlugIn; | |||||
| if (name == "AAX") return Type::AAXPlugIn; | |||||
| if (name == "RTAS") return Type::RTASPlugIn; | |||||
| if (name == "Unity Plugin") return Type::UnityPlugIn; | |||||
| if (name == "Shared Code") return Type::SharedCodeTarget; | |||||
| if (name == "All") return Type::AggregateTarget; | |||||
| jassertfalse; | |||||
| return Type::ConsoleApp; | |||||
| } | |||||
| TargetFileType getTargetFileType() const noexcept | |||||
| { | |||||
| switch (type) | |||||
| { | |||||
| case GUIApp: return executable; | |||||
| case ConsoleApp: return executable; | |||||
| case StaticLibrary: return staticLibrary; | |||||
| case DynamicLibrary: return sharedLibraryOrDLL; | |||||
| case VSTPlugIn: return pluginBundle; | |||||
| case VST3PlugIn: return pluginBundle; | |||||
| case AudioUnitPlugIn: return pluginBundle; | |||||
| case StandalonePlugIn: return executable; | |||||
| case AudioUnitv3PlugIn: return macOSAppex; | |||||
| case AAXPlugIn: return pluginBundle; | |||||
| case RTASPlugIn: return pluginBundle; | |||||
| case UnityPlugIn: return pluginBundle; | |||||
| case SharedCodeTarget: return staticLibrary; | |||||
| case AggregateTarget: | |||||
| case unspecified: | |||||
| default: break; | |||||
| } | |||||
| return unknown; | |||||
| } | |||||
| const Type type; | |||||
| private: | |||||
| //============================================================================== | |||||
| Target& operator= (const Target&) = delete; | |||||
| }; | |||||
| virtual bool supportsTargetType (Target::Type /*targetType*/) const { return false; } | |||||
| protected: | |||||
| ProjectType (const String& t, const String& d) | |||||
| : type (t), desc (d) | |||||
| {} | |||||
| private: | |||||
| const String type, desc; | |||||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ProjectType) | |||||
| }; | |||||
| //============================================================================== | |||||
| struct ProjectType_GUIApp : public ProjectType | |||||
| { | |||||
| ProjectType_GUIApp() : ProjectType (getTypeName(), "GUI Application") {} | |||||
| static const char* getTypeName() noexcept { return "guiapp"; } | |||||
| bool isGUIApplication() const override { return true; } | |||||
| bool supportsTargetType (Target::Type targetType) const override { return (targetType == Target::GUIApp); } | |||||
| }; | |||||
| struct ProjectType_ConsoleApp : public ProjectType | |||||
| { | |||||
| ProjectType_ConsoleApp() : ProjectType (getTypeName(), "Console Application") {} | |||||
| static const char* getTypeName() noexcept { return "consoleapp"; } | |||||
| bool isCommandLineApp() const override { return true; } | |||||
| bool supportsTargetType (Target::Type targetType) const override { return (targetType == Target::ConsoleApp); } | |||||
| }; | |||||
| struct ProjectType_StaticLibrary : public ProjectType | |||||
| { | |||||
| ProjectType_StaticLibrary() : ProjectType (getTypeName(), "Static Library") {} | |||||
| static const char* getTypeName() noexcept { return "library"; } | |||||
| bool isStaticLibrary() const override { return true; } | |||||
| bool supportsTargetType (Target::Type targetType) const override { return (targetType == Target::StaticLibrary); } | |||||
| }; | |||||
| struct ProjectType_DLL : public ProjectType | |||||
| { | |||||
| ProjectType_DLL() : ProjectType (getTypeName(), "Dynamic Library") {} | |||||
| static const char* getTypeName() noexcept { return "dll"; } | |||||
| bool isDynamicLibrary() const override { return true; } | |||||
| bool supportsTargetType (Target::Type targetType) const override { return (targetType == Target::DynamicLibrary); } | |||||
| }; | |||||
| struct ProjectType_AudioPlugin : public ProjectType | |||||
| { | |||||
| ProjectType_AudioPlugin() : ProjectType (getTypeName(), "Audio Plug-in") {} | |||||
| static const char* getTypeName() noexcept { return "audioplug"; } | |||||
| bool isAudioPlugin() const override { return true; } | |||||
| bool supportsTargetType (Target::Type targetType) const override | |||||
| { | |||||
| switch (targetType) | |||||
| { | |||||
| case Target::VSTPlugIn: | |||||
| case Target::VST3PlugIn: | |||||
| case Target::AAXPlugIn: | |||||
| case Target::RTASPlugIn: | |||||
| case Target::AudioUnitPlugIn: | |||||
| case Target::AudioUnitv3PlugIn: | |||||
| case Target::StandalonePlugIn: | |||||
| case Target::UnityPlugIn: | |||||
| case Target::SharedCodeTarget: | |||||
| case Target::AggregateTarget: | |||||
| return true; | |||||
| case Target::GUIApp: | |||||
| case Target::ConsoleApp: | |||||
| case Target::StaticLibrary: | |||||
| case Target::DynamicLibrary: | |||||
| case Target::unspecified: | |||||
| default: | |||||
| break; | |||||
| } | |||||
| return false; | |||||
| } | |||||
| }; | |||||
| //============================================================================== | |||||
| inline Array<ProjectType*> ProjectType::getAllTypes() | |||||
| { | |||||
| static ProjectType_GUIApp guiApp; | |||||
| static ProjectType_ConsoleApp consoleApp; | |||||
| static ProjectType_StaticLibrary staticLib; | |||||
| static ProjectType_DLL dll; | |||||
| static ProjectType_AudioPlugin plugin; | |||||
| return Array<ProjectType*>(&guiApp, &consoleApp, &staticLib, &dll, &plugin); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,122 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE 6 technical preview. | |||||
| Copyright (c) 2017 - ROLI Ltd. | |||||
| 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. | |||||
| ============================================================================== | |||||
| */ | |||||
| namespace juce | |||||
| { | |||||
| namespace build_tools | |||||
| { | |||||
| //============================================================================== | |||||
| /** Manipulates a cross-platform partial file path. (Needed because File is designed | |||||
| for absolute paths on the active OS) | |||||
| */ | |||||
| class RelativePath | |||||
| { | |||||
| public: | |||||
| //============================================================================== | |||||
| enum RootFolder | |||||
| { | |||||
| unknown, | |||||
| projectFolder, | |||||
| buildTargetFolder | |||||
| }; | |||||
| //============================================================================== | |||||
| RelativePath() | |||||
| : root (unknown) | |||||
| {} | |||||
| RelativePath (const String& relPath, const RootFolder rootType) | |||||
| : path (unixStylePath (relPath)), root (rootType) | |||||
| {} | |||||
| RelativePath (const File& file, const File& rootFolder, const RootFolder rootType) | |||||
| : path (unixStylePath (getRelativePathFrom (file, rootFolder))), root (rootType) | |||||
| {} | |||||
| RootFolder getRoot() const { return root; } | |||||
| String toUnixStyle() const { return unixStylePath (path); } | |||||
| String toWindowsStyle() const { return windowsStylePath (path); } | |||||
| String getFileName() const { return getFakeFile().getFileName(); } | |||||
| String getFileNameWithoutExtension() const { return getFakeFile().getFileNameWithoutExtension(); } | |||||
| String getFileExtension() const { return getFakeFile().getFileExtension(); } | |||||
| bool hasFileExtension (juce::StringRef extension) const { return getFakeFile().hasFileExtension (extension); } | |||||
| bool isAbsolute() const { return isAbsolutePath (path); } | |||||
| RelativePath withFileExtension (const String& extension) const | |||||
| { | |||||
| return RelativePath (path.upToLastOccurrenceOf (".", ! extension.startsWithChar ('.'), false) + extension, root); | |||||
| } | |||||
| RelativePath getParentDirectory() const | |||||
| { | |||||
| String p (path); | |||||
| if (path.endsWithChar ('/')) | |||||
| p = p.dropLastCharacters (1); | |||||
| return RelativePath (p.upToLastOccurrenceOf ("/", false, false), root); | |||||
| } | |||||
| RelativePath getChildFile (const String& subpath) const | |||||
| { | |||||
| if (isAbsolutePath (subpath)) | |||||
| return RelativePath (subpath, root); | |||||
| String p (toUnixStyle()); | |||||
| if (! p.endsWithChar ('/')) | |||||
| p << '/'; | |||||
| return RelativePath (p + subpath, root); | |||||
| } | |||||
| RelativePath rebased (const File& originalRoot, const File& newRoot, const RootFolder newRootType) const | |||||
| { | |||||
| if (isAbsolute()) | |||||
| return RelativePath (path, newRootType); | |||||
| return RelativePath (getRelativePathFrom (originalRoot.getChildFile (toUnixStyle()), newRoot), newRootType); | |||||
| } | |||||
| private: | |||||
| //============================================================================== | |||||
| String path; | |||||
| RootFolder root; | |||||
| File getFakeFile() const | |||||
| { | |||||
| #if JUCE_WINDOWS | |||||
| if (isAbsolutePath (path)) | |||||
| { | |||||
| // This is a hack to convert unix-style absolute paths into valid absolute Windows paths to avoid hitting | |||||
| // an assertion in File::parseAbsolutePath(). | |||||
| if (path.startsWithChar (L'/') || path.startsWithChar (L'$') || path.startsWithChar (L'~')) | |||||
| return File (String ("C:\\") + windowsStylePath (path.substring (1))); | |||||
| return File (path); | |||||
| } | |||||
| #endif | |||||
| // This method gets called very often, so we'll cache this directory. | |||||
| static const File currentWorkingDirectory (File::getCurrentWorkingDirectory()); | |||||
| return currentWorkingDirectory.getChildFile (path); | |||||
| } | |||||
| }; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,84 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE 6 technical preview. | |||||
| Copyright (c) 2017 - ROLI Ltd. | |||||
| 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. | |||||
| ============================================================================== | |||||
| */ | |||||
| namespace juce | |||||
| { | |||||
| namespace build_tools | |||||
| { | |||||
| uint64 calculateStreamHashCode (InputStream& in) | |||||
| { | |||||
| uint64 t = 0; | |||||
| const int bufferSize = 4096; | |||||
| HeapBlock<uint8> buffer; | |||||
| buffer.malloc (bufferSize); | |||||
| for (;;) | |||||
| { | |||||
| auto num = in.read (buffer, bufferSize); | |||||
| if (num <= 0) | |||||
| break; | |||||
| for (int i = 0; i < num; ++i) | |||||
| t = t * 65599 + buffer[i]; | |||||
| } | |||||
| return t; | |||||
| } | |||||
| uint64 calculateFileHashCode (const File& file) | |||||
| { | |||||
| std::unique_ptr<FileInputStream> stream (file.createInputStream()); | |||||
| return stream != nullptr ? calculateStreamHashCode (*stream) : 0; | |||||
| } | |||||
| uint64 calculateMemoryHashCode (const void* data, size_t numBytes) | |||||
| { | |||||
| uint64 t = 0; | |||||
| for (size_t i = 0; i < numBytes; ++i) | |||||
| t = t * 65599 + static_cast<const uint8*> (data)[i]; | |||||
| return t; | |||||
| } | |||||
| bool overwriteFileWithNewDataIfDifferent (const File& file, const void* data, size_t numBytes) | |||||
| { | |||||
| if (file.getSize() == (int64) numBytes | |||||
| && calculateMemoryHashCode (data, numBytes) == calculateFileHashCode (file)) | |||||
| return true; | |||||
| if (file.exists()) | |||||
| return file.replaceWithData (data, numBytes); | |||||
| return file.getParentDirectory().createDirectory() && file.appendData (data, numBytes); | |||||
| } | |||||
| bool overwriteFileWithNewDataIfDifferent (const File& file, const MemoryOutputStream& newData) | |||||
| { | |||||
| return overwriteFileWithNewDataIfDifferent (file, newData.getData(), newData.getDataSize()); | |||||
| } | |||||
| bool overwriteFileWithNewDataIfDifferent (const File& file, const String& newData) | |||||
| { | |||||
| const char* const utf8 = newData.toUTF8(); | |||||
| return overwriteFileWithNewDataIfDifferent (file, utf8, strlen (utf8)); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,31 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE 6 technical preview. | |||||
| Copyright (c) 2017 - ROLI Ltd. | |||||
| 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. | |||||
| ============================================================================== | |||||
| */ | |||||
| namespace juce | |||||
| { | |||||
| namespace build_tools | |||||
| { | |||||
| uint64 calculateStreamHashCode (InputStream& in); | |||||
| uint64 calculateFileHashCode (const File& file); | |||||
| uint64 calculateMemoryHashCode (const void* data, size_t numBytes); | |||||
| bool overwriteFileWithNewDataIfDifferent (const File& file, const void* data, size_t numBytes); | |||||
| bool overwriteFileWithNewDataIfDifferent (const File& file, const MemoryOutputStream& newData); | |||||
| bool overwriteFileWithNewDataIfDifferent (const File& file, const String& newData); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,88 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE 6 technical preview. | |||||
| Copyright (c) 2017 - ROLI Ltd. | |||||
| 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. | |||||
| ============================================================================== | |||||
| */ | |||||
| namespace juce | |||||
| { | |||||
| namespace build_tools | |||||
| { | |||||
| static void writeRCValue (MemoryOutputStream& mo, const String& n, const String& value) | |||||
| { | |||||
| if (value.isNotEmpty()) | |||||
| mo << " VALUE \"" << n << "\", \"" | |||||
| << addEscapeChars (value) << "\\0\"" << newLine; | |||||
| } | |||||
| static String getCommaSeparatedVersionNumber (const String& version) | |||||
| { | |||||
| auto versionParts = StringArray::fromTokens (version, ",.", ""); | |||||
| versionParts.trim(); | |||||
| versionParts.removeEmptyStrings(); | |||||
| while (versionParts.size() < 4) | |||||
| versionParts.add ("0"); | |||||
| return versionParts.joinIntoString (","); | |||||
| } | |||||
| void ResourceRcOptions::write (const File& resourceRcFile) const | |||||
| { | |||||
| MemoryOutputStream mo; | |||||
| mo << "#ifdef JUCE_USER_DEFINED_RC_FILE" << newLine | |||||
| << " #include JUCE_USER_DEFINED_RC_FILE" << newLine | |||||
| << "#else" << newLine | |||||
| << newLine | |||||
| << "#undef WIN32_LEAN_AND_MEAN" << newLine | |||||
| << "#define WIN32_LEAN_AND_MEAN" << newLine | |||||
| << "#include <windows.h>" << newLine | |||||
| << newLine | |||||
| << "VS_VERSION_INFO VERSIONINFO" << newLine | |||||
| << "FILEVERSION " << getCommaSeparatedVersionNumber (version) << newLine | |||||
| << "BEGIN" << newLine | |||||
| << " BLOCK \"StringFileInfo\"" << newLine | |||||
| << " BEGIN" << newLine | |||||
| << " BLOCK \"040904E4\"" << newLine | |||||
| << " BEGIN" << newLine; | |||||
| writeRCValue (mo, "CompanyName", companyName); | |||||
| writeRCValue (mo, "LegalCopyright", companyCopyright); | |||||
| writeRCValue (mo, "FileDescription", projectName); | |||||
| writeRCValue (mo, "FileVersion", version); | |||||
| writeRCValue (mo, "ProductName", projectName); | |||||
| writeRCValue (mo, "ProductVersion", version); | |||||
| mo << " END" << newLine | |||||
| << " END" << newLine | |||||
| << newLine | |||||
| << " BLOCK \"VarFileInfo\"" << newLine | |||||
| << " BEGIN" << newLine | |||||
| << " VALUE \"Translation\", 0x409, 1252" << newLine | |||||
| << " END" << newLine | |||||
| << "END" << newLine | |||||
| << newLine | |||||
| << "#endif" << newLine; | |||||
| if (icon.existsAsFile()) | |||||
| mo << newLine | |||||
| << "IDI_ICON1 ICON DISCARDABLE " << icon.getFileName().quoted() | |||||
| << newLine | |||||
| << "IDI_ICON2 ICON DISCARDABLE " << icon.getFileName().quoted(); | |||||
| overwriteFileIfDifferentOrThrow (resourceRcFile, mo); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,36 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE 6 technical preview. | |||||
| Copyright (c) 2017 - ROLI Ltd. | |||||
| 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. | |||||
| ============================================================================== | |||||
| */ | |||||
| namespace juce | |||||
| { | |||||
| namespace build_tools | |||||
| { | |||||
| class ResourceRcOptions final | |||||
| { | |||||
| public: | |||||
| void write (const File& resourceRcFile) const; | |||||
| //============================================================================== | |||||
| String version; | |||||
| String companyName; | |||||
| String companyCopyright; | |||||
| String projectName; | |||||
| File icon; | |||||
| }; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,50 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE 6 technical preview. | |||||
| Copyright (c) 2017 - ROLI Ltd. | |||||
| 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. | |||||
| ============================================================================== | |||||
| */ | |||||
| namespace juce | |||||
| { | |||||
| namespace build_tools | |||||
| { | |||||
| StringArray getVersionSegments (juce::StringRef p) | |||||
| { | |||||
| auto segments = StringArray::fromTokens (p, ",.", ""); | |||||
| segments.trim(); | |||||
| segments.removeEmptyStrings(); | |||||
| return segments; | |||||
| } | |||||
| int getVersionAsHexInteger (juce::StringRef versionString) | |||||
| { | |||||
| auto segments = getVersionSegments (versionString); | |||||
| auto value = (segments[0].getIntValue() << 16) | |||||
| + (segments[1].getIntValue() << 8) | |||||
| + segments[2].getIntValue(); | |||||
| if (segments.size() > 3) | |||||
| value = (value << 8) + segments[3].getIntValue(); | |||||
| return value; | |||||
| } | |||||
| String getVersionAsHex (juce::StringRef versionString) | |||||
| { | |||||
| return "0x" + String::toHexString (getVersionAsHexInteger (versionString)); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,29 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE 6 technical preview. | |||||
| Copyright (c) 2017 - ROLI Ltd. | |||||
| 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. | |||||
| ============================================================================== | |||||
| */ | |||||
| namespace juce | |||||
| { | |||||
| namespace build_tools | |||||
| { | |||||
| StringArray getVersionSegments (juce::StringRef p); | |||||
| int getVersionAsHexInteger (juce::StringRef versionString); | |||||
| String getVersionAsHex (juce::StringRef versionString); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,90 @@ | |||||
| # ============================================================================== | |||||
| # | |||||
| # This file is part of the JUCE 6 technical preview. | |||||
| # Copyright (c) 2020 - ROLI Ltd. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # ============================================================================== | |||||
| # The juceaide program generates intermediate build files including BinaryData sources, icons, and | |||||
| # plists. To ensure that we always build it for the host system, and not for, say, a device or | |||||
| # simulator if we're targeting iOS or Android, we reinvoke cmake here and build juceaide during the | |||||
| # configuration stage of the outer project. | |||||
| if(JUCE_BUILD_HELPER_TOOLS) | |||||
| # Build the tool for the current system | |||||
| juce_add_console_app(juceaide) | |||||
| target_sources(juceaide PRIVATE Main.cpp) | |||||
| target_compile_definitions(juceaide PRIVATE | |||||
| JUCE_DISABLE_JUCE_VERSION_PRINTING=1 | |||||
| JUCE_USE_CURL=0) | |||||
| target_link_libraries(juceaide PRIVATE juce::juce_build_tools) | |||||
| export(TARGETS juceaide | |||||
| NAMESPACE juce_tools:: | |||||
| FILE "${JUCE_BINARY_DIR}/JUCEToolsExport.cmake") | |||||
| else() | |||||
| # If we're building using the NDK, the gradle wrapper will try to inject its own compiler using | |||||
| # environment variables, which is unfortunate because we really don't want to cross-compile | |||||
| # juceaide. If you really want to set the compilers for juceaide, pass the appropriate | |||||
| # CMAKE_<lang>_COMPILER flags when configuring CMake. | |||||
| unset(ENV{ASM}) | |||||
| unset(ENV{CC}) | |||||
| unset(ENV{CXX}) | |||||
| # Looks like we're boostrapping, reinvoke CMake | |||||
| execute_process(COMMAND "${CMAKE_COMMAND}" | |||||
| "-B${JUCE_BINARY_DIR}/tools" | |||||
| "-G${CMAKE_GENERATOR}" | |||||
| "-DCMAKE_BUILD_TYPE=Debug" | |||||
| "-DJUCE_BUILD_HELPER_TOOLS=ON" | |||||
| "-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}" | |||||
| WORKING_DIRECTORY "${JUCE_SOURCE_DIR}" | |||||
| OUTPUT_VARIABLE command_output | |||||
| ERROR_VARIABLE command_output | |||||
| RESULT_VARIABLE result_variable) | |||||
| if(result_variable) | |||||
| message(FATAL_ERROR "Failed to configure tools\n${command_output}") | |||||
| endif() | |||||
| execute_process(COMMAND "${CMAKE_COMMAND}" | |||||
| --build "${JUCE_BINARY_DIR}/tools" | |||||
| --config Debug | |||||
| OUTPUT_VARIABLE command_output | |||||
| ERROR_VARIABLE command_output | |||||
| RESULT_VARIABLE result_variable) | |||||
| if(result_variable) | |||||
| message(FATAL_ERROR "Failed to build tools\n${command_output}") | |||||
| endif() | |||||
| # This will be generated by the recursive invocation of CMake (above) | |||||
| include("${JUCE_BINARY_DIR}/tools/JUCEToolsExport.cmake") | |||||
| add_executable(juceaide IMPORTED GLOBAL) | |||||
| get_target_property(imported_location juce_tools::juceaide IMPORTED_LOCATION_DEBUG) | |||||
| set_target_properties(juceaide PROPERTIES IMPORTED_LOCATION "${imported_location}") | |||||
| add_executable(juce::juceaide ALIAS juceaide) | |||||
| set(JUCE_TOOL_INSTALL_DIR "bin" CACHE STRING | |||||
| "The location, relative to the install prefix, where juceaide will be installed") | |||||
| install(PROGRAMS "${imported_location}" DESTINATION "${JUCE_TOOL_INSTALL_DIR}") | |||||
| get_filename_component(binary_name "${imported_location}" NAME) | |||||
| set(JUCE_CMAKE_BINARY_BUILDER_NAME "${JUCE_TOOL_INSTALL_DIR}/${binary_name}" | |||||
| CACHE INTERNAL "The name of the juceaide program") | |||||
| endif() | |||||
| @@ -0,0 +1,507 @@ | |||||
| /* | |||||
| ============================================================================== | |||||
| This file is part of the JUCE 6 technical preview. | |||||
| Copyright (c) 2020 - ROLI Ltd. | |||||
| 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. | |||||
| ============================================================================== | |||||
| */ | |||||
| #include <juce_build_tools/juce_build_tools.h> | |||||
| #include <fstream> | |||||
| #include <unordered_map> | |||||
| namespace | |||||
| { | |||||
| constexpr auto headerTemplate = R"(/* | |||||
| IMPORTANT! This file is auto-generated. | |||||
| If you alter its contents, your changes may be overwritten! | |||||
| This is the header file that your files should include in order to get all the | |||||
| JUCE library headers. You should avoid including the JUCE headers directly in | |||||
| your own source files, because that wouldn't pick up the correct configuration | |||||
| options for your app. | |||||
| */ | |||||
| #pragma once | |||||
| ${JUCE_INCLUDES} | |||||
| #if JUCE_TARGET_HAS_BINARY_DATA | |||||
| #include "BinaryData.h" | |||||
| #endif | |||||
| #if ! DONT_SET_USING_JUCE_NAMESPACE | |||||
| // If your code uses a lot of JUCE classes, then this will obviously save you | |||||
| // a lot of typing, but can be disabled by setting DONT_SET_USING_JUCE_NAMESPACE. | |||||
| using namespace juce; | |||||
| #endif | |||||
| #if ! JUCE_DONT_DECLARE_PROJECTINFO | |||||
| namespace ProjectInfo | |||||
| { | |||||
| const char* const projectName = "${JUCE_EXECUTABLE_NAME}"; | |||||
| const char* const companyName = "${JUCE_COMPANY_NAME}"; | |||||
| const char* const versionString = "${JUCE_PROJECT_VERSION}"; | |||||
| const int versionNumber = ${JUCE_PROJECT_VERSION_HEX}; | |||||
| } | |||||
| #endif | |||||
| )"; | |||||
| juce::String getValueOr (juce::ArgumentList& args, juce::String option, juce::String fallback) | |||||
| { | |||||
| const auto opt = args.removeValueForOption (option); | |||||
| return opt.isNotEmpty() ? opt : fallback; | |||||
| } | |||||
| int writeBinaryData (juce::ArgumentList&& argumentList) | |||||
| { | |||||
| juce::build_tools::ResourceFile resourceFile; | |||||
| resourceFile.setClassName (getValueOr (argumentList, "--namespace", "BinaryData")); | |||||
| const auto lineEndings = argumentList.removeOptionIfFound ("--windows") ? "\r\n" : "\n"; | |||||
| if (argumentList.arguments.isEmpty()) | |||||
| juce::ConsoleApplication::fail ("No destination folder specified for binary data files", 1); | |||||
| const auto outFolder = argumentList.arguments.removeAndReturn (0).resolveAsExistingFolder(); | |||||
| for (const auto& arg : argumentList.arguments) | |||||
| resourceFile.addFile (arg.resolveAsExistingFile()); | |||||
| const auto result = resourceFile.write (0, | |||||
| lineEndings, | |||||
| outFolder.getChildFile ("./BinaryData.h"), | |||||
| [&outFolder] (int index) | |||||
| { | |||||
| return outFolder.getChildFile ("./BinaryData" + juce::String { index + 1 } + ".cpp"); | |||||
| }); | |||||
| if (result.result.failed()) | |||||
| juce::ConsoleApplication::fail (result.result.getErrorMessage(), 1); | |||||
| return 0; | |||||
| } | |||||
| struct IconParseResults final | |||||
| { | |||||
| juce::build_tools::Icons icons; | |||||
| juce::File output; | |||||
| }; | |||||
| IconParseResults parseIconArguments (juce::ArgumentList&& args) | |||||
| { | |||||
| args.checkMinNumArguments (2); | |||||
| const auto output = args.arguments.removeAndReturn (0); | |||||
| const auto popDrawable = [&args]() -> std::unique_ptr<juce::Drawable> | |||||
| { | |||||
| if (args.size() == 0) | |||||
| return {}; | |||||
| const auto firstArgText = args.arguments.removeAndReturn (0).text; | |||||
| return juce::Drawable::createFromImageFile (firstArgText); | |||||
| }; | |||||
| auto smallIcon = popDrawable(); | |||||
| auto bigIcon = popDrawable(); | |||||
| return { { std::move (smallIcon), std::move (bigIcon) }, output.text }; | |||||
| } | |||||
| int writeMacIcon (juce::ArgumentList&& argumentList) | |||||
| { | |||||
| const auto parsed = parseIconArguments (std::move (argumentList)); | |||||
| juce::build_tools::writeMacIcon (parsed.icons, parsed.output); | |||||
| return 0; | |||||
| } | |||||
| int writeiOSAssets (juce::ArgumentList&& argumentList) | |||||
| { | |||||
| const auto parsed = parseIconArguments (std::move (argumentList)); | |||||
| juce::build_tools::createXcassetsFolderFromIcons (parsed.icons, | |||||
| parsed.output.getParentDirectory(), | |||||
| parsed.output.getFileName()); | |||||
| return 0; | |||||
| } | |||||
| int writeWinIcon (juce::ArgumentList&& argumentList) | |||||
| { | |||||
| const auto parsed = parseIconArguments (std::move (argumentList)); | |||||
| juce::build_tools::writeWinIcon (parsed.icons, parsed.output); | |||||
| return 0; | |||||
| } | |||||
| std::unordered_map<juce::String, juce::String> parseProjectData (const juce::File& file) | |||||
| { | |||||
| constexpr auto recordSeparator = "\x1e"; | |||||
| const auto contents = file.loadFileAsString(); | |||||
| const auto lines = juce::StringArray::fromTokens (contents, recordSeparator, {}); | |||||
| std::unordered_map<juce::String, juce::String> result; | |||||
| constexpr auto unitSeparator = "\x1f"; | |||||
| for (const auto& line : lines) | |||||
| { | |||||
| if (line.isEmpty()) | |||||
| continue; | |||||
| result.emplace (line.upToFirstOccurrenceOf (unitSeparator, false, false), | |||||
| line.fromFirstOccurrenceOf (unitSeparator, false, false)); | |||||
| } | |||||
| return result; | |||||
| } | |||||
| juce::String getStringValue (const std::unordered_map<juce::String, juce::String>& dict, | |||||
| juce::StringRef key) | |||||
| { | |||||
| const auto it = dict.find (key); | |||||
| return it != dict.cend() ? it->second : juce::String{}; | |||||
| } | |||||
| bool getBoolValue (const std::unordered_map<juce::String, juce::String>& dict, juce::StringRef key) | |||||
| { | |||||
| const auto str = getStringValue (dict, key); | |||||
| return str.equalsIgnoreCase ("yes") | |||||
| || str.equalsIgnoreCase ("true") | |||||
| || str.equalsIgnoreCase ("1") | |||||
| || str.equalsIgnoreCase ("on"); | |||||
| } | |||||
| struct UpdateField final | |||||
| { | |||||
| const std::unordered_map<juce::String, juce::String>& dict; | |||||
| void operator() (juce::StringRef key, juce::String& value) const | |||||
| { | |||||
| value = getStringValue (dict, key); | |||||
| } | |||||
| void operator() (juce::StringRef key, juce::File& value) const | |||||
| { | |||||
| value = getStringValue (dict, key); | |||||
| } | |||||
| void operator() (juce::StringRef key, bool& value) const | |||||
| { | |||||
| value = getBoolValue (dict, key); | |||||
| } | |||||
| void operator() (juce::StringRef key, juce::StringArray& value) const | |||||
| { | |||||
| value = juce::StringArray::fromTokens (getStringValue (dict, key), ";", {}); | |||||
| } | |||||
| }; | |||||
| void setIfEmpty (juce::String& field, juce::StringRef fallback) | |||||
| { | |||||
| if (field.isEmpty()) | |||||
| field = fallback; | |||||
| } | |||||
| juce::build_tools::PlistOptions parsePlistOptions (const juce::File& file, | |||||
| juce::build_tools::ProjectType::Target::Type type) | |||||
| { | |||||
| if (type == juce::build_tools::ProjectType::Target::ConsoleApp) | |||||
| juce::ConsoleApplication::fail ("Deduced project type does not require a plist", 1); | |||||
| const auto dict = parseProjectData (file); | |||||
| UpdateField updateField { dict }; | |||||
| juce::build_tools::PlistOptions result; | |||||
| updateField ("EXECUTABLE_NAME", result.executableName); | |||||
| updateField ("PLIST_TO_MERGE", result.plistToMerge); | |||||
| updateField ("IS_IOS", result.iOS); | |||||
| updateField ("MICROPHONE_PERMISSION_ENABLED", result.microphonePermissionEnabled); | |||||
| updateField ("MICROPHONE_PERMISSION_TEXT", result.microphonePermissionText); | |||||
| updateField ("CAMERA_PERMISSION_ENABLED", result.cameraPermissionEnabled); | |||||
| updateField ("CAMERA_PERMISSION_TEXT", result.cameraPermissionText); | |||||
| updateField ("BLUETOOTH_PERMISSION_ENABLED", result.bluetoothPermissionEnabled); | |||||
| updateField ("BLUETOOTH_PERMISSION_TEXT", result.bluetoothPermissionText); | |||||
| updateField ("SEND_APPLE_EVENTS_PERMISSION_ENABLED", result.sendAppleEventsPermissionEnabled); | |||||
| updateField ("SEND_APPLE_EVENTS_PERMISSION_TEXT", result.sendAppleEventsPermissionText); | |||||
| updateField ("SHOULD_ADD_STORYBOARD", result.shouldAddStoryboardToProject); | |||||
| updateField ("LAUNCH_STORYBOARD_FILE", result.storyboardName); | |||||
| updateField ("PROJECT_NAME", result.projectName); | |||||
| updateField ("VERSION", result.version); | |||||
| updateField ("COMPANY_COPYRIGHT", result.companyCopyright); | |||||
| updateField ("DOCUMENT_EXTENSIONS", result.documentExtensions); | |||||
| updateField ("FILE_SHARING_ENABLED", result.fileSharingEnabled); | |||||
| updateField ("DOCUMENT_BROWSER_ENABLED", result.documentBrowserEnabled); | |||||
| updateField ("STATUS_BAR_HIDDEN", result.statusBarHidden); | |||||
| updateField ("BACKGROUND_AUDIO_ENABLED", result.backgroundAudioEnabled); | |||||
| updateField ("BACKGROUND_BLE_ENABLED", result.backgroundBleEnabled); | |||||
| updateField ("PUSH_NOTIFICATIONS_ENABLED", result.pushNotificationsEnabled); | |||||
| updateField ("PLUGIN_MANUFACTURER_CODE", result.pluginManufacturerCode); | |||||
| updateField ("PLUGIN_CODE", result.pluginCode); | |||||
| updateField ("IPHONE_SCREEN_ORIENTATIONS", result.iPhoneScreenOrientations); | |||||
| updateField ("IPAD_SCREEN_ORIENTATIONS", result.iPadScreenOrientations); | |||||
| updateField ("PLUGIN_NAME", result.pluginName); | |||||
| updateField ("PLUGIN_MANUFACTURER", result.pluginManufacturer); | |||||
| updateField ("PLUGIN_DESCRIPTION", result.pluginDescription); | |||||
| updateField ("PLUGIN_AU_EXPORT_PREFIX", result.pluginAUExportPrefix); | |||||
| updateField ("PLUGIN_AU_MAIN_TYPE", result.auMainType); | |||||
| updateField ("IS_AU_SANDBOX_SAFE", result.isAuSandboxSafe); | |||||
| updateField ("IS_PLUGIN_SYNTH", result.isPluginSynth); | |||||
| updateField ("BUNDLE_ID", result.bundleIdentifier); | |||||
| updateField ("ICON_FILE", result.iconFile); | |||||
| result.type = type; | |||||
| result.versionAsHex = juce::build_tools::getVersionAsHexInteger (result.version); | |||||
| if (result.storyboardName.isNotEmpty()) | |||||
| result.storyboardName = result.storyboardName.fromLastOccurrenceOf ("/", false, false) | |||||
| .upToLastOccurrenceOf (".storyboard", false, false); | |||||
| setIfEmpty (result.microphonePermissionText, | |||||
| "This app requires audio input. If you do not have an audio interface connected it will use the built-in microphone."); | |||||
| setIfEmpty (result.cameraPermissionText, | |||||
| "This app requires access to the camera to function correctly."); | |||||
| setIfEmpty (result.bluetoothPermissionText, | |||||
| "This app requires access to Bluetooth to function correctly."); | |||||
| setIfEmpty (result.sendAppleEventsPermissionText, | |||||
| "This app requires the ability to send Apple events to function correctly."); | |||||
| result.documentExtensions = result.documentExtensions.replace (";", ","); | |||||
| // AUv3 needs a slightly different bundle ID | |||||
| if (type == juce::build_tools::ProjectType::Target::Type::AudioUnitv3PlugIn) | |||||
| { | |||||
| const auto bundleIdSegments = juce::StringArray::fromTokens (result.bundleIdentifier, ".", {}); | |||||
| jassert (! bundleIdSegments.isEmpty()); | |||||
| const auto last = bundleIdSegments.isEmpty() ? "" | |||||
| : bundleIdSegments[bundleIdSegments.size() - 1]; | |||||
| result.bundleIdentifier += "." + last + "AUv3"; | |||||
| } | |||||
| return result; | |||||
| } | |||||
| int writePlist (juce::ArgumentList&& args) | |||||
| { | |||||
| args.checkMinNumArguments (3); | |||||
| const auto kind = args.arguments.removeAndReturn (0); | |||||
| const auto input = args.arguments.removeAndReturn (0); | |||||
| const auto output = args.arguments.removeAndReturn (0); | |||||
| parsePlistOptions (input.resolveAsExistingFile(), | |||||
| juce::build_tools::ProjectType::Target::typeFromName (kind.text)) | |||||
| .write (output.resolveAsFile()); | |||||
| return 0; | |||||
| } | |||||
| juce::build_tools::EntitlementOptions parseEntitlementsOptions (const juce::File& file, | |||||
| juce::build_tools::ProjectType::Target::Type type) | |||||
| { | |||||
| if (type == juce::build_tools::ProjectType::Target::ConsoleApp) | |||||
| juce::ConsoleApplication::fail ("Deduced project type does not require entitlements", 1); | |||||
| const auto dict = parseProjectData (file); | |||||
| UpdateField updateField { dict }; | |||||
| juce::build_tools::EntitlementOptions result; | |||||
| updateField ("IS_IOS", result.isiOS); | |||||
| updateField ("IS_PLUGIN", result.isAudioPluginProject); | |||||
| updateField ("ICLOUD_PERMISSIONS_ENABLED", result.isiCloudPermissionsEnabled); | |||||
| updateField ("PUSH_NOTIFICATIONS_ENABLED", result.isPushNotificationsEnabled); | |||||
| updateField ("APP_GROUPS_ENABLED", result.isAppGroupsEnabled); | |||||
| updateField ("APP_GROUP_IDS", result.appGroupIdString); | |||||
| updateField ("HARDENED_RUNTIME_ENABLED", result.isHardenedRuntimeEnabled); | |||||
| updateField ("HARDENED_RUNTIME_OPTIONS", result.hardenedRuntimeOptions); | |||||
| updateField ("APP_SANDBOX_ENABLED", result.isAppSandboxEnabled); | |||||
| updateField ("APP_SANDBOX_INHERIT", result.isAppSandboxInhertianceEnabled); | |||||
| updateField ("APP_SANDBOX_OPTIONS", result.appSandboxOptions); | |||||
| result.type = type; | |||||
| return result; | |||||
| } | |||||
| int writeEntitlements (juce::ArgumentList&& args) | |||||
| { | |||||
| args.checkMinNumArguments (3); | |||||
| const auto kind = args.arguments.removeAndReturn (0); | |||||
| const auto input = args.arguments.removeAndReturn (0); | |||||
| const auto output = args.arguments.removeAndReturn (0); | |||||
| const auto options = parseEntitlementsOptions (input.resolveAsExistingFile(), | |||||
| juce::build_tools::ProjectType::Target::typeFromName (kind.text)); | |||||
| juce::build_tools::overwriteFileIfDifferentOrThrow (output.resolveAsFile(), options.getEntitlementsFileContent()); | |||||
| return 0; | |||||
| } | |||||
| int createAndWrite (const juce::File& file, juce::StringRef text) | |||||
| { | |||||
| if (file.create()) | |||||
| return file.replaceWithText (text) ? 0 : 1; | |||||
| return 1; | |||||
| } | |||||
| int writePkgInfo (juce::ArgumentList&& args) | |||||
| { | |||||
| args.checkMinNumArguments (2); | |||||
| const auto kind = args.arguments.removeAndReturn (0); | |||||
| const auto output = args.arguments.removeAndReturn (0); | |||||
| const auto projectType = juce::build_tools::ProjectType::Target::typeFromName (kind.text); | |||||
| return createAndWrite (output.resolveAsFile(), | |||||
| juce::build_tools::getXcodePackageType (projectType) | |||||
| + juce::build_tools::getXcodeBundleSignature (projectType)); | |||||
| } | |||||
| juce::build_tools::ResourceRcOptions parseRcFileOptions (const juce::File& file) | |||||
| { | |||||
| const auto dict = parseProjectData (file); | |||||
| UpdateField updateField { dict }; | |||||
| juce::build_tools::ResourceRcOptions result; | |||||
| updateField ("VERSION", result.version); | |||||
| updateField ("COMPANY_NAME", result.companyName); | |||||
| updateField ("COMPANY_COPYRIGHT", result.companyCopyright); | |||||
| updateField ("PROJECT_NAME", result.projectName); | |||||
| updateField ("ICON_FILE", result.icon); | |||||
| return result; | |||||
| } | |||||
| int writeRcFile (juce::ArgumentList&& args) | |||||
| { | |||||
| args.checkMinNumArguments (2); | |||||
| const auto input = args.arguments.removeAndReturn (0); | |||||
| const auto output = args.arguments.removeAndReturn (0); | |||||
| parseRcFileOptions (input.resolveAsExistingFile()).write (output.resolveAsFile()); | |||||
| return 0; | |||||
| } | |||||
| juce::String createDefineStatements (juce::StringRef definitions) | |||||
| { | |||||
| const auto split = juce::StringArray::fromTokens (definitions, ";", "\""); | |||||
| juce::String defineStatements; | |||||
| for (const auto& def : split) | |||||
| { | |||||
| const auto defineName = def.upToFirstOccurrenceOf ("=", false, false); | |||||
| const auto defineValue = def.fromFirstOccurrenceOf ("=", false, false); | |||||
| defineStatements += "#define " + defineName + " " + defineValue + '\n'; | |||||
| } | |||||
| return defineStatements; | |||||
| } | |||||
| int writeAuAppConfig (juce::ArgumentList&& args) | |||||
| { | |||||
| args.checkMinNumArguments (2); | |||||
| const auto input = args.arguments.removeAndReturn (0); | |||||
| const auto output = args.arguments.removeAndReturn (0); | |||||
| const auto dict = parseProjectData (input.resolveAsExistingFile()); | |||||
| const auto getString = [&] (juce::StringRef key) { return getStringValue (dict, key); }; | |||||
| const auto defines = "#pragma once\n" + createDefineStatements (getString ("MODULE_DEFINITIONS")); | |||||
| return createAndWrite (output.resolveAsFile(), defines); | |||||
| } | |||||
| juce::String createIncludeStatements (juce::StringRef definitions) | |||||
| { | |||||
| const auto split = juce::StringArray::fromTokens (definitions, ";", "\""); | |||||
| juce::String includeStatements; | |||||
| for (const auto& def : split) | |||||
| { | |||||
| constexpr auto moduleToken = "JUCE_MODULE_AVAILABLE_"; | |||||
| if (def.startsWith (moduleToken)) | |||||
| { | |||||
| const auto moduleName = def.fromFirstOccurrenceOf (moduleToken, false, false) | |||||
| .upToFirstOccurrenceOf ("=", false, false); | |||||
| includeStatements += "#include <" + moduleName + "/" + moduleName + ".h>\n"; | |||||
| } | |||||
| } | |||||
| return includeStatements; | |||||
| } | |||||
| int writeHeader (juce::ArgumentList&& args) | |||||
| { | |||||
| args.checkMinNumArguments (2); | |||||
| const auto input = args.arguments.removeAndReturn (0); | |||||
| const auto output = args.arguments.removeAndReturn (0); | |||||
| const auto dict = parseProjectData (input.resolveAsExistingFile()); | |||||
| const auto getString = [&] (juce::StringRef key) { return getStringValue (dict, key); }; | |||||
| const auto includes = createIncludeStatements (getString ("MODULE_DEFINITIONS")); | |||||
| const auto projectName = getString ("PROJECT_NAME"); | |||||
| const auto name = projectName.isEmpty() ? getString ("EXECUTABLE_NAME") : projectName; | |||||
| const auto versionString = getString ("VERSION"); | |||||
| const auto headerText = juce::String (headerTemplate) | |||||
| .replace ("${JUCE_INCLUDES}", includes) | |||||
| .replace ("${JUCE_EXECUTABLE_NAME}", name) | |||||
| .replace ("${JUCE_COMPANY_NAME}", getString ("COMPANY_NAME")) | |||||
| .replace ("${JUCE_PROJECT_VERSION}", versionString) | |||||
| .replace ("${JUCE_PROJECT_VERSION_HEX}", juce::build_tools::getVersionAsHex (versionString)); | |||||
| return createAndWrite (output.resolveAsFile(), headerText); | |||||
| } | |||||
| } // namespace | |||||
| int main (int argc, char** argv) | |||||
| { | |||||
| juce::ScopedJuceInitialiser_GUI libraryInitialiser; | |||||
| return juce::ConsoleApplication::invokeCatchingFailures ([argc, argv] | |||||
| { | |||||
| juce::ArgumentList argumentList { argc, argv }; | |||||
| using Fn = typename std::add_lvalue_reference<decltype (writeBinaryData)>::type; | |||||
| const std::unordered_map<juce::String, Fn> commands | |||||
| { | |||||
| { "auappconfig", writeAuAppConfig }, | |||||
| { "binarydata", writeBinaryData }, | |||||
| { "entitlements", writeEntitlements }, | |||||
| { "header", writeHeader }, | |||||
| { "iosassets", writeiOSAssets }, | |||||
| { "macicon", writeMacIcon }, | |||||
| { "pkginfo", writePkgInfo }, | |||||
| { "plist", writePlist }, | |||||
| { "rcfile", writeRcFile }, | |||||
| { "winicon", writeWinIcon } | |||||
| }; | |||||
| argumentList.checkMinNumArguments (1); | |||||
| const auto mode = argumentList.arguments.removeAndReturn (0); | |||||
| const auto it = commands.find (mode.text); | |||||
| if (it == commands.cend()) | |||||
| juce::ConsoleApplication::fail ("No matching mode", 1); | |||||
| return it->second (std::move (argumentList)); | |||||
| }); | |||||
| } | |||||
| @@ -0,0 +1,22 @@ | |||||
| # ============================================================================== | |||||
| # | |||||
| # This file is part of the JUCE 6 technical preview. | |||||
| # Copyright (c) 2020 - ROLI Ltd. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # ============================================================================== | |||||
| add_subdirectory(AudioPerformanceTest) | |||||
| add_subdirectory(AudioPluginHost) | |||||
| add_subdirectory(BinaryBuilder) | |||||
| add_subdirectory(NetworkGraphicsDemo) | |||||
| add_subdirectory(Projucer) | |||||
| add_subdirectory(UnitTestRunner) | |||||
| @@ -0,0 +1,30 @@ | |||||
| # ============================================================================== | |||||
| # | |||||
| # This file is part of the JUCE 6 technical preview. | |||||
| # Copyright (c) 2020 - ROLI Ltd. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # ============================================================================== | |||||
| juce_add_gui_app(NetworkGraphicsDemo) | |||||
| juce_generate_juce_header(NetworkGraphicsDemo) | |||||
| target_sources(NetworkGraphicsDemo PRIVATE Source/Main.cpp) | |||||
| target_compile_definitions(NetworkGraphicsDemo PRIVATE | |||||
| JUCE_USE_CURL=0 JUCE_WEB_BROWSER=0) | |||||
| target_link_libraries(NetworkGraphicsDemo PRIVATE | |||||
| juce::juce_audio_utils | |||||
| juce::juce_cryptography | |||||
| juce::juce_opengl | |||||
| juce::juce_osc) | |||||
| @@ -35,7 +35,7 @@ ifeq ($(CONFIG),Debug) | |||||
| TARGET_ARCH := | TARGET_ARCH := | ||||
| endif | endif | ||||
| JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=6.0.0 -DJUCE_APP_VERSION_HEX=0x60000 $(shell pkg-config --cflags x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) | |||||
| JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=6.0.0 -DJUCE_APP_VERSION_HEX=0x60000 $(shell pkg-config --cflags x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules -I../../../Build $(CPPFLAGS) | |||||
| JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0 | JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0 | ||||
| JUCE_TARGET_APP := Projucer | JUCE_TARGET_APP := Projucer | ||||
| @@ -56,7 +56,7 @@ ifeq ($(CONFIG),Release) | |||||
| TARGET_ARCH := | TARGET_ARCH := | ||||
| endif | endif | ||||
| JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=6.0.0 -DJUCE_APP_VERSION_HEX=0x60000 $(shell pkg-config --cflags x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS) | |||||
| JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=6.0.0 -DJUCE_APP_VERSION_HEX=0x60000 $(shell pkg-config --cflags x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules -I../../../Build $(CPPFLAGS) | |||||
| JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0 | JUCE_CPPFLAGS_APP := -DJucePlugin_Build_VST=0 -DJucePlugin_Build_VST3=0 -DJucePlugin_Build_AU=0 -DJucePlugin_Build_AUv3=0 -DJucePlugin_Build_RTAS=0 -DJucePlugin_Build_AAX=0 -DJucePlugin_Build_Standalone=0 -DJucePlugin_Build_Unity=0 | ||||
| JUCE_TARGET_APP := Projucer | JUCE_TARGET_APP := Projucer | ||||
| @@ -123,6 +123,7 @@ OBJECTS_APP := \ | |||||
| $(JUCE_OBJDIR)/jucer_NewProjectWizardClasses_891f6fa2.o \ | $(JUCE_OBJDIR)/jucer_NewProjectWizardClasses_891f6fa2.o \ | ||||
| $(JUCE_OBJDIR)/BinaryData_ce4232d4.o \ | $(JUCE_OBJDIR)/BinaryData_ce4232d4.o \ | ||||
| $(JUCE_OBJDIR)/include_juce_analytics_f8e9fa94.o \ | $(JUCE_OBJDIR)/include_juce_analytics_f8e9fa94.o \ | ||||
| $(JUCE_OBJDIR)/include_juce_build_tools_f5069398.o \ | |||||
| $(JUCE_OBJDIR)/include_juce_core_f26d17db.o \ | $(JUCE_OBJDIR)/include_juce_core_f26d17db.o \ | ||||
| $(JUCE_OBJDIR)/include_juce_cryptography_8cb807a8.o \ | $(JUCE_OBJDIR)/include_juce_cryptography_8cb807a8.o \ | ||||
| $(JUCE_OBJDIR)/include_juce_data_structures_7471b1e3.o \ | $(JUCE_OBJDIR)/include_juce_data_structures_7471b1e3.o \ | ||||
| @@ -419,6 +420,11 @@ $(JUCE_OBJDIR)/include_juce_analytics_f8e9fa94.o: ../../JuceLibraryCode/include_ | |||||
| @echo "Compiling include_juce_analytics.cpp" | @echo "Compiling include_juce_analytics.cpp" | ||||
| $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" | $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" | ||||
| $(JUCE_OBJDIR)/include_juce_build_tools_f5069398.o: ../../JuceLibraryCode/include_juce_build_tools.cpp | |||||
| -$(V_AT)mkdir -p $(JUCE_OBJDIR) | |||||
| @echo "Compiling include_juce_build_tools.cpp" | |||||
| $(V_AT)$(CXX) $(JUCE_CXXFLAGS) $(JUCE_CPPFLAGS_APP) $(JUCE_CFLAGS_APP) -o "$@" -c "$<" | |||||
| $(JUCE_OBJDIR)/include_juce_core_f26d17db.o: ../../JuceLibraryCode/include_juce_core.cpp | $(JUCE_OBJDIR)/include_juce_core_f26d17db.o: ../../JuceLibraryCode/include_juce_core.cpp | ||||
| -$(V_AT)mkdir -p $(JUCE_OBJDIR) | -$(V_AT)mkdir -p $(JUCE_OBJDIR) | ||||
| @echo "Compiling include_juce_core.cpp" | @echo "Compiling include_juce_core.cpp" | ||||
| @@ -297,6 +297,10 @@ | |||||
| isa = PBXBuildFile; | isa = PBXBuildFile; | ||||
| fileRef = 805A3A5FBA3B9E28363DD77B; | fileRef = 805A3A5FBA3B9E28363DD77B; | ||||
| }; | }; | ||||
| 4C743A3DA8682EEE89BDBD28 = { | |||||
| isa = PBXBuildFile; | |||||
| fileRef = E2687B099347B364D1919A9B; | |||||
| }; | |||||
| 5DD883699B85E4C492CAD065 = { | 5DD883699B85E4C492CAD065 = { | ||||
| isa = PBXBuildFile; | isa = PBXBuildFile; | ||||
| fileRef = DB9C8E35DF815B803CB4A9CF; | fileRef = DB9C8E35DF815B803CB4A9CF; | ||||
| @@ -640,6 +644,13 @@ | |||||
| path = "../../../../modules/juce_events"; | path = "../../../../modules/juce_events"; | ||||
| sourceTree = "SOURCE_ROOT"; | sourceTree = "SOURCE_ROOT"; | ||||
| }; | }; | ||||
| 233C7FC5157176DB33FE2F27 = { | |||||
| isa = PBXFileReference; | |||||
| lastKnownFileType = file.nib; | |||||
| name = RecentFilesMenuTemplate.nib; | |||||
| path = ../../../Build/CMake/RecentFilesMenuTemplate.nib; | |||||
| sourceTree = "SOURCE_ROOT"; | |||||
| }; | |||||
| 23A8DE16C0CDB8EED18B008B = { | 23A8DE16C0CDB8EED18B008B = { | ||||
| isa = PBXFileReference; | isa = PBXFileReference; | ||||
| lastKnownFileType = sourcecode.c.h; | lastKnownFileType = sourcecode.c.h; | ||||
| @@ -836,13 +847,6 @@ | |||||
| path = "../../Source/Utility/UI/jucer_SlidingPanelComponent.h"; | path = "../../Source/Utility/UI/jucer_SlidingPanelComponent.h"; | ||||
| sourceTree = "SOURCE_ROOT"; | sourceTree = "SOURCE_ROOT"; | ||||
| }; | }; | ||||
| 3DC2ED15A9DFAAEF3D2ACDDF = { | |||||
| isa = PBXFileReference; | |||||
| lastKnownFileType = sourcecode.cpp.cpp; | |||||
| name = "jucer_PIPMain.cpp"; | |||||
| path = "../../Source/BinaryData/Templates/jucer_PIPMain.cpp"; | |||||
| sourceTree = "SOURCE_ROOT"; | |||||
| }; | |||||
| 3EA27F52A254912218F4DE94 = { | 3EA27F52A254912218F4DE94 = { | ||||
| isa = PBXFileReference; | isa = PBXFileReference; | ||||
| lastKnownFileType = sourcecode.c.h; | lastKnownFileType = sourcecode.c.h; | ||||
| @@ -913,6 +917,13 @@ | |||||
| path = "../../Source/BinaryData/Icons/juce-logo-with-text.svg"; | path = "../../Source/BinaryData/Icons/juce-logo-with-text.svg"; | ||||
| sourceTree = "SOURCE_ROOT"; | sourceTree = "SOURCE_ROOT"; | ||||
| }; | }; | ||||
| 463C8CF42FAA00014198B71B = { | |||||
| isa = PBXFileReference; | |||||
| lastKnownFileType = file.in; | |||||
| name = PIPComponent.cpp.in; | |||||
| path = ../../../Build/CMake/PIPComponent.cpp.in; | |||||
| sourceTree = "SOURCE_ROOT"; | |||||
| }; | |||||
| 471C7B0A8B92320AF0C80839 = { | 471C7B0A8B92320AF0C80839 = { | ||||
| isa = PBXFileReference; | isa = PBXFileReference; | ||||
| lastKnownFileType = sourcecode.c.h; | lastKnownFileType = sourcecode.c.h; | ||||
| @@ -1025,6 +1036,13 @@ | |||||
| path = "../../Source/ComponentEditor/jucer_ObjectTypes.h"; | path = "../../Source/ComponentEditor/jucer_ObjectTypes.h"; | ||||
| sourceTree = "SOURCE_ROOT"; | sourceTree = "SOURCE_ROOT"; | ||||
| }; | }; | ||||
| 50F89D3827B83B48855B3564 = { | |||||
| isa = PBXFileReference; | |||||
| lastKnownFileType = file.storyboard; | |||||
| name = LaunchScreen.storyboard; | |||||
| path = ../../../Build/CMake/LaunchScreen.storyboard; | |||||
| sourceTree = "SOURCE_ROOT"; | |||||
| }; | |||||
| 512D80BE12634967A085A1DC = { | 512D80BE12634967A085A1DC = { | ||||
| isa = PBXFileReference; | isa = PBXFileReference; | ||||
| lastKnownFileType = sourcecode.cpp.cpp; | lastKnownFileType = sourcecode.cpp.cpp; | ||||
| @@ -1109,13 +1127,6 @@ | |||||
| path = "../../Source/ComponentEditor/Properties/jucer_ComponentTextProperty.h"; | path = "../../Source/ComponentEditor/Properties/jucer_ComponentTextProperty.h"; | ||||
| sourceTree = "SOURCE_ROOT"; | sourceTree = "SOURCE_ROOT"; | ||||
| }; | }; | ||||
| 58139D8D454051C59E77609B = { | |||||
| isa = PBXFileReference; | |||||
| lastKnownFileType = file.nib; | |||||
| name = RecentFilesMenuTemplate.nib; | |||||
| path = ../../Source/BinaryData/RecentFilesMenuTemplate.nib; | |||||
| sourceTree = "SOURCE_ROOT"; | |||||
| }; | |||||
| 5867DC4E39DF8539B54C0D59 = { | 5867DC4E39DF8539B54C0D59 = { | ||||
| isa = PBXFileReference; | isa = PBXFileReference; | ||||
| lastKnownFileType = sourcecode.cpp.objcpp; | lastKnownFileType = sourcecode.cpp.objcpp; | ||||
| @@ -1368,13 +1379,6 @@ | |||||
| path = "../../Source/ComponentEditor/UI/jucer_SnapGridPainter.h"; | path = "../../Source/ComponentEditor/UI/jucer_SnapGridPainter.h"; | ||||
| sourceTree = "SOURCE_ROOT"; | sourceTree = "SOURCE_ROOT"; | ||||
| }; | }; | ||||
| 763A63E75AC802F17D11FE8B = { | |||||
| isa = PBXFileReference; | |||||
| lastKnownFileType = file.cs; | |||||
| name = "jucer_UnityPluginGUIScript.cs"; | |||||
| path = "../../Source/BinaryData/Templates/jucer_UnityPluginGUIScript.cs"; | |||||
| sourceTree = "SOURCE_ROOT"; | |||||
| }; | |||||
| 7687A1374C60A025BDBE98DE = { | 7687A1374C60A025BDBE98DE = { | ||||
| isa = PBXFileReference; | isa = PBXFileReference; | ||||
| lastKnownFileType = sourcecode.c.h; | lastKnownFileType = sourcecode.c.h; | ||||
| @@ -1823,6 +1827,13 @@ | |||||
| path = "../../Source/ComponentEditor/UI/jucer_ComponentLayoutPanel.h"; | path = "../../Source/ComponentEditor/UI/jucer_ComponentLayoutPanel.h"; | ||||
| sourceTree = "SOURCE_ROOT"; | sourceTree = "SOURCE_ROOT"; | ||||
| }; | }; | ||||
| A0ECDAF137029C445910D3ED = { | |||||
| isa = PBXFileReference; | |||||
| lastKnownFileType = file.in; | |||||
| name = PIPAudioProcessor.cpp.in; | |||||
| path = ../../../Build/CMake/PIPAudioProcessor.cpp.in; | |||||
| sourceTree = "SOURCE_ROOT"; | |||||
| }; | |||||
| A160AEF56553A658E6EA6A8E = { | A160AEF56553A658E6EA6A8E = { | ||||
| isa = PBXFileReference; | isa = PBXFileReference; | ||||
| lastKnownFileType = sourcecode.cpp.cpp; | lastKnownFileType = sourcecode.cpp.cpp; | ||||
| @@ -1977,13 +1988,6 @@ | |||||
| path = "../../../../modules/juce_graphics"; | path = "../../../../modules/juce_graphics"; | ||||
| sourceTree = "SOURCE_ROOT"; | sourceTree = "SOURCE_ROOT"; | ||||
| }; | }; | ||||
| B8385E9A644BD3CD94876448 = { | |||||
| isa = PBXFileReference; | |||||
| lastKnownFileType = sourcecode.c.h; | |||||
| name = "jucer_ProjectType.h"; | |||||
| path = "../../Source/Project/jucer_ProjectType.h"; | |||||
| sourceTree = "SOURCE_ROOT"; | |||||
| }; | |||||
| B83C9BD89F31EA9E5E12A3C6 = { | B83C9BD89F31EA9E5E12A3C6 = { | ||||
| isa = PBXFileReference; | isa = PBXFileReference; | ||||
| lastKnownFileType = image.png; | lastKnownFileType = image.png; | ||||
| @@ -2390,6 +2394,13 @@ | |||||
| path = "Info-App.plist"; | path = "Info-App.plist"; | ||||
| sourceTree = "SOURCE_ROOT"; | sourceTree = "SOURCE_ROOT"; | ||||
| }; | }; | ||||
| E2687B099347B364D1919A9B = { | |||||
| isa = PBXFileReference; | |||||
| lastKnownFileType = sourcecode.cpp.cpp; | |||||
| name = "include_juce_build_tools.cpp"; | |||||
| path = "../../JuceLibraryCode/include_juce_build_tools.cpp"; | |||||
| sourceTree = "SOURCE_ROOT"; | |||||
| }; | |||||
| E2B668E2A65AEE8F07B406C8 = { | E2B668E2A65AEE8F07B406C8 = { | ||||
| isa = PBXFileReference; | isa = PBXFileReference; | ||||
| lastKnownFileType = sourcecode.c.h; | lastKnownFileType = sourcecode.c.h; | ||||
| @@ -2474,6 +2485,13 @@ | |||||
| path = "../../Source/ComponentEditor/UI/jucer_PaintRoutineEditor.h"; | path = "../../Source/ComponentEditor/UI/jucer_PaintRoutineEditor.h"; | ||||
| sourceTree = "SOURCE_ROOT"; | sourceTree = "SOURCE_ROOT"; | ||||
| }; | }; | ||||
| EE12741389A87D1BF04AE795 = { | |||||
| isa = PBXFileReference; | |||||
| lastKnownFileType = file; | |||||
| name = "juce_build_tools"; | |||||
| path = "../../../Build/juce_build_tools"; | |||||
| sourceTree = "SOURCE_ROOT"; | |||||
| }; | |||||
| EE690110171E1648FF2118B8 = { | EE690110171E1648FF2118B8 = { | ||||
| isa = PBXFileReference; | isa = PBXFileReference; | ||||
| lastKnownFileType = sourcecode.c.h; | lastKnownFileType = sourcecode.c.h; | ||||
| @@ -2516,6 +2534,13 @@ | |||||
| path = "../../Source/Utility/Helpers/jucer_CodeHelpers.cpp"; | path = "../../Source/Utility/Helpers/jucer_CodeHelpers.cpp"; | ||||
| sourceTree = "SOURCE_ROOT"; | sourceTree = "SOURCE_ROOT"; | ||||
| }; | }; | ||||
| F313EE01ECE306DB2CFE011D = { | |||||
| isa = PBXFileReference; | |||||
| lastKnownFileType = file.in; | |||||
| name = UnityPluginGUIScript.cs.in; | |||||
| path = ../../../Build/CMake/UnityPluginGUIScript.cs.in; | |||||
| sourceTree = "SOURCE_ROOT"; | |||||
| }; | |||||
| F3CC8F26ECCDA6DCD8A284D2 = { | F3CC8F26ECCDA6DCD8A284D2 = { | ||||
| isa = PBXFileReference; | isa = PBXFileReference; | ||||
| lastKnownFileType = sourcecode.c.h; | lastKnownFileType = sourcecode.c.h; | ||||
| @@ -2551,6 +2576,13 @@ | |||||
| path = "../../Source/Application/Windows/jucer_TranslationToolWindowComponent.h"; | path = "../../Source/Application/Windows/jucer_TranslationToolWindowComponent.h"; | ||||
| sourceTree = "SOURCE_ROOT"; | sourceTree = "SOURCE_ROOT"; | ||||
| }; | }; | ||||
| F84D031B2A6BB1EE6A316C71 = { | |||||
| isa = PBXFileReference; | |||||
| lastKnownFileType = file.in; | |||||
| name = PIPConsole.cpp.in; | |||||
| path = ../../../Build/CMake/PIPConsole.cpp.in; | |||||
| sourceTree = "SOURCE_ROOT"; | |||||
| }; | |||||
| F8A38C0C7C45F2DB6A5FB812 = { | F8A38C0C7C45F2DB6A5FB812 = { | ||||
| isa = PBXFileReference; | isa = PBXFileReference; | ||||
| lastKnownFileType = file.svg; | lastKnownFileType = file.svg; | ||||
| @@ -2652,7 +2684,7 @@ | |||||
| name = Application; | name = Application; | ||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| 8CF70DA9AB4725126B9F55BE = { | |||||
| 59BA7D0ED63ACD9A7F3E8814 = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 129F2DE0FEF154F8F8C7A74E, | 129F2DE0FEF154F8F8C7A74E, | ||||
| @@ -2663,7 +2695,7 @@ | |||||
| name = gradle; | name = gradle; | ||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| F0F189518721D46C0F94FD56 = { | |||||
| C83BF6127A39BE2C4ED80B67 = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 514F2FAFDBF535AC03FA2E6C, | 514F2FAFDBF535AC03FA2E6C, | ||||
| @@ -2690,7 +2722,7 @@ | |||||
| name = Icons; | name = Icons; | ||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| E59ABA0D11CBAAD77179E9C6 = { | |||||
| 86B4069D904AB46AC86FB383 = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 9A3B8BBDA8E144A3DF6B9349, | 9A3B8BBDA8E144A3DF6B9349, | ||||
| @@ -2722,25 +2754,28 @@ | |||||
| 023B92AC0340305762412E90, | 023B92AC0340305762412E90, | ||||
| 3F7C5B53347A487C7FBD2223, | 3F7C5B53347A487C7FBD2223, | ||||
| 4ECF029E3A69BF42FED1503D, | 4ECF029E3A69BF42FED1503D, | ||||
| 3DC2ED15A9DFAAEF3D2ACDDF, | |||||
| E67999BF57B139E00207A374, | E67999BF57B139E00207A374, | ||||
| 763A63E75AC802F17D11FE8B, | |||||
| ); | ); | ||||
| name = Templates; | name = Templates; | ||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| A9399733CAA07BDAB958242C = { | |||||
| DC3A4B0AD79334BA8A7E0661 = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 8CF70DA9AB4725126B9F55BE, | |||||
| F0F189518721D46C0F94FD56, | |||||
| E59ABA0D11CBAAD77179E9C6, | |||||
| 50F89D3827B83B48855B3564, | |||||
| A0ECDAF137029C445910D3ED, | |||||
| 463C8CF42FAA00014198B71B, | |||||
| F84D031B2A6BB1EE6A316C71, | |||||
| 233C7FC5157176DB33FE2F27, | |||||
| F313EE01ECE306DB2CFE011D, | |||||
| 59BA7D0ED63ACD9A7F3E8814, | |||||
| C83BF6127A39BE2C4ED80B67, | |||||
| 86B4069D904AB46AC86FB383, | |||||
| 41105E536155E394E54BDD35, | 41105E536155E394E54BDD35, | ||||
| 5F6584B675E30761521A9F42, | 5F6584B675E30761521A9F42, | ||||
| 59B08C7B13B8EA5137ACA77A, | 59B08C7B13B8EA5137ACA77A, | ||||
| 8C281F2F8EA3AD614ADF7955, | 8C281F2F8EA3AD614ADF7955, | ||||
| 4073A12E196BDDADE211E19F, | 4073A12E196BDDADE211E19F, | ||||
| 58139D8D454051C59E77609B, | |||||
| ); | ); | ||||
| name = BinaryData; | name = BinaryData; | ||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| @@ -2979,7 +3014,6 @@ | |||||
| 7211101FFA28400ADBB1D47A, | 7211101FFA28400ADBB1D47A, | ||||
| BAC43B20E14A340CCF14119C, | BAC43B20E14A340CCF14119C, | ||||
| BF3CEF080FA013E2778DCE90, | BF3CEF080FA013E2778DCE90, | ||||
| B8385E9A644BD3CD94876448, | |||||
| ); | ); | ||||
| name = Project; | name = Project; | ||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| @@ -3111,7 +3145,7 @@ | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| BC67FD952A6F210A11A1ECB8, | BC67FD952A6F210A11A1ECB8, | ||||
| A9399733CAA07BDAB958242C, | |||||
| DC3A4B0AD79334BA8A7E0661, | |||||
| F1B44F007A02A0FAE4DC8D79, | F1B44F007A02A0FAE4DC8D79, | ||||
| F6BD840F9A06F2DA891E2CB8, | F6BD840F9A06F2DA891E2CB8, | ||||
| 144B649D98AE8316058B8281, | 144B649D98AE8316058B8281, | ||||
| @@ -3129,6 +3163,7 @@ | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 58DE91CE6B05AFBACADDB251, | 58DE91CE6B05AFBACADDB251, | ||||
| EE12741389A87D1BF04AE795, | |||||
| BA159A3B7D129771F5C15EA3, | BA159A3B7D129771F5C15EA3, | ||||
| AA1C44E89D792DDC4867B2C8, | AA1C44E89D792DDC4867B2C8, | ||||
| 69555CEFC6ED613AA3949298, | 69555CEFC6ED613AA3949298, | ||||
| @@ -3147,6 +3182,7 @@ | |||||
| 472F9A90F685220D730EBF6C, | 472F9A90F685220D730EBF6C, | ||||
| 4F687965FBE86EAFDB3ACFEC, | 4F687965FBE86EAFDB3ACFEC, | ||||
| 805A3A5FBA3B9E28363DD77B, | 805A3A5FBA3B9E28363DD77B, | ||||
| E2687B099347B364D1919A9B, | |||||
| DB9C8E35DF815B803CB4A9CF, | DB9C8E35DF815B803CB4A9CF, | ||||
| D766BB9D8C32B5560F0493F3, | D766BB9D8C32B5560F0493F3, | ||||
| 1DE5BBC777FB64798D823002, | 1DE5BBC777FB64798D823002, | ||||
| @@ -3243,6 +3279,7 @@ | |||||
| HEADER_SEARCH_PATHS = ( | HEADER_SEARCH_PATHS = ( | ||||
| "../../JuceLibraryCode", | "../../JuceLibraryCode", | ||||
| "../../../../modules", | "../../../../modules", | ||||
| "../../../Build", | |||||
| "$(inherited)", | "$(inherited)", | ||||
| ); | ); | ||||
| INFOPLIST_FILE = Info-App.plist; | INFOPLIST_FILE = Info-App.plist; | ||||
| @@ -3287,6 +3324,7 @@ | |||||
| HEADER_SEARCH_PATHS = ( | HEADER_SEARCH_PATHS = ( | ||||
| "../../JuceLibraryCode", | "../../JuceLibraryCode", | ||||
| "../../../../modules", | "../../../../modules", | ||||
| "../../../Build", | |||||
| "$(inherited)", | "$(inherited)", | ||||
| ); | ); | ||||
| INFOPLIST_FILE = Info-App.plist; | INFOPLIST_FILE = Info-App.plist; | ||||
| @@ -3487,6 +3525,7 @@ | |||||
| B7EBA1A83575F48CD08140B9, | B7EBA1A83575F48CD08140B9, | ||||
| 3C5267E06A897B0DC0F7EA50, | 3C5267E06A897B0DC0F7EA50, | ||||
| 202DC8CF15ACBE096CC327EA, | 202DC8CF15ACBE096CC327EA, | ||||
| 4C743A3DA8682EEE89BDBD28, | |||||
| 5DD883699B85E4C492CAD065, | 5DD883699B85E4C492CAD065, | ||||
| D5C9125F65493CA481F18E53, | D5C9125F65493CA481F18E53, | ||||
| 02E8F35A8E0D4A0DF6F38D60, | 02E8F35A8E0D4A0DF6F38D60, | ||||
| @@ -63,7 +63,7 @@ | |||||
| <ClCompile> | <ClCompile> | ||||
| <Optimization>Disabled</Optimization> | <Optimization>Disabled</Optimization> | ||||
| <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> | <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> | ||||
| <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | |||||
| <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;..\..\..\Build;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | |||||
| <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=6.0.0;JUCE_APP_VERSION_HEX=0x60000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions> | <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=6.0.0;JUCE_APP_VERSION_HEX=0x60000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
| <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> | <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> | ||||
| <RuntimeTypeInfo>true</RuntimeTypeInfo> | <RuntimeTypeInfo>true</RuntimeTypeInfo> | ||||
| @@ -105,7 +105,7 @@ | |||||
| </Midl> | </Midl> | ||||
| <ClCompile> | <ClCompile> | ||||
| <Optimization>Full</Optimization> | <Optimization>Full</Optimization> | ||||
| <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | |||||
| <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;..\..\..\Build;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | |||||
| <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=6.0.0;JUCE_APP_VERSION_HEX=0x60000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions> | <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=6.0.0;JUCE_APP_VERSION_HEX=0x60000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
| <RuntimeLibrary>MultiThreaded</RuntimeLibrary> | <RuntimeLibrary>MultiThreaded</RuntimeLibrary> | ||||
| <RuntimeTypeInfo>true</RuntimeTypeInfo> | <RuntimeTypeInfo>true</RuntimeTypeInfo> | ||||
| @@ -187,9 +187,6 @@ | |||||
| <ClCompile Include="..\..\Source\BinaryData\Templates\jucer_OpenGLComponentTemplate.cpp"> | <ClCompile Include="..\..\Source\BinaryData\Templates\jucer_OpenGLComponentTemplate.cpp"> | ||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | <ExcludedFromBuild>true</ExcludedFromBuild> | ||||
| </ClCompile> | </ClCompile> | ||||
| <ClCompile Include="..\..\Source\BinaryData\Templates\jucer_PIPMain.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\Source\CodeEditor\jucer_DocumentEditorComponent.cpp"/> | <ClCompile Include="..\..\Source\CodeEditor\jucer_DocumentEditorComponent.cpp"/> | ||||
| <ClCompile Include="..\..\Source\CodeEditor\jucer_OpenDocumentManager.cpp"/> | <ClCompile Include="..\..\Source\CodeEditor\jucer_OpenDocumentManager.cpp"/> | ||||
| <ClCompile Include="..\..\Source\CodeEditor\jucer_SourceCodeEditor.cpp"/> | <ClCompile Include="..\..\Source\CodeEditor\jucer_SourceCodeEditor.cpp"/> | ||||
| @@ -253,6 +250,36 @@ | |||||
| <ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp"> | <ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp"> | ||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | <ExcludedFromBuild>true</ExcludedFromBuild> | ||||
| </ClCompile> | </ClCompile> | ||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_BuildHelperFunctions.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_CppTokeniserFunctions.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_Entitlements.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_Icons.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_PlistOptions.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceFileHelpers.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceRc.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_VersionNumbers.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\juce_build_tools.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.cpp"> | <ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.cpp"> | ||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | <ExcludedFromBuild>true</ExcludedFromBuild> | ||||
| </ClCompile> | </ClCompile> | ||||
| @@ -1452,6 +1479,7 @@ | |||||
| </ClCompile> | </ClCompile> | ||||
| <ClCompile Include="..\..\JuceLibraryCode\BinaryData.cpp"/> | <ClCompile Include="..\..\JuceLibraryCode\BinaryData.cpp"/> | ||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_analytics.cpp"/> | <ClCompile Include="..\..\JuceLibraryCode\include_juce_analytics.cpp"/> | ||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_build_tools.cpp"/> | |||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_core.cpp"/> | <ClCompile Include="..\..\JuceLibraryCode\include_juce_core.cpp"/> | ||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_cryptography.cpp"/> | <ClCompile Include="..\..\JuceLibraryCode\include_juce_cryptography.cpp"/> | ||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_data_structures.cpp"/> | <ClCompile Include="..\..\JuceLibraryCode\include_juce_data_structures.cpp"/> | ||||
| @@ -1601,7 +1629,6 @@ | |||||
| <ClInclude Include="..\..\Source\Project\UI\jucer_ProjectContentComponent.h"/> | <ClInclude Include="..\..\Source\Project\UI\jucer_ProjectContentComponent.h"/> | ||||
| <ClInclude Include="..\..\Source\Project\jucer_Module.h"/> | <ClInclude Include="..\..\Source\Project\jucer_Module.h"/> | ||||
| <ClInclude Include="..\..\Source\Project\jucer_Project.h"/> | <ClInclude Include="..\..\Source\Project\jucer_Project.h"/> | ||||
| <ClInclude Include="..\..\Source\Project\jucer_ProjectType.h"/> | |||||
| <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_Android.h"/> | <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_Android.h"/> | ||||
| <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_CLion.h"/> | <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_CLion.h"/> | ||||
| <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_CodeBlocks.h"/> | <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_CodeBlocks.h"/> | ||||
| @@ -1654,6 +1681,17 @@ | |||||
| <ClInclude Include="..\..\..\..\modules\juce_analytics\destinations\juce_AnalyticsDestination.h"/> | <ClInclude Include="..\..\..\..\modules\juce_analytics\destinations\juce_AnalyticsDestination.h"/> | ||||
| <ClInclude Include="..\..\..\..\modules\juce_analytics\destinations\juce_ThreadedAnalyticsDestination.h"/> | <ClInclude Include="..\..\..\..\modules\juce_analytics\destinations\juce_ThreadedAnalyticsDestination.h"/> | ||||
| <ClInclude Include="..\..\..\..\modules\juce_analytics\juce_analytics.h"/> | <ClInclude Include="..\..\..\..\modules\juce_analytics\juce_analytics.h"/> | ||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_BuildHelperFunctions.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_Entitlements.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_Icons.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_PlistOptions.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_ProjectType.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_RelativePath.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceFileHelpers.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceRc.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_VersionNumbers.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\juce_build_tools.h"/> | |||||
| <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.h"/> | <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.h"/> | ||||
| <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Array.h"/> | <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Array.h"/> | ||||
| <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_ArrayAllocationBase.h"/> | <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_ArrayAllocationBase.h"/> | ||||
| @@ -2064,6 +2102,12 @@ | |||||
| <ClInclude Include="..\..\JuceLibraryCode\JuceHeader.h"/> | <ClInclude Include="..\..\JuceLibraryCode\JuceHeader.h"/> | ||||
| </ItemGroup> | </ItemGroup> | ||||
| <ItemGroup> | <ItemGroup> | ||||
| <None Include="..\..\..\Build\CMake\LaunchScreen.storyboard"/> | |||||
| <None Include="..\..\..\Build\CMake\PIPAudioProcessor.cpp.in"/> | |||||
| <None Include="..\..\..\Build\CMake\PIPComponent.cpp.in"/> | |||||
| <None Include="..\..\..\Build\CMake\PIPConsole.cpp.in"/> | |||||
| <None Include="..\..\..\Build\CMake\RecentFilesMenuTemplate.nib"/> | |||||
| <None Include="..\..\..\Build\CMake\UnityPluginGUIScript.cs.in"/> | |||||
| <None Include="..\..\Source\BinaryData\gradle\gradle-wrapper.jar"/> | <None Include="..\..\Source\BinaryData\gradle\gradle-wrapper.jar"/> | ||||
| <None Include="..\..\Source\BinaryData\gradle\gradlew"/> | <None Include="..\..\Source\BinaryData\gradle\gradlew"/> | ||||
| <None Include="..\..\Source\BinaryData\gradle\gradlew.bat"/> | <None Include="..\..\Source\BinaryData\gradle\gradlew.bat"/> | ||||
| @@ -2088,13 +2132,11 @@ | |||||
| <None Include="..\..\Source\BinaryData\Icons\wizard_Openfile.svg"/> | <None Include="..\..\Source\BinaryData\Icons\wizard_Openfile.svg"/> | ||||
| <None Include="..\..\Source\BinaryData\Icons\wizard_OpenGL.svg"/> | <None Include="..\..\Source\BinaryData\Icons\wizard_OpenGL.svg"/> | ||||
| <None Include="..\..\Source\BinaryData\Icons\wizard_StaticLibrary.svg"/> | <None Include="..\..\Source\BinaryData\Icons\wizard_StaticLibrary.svg"/> | ||||
| <None Include="..\..\Source\BinaryData\Templates\jucer_UnityPluginGUIScript.cs"/> | |||||
| <None Include="..\..\Source\BinaryData\colourscheme_dark.xml"/> | <None Include="..\..\Source\BinaryData\colourscheme_dark.xml"/> | ||||
| <None Include="..\..\Source\BinaryData\colourscheme_light.xml"/> | <None Include="..\..\Source\BinaryData\colourscheme_light.xml"/> | ||||
| <None Include="..\..\Source\BinaryData\nothingtoseehere.txt"/> | <None Include="..\..\Source\BinaryData\nothingtoseehere.txt"/> | ||||
| <None Include="..\..\Source\BinaryData\offlinepage.html"/> | <None Include="..\..\Source\BinaryData\offlinepage.html"/> | ||||
| <None Include="..\..\Source\BinaryData\projucer_EULA.txt"/> | <None Include="..\..\Source\BinaryData\projucer_EULA.txt"/> | ||||
| <None Include="..\..\Source\BinaryData\RecentFilesMenuTemplate.nib"/> | |||||
| <None Include="..\..\..\..\modules\juce_core\native\java\README.txt"/> | <None Include="..\..\..\..\modules\juce_core\native\java\README.txt"/> | ||||
| <None Include="..\..\..\..\modules\juce_graphics\image_formats\jpglib\changes to libjpeg for JUCE.txt"/> | <None Include="..\..\..\..\modules\juce_graphics\image_formats\jpglib\changes to libjpeg for JUCE.txt"/> | ||||
| <None Include="..\..\..\..\modules\juce_graphics\image_formats\pnglib\libpng_readme.txt"/> | <None Include="..\..\..\..\modules\juce_graphics\image_formats\pnglib\libpng_readme.txt"/> | ||||
| @@ -95,6 +95,12 @@ | |||||
| <Filter Include="JUCE Modules\juce_analytics"> | <Filter Include="JUCE Modules\juce_analytics"> | ||||
| <UniqueIdentifier>{97F7F593-75F8-D6B2-DC96-C946C3976226}</UniqueIdentifier> | <UniqueIdentifier>{97F7F593-75F8-D6B2-DC96-C946C3976226}</UniqueIdentifier> | ||||
| </Filter> | </Filter> | ||||
| <Filter Include="JUCE Modules\juce_build_tools\utils"> | |||||
| <UniqueIdentifier>{D9FAFF6D-6737-F775-056A-D0B29BE13820}</UniqueIdentifier> | |||||
| </Filter> | |||||
| <Filter Include="JUCE Modules\juce_build_tools"> | |||||
| <UniqueIdentifier>{065C11E4-EB37-5B72-0A01-F549675EB866}</UniqueIdentifier> | |||||
| </Filter> | |||||
| <Filter Include="JUCE Modules\juce_core\containers"> | <Filter Include="JUCE Modules\juce_core\containers"> | ||||
| <UniqueIdentifier>{42F7BE9D-3C8A-AE26-289B-8F355C068036}</UniqueIdentifier> | <UniqueIdentifier>{42F7BE9D-3C8A-AE26-289B-8F355C068036}</UniqueIdentifier> | ||||
| </Filter> | </Filter> | ||||
| @@ -370,9 +376,6 @@ | |||||
| <ClCompile Include="..\..\Source\BinaryData\Templates\jucer_OpenGLComponentTemplate.cpp"> | <ClCompile Include="..\..\Source\BinaryData\Templates\jucer_OpenGLComponentTemplate.cpp"> | ||||
| <Filter>Projucer\BinaryData\Templates</Filter> | <Filter>Projucer\BinaryData\Templates</Filter> | ||||
| </ClCompile> | </ClCompile> | ||||
| <ClCompile Include="..\..\Source\BinaryData\Templates\jucer_PIPMain.cpp"> | |||||
| <Filter>Projucer\BinaryData\Templates</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\Source\CodeEditor\jucer_DocumentEditorComponent.cpp"> | <ClCompile Include="..\..\Source\CodeEditor\jucer_DocumentEditorComponent.cpp"> | ||||
| <Filter>Projucer\CodeEditor</Filter> | <Filter>Projucer\CodeEditor</Filter> | ||||
| </ClCompile> | </ClCompile> | ||||
| @@ -532,6 +535,36 @@ | |||||
| <ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp"> | <ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp"> | ||||
| <Filter>JUCE Modules\juce_analytics</Filter> | <Filter>JUCE Modules\juce_analytics</Filter> | ||||
| </ClCompile> | </ClCompile> | ||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_BuildHelperFunctions.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_CppTokeniserFunctions.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_Entitlements.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_Icons.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_PlistOptions.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceFileHelpers.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceRc.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_VersionNumbers.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\juce_build_tools.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.cpp"> | <ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.cpp"> | ||||
| <Filter>JUCE Modules\juce_core\containers</Filter> | <Filter>JUCE Modules\juce_core\containers</Filter> | ||||
| </ClCompile> | </ClCompile> | ||||
| @@ -1819,6 +1852,9 @@ | |||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_analytics.cpp"> | <ClCompile Include="..\..\JuceLibraryCode\include_juce_analytics.cpp"> | ||||
| <Filter>JUCE Library Code</Filter> | <Filter>JUCE Library Code</Filter> | ||||
| </ClCompile> | </ClCompile> | ||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_build_tools.cpp"> | |||||
| <Filter>JUCE Library Code</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_core.cpp"> | <ClCompile Include="..\..\JuceLibraryCode\include_juce_core.cpp"> | ||||
| <Filter>JUCE Library Code</Filter> | <Filter>JUCE Library Code</Filter> | ||||
| </ClCompile> | </ClCompile> | ||||
| @@ -2262,9 +2298,6 @@ | |||||
| <ClInclude Include="..\..\Source\Project\jucer_Project.h"> | <ClInclude Include="..\..\Source\Project\jucer_Project.h"> | ||||
| <Filter>Projucer\Project</Filter> | <Filter>Projucer\Project</Filter> | ||||
| </ClInclude> | </ClInclude> | ||||
| <ClInclude Include="..\..\Source\Project\jucer_ProjectType.h"> | |||||
| <Filter>Projucer\Project</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_Android.h"> | <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_Android.h"> | ||||
| <Filter>Projucer\ProjectSaving</Filter> | <Filter>Projucer\ProjectSaving</Filter> | ||||
| </ClInclude> | </ClInclude> | ||||
| @@ -2421,6 +2454,39 @@ | |||||
| <ClInclude Include="..\..\..\..\modules\juce_analytics\juce_analytics.h"> | <ClInclude Include="..\..\..\..\modules\juce_analytics\juce_analytics.h"> | ||||
| <Filter>JUCE Modules\juce_analytics</Filter> | <Filter>JUCE Modules\juce_analytics</Filter> | ||||
| </ClInclude> | </ClInclude> | ||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_BuildHelperFunctions.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_Entitlements.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_Icons.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_PlistOptions.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_ProjectType.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_RelativePath.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceFileHelpers.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceRc.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_VersionNumbers.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\juce_build_tools.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.h"> | <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.h"> | ||||
| <Filter>JUCE Modules\juce_core\containers</Filter> | <Filter>JUCE Modules\juce_core\containers</Filter> | ||||
| </ClInclude> | </ClInclude> | ||||
| @@ -3647,6 +3713,24 @@ | |||||
| </ClInclude> | </ClInclude> | ||||
| </ItemGroup> | </ItemGroup> | ||||
| <ItemGroup> | <ItemGroup> | ||||
| <None Include="..\..\..\Build\CMake\LaunchScreen.storyboard"> | |||||
| <Filter>Projucer\BinaryData</Filter> | |||||
| </None> | |||||
| <None Include="..\..\..\Build\CMake\PIPAudioProcessor.cpp.in"> | |||||
| <Filter>Projucer\BinaryData</Filter> | |||||
| </None> | |||||
| <None Include="..\..\..\Build\CMake\PIPComponent.cpp.in"> | |||||
| <Filter>Projucer\BinaryData</Filter> | |||||
| </None> | |||||
| <None Include="..\..\..\Build\CMake\PIPConsole.cpp.in"> | |||||
| <Filter>Projucer\BinaryData</Filter> | |||||
| </None> | |||||
| <None Include="..\..\..\Build\CMake\RecentFilesMenuTemplate.nib"> | |||||
| <Filter>Projucer\BinaryData</Filter> | |||||
| </None> | |||||
| <None Include="..\..\..\Build\CMake\UnityPluginGUIScript.cs.in"> | |||||
| <Filter>Projucer\BinaryData</Filter> | |||||
| </None> | |||||
| <None Include="..\..\Source\BinaryData\gradle\gradle-wrapper.jar"> | <None Include="..\..\Source\BinaryData\gradle\gradle-wrapper.jar"> | ||||
| <Filter>Projucer\BinaryData\gradle</Filter> | <Filter>Projucer\BinaryData\gradle</Filter> | ||||
| </None> | </None> | ||||
| @@ -3719,9 +3803,6 @@ | |||||
| <None Include="..\..\Source\BinaryData\Icons\wizard_StaticLibrary.svg"> | <None Include="..\..\Source\BinaryData\Icons\wizard_StaticLibrary.svg"> | ||||
| <Filter>Projucer\BinaryData\Icons</Filter> | <Filter>Projucer\BinaryData\Icons</Filter> | ||||
| </None> | </None> | ||||
| <None Include="..\..\Source\BinaryData\Templates\jucer_UnityPluginGUIScript.cs"> | |||||
| <Filter>Projucer\BinaryData\Templates</Filter> | |||||
| </None> | |||||
| <None Include="..\..\Source\BinaryData\colourscheme_dark.xml"> | <None Include="..\..\Source\BinaryData\colourscheme_dark.xml"> | ||||
| <Filter>Projucer\BinaryData</Filter> | <Filter>Projucer\BinaryData</Filter> | ||||
| </None> | </None> | ||||
| @@ -3737,9 +3818,6 @@ | |||||
| <None Include="..\..\Source\BinaryData\projucer_EULA.txt"> | <None Include="..\..\Source\BinaryData\projucer_EULA.txt"> | ||||
| <Filter>Projucer\BinaryData</Filter> | <Filter>Projucer\BinaryData</Filter> | ||||
| </None> | </None> | ||||
| <None Include="..\..\Source\BinaryData\RecentFilesMenuTemplate.nib"> | |||||
| <Filter>Projucer\BinaryData</Filter> | |||||
| </None> | |||||
| <None Include="..\..\..\..\modules\juce_core\native\java\README.txt"> | <None Include="..\..\..\..\modules\juce_core\native\java\README.txt"> | ||||
| <Filter>JUCE Modules\juce_core\native\java</Filter> | <Filter>JUCE Modules\juce_core\native\java</Filter> | ||||
| </None> | </None> | ||||
| @@ -63,7 +63,7 @@ | |||||
| <ClCompile> | <ClCompile> | ||||
| <Optimization>Disabled</Optimization> | <Optimization>Disabled</Optimization> | ||||
| <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> | <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> | ||||
| <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | |||||
| <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;..\..\..\Build;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | |||||
| <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=6.0.0;JUCE_APP_VERSION_HEX=0x60000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions> | <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=6.0.0;JUCE_APP_VERSION_HEX=0x60000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
| <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> | <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> | ||||
| <RuntimeTypeInfo>true</RuntimeTypeInfo> | <RuntimeTypeInfo>true</RuntimeTypeInfo> | ||||
| @@ -105,7 +105,7 @@ | |||||
| </Midl> | </Midl> | ||||
| <ClCompile> | <ClCompile> | ||||
| <Optimization>Full</Optimization> | <Optimization>Full</Optimization> | ||||
| <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | |||||
| <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;..\..\..\Build;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | |||||
| <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=6.0.0;JUCE_APP_VERSION_HEX=0x60000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions> | <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=6.0.0;JUCE_APP_VERSION_HEX=0x60000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
| <RuntimeLibrary>MultiThreaded</RuntimeLibrary> | <RuntimeLibrary>MultiThreaded</RuntimeLibrary> | ||||
| <RuntimeTypeInfo>true</RuntimeTypeInfo> | <RuntimeTypeInfo>true</RuntimeTypeInfo> | ||||
| @@ -187,9 +187,6 @@ | |||||
| <ClCompile Include="..\..\Source\BinaryData\Templates\jucer_OpenGLComponentTemplate.cpp"> | <ClCompile Include="..\..\Source\BinaryData\Templates\jucer_OpenGLComponentTemplate.cpp"> | ||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | <ExcludedFromBuild>true</ExcludedFromBuild> | ||||
| </ClCompile> | </ClCompile> | ||||
| <ClCompile Include="..\..\Source\BinaryData\Templates\jucer_PIPMain.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\Source\CodeEditor\jucer_DocumentEditorComponent.cpp"/> | <ClCompile Include="..\..\Source\CodeEditor\jucer_DocumentEditorComponent.cpp"/> | ||||
| <ClCompile Include="..\..\Source\CodeEditor\jucer_OpenDocumentManager.cpp"/> | <ClCompile Include="..\..\Source\CodeEditor\jucer_OpenDocumentManager.cpp"/> | ||||
| <ClCompile Include="..\..\Source\CodeEditor\jucer_SourceCodeEditor.cpp"/> | <ClCompile Include="..\..\Source\CodeEditor\jucer_SourceCodeEditor.cpp"/> | ||||
| @@ -253,6 +250,36 @@ | |||||
| <ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp"> | <ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp"> | ||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | <ExcludedFromBuild>true</ExcludedFromBuild> | ||||
| </ClCompile> | </ClCompile> | ||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_BuildHelperFunctions.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_CppTokeniserFunctions.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_Entitlements.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_Icons.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_PlistOptions.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceFileHelpers.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceRc.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_VersionNumbers.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\juce_build_tools.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.cpp"> | <ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.cpp"> | ||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | <ExcludedFromBuild>true</ExcludedFromBuild> | ||||
| </ClCompile> | </ClCompile> | ||||
| @@ -1452,6 +1479,7 @@ | |||||
| </ClCompile> | </ClCompile> | ||||
| <ClCompile Include="..\..\JuceLibraryCode\BinaryData.cpp"/> | <ClCompile Include="..\..\JuceLibraryCode\BinaryData.cpp"/> | ||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_analytics.cpp"/> | <ClCompile Include="..\..\JuceLibraryCode\include_juce_analytics.cpp"/> | ||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_build_tools.cpp"/> | |||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_core.cpp"/> | <ClCompile Include="..\..\JuceLibraryCode\include_juce_core.cpp"/> | ||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_cryptography.cpp"/> | <ClCompile Include="..\..\JuceLibraryCode\include_juce_cryptography.cpp"/> | ||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_data_structures.cpp"/> | <ClCompile Include="..\..\JuceLibraryCode\include_juce_data_structures.cpp"/> | ||||
| @@ -1601,7 +1629,6 @@ | |||||
| <ClInclude Include="..\..\Source\Project\UI\jucer_ProjectContentComponent.h"/> | <ClInclude Include="..\..\Source\Project\UI\jucer_ProjectContentComponent.h"/> | ||||
| <ClInclude Include="..\..\Source\Project\jucer_Module.h"/> | <ClInclude Include="..\..\Source\Project\jucer_Module.h"/> | ||||
| <ClInclude Include="..\..\Source\Project\jucer_Project.h"/> | <ClInclude Include="..\..\Source\Project\jucer_Project.h"/> | ||||
| <ClInclude Include="..\..\Source\Project\jucer_ProjectType.h"/> | |||||
| <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_Android.h"/> | <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_Android.h"/> | ||||
| <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_CLion.h"/> | <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_CLion.h"/> | ||||
| <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_CodeBlocks.h"/> | <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_CodeBlocks.h"/> | ||||
| @@ -1654,6 +1681,17 @@ | |||||
| <ClInclude Include="..\..\..\..\modules\juce_analytics\destinations\juce_AnalyticsDestination.h"/> | <ClInclude Include="..\..\..\..\modules\juce_analytics\destinations\juce_AnalyticsDestination.h"/> | ||||
| <ClInclude Include="..\..\..\..\modules\juce_analytics\destinations\juce_ThreadedAnalyticsDestination.h"/> | <ClInclude Include="..\..\..\..\modules\juce_analytics\destinations\juce_ThreadedAnalyticsDestination.h"/> | ||||
| <ClInclude Include="..\..\..\..\modules\juce_analytics\juce_analytics.h"/> | <ClInclude Include="..\..\..\..\modules\juce_analytics\juce_analytics.h"/> | ||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_BuildHelperFunctions.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_Entitlements.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_Icons.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_PlistOptions.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_ProjectType.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_RelativePath.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceFileHelpers.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceRc.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_VersionNumbers.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\juce_build_tools.h"/> | |||||
| <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.h"/> | <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.h"/> | ||||
| <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Array.h"/> | <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Array.h"/> | ||||
| <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_ArrayAllocationBase.h"/> | <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_ArrayAllocationBase.h"/> | ||||
| @@ -2064,6 +2102,12 @@ | |||||
| <ClInclude Include="..\..\JuceLibraryCode\JuceHeader.h"/> | <ClInclude Include="..\..\JuceLibraryCode\JuceHeader.h"/> | ||||
| </ItemGroup> | </ItemGroup> | ||||
| <ItemGroup> | <ItemGroup> | ||||
| <None Include="..\..\..\Build\CMake\LaunchScreen.storyboard"/> | |||||
| <None Include="..\..\..\Build\CMake\PIPAudioProcessor.cpp.in"/> | |||||
| <None Include="..\..\..\Build\CMake\PIPComponent.cpp.in"/> | |||||
| <None Include="..\..\..\Build\CMake\PIPConsole.cpp.in"/> | |||||
| <None Include="..\..\..\Build\CMake\RecentFilesMenuTemplate.nib"/> | |||||
| <None Include="..\..\..\Build\CMake\UnityPluginGUIScript.cs.in"/> | |||||
| <None Include="..\..\Source\BinaryData\gradle\gradle-wrapper.jar"/> | <None Include="..\..\Source\BinaryData\gradle\gradle-wrapper.jar"/> | ||||
| <None Include="..\..\Source\BinaryData\gradle\gradlew"/> | <None Include="..\..\Source\BinaryData\gradle\gradlew"/> | ||||
| <None Include="..\..\Source\BinaryData\gradle\gradlew.bat"/> | <None Include="..\..\Source\BinaryData\gradle\gradlew.bat"/> | ||||
| @@ -2088,13 +2132,11 @@ | |||||
| <None Include="..\..\Source\BinaryData\Icons\wizard_Openfile.svg"/> | <None Include="..\..\Source\BinaryData\Icons\wizard_Openfile.svg"/> | ||||
| <None Include="..\..\Source\BinaryData\Icons\wizard_OpenGL.svg"/> | <None Include="..\..\Source\BinaryData\Icons\wizard_OpenGL.svg"/> | ||||
| <None Include="..\..\Source\BinaryData\Icons\wizard_StaticLibrary.svg"/> | <None Include="..\..\Source\BinaryData\Icons\wizard_StaticLibrary.svg"/> | ||||
| <None Include="..\..\Source\BinaryData\Templates\jucer_UnityPluginGUIScript.cs"/> | |||||
| <None Include="..\..\Source\BinaryData\colourscheme_dark.xml"/> | <None Include="..\..\Source\BinaryData\colourscheme_dark.xml"/> | ||||
| <None Include="..\..\Source\BinaryData\colourscheme_light.xml"/> | <None Include="..\..\Source\BinaryData\colourscheme_light.xml"/> | ||||
| <None Include="..\..\Source\BinaryData\nothingtoseehere.txt"/> | <None Include="..\..\Source\BinaryData\nothingtoseehere.txt"/> | ||||
| <None Include="..\..\Source\BinaryData\offlinepage.html"/> | <None Include="..\..\Source\BinaryData\offlinepage.html"/> | ||||
| <None Include="..\..\Source\BinaryData\projucer_EULA.txt"/> | <None Include="..\..\Source\BinaryData\projucer_EULA.txt"/> | ||||
| <None Include="..\..\Source\BinaryData\RecentFilesMenuTemplate.nib"/> | |||||
| <None Include="..\..\..\..\modules\juce_core\native\java\README.txt"/> | <None Include="..\..\..\..\modules\juce_core\native\java\README.txt"/> | ||||
| <None Include="..\..\..\..\modules\juce_graphics\image_formats\jpglib\changes to libjpeg for JUCE.txt"/> | <None Include="..\..\..\..\modules\juce_graphics\image_formats\jpglib\changes to libjpeg for JUCE.txt"/> | ||||
| <None Include="..\..\..\..\modules\juce_graphics\image_formats\pnglib\libpng_readme.txt"/> | <None Include="..\..\..\..\modules\juce_graphics\image_formats\pnglib\libpng_readme.txt"/> | ||||
| @@ -95,6 +95,12 @@ | |||||
| <Filter Include="JUCE Modules\juce_analytics"> | <Filter Include="JUCE Modules\juce_analytics"> | ||||
| <UniqueIdentifier>{97F7F593-75F8-D6B2-DC96-C946C3976226}</UniqueIdentifier> | <UniqueIdentifier>{97F7F593-75F8-D6B2-DC96-C946C3976226}</UniqueIdentifier> | ||||
| </Filter> | </Filter> | ||||
| <Filter Include="JUCE Modules\juce_build_tools\utils"> | |||||
| <UniqueIdentifier>{D9FAFF6D-6737-F775-056A-D0B29BE13820}</UniqueIdentifier> | |||||
| </Filter> | |||||
| <Filter Include="JUCE Modules\juce_build_tools"> | |||||
| <UniqueIdentifier>{065C11E4-EB37-5B72-0A01-F549675EB866}</UniqueIdentifier> | |||||
| </Filter> | |||||
| <Filter Include="JUCE Modules\juce_core\containers"> | <Filter Include="JUCE Modules\juce_core\containers"> | ||||
| <UniqueIdentifier>{42F7BE9D-3C8A-AE26-289B-8F355C068036}</UniqueIdentifier> | <UniqueIdentifier>{42F7BE9D-3C8A-AE26-289B-8F355C068036}</UniqueIdentifier> | ||||
| </Filter> | </Filter> | ||||
| @@ -370,9 +376,6 @@ | |||||
| <ClCompile Include="..\..\Source\BinaryData\Templates\jucer_OpenGLComponentTemplate.cpp"> | <ClCompile Include="..\..\Source\BinaryData\Templates\jucer_OpenGLComponentTemplate.cpp"> | ||||
| <Filter>Projucer\BinaryData\Templates</Filter> | <Filter>Projucer\BinaryData\Templates</Filter> | ||||
| </ClCompile> | </ClCompile> | ||||
| <ClCompile Include="..\..\Source\BinaryData\Templates\jucer_PIPMain.cpp"> | |||||
| <Filter>Projucer\BinaryData\Templates</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\Source\CodeEditor\jucer_DocumentEditorComponent.cpp"> | <ClCompile Include="..\..\Source\CodeEditor\jucer_DocumentEditorComponent.cpp"> | ||||
| <Filter>Projucer\CodeEditor</Filter> | <Filter>Projucer\CodeEditor</Filter> | ||||
| </ClCompile> | </ClCompile> | ||||
| @@ -532,6 +535,36 @@ | |||||
| <ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp"> | <ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp"> | ||||
| <Filter>JUCE Modules\juce_analytics</Filter> | <Filter>JUCE Modules\juce_analytics</Filter> | ||||
| </ClCompile> | </ClCompile> | ||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_BuildHelperFunctions.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_CppTokeniserFunctions.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_Entitlements.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_Icons.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_PlistOptions.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceFileHelpers.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceRc.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_VersionNumbers.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\juce_build_tools.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.cpp"> | <ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.cpp"> | ||||
| <Filter>JUCE Modules\juce_core\containers</Filter> | <Filter>JUCE Modules\juce_core\containers</Filter> | ||||
| </ClCompile> | </ClCompile> | ||||
| @@ -1819,6 +1852,9 @@ | |||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_analytics.cpp"> | <ClCompile Include="..\..\JuceLibraryCode\include_juce_analytics.cpp"> | ||||
| <Filter>JUCE Library Code</Filter> | <Filter>JUCE Library Code</Filter> | ||||
| </ClCompile> | </ClCompile> | ||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_build_tools.cpp"> | |||||
| <Filter>JUCE Library Code</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_core.cpp"> | <ClCompile Include="..\..\JuceLibraryCode\include_juce_core.cpp"> | ||||
| <Filter>JUCE Library Code</Filter> | <Filter>JUCE Library Code</Filter> | ||||
| </ClCompile> | </ClCompile> | ||||
| @@ -2262,9 +2298,6 @@ | |||||
| <ClInclude Include="..\..\Source\Project\jucer_Project.h"> | <ClInclude Include="..\..\Source\Project\jucer_Project.h"> | ||||
| <Filter>Projucer\Project</Filter> | <Filter>Projucer\Project</Filter> | ||||
| </ClInclude> | </ClInclude> | ||||
| <ClInclude Include="..\..\Source\Project\jucer_ProjectType.h"> | |||||
| <Filter>Projucer\Project</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_Android.h"> | <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_Android.h"> | ||||
| <Filter>Projucer\ProjectSaving</Filter> | <Filter>Projucer\ProjectSaving</Filter> | ||||
| </ClInclude> | </ClInclude> | ||||
| @@ -2421,6 +2454,39 @@ | |||||
| <ClInclude Include="..\..\..\..\modules\juce_analytics\juce_analytics.h"> | <ClInclude Include="..\..\..\..\modules\juce_analytics\juce_analytics.h"> | ||||
| <Filter>JUCE Modules\juce_analytics</Filter> | <Filter>JUCE Modules\juce_analytics</Filter> | ||||
| </ClInclude> | </ClInclude> | ||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_BuildHelperFunctions.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_Entitlements.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_Icons.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_PlistOptions.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_ProjectType.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_RelativePath.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceFileHelpers.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceRc.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_VersionNumbers.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\juce_build_tools.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.h"> | <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.h"> | ||||
| <Filter>JUCE Modules\juce_core\containers</Filter> | <Filter>JUCE Modules\juce_core\containers</Filter> | ||||
| </ClInclude> | </ClInclude> | ||||
| @@ -3647,6 +3713,24 @@ | |||||
| </ClInclude> | </ClInclude> | ||||
| </ItemGroup> | </ItemGroup> | ||||
| <ItemGroup> | <ItemGroup> | ||||
| <None Include="..\..\..\Build\CMake\LaunchScreen.storyboard"> | |||||
| <Filter>Projucer\BinaryData</Filter> | |||||
| </None> | |||||
| <None Include="..\..\..\Build\CMake\PIPAudioProcessor.cpp.in"> | |||||
| <Filter>Projucer\BinaryData</Filter> | |||||
| </None> | |||||
| <None Include="..\..\..\Build\CMake\PIPComponent.cpp.in"> | |||||
| <Filter>Projucer\BinaryData</Filter> | |||||
| </None> | |||||
| <None Include="..\..\..\Build\CMake\PIPConsole.cpp.in"> | |||||
| <Filter>Projucer\BinaryData</Filter> | |||||
| </None> | |||||
| <None Include="..\..\..\Build\CMake\RecentFilesMenuTemplate.nib"> | |||||
| <Filter>Projucer\BinaryData</Filter> | |||||
| </None> | |||||
| <None Include="..\..\..\Build\CMake\UnityPluginGUIScript.cs.in"> | |||||
| <Filter>Projucer\BinaryData</Filter> | |||||
| </None> | |||||
| <None Include="..\..\Source\BinaryData\gradle\gradle-wrapper.jar"> | <None Include="..\..\Source\BinaryData\gradle\gradle-wrapper.jar"> | ||||
| <Filter>Projucer\BinaryData\gradle</Filter> | <Filter>Projucer\BinaryData\gradle</Filter> | ||||
| </None> | </None> | ||||
| @@ -3719,9 +3803,6 @@ | |||||
| <None Include="..\..\Source\BinaryData\Icons\wizard_StaticLibrary.svg"> | <None Include="..\..\Source\BinaryData\Icons\wizard_StaticLibrary.svg"> | ||||
| <Filter>Projucer\BinaryData\Icons</Filter> | <Filter>Projucer\BinaryData\Icons</Filter> | ||||
| </None> | </None> | ||||
| <None Include="..\..\Source\BinaryData\Templates\jucer_UnityPluginGUIScript.cs"> | |||||
| <Filter>Projucer\BinaryData\Templates</Filter> | |||||
| </None> | |||||
| <None Include="..\..\Source\BinaryData\colourscheme_dark.xml"> | <None Include="..\..\Source\BinaryData\colourscheme_dark.xml"> | ||||
| <Filter>Projucer\BinaryData</Filter> | <Filter>Projucer\BinaryData</Filter> | ||||
| </None> | </None> | ||||
| @@ -3737,9 +3818,6 @@ | |||||
| <None Include="..\..\Source\BinaryData\projucer_EULA.txt"> | <None Include="..\..\Source\BinaryData\projucer_EULA.txt"> | ||||
| <Filter>Projucer\BinaryData</Filter> | <Filter>Projucer\BinaryData</Filter> | ||||
| </None> | </None> | ||||
| <None Include="..\..\Source\BinaryData\RecentFilesMenuTemplate.nib"> | |||||
| <Filter>Projucer\BinaryData</Filter> | |||||
| </None> | |||||
| <None Include="..\..\..\..\modules\juce_core\native\java\README.txt"> | <None Include="..\..\..\..\modules\juce_core\native\java\README.txt"> | ||||
| <Filter>JUCE Modules\juce_core\native\java</Filter> | <Filter>JUCE Modules\juce_core\native\java</Filter> | ||||
| </None> | </None> | ||||
| @@ -63,7 +63,7 @@ | |||||
| <ClCompile> | <ClCompile> | ||||
| <Optimization>Disabled</Optimization> | <Optimization>Disabled</Optimization> | ||||
| <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> | <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> | ||||
| <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | |||||
| <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;..\..\..\Build;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | |||||
| <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=6.0.0;JUCE_APP_VERSION_HEX=0x60000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions> | <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=6.0.0;JUCE_APP_VERSION_HEX=0x60000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
| <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> | <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> | ||||
| <RuntimeTypeInfo>true</RuntimeTypeInfo> | <RuntimeTypeInfo>true</RuntimeTypeInfo> | ||||
| @@ -105,7 +105,7 @@ | |||||
| </Midl> | </Midl> | ||||
| <ClCompile> | <ClCompile> | ||||
| <Optimization>Full</Optimization> | <Optimization>Full</Optimization> | ||||
| <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | |||||
| <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;..\..\..\Build;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | |||||
| <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=6.0.0;JUCE_APP_VERSION_HEX=0x60000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions> | <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=6.0.0;JUCE_APP_VERSION_HEX=0x60000;JucePlugin_Build_VST=0;JucePlugin_Build_VST3=0;JucePlugin_Build_AU=0;JucePlugin_Build_AUv3=0;JucePlugin_Build_RTAS=0;JucePlugin_Build_AAX=0;JucePlugin_Build_Standalone=0;JucePlugin_Build_Unity=0;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
| <RuntimeLibrary>MultiThreaded</RuntimeLibrary> | <RuntimeLibrary>MultiThreaded</RuntimeLibrary> | ||||
| <RuntimeTypeInfo>true</RuntimeTypeInfo> | <RuntimeTypeInfo>true</RuntimeTypeInfo> | ||||
| @@ -187,9 +187,6 @@ | |||||
| <ClCompile Include="..\..\Source\BinaryData\Templates\jucer_OpenGLComponentTemplate.cpp"> | <ClCompile Include="..\..\Source\BinaryData\Templates\jucer_OpenGLComponentTemplate.cpp"> | ||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | <ExcludedFromBuild>true</ExcludedFromBuild> | ||||
| </ClCompile> | </ClCompile> | ||||
| <ClCompile Include="..\..\Source\BinaryData\Templates\jucer_PIPMain.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\Source\CodeEditor\jucer_DocumentEditorComponent.cpp"/> | <ClCompile Include="..\..\Source\CodeEditor\jucer_DocumentEditorComponent.cpp"/> | ||||
| <ClCompile Include="..\..\Source\CodeEditor\jucer_OpenDocumentManager.cpp"/> | <ClCompile Include="..\..\Source\CodeEditor\jucer_OpenDocumentManager.cpp"/> | ||||
| <ClCompile Include="..\..\Source\CodeEditor\jucer_SourceCodeEditor.cpp"/> | <ClCompile Include="..\..\Source\CodeEditor\jucer_SourceCodeEditor.cpp"/> | ||||
| @@ -253,6 +250,36 @@ | |||||
| <ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp"> | <ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp"> | ||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | <ExcludedFromBuild>true</ExcludedFromBuild> | ||||
| </ClCompile> | </ClCompile> | ||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_BuildHelperFunctions.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_CppTokeniserFunctions.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_Entitlements.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_Icons.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_PlistOptions.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceFileHelpers.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceRc.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_VersionNumbers.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\juce_build_tools.cpp"> | |||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.cpp"> | <ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.cpp"> | ||||
| <ExcludedFromBuild>true</ExcludedFromBuild> | <ExcludedFromBuild>true</ExcludedFromBuild> | ||||
| </ClCompile> | </ClCompile> | ||||
| @@ -1452,6 +1479,7 @@ | |||||
| </ClCompile> | </ClCompile> | ||||
| <ClCompile Include="..\..\JuceLibraryCode\BinaryData.cpp"/> | <ClCompile Include="..\..\JuceLibraryCode\BinaryData.cpp"/> | ||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_analytics.cpp"/> | <ClCompile Include="..\..\JuceLibraryCode\include_juce_analytics.cpp"/> | ||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_build_tools.cpp"/> | |||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_core.cpp"/> | <ClCompile Include="..\..\JuceLibraryCode\include_juce_core.cpp"/> | ||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_cryptography.cpp"/> | <ClCompile Include="..\..\JuceLibraryCode\include_juce_cryptography.cpp"/> | ||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_data_structures.cpp"/> | <ClCompile Include="..\..\JuceLibraryCode\include_juce_data_structures.cpp"/> | ||||
| @@ -1601,7 +1629,6 @@ | |||||
| <ClInclude Include="..\..\Source\Project\UI\jucer_ProjectContentComponent.h"/> | <ClInclude Include="..\..\Source\Project\UI\jucer_ProjectContentComponent.h"/> | ||||
| <ClInclude Include="..\..\Source\Project\jucer_Module.h"/> | <ClInclude Include="..\..\Source\Project\jucer_Module.h"/> | ||||
| <ClInclude Include="..\..\Source\Project\jucer_Project.h"/> | <ClInclude Include="..\..\Source\Project\jucer_Project.h"/> | ||||
| <ClInclude Include="..\..\Source\Project\jucer_ProjectType.h"/> | |||||
| <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_Android.h"/> | <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_Android.h"/> | ||||
| <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_CLion.h"/> | <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_CLion.h"/> | ||||
| <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_CodeBlocks.h"/> | <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_CodeBlocks.h"/> | ||||
| @@ -1654,6 +1681,17 @@ | |||||
| <ClInclude Include="..\..\..\..\modules\juce_analytics\destinations\juce_AnalyticsDestination.h"/> | <ClInclude Include="..\..\..\..\modules\juce_analytics\destinations\juce_AnalyticsDestination.h"/> | ||||
| <ClInclude Include="..\..\..\..\modules\juce_analytics\destinations\juce_ThreadedAnalyticsDestination.h"/> | <ClInclude Include="..\..\..\..\modules\juce_analytics\destinations\juce_ThreadedAnalyticsDestination.h"/> | ||||
| <ClInclude Include="..\..\..\..\modules\juce_analytics\juce_analytics.h"/> | <ClInclude Include="..\..\..\..\modules\juce_analytics\juce_analytics.h"/> | ||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_BuildHelperFunctions.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_Entitlements.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_Icons.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_PlistOptions.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_ProjectType.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_RelativePath.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceFileHelpers.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceRc.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_VersionNumbers.h"/> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\juce_build_tools.h"/> | |||||
| <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.h"/> | <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.h"/> | ||||
| <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Array.h"/> | <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_Array.h"/> | ||||
| <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_ArrayAllocationBase.h"/> | <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_ArrayAllocationBase.h"/> | ||||
| @@ -2064,6 +2102,12 @@ | |||||
| <ClInclude Include="..\..\JuceLibraryCode\JuceHeader.h"/> | <ClInclude Include="..\..\JuceLibraryCode\JuceHeader.h"/> | ||||
| </ItemGroup> | </ItemGroup> | ||||
| <ItemGroup> | <ItemGroup> | ||||
| <None Include="..\..\..\Build\CMake\LaunchScreen.storyboard"/> | |||||
| <None Include="..\..\..\Build\CMake\PIPAudioProcessor.cpp.in"/> | |||||
| <None Include="..\..\..\Build\CMake\PIPComponent.cpp.in"/> | |||||
| <None Include="..\..\..\Build\CMake\PIPConsole.cpp.in"/> | |||||
| <None Include="..\..\..\Build\CMake\RecentFilesMenuTemplate.nib"/> | |||||
| <None Include="..\..\..\Build\CMake\UnityPluginGUIScript.cs.in"/> | |||||
| <None Include="..\..\Source\BinaryData\gradle\gradle-wrapper.jar"/> | <None Include="..\..\Source\BinaryData\gradle\gradle-wrapper.jar"/> | ||||
| <None Include="..\..\Source\BinaryData\gradle\gradlew"/> | <None Include="..\..\Source\BinaryData\gradle\gradlew"/> | ||||
| <None Include="..\..\Source\BinaryData\gradle\gradlew.bat"/> | <None Include="..\..\Source\BinaryData\gradle\gradlew.bat"/> | ||||
| @@ -2088,13 +2132,11 @@ | |||||
| <None Include="..\..\Source\BinaryData\Icons\wizard_Openfile.svg"/> | <None Include="..\..\Source\BinaryData\Icons\wizard_Openfile.svg"/> | ||||
| <None Include="..\..\Source\BinaryData\Icons\wizard_OpenGL.svg"/> | <None Include="..\..\Source\BinaryData\Icons\wizard_OpenGL.svg"/> | ||||
| <None Include="..\..\Source\BinaryData\Icons\wizard_StaticLibrary.svg"/> | <None Include="..\..\Source\BinaryData\Icons\wizard_StaticLibrary.svg"/> | ||||
| <None Include="..\..\Source\BinaryData\Templates\jucer_UnityPluginGUIScript.cs"/> | |||||
| <None Include="..\..\Source\BinaryData\colourscheme_dark.xml"/> | <None Include="..\..\Source\BinaryData\colourscheme_dark.xml"/> | ||||
| <None Include="..\..\Source\BinaryData\colourscheme_light.xml"/> | <None Include="..\..\Source\BinaryData\colourscheme_light.xml"/> | ||||
| <None Include="..\..\Source\BinaryData\nothingtoseehere.txt"/> | <None Include="..\..\Source\BinaryData\nothingtoseehere.txt"/> | ||||
| <None Include="..\..\Source\BinaryData\offlinepage.html"/> | <None Include="..\..\Source\BinaryData\offlinepage.html"/> | ||||
| <None Include="..\..\Source\BinaryData\projucer_EULA.txt"/> | <None Include="..\..\Source\BinaryData\projucer_EULA.txt"/> | ||||
| <None Include="..\..\Source\BinaryData\RecentFilesMenuTemplate.nib"/> | |||||
| <None Include="..\..\..\..\modules\juce_core\native\java\README.txt"/> | <None Include="..\..\..\..\modules\juce_core\native\java\README.txt"/> | ||||
| <None Include="..\..\..\..\modules\juce_graphics\image_formats\jpglib\changes to libjpeg for JUCE.txt"/> | <None Include="..\..\..\..\modules\juce_graphics\image_formats\jpglib\changes to libjpeg for JUCE.txt"/> | ||||
| <None Include="..\..\..\..\modules\juce_graphics\image_formats\pnglib\libpng_readme.txt"/> | <None Include="..\..\..\..\modules\juce_graphics\image_formats\pnglib\libpng_readme.txt"/> | ||||
| @@ -95,6 +95,12 @@ | |||||
| <Filter Include="JUCE Modules\juce_analytics"> | <Filter Include="JUCE Modules\juce_analytics"> | ||||
| <UniqueIdentifier>{97F7F593-75F8-D6B2-DC96-C946C3976226}</UniqueIdentifier> | <UniqueIdentifier>{97F7F593-75F8-D6B2-DC96-C946C3976226}</UniqueIdentifier> | ||||
| </Filter> | </Filter> | ||||
| <Filter Include="JUCE Modules\juce_build_tools\utils"> | |||||
| <UniqueIdentifier>{D9FAFF6D-6737-F775-056A-D0B29BE13820}</UniqueIdentifier> | |||||
| </Filter> | |||||
| <Filter Include="JUCE Modules\juce_build_tools"> | |||||
| <UniqueIdentifier>{065C11E4-EB37-5B72-0A01-F549675EB866}</UniqueIdentifier> | |||||
| </Filter> | |||||
| <Filter Include="JUCE Modules\juce_core\containers"> | <Filter Include="JUCE Modules\juce_core\containers"> | ||||
| <UniqueIdentifier>{42F7BE9D-3C8A-AE26-289B-8F355C068036}</UniqueIdentifier> | <UniqueIdentifier>{42F7BE9D-3C8A-AE26-289B-8F355C068036}</UniqueIdentifier> | ||||
| </Filter> | </Filter> | ||||
| @@ -370,9 +376,6 @@ | |||||
| <ClCompile Include="..\..\Source\BinaryData\Templates\jucer_OpenGLComponentTemplate.cpp"> | <ClCompile Include="..\..\Source\BinaryData\Templates\jucer_OpenGLComponentTemplate.cpp"> | ||||
| <Filter>Projucer\BinaryData\Templates</Filter> | <Filter>Projucer\BinaryData\Templates</Filter> | ||||
| </ClCompile> | </ClCompile> | ||||
| <ClCompile Include="..\..\Source\BinaryData\Templates\jucer_PIPMain.cpp"> | |||||
| <Filter>Projucer\BinaryData\Templates</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\Source\CodeEditor\jucer_DocumentEditorComponent.cpp"> | <ClCompile Include="..\..\Source\CodeEditor\jucer_DocumentEditorComponent.cpp"> | ||||
| <Filter>Projucer\CodeEditor</Filter> | <Filter>Projucer\CodeEditor</Filter> | ||||
| </ClCompile> | </ClCompile> | ||||
| @@ -532,6 +535,36 @@ | |||||
| <ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp"> | <ClCompile Include="..\..\..\..\modules\juce_analytics\juce_analytics.cpp"> | ||||
| <Filter>JUCE Modules\juce_analytics</Filter> | <Filter>JUCE Modules\juce_analytics</Filter> | ||||
| </ClCompile> | </ClCompile> | ||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_BuildHelperFunctions.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_CppTokeniserFunctions.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_Entitlements.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_Icons.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_PlistOptions.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceFileHelpers.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceRc.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\utils\juce_VersionNumbers.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\Build\juce_build_tools\juce_build_tools.cpp"> | |||||
| <Filter>JUCE Modules\juce_build_tools</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.cpp"> | <ClCompile Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.cpp"> | ||||
| <Filter>JUCE Modules\juce_core\containers</Filter> | <Filter>JUCE Modules\juce_core\containers</Filter> | ||||
| </ClCompile> | </ClCompile> | ||||
| @@ -1819,6 +1852,9 @@ | |||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_analytics.cpp"> | <ClCompile Include="..\..\JuceLibraryCode\include_juce_analytics.cpp"> | ||||
| <Filter>JUCE Library Code</Filter> | <Filter>JUCE Library Code</Filter> | ||||
| </ClCompile> | </ClCompile> | ||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_build_tools.cpp"> | |||||
| <Filter>JUCE Library Code</Filter> | |||||
| </ClCompile> | |||||
| <ClCompile Include="..\..\JuceLibraryCode\include_juce_core.cpp"> | <ClCompile Include="..\..\JuceLibraryCode\include_juce_core.cpp"> | ||||
| <Filter>JUCE Library Code</Filter> | <Filter>JUCE Library Code</Filter> | ||||
| </ClCompile> | </ClCompile> | ||||
| @@ -2262,9 +2298,6 @@ | |||||
| <ClInclude Include="..\..\Source\Project\jucer_Project.h"> | <ClInclude Include="..\..\Source\Project\jucer_Project.h"> | ||||
| <Filter>Projucer\Project</Filter> | <Filter>Projucer\Project</Filter> | ||||
| </ClInclude> | </ClInclude> | ||||
| <ClInclude Include="..\..\Source\Project\jucer_ProjectType.h"> | |||||
| <Filter>Projucer\Project</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_Android.h"> | <ClInclude Include="..\..\Source\ProjectSaving\jucer_ProjectExport_Android.h"> | ||||
| <Filter>Projucer\ProjectSaving</Filter> | <Filter>Projucer\ProjectSaving</Filter> | ||||
| </ClInclude> | </ClInclude> | ||||
| @@ -2421,6 +2454,39 @@ | |||||
| <ClInclude Include="..\..\..\..\modules\juce_analytics\juce_analytics.h"> | <ClInclude Include="..\..\..\..\modules\juce_analytics\juce_analytics.h"> | ||||
| <Filter>JUCE Modules\juce_analytics</Filter> | <Filter>JUCE Modules\juce_analytics</Filter> | ||||
| </ClInclude> | </ClInclude> | ||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_BinaryResourceFile.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_BuildHelperFunctions.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_Entitlements.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_Icons.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_PlistOptions.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_ProjectType.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_RelativePath.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceFileHelpers.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_ResourceRc.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\utils\juce_VersionNumbers.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools\utils</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\Build\juce_build_tools\juce_build_tools.h"> | |||||
| <Filter>JUCE Modules\juce_build_tools</Filter> | |||||
| </ClInclude> | |||||
| <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.h"> | <ClInclude Include="..\..\..\..\modules\juce_core\containers\juce_AbstractFifo.h"> | ||||
| <Filter>JUCE Modules\juce_core\containers</Filter> | <Filter>JUCE Modules\juce_core\containers</Filter> | ||||
| </ClInclude> | </ClInclude> | ||||
| @@ -3647,6 +3713,24 @@ | |||||
| </ClInclude> | </ClInclude> | ||||
| </ItemGroup> | </ItemGroup> | ||||
| <ItemGroup> | <ItemGroup> | ||||
| <None Include="..\..\..\Build\CMake\LaunchScreen.storyboard"> | |||||
| <Filter>Projucer\BinaryData</Filter> | |||||
| </None> | |||||
| <None Include="..\..\..\Build\CMake\PIPAudioProcessor.cpp.in"> | |||||
| <Filter>Projucer\BinaryData</Filter> | |||||
| </None> | |||||
| <None Include="..\..\..\Build\CMake\PIPComponent.cpp.in"> | |||||
| <Filter>Projucer\BinaryData</Filter> | |||||
| </None> | |||||
| <None Include="..\..\..\Build\CMake\PIPConsole.cpp.in"> | |||||
| <Filter>Projucer\BinaryData</Filter> | |||||
| </None> | |||||
| <None Include="..\..\..\Build\CMake\RecentFilesMenuTemplate.nib"> | |||||
| <Filter>Projucer\BinaryData</Filter> | |||||
| </None> | |||||
| <None Include="..\..\..\Build\CMake\UnityPluginGUIScript.cs.in"> | |||||
| <Filter>Projucer\BinaryData</Filter> | |||||
| </None> | |||||
| <None Include="..\..\Source\BinaryData\gradle\gradle-wrapper.jar"> | <None Include="..\..\Source\BinaryData\gradle\gradle-wrapper.jar"> | ||||
| <Filter>Projucer\BinaryData\gradle</Filter> | <Filter>Projucer\BinaryData\gradle</Filter> | ||||
| </None> | </None> | ||||
| @@ -3719,9 +3803,6 @@ | |||||
| <None Include="..\..\Source\BinaryData\Icons\wizard_StaticLibrary.svg"> | <None Include="..\..\Source\BinaryData\Icons\wizard_StaticLibrary.svg"> | ||||
| <Filter>Projucer\BinaryData\Icons</Filter> | <Filter>Projucer\BinaryData\Icons</Filter> | ||||
| </None> | </None> | ||||
| <None Include="..\..\Source\BinaryData\Templates\jucer_UnityPluginGUIScript.cs"> | |||||
| <Filter>Projucer\BinaryData\Templates</Filter> | |||||
| </None> | |||||
| <None Include="..\..\Source\BinaryData\colourscheme_dark.xml"> | <None Include="..\..\Source\BinaryData\colourscheme_dark.xml"> | ||||
| <Filter>Projucer\BinaryData</Filter> | <Filter>Projucer\BinaryData</Filter> | ||||
| </None> | </None> | ||||
| @@ -3737,9 +3818,6 @@ | |||||
| <None Include="..\..\Source\BinaryData\projucer_EULA.txt"> | <None Include="..\..\Source\BinaryData\projucer_EULA.txt"> | ||||
| <Filter>Projucer\BinaryData</Filter> | <Filter>Projucer\BinaryData</Filter> | ||||
| </None> | </None> | ||||
| <None Include="..\..\Source\BinaryData\RecentFilesMenuTemplate.nib"> | |||||
| <Filter>Projucer\BinaryData</Filter> | |||||
| </None> | |||||
| <None Include="..\..\..\..\modules\juce_core\native\java\README.txt"> | <None Include="..\..\..\..\modules\juce_core\native\java\README.txt"> | ||||
| <Filter>JUCE Modules\juce_core\native\java</Filter> | <Filter>JUCE Modules\juce_core\native\java</Filter> | ||||
| </None> | </None> | ||||
| @@ -0,0 +1,166 @@ | |||||
| # ============================================================================== | |||||
| # | |||||
| # This file is part of the JUCE 6 technical preview. | |||||
| # Copyright (c) 2020 - ROLI Ltd. | |||||
| # | |||||
| # 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. | |||||
| # | |||||
| # ============================================================================== | |||||
| juce_add_gui_app(Projucer | |||||
| BUNDLE_ID com.juce.theprojucer | |||||
| ICON_BIG ${CMAKE_CURRENT_SOURCE_DIR}/Source/BinaryData/Icons/juce_icon.png | |||||
| DOCUMENT_EXTENSIONS jucer | |||||
| NEEDS_CURL TRUE | |||||
| NEEDS_WEB_BROWSER TRUE) | |||||
| juce_generate_juce_header(Projucer) | |||||
| # This is to work around a bug with how cmake computes language standard flags with | |||||
| # target_compile_features | |||||
| set_target_properties(Projucer PROPERTIES CXX_STANDARD 11) | |||||
| target_sources(Projucer PRIVATE | |||||
| Source/Application/jucer_AutoUpdater.cpp | |||||
| Source/Application/jucer_CommandLine.cpp | |||||
| Source/Application/jucer_Main.cpp | |||||
| Source/Application/jucer_MainWindow.cpp | |||||
| Source/Application/jucer_ProjucerAnalytics.cpp | |||||
| Source/CodeEditor/jucer_DocumentEditorComponent.cpp | |||||
| Source/CodeEditor/jucer_OpenDocumentManager.cpp | |||||
| Source/CodeEditor/jucer_SourceCodeEditor.cpp | |||||
| Source/ComponentEditor/Components/jucer_ComponentTypeHandler.cpp | |||||
| Source/ComponentEditor/Documents/jucer_ButtonDocument.cpp | |||||
| Source/ComponentEditor/Documents/jucer_ComponentDocument.cpp | |||||
| Source/ComponentEditor/PaintElements/jucer_ColouredElement.cpp | |||||
| Source/ComponentEditor/PaintElements/jucer_PaintElement.cpp | |||||
| Source/ComponentEditor/PaintElements/jucer_PaintElementGroup.cpp | |||||
| Source/ComponentEditor/PaintElements/jucer_PaintElementImage.cpp | |||||
| Source/ComponentEditor/PaintElements/jucer_PaintElementPath.cpp | |||||
| Source/ComponentEditor/UI/jucer_ComponentLayoutEditor.cpp | |||||
| Source/ComponentEditor/UI/jucer_ComponentOverlayComponent.cpp | |||||
| Source/ComponentEditor/UI/jucer_EditingPanelBase.cpp | |||||
| Source/ComponentEditor/UI/jucer_JucerDocumentEditor.cpp | |||||
| Source/ComponentEditor/UI/jucer_PaintRoutineEditor.cpp | |||||
| Source/ComponentEditor/UI/jucer_PaintRoutinePanel.cpp | |||||
| Source/ComponentEditor/UI/jucer_ResourceEditorPanel.cpp | |||||
| Source/ComponentEditor/UI/jucer_TestComponent.cpp | |||||
| Source/ComponentEditor/jucer_BinaryResources.cpp | |||||
| Source/ComponentEditor/jucer_ComponentLayout.cpp | |||||
| Source/ComponentEditor/jucer_GeneratedCode.cpp | |||||
| Source/ComponentEditor/jucer_JucerDocument.cpp | |||||
| Source/ComponentEditor/jucer_ObjectTypes.cpp | |||||
| Source/ComponentEditor/jucer_PaintRoutine.cpp | |||||
| Source/Licenses/jucer_LicenseController.cpp | |||||
| Source/LiveBuildEngine/jucer_CompileEngineClient.cpp | |||||
| Source/LiveBuildEngine/jucer_CompileEngineServer.cpp | |||||
| Source/LiveBuildEngine/jucer_DownloadCompileEngineThread.cpp | |||||
| Source/Project/UI/jucer_HeaderComponent.cpp | |||||
| Source/Project/jucer_Module.cpp | |||||
| Source/Project/jucer_Project.cpp | |||||
| Source/ProjectSaving/jucer_ProjectExporter.cpp | |||||
| Source/ProjectSaving/jucer_ProjectSaver.cpp | |||||
| Source/ProjectSaving/jucer_ResourceFile.cpp | |||||
| Source/Settings/jucer_AppearanceSettings.cpp | |||||
| Source/Settings/jucer_StoredSettings.cpp | |||||
| Source/Utility/Helpers/jucer_CodeHelpers.cpp | |||||
| Source/Utility/Helpers/jucer_FileHelpers.cpp | |||||
| Source/Utility/Helpers/jucer_MiscUtilities.cpp | |||||
| Source/Utility/Helpers/jucer_VersionInfo.cpp | |||||
| Source/Utility/PIPs/jucer_PIPGenerator.cpp | |||||
| Source/Utility/UI/jucer_Icons.cpp | |||||
| Source/Utility/UI/jucer_JucerTreeViewBase.cpp | |||||
| Source/Utility/UI/jucer_ProjucerLookAndFeel.cpp | |||||
| Source/Utility/UI/jucer_SlidingPanelComponent.cpp | |||||
| Source/Wizards/jucer_NewFileWizard.cpp | |||||
| Source/Wizards/jucer_NewProjectWizardClasses.cpp) | |||||
| target_compile_definitions(Projucer PRIVATE | |||||
| JUCE_ALLOW_STATIC_NULL_VARIABLES=0 | |||||
| JUCE_LOAD_CURL_SYMBOLS_LAZILY=1 | |||||
| JUCE_LOG_ASSERTIONS=1 | |||||
| JUCE_STRICT_REFCOUNTEDPOINTER=1 | |||||
| JUCE_USE_CURL=1 | |||||
| JUCE_WEB_BROWSER=1) | |||||
| juce_add_binary_data(ProjucerData SOURCES | |||||
| Source/BinaryData/Icons/background_logo.svg | |||||
| Source/BinaryData/Icons/export_android.svg | |||||
| Source/BinaryData/Icons/export_clion.svg | |||||
| Source/BinaryData/Icons/export_codeBlocks.svg | |||||
| Source/BinaryData/Icons/export_linux.svg | |||||
| Source/BinaryData/Icons/export_visualStudio.svg | |||||
| Source/BinaryData/Icons/export_xcode.svg | |||||
| Source/BinaryData/Icons/huckleberry_icon.svg | |||||
| Source/BinaryData/Icons/juce-logo-with-text.svg | |||||
| Source/BinaryData/Icons/juce_icon.png | |||||
| Source/BinaryData/Icons/wizard_AnimatedApp.svg | |||||
| Source/BinaryData/Icons/wizard_AudioApp.svg | |||||
| Source/BinaryData/Icons/wizard_AudioPlugin.svg | |||||
| Source/BinaryData/Icons/wizard_ConsoleApp.svg | |||||
| Source/BinaryData/Icons/wizard_DLL.svg | |||||
| Source/BinaryData/Icons/wizard_GUI.svg | |||||
| Source/BinaryData/Icons/wizard_Highlight.svg | |||||
| Source/BinaryData/Icons/wizard_OpenGL.svg | |||||
| Source/BinaryData/Icons/wizard_Openfile.svg | |||||
| Source/BinaryData/Icons/wizard_StaticLibrary.svg | |||||
| Source/BinaryData/Templates/jucer_AnimatedComponentSimpleTemplate.h | |||||
| Source/BinaryData/Templates/jucer_AnimatedComponentTemplate.cpp | |||||
| Source/BinaryData/Templates/jucer_AnimatedComponentTemplate.h | |||||
| Source/BinaryData/Templates/jucer_AudioComponentSimpleTemplate.h | |||||
| Source/BinaryData/Templates/jucer_AudioComponentTemplate.cpp | |||||
| Source/BinaryData/Templates/jucer_AudioComponentTemplate.h | |||||
| Source/BinaryData/Templates/jucer_AudioPluginEditorTemplate.cpp | |||||
| Source/BinaryData/Templates/jucer_AudioPluginEditorTemplate.h | |||||
| Source/BinaryData/Templates/jucer_AudioPluginFilterTemplate.cpp | |||||
| Source/BinaryData/Templates/jucer_AudioPluginFilterTemplate.h | |||||
| Source/BinaryData/Templates/jucer_ComponentTemplate.cpp | |||||
| Source/BinaryData/Templates/jucer_ComponentTemplate.h | |||||
| Source/BinaryData/Templates/jucer_ContentCompSimpleTemplate.h | |||||
| Source/BinaryData/Templates/jucer_ContentCompTemplate.cpp | |||||
| Source/BinaryData/Templates/jucer_ContentCompTemplate.h | |||||
| Source/BinaryData/Templates/jucer_InlineComponentTemplate.h | |||||
| Source/BinaryData/Templates/jucer_MainConsoleAppTemplate.cpp | |||||
| Source/BinaryData/Templates/jucer_MainTemplate_NoWindow.cpp | |||||
| Source/BinaryData/Templates/jucer_MainTemplate_SimpleWindow.cpp | |||||
| Source/BinaryData/Templates/jucer_MainTemplate_Window.cpp | |||||
| Source/BinaryData/Templates/jucer_NewComponentTemplate.cpp | |||||
| Source/BinaryData/Templates/jucer_NewComponentTemplate.h | |||||
| Source/BinaryData/Templates/jucer_NewCppFileTemplate.cpp | |||||
| Source/BinaryData/Templates/jucer_NewCppFileTemplate.h | |||||
| Source/BinaryData/Templates/jucer_NewInlineComponentTemplate.h | |||||
| Source/BinaryData/Templates/jucer_OpenGLComponentSimpleTemplate.h | |||||
| Source/BinaryData/Templates/jucer_OpenGLComponentTemplate.cpp | |||||
| Source/BinaryData/Templates/jucer_OpenGLComponentTemplate.h | |||||
| Source/BinaryData/Templates/jucer_PIPAudioProcessorTemplate.h | |||||
| Source/BinaryData/Templates/jucer_PIPTemplate.h | |||||
| Source/BinaryData/colourscheme_dark.xml | |||||
| Source/BinaryData/colourscheme_light.xml | |||||
| Source/BinaryData/gradle/LICENSE | |||||
| Source/BinaryData/gradle/gradle-wrapper.jar | |||||
| Source/BinaryData/gradle/gradlew | |||||
| Source/BinaryData/gradle/gradlew.bat | |||||
| Source/BinaryData/nothingtoseehere.txt | |||||
| Source/BinaryData/offlinepage.html | |||||
| Source/BinaryData/projucer_EULA.txt | |||||
| ../Build/CMake/LaunchScreen.storyboard | |||||
| ../Build/CMake/PIPAudioProcessor.cpp.in | |||||
| ../Build/CMake/PIPComponent.cpp.in | |||||
| ../Build/CMake/PIPConsole.cpp.in | |||||
| ../Build/CMake/RecentFilesMenuTemplate.nib | |||||
| ../Build/CMake/UnityPluginGUIScript.cs.in) | |||||
| target_link_libraries(Projucer PRIVATE | |||||
| ProjucerData | |||||
| juce::juce_analytics | |||||
| juce::juce_build_tools | |||||
| juce::juce_cryptography | |||||
| juce::juce_gui_extra) | |||||
| @@ -70,6 +70,7 @@ | |||||
| //============================================================================== | //============================================================================== | ||||
| #define JUCE_MODULE_AVAILABLE_juce_analytics 1 | #define JUCE_MODULE_AVAILABLE_juce_analytics 1 | ||||
| #define JUCE_MODULE_AVAILABLE_juce_build_tools 1 | |||||
| #define JUCE_MODULE_AVAILABLE_juce_core 1 | #define JUCE_MODULE_AVAILABLE_juce_core 1 | ||||
| #define JUCE_MODULE_AVAILABLE_juce_cryptography 1 | #define JUCE_MODULE_AVAILABLE_juce_cryptography 1 | ||||
| #define JUCE_MODULE_AVAILABLE_juce_data_structures 1 | #define JUCE_MODULE_AVAILABLE_juce_data_structures 1 | ||||
| @@ -8,6 +8,24 @@ | |||||
| namespace BinaryData | namespace BinaryData | ||||
| { | { | ||||
| extern const char* LaunchScreen_storyboard; | |||||
| const int LaunchScreen_storyboardSize = 1042; | |||||
| extern const char* PIPAudioProcessor_cpp_in; | |||||
| const int PIPAudioProcessor_cpp_inSize = 477; | |||||
| extern const char* PIPComponent_cpp_in; | |||||
| const int PIPComponent_cpp_inSize = 2162; | |||||
| extern const char* PIPConsole_cpp_in; | |||||
| const int PIPConsole_cpp_inSize = 299; | |||||
| extern const char* RecentFilesMenuTemplate_nib; | |||||
| const int RecentFilesMenuTemplate_nibSize = 2842; | |||||
| extern const char* UnityPluginGUIScript_cs_in; | |||||
| const int UnityPluginGUIScript_cs_inSize = 6424; | |||||
| extern const char* gradlewrapper_jar; | extern const char* gradlewrapper_jar; | ||||
| const int gradlewrapper_jarSize = 53636; | const int gradlewrapper_jarSize = 53636; | ||||
| @@ -167,15 +185,9 @@ namespace BinaryData | |||||
| extern const char* jucer_PIPAudioProcessorTemplate_h; | extern const char* jucer_PIPAudioProcessorTemplate_h; | ||||
| const int jucer_PIPAudioProcessorTemplate_hSize = 4926; | const int jucer_PIPAudioProcessorTemplate_hSize = 4926; | ||||
| extern const char* jucer_PIPMain_cpp; | |||||
| const int jucer_PIPMain_cppSize = 2421; | |||||
| extern const char* jucer_PIPTemplate_h; | extern const char* jucer_PIPTemplate_h; | ||||
| const int jucer_PIPTemplate_hSize = 517; | const int jucer_PIPTemplate_hSize = 517; | ||||
| extern const char* jucer_UnityPluginGUIScript_cs; | |||||
| const int jucer_UnityPluginGUIScript_csSize = 6433; | |||||
| extern const char* colourscheme_dark_xml; | extern const char* colourscheme_dark_xml; | ||||
| const int colourscheme_dark_xmlSize = 1050; | const int colourscheme_dark_xmlSize = 1050; | ||||
| @@ -191,11 +203,8 @@ namespace BinaryData | |||||
| extern const char* projucer_EULA_txt; | extern const char* projucer_EULA_txt; | ||||
| const int projucer_EULA_txtSize = 14361; | const int projucer_EULA_txtSize = 14361; | ||||
| extern const char* RecentFilesMenuTemplate_nib; | |||||
| const int RecentFilesMenuTemplate_nibSize = 2842; | |||||
| // Number of elements in the namedResourceList and originalFileNames arrays. | // Number of elements in the namedResourceList and originalFileNames arrays. | ||||
| const int namedResourceListSize = 62; | |||||
| const int namedResourceListSize = 65; | |||||
| // Points to the start of a list of resource names. | // Points to the start of a list of resource names. | ||||
| extern const char* namedResourceList[]; | extern const char* namedResourceList[]; | ||||
| @@ -15,6 +15,7 @@ | |||||
| #include "AppConfig.h" | #include "AppConfig.h" | ||||
| #include <juce_analytics/juce_analytics.h> | #include <juce_analytics/juce_analytics.h> | ||||
| #include <juce_build_tools/juce_build_tools.h> | |||||
| #include <juce_core/juce_core.h> | #include <juce_core/juce_core.h> | ||||
| #include <juce_cryptography/juce_cryptography.h> | #include <juce_cryptography/juce_cryptography.h> | ||||
| #include <juce_data_structures/juce_data_structures.h> | #include <juce_data_structures/juce_data_structures.h> | ||||
| @@ -0,0 +1,9 @@ | |||||
| /* | |||||
| IMPORTANT! This file is auto-generated each time you save your | |||||
| project - if you alter its contents, your changes may be overwritten! | |||||
| */ | |||||
| #include "AppConfig.h" | |||||
| #include <juce_build_tools/juce_build_tools.cpp> | |||||
| @@ -6,9 +6,9 @@ | |||||
| companyName="ROLI Ltd." companyCopyright="ROLI Ltd." cppLanguageStandard="11"> | companyName="ROLI Ltd." companyCopyright="ROLI Ltd." cppLanguageStandard="11"> | ||||
| <EXPORTFORMATS> | <EXPORTFORMATS> | ||||
| <XCODE_MAC targetFolder="Builds/MacOSX" vstFolder="~/SDKs/vstsdk2.4" rtasFolder="~/SDKs/PT_80_SDK" | <XCODE_MAC targetFolder="Builds/MacOSX" vstFolder="~/SDKs/vstsdk2.4" rtasFolder="~/SDKs/PT_80_SDK" | ||||
| documentExtensions=".jucer" objCExtraSuffix="zkVtji" bigIcon="rv1F4h" | |||||
| documentExtensions=".jucer" objCExtraSuffix="zkVtji" bigIcon="Zrx1Gl" | |||||
| extraFrameworks="AudioUnit; Accelerate; AVFoundation; CoreAudio; CoreAudioKit; CoreMIDI; DiscRecording; QuartzCore; AudioToolbox; OpenGL; QTKit; QuickTime" | extraFrameworks="AudioUnit; Accelerate; AVFoundation; CoreAudio; CoreAudioKit; CoreMIDI; DiscRecording; QuartzCore; AudioToolbox; OpenGL; QTKit; QuickTime" | ||||
| microphonePermissionNeeded="1" cameraPermissionNeeded="1"> | |||||
| microphonePermissionNeeded="1" cameraPermissionNeeded="1" smallIcon="Zrx1Gl"> | |||||
| <CONFIGURATIONS> | <CONFIGURATIONS> | ||||
| <CONFIGURATION name="Debug" isDebug="1" targetName="Projucer" cppLibType="libc++" | <CONFIGURATION name="Debug" isDebug="1" targetName="Projucer" cppLibType="libc++" | ||||
| recommendedWarnings="LLVM"/> | recommendedWarnings="LLVM"/> | ||||
| @@ -24,9 +24,11 @@ | |||||
| <MODULEPATH id="juce_cryptography" path="../../modules"/> | <MODULEPATH id="juce_cryptography" path="../../modules"/> | ||||
| <MODULEPATH id="juce_core" path="../../modules"/> | <MODULEPATH id="juce_core" path="../../modules"/> | ||||
| <MODULEPATH id="juce_analytics" path="../../modules"/> | <MODULEPATH id="juce_analytics" path="../../modules"/> | ||||
| <MODULEPATH id="juce_build_tools" path="../Build"/> | |||||
| </MODULEPATHS> | </MODULEPATHS> | ||||
| </XCODE_MAC> | </XCODE_MAC> | ||||
| <VS2015 targetFolder="Builds/VisualStudio2015" bigIcon="rv1F4h" extraCompilerFlags="/bigobj"> | |||||
| <VS2015 targetFolder="Builds/VisualStudio2015" bigIcon="Zrx1Gl" extraCompilerFlags="/bigobj" | |||||
| smallIcon="Zrx1Gl"> | |||||
| <CONFIGURATIONS> | <CONFIGURATIONS> | ||||
| <CONFIGURATION name="Debug" isDebug="1" targetName="Projucer" debugInformationFormat="ProgramDatabase" | <CONFIGURATION name="Debug" isDebug="1" targetName="Projucer" debugInformationFormat="ProgramDatabase" | ||||
| useRuntimeLibDLL="1"/> | useRuntimeLibDLL="1"/> | ||||
| @@ -42,9 +44,11 @@ | |||||
| <MODULEPATH id="juce_cryptography" path="../../modules"/> | <MODULEPATH id="juce_cryptography" path="../../modules"/> | ||||
| <MODULEPATH id="juce_core" path="../../modules"/> | <MODULEPATH id="juce_core" path="../../modules"/> | ||||
| <MODULEPATH id="juce_analytics" path="../../modules"/> | <MODULEPATH id="juce_analytics" path="../../modules"/> | ||||
| <MODULEPATH id="juce_build_tools" path="../Build"/> | |||||
| </MODULEPATHS> | </MODULEPATHS> | ||||
| </VS2015> | </VS2015> | ||||
| <VS2017 targetFolder="Builds/VisualStudio2017" bigIcon="rv1F4h" extraCompilerFlags="/w44265 /w45038 /w44062"> | |||||
| <VS2017 targetFolder="Builds/VisualStudio2017" bigIcon="Zrx1Gl" extraCompilerFlags="/w44265 /w45038 /w44062" | |||||
| smallIcon="Zrx1Gl"> | |||||
| <CONFIGURATIONS> | <CONFIGURATIONS> | ||||
| <CONFIGURATION name="Debug" isDebug="1" targetName="Projucer" useRuntimeLibDLL="0"/> | <CONFIGURATION name="Debug" isDebug="1" targetName="Projucer" useRuntimeLibDLL="0"/> | ||||
| <CONFIGURATION name="Release" isDebug="0" optimisation="3" targetName="Projucer" | <CONFIGURATION name="Release" isDebug="0" optimisation="3" targetName="Projucer" | ||||
| @@ -59,9 +63,11 @@ | |||||
| <MODULEPATH id="juce_cryptography" path="../../modules"/> | <MODULEPATH id="juce_cryptography" path="../../modules"/> | ||||
| <MODULEPATH id="juce_core" path="../../modules"/> | <MODULEPATH id="juce_core" path="../../modules"/> | ||||
| <MODULEPATH id="juce_analytics" path="../../modules"/> | <MODULEPATH id="juce_analytics" path="../../modules"/> | ||||
| <MODULEPATH id="juce_build_tools" path="../Build"/> | |||||
| </MODULEPATHS> | </MODULEPATHS> | ||||
| </VS2017> | </VS2017> | ||||
| <VS2019 targetFolder="Builds/VisualStudio2019" bigIcon="rv1F4h" extraCompilerFlags="/w44265 /w45038 /w44062"> | |||||
| <VS2019 targetFolder="Builds/VisualStudio2019" bigIcon="Zrx1Gl" extraCompilerFlags="/w44265 /w45038 /w44062" | |||||
| smallIcon="Zrx1Gl"> | |||||
| <CONFIGURATIONS> | <CONFIGURATIONS> | ||||
| <CONFIGURATION name="Debug" isDebug="1" targetName="Projucer" useRuntimeLibDLL="0"/> | <CONFIGURATION name="Debug" isDebug="1" targetName="Projucer" useRuntimeLibDLL="0"/> | ||||
| <CONFIGURATION name="Release" isDebug="0" optimisation="3" targetName="Projucer" | <CONFIGURATION name="Release" isDebug="0" optimisation="3" targetName="Projucer" | ||||
| @@ -76,9 +82,10 @@ | |||||
| <MODULEPATH id="juce_cryptography" path="../../modules"/> | <MODULEPATH id="juce_cryptography" path="../../modules"/> | ||||
| <MODULEPATH id="juce_core" path="../../modules"/> | <MODULEPATH id="juce_core" path="../../modules"/> | ||||
| <MODULEPATH id="juce_analytics" path="../../modules"/> | <MODULEPATH id="juce_analytics" path="../../modules"/> | ||||
| <MODULEPATH id="juce_build_tools" path="../Build"/> | |||||
| </MODULEPATHS> | </MODULEPATHS> | ||||
| </VS2019> | </VS2019> | ||||
| <LINUX_MAKE targetFolder="Builds/LinuxMakefile" bigIcon="rv1F4h"> | |||||
| <LINUX_MAKE targetFolder="Builds/LinuxMakefile" bigIcon="Zrx1Gl" smallIcon="Zrx1Gl"> | |||||
| <CONFIGURATIONS> | <CONFIGURATIONS> | ||||
| <CONFIGURATION name="Debug" isDebug="1" targetName="Projucer"/> | <CONFIGURATION name="Debug" isDebug="1" targetName="Projucer"/> | ||||
| <CONFIGURATION name="Release" isDebug="0" targetName="Projucer"/> | <CONFIGURATION name="Release" isDebug="0" targetName="Projucer"/> | ||||
| @@ -92,6 +99,7 @@ | |||||
| <MODULEPATH id="juce_cryptography" path="../../modules"/> | <MODULEPATH id="juce_cryptography" path="../../modules"/> | ||||
| <MODULEPATH id="juce_core" path="../../modules"/> | <MODULEPATH id="juce_core" path="../../modules"/> | ||||
| <MODULEPATH id="juce_analytics" path="../../modules"/> | <MODULEPATH id="juce_analytics" path="../../modules"/> | ||||
| <MODULEPATH id="juce_build_tools" path="../Build"/> | |||||
| </MODULEPATHS> | </MODULEPATHS> | ||||
| </LINUX_MAKE> | </LINUX_MAKE> | ||||
| </EXPORTFORMATS> | </EXPORTFORMATS> | ||||
| @@ -144,131 +152,137 @@ | |||||
| <FILE id="spHBY0" name="jucer_ProjucerAnalytics.h" compile="0" resource="0" | <FILE id="spHBY0" name="jucer_ProjucerAnalytics.h" compile="0" resource="0" | ||||
| file="Source/Application/jucer_ProjucerAnalytics.h"/> | file="Source/Application/jucer_ProjucerAnalytics.h"/> | ||||
| </GROUP> | </GROUP> | ||||
| <GROUP id="{8853BD6C-8307-BCF8-65BE-6A2F57093B40}" name="BinaryData"> | |||||
| <GROUP id="{1A183456-21D3-225D-99E4-93B1A8E8C43A}" name="gradle"> | |||||
| <FILE id="iKvP2G" name="gradle-wrapper.jar" compile="0" resource="1" | |||||
| <GROUP id="{BFDB3102-5EB6-41E0-043A-05C0DFF7A34D}" name="BinaryData"> | |||||
| <FILE id="QRvesq" name="LaunchScreen.storyboard" compile="0" resource="1" | |||||
| file="../Build/CMake/LaunchScreen.storyboard"/> | |||||
| <FILE id="QCgjY8" name="PIPAudioProcessor.cpp.in" compile="0" resource="1" | |||||
| file="../Build/CMake/PIPAudioProcessor.cpp.in"/> | |||||
| <FILE id="AwIYFr" name="PIPComponent.cpp.in" compile="0" resource="1" | |||||
| file="../Build/CMake/PIPComponent.cpp.in"/> | |||||
| <FILE id="SncItz" name="PIPConsole.cpp.in" compile="0" resource="1" | |||||
| file="../Build/CMake/PIPConsole.cpp.in"/> | |||||
| <FILE id="xokhSP" name="RecentFilesMenuTemplate.nib" compile="0" resource="1" | |||||
| file="../Build/CMake/RecentFilesMenuTemplate.nib"/> | |||||
| <FILE id="H4EF8K" name="UnityPluginGUIScript.cs.in" compile="0" resource="1" | |||||
| file="../Build/CMake/UnityPluginGUIScript.cs.in"/> | |||||
| <GROUP id="{6528902B-862F-277C-31AA-6F6283E7D5C8}" name="gradle"> | |||||
| <FILE id="HA0Kl7" name="gradle-wrapper.jar" compile="0" resource="1" | |||||
| file="Source/BinaryData/gradle/gradle-wrapper.jar"/> | file="Source/BinaryData/gradle/gradle-wrapper.jar"/> | ||||
| <FILE id="Ap8FMN" name="gradlew" compile="0" resource="1" file="Source/BinaryData/gradle/gradlew"/> | |||||
| <FILE id="dv12Xk" name="gradlew.bat" compile="0" resource="1" file="Source/BinaryData/gradle/gradlew.bat"/> | |||||
| <FILE id="Df6IUU" name="LICENSE" compile="0" resource="1" file="Source/BinaryData/gradle/LICENSE"/> | |||||
| <FILE id="RmqRJ9" name="gradlew" compile="0" resource="1" file="Source/BinaryData/gradle/gradlew"/> | |||||
| <FILE id="gOeI5K" name="gradlew.bat" compile="0" resource="1" file="Source/BinaryData/gradle/gradlew.bat"/> | |||||
| <FILE id="xtpyoD" name="LICENSE" compile="0" resource="1" file="Source/BinaryData/gradle/LICENSE"/> | |||||
| </GROUP> | </GROUP> | ||||
| <GROUP id="{C49A0B44-304A-389D-AAB0-06169AD6ABAD}" name="Icons"> | |||||
| <FILE id="kyKYL7" name="background_logo.svg" compile="0" resource="1" | |||||
| <GROUP id="{85F5CA8E-1014-692B-2677-292237A41AF5}" name="Icons"> | |||||
| <FILE id="HvDzzK" name="background_logo.svg" compile="0" resource="1" | |||||
| file="Source/BinaryData/Icons/background_logo.svg"/> | file="Source/BinaryData/Icons/background_logo.svg"/> | ||||
| <FILE id="csCUBK" name="export_android.svg" compile="0" resource="1" | |||||
| <FILE id="qqeJmA" name="export_android.svg" compile="0" resource="1" | |||||
| file="Source/BinaryData/Icons/export_android.svg"/> | file="Source/BinaryData/Icons/export_android.svg"/> | ||||
| <FILE id="ILM268" name="export_clion.svg" compile="0" resource="1" | |||||
| <FILE id="WF3jeY" name="export_clion.svg" compile="0" resource="1" | |||||
| file="Source/BinaryData/Icons/export_clion.svg"/> | file="Source/BinaryData/Icons/export_clion.svg"/> | ||||
| <FILE id="aEHhYA" name="export_codeBlocks.svg" compile="0" resource="1" | |||||
| <FILE id="FiwPHz" name="export_codeBlocks.svg" compile="0" resource="1" | |||||
| file="Source/BinaryData/Icons/export_codeBlocks.svg"/> | file="Source/BinaryData/Icons/export_codeBlocks.svg"/> | ||||
| <FILE id="gT2nPs" name="export_linux.svg" compile="0" resource="1" | |||||
| <FILE id="WBmsi6" name="export_linux.svg" compile="0" resource="1" | |||||
| file="Source/BinaryData/Icons/export_linux.svg"/> | file="Source/BinaryData/Icons/export_linux.svg"/> | ||||
| <FILE id="woYtVL" name="export_visualStudio.svg" compile="0" resource="1" | |||||
| <FILE id="fETsmT" name="export_visualStudio.svg" compile="0" resource="1" | |||||
| file="Source/BinaryData/Icons/export_visualStudio.svg"/> | file="Source/BinaryData/Icons/export_visualStudio.svg"/> | ||||
| <FILE id="rgD9FB" name="export_xcode.svg" compile="0" resource="1" | |||||
| <FILE id="G0oYd6" name="export_xcode.svg" compile="0" resource="1" | |||||
| file="Source/BinaryData/Icons/export_xcode.svg"/> | file="Source/BinaryData/Icons/export_xcode.svg"/> | ||||
| <FILE id="xH7xtt" name="huckleberry_icon.svg" compile="0" resource="1" | |||||
| <FILE id="k4zzKu" name="huckleberry_icon.svg" compile="0" resource="1" | |||||
| file="Source/BinaryData/Icons/huckleberry_icon.svg"/> | file="Source/BinaryData/Icons/huckleberry_icon.svg"/> | ||||
| <FILE id="LKlNVR" name="juce-logo-with-text.svg" compile="0" resource="1" | |||||
| <FILE id="Pk2LIn" name="juce-logo-with-text.svg" compile="0" resource="1" | |||||
| file="Source/BinaryData/Icons/juce-logo-with-text.svg"/> | file="Source/BinaryData/Icons/juce-logo-with-text.svg"/> | ||||
| <FILE id="rv1F4h" name="juce_icon.png" compile="0" resource="1" file="Source/BinaryData/Icons/juce_icon.png"/> | |||||
| <FILE id="g5vwqt" name="wizard_AnimatedApp.svg" compile="0" resource="1" | |||||
| <FILE id="Zrx1Gl" name="juce_icon.png" compile="0" resource="1" file="Source/BinaryData/Icons/juce_icon.png"/> | |||||
| <FILE id="iPYmG9" name="wizard_AnimatedApp.svg" compile="0" resource="1" | |||||
| file="Source/BinaryData/Icons/wizard_AnimatedApp.svg"/> | file="Source/BinaryData/Icons/wizard_AnimatedApp.svg"/> | ||||
| <FILE id="inzYsC" name="wizard_AudioApp.svg" compile="0" resource="1" | |||||
| <FILE id="nAIo3Q" name="wizard_AudioApp.svg" compile="0" resource="1" | |||||
| file="Source/BinaryData/Icons/wizard_AudioApp.svg"/> | file="Source/BinaryData/Icons/wizard_AudioApp.svg"/> | ||||
| <FILE id="ZQgRRl" name="wizard_AudioPlugin.svg" compile="0" resource="1" | |||||
| <FILE id="hwarU2" name="wizard_AudioPlugin.svg" compile="0" resource="1" | |||||
| file="Source/BinaryData/Icons/wizard_AudioPlugin.svg"/> | file="Source/BinaryData/Icons/wizard_AudioPlugin.svg"/> | ||||
| <FILE id="jOtJaP" name="wizard_ConsoleApp.svg" compile="0" resource="1" | |||||
| <FILE id="SMzg53" name="wizard_ConsoleApp.svg" compile="0" resource="1" | |||||
| file="Source/BinaryData/Icons/wizard_ConsoleApp.svg"/> | file="Source/BinaryData/Icons/wizard_ConsoleApp.svg"/> | ||||
| <FILE id="O2L6xg" name="wizard_DLL.svg" compile="0" resource="1" file="Source/BinaryData/Icons/wizard_DLL.svg"/> | |||||
| <FILE id="u5Kfkt" name="wizard_GUI.svg" compile="0" resource="1" file="Source/BinaryData/Icons/wizard_GUI.svg"/> | |||||
| <FILE id="fgDQ9M" name="wizard_Highlight.svg" compile="0" resource="1" | |||||
| <FILE id="YG6Eva" name="wizard_DLL.svg" compile="0" resource="1" file="Source/BinaryData/Icons/wizard_DLL.svg"/> | |||||
| <FILE id="obZCkC" name="wizard_GUI.svg" compile="0" resource="1" file="Source/BinaryData/Icons/wizard_GUI.svg"/> | |||||
| <FILE id="U47vkJ" name="wizard_Highlight.svg" compile="0" resource="1" | |||||
| file="Source/BinaryData/Icons/wizard_Highlight.svg"/> | file="Source/BinaryData/Icons/wizard_Highlight.svg"/> | ||||
| <FILE id="XUBtiD" name="wizard_Openfile.svg" compile="0" resource="1" | |||||
| <FILE id="k4YA4V" name="wizard_Openfile.svg" compile="0" resource="1" | |||||
| file="Source/BinaryData/Icons/wizard_Openfile.svg"/> | file="Source/BinaryData/Icons/wizard_Openfile.svg"/> | ||||
| <FILE id="IwMd6Z" name="wizard_OpenGL.svg" compile="0" resource="1" | |||||
| <FILE id="jYodWX" name="wizard_OpenGL.svg" compile="0" resource="1" | |||||
| file="Source/BinaryData/Icons/wizard_OpenGL.svg"/> | file="Source/BinaryData/Icons/wizard_OpenGL.svg"/> | ||||
| <FILE id="mzlH8U" name="wizard_StaticLibrary.svg" compile="0" resource="1" | |||||
| <FILE id="Rbi6lX" name="wizard_StaticLibrary.svg" compile="0" resource="1" | |||||
| file="Source/BinaryData/Icons/wizard_StaticLibrary.svg"/> | file="Source/BinaryData/Icons/wizard_StaticLibrary.svg"/> | ||||
| </GROUP> | </GROUP> | ||||
| <GROUP id="{D5514787-89A7-C727-422F-2BF9D9C6CF70}" name="Templates"> | |||||
| <FILE id="thU560" name="jucer_AnimatedComponentSimpleTemplate.h" compile="0" | |||||
| <GROUP id="{A8B4BB53-2426-F6A0-9FB1-463BB9D64DB4}" name="Templates"> | |||||
| <FILE id="Uadbrm" name="jucer_AnimatedComponentSimpleTemplate.h" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_AnimatedComponentSimpleTemplate.h"/> | resource="1" file="Source/BinaryData/Templates/jucer_AnimatedComponentSimpleTemplate.h"/> | ||||
| <FILE id="GCUpe7" name="jucer_AnimatedComponentTemplate.cpp" compile="0" | |||||
| <FILE id="fFFqLB" name="jucer_AnimatedComponentTemplate.cpp" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_AnimatedComponentTemplate.cpp"/> | resource="1" file="Source/BinaryData/Templates/jucer_AnimatedComponentTemplate.cpp"/> | ||||
| <FILE id="if7mRo" name="jucer_AnimatedComponentTemplate.h" compile="0" | |||||
| <FILE id="Wh7G1x" name="jucer_AnimatedComponentTemplate.h" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_AnimatedComponentTemplate.h"/> | resource="1" file="Source/BinaryData/Templates/jucer_AnimatedComponentTemplate.h"/> | ||||
| <FILE id="o5WUW4" name="jucer_AudioComponentSimpleTemplate.h" compile="0" | |||||
| <FILE id="jzLsG8" name="jucer_AudioComponentSimpleTemplate.h" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_AudioComponentSimpleTemplate.h"/> | resource="1" file="Source/BinaryData/Templates/jucer_AudioComponentSimpleTemplate.h"/> | ||||
| <FILE id="xynUPZ" name="jucer_AudioComponentTemplate.cpp" compile="0" | |||||
| <FILE id="BzvUrn" name="jucer_AudioComponentTemplate.cpp" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_AudioComponentTemplate.cpp"/> | resource="1" file="Source/BinaryData/Templates/jucer_AudioComponentTemplate.cpp"/> | ||||
| <FILE id="zC555M" name="jucer_AudioComponentTemplate.h" compile="0" | |||||
| <FILE id="i9bm2b" name="jucer_AudioComponentTemplate.h" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_AudioComponentTemplate.h"/> | resource="1" file="Source/BinaryData/Templates/jucer_AudioComponentTemplate.h"/> | ||||
| <FILE id="A3dhSd" name="jucer_AudioPluginEditorTemplate.cpp" compile="0" | |||||
| <FILE id="BYSiw7" name="jucer_AudioPluginEditorTemplate.cpp" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_AudioPluginEditorTemplate.cpp"/> | resource="1" file="Source/BinaryData/Templates/jucer_AudioPluginEditorTemplate.cpp"/> | ||||
| <FILE id="TPGNqq" name="jucer_AudioPluginEditorTemplate.h" compile="0" | |||||
| <FILE id="wcuIlm" name="jucer_AudioPluginEditorTemplate.h" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_AudioPluginEditorTemplate.h"/> | resource="1" file="Source/BinaryData/Templates/jucer_AudioPluginEditorTemplate.h"/> | ||||
| <FILE id="mKYQMY" name="jucer_AudioPluginFilterTemplate.cpp" compile="0" | |||||
| <FILE id="Ik2XYj" name="jucer_AudioPluginFilterTemplate.cpp" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_AudioPluginFilterTemplate.cpp"/> | resource="1" file="Source/BinaryData/Templates/jucer_AudioPluginFilterTemplate.cpp"/> | ||||
| <FILE id="lxnKNQ" name="jucer_AudioPluginFilterTemplate.h" compile="0" | |||||
| <FILE id="ZuBmpP" name="jucer_AudioPluginFilterTemplate.h" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_AudioPluginFilterTemplate.h"/> | resource="1" file="Source/BinaryData/Templates/jucer_AudioPluginFilterTemplate.h"/> | ||||
| <FILE id="lK02mj" name="jucer_ComponentTemplate.cpp" compile="0" resource="1" | |||||
| <FILE id="fnjYOi" name="jucer_ComponentTemplate.cpp" compile="0" resource="1" | |||||
| file="Source/BinaryData/Templates/jucer_ComponentTemplate.cpp"/> | file="Source/BinaryData/Templates/jucer_ComponentTemplate.cpp"/> | ||||
| <FILE id="LZik3e" name="jucer_ComponentTemplate.h" compile="0" resource="1" | |||||
| <FILE id="BlVkqH" name="jucer_ComponentTemplate.h" compile="0" resource="1" | |||||
| file="Source/BinaryData/Templates/jucer_ComponentTemplate.h"/> | file="Source/BinaryData/Templates/jucer_ComponentTemplate.h"/> | ||||
| <FILE id="cTnZ6j" name="jucer_ContentCompSimpleTemplate.h" compile="0" | |||||
| <FILE id="xfOeO3" name="jucer_ContentCompSimpleTemplate.h" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_ContentCompSimpleTemplate.h"/> | resource="1" file="Source/BinaryData/Templates/jucer_ContentCompSimpleTemplate.h"/> | ||||
| <FILE id="yYPIFT" name="jucer_ContentCompTemplate.cpp" compile="0" | |||||
| <FILE id="HX3JPg" name="jucer_ContentCompTemplate.cpp" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_ContentCompTemplate.cpp"/> | resource="1" file="Source/BinaryData/Templates/jucer_ContentCompTemplate.cpp"/> | ||||
| <FILE id="Ze6RvS" name="jucer_ContentCompTemplate.h" compile="0" resource="1" | |||||
| <FILE id="QTVhfj" name="jucer_ContentCompTemplate.h" compile="0" resource="1" | |||||
| file="Source/BinaryData/Templates/jucer_ContentCompTemplate.h"/> | file="Source/BinaryData/Templates/jucer_ContentCompTemplate.h"/> | ||||
| <FILE id="SSXmPL" name="jucer_InlineComponentTemplate.h" compile="0" | |||||
| <FILE id="PuyOnZ" name="jucer_InlineComponentTemplate.h" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_InlineComponentTemplate.h"/> | resource="1" file="Source/BinaryData/Templates/jucer_InlineComponentTemplate.h"/> | ||||
| <FILE id="DIZd10" name="jucer_MainConsoleAppTemplate.cpp" compile="0" | |||||
| <FILE id="FwmOVk" name="jucer_MainConsoleAppTemplate.cpp" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_MainConsoleAppTemplate.cpp"/> | resource="1" file="Source/BinaryData/Templates/jucer_MainConsoleAppTemplate.cpp"/> | ||||
| <FILE id="vbXfRZ" name="jucer_MainTemplate_NoWindow.cpp" compile="0" | |||||
| <FILE id="IW9dIW" name="jucer_MainTemplate_NoWindow.cpp" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_MainTemplate_NoWindow.cpp"/> | resource="1" file="Source/BinaryData/Templates/jucer_MainTemplate_NoWindow.cpp"/> | ||||
| <FILE id="mh39Tv" name="jucer_MainTemplate_SimpleWindow.cpp" compile="0" | |||||
| <FILE id="SOsB1w" name="jucer_MainTemplate_SimpleWindow.cpp" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_MainTemplate_SimpleWindow.cpp"/> | resource="1" file="Source/BinaryData/Templates/jucer_MainTemplate_SimpleWindow.cpp"/> | ||||
| <FILE id="H3c6AE" name="jucer_MainTemplate_Window.cpp" compile="0" | |||||
| <FILE id="Zx5T5B" name="jucer_MainTemplate_Window.cpp" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_MainTemplate_Window.cpp"/> | resource="1" file="Source/BinaryData/Templates/jucer_MainTemplate_Window.cpp"/> | ||||
| <FILE id="lCVXSL" name="jucer_NewComponentTemplate.cpp" compile="0" | |||||
| <FILE id="jCBXcQ" name="jucer_NewComponentTemplate.cpp" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_NewComponentTemplate.cpp"/> | resource="1" file="Source/BinaryData/Templates/jucer_NewComponentTemplate.cpp"/> | ||||
| <FILE id="nsaLHZ" name="jucer_NewComponentTemplate.h" compile="0" resource="1" | |||||
| <FILE id="Jmpp81" name="jucer_NewComponentTemplate.h" compile="0" resource="1" | |||||
| file="Source/BinaryData/Templates/jucer_NewComponentTemplate.h"/> | file="Source/BinaryData/Templates/jucer_NewComponentTemplate.h"/> | ||||
| <FILE id="edeOEj" name="jucer_NewCppFileTemplate.cpp" compile="0" resource="1" | |||||
| <FILE id="mJuFw3" name="jucer_NewCppFileTemplate.cpp" compile="0" resource="1" | |||||
| file="Source/BinaryData/Templates/jucer_NewCppFileTemplate.cpp"/> | file="Source/BinaryData/Templates/jucer_NewCppFileTemplate.cpp"/> | ||||
| <FILE id="tXjAnD" name="jucer_NewCppFileTemplate.h" compile="0" resource="1" | |||||
| <FILE id="AMybWD" name="jucer_NewCppFileTemplate.h" compile="0" resource="1" | |||||
| file="Source/BinaryData/Templates/jucer_NewCppFileTemplate.h"/> | file="Source/BinaryData/Templates/jucer_NewCppFileTemplate.h"/> | ||||
| <FILE id="gqGzE1" name="jucer_NewInlineComponentTemplate.h" compile="0" | |||||
| <FILE id="UfHALE" name="jucer_NewInlineComponentTemplate.h" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_NewInlineComponentTemplate.h"/> | resource="1" file="Source/BinaryData/Templates/jucer_NewInlineComponentTemplate.h"/> | ||||
| <FILE id="EfEiMx" name="jucer_OpenGLComponentSimpleTemplate.h" compile="0" | |||||
| <FILE id="l16bPj" name="jucer_OpenGLComponentSimpleTemplate.h" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_OpenGLComponentSimpleTemplate.h"/> | resource="1" file="Source/BinaryData/Templates/jucer_OpenGLComponentSimpleTemplate.h"/> | ||||
| <FILE id="fSnbWk" name="jucer_OpenGLComponentTemplate.cpp" compile="0" | |||||
| <FILE id="r1X5GG" name="jucer_OpenGLComponentTemplate.cpp" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_OpenGLComponentTemplate.cpp"/> | resource="1" file="Source/BinaryData/Templates/jucer_OpenGLComponentTemplate.cpp"/> | ||||
| <FILE id="Edyh5d" name="jucer_OpenGLComponentTemplate.h" compile="0" | |||||
| <FILE id="FBo5Mj" name="jucer_OpenGLComponentTemplate.h" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_OpenGLComponentTemplate.h"/> | resource="1" file="Source/BinaryData/Templates/jucer_OpenGLComponentTemplate.h"/> | ||||
| <FILE id="BVHe2G" name="jucer_PIPAudioProcessorTemplate.h" compile="0" | |||||
| <FILE id="e0zFrj" name="jucer_PIPAudioProcessorTemplate.h" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_PIPAudioProcessorTemplate.h"/> | resource="1" file="Source/BinaryData/Templates/jucer_PIPAudioProcessorTemplate.h"/> | ||||
| <FILE id="aUkNL5" name="jucer_PIPMain.cpp" compile="0" resource="1" | |||||
| file="Source/BinaryData/Templates/jucer_PIPMain.cpp"/> | |||||
| <FILE id="WqDCf0" name="jucer_PIPTemplate.h" compile="0" resource="1" | |||||
| <FILE id="iamwVV" name="jucer_PIPTemplate.h" compile="0" resource="1" | |||||
| file="Source/BinaryData/Templates/jucer_PIPTemplate.h"/> | file="Source/BinaryData/Templates/jucer_PIPTemplate.h"/> | ||||
| <FILE id="wrkU1v" name="jucer_UnityPluginGUIScript.cs" compile="0" | |||||
| resource="1" file="Source/BinaryData/Templates/jucer_UnityPluginGUIScript.cs"/> | |||||
| </GROUP> | </GROUP> | ||||
| <FILE id="oXM3fR" name="colourscheme_dark.xml" compile="0" resource="1" | |||||
| <FILE id="Dfk9dC" name="colourscheme_dark.xml" compile="0" resource="1" | |||||
| file="Source/BinaryData/colourscheme_dark.xml"/> | file="Source/BinaryData/colourscheme_dark.xml"/> | ||||
| <FILE id="ZZ5K4s" name="colourscheme_light.xml" compile="0" resource="1" | |||||
| <FILE id="bvFank" name="colourscheme_light.xml" compile="0" resource="1" | |||||
| file="Source/BinaryData/colourscheme_light.xml"/> | file="Source/BinaryData/colourscheme_light.xml"/> | ||||
| <FILE id="gjEdBX" name="nothingtoseehere.txt" compile="0" resource="1" | |||||
| <FILE id="lBlcfb" name="nothingtoseehere.txt" compile="0" resource="1" | |||||
| file="Source/BinaryData/nothingtoseehere.txt"/> | file="Source/BinaryData/nothingtoseehere.txt"/> | ||||
| <FILE id="ckpkjs" name="offlinepage.html" compile="0" resource="1" | |||||
| <FILE id="vb8G2I" name="offlinepage.html" compile="0" resource="1" | |||||
| file="Source/BinaryData/offlinepage.html"/> | file="Source/BinaryData/offlinepage.html"/> | ||||
| <FILE id="kT5f0b" name="projucer_EULA.txt" compile="0" resource="1" | |||||
| <FILE id="tqxmy4" name="projucer_EULA.txt" compile="0" resource="1" | |||||
| file="Source/BinaryData/projucer_EULA.txt"/> | file="Source/BinaryData/projucer_EULA.txt"/> | ||||
| <FILE id="Y4HEng" name="RecentFilesMenuTemplate.nib" compile="0" resource="1" | |||||
| file="Source/BinaryData/RecentFilesMenuTemplate.nib"/> | |||||
| </GROUP> | </GROUP> | ||||
| <GROUP id="{A5AE7471-B900-FD9D-8DE7-2FB68D11AE30}" name="CodeEditor"> | <GROUP id="{A5AE7471-B900-FD9D-8DE7-2FB68D11AE30}" name="CodeEditor"> | ||||
| <FILE id="w3ka6n" name="jucer_DocumentEditorComponent.cpp" compile="1" | <FILE id="w3ka6n" name="jucer_DocumentEditorComponent.cpp" compile="1" | ||||
| @@ -571,8 +585,6 @@ | |||||
| <FILE id="JT1rMJ" name="jucer_Project.cpp" compile="1" resource="0" | <FILE id="JT1rMJ" name="jucer_Project.cpp" compile="1" resource="0" | ||||
| file="Source/Project/jucer_Project.cpp"/> | file="Source/Project/jucer_Project.cpp"/> | ||||
| <FILE id="bUjtVS" name="jucer_Project.h" compile="0" resource="0" file="Source/Project/jucer_Project.h"/> | <FILE id="bUjtVS" name="jucer_Project.h" compile="0" resource="0" file="Source/Project/jucer_Project.h"/> | ||||
| <FILE id="LuEXHg" name="jucer_ProjectType.h" compile="0" resource="0" | |||||
| file="Source/Project/jucer_ProjectType.h"/> | |||||
| </GROUP> | </GROUP> | ||||
| <GROUP id="{00CEE998-91CD-5001-DE85-4F4895E99A32}" name="ProjectSaving"> | <GROUP id="{00CEE998-91CD-5001-DE85-4F4895E99A32}" name="ProjectSaving"> | ||||
| <FILE id="JBLk8Y" name="jucer_ProjectExport_Android.h" compile="0" | <FILE id="JBLk8Y" name="jucer_ProjectExport_Android.h" compile="0" | ||||
| @@ -718,6 +730,7 @@ | |||||
| JUCE_STRICT_REFCOUNTEDPOINTER="1" JUCE_LOAD_CURL_SYMBOLS_LAZILY="1"/> | JUCE_STRICT_REFCOUNTEDPOINTER="1" JUCE_LOAD_CURL_SYMBOLS_LAZILY="1"/> | ||||
| <MODULES> | <MODULES> | ||||
| <MODULE id="juce_analytics" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/> | <MODULE id="juce_analytics" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/> | ||||
| <MODULE id="juce_build_tools" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/> | |||||
| <MODULE id="juce_core" showAllCode="1"/> | <MODULE id="juce_core" showAllCode="1"/> | ||||
| <MODULE id="juce_cryptography" showAllCode="1"/> | <MODULE id="juce_cryptography" showAllCode="1"/> | ||||
| <MODULE id="juce_data_structures" showAllCode="1"/> | <MODULE id="juce_data_structures" showAllCode="1"/> | ||||
| @@ -77,7 +77,7 @@ public: | |||||
| MemoryOutputStream out; | MemoryOutputStream out; | ||||
| out << "static const unsigned char pathData[] = "; | out << "static const unsigned char pathData[] = "; | ||||
| CodeHelpers::writeDataAsCppLiteral (data.getMemoryBlock(), out, false, true); | |||||
| build_tools::writeDataAsCppLiteral (data.getMemoryBlock(), out, false, true); | |||||
| out << newLine | out << newLine | ||||
| << newLine | << newLine | ||||
| << "Path path;" << newLine | << "Path path;" << newLine | ||||
| @@ -629,11 +629,11 @@ namespace | |||||
| MemoryBlock data; | MemoryBlock data; | ||||
| FileInputStream input (source); | FileInputStream input (source); | ||||
| input.readIntoMemoryBlock (data); | input.readIntoMemoryBlock (data); | ||||
| CodeHelpers::writeDataAsCppLiteral (data, literal, true, true); | |||||
| build_tools::writeDataAsCppLiteral (data, literal, true, true); | |||||
| dataSize = data.getSize(); | dataSize = data.getSize(); | ||||
| } | } | ||||
| auto variableName = CodeHelpers::makeBinaryDataIdentifierName (source); | |||||
| auto variableName = build_tools::makeBinaryDataIdentifierName (source); | |||||
| MemoryOutputStream header, cpp; | MemoryOutputStream header, cpp; | ||||
| @@ -57,7 +57,6 @@ typedef TargetOS::OS DependencyPathOS; | |||||
| #include "../Utility/Helpers/jucer_MiscUtilities.h" | #include "../Utility/Helpers/jucer_MiscUtilities.h" | ||||
| #include "../Utility/Helpers/jucer_CodeHelpers.h" | #include "../Utility/Helpers/jucer_CodeHelpers.h" | ||||
| #include "../Utility/Helpers/jucer_FileHelpers.h" | #include "../Utility/Helpers/jucer_FileHelpers.h" | ||||
| #include "../Utility/Helpers/jucer_RelativePath.h" | |||||
| #include "../Utility/Helpers/jucer_ValueSourceHelpers.h" | #include "../Utility/Helpers/jucer_ValueSourceHelpers.h" | ||||
| #include "../Utility/Helpers/jucer_PresetIDs.h" | #include "../Utility/Helpers/jucer_PresetIDs.h" | ||||
| #include "jucer_CommandIDs.h" | #include "jucer_CommandIDs.h" | ||||
| @@ -646,7 +646,7 @@ void CppCodeEditorComponent::insertComponentClass() | |||||
| { | { | ||||
| auto className = aw.getTextEditorContents (classNameField).trim(); | auto className = aw.getTextEditorContents (classNameField).trim(); | ||||
| if (className == CodeHelpers::makeValidIdentifier (className, false, true, false)) | |||||
| if (className == build_tools::makeValidIdentifier (className, false, true, false)) | |||||
| { | { | ||||
| String code (BinaryData::jucer_InlineComponentTemplate_h); | String code (BinaryData::jucer_InlineComponentTemplate_h); | ||||
| code = code.replace ("%%component_class%%", className); | code = code.replace ("%%component_class%%", className); | ||||
| @@ -546,7 +546,7 @@ void ComponentTypeHandler::fillInMemberVariableDeclarations (GeneratedCode& code | |||||
| String clsName (component->getProperties() ["virtualName"].toString()); | String clsName (component->getProperties() ["virtualName"].toString()); | ||||
| if (clsName.isNotEmpty()) | if (clsName.isNotEmpty()) | ||||
| clsName = CodeHelpers::makeValidIdentifier (clsName, false, false, true); | |||||
| clsName = build_tools::makeValidIdentifier (clsName, false, false, true); | |||||
| else | else | ||||
| clsName = getClassName (component); | clsName = getClassName (component); | ||||
| @@ -584,7 +584,7 @@ void ComponentTypeHandler::fillInCreationCode (GeneratedCode& code, Component* c | |||||
| s << memberVariableName << ".reset (new "; | s << memberVariableName << ".reset (new "; | ||||
| if (virtualName.isNotEmpty()) | if (virtualName.isNotEmpty()) | ||||
| s << CodeHelpers::makeValidIdentifier (virtualName, false, false, true); | |||||
| s << build_tools::makeValidIdentifier (virtualName, false, false, true); | |||||
| else | else | ||||
| s << getClassName (component); | s << getClassName (component); | ||||
| @@ -142,7 +142,7 @@ private: | |||||
| void setText (const String& newText) override | void setText (const String& newText) override | ||||
| { | { | ||||
| document.perform (new GenericCompClassChangeAction (component, *document.getComponentLayout(), | document.perform (new GenericCompClassChangeAction (component, *document.getComponentLayout(), | ||||
| CodeHelpers::makeValidIdentifier (newText, false, false, true)), | |||||
| build_tools::makeValidIdentifier (newText, false, false, true)), | |||||
| "Change generic component class"); | "Change generic component class"); | ||||
| } | } | ||||
| @@ -369,7 +369,7 @@ private: | |||||
| { | { | ||||
| if (Project* project = document->getCppDocument().getProject()) | if (Project* project = document->getCppDocument().getProject()) | ||||
| { | { | ||||
| ResourceFile resourceFile (*project); | |||||
| JucerResourceFile resourceFile (*project); | |||||
| for (int i = 0; i < resourceFile.getNumFiles(); ++i) | for (int i = 0; i < resourceFile.getNumFiles(); ++i) | ||||
| { | { | ||||
| @@ -114,7 +114,7 @@ public: | |||||
| if (Project* project = cpp.getProject()) | if (Project* project = cpp.getProject()) | ||||
| { | { | ||||
| ResourceFile resourceFile (*project); | |||||
| JucerResourceFile resourceFile (*project); | |||||
| for (int i = 0; i < resourceFile.getNumFiles(); ++i) | for (int i = 0; i < resourceFile.getNumFiles(); ++i) | ||||
| { | { | ||||
| @@ -732,7 +732,7 @@ struct RelativePositionedRectangle | |||||
| { | { | ||||
| double x, y, w, h; | double x, y, w, h; | ||||
| getRectangleDouble (x, y, w, h, parentArea, layout); | getRectangleDouble (x, y, w, h, parentArea, layout); | ||||
| return Point<float> ((float) x, (float) y); | |||||
| return { (float) x, (float) y }; | |||||
| } | } | ||||
| void getXY (double& x, double& y, | void getXY (double& x, double& y, | ||||
| @@ -154,7 +154,7 @@ String BinaryResources::browseForResource (const String& title, | |||||
| String BinaryResources::findUniqueName (const String& rootName) const | String BinaryResources::findUniqueName (const String& rootName) const | ||||
| { | { | ||||
| auto nameRoot = CodeHelpers::makeValidIdentifier (rootName, true, true, false); | |||||
| auto nameRoot = build_tools::makeValidIdentifier (rootName, true, true, false); | |||||
| auto name = nameRoot; | auto name = nameRoot; | ||||
| auto names = getResourceNames(); | auto names = getResourceNames(); | ||||
| @@ -411,7 +411,7 @@ Component* ComponentLayout::addNewComponent (ComponentTypeHandler* const type, i | |||||
| std::unique_ptr<XmlElement> xml (type->createXmlFor (c.get(), this)); | std::unique_ptr<XmlElement> xml (type->createXmlFor (c.get(), this)); | ||||
| c.reset (addComponentFromXml (*xml, true)); | c.reset (addComponentFromXml (*xml, true)); | ||||
| String memberName (CodeHelpers::makeValidIdentifier (type->getClassName (c.get()), true, true, false)); | |||||
| String memberName (build_tools::makeValidIdentifier (type->getClassName (c.get()), true, true, false)); | |||||
| setComponentMemberVariableName (c.get(), memberName); | setComponentMemberVariableName (c.get(), memberName); | ||||
| selected.selectOnly (c.get()); | selected.selectOnly (c.get()); | ||||
| @@ -852,7 +852,7 @@ String ComponentLayout::getComponentMemberVariableName (Component* comp) const | |||||
| String name (comp->getProperties() ["memberName"].toString()); | String name (comp->getProperties() ["memberName"].toString()); | ||||
| if (name.isEmpty()) | if (name.isEmpty()) | ||||
| name = getUnusedMemberName (CodeHelpers::makeValidIdentifier (comp->getName(), true, true, false), comp); | |||||
| name = getUnusedMemberName (build_tools::makeValidIdentifier (comp->getName(), true, true, false), comp); | |||||
| return name; | return name; | ||||
| } | } | ||||
| @@ -864,7 +864,7 @@ void ComponentLayout::setComponentMemberVariableName (Component* comp, const Str | |||||
| comp->getProperties().set ("memberName", String()); | comp->getProperties().set ("memberName", String()); | ||||
| const String n (getUnusedMemberName (CodeHelpers::makeValidIdentifier (newName, false, true, false), comp)); | |||||
| const String n (getUnusedMemberName (build_tools::makeValidIdentifier (newName, false, true, false), comp)); | |||||
| comp->getProperties().set ("memberName", n); | comp->getProperties().set ("memberName", n); | ||||
| if (n != oldName) | if (n != oldName) | ||||
| @@ -915,7 +915,7 @@ String ComponentLayout::getComponentVirtualClassName (Component* comp) const | |||||
| void ComponentLayout::setComponentVirtualClassName (Component* comp, const String& newName) | void ComponentLayout::setComponentVirtualClassName (Component* comp, const String& newName) | ||||
| { | { | ||||
| jassert (comp != nullptr); | jassert (comp != nullptr); | ||||
| const String name (CodeHelpers::makeValidIdentifier (newName, false, false, true)); | |||||
| const String name (build_tools::makeValidIdentifier (newName, false, false, true)); | |||||
| if (name != getComponentVirtualClassName (comp)) | if (name != getComponentVirtualClassName (comp)) | ||||
| { | { | ||||
| @@ -127,7 +127,7 @@ String GeneratedCode::getCallbackDefinitions() const | |||||
| CallbackMethod* const cm = callbacks.getUnchecked(i); | CallbackMethod* const cm = callbacks.getUnchecked(i); | ||||
| const String userCodeBlockName ("User" | const String userCodeBlockName ("User" | ||||
| + CodeHelpers::makeValidIdentifier (cm->prototype.upToFirstOccurrenceOf ("(", false, false), | |||||
| + build_tools::makeValidIdentifier (cm->prototype.upToFirstOccurrenceOf ("(", false, false), | |||||
| true, true, false).trim()); | true, true, false).trim()); | ||||
| if (userCodeBlockName.isNotEmpty() && cm->hasPrePostUserSections) | if (userCodeBlockName.isNotEmpty() && cm->hasPrePostUserSections) | ||||
| @@ -118,9 +118,9 @@ void JucerDocument::refreshAllPropertyComps() | |||||
| void JucerDocument::setClassName (const String& newName) | void JucerDocument::setClassName (const String& newName) | ||||
| { | { | ||||
| if (newName != className | if (newName != className | ||||
| && CodeHelpers::makeValidIdentifier (newName, false, false, true).isNotEmpty()) | |||||
| && build_tools::makeValidIdentifier (newName, false, false, true).isNotEmpty()) | |||||
| { | { | ||||
| className = CodeHelpers::makeValidIdentifier (newName, false, false, true); | |||||
| className = build_tools::makeValidIdentifier (newName, false, false, true); | |||||
| changed(); | changed(); | ||||
| } | } | ||||
| } | } | ||||
| @@ -156,7 +156,7 @@ void JucerDocument::setParentClasses (const String& classes) | |||||
| type = s = String(); | type = s = String(); | ||||
| } | } | ||||
| s = type + CodeHelpers::makeValidIdentifier (s.trim(), false, false, true, true); | |||||
| s = type + build_tools::makeValidIdentifier (s.trim(), false, false, true, true); | |||||
| parentClassLines.set (i, s); | parentClassLines.set (i, s); | ||||
| } | } | ||||
| @@ -386,11 +386,12 @@ private: | |||||
| : m->moduleInfo.getFolder(); | : m->moduleInfo.getFolder(); | ||||
| m->findAndAddCompiledUnits (*exporter, nullptr, compileUnits, | m->findAndAddCompiledUnits (*exporter, nullptr, compileUnits, | ||||
| isPluginProject || isVSTHost ? ProjectType::Target::SharedCodeTarget | |||||
| : ProjectType::Target::unspecified); | |||||
| isPluginProject || isVSTHost ? build_tools::ProjectType::Target::SharedCodeTarget | |||||
| : build_tools::ProjectType::Target::unspecified); | |||||
| if (isPluginProject || isVSTHost) | if (isPluginProject || isVSTHost) | ||||
| m->findAndAddCompiledUnits (*exporter, nullptr, compileUnits, ProjectType::Target::StandalonePlugIn); | |||||
| m->findAndAddCompiledUnits (*exporter, nullptr, compileUnits, | |||||
| build_tools::ProjectType::Target::StandalonePlugIn); | |||||
| } | } | ||||
| break; | break; | ||||