Codebase list juce / 4099bca
New upstream version 5.4.7~ds0 IOhannes m zmölnig 4 years ago
103 changed file(s) with 680 addition(s) and 671 deletion(s). Raw diff Collapse all Expand all
11
22 This file just lists the more notable headline features. For more detailed info
33 about minor changes and bugfixes, please see the git log!
4
5 Version 5.4.7
6 - Fixed a macOS focus bug causing Components to not receive mouse events
7 - Fixed a potential NullPointerException in the Android IAP code
8 - Fixed an entitlements file generation bug in the Projucer
9 - Send VST2 audioMasterUpdateDisplay opcode on the message thread to fix some hosts not updating
10 - Fixed some build errors and warnings when using Clang on Windows
11 - Changed the default architecture specified in Linux Makefiles generated by the Projucer
412
513 Version 5.4.6
614 - Fixed compatibility with macOS versions below 10.11
77 add_library("cpufeatures" STATIC "${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c")
88 set_source_files_properties("${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c" PROPERTIES COMPILE_FLAGS "-Wno-sign-conversion -Wno-gnu-statement-expression")
99
10 add_definitions("-DJUCE_ANDROID=1" "-DJUCE_ANDROID_API_VERSION=23" "-DJUCE_PUSH_NOTIFICATIONS=1" "-DJUCE_PUSH_NOTIFICATIONS_ACTIVITY=\"com/roli/juce/JuceActivity\"" "-DJUCE_ANDROID_GL_ES_VERSION_3_0=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_ANDROIDSTUDIO_7F0E4A25=1" "-DJUCE_APP_VERSION=5.4.6" "-DJUCE_APP_VERSION_HEX=0x50406")
10 add_definitions("-DJUCE_ANDROID=1" "-DJUCE_ANDROID_API_VERSION=23" "-DJUCE_PUSH_NOTIFICATIONS=1" "-DJUCE_PUSH_NOTIFICATIONS_ACTIVITY=\"com/roli/juce/JuceActivity\"" "-DJUCE_ANDROID_GL_ES_VERSION_3_0=1" "-DJUCE_DEMO_RUNNER=1" "-DJUCE_UNIT_TESTS=1" "-DJUCER_ANDROIDSTUDIO_7F0E4A25=1" "-DJUCE_APP_VERSION=5.4.7" "-DJUCE_APP_VERSION_HEX=0x50407")
1111
1212 include_directories( AFTER
1313 "../../../JuceLibraryCode"
00 <?xml version="1.0" encoding="utf-8"?>
11
2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="5.4.6"
2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="5.4.7"
33 package="com.juce.demorunner">
44 <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:anyDensity="true"/>
55 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
3131 JUCE_OUTDIR := build
3232
3333 ifeq ($(TARGET_ARCH),)
34 TARGET_ARCH := -march=native
34 TARGET_ARCH :=
3535 endif
3636
37 JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCE_DEMO_RUNNER=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.6 -DJUCE_APP_VERSION_HEX=0x50406 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
37 JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCE_DEMO_RUNNER=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.7 -DJUCE_APP_VERSION_HEX=0x50407 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
3838 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
3939 JUCE_TARGET_APP := DemoRunner
4040
5252 JUCE_OUTDIR := build
5353
5454 ifeq ($(TARGET_ARCH),)
55 TARGET_ARCH := -march=native
55 TARGET_ARCH :=
5656 endif
5757
58 JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCE_DEMO_RUNNER=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.6 -DJUCE_APP_VERSION_HEX=0x50406 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
58 JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCE_DEMO_RUNNER=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.7 -DJUCE_APP_VERSION_HEX=0x50407 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
5959 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
6060 JUCE_TARGET_APP := DemoRunner
6161
933933 "JUCE_DEMO_RUNNER=1",
934934 "JUCE_UNIT_TESTS=1",
935935 "JUCER_XCODE_MAC_F6D2F4CF=1",
936 "JUCE_APP_VERSION=5.4.6",
937 "JUCE_APP_VERSION_HEX=0x50406",
936 "JUCE_APP_VERSION=5.4.7",
937 "JUCE_APP_VERSION_HEX=0x50407",
938938 "JucePlugin_Build_VST=0",
939939 "JucePlugin_Build_VST3=0",
940940 "JucePlugin_Build_AU=0",
979979 "JUCE_DEMO_RUNNER=1",
980980 "JUCE_UNIT_TESTS=1",
981981 "JUCER_XCODE_MAC_F6D2F4CF=1",
982 "JUCE_APP_VERSION=5.4.6",
983 "JUCE_APP_VERSION_HEX=0x50406",
982 "JUCE_APP_VERSION=5.4.7",
983 "JUCE_APP_VERSION_HEX=0x50407",
984984 "JucePlugin_Build_VST=0",
985985 "JucePlugin_Build_VST3=0",
986986 "JucePlugin_Build_AU=0",
2121 <key>CFBundleSignature</key>
2222 <string>????</string>
2323 <key>CFBundleShortVersionString</key>
24 <string>5.4.6</string>
24 <string>5.4.7</string>
2525 <key>CFBundleVersion</key>
26 <string>5.4.6</string>
26 <string>5.4.7</string>
2727 <key>NSHumanReadableCopyright</key>
2828 <string>Copyright (c) 2018 - ROLI Ltd.</string>
2929 <key>NSHighResolutionCapable</key>
6363 <Optimization>Disabled</Optimization>
6464 <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
6565 <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
66 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;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>
66 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;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>
6767 <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
6868 <RuntimeTypeInfo>true</RuntimeTypeInfo>
6969 <PrecompiledHeader/>
105105 <ClCompile>
106106 <Optimization>Full</Optimization>
107107 <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
108 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;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>
108 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;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>
109109 <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
110110 <RuntimeTypeInfo>true</RuntimeTypeInfo>
111111 <PrecompiledHeader/>
66 #include <windows.h>
77
88 VS_VERSION_INFO VERSIONINFO
9 FILEVERSION 5,4,6,0
9 FILEVERSION 5,4,7,0
1010 BEGIN
1111 BLOCK "StringFileInfo"
1212 BEGIN
1515 VALUE "CompanyName", "ROLI Ltd.\0"
1616 VALUE "LegalCopyright", "Copyright (c) 2018 - ROLI Ltd.\0"
1717 VALUE "FileDescription", "DemoRunner\0"
18 VALUE "FileVersion", "5.4.6\0"
18 VALUE "FileVersion", "5.4.7\0"
1919 VALUE "ProductName", "DemoRunner\0"
20 VALUE "ProductVersion", "5.4.6\0"
20 VALUE "ProductVersion", "5.4.7\0"
2121 END
2222 END
2323
6363 <Optimization>Disabled</Optimization>
6464 <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
6565 <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
66 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;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>
66 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;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>
6767 <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
6868 <RuntimeTypeInfo>true</RuntimeTypeInfo>
6969 <PrecompiledHeader/>
105105 <ClCompile>
106106 <Optimization>Full</Optimization>
107107 <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
108 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;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>
108 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;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>
109109 <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
110110 <RuntimeTypeInfo>true</RuntimeTypeInfo>
111111 <PrecompiledHeader/>
66 #include <windows.h>
77
88 VS_VERSION_INFO VERSIONINFO
9 FILEVERSION 5,4,6,0
9 FILEVERSION 5,4,7,0
1010 BEGIN
1111 BLOCK "StringFileInfo"
1212 BEGIN
1515 VALUE "CompanyName", "ROLI Ltd.\0"
1616 VALUE "LegalCopyright", "Copyright (c) 2018 - ROLI Ltd.\0"
1717 VALUE "FileDescription", "DemoRunner\0"
18 VALUE "FileVersion", "5.4.6\0"
18 VALUE "FileVersion", "5.4.7\0"
1919 VALUE "ProductName", "DemoRunner\0"
20 VALUE "ProductVersion", "5.4.6\0"
20 VALUE "ProductVersion", "5.4.7\0"
2121 END
2222 END
2323
6363 <Optimization>Disabled</Optimization>
6464 <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
6565 <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
66 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;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>
66 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;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>
6767 <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
6868 <RuntimeTypeInfo>true</RuntimeTypeInfo>
6969 <PrecompiledHeader/>
105105 <ClCompile>
106106 <Optimization>Full</Optimization>
107107 <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
108 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;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>
108 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCE_DEMO_RUNNER=1;JUCE_UNIT_TESTS=1;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;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>
109109 <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
110110 <RuntimeTypeInfo>true</RuntimeTypeInfo>
111111 <PrecompiledHeader/>
66 #include <windows.h>
77
88 VS_VERSION_INFO VERSIONINFO
9 FILEVERSION 5,4,6,0
9 FILEVERSION 5,4,7,0
1010 BEGIN
1111 BLOCK "StringFileInfo"
1212 BEGIN
1515 VALUE "CompanyName", "ROLI Ltd.\0"
1616 VALUE "LegalCopyright", "Copyright (c) 2018 - ROLI Ltd.\0"
1717 VALUE "FileDescription", "DemoRunner\0"
18 VALUE "FileVersion", "5.4.6\0"
18 VALUE "FileVersion", "5.4.7\0"
1919 VALUE "ProductName", "DemoRunner\0"
20 VALUE "ProductVersion", "5.4.6\0"
20 VALUE "ProductVersion", "5.4.7\0"
2121 END
2222 END
2323
918918 "JUCE_DEMO_RUNNER=1",
919919 "JUCE_UNIT_TESTS=1",
920920 "JUCER_XCODE_IPHONE_5BC26AE3=1",
921 "JUCE_APP_VERSION=5.4.6",
922 "JUCE_APP_VERSION_HEX=0x50406",
921 "JUCE_APP_VERSION=5.4.7",
922 "JUCE_APP_VERSION_HEX=0x50407",
923923 "JucePlugin_Build_VST=0",
924924 "JucePlugin_Build_VST3=0",
925925 "JucePlugin_Build_AU=0",
965965 "JUCE_DEMO_RUNNER=1",
966966 "JUCE_UNIT_TESTS=1",
967967 "JUCER_XCODE_IPHONE_5BC26AE3=1",
968 "JUCE_APP_VERSION=5.4.6",
969 "JUCE_APP_VERSION_HEX=0x50406",
968 "JUCE_APP_VERSION=5.4.7",
969 "JUCE_APP_VERSION_HEX=0x50407",
970970 "JucePlugin_Build_VST=0",
971971 "JucePlugin_Build_VST3=0",
972972 "JucePlugin_Build_AU=0",
2929 <key>CFBundleSignature</key>
3030 <string>????</string>
3131 <key>CFBundleShortVersionString</key>
32 <string>5.4.6</string>
32 <string>5.4.7</string>
3333 <key>CFBundleVersion</key>
34 <string>5.4.6</string>
34 <string>5.4.7</string>
3535 <key>NSHumanReadableCopyright</key>
3636 <string>Copyright (c) 2018 - ROLI Ltd.</string>
3737 <key>NSHighResolutionCapable</key>
00 <?xml version="1.0" encoding="UTF-8"?>
11
2 <JUCERPROJECT name="DemoRunner" projectType="guiapp" jucerVersion="5.4.6" defines="JUCE_DEMO_RUNNER=1&#10;JUCE_UNIT_TESTS=1"
3 bundleIdentifier="com.juce.demorunner" version="5.4.6" companyName="ROLI Ltd."
2 <JUCERPROJECT name="DemoRunner" projectType="guiapp" jucerVersion="5.4.7" defines="JUCE_DEMO_RUNNER=1&#10;JUCE_UNIT_TESTS=1"
3 bundleIdentifier="com.juce.demorunner" version="5.4.7" companyName="ROLI Ltd."
44 companyCopyright="Copyright (c) 2018 - ROLI Ltd." companyWebsite="https://www.juce.com/"
5 companyEmail="info@juce.com" id="yj7xMM" reportAppUsage="1">
5 companyEmail="info@juce.com" id="yj7xMM" reportAppUsage="0">
66 <MAINGROUP id="G8kbr7" name="DemoRunner">
77 <GROUP id="{20E3F84A-29E9-D5FF-4559-1A9E4A70CD60}" name="Source">
88 <GROUP id="{272A692A-6AFE-68BD-C8E8-63B3D62245B1}" name="Demos">
3939 #endif
4040
4141 #ifndef JUCE_REPORT_APP_USAGE
42 #define JUCE_REPORT_APP_USAGE 1
42 #define JUCE_REPORT_APP_USAGE 0
4343 #endif
4444
4545 // END SECTION A
4646
4747 #define JUCE_USE_DARK_SPLASH_SCREEN 1
4848
49 #define JUCE_PROJUCER_VERSION 0x50406
49 #define JUCE_PROJUCER_VERSION 0x50407
5050
5151 //==============================================================================
5252 #define JUCE_MODULE_AVAILABLE_juce_analytics 1
5555 {
5656 const char* const projectName = "DemoRunner";
5757 const char* const companyName = "ROLI Ltd.";
58 const char* const versionString = "5.4.6";
59 const int versionNumber = 0x50406;
58 const char* const versionString = "5.4.7";
59 const int versionNumber = 0x50407;
6060 }
6161 #endif
00 <?xml version="1.0" encoding="UTF-8"?>
11
22 <JUCERPROJECT id="AKfc5m" name="AudioPerformanceTest" projectType="guiapp"
3 bundleIdentifier="com.juce.AudioPerformanceTest" jucerVersion="5.4.6"
3 bundleIdentifier="com.juce.AudioPerformanceTest" jucerVersion="5.4.7"
44 displaySplashScreen="0" reportAppUsage="0" companyName="ROLI Ltd."
55 companyCopyright="ROLI Ltd.">
66 <MAINGROUP id="b1eVTe" name="AudioPerformanceTest">
3131 JUCE_OUTDIR := build
3232
3333 ifeq ($(TARGET_ARCH),)
34 TARGET_ARCH := -march=native
34 TARGET_ARCH :=
3535 endif
3636
3737 JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
5252 JUCE_OUTDIR := build
5353
5454 ifeq ($(TARGET_ARCH),)
55 TARGET_ARCH := -march=native
55 TARGET_ARCH :=
5656 endif
5757
5858 JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
4646
4747 #define JUCE_USE_DARK_SPLASH_SCREEN 1
4848
49 #define JUCE_PROJUCER_VERSION 0x50406
49 #define JUCE_PROJUCER_VERSION 0x50407
5050
5151 //==============================================================================
5252 #define JUCE_MODULE_AVAILABLE_juce_audio_basics 1
11
22 <JUCERPROJECT id="NTe0XB0ij" name="AudioPluginHost" projectType="guiapp" version="1.0.0"
33 juceFolder="../../../juce" bundleIdentifier="com.roli.juce.pluginhost"
4 jucerVersion="5.4.6" companyName="ROLI Ltd." displaySplashScreen="0"
4 jucerVersion="5.4.7" companyName="ROLI Ltd." displaySplashScreen="0"
55 reportAppUsage="0" companyCopyright="ROLI Ltd.">
66 <EXPORTFORMATS>
77 <XCODE_MAC targetFolder="Builds/MacOSX" rtasFolder="~/SDKs/PT_80_SDK" objCExtraSuffix="M73TRi"
3131 JUCE_OUTDIR := build
3232
3333 ifeq ($(TARGET_ARCH),)
34 TARGET_ARCH := -march=native
34 TARGET_ARCH :=
3535 endif
3636
3737 JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 libcurl) -pthread -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
5252 JUCE_OUTDIR := build
5353
5454 ifeq ($(TARGET_ARCH),)
55 TARGET_ARCH := -march=native
55 TARGET_ARCH :=
5656 endif
5757
5858 JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 libcurl) -pthread -I../../../../modules/juce_audio_processors/format_types/VST3_SDK -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
4848
4949 #define JUCE_USE_DARK_SPLASH_SCREEN 1
5050
51 #define JUCE_PROJUCER_VERSION 0x50406
51 #define JUCE_PROJUCER_VERSION 0x50407
5252
5353 //==============================================================================
5454 #define JUCE_MODULE_AVAILABLE_juce_audio_basics 1
00 <?xml version="1.0" encoding="UTF-8"?>
11
22 <JUCERPROJECT id="3t6YqETY1" name="BinaryBuilder" projectType="consoleapp"
3 juceFolder="../../../juce" jucerVersion="5.4.6" bundleIdentifier="com.roli.binarybuilder"
3 juceFolder="../../../juce" jucerVersion="5.4.7" bundleIdentifier="com.roli.binarybuilder"
44 displaySplashScreen="0" reportAppUsage="0" companyName="ROLI Ltd."
55 companyCopyright="ROLI Ltd.">
66 <EXPORTFORMATS>
3131 JUCE_OUTDIR := build
3232
3333 ifeq ($(TARGET_ARCH),)
34 TARGET_ARCH := -march=native
34 TARGET_ARCH :=
3535 endif
3636
3737 JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
5252 JUCE_OUTDIR := build
5353
5454 ifeq ($(TARGET_ARCH),)
55 TARGET_ARCH := -march=native
55 TARGET_ARCH :=
5656 endif
5757
5858 JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
4646
4747 #define JUCE_USE_DARK_SPLASH_SCREEN 1
4848
49 #define JUCE_PROJUCER_VERSION 0x50406
49 #define JUCE_PROJUCER_VERSION 0x50407
5050
5151 //==============================================================================
5252 #define JUCE_MODULE_AVAILABLE_juce_core 1
3131 JUCE_OUTDIR := build
3232
3333 ifeq ($(TARGET_ARCH),)
34 TARGET_ARCH := -march=native
34 TARGET_ARCH :=
3535 endif
3636
3737 JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
5252 JUCE_OUTDIR := build
5353
5454 ifeq ($(TARGET_ARCH),)
55 TARGET_ARCH := -march=native
55 TARGET_ARCH :=
5656 endif
5757
5858 JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
4646
4747 #define JUCE_USE_DARK_SPLASH_SCREEN 1
4848
49 #define JUCE_PROJUCER_VERSION 0x50406
49 #define JUCE_PROJUCER_VERSION 0x50407
5050
5151 //==============================================================================
5252 #define JUCE_MODULE_AVAILABLE_juce_audio_basics 1
00 <?xml version="1.0" encoding="UTF-8"?>
11
22 <JUCERPROJECT id="gWI5Ir" name="NetworkGraphicsDemo" projectType="guiapp" bundleIdentifier="com.juce.NetworkGraphicsDemo"
3 jucerVersion="5.4.6" displaySplashScreen="0" reportAppUsage="0"
3 jucerVersion="5.4.7" displaySplashScreen="0" reportAppUsage="0"
44 companyName="ROLI Ltd." companyCopyright="ROLI Ltd.">
55 <MAINGROUP id="OT9rJ2" name="NetworkGraphicsDemo">
66 <GROUP id="{48D54E6E-37F4-B20A-E038-C63E4EDFD4D9}" name="Source">
3131 JUCE_OUTDIR := build
3232
3333 ifeq ($(TARGET_ARCH),)
34 TARGET_ARCH := -march=native
34 TARGET_ARCH :=
3535 endif
3636
37 JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.6 -DJUCE_APP_VERSION_HEX=0x50406 $(shell pkg-config --cflags x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
37 JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.7 -DJUCE_APP_VERSION_HEX=0x50407 $(shell pkg-config --cflags x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
3838 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
3939 JUCE_TARGET_APP := Projucer
4040
5252 JUCE_OUTDIR := build
5353
5454 ifeq ($(TARGET_ARCH),)
55 TARGET_ARCH := -march=native
55 TARGET_ARCH :=
5656 endif
5757
58 JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.6 -DJUCE_APP_VERSION_HEX=0x50406 $(shell pkg-config --cflags x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
58 JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=5.4.7 -DJUCE_APP_VERSION_HEX=0x50407 $(shell pkg-config --cflags x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
5959 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
6060 JUCE_TARGET_APP := Projucer
6161
22 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
33 <plist>
44 <dict>
5 <key>NSAppTransportSecurity</key>
6 <dict>
7 <key>NSAllowsArbitraryLoads</key>
8 <true/>
9 <key>NSExceptionDomains</key>
10 <dict>
11 <key>amazonaws.com</key>
12 <dict>
13 <key>NSExceptionAllowsInsecureHTTPLoads</key>
14 <true/>
15 <key>NSIncludesSubdomains</key>
16 <true/>
17 </dict>
18 </dict>
19 </dict>
205 <key>NSMicrophoneUsageDescription</key>
216 <string>This app requires audio input. If you do not have an audio interface connected it will use the built-in microphone.</string>
227 <key>NSCameraUsageDescription</key>
3621 <key>CFBundleSignature</key>
3722 <string>????</string>
3823 <key>CFBundleShortVersionString</key>
39 <string>5.4.6</string>
24 <string>5.4.7</string>
4025 <key>CFBundleVersion</key>
41 <string>5.4.6</string>
26 <string>5.4.7</string>
4227 <key>NSHumanReadableCopyright</key>
4328 <string>ROLI Ltd.</string>
4429 <key>NSHighResolutionCapable</key>
32273227 "_DEBUG=1",
32283228 "DEBUG=1",
32293229 "JUCER_XCODE_MAC_F6D2F4CF=1",
3230 "JUCE_APP_VERSION=5.4.6",
3231 "JUCE_APP_VERSION_HEX=0x50406",
3230 "JUCE_APP_VERSION=5.4.7",
3231 "JUCE_APP_VERSION_HEX=0x50407",
32323232 "JucePlugin_Build_VST=0",
32333233 "JucePlugin_Build_VST3=0",
32343234 "JucePlugin_Build_AU=0",
32713271 "_NDEBUG=1",
32723272 "NDEBUG=1",
32733273 "JUCER_XCODE_MAC_F6D2F4CF=1",
3274 "JUCE_APP_VERSION=5.4.6",
3275 "JUCE_APP_VERSION_HEX=0x50406",
3274 "JUCE_APP_VERSION=5.4.7",
3275 "JUCE_APP_VERSION_HEX=0x50407",
32763276 "JucePlugin_Build_VST=0",
32773277 "JucePlugin_Build_VST3=0",
32783278 "JucePlugin_Build_AU=0",
6363 <Optimization>Disabled</Optimization>
6464 <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
6565 <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
66 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;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>
66 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;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>
6767 <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
6868 <RuntimeTypeInfo>true</RuntimeTypeInfo>
6969 <PrecompiledHeader/>
105105 <ClCompile>
106106 <Optimization>Full</Optimization>
107107 <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
108 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;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>
108 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2015_78A5022=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;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>
109109 <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
110110 <RuntimeTypeInfo>true</RuntimeTypeInfo>
111111 <PrecompiledHeader/>
66 #include <windows.h>
77
88 VS_VERSION_INFO VERSIONINFO
9 FILEVERSION 5,4,6,0
9 FILEVERSION 5,4,7,0
1010 BEGIN
1111 BLOCK "StringFileInfo"
1212 BEGIN
1515 VALUE "CompanyName", "ROLI Ltd.\0"
1616 VALUE "LegalCopyright", "ROLI Ltd.\0"
1717 VALUE "FileDescription", "Projucer\0"
18 VALUE "FileVersion", "5.4.6\0"
18 VALUE "FileVersion", "5.4.7\0"
1919 VALUE "ProductName", "Projucer\0"
20 VALUE "ProductVersion", "5.4.6\0"
20 VALUE "ProductVersion", "5.4.7\0"
2121 END
2222 END
2323
6363 <Optimization>Disabled</Optimization>
6464 <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
6565 <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
66 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;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>
66 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;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>
6767 <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
6868 <RuntimeTypeInfo>true</RuntimeTypeInfo>
6969 <PrecompiledHeader/>
105105 <ClCompile>
106106 <Optimization>Full</Optimization>
107107 <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
108 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;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>
108 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2017_78A5024=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;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>
109109 <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
110110 <RuntimeTypeInfo>true</RuntimeTypeInfo>
111111 <PrecompiledHeader/>
66 #include <windows.h>
77
88 VS_VERSION_INFO VERSIONINFO
9 FILEVERSION 5,4,6,0
9 FILEVERSION 5,4,7,0
1010 BEGIN
1111 BLOCK "StringFileInfo"
1212 BEGIN
1515 VALUE "CompanyName", "ROLI Ltd.\0"
1616 VALUE "LegalCopyright", "ROLI Ltd.\0"
1717 VALUE "FileDescription", "Projucer\0"
18 VALUE "FileVersion", "5.4.6\0"
18 VALUE "FileVersion", "5.4.7\0"
1919 VALUE "ProductName", "Projucer\0"
20 VALUE "ProductVersion", "5.4.6\0"
20 VALUE "ProductVersion", "5.4.7\0"
2121 END
2222 END
2323
6363 <Optimization>Disabled</Optimization>
6464 <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
6565 <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
66 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;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>
66 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;DEBUG;_DEBUG;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;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>
6767 <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
6868 <RuntimeTypeInfo>true</RuntimeTypeInfo>
6969 <PrecompiledHeader/>
105105 <ClCompile>
106106 <Optimization>Full</Optimization>
107107 <AdditionalIncludeDirectories>..\..\JuceLibraryCode;..\..\..\..\modules;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
108 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.6;JUCE_APP_VERSION_HEX=0x50406;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>
108 <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;JUCER_VS2019_78A5026=1;JUCE_APP_VERSION=5.4.7;JUCE_APP_VERSION_HEX=0x50407;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>
109109 <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
110110 <RuntimeTypeInfo>true</RuntimeTypeInfo>
111111 <PrecompiledHeader/>
66 #include <windows.h>
77
88 VS_VERSION_INFO VERSIONINFO
9 FILEVERSION 5,4,6,0
9 FILEVERSION 5,4,7,0
1010 BEGIN
1111 BLOCK "StringFileInfo"
1212 BEGIN
1515 VALUE "CompanyName", "ROLI Ltd.\0"
1616 VALUE "LegalCopyright", "ROLI Ltd.\0"
1717 VALUE "FileDescription", "Projucer\0"
18 VALUE "FileVersion", "5.4.6\0"
18 VALUE "FileVersion", "5.4.7\0"
1919 VALUE "ProductName", "Projucer\0"
20 VALUE "ProductVersion", "5.4.6\0"
20 VALUE "ProductVersion", "5.4.7\0"
2121 END
2222 END
2323
6565
6666 #define JUCE_USE_DARK_SPLASH_SCREEN 1
6767
68 #define JUCE_PROJUCER_VERSION 0x50406
68 #define JUCE_PROJUCER_VERSION 0x50407
6969
7070 //==============================================================================
7171 #define JUCE_MODULE_AVAILABLE_juce_analytics 1
4444 {
4545 const char* const projectName = "Projucer";
4646 const char* const companyName = "ROLI Ltd.";
47 const char* const versionString = "5.4.6";
48 const int versionNumber = 0x50406;
47 const char* const versionString = "5.4.7";
48 const int versionNumber = 0x50407;
4949 }
5050 #endif
00 <?xml version="1.0" encoding="UTF-8"?>
11
22 <JUCERPROJECT id="M70qfTRRk" name="Projucer" projectType="guiapp" juceFolder="../../juce"
3 jucerVersion="5.4.6" version="5.4.6" bundleIdentifier="com.juce.theprojucer"
3 jucerVersion="5.4.7" version="5.4.7" bundleIdentifier="com.juce.theprojucer"
44 splashScreenColour="Dark" displaySplashScreen="0" reportAppUsage="0"
55 companyName="ROLI Ltd." companyCopyright="ROLI Ltd." cppLanguageStandard="11">
66 <EXPORTFORMATS>
77 <XCODE_MAC targetFolder="Builds/MacOSX" vstFolder="~/SDKs/vstsdk2.4" rtasFolder="~/SDKs/PT_80_SDK"
88 documentExtensions=".jucer" objCExtraSuffix="zkVtji" bigIcon="rv1F4h"
9 customPList="&lt;plist&gt;&#10;&lt;dict&gt;&#10;&#9;&lt;key&gt;NSAppTransportSecurity&lt;/key&gt;&#10;&#9;&lt;dict&gt;&#10;&#9;&#9;&lt;key&gt;NSAllowsArbitraryLoads&lt;/key&gt;&#10;&#9;&#9;&lt;true/&gt;&#10;&#9;&#9;&lt;key&gt;NSExceptionDomains&lt;/key&gt;&#10;&#9;&#9;&lt;dict&gt;&#10;&#9;&#9;&#9;&lt;key&gt;amazonaws.com&lt;/key&gt;&#10;&#9;&#9;&#9;&lt;dict&gt;&#10;&#9;&#9;&#9;&#9;&lt;key&gt;NSExceptionAllowsInsecureHTTPLoads&lt;/key&gt;&#10;&#9;&#9;&#9;&#9;&lt;true/&gt;&#10;&#9;&#9;&#9;&#9;&lt;key&gt;NSIncludesSubdomains&lt;/key&gt;&#10;&#9;&#9;&#9;&#9;&lt;true/&gt;&#10;&#9;&#9;&#9;&lt;/dict&gt;&#10;&#9;&#9;&lt;/dict&gt;&#10;&#9;&lt;/dict&gt;&#10;&lt;/dict&gt;&#10;&lt;/plist&gt;"
109 extraFrameworks="AudioUnit; Accelerate; AVFoundation; CoreAudio; CoreAudioKit; CoreMIDI; DiscRecording; QuartzCore; AudioToolbox; OpenGL; QTKit; QuickTime"
1110 microphonePermissionNeeded="1" cameraPermissionNeeded="1">
1211 <CONFIGURATIONS>
7474 auto juceValue = getAppSettings().getStoredPath (Ids::defaultJuceModulePath, TargetOS::getThisOS());
7575 auto userValue = getAppSettings().getStoredPath (Ids::defaultUserModulePath, TargetOS::getThisOS());
7676
77 auto jucePathNeedsScanning = (! juceValue.isUsingDefault() && juceValue.get() != lastJUCEModulePath);
78 auto userPathNeedsScanning = (! userValue.isUsingDefault() && userValue.get() != lastUserModulePath);
79
80 if (jucePathNeedsScanning)
81 ProjucerApplication::getApp().rescanJUCEPathModules();
82
83 if (userPathNeedsScanning)
84 ProjucerApplication::getApp().rescanUserPathModules();
77 if (juceValue.get() != lastJUCEModulePath) ProjucerApplication::getApp().rescanJUCEPathModules();
78 if (userValue.get() != lastUserModulePath) ProjucerApplication::getApp().rescanUserPathModules();
8579 }
8680
8781 void paint (Graphics& g) override
255255 build.setGlobalDefs (getGlobalDefs());
256256 build.setCompileFlags (project.getCompileEngineSettings().getExtraCompilerFlagsString());
257257 build.setExtraDLLs (getExtraDLLs());
258 build.setJuceModulesFolder (EnabledModuleList::findDefaultModulesFolder (project).getFullPathName());
258 build.setJuceModulesFolder (project.getEnabledModules().getDefaultModulesFolder().getFullPathName());
259259
260260 build.setUtilsCppInclude (project.getAppIncludeFile().getFullPathName());
261261
387387 {
388388 for (auto* m : modules)
389389 {
390 auto localModuleFolder = proj.getEnabledModules().shouldCopyModuleFilesLocally (m->moduleInfo.getID()).getValue()
391 ? proj.getLocalModuleFolder (m->moduleInfo.getID())
392 : m->moduleInfo.getFolder();
393
390 auto copyLocally = proj.getEnabledModules().shouldCopyModuleFilesLocally (m->moduleInfo.getID());
391
392 auto localModuleFolder = copyLocally ? proj.getLocalModuleFolder (m->moduleInfo.getID())
393 : m->moduleInfo.getFolder();
394394
395395 m->findAndAddCompiledUnits (*exporter, nullptr, compileUnits,
396396 isPluginProject || isVSTHost ? ProjectType::Target::SharedCodeTarget
152152 group.properties.clear();
153153 exporterModulePathDefaultValues.clear();
154154 exporterModulePathValues.clear();
155 globalPathValues.clear();
155156
156157 for (Project::ExporterIterator exporter (project); exporter.next();)
157158 {
178179 "This can be an absolute path, or relative to the jucer project folder, but it "
179180 "must be valid on the filesystem of the target machine that will be performing this build. If this "
180181 "is empty then the global path will be used.");
182
183 globalPathValues.add (getAppSettings().getStoredPath (isJUCEModule (moduleID) ? Ids::defaultJuceModulePath : Ids::defaultUserModulePath,
184 exporter->getTargetOSForExporter()).getPropertyAsValue());
181185 }
182186
183187 for (int i = 0; i < exporterModulePathDefaultValues.size(); ++i)
184188 {
185189 exporterModulePathDefaultValues.getReference (i).onDefaultChange = [this] { startTimer (50); };
190
186191 exporterModulePathValues.getReference (i).addListener (this);
187 }
188
189 globalPathValue.removeListener (this);
190 globalPathValue.referTo (modules.getShouldUseGlobalPathValue (moduleID));
191 globalPathValue.addListener (this);
192 globalPathValues.getReference (i).addListener (this);
193 }
194
195 useGlobalPathValue.removeListener (this);
196 useGlobalPathValue.referTo (modules.shouldUseGlobalPathValue (moduleID));
197 useGlobalPathValue.addListener (this);
192198
193199 auto menuItemString = (TargetOS::getThisOS() == TargetOS::osx ? "\"Projucer->Global Paths...\""
194200 : "\"File->Global Paths...\"");
195201
196 props.add (new BooleanPropertyComponent (globalPathValue,
202 props.add (new BooleanPropertyComponent (useGlobalPathValue,
197203 "Use global path", "Use global path for this module"),
198204 String ("If this is enabled, then the locally-stored global path (set in the ") + menuItemString + " menu item) "
199205 "will be used as the path to this module. "
200206 "This means that if this Projucer project is opened on another machine it will use that machine's global path as the path to this module.");
201207
202 props.add (new BooleanPropertyComponent (modules.shouldCopyModuleFilesLocally (moduleID),
208 props.add (new BooleanPropertyComponent (modules.shouldCopyModuleFilesLocallyValue (moduleID),
203209 "Create local copy", "Copy the module into the project folder"),
204210 "If this is enabled, then a local copy of the entire module will be made inside your project (in the auto-generated JuceLibraryFiles folder), "
205211 "so that your project will be self-contained, and won't need to contain any references to files in other folders. "
206212 "This also means that you can check the module into your source-control system to make sure it is always in sync with your own code.");
207213
208 props.add (new BooleanPropertyComponent (modules.shouldShowAllModuleFilesInProject (moduleID),
214 props.add (new BooleanPropertyComponent (modules.shouldShowAllModuleFilesInProjectValue (moduleID),
209215 "Add source to project", "Make module files browsable in projects"),
210216 "If this is enabled, then the entire source tree from this module will be shown inside your project, "
211217 "making it easy to browse/edit the module's classes. If disabled, then only the minimum number of files "
261267
262268 //==============================================================================
263269 Array<ValueWithDefault> exporterModulePathDefaultValues;
264 Array<Value> exporterModulePathValues;
265 Value globalPathValue;
270 Array<Value> exporterModulePathValues, globalPathValues;
271 Value useGlobalPathValue;
266272
267273 OwnedArray <Project::ConfigFlag> configFlags;
268274
474480 public:
475481 EnabledModulesItem (Project& p)
476482 : project (p),
477 moduleListTree (p.getEnabledModules().state)
483 moduleListTree (project.getEnabledModules().getState())
478484 {
479485 moduleListTree.addListener (this);
480486
617623 }
618624 else if (resultCode > 0)
619625 {
620 std::vector<ModuleIDAndFolder> list;
626 std::vector<AvailableModuleList::ModuleIDAndFolder> list;
621627 int offset = -1;
622628
623629 if (resultCode < 200)
3434 public:
3535 ModulesInformationComponent (Project& p)
3636 : project (p),
37 modulesValueTree (p.getEnabledModules().state)
37 modulesValueTree (project.getEnabledModules().getState())
3838 {
3939 listHeader = new ListBoxHeader ( { "Module", "Version", "Make Local Copy", "Paths" },
4040 { 0.25f, 0.2f, 0.2f, 0.35f } );
134134 g.drawFittedText (version, bounds.removeFromLeft (roundToInt (listHeader->getProportionAtIndex (1) * width)), Justification::centredLeft, 1);
135135
136136 //==============================================================================
137 auto copyLocally = project.getEnabledModules().shouldCopyModuleFilesLocally (moduleID).getValue() ? "Yes" : "No";
138
139 g.drawFittedText (copyLocally, bounds.removeFromLeft (roundToInt (listHeader->getProportionAtIndex (2) * width)), Justification::centredLeft, 1);
137 g.drawFittedText (String (project.getEnabledModules().shouldCopyModuleFilesLocally (moduleID) ? "Yes" : "No"),
138 bounds.removeFromLeft (roundToInt (listHeader->getProportionAtIndex (2) * width)), Justification::centredLeft, 1);
140139
141140 //==============================================================================
142141 String pathText;
214213 repaint();
215214 }
216215
216 static void setLocalCopyModeForAllModules (Project& project, bool copyLocally)
217 {
218 auto& modules = project.getEnabledModules();
219
220 for (auto i = modules.getNumModules(); --i >= 0;)
221 modules.shouldCopyModuleFilesLocallyValue (modules.getModuleID (i)) = copyLocally;
222 }
223
217224 void showCopyModeMenu()
218225 {
219226 PopupMenu m;
220227
221228 m.addItem (PopupMenu::Item ("Set all modules to copy locally")
222 .setAction ([&] { project.getEnabledModules().setLocalCopyModeForAllModules (true); }));
229 .setAction ([&] { setLocalCopyModeForAllModules (project, true); }));
223230
224231 m.addItem (PopupMenu::Item ("Set all modules to not copy locally")
225 .setAction ([&] { project.getEnabledModules().setLocalCopyModeForAllModules (false); }));
232 .setAction ([&] { setLocalCopyModeForAllModules (project, false); }));
226233
227234 m.showMenuAsync (PopupMenu::Options().withTargetComponent (setCopyModeButton));
228235 }
229236
230237 static void setAllModulesToUseGlobalPaths (Project& project, bool useGlobal)
231238 {
232 auto& moduleList = project.getEnabledModules();
233
234 for (auto id : moduleList.getAllModules())
235 moduleList.getShouldUseGlobalPathValue (id).setValue (useGlobal);
239 auto& modules = project.getEnabledModules();
240
241 for (auto moduleID : modules.getAllModules())
242 modules.shouldUseGlobalPathValue (moduleID) = useGlobal;
236243 }
237244
238245 static void setSelectedModulesToUseGlobalPaths (Project& project, SparseSet<int> selected, bool useGlobal)
239246 {
240 auto& moduleList = project.getEnabledModules();
247 auto& modules = project.getEnabledModules();
241248
242249 for (int i = 0; i < selected.size(); ++i)
243 moduleList.getShouldUseGlobalPathValue (moduleList.getModuleID (selected[i])).setValue (useGlobal);
250 modules.shouldUseGlobalPathValue (modules.getModuleID (selected[i])) = useGlobal;
244251 }
245252
246253 void showGlobalPathsMenu()
3939 {
4040 if (moduleFolder != File())
4141 {
42 const char* extensions[] = { ".h", ".hpp", ".hxx" };
42 static const char* extensions[] = { ".h", ".hpp", ".hxx" };
4343
4444 for (auto e : extensions)
4545 {
5555
5656 StringArray ModuleDescription::getDependencies() const
5757 {
58 auto deps = StringArray::fromTokens (moduleInfo ["dependencies"].toString(), " \t;,", "\"'");
59 deps.trim();
60 deps.removeEmptyStrings();
61 return deps;
58 auto moduleDependencies = StringArray::fromTokens (moduleInfo ["dependencies"].toString(), " \t;,", "\"'");
59 moduleDependencies.trim();
60 moduleDependencies.removeEmptyStrings();
61
62 return moduleDependencies;
6263 }
6364
6465 //==============================================================================
65 static bool tryToAddModuleFromFolder (const File& path, ModuleIDAndFolderList& list)
66 static bool tryToAddModuleFromFolder (const File& path, AvailableModuleList::ModuleIDAndFolderList& list)
6667 {
6768 ModuleDescription m (path);
6869
7576 return false;
7677 }
7778
78 static void addAllModulesInSubfoldersRecursively (const File& path, int depth, ModuleIDAndFolderList& list)
79 static void addAllModulesInSubfoldersRecursively (const File& path, int depth, AvailableModuleList::ModuleIDAndFolderList& list)
7980 {
8081 if (depth > 0)
8182 {
9394 }
9495 }
9596
96 static void addAllModulesInFolder (const File& path, ModuleIDAndFolderList& list)
97 static void addAllModulesInFolder (const File& path, AvailableModuleList::ModuleIDAndFolderList& list)
9798 {
9899 if (! tryToAddModuleFromFolder (path, list))
99100 {
100 int subfolders = 3;
101 static constexpr int subfolders = 3;
101102 addAllModulesInSubfoldersRecursively (path, subfolders, list);
102103 }
103104 }
104105
105 static void sort (ModuleIDAndFolderList& listToSort)
106 {
107 std::sort (listToSort.begin(), listToSort.end(), [] (const ModuleIDAndFolder& m1, const ModuleIDAndFolder& m2)
108 {
109 return m1.first.compareIgnoreCase (m2.first) < 0;
110 });
111 }
112
113 //==============================================================================
114 struct ModuleScannerJob : public ThreadPoolJob
115 {
116 ModuleScannerJob (const Array<File>& paths, std::function<void (const ModuleIDAndFolderList&)>&& callback)
106 struct ModuleScannerJob : public ThreadPoolJob
107 {
108 ModuleScannerJob (const Array<File>& paths,
109 std::function<void (const AvailableModuleList::ModuleIDAndFolderList&)>&& callback)
117110 : ThreadPoolJob ("ModuleScannerJob"),
118111 pathsToScan (paths),
119112 completionCallback (std::move (callback))
122115
123116 JobStatus runJob() override
124117 {
125 ModuleIDAndFolderList list;
118 AvailableModuleList::ModuleIDAndFolderList list;
126119
127120 for (auto& p : pathsToScan)
128121 addAllModulesInFolder (p, list);
129122
130123 if (! shouldExit())
131124 {
132 sort (list);
125 std::sort (list.begin(), list.end(), [] (const AvailableModuleList::ModuleIDAndFolder& m1,
126 const AvailableModuleList::ModuleIDAndFolder& m2)
127 {
128 return m1.first.compareIgnoreCase (m2.first) < 0;
129 });
130
133131 completionCallback (list);
134132 }
135133
137135 }
138136
139137 Array<File> pathsToScan;
140 std::function<void (const ModuleIDAndFolderList&)> completionCallback;
138 std::function<void (const AvailableModuleList::ModuleIDAndFolderList&)> completionCallback;
141139 };
142140
143 AvailableModuleList::AvailableModuleList()
144 {
145 }
146
147141 ThreadPoolJob* AvailableModuleList::createScannerJob (const Array<File>& paths)
148142 {
149 return new ModuleScannerJob (paths, [this] (ModuleIDAndFolderList scannedModuleList)
143 return new ModuleScannerJob (paths, [this] (AvailableModuleList::ModuleIDAndFolderList scannedModuleList)
150144 {
151145 {
152146 const ScopedLock swapLock (lock);
176170 removePendingAndAddJob (createScannerJob (paths));
177171 }
178172
179 ModuleIDAndFolderList AvailableModuleList::getAllModules() const
173 AvailableModuleList::ModuleIDAndFolderList AvailableModuleList::getAllModules() const
180174 {
181175 const ScopedLock readLock (lock);
182
183176 return moduleList;
184177 }
185178
186 ModuleIDAndFolder AvailableModuleList::getModuleWithID (const String& id) const
179 AvailableModuleList::ModuleIDAndFolder AvailableModuleList::getModuleWithID (const String& id) const
187180 {
188181 const ScopedLock readLock (lock);
189182
213206 {
214207 }
215208
216 //==============================================================================
217209 void LibraryModule::writeIncludes (ProjectSaver& projectSaver, OutputStream& out)
218210 {
219211 auto& project = projectSaver.project;
220212 auto& modules = project.getEnabledModules();
221213
222 auto id = getID();
223
224 if (modules.shouldCopyModuleFilesLocally (id).getValue())
214 auto moduleID = getID();
215
216 if (modules.shouldCopyModuleFilesLocally (moduleID))
225217 {
226218 auto juceModuleFolder = moduleInfo.getFolder();
227219
228 auto localModuleFolder = project.getLocalModuleFolder (id);
220 auto localModuleFolder = project.getLocalModuleFolder (moduleID);
229221 localModuleFolder.createDirectory();
230222 projectSaver.copyFolder (juceModuleFolder, localModuleFolder);
231223 }
235227 << ">" << newLine;
236228 }
237229
238 //==============================================================================
239 static void parseAndAddLibs (StringArray& libList, const String& libs)
240 {
241 libList.addTokens (libs, ", ", {});
242 libList.trim();
243 libList.removeDuplicates (false);
244 }
245
246 void LibraryModule::addSettingsForModuleToExporter (ProjectExporter& exporter, ProjectSaver& projectSaver) const
247 {
248 auto& project = exporter.getProject();
249
230 void LibraryModule::addSearchPathsToExporter (ProjectExporter& exporter) const
231 {
250232 auto moduleRelativePath = exporter.getModuleFolderRelativeToProject (getID());
251233
252234 exporter.addToExtraSearchPaths (moduleRelativePath.getParentDirectory());
253235
254236 String libDirPlatform;
237
255238 if (exporter.isLinux())
256239 libDirPlatform = "Linux";
257240 else if (exporter.isCodeBlocks() && exporter.isWindows())
260243 libDirPlatform = exporter.getTargetFolder().getFileName();
261244
262245 auto libSubdirPath = moduleRelativePath.toUnixStyle() + "/libs/" + libDirPlatform;
263 auto moduleLibDir = File (project.getProjectFolder().getFullPathName() + "/" + libSubdirPath);
246 auto moduleLibDir = File (exporter.getProject().getProjectFolder().getFullPathName() + "/" + libSubdirPath);
264247
265248 if (moduleLibDir.exists())
266249 exporter.addToModuleLibPaths ({ libSubdirPath, moduleRelativePath.getRoot() });
274257 for (auto& path : paths)
275258 exporter.addToExtraSearchPaths (moduleRelativePath.getChildFile (path.unquoted()));
276259 }
277
278 {
279 auto extraDefs = moduleInfo.getPreprocessorDefs().trim();
280
281 if (extraDefs.isNotEmpty())
282 exporter.getExporterPreprocessorDefsValue() = exporter.getExporterPreprocessorDefsString() + "\n" + extraDefs;
283 }
284
285 {
286 Array<File> compiled;
287 auto& modules = project.getEnabledModules();
288 auto id = getID();
289
290 auto localModuleFolder = modules.shouldCopyModuleFilesLocally (id).getValue() ? project.getLocalModuleFolder (id)
291 : moduleInfo.getFolder();
292
293 findAndAddCompiledUnits (exporter, &projectSaver, compiled);
294
295 if (modules.shouldShowAllModuleFilesInProject (id).getValue())
296 addBrowseableCode (exporter, compiled, localModuleFolder);
297 }
260 }
261
262 void LibraryModule::addDefinesToExporter (ProjectExporter& exporter) const
263 {
264 auto extraDefs = moduleInfo.getPreprocessorDefs().trim();
265
266 if (extraDefs.isNotEmpty())
267 exporter.getExporterPreprocessorDefsValue() = exporter.getExporterPreprocessorDefsString() + "\n" + extraDefs;
268 }
269
270 void LibraryModule::addCompileUnitsToExporter (ProjectExporter& exporter, ProjectSaver& projectSaver) const
271 {
272 auto& project = exporter.getProject();
273 auto& modules = project.getEnabledModules();
274
275 auto moduleID = getID();
276
277 auto localModuleFolder = modules.shouldCopyModuleFilesLocally (moduleID) ? project.getLocalModuleFolder (moduleID)
278 : moduleInfo.getFolder();
279
280 Array<File> compiled;
281 findAndAddCompiledUnits (exporter, &projectSaver, compiled);
282
283 if (modules.shouldShowAllModuleFilesInProject (moduleID))
284 addBrowseableCode (exporter, compiled, localModuleFolder);
285 }
286
287 void LibraryModule::addLibsToExporter (ProjectExporter& exporter) const
288 {
289 auto parseAndAddLibsToList = [] (StringArray& libList, const String& libs)
290 {
291 libList.addTokens (libs, ", ", {});
292 libList.trim();
293 libList.removeDuplicates (false);
294 };
295
296 auto& project = exporter.getProject();
298297
299298 if (exporter.isXcode())
300299 {
311310 auto frameworks = moduleInfo.moduleInfo [xcodeExporter.isOSX() ? "OSXFrameworks" : "iOSFrameworks"].toString();
312311 xcodeExporter.xcodeFrameworks.addTokens (frameworks, ", ", {});
313312
314 parseAndAddLibs (xcodeExporter.xcodeLibs, moduleInfo.moduleInfo [exporter.isOSX() ? "OSXLibs" : "iOSLibs"].toString());
313 parseAndAddLibsToList (xcodeExporter.xcodeLibs, moduleInfo.moduleInfo [exporter.isOSX() ? "OSXLibs" : "iOSLibs"].toString());
315314 }
316315 else if (exporter.isLinux())
317316 {
318 parseAndAddLibs (exporter.linuxLibs, moduleInfo.moduleInfo ["linuxLibs"].toString());
319 parseAndAddLibs (exporter.linuxPackages, moduleInfo.moduleInfo ["linuxPackages"].toString());
317 parseAndAddLibsToList (exporter.linuxLibs, moduleInfo.moduleInfo ["linuxLibs"].toString());
318 parseAndAddLibsToList (exporter.linuxPackages, moduleInfo.moduleInfo ["linuxPackages"].toString());
320319 }
321320 else if (exporter.isWindows())
322321 {
323322 if (exporter.isCodeBlocks())
324 parseAndAddLibs (exporter.mingwLibs, moduleInfo.moduleInfo ["mingwLibs"].toString());
323 parseAndAddLibsToList (exporter.mingwLibs, moduleInfo.moduleInfo ["mingwLibs"].toString());
325324 else
326 parseAndAddLibs (exporter.windowsLibs, moduleInfo.moduleInfo ["windowsLibs"].toString());
325 parseAndAddLibsToList (exporter.windowsLibs, moduleInfo.moduleInfo ["windowsLibs"].toString());
327326 }
328327 else if (exporter.isAndroid())
329328 {
330 parseAndAddLibs (exporter.androidLibs, moduleInfo.moduleInfo ["androidLibs"].toString());
331 }
329 parseAndAddLibsToList (exporter.androidLibs, moduleInfo.moduleInfo ["androidLibs"].toString());
330 }
331 }
332
333 void LibraryModule::addSettingsForModuleToExporter (ProjectExporter& exporter, ProjectSaver& projectSaver) const
334 {
335 addSearchPathsToExporter (exporter);
336 addDefinesToExporter (exporter);
337 addCompileUnitsToExporter (exporter, projectSaver);
338 addLibsToExporter (exporter);
332339 }
333340
334341 void LibraryModule::getConfigFlags (Project& project, OwnedArray<Project::ConfigFlag>& flags) const
383390 }
384391 }
385392
386 //==============================================================================
393 static void addFileWithGroups (Project::Item& group, const RelativePath& file, const String& path)
394 {
395 auto slash = path.indexOfChar (File::getSeparatorChar());
396
397 if (slash >= 0)
398 {
399 auto topLevelGroup = path.substring (0, slash);
400 auto remainingPath = path.substring (slash + 1);
401
402 auto newGroup = group.getOrCreateSubGroup (topLevelGroup);
403 addFileWithGroups (newGroup, file, remainingPath);
404 }
405 else
406 {
407 if (! group.containsChildForFile (file))
408 group.addRelativeFile (file, -1, false);
409 }
410 }
411
387412 struct FileSorter
388413 {
389414 static int compareElements (const File& f1, const File& f2)
392417 }
393418 };
394419
395 bool LibraryModule::CompileUnit::hasSuffix (const File& f, const char* suffix)
396 {
397 auto fileWithoutSuffix = f.getFileNameWithoutExtension() + ".";
398
399 return fileWithoutSuffix.containsIgnoreCase (suffix + String ("."))
400 || fileWithoutSuffix.containsIgnoreCase (suffix + String ("_"));
401 }
402
403 void LibraryModule::CompileUnit::writeInclude (MemoryOutputStream&) const
404 {
420 void LibraryModule::findBrowseableFiles (const File& folder, Array<File>& filesFound) const
421 {
422 Array<File> tempList;
423 FileSorter sorter;
424
425 DirectoryIterator iter (folder, true, "*", File::findFiles);
426 bool isHiddenFile;
427
428 while (iter.next (nullptr, &isHiddenFile, nullptr, nullptr, nullptr, nullptr))
429 if (! isHiddenFile && iter.getFile().hasFileExtension (browseableFileExtensions))
430 tempList.addSorted (sorter, iter.getFile());
431
432 filesFound.addArray (tempList);
405433 }
406434
407435 bool LibraryModule::CompileUnit::isNeededForExporter (ProjectExporter& exporter) const
425453 String LibraryModule::CompileUnit::getFilenameForProxyFile() const
426454 {
427455 return "include_" + file.getFileName();
456 }
457
458 bool LibraryModule::CompileUnit::hasSuffix (const File& f, const char* suffix)
459 {
460 auto fileWithoutSuffix = f.getFileNameWithoutExtension() + ".";
461
462 return fileWithoutSuffix.containsIgnoreCase (suffix + String ("."))
463 || fileWithoutSuffix.containsIgnoreCase (suffix + String ("_"));
428464 }
429465
430466 Array<LibraryModule::CompileUnit> LibraryModule::getAllCompileUnits (ProjectType::Target::Type forTarget) const
485521 }
486522 }
487523
488 static void addFileWithGroups (Project::Item& group, const RelativePath& file, const String& path)
489 {
490 auto slash = path.indexOfChar (File::getSeparatorChar());
491
492 if (slash >= 0)
493 {
494 auto topLevelGroup = path.substring (0, slash);
495 auto remainingPath = path.substring (slash + 1);
496
497 auto newGroup = group.getOrCreateSubGroup (topLevelGroup);
498 addFileWithGroups (newGroup, file, remainingPath);
499 }
500 else
501 {
502 if (! group.containsChildForFile (file))
503 group.addRelativeFile (file, -1, false);
504 }
505 }
506
507 void LibraryModule::findBrowseableFiles (const File& folder, Array<File>& filesFound) const
508 {
509 Array<File> tempList;
510 FileSorter sorter;
511
512 DirectoryIterator iter (folder, true, "*", File::findFiles);
513 bool isHiddenFile;
514
515 while (iter.next (nullptr, &isHiddenFile, nullptr, nullptr, nullptr, nullptr))
516 if (! isHiddenFile && iter.getFile().hasFileExtension (browseableFileExtensions))
517 tempList.addSorted (sorter, iter.getFile());
518
519 filesFound.addArray (tempList);
520 }
521
522524 void LibraryModule::addBrowseableCode (ProjectExporter& exporter, const Array<File>& compiled, const File& localModuleFolder) const
523525 {
524526 if (sourceFiles.isEmpty())
530532
531533 auto& project = exporter.getProject();
532534
533 if (project.getEnabledModules().shouldCopyModuleFilesLocally (getID()).getValue())
535 if (project.getEnabledModules().shouldCopyModuleFilesLocally (getID()))
534536 moduleHeader = project.getLocalModuleFolder (getID()).getChildFile (moduleHeader.getFileName());
535537
536538 auto isModuleHeader = [&] (const File& f) { return f.getFileName() == moduleHeader.getFileName(); };
551553 exporter.getModulesGroup().state.appendChild (sourceGroup.state.createCopy(), nullptr);
552554 }
553555
554
555556 //==============================================================================
556557 EnabledModuleList::EnabledModuleList (Project& p, const ValueTree& s)
557558 : project (p), state (s)
558559 {
559560 }
560561
562 StringArray EnabledModuleList::getAllModules() const
563 {
564 StringArray moduleIDs;
565
566 for (int i = 0; i < getNumModules(); ++i)
567 moduleIDs.add (getModuleID (i));
568
569 return moduleIDs;
570 }
571
572 void EnabledModuleList::createRequiredModules (OwnedArray<LibraryModule>& modules)
573 {
574 for (int i = 0; i < getNumModules(); ++i)
575 modules.add (new LibraryModule (getModuleInfo (getModuleID (i))));
576 }
577
578 void EnabledModuleList::sortAlphabetically()
579 {
580 struct ModuleTreeSorter
581 {
582 static int compareElements (const ValueTree& m1, const ValueTree& m2)
583 {
584 return m1[Ids::ID].toString().compareIgnoreCase (m2[Ids::ID]);
585 }
586 };
587
588 ModuleTreeSorter sorter;
589 state.sort (sorter, getUndoManager(), false);
590 }
591
592 File EnabledModuleList::getDefaultModulesFolder() const
593 {
594 File globalPath (getAppSettings().getStoredPath (Ids::defaultJuceModulePath, TargetOS::getThisOS()).get().toString());
595
596 if (globalPath.exists())
597 return globalPath;
598
599 for (auto& exporterPathModule : project.getExporterPathsModuleList().getAllModules())
600 {
601 auto f = exporterPathModule.second;
602
603 if (f.isDirectory())
604 return f.getParentDirectory();
605 }
606
607 return File::getCurrentWorkingDirectory();
608 }
609
561610 ModuleDescription EnabledModuleList::getModuleInfo (const String& moduleID)
562611 {
563612 return ModuleDescription (project.getModuleWithID (moduleID).second);
568617 return state.getChildWithProperty (Ids::ID, moduleID).isValid();
569618 }
570619
571 bool EnabledModuleList::isAudioPluginModuleMissing() const
572 {
573 return project.isAudioPluginProject()
574 && ! isModuleEnabled ("juce_audio_plugin_client");
620 static void getDependencies (Project& project, const String& moduleID, StringArray& dependencies)
621 {
622 auto info = project.getEnabledModules().getModuleInfo (moduleID);
623
624 for (auto uid : info.getDependencies())
625 {
626 if (! dependencies.contains (uid, true))
627 {
628 dependencies.add (uid);
629 getDependencies (project, uid, dependencies);
630 }
631 }
632 }
633
634 StringArray EnabledModuleList::getExtraDependenciesNeeded (const String& moduleID) const
635 {
636 StringArray dependencies, extraDepsNeeded;
637 getDependencies (project, moduleID, dependencies);
638
639 for (auto dep : dependencies)
640 if (dep != moduleID && ! isModuleEnabled (dep))
641 extraDepsNeeded.add (dep);
642
643 return extraDepsNeeded;
644 }
645
646 bool EnabledModuleList::doesModuleHaveHigherCppStandardThanProject (const String& moduleID)
647 {
648 auto projectCppStandard = project.getCppStandardString();
649
650 if (projectCppStandard == "latest")
651 return false;
652
653 auto moduleCppStandard = getModuleInfo (moduleID).getMinimumCppStandard();
654
655 return (moduleCppStandard.getIntValue() > projectCppStandard.getIntValue());
575656 }
576657
577658 bool EnabledModuleList::shouldUseGlobalPath (const String& moduleID) const
578659 {
579 return static_cast<bool> (state.getChildWithProperty (Ids::ID, moduleID)
580 .getProperty (Ids::useGlobalPath));
581 }
582
583 Value EnabledModuleList::getShouldUseGlobalPathValue (const String& moduleID) const
660 return (bool) shouldUseGlobalPathValue (moduleID).getValue();
661 }
662
663 Value EnabledModuleList::shouldUseGlobalPathValue (const String& moduleID) const
584664 {
585665 return state.getChildWithProperty (Ids::ID, moduleID)
586666 .getPropertyAsValue (Ids::useGlobalPath, getUndoManager());
587667 }
588668
589 Value EnabledModuleList::shouldShowAllModuleFilesInProject (const String& moduleID)
669 bool EnabledModuleList::shouldShowAllModuleFilesInProject (const String& moduleID) const
670 {
671 return (bool) shouldShowAllModuleFilesInProjectValue (moduleID).getValue();
672 }
673
674 Value EnabledModuleList::shouldShowAllModuleFilesInProjectValue (const String& moduleID) const
590675 {
591676 return state.getChildWithProperty (Ids::ID, moduleID)
592677 .getPropertyAsValue (Ids::showAllCode, getUndoManager());
593678 }
594679
595 struct ModuleTreeSorter
596 {
597 static int compareElements (const ValueTree& m1, const ValueTree& m2)
598 {
599 return m1[Ids::ID].toString().compareIgnoreCase (m2[Ids::ID]);
600 }
601 };
602
603 void EnabledModuleList::sortAlphabetically()
604 {
605 ModuleTreeSorter sorter;
606 state.sort (sorter, getUndoManager(), false);
607 }
608
609 Value EnabledModuleList::shouldCopyModuleFilesLocally (const String& moduleID) const
680 bool EnabledModuleList::shouldCopyModuleFilesLocally (const String& moduleID) const
681 {
682 return (bool) shouldCopyModuleFilesLocallyValue (moduleID).getValue();
683 }
684
685 Value EnabledModuleList::shouldCopyModuleFilesLocallyValue (const String& moduleID) const
610686 {
611687 return state.getChildWithProperty (Ids::ID, moduleID)
612688 .getPropertyAsValue (Ids::useLocalCopy, getUndoManager());
613689 }
614690
691 bool EnabledModuleList::areMostModulesUsingGlobalPath() const
692 {
693 int numYes = 0, numNo = 0;
694
695 for (auto i = getNumModules(); --i >= 0;)
696 {
697 if (shouldUseGlobalPath (getModuleID (i)))
698 ++numYes;
699 else
700 ++numNo;
701 }
702
703 return numYes > numNo;
704 }
705
706 bool EnabledModuleList::areMostModulesCopiedLocally() const
707 {
708 int numYes = 0, numNo = 0;
709
710 for (auto i = getNumModules(); --i >= 0;)
711 {
712 if (shouldCopyModuleFilesLocally (getModuleID (i)))
713 ++numYes;
714 else
715 ++numNo;
716 }
717
718 return numYes > numNo;
719 }
720
615721 void EnabledModuleList::addModule (const File& moduleFolder, bool copyLocally, bool useGlobalPath, bool sendAnalyticsEvent)
616722 {
617723 ModuleDescription info (moduleFolder);
628734 state.appendChild (module, getUndoManager());
629735 sortAlphabetically();
630736
631 shouldShowAllModuleFilesInProject (moduleID) = true;
632 shouldCopyModuleFilesLocally (moduleID) = copyLocally;
633 getShouldUseGlobalPathValue (moduleID) = useGlobalPath;
737 shouldShowAllModuleFilesInProjectValue (moduleID) = true;
738 shouldCopyModuleFilesLocallyValue (moduleID) = copyLocally;
739 shouldUseGlobalPathValue (moduleID) = useGlobalPath;
634740
635741 RelativePath path (moduleFolder.getParentDirectory(),
636742 project.getProjectFolder(), RelativePath::projectFolder);
652758 }
653759 }
654760
761 void EnabledModuleList::addModuleInteractive (const String& moduleID)
762 {
763 auto f = project.getModuleWithID (moduleID).second;
764
765 if (f != File())
766 {
767 addModule (f, areMostModulesCopiedLocally(), areMostModulesUsingGlobalPath(), true);
768 return;
769 }
770
771 addModuleFromUserSelectedFile();
772 }
773
774 void EnabledModuleList::addModuleFromUserSelectedFile()
775 {
776 auto lastLocation = getDefaultModulesFolder();
777
778 FileChooser fc ("Select a module to add...", lastLocation, {});
779
780 if (fc.browseForDirectory())
781 {
782 lastLocation = fc.getResult();
783 addModuleOfferingToCopy (lastLocation, true);
784 }
785 }
786
787 void EnabledModuleList::addModuleOfferingToCopy (const File& f, bool isFromUserSpecifiedFolder)
788 {
789 ModuleDescription m (f);
790
791 if (! m.isValid())
792 {
793 AlertWindow::showMessageBoxAsync (AlertWindow::InfoIcon,
794 "Add Module", "This wasn't a valid module folder!");
795 return;
796 }
797
798 if (isModuleEnabled (m.getID()))
799 {
800 AlertWindow::showMessageBoxAsync (AlertWindow::InfoIcon,
801 "Add Module", "The project already contains this module!");
802 return;
803 }
804
805 addModule (m.moduleFolder, areMostModulesCopiedLocally(),
806 isFromUserSpecifiedFolder ? false : areMostModulesUsingGlobalPath(),
807 true);
808 }
809
655810 void EnabledModuleList::removeModule (String moduleID) // must be pass-by-value, and not a const ref!
656811 {
657812 for (auto i = state.getNumChildren(); --i >= 0;)
661816 for (Project::ExporterIterator exporter (project); exporter.next();)
662817 exporter->removePathForModule (moduleID);
663818 }
664
665 void EnabledModuleList::createRequiredModules (OwnedArray<LibraryModule>& modules)
666 {
667 for (int i = 0; i < getNumModules(); ++i)
668 modules.add (new LibraryModule (getModuleInfo (getModuleID (i))));
669 }
670
671 StringArray EnabledModuleList::getAllModules() const
672 {
673 StringArray moduleIDs;
674
675 for (int i = 0; i < getNumModules(); ++i)
676 moduleIDs.add (getModuleID (i));
677
678 return moduleIDs;
679 }
680
681 static void getDependencies (Project& project, const String& moduleID, StringArray& dependencies)
682 {
683 auto info = project.getEnabledModules().getModuleInfo (moduleID);
684
685 for (auto uid : info.getDependencies())
686 {
687 if (! dependencies.contains (uid, true))
688 {
689 dependencies.add (uid);
690 getDependencies (project, uid, dependencies);
691 }
692 }
693 }
694
695 StringArray EnabledModuleList::getExtraDependenciesNeeded (const String& moduleID) const
696 {
697 StringArray dependencies, extraDepsNeeded;
698 getDependencies (project, moduleID, dependencies);
699
700 for (auto dep : dependencies)
701 if (dep != moduleID && ! isModuleEnabled (dep))
702 extraDepsNeeded.add (dep);
703
704 return extraDepsNeeded;
705 }
706
707 bool EnabledModuleList::doesModuleHaveHigherCppStandardThanProject (const String& moduleID)
708 {
709 auto projectCppStandard = project.getCppStandardString();
710
711 if (projectCppStandard == "latest")
712 return false;
713
714 auto moduleCppStandard = getModuleInfo (moduleID).getMinimumCppStandard();
715
716 return (moduleCppStandard.getIntValue() > projectCppStandard.getIntValue());
717 }
718
719 bool EnabledModuleList::areMostModulesUsingGlobalPath() const
720 {
721 int numYes = 0, numNo = 0;
722
723 for (auto i = getNumModules(); --i >= 0;)
724 {
725 if (shouldUseGlobalPath (getModuleID (i)))
726 ++numYes;
727 else
728 ++numNo;
729 }
730
731 return numYes > numNo;
732 }
733
734 bool EnabledModuleList::areMostModulesCopiedLocally() const
735 {
736 int numYes = 0, numNo = 0;
737
738 for (auto i = getNumModules(); --i >= 0;)
739 {
740 if (shouldCopyModuleFilesLocally (getModuleID (i)).getValue())
741 ++numYes;
742 else
743 ++numNo;
744 }
745
746 return numYes > numNo;
747 }
748
749 void EnabledModuleList::setLocalCopyModeForAllModules (bool copyLocally)
750 {
751 for (auto i = getNumModules(); --i >= 0;)
752 shouldCopyModuleFilesLocally (project.getEnabledModules().getModuleID (i)) = copyLocally;
753 }
754
755 File EnabledModuleList::findDefaultModulesFolder (Project& project)
756 {
757 File globalPath (getAppSettings().getStoredPath (Ids::defaultJuceModulePath, TargetOS::getThisOS()).get().toString());
758
759 if (globalPath.exists())
760 return globalPath;
761
762 for (auto& exporterPathModule : project.getExporterPathsModuleList().getAllModules())
763 {
764 auto f = exporterPathModule.second;
765
766 if (f.isDirectory())
767 return f.getParentDirectory();
768 }
769
770 return File::getCurrentWorkingDirectory();
771 }
772
773 void EnabledModuleList::addModuleFromUserSelectedFile()
774 {
775 static auto lastLocation = findDefaultModulesFolder (project);
776
777 FileChooser fc ("Select a module to add...", lastLocation, {});
778
779 if (fc.browseForDirectory())
780 {
781 lastLocation = fc.getResult();
782 addModuleOfferingToCopy (lastLocation, true);
783 }
784 }
785
786 void EnabledModuleList::addModuleInteractive (const String& moduleID)
787 {
788 auto f = project.getModuleWithID (moduleID).second;
789
790 if (f != File())
791 {
792 addModule (f, areMostModulesCopiedLocally(), areMostModulesUsingGlobalPath(), true);
793 return;
794 }
795
796 addModuleFromUserSelectedFile();
797 }
798
799 void EnabledModuleList::addModuleOfferingToCopy (const File& f, bool isFromUserSpecifiedFolder)
800 {
801 ModuleDescription m (f);
802
803 if (! m.isValid())
804 {
805 AlertWindow::showMessageBoxAsync (AlertWindow::InfoIcon,
806 "Add Module", "This wasn't a valid module folder!");
807 return;
808 }
809
810 if (isModuleEnabled (m.getID()))
811 {
812 AlertWindow::showMessageBoxAsync (AlertWindow::InfoIcon,
813 "Add Module", "The project already contains this module!");
814 return;
815 }
816
817 addModule (m.moduleFolder, areMostModulesCopiedLocally(),
818 isFromUserSpecifiedFolder ? false : areMostModulesUsingGlobalPath(),
819 true);
820 }
821
822 bool isJUCEFolder (const File& f)
823 {
824 return isJUCEModulesFolder (f.getChildFile ("modules"));
825 }
826
827 bool isJUCEModulesFolder (const File& f)
828 {
829 return f.isDirectory() && f.getChildFile ("juce_core").isDirectory();
830 }
3030 class ProjectSaver;
3131
3232 //==============================================================================
33 bool isJUCEModulesFolder (const File&);
34 bool isJUCEFolder (const File&);
35
36 //==============================================================================
3733 struct ModuleDescription
3834 {
39 ModuleDescription() {}
35 ModuleDescription() = default;
4036 ModuleDescription (const File& folder);
41 ModuleDescription (const var& info) : moduleInfo (info) {}
4237
4338 bool isValid() const { return getID().isNotEmpty(); }
4439
5651 File getFolder() const { jassert (moduleFolder != File()); return moduleFolder; }
5752 File getHeader() const;
5853
59 bool isPluginClient() const { return getID() == "juce_audio_plugin_client"; }
60
6154 File moduleFolder;
6255 var moduleInfo;
6356 URL url;
9083 File file;
9184 bool isCompiledForObjC, isCompiledForNonObjC;
9285
93 void writeInclude (MemoryOutputStream&) const;
9486 bool isNeededForExporter (ProjectExporter&) const;
9587 String getFilenameForProxyFile() const;
9688 static bool hasSuffix (const File&, const char*);
10395 ModuleDescription moduleInfo;
10496
10597 private:
98 void addSearchPathsToExporter (ProjectExporter&) const;
99 void addDefinesToExporter (ProjectExporter&) const;
100 void addCompileUnitsToExporter (ProjectExporter&, ProjectSaver&) const;
101 void addLibsToExporter (ProjectExporter&) const;
102
103 void addBrowseableCode (ProjectExporter&, const Array<File>& compiled, const File& localModuleFolder) const;
104
106105 mutable Array<File> sourceFiles;
107106 OwnedArray<Project::ConfigFlag> configFlags;
108
109 void addBrowseableCode (ProjectExporter&, const Array<File>& compiled, const File& localModuleFolder) const;
110 };
111
112 //==============================================================================
113 using ModuleIDAndFolder = std::pair<String, File>;
114 using ModuleIDAndFolderList = std::vector<ModuleIDAndFolder>;
115
107 };
108
109 //==============================================================================
116110 class AvailableModuleList
117111 {
118112 public:
119 AvailableModuleList();
113 using ModuleIDAndFolder = std::pair<String, File>;
114 using ModuleIDAndFolderList = std::vector<ModuleIDAndFolder>;
115
116 AvailableModuleList() = default;
120117
121118 void scanPaths (const Array<File>&);
122119 void scanPathsAsync (const Array<File>&);
156153 public:
157154 EnabledModuleList (Project&, const ValueTree&);
158155
159 static File findDefaultModulesFolder (Project&);
156 //==============================================================================
157 ValueTree getState() const { return state; }
158
159 StringArray getAllModules() const;
160 void createRequiredModules (OwnedArray<LibraryModule>& modules);
161 void sortAlphabetically();
162
163 File getDefaultModulesFolder() const;
164
165 int getNumModules() const { return state.getNumChildren(); }
166 String getModuleID (int index) const { return state.getChild (index) [Ids::ID].toString(); }
167
168 ModuleDescription getModuleInfo (const String& moduleID);
160169
161170 bool isModuleEnabled (const String& moduleID) const;
171 StringArray getExtraDependenciesNeeded (const String& moduleID) const;
172 bool doesModuleHaveHigherCppStandardThanProject (const String& moduleID);
162173
163174 bool shouldUseGlobalPath (const String& moduleID) const;
164 Value getShouldUseGlobalPathValue (const String& moduleID) const;
165
166 Value shouldShowAllModuleFilesInProject (const String& moduleID);
167 Value shouldCopyModuleFilesLocally (const String& moduleID) const;
168
169 void removeModule (String moduleID);
170 bool isAudioPluginModuleMissing() const;
171
172 ModuleDescription getModuleInfo (const String& moduleID);
173
175 Value shouldUseGlobalPathValue (const String& moduleID) const;
176
177 bool shouldShowAllModuleFilesInProject (const String& moduleID) const;
178 Value shouldShowAllModuleFilesInProjectValue (const String& moduleID) const;
179
180 bool shouldCopyModuleFilesLocally (const String& moduleID) const;
181 Value shouldCopyModuleFilesLocallyValue (const String& moduleID) const;
182
183 bool areMostModulesUsingGlobalPath() const;
184 bool areMostModulesCopiedLocally() const;
185
186 //==============================================================================
174187 void addModule (const File& moduleManifestFile, bool copyLocally, bool useGlobalPath, bool sendAnalyticsEvent);
175188 void addModuleInteractive (const String& moduleID);
176189 void addModuleFromUserSelectedFile();
177190 void addModuleOfferingToCopy (const File&, bool isFromUserSpecifiedFolder);
178191
179 StringArray getAllModules() const;
180 StringArray getExtraDependenciesNeeded (const String& moduleID) const;
181 bool doesModuleHaveHigherCppStandardThanProject (const String& moduleID);
182 void createRequiredModules (OwnedArray<LibraryModule>& modules);
183
184 int getNumModules() const { return state.getNumChildren(); }
185 String getModuleID (int index) const { return state.getChild (index) [Ids::ID].toString(); }
186
187 bool areMostModulesUsingGlobalPath() const;
188 bool areMostModulesCopiedLocally() const;
189
190 void setLocalCopyModeForAllModules (bool copyLocally);
191
192 void sortAlphabetically();
192 void removeModule (String moduleID);
193
194 private:
195 UndoManager* getUndoManager() const { return project.getUndoManagerFor (state); }
193196
194197 Project& project;
195198 ValueTree state;
196199
197 private:
198 UndoManager* getUndoManager() const { return project.getUndoManagerFor (state); }
199
200200 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (EnabledModuleList)
201201 };
20992099 exporterPathsModuleList->scanPaths (getExporterModulePathsToScan (*this));
21002100 }
21012101
2102 ModuleIDAndFolder Project::getModuleWithID (const String& id)
2102 AvailableModuleList::ModuleIDAndFolder Project::getModuleWithID (const String& id)
21032103 {
21042104 if (! getEnabledModules().shouldUseGlobalPath (id))
21052105 {
3636 public:
3737 MakeBuildConfiguration (Project& p, const ValueTree& settings, const ProjectExporter& e)
3838 : BuildConfiguration (p, settings, e),
39 architectureTypeValue (config, Ids::linuxArchitecture, getUndoManager(), "-march=native")
39 architectureTypeValue (config, Ids::linuxArchitecture, getUndoManager(), String())
4040 {
4141 linkTimeOptimisationValue.setDefault (false);
4242 optimisationLevelValue.setDefault (isDebug() ? gccO0 : gccO3);
21512151 void addFilesAndGroupsToProject (StringArray& topLevelGroupIDs) const
21522152 {
21532153 for (auto* target : targets)
2154 addEntitlementsFile (*target);
2154 if (target->shouldAddEntitlements())
2155 addEntitlementsFile (*target);
21552156
21562157 for (auto& group : getAllGroups())
21572158 {
31853186
31863187 void addEntitlementsFile (XcodeTarget& target) const
31873188 {
3189 String content =
3190 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
3191 "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
3192 "<plist version=\"1.0\">\n"
3193 "<dict>\n";
3194
31883195 auto entitlements = getEntitlements (target);
31893196
3190 if (entitlements.size() > 0)
3191 {
3192 String content =
3193 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
3194 "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n"
3195 "<plist version=\"1.0\">\n"
3196 "<dict>\n";
3197
3198 for (auto& key : entitlements.getAllKeys())
3199 content += "\t<key>" + key + "</key>\n"
3200 "\t" + entitlements[key] + "\n";
3201
3202 content += "</dict>\n"
3203 "</plist>\n";
3204
3205 auto entitlementsFile = getTargetFolder().getChildFile (target.getEntitlementsFilename());
3206 overwriteFileIfDifferentOrThrow (entitlementsFile, content);
3207
3208 RelativePath entitlementsPath (entitlementsFile, getTargetFolder(), RelativePath::buildTargetFolder);
3209 addFile (entitlementsPath, false, false, false, false, nullptr, {});
3210 }
3197 for (auto& key : entitlements.getAllKeys())
3198 content += "\t<key>" + key + "</key>\n"
3199 "\t" + entitlements[key] + "\n";
3200
3201 content += "</dict>\n"
3202 "</plist>\n";
3203
3204 auto entitlementsFile = getTargetFolder().getChildFile (target.getEntitlementsFilename());
3205 overwriteFileIfDifferentOrThrow (entitlementsFile, content);
3206
3207 RelativePath entitlementsPath (entitlementsFile, getTargetFolder(), RelativePath::buildTargetFolder);
3208 addFile (entitlementsPath, false, false, false, false, nullptr, {});
32113209 }
32123210
32133211 String addProjectItem (const Project::Item& projectItem) const
616616
617617 RelativePath ProjectExporter::getModuleFolderRelativeToProject (const String& moduleID) const
618618 {
619 if (project.getEnabledModules().shouldCopyModuleFilesLocally (moduleID).getValue())
619 if (project.getEnabledModules().shouldCopyModuleFilesLocally (moduleID))
620620 return RelativePath (project.getRelativePathForFile (project.getLocalModuleFolder (moduleID)),
621621 RelativePath::projectFolder);
622622
635635
636636 RelativePath ProjectExporter::getLegacyModulePath (const String& moduleID) const
637637 {
638 if (project.getEnabledModules().state.getChildWithProperty (Ids::ID, moduleID) ["useLocalCopy"])
638 if (project.getEnabledModules().shouldCopyModuleFilesLocally (moduleID))
639639 return RelativePath (project.getRelativePathForFile (project.getGeneratedCodeFolder()
640640 .getChildFile ("modules")
641641 .getChildFile (moduleID)), RelativePath::projectFolder);
410410 return directory.getChildFile ("Assets").getChildFile ("juce_icon.png").existsAsFile();
411411 }
412412
413 bool isJUCEFolder (const File& f)
414 {
415 return isJUCEModulesFolder (f.getChildFile ("modules"));
416 }
417
418 bool isJUCEModulesFolder (const File& f)
419 {
420 return f.isDirectory() && f.getChildFile ("juce_core").isDirectory();
421 }
422
413423 //==============================================================================
414424 static var parseJUCEHeaderMetadata (const StringArray& lines)
415425 {
7272
7373 bool isValidJUCEExamplesDirectory (const File&) noexcept;
7474
75 bool isJUCEModulesFolder (const File&);
76 bool isJUCEFolder (const File&);
77
7578 //==============================================================================
7679 int indexOfLineStartingWith (const StringArray& lines, const String& text, int startIndex);
7780
8686
8787 void filesDropped (const StringArray& selectedFiles, int, int) override
8888 {
89
9089 setTo (selectedFiles[0]);
9190
9291 highlightForDragAndDrop = false;
3131 JUCE_OUTDIR := build
3232
3333 ifeq ($(TARGET_ARCH),)
34 TARGET_ARCH := -march=native
34 TARGET_ARCH :=
3535 endif
3636
3737 JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
5252 JUCE_OUTDIR := build
5353
5454 ifeq ($(TARGET_ARCH),)
55 TARGET_ARCH := -march=native
55 TARGET_ARCH :=
5656 endif
5757
5858 JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa x11 xinerama xext freetype2 webkit2gtk-4.0 gtk+-x11-3.0 libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules $(CPPFLAGS)
4646
4747 #define JUCE_USE_DARK_SPLASH_SCREEN 1
4848
49 #define JUCE_PROJUCER_VERSION 0x50406
49 #define JUCE_PROJUCER_VERSION 0x50407
5050
5151 //==============================================================================
5252 #define JUCE_MODULE_AVAILABLE_juce_analytics 1
00 <?xml version="1.0" encoding="UTF-8"?>
11
22 <JUCERPROJECT id="Z2Xzcp" name="UnitTestRunner" projectType="consoleapp" bundleIdentifier="com.roli.UnitTestRunner"
3 jucerVersion="5.4.6" defines="JUCE_UNIT_TESTS=1" displaySplashScreen="0"
3 jucerVersion="5.4.7" defines="JUCE_UNIT_TESTS=1" displaySplashScreen="0"
44 reportAppUsage="0" companyName="ROLI Ltd." companyCopyright="ROLI Ltd.">
55 <MAINGROUP id="GZdWCU" name="UnitTestRunner">
66 <GROUP id="{22894462-E1A9-036F-ED94-B51A50C87552}" name="Source">
4646
4747 #define JUCE_USE_DARK_SPLASH_SCREEN 1
4848
49 #define JUCE_PROJUCER_VERSION 0x50406
49 #define JUCE_PROJUCER_VERSION 0x50407
5050
5151 //==============================================================================
5252 #define JUCE_MODULE_AVAILABLE_juce_audio_basics 1
00 <?xml version="1.0" encoding="UTF-8"?>
11
22 <JUCERPROJECT id="IvabE4" name="WindowsDLL" projectType="library" juceLinkage="none"
3 bundleIdentifier="com.roli.jucedll" jucerVersion="5.4.6" defines="JUCE_DLL_BUILD=1"
3 bundleIdentifier="com.roli.jucedll" jucerVersion="5.4.7" defines="JUCE_DLL_BUILD=1"
44 displaySplashScreen="0" reportAppUsage="0" companyName="ROLI Ltd."
55 companyCopyright="ROLI Ltd.">
66 <EXPORTFORMATS>
3535
3636 ID: juce_analytics
3737 vendor: juce
38 version: 5.4.6
38 version: 5.4.7
3939 name: JUCE analytics classes
4040 description: Classes to collect analytics and send to destinations
4141 website: http://www.juce.com/juce
3131
3232 ID: juce_audio_basics
3333 vendor: juce
34 version: 5.4.6
34 version: 5.4.7
3535 name: JUCE audio and MIDI data classes
3636 description: Classes for audio buffer manipulation, midi message handling, synthesis, etc.
3737 website: http://www.juce.com/juce
3131
3232 ID: juce_audio_devices
3333 vendor: juce
34 version: 5.4.6
34 version: 5.4.7
3535 name: JUCE audio and MIDI I/O device classes
3636 description: Classes to play and record from audio and MIDI I/O devices
3737 website: http://www.juce.com/juce
513513 IDirectSoundBuffer* pOutputBuffer;
514514 DWORD writeOffset;
515515 int totalBytesPerBuffer, bytesPerBuffer;
516 unsigned int lastPlayCursor;
517516
518517 bool firstPlayTime;
519518 int64 lastPlayTime, ticksPerBuffer;
12141213 initialiseDSoundFunctions();
12151214 }
12161215
1217 void scanForDevices()
1216 void scanForDevices() override
12181217 {
12191218 hasScanned = true;
12201219 deviceList.scan();
12211220 }
12221221
1223 StringArray getDeviceNames (bool wantInputNames) const
1222 StringArray getDeviceNames (bool wantInputNames) const override
12241223 {
12251224 jassert (hasScanned); // need to call scanForDevices() before doing this
12261225
12281227 : deviceList.outputDeviceNames;
12291228 }
12301229
1231 int getDefaultDeviceIndex (bool /*forInput*/) const
1230 int getDefaultDeviceIndex (bool /*forInput*/) const override
12321231 {
12331232 jassert (hasScanned); // need to call scanForDevices() before doing this
12341233 return 0;
12351234 }
12361235
1237 int getIndexOfDevice (AudioIODevice* device, bool asInput) const
1236 int getIndexOfDevice (AudioIODevice* device, bool asInput) const override
12381237 {
12391238 jassert (hasScanned); // need to call scanForDevices() before doing this
12401239
12451244 return -1;
12461245 }
12471246
1248 bool hasSeparateInputsAndOutputs() const { return true; }
1247 bool hasSeparateInputsAndOutputs() const override { return true; }
12491248
12501249 AudioIODevice* createDevice (const String& outputDeviceName,
1251 const String& inputDeviceName)
1250 const String& inputDeviceName) override
12521251 {
12531252 jassert (hasScanned); // need to call scanForDevices() before doing this
12541253
14441444 }
14451445
14461446 //==============================================================================
1447 void scanForDevices()
1447 void scanForDevices() override
14481448 {
14491449 hasScanned = true;
14501450
14571457 outputDeviceIds, inputDeviceIds);
14581458 }
14591459
1460 StringArray getDeviceNames (bool wantInputNames) const
1460 StringArray getDeviceNames (bool wantInputNames) const override
14611461 {
14621462 jassert (hasScanned); // need to call scanForDevices() before doing this
14631463
14651465 : outputDeviceNames;
14661466 }
14671467
1468 int getDefaultDeviceIndex (bool /*forInput*/) const
1468 int getDefaultDeviceIndex (bool /*forInput*/) const override
14691469 {
14701470 jassert (hasScanned); // need to call scanForDevices() before doing this
14711471 return 0;
14721472 }
14731473
1474 int getIndexOfDevice (AudioIODevice* device, bool asInput) const
1474 int getIndexOfDevice (AudioIODevice* device, bool asInput) const override
14751475 {
14761476 jassert (hasScanned); // need to call scanForDevices() before doing this
14771477
14821482 return -1;
14831483 }
14841484
1485 bool hasSeparateInputsAndOutputs() const { return true; }
1485 bool hasSeparateInputsAndOutputs() const override { return true; }
14861486
14871487 AudioIODevice* createDevice (const String& outputDeviceName,
1488 const String& inputDeviceName)
1488 const String& inputDeviceName) override
14891489 {
14901490 jassert (hasScanned); // need to call scanForDevices() before doing this
14911491
3535
3636 ID: juce_audio_formats
3737 vendor: juce
38 version: 5.4.6
38 version: 5.4.7
3939 name: JUCE audio file format codecs
4040 description: Classes for reading and writing various audio file formats.
4141 website: http://www.juce.com/juce
2929 //==============================================================================
3030 #define UNITY_AUDIO_PLUGIN_API_VERSION 0x010401
3131
32 #if JUCE_WINDOWS
32 #if JUCE_MSVC
3333 #define UNITY_INTERFACE_API __stdcall
3434 #define UNITY_INTERFACE_EXPORT __declspec(dllexport)
3535 #else
834834 void audioProcessorChanged (AudioProcessor*) override
835835 {
836836 vstEffect.initialDelay = processor->getLatencySamples();
837
837 triggerAsyncUpdate();
838 }
839
840 void handleAsyncUpdate() override
841 {
838842 if (hostCallback != nullptr)
843 {
839844 hostCallback (&vstEffect, Vst2::audioMasterUpdateDisplay, 0, 0, nullptr, 0);
840
841 triggerAsyncUpdate();
842 }
843
844 void handleAsyncUpdate() override
845 {
846 if (hostCallback != nullptr)
847 hostCallback (&vstEffect, Vst2::audioMasterIOChanged, 0, 0, nullptr, 0);
845 hostCallback (&vstEffect, Vst2::audioMasterIOChanged, 0, 0, nullptr, 0);
846 }
848847 }
849848
850849 bool getPinProperties (Vst2::VstPinProperties& properties, bool direction, int index) const
31743174 {
31753175 PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST3;
31763176
3177 #if JUCE_WINDOWS
3177 #if JUCE_MSVC
31783178 // Cunning trick to force this function to be exported. Life's too short to
31793179 // faff around creating .def files for this kind of thing.
31803180 #pragma comment(linker, "/EXPORT:" __FUNCTION__ "=" __FUNCDNAME__)
3535
3636 ID: juce_audio_plugin_client
3737 vendor: juce
38 version: 5.4.6
38 version: 5.4.7
3939 name: JUCE audio plugin wrapper classes
4040 description: Classes for building VST, VST3, AudioUnit, AAX and RTAS plugins.
4141 website: http://www.juce.com/juce
3030 #define STRICT 1
3131 #include <windows.h>
3232 #include <float.h>
33 #if ! JUCE_MINGW
33 #if JUCE_MSVC
3434 #pragma warning (disable : 4312 4355)
3535 #endif
3636 #ifdef __INTEL_COMPILER
3535
3636 ID: juce_audio_processors
3737 vendor: juce
38 version: 5.4.6
38 version: 5.4.7
3939 name: JUCE audio processor classes
4040 description: Classes for loading and playing VST, AU, LADSPA, or internally-generated audio processors.
4141 website: http://www.juce.com/juce
3535
3636 ID: juce_audio_utils
3737 vendor: juce
38 version: 5.4.6
38 version: 5.4.7
3939 name: JUCE extra audio utility classes
4040 description: Classes for audio-related GUI and miscellaneous tasks.
4141 website: http://www.juce.com/juce
3131
3232 ID: juce_blocks_basics
3333 vendor: juce
34 version: 5.4.6
34 version: 5.4.7
3535 name: Provides low-level control over ROLI BLOCKS devices
3636 description: JUCE wrapper for low-level control over ROLI BLOCKS devices.
3737 website: http://developer.roli.com
3535
3636 ID: juce_box2d
3737 vendor: juce
38 version: 5.4.6
38 version: 5.4.7
3939 name: JUCE wrapper for the Box2D physics engine
4040 description: The Box2D physics engine and some utility classes.
4141 website: http://www.juce.com/juce
4747 #if JUCE_WINDOWS
4848 #include <ctime>
4949
50 #if ! JUCE_MINGW
50 #if JUCE_MINGW
51 #include <ws2spi.h>
52 #include <cstdio>
53 #include <locale.h>
54 #else
5155 #pragma warning (push)
5256 #pragma warning (disable: 4091)
5357 #include <Dbghelp.h>
5660 #if ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES
5761 #pragma comment (lib, "DbgHelp.lib")
5862 #endif
59 #endif
60
61 #if JUCE_MINGW
62 #include <ws2spi.h>
63 #include <cstdio>
64 #include <locale.h>
6563 #endif
6664
6765 #else
3131
3232 ID: juce_core
3333 vendor: juce
34 version: 5.4.6
34 version: 5.4.7
3535 name: JUCE core classes
3636 description: The essential set of basic JUCE classes, as required by all the other JUCE modules. Includes text, container, memory, threading and i/o functionality.
3737 website: http://www.juce.com/juce
106106 //==============================================================================
107107 /** Config: JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES
108108
109 In a Visual C++ build, this can be used to stop the required system libs being
109 In a Windows build, this can be used to stop the required system libs being
110110 automatically added to the link stage.
111111 */
112112 #ifndef JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES
175175 #pragma warning (4: 4511 4512 4100)
176176 #endif
177177
178 #if JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES
178 #if ! JUCE_MINGW && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES
179179 #pragma comment (lib, "kernel32.lib")
180180 #pragma comment (lib, "user32.lib")
181181 #pragma comment (lib, "wininet.lib")
2222 namespace juce
2323 {
2424
25 #if ! JUCE_MINGW
25 #if JUCE_MSVC
2626 #pragma intrinsic (__cpuid)
2727 #pragma intrinsic (__rdtsc)
2828 #endif
4040
4141 //==============================================================================
4242
43 #if JUCE_MINGW
43 #if JUCE_MINGW || JUCE_CLANG
4444 static void callCPUID (int result[4], uint32 type)
4545 {
4646 uint32 la = result[0], lb = result[1], lc = result[2], ld = result[3];
2828 */
2929 #define JUCE_MAJOR_VERSION 5
3030 #define JUCE_MINOR_VERSION 4
31 #define JUCE_BUILDNUMBER 6
31 #define JUCE_BUILDNUMBER 7
3232
3333 /** Current JUCE version number.
3434
3535
3636 ID: juce_cryptography
3737 vendor: juce
38 version: 5.4.6
38 version: 5.4.7
3939 name: JUCE cryptography classes
4040 description: Classes for various basic cryptography functions, including RSA, Blowfish, MD5, SHA, etc.
4141 website: http://www.juce.com/juce
3535
3636 ID: juce_data_structures
3737 vendor: juce
38 version: 5.4.6
38 version: 5.4.7
3939 name: JUCE data model helper classes
4040 description: Classes for undo/redo management, and smart data structures.
4141 website: http://www.juce.com/juce
3535
3636 ID: juce_dsp
3737 vendor: juce
38 version: 5.4.6
38 version: 5.4.7
3939 name: JUCE DSP classes
4040 description: Classes for audio buffer manipulation, digital audio processing, filtering, oversampling, fast math functions etc.
4141 website: http://www.juce.com/juce
3131
3232 ID: juce_events
3333 vendor: juce
34 version: 5.4.6
34 version: 5.4.7
3535 name: JUCE message and event handling classes
3636 description: Classes for running an application's main event loop and sending/receiving messages, timers, etc.
3737 website: http://www.juce.com/juce
3535
3636 ID: juce_graphics
3737 vendor: juce
38 version: 5.4.6
38 version: 5.4.7
3939 name: JUCE graphics classes
4040 description: Classes for 2D vector graphics, image loading/saving, font handling, etc.
4141 website: http://www.juce.com/juce
5959 CGColorSpaceRelease (colourSpace);
6060 }
6161
62 ~CoreGraphicsPixelData() override
63 {
64 freeCachedImageRef();
65 CGContextRelease (context);
66 }
62 ~CoreGraphicsPixelData() override;
6763
6864 std::unique_ptr<LowLevelGraphicsContext> createLowLevelContext() override
6965 {
187183
188184 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CoreGraphicsPixelData)
189185 };
186
187 // The following implementation is outside of the class definition to avoid spurious
188 // warning messages when dynamically loading libraries at runtime on macOS
189 CoreGraphicsPixelData::~CoreGraphicsPixelData()
190 {
191 freeCachedImageRef();
192 CGContextRelease (context);
193 }
190194
191195 ImagePixelData::Ptr NativeImageType::create (Image::PixelFormat format, int width, int height, bool clearImage) const
192196 {
4747 return ComBaseClassHelper<IDWriteTextRenderer>::QueryInterface (refId, result);
4848 }
4949
50 JUCE_COMRESULT IsPixelSnappingDisabled (void* /*clientDrawingContext*/, BOOL* isDisabled) override
50 JUCE_COMRESULT IsPixelSnappingDisabled (void* /*clientDrawingContext*/, BOOL* isDisabled) noexcept override
5151 {
5252 *isDisabled = FALSE;
5353 return S_OK;
5454 }
5555
56 JUCE_COMRESULT GetCurrentTransform (void*, DWRITE_MATRIX* matrix) override
56 JUCE_COMRESULT GetCurrentTransform (void*, DWRITE_MATRIX* matrix) noexcept override
5757 {
5858 matrix->m11 = 1.0f; matrix->m12 = 0.0f;
5959 matrix->m21 = 0.0f; matrix->m22 = 1.0f;
6161 return S_OK;
6262 }
6363
64 JUCE_COMRESULT GetPixelsPerDip (void*, FLOAT* pixelsPerDip) override
64 JUCE_COMRESULT GetPixelsPerDip (void*, FLOAT* pixelsPerDip) noexcept override
6565 {
6666 *pixelsPerDip = 1.0f;
6767 return S_OK;
6868 }
6969
70 JUCE_COMRESULT DrawUnderline (void*, FLOAT, FLOAT, DWRITE_UNDERLINE const*, IUnknown*) override
70 JUCE_COMRESULT DrawUnderline (void*, FLOAT, FLOAT, DWRITE_UNDERLINE const*, IUnknown*) noexcept override
7171 {
7272 return E_NOTIMPL;
7373 }
7474
75 JUCE_COMRESULT DrawStrikethrough (void*, FLOAT, FLOAT, DWRITE_STRIKETHROUGH const*, IUnknown*) override
75 JUCE_COMRESULT DrawStrikethrough (void*, FLOAT, FLOAT, DWRITE_STRIKETHROUGH const*, IUnknown*) noexcept override
7676 {
7777 return E_NOTIMPL;
7878 }
7979
80 JUCE_COMRESULT DrawInlineObject (void*, FLOAT, FLOAT, IDWriteInlineObject*, BOOL, BOOL, IUnknown*) override
80 JUCE_COMRESULT DrawInlineObject (void*, FLOAT, FLOAT, IDWriteInlineObject*, BOOL, BOOL, IUnknown*) noexcept override
8181 {
8282 return E_NOTIMPL;
8383 }
8484
8585 JUCE_COMRESULT DrawGlyphRun (void* clientDrawingContext, FLOAT baselineOriginX, FLOAT baselineOriginY, DWRITE_MEASURING_MODE,
8686 DWRITE_GLYPH_RUN const* glyphRun, DWRITE_GLYPH_RUN_DESCRIPTION const* runDescription,
87 IUnknown* clientDrawingEffect) override
87 IUnknown* clientDrawingEffect) noexcept override
8888 {
8989 auto layout = static_cast<TextLayout*> (clientDrawingContext);
9090
206206 DWRITE_FONT_METRICS dwFontMetrics;
207207 dwFontFace->GetMetrics (&dwFontMetrics);
208208
209 const float totalHeight = (float) (std::abs (dwFontMetrics.ascent) + std::abs (dwFontMetrics.descent));
209 const float totalHeight = (float) (dwFontMetrics.ascent + dwFontMetrics.descent);
210210 return dwFontMetrics.designUnitsPerEm / totalHeight;
211211 }
212212
284284 {
285285 PathGeometrySink() : ComBaseClassHelper<IDWriteGeometrySink> (0) {}
286286
287 void __stdcall AddBeziers (const D2D1_BEZIER_SEGMENT* beziers, UINT beziersCount) override
287 void __stdcall AddBeziers (const D2D1_BEZIER_SEGMENT* beziers, UINT beziersCount) noexcept override
288288 {
289289 for (UINT i = 0; i < beziersCount; ++i)
290290 path.cubicTo (convertPoint (beziers[i].point1),
292292 convertPoint (beziers[i].point3));
293293 }
294294
295 void __stdcall AddLines (const D2D1_POINT_2F* points, UINT pointsCount) override
295 void __stdcall AddLines (const D2D1_POINT_2F* points, UINT pointsCount) noexcept override
296296 {
297297 for (UINT i = 0; i < pointsCount; ++i)
298298 path.lineTo (convertPoint (points[i]));
299299 }
300300
301 void __stdcall BeginFigure (D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN) override
301 void __stdcall BeginFigure (D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN) noexcept override
302302 {
303303 path.startNewSubPath (convertPoint (startPoint));
304304 }
305305
306 void __stdcall EndFigure (D2D1_FIGURE_END figureEnd) override
306 void __stdcall EndFigure (D2D1_FIGURE_END figureEnd) noexcept override
307307 {
308308 if (figureEnd == D2D1_FIGURE_END_CLOSED)
309309 path.closeSubPath();
310310 }
311311
312 void __stdcall SetFillMode (D2D1_FILL_MODE fillMode) override
312 void __stdcall SetFillMode (D2D1_FILL_MODE fillMode) noexcept override
313313 {
314314 path.setUsingNonZeroWinding (fillMode == D2D1_FILL_MODE_WINDING);
315315 }
316316
317 void __stdcall SetSegmentFlags (D2D1_PATH_SEGMENT) override {}
318 JUCE_COMRESULT Close() override { return S_OK; }
317 void __stdcall SetSegmentFlags (D2D1_PATH_SEGMENT) noexcept override {}
318 JUCE_COMRESULT Close() noexcept override { return S_OK; }
319319
320320 Path path;
321321
7070 #include <exdispid.h>
7171 #endif
7272
73 #if JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES
73 #if JUCE_MINGW
74 #include <imm.h>
75 #elif ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES
7476 #pragma comment(lib, "vfw32.lib")
7577 #pragma comment(lib, "imm32.lib")
76 #endif
77
78 #if JUCE_OPENGL
79 #if JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES
78
79 #if JUCE_OPENGL
8080 #pragma comment(lib, "OpenGL32.Lib")
8181 #pragma comment(lib, "GlU32.Lib")
8282 #endif
83 #endif
84
85 #if JUCE_DIRECT2D && JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES
86 #pragma comment (lib, "Dwrite.lib")
87 #pragma comment (lib, "D2d1.lib")
88 #endif
89
90 #if JUCE_MINGW
91 #include <imm.h>
83
84 #if JUCE_DIRECT2D
85 #pragma comment (lib, "Dwrite.lib")
86 #pragma comment (lib, "D2d1.lib")
87 #endif
9288 #endif
9389
9490 //==============================================================================
3535
3636 ID: juce_gui_basics
3737 vendor: juce
38 version: 5.4.6
38 version: 5.4.7
3939 name: JUCE GUI core classes
4040 description: Basic user-interface components and related classes.
4141 website: http://www.juce.com/juce
996996 }
997997
998998 //==============================================================================
999 bool sendModalInputAttemptIfBlocked()
999 bool isBlockedByModalComponent()
10001000 {
10011001 if (auto* modal = Component::getCurrentlyModalComponent())
10021002 {
10041004 && (! getComponent().isParentOf (modal))
10051005 && getComponent().isCurrentlyBlockedByAnotherModalComponent())
10061006 {
1007 return true;
1008 }
1009 }
1010
1011 return false;
1012 }
1013
1014 void sendModalInputAttemptIfBlocked()
1015 {
1016 if (isBlockedByModalComponent())
1017 if (auto* modal = Component::getCurrentlyModalComponent())
10071018 modal->inputAttemptWhenModal();
1008 return true;
1009 }
1010 }
1011
1012 return false;
10131019 }
10141020
10151021 bool canBecomeKeyWindow()
18801886 static BOOL becomeFirstResponder (id self, SEL)
18811887 {
18821888 if (auto* owner = getOwner (self))
1883 {
1884 if (owner->canBecomeKeyWindow())
1885 {
1886 owner->viewFocusGain();
1887 return YES;
1888 }
1889 }
1890
1891 return NO;
1889 owner->viewFocusGain();
1890
1891 return YES;
18921892 }
18931893
18941894 static BOOL resignFirstResponder (id self, SEL)
19871987
19881988 return owner != nullptr
19891989 && owner->canBecomeKeyWindow()
1990 && ! owner->sendModalInputAttemptIfBlocked();
1990 && ! owner->isBlockedByModalComponent();
19911991 }
19921992
19931993 static BOOL canBecomeMainWindow (id self, SEL)
19961996
19971997 return owner != nullptr
19981998 && owner->canBecomeMainWindow()
1999 && ! owner->sendModalInputAttemptIfBlocked();
1999 && ! owner->isBlockedByModalComponent();
20002000 }
20012001
20022002 static void becomeKeyWindow (id self, SEL)
124124 class JuceDataObject : public ComBaseClassHelper <IDataObject>
125125 {
126126 public:
127 JuceDataObject (JuceDropSource* s, const FORMATETC* f, const STGMEDIUM* m)
128 : dropSource (s), format (f), medium (m)
127 JuceDataObject (const FORMATETC* f, const STGMEDIUM* m)
128 : format (f), medium (m)
129129 {
130130 }
131131
202202 JUCE_COMRESULT EnumDAdvise (IEnumSTATDATA**) { return OLE_E_ADVISENOTSUPPORTED; }
203203
204204 private:
205 JuceDropSource* const dropSource;
206205 const FORMATETC* const format;
207206 const STGMEDIUM* const medium;
208207
254253 OleInitialize (0);
255254
256255 auto source = new JuceDropSource();
257 auto data = new JuceDataObject (source, &format, &medium);
256 auto data = new JuceDataObject (&format, &medium);
258257
259258 DWORD effect;
260259 DoDragDrop (data, source, whatToDo, &effect);
22402240 }
22412241 }
22422242
2243 void setIcon (const Image& newIcon)
2243 void setIcon (const Image& newIcon) override
22442244 {
22452245 if (auto hicon = IconConverters::createHICONFromImage (newIcon, TRUE, 0, 0))
22462246 {
722722 if (multiple)
723723 selectRangeOfRows (lastRowSelected, lastRowSelected + 1);
724724 else
725 selectRow (jmin (totalItems - 1, jmax (0, lastRowSelected) + 1));
725 selectRow (jmin (totalItems - 1, jmax (0, lastRowSelected + 1)));
726726 }
727727 else if (key.isKeyCode (KeyPress::pageUpKey))
728728 {
3535
3636 ID: juce_gui_extra
3737 vendor: juce
38 version: 5.4.6
38 version: 5.4.7
3939 name: JUCE extended GUI classes
4040 description: Miscellaneous GUI classes for specialised tasks.
4141 website: http://www.juce.com/juce
152152 {
153153 EventHandler (WebBrowserComponent& w) : ComponentMovementWatcher (&w), owner (w) {}
154154
155 JUCE_COMRESULT GetTypeInfoCount (UINT*) { return E_NOTIMPL; }
156 JUCE_COMRESULT GetTypeInfo (UINT, LCID, ITypeInfo**) { return E_NOTIMPL; }
157 JUCE_COMRESULT GetIDsOfNames (REFIID, LPOLESTR*, UINT, LCID, DISPID*) { return E_NOTIMPL; }
155 JUCE_COMRESULT GetTypeInfoCount (UINT*) override { return E_NOTIMPL; }
156 JUCE_COMRESULT GetTypeInfo (UINT, LCID, ITypeInfo**) override { return E_NOTIMPL; }
157 JUCE_COMRESULT GetIDsOfNames (REFIID, LPOLESTR*, UINT, LCID, DISPID*) override { return E_NOTIMPL; }
158158
159159 JUCE_COMRESULT Invoke (DISPID dispIdMember, REFIID /*riid*/, LCID /*lcid*/, WORD /*wFlags*/, DISPPARAMS* pDispParams,
160 VARIANT* /*pVarResult*/, EXCEPINFO* /*pExcepInfo*/, UINT* /*puArgErr*/)
160 VARIANT* /*pVarResult*/, EXCEPINFO* /*pExcepInfo*/, UINT* /*puArgErr*/) override
161161 {
162162 if (dispIdMember == DISPID_BEFORENAVIGATE2)
163163 {
4747 #elif JUCE_WINDOWS
4848 #include <windowsx.h>
4949
50 #if JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES
50 #if ! JUCE_MINGW && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES
5151 #pragma comment(lib, "OpenGL32.Lib")
5252 #endif
5353
3535
3636 ID: juce_opengl
3737 vendor: juce
38 version: 5.4.6
38 version: 5.4.7
3939 name: JUCE OpenGL classes
4040 description: Classes for rendering OpenGL in a JUCE window.
4141 website: http://www.juce.com/juce
3535
3636 ID: juce_osc
3737 vendor: juce
38 version: 5.4.6
38 version: 5.4.7
3939 name: JUCE OSC classes
4040 description: Open Sound Control implementation.
4141 website: http://www.juce.com/juce
6363
6464 An OSCBundle Element contains either one OSCMessage or one OSCBundle.
6565 */
66 class Element
66 class JUCE_API Element
6767 {
6868 public:
6969 //==============================================================================
3535
3636 ID: juce_product_unlocking
3737 vendor: juce
38 version: 5.4.6
38 version: 5.4.7
3939 name: JUCE Online marketplace support
4040 description: Classes for online product authentication
4141 website: http://www.juce.com/juce
11
22 import com.android.billingclient.api.*;
33
4 public class JuceBillingClient implements PurchasesUpdatedListener {
4 public class JuceBillingClient implements PurchasesUpdatedListener, BillingClientStateListener {
55 private native void skuDetailsQueryCallback(long host, java.util.List<SkuDetails> skuDetails);
66 private native void purchasesListQueryCallback(long host, java.util.List<Purchase> purchases);
77 private native void purchaseCompletedCallback(long host, Purchase purchase, int responseCode);
1515 .setListener(this)
1616 .build();
1717
18 billingClient.startConnection(null);
18 billingClient.startConnection(this);
1919 }
2020
2121 public void endConnection() {
126126 }
127127 }
128128
129 @Override
130 public void onBillingServiceDisconnected()
131 {
132
133 }
134
135 @Override
136 public void onBillingSetupFinished(BillingResult billingResult)
137 {
138
139 }
140
129141 private void executeOnBillingClientConnection(Runnable runnable) {
130142 if (billingClient.isReady()) {
131143 runnable.run();
161173 @Override
162174 public void run() {
163175 AcknowledgePurchaseParams acknowledgePurchaseParams = AcknowledgePurchaseParams.newBuilder().setPurchaseToken(purchase.getPurchaseToken()).build();
164 billingClient.acknowledgePurchase(acknowledgePurchaseParams, null);
176 billingClient.acknowledgePurchase(acknowledgePurchaseParams, new AcknowledgePurchaseResponseListener() {
177 @Override
178 public void onAcknowledgePurchaseResponse(BillingResult billingResult) {
179
180 }
181 });
165182 }
166183 });
167184 }
4444 #import <AVKit/AVKit.h>
4545
4646 //==============================================================================
47 #elif JUCE_MSVC
47 #elif JUCE_WINDOWS && ! JUCE_MINGW
4848 /* If you're using the camera classes, you'll need access to a few DirectShow headers.
4949 These files are provided in the normal Windows SDK. */
5050 #include <dshow.h>
5151 #include <dshowasf.h>
5252 #include <evr.h>
5353
54 #if JUCE_USE_CAMERA && JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES
55 #pragma comment (lib, "Strmiids.lib")
56 #pragma comment (lib, "wmvcore.lib")
57 #endif
54 #if ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES
55 #pragma comment (lib, "strmiids.lib")
5856
59 #if JUCE_MEDIAFOUNDATION && JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES
60 #pragma comment (lib, "mfuuid.lib")
61 #endif
57 #if JUCE_USE_CAMERA
58 #pragma comment (lib, "Strmiids.lib")
59 #pragma comment (lib, "wmvcore.lib")
60 #endif
6261
63 #if JUCE_MSVC && ! JUCE_DONT_AUTOLINK_TO_WIN32_LIBRARIES
64 #pragma comment (lib, "strmiids.lib")
62 #if JUCE_MEDIAFOUNDATION
63 #pragma comment (lib, "mfuuid.lib")
64 #endif
6565 #endif
6666 #endif
6767
3535
3636 ID: juce_video
3737 vendor: juce
38 version: 5.4.6
38 version: 5.4.7
3939 name: JUCE video playback and capture classes
4040 description: Classes for playing video and capturing camera input.
4141 website: http://www.juce.com/juce