@@ -561,8 +561,8 @@ | |||
LLVM_LTO = YES; | |||
MACOSX_DEPLOYMENT_TARGET = 10.11; | |||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
PRODUCT_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner; | |||
PRODUCT_NAME = "DemoRunner"; | |||
USE_HEADERMAP = NO; | |||
@@ -642,8 +642,8 @@ | |||
INSTALL_PATH = "$(HOME)/Applications"; | |||
MACOSX_DEPLOYMENT_TARGET = 10.11; | |||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
PRODUCT_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner; | |||
PRODUCT_NAME = "DemoRunner"; | |||
USE_HEADERMAP = NO; | |||
@@ -564,8 +564,8 @@ | |||
INSTALL_PATH = "$(HOME)/Applications"; | |||
LLVM_LTO = YES; | |||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
PRODUCT_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner; | |||
PRODUCT_NAME = "DemoRunner"; | |||
USE_HEADERMAP = NO; | |||
@@ -645,8 +645,8 @@ | |||
INFOPLIST_PREPROCESS = NO; | |||
INSTALL_PATH = "$(HOME)/Applications"; | |||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
PRODUCT_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner; | |||
PRODUCT_NAME = "DemoRunner"; | |||
USE_HEADERMAP = NO; | |||
@@ -486,8 +486,8 @@ | |||
LLVM_LTO = YES; | |||
MACOSX_DEPLOYMENT_TARGET = 10.11; | |||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
PRODUCT_BUNDLE_IDENTIFIER = com.juce.pluginhost; | |||
PRODUCT_NAME = "AudioPluginHost"; | |||
USE_HEADERMAP = NO; | |||
@@ -615,8 +615,8 @@ | |||
INSTALL_PATH = "$(HOME)/Applications"; | |||
MACOSX_DEPLOYMENT_TARGET = 10.11; | |||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
PRODUCT_BUNDLE_IDENTIFIER = com.juce.pluginhost; | |||
PRODUCT_NAME = "AudioPluginHost"; | |||
USE_HEADERMAP = NO; | |||
@@ -494,8 +494,8 @@ | |||
INSTALL_PATH = "$(HOME)/Applications"; | |||
LLVM_LTO = YES; | |||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
PRODUCT_BUNDLE_IDENTIFIER = com.juce.pluginhost; | |||
PRODUCT_NAME = "Plugin Host"; | |||
USE_HEADERMAP = NO; | |||
@@ -624,8 +624,8 @@ | |||
INFOPLIST_PREPROCESS = NO; | |||
INSTALL_PATH = "$(HOME)/Applications"; | |||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
PRODUCT_BUNDLE_IDENTIFIER = com.juce.pluginhost; | |||
PRODUCT_NAME = "Plugin Host"; | |||
USE_HEADERMAP = NO; | |||
@@ -38,7 +38,9 @@ elseif((CMAKE_CXX_COMPILER_ID STREQUAL "Clang") OR (CMAKE_CXX_COMPILER_ID STREQU | |||
$<$<OR:$<COMPILE_LANGUAGE:CXX>,$<COMPILE_LANGUAGE:OBJCXX>>: | |||
-Wzero-as-null-pointer-constant -Wunused-private-field | |||
-Woverloaded-virtual -Wreorder | |||
-Winconsistent-missing-destructor-override>) | |||
-Winconsistent-missing-destructor-override> | |||
$<$<OR:$<COMPILE_LANGUAGE:OBJC>,$<COMPILE_LANGUAGE:OBJCXX>>: | |||
-Wunguarded-availability -Wunguarded-availability-new>) | |||
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") | |||
target_compile_options(juce_recommended_warning_flags INTERFACE | |||
-Wall -Wextra -Wpedantic -Wstrict-aliasing -Wuninitialized | |||
@@ -1170,8 +1170,8 @@ | |||
INSTALL_PATH = "$(HOME)/Applications"; | |||
MACOSX_DEPLOYMENT_TARGET = 10.12; | |||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../Build $(SRCROOT)/../../../../modules"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
PRODUCT_BUNDLE_IDENTIFIER = com.juce.theprojucer; | |||
PRODUCT_NAME = "Projucer"; | |||
USE_HEADERMAP = NO; | |||
@@ -1239,8 +1239,8 @@ | |||
INSTALL_PATH = "$(HOME)/Applications"; | |||
MACOSX_DEPLOYMENT_TARGET = 10.12; | |||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../Build $(SRCROOT)/../../../../modules"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
PRODUCT_BUNDLE_IDENTIFIER = com.juce.theprojucer; | |||
PRODUCT_NAME = "Projucer"; | |||
USE_HEADERMAP = NO; | |||
@@ -1577,6 +1577,7 @@ public: | |||
s.set ("GCC_FAST_MATH", "YES"); | |||
auto recommendedWarnings = config.getRecommendedCompilerWarningFlags(); | |||
recommendedWarnings.common.addArray (recommendedWarnings.objc); | |||
recommendedWarnings.cpp.addArray (recommendedWarnings.common); | |||
struct XcodeWarningFlags | |||
@@ -868,6 +868,9 @@ ProjectExporter::BuildConfiguration::BuildConfiguration (Project& p, const Value | |||
llvmFlags.cpp.addArray ({ | |||
"-Wunused-private-field", "-Winconsistent-missing-destructor-override" | |||
}); | |||
llvmFlags.objc.addArray ({ | |||
"-Wunguarded-availability", "-Wunguarded-availability-new" | |||
}); | |||
auto& gccFlags = recommendedCompilerWarningFlags[CompilerNames::gcc] = BuildConfiguration::CompilerWarningFlags::getRecommendedForGCCAndLLVM(); | |||
gccFlags.common.addArray ({ | |||
@@ -289,8 +289,7 @@ public: | |||
return result; | |||
} | |||
StringArray common; | |||
StringArray cpp; | |||
StringArray common, cpp, objc; | |||
}; | |||
CompilerWarningFlags getRecommendedCompilerWarningFlags() const; | |||
@@ -451,8 +451,8 @@ | |||
LLVM_LTO = YES; | |||
MACOSX_DEPLOYMENT_TARGET = 10.10; | |||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
PRODUCT_BUNDLE_IDENTIFIER = com.juce.UnitTestRunner; | |||
PRODUCT_NAME = "UnitTestRunner"; | |||
USE_HEADERMAP = NO; | |||
@@ -573,8 +573,8 @@ | |||
INSTALL_PATH = "/usr/bin"; | |||
MACOSX_DEPLOYMENT_TARGET = 10.10; | |||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion"; | |||
OTHER_CFLAGS = "-Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
OTHER_CPLUSPLUSFLAGS = "-Woverloaded-virtual -Wreorder -Wzero-as-null-pointer-constant -Wunused-private-field -Winconsistent-missing-destructor-override -Wall -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wswitch-enum -Wsign-conversion -Wsign-compare -Wunreachable-code -Wcast-align -Wno-ignored-qualifiers -Wshorten-64-to-32 -Wconversion -Wint-conversion -Wconditional-uninitialized -Wconstant-conversion -Wbool-conversion -Wextra-semi -Wshift-sign-overflow -Wno-missing-field-initializers -Wshadow-all -Wnullable-to-nonnull-conversion -Wunguarded-availability -Wunguarded-availability-new"; | |||
PRODUCT_BUNDLE_IDENTIFIER = com.juce.UnitTestRunner; | |||
PRODUCT_NAME = "UnitTestRunner"; | |||
USE_HEADERMAP = NO; | |||
@@ -82,10 +82,8 @@ namespace CoreMidiHelpers | |||
struct Sender; | |||
#if JUCE_HAS_NEW_COREMIDI_API | |||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") | |||
template <> | |||
struct Sender<ImplementationStrategy::onlyNew> : public SenderBase | |||
struct API_AVAILABLE (macos (11.0), ios (14.0)) Sender<ImplementationStrategy::onlyNew> : public SenderBase | |||
{ | |||
explicit Sender (MIDIEndpointRef ep) | |||
: umpConverter (getProtocolForEndpoint (ep)) | |||
@@ -177,8 +175,6 @@ namespace CoreMidiHelpers | |||
send(); | |||
} | |||
}; | |||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
#endif | |||
#if JUCE_HAS_OLD_COREMIDI_API | |||
@@ -829,10 +825,8 @@ namespace CoreMidiHelpers | |||
struct CreatorFunctions; | |||
#if JUCE_HAS_NEW_COREMIDI_API | |||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") | |||
template <> | |||
struct CreatorFunctions<ImplementationStrategy::onlyNew> | |||
struct API_AVAILABLE (macos (11.0), ios (14.0)) CreatorFunctions<ImplementationStrategy::onlyNew> | |||
{ | |||
static OSStatus createInputPort (ump::PacketProtocol protocol, | |||
MIDIClientRef client, | |||
@@ -894,8 +888,6 @@ namespace CoreMidiHelpers | |||
static_cast<MidiPortAndCallback*> (readProcRefCon)->handlePackets (*list); | |||
} | |||
}; | |||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
#endif | |||
#if JUCE_HAS_OLD_COREMIDI_API | |||
@@ -287,7 +287,7 @@ namespace AudioUnitFormatHelpers | |||
NSBundle* bundle = [[NSBundle alloc] initWithPath: (NSString*) fileOrIdentifier.toCFString()]; | |||
NSArray* audioComponents = [bundle objectForInfoDictionaryKey: @"AudioComponents"]; | |||
NSDictionary* dict = audioComponents[0]; | |||
NSDictionary* dict = [audioComponents objectAtIndex: 0]; | |||
desc.componentManufacturer = stringToOSType (nsStringToJuce ((NSString*) [dict valueForKey: @"manufacturer"])); | |||
desc.componentType = stringToOSType (nsStringToJuce ((NSString*) [dict valueForKey: @"type"])); | |||
@@ -436,6 +436,14 @@ namespace AudioUnitFormatHelpers | |||
*/ | |||
std::vector<size_t> channels; | |||
}; | |||
static bool isPluginAUv3 (const AudioComponentDescription& desc) | |||
{ | |||
if (@available (macOS 10.11, *)) | |||
return (desc.componentFlags & kAudioComponentFlag_IsV3AudioUnit) != 0; | |||
return false; | |||
} | |||
} | |||
//============================================================================== | |||
@@ -656,7 +664,7 @@ public: | |||
AudioComponentGetDescription (auComponent, &componentDesc); | |||
isAUv3 = ((componentDesc.componentFlags & kAudioComponentFlag_IsV3AudioUnit) != 0); | |||
isAUv3 = AudioUnitFormatHelpers::isPluginAUv3 (componentDesc); | |||
wantsMidiMessages = componentDesc.componentType == kAudioUnitType_MusicDevice | |||
|| componentDesc.componentType == kAudioUnitType_MusicEffect | |||
@@ -2577,7 +2585,10 @@ private: | |||
{ | |||
const auto viewSize = [&controller] | |||
{ | |||
auto size = [controller preferredContentSize]; | |||
auto size = CGSizeZero; | |||
if (@available (macOS 10.11, *)) | |||
size = [controller preferredContentSize]; | |||
if (size.width == 0 || size.height == 0) | |||
size = controller.view.frame.size; | |||
@@ -2886,12 +2897,15 @@ void AudioUnitPluginFormat::createPluginInstance (const PluginDescription& desc, | |||
auto callbackBlock = new AUAsyncInitializationCallback (rate, blockSize, std::move (callback)); | |||
if ((componentDesc.componentFlags & kAudioComponentFlag_IsV3AudioUnit) != 0) | |||
if (AudioUnitFormatHelpers::isPluginAUv3 (componentDesc)) | |||
{ | |||
AudioComponentInstantiate (auComponent, kAudioComponentInstantiation_LoadOutOfProcess, | |||
callbackBlock->getBlock()); | |||
if (@available (macOS 10.11, *)) | |||
{ | |||
AudioComponentInstantiate (auComponent, kAudioComponentInstantiation_LoadOutOfProcess, | |||
callbackBlock->getBlock()); | |||
return; | |||
return; | |||
} | |||
} | |||
AudioComponentInstance audioUnit; | |||
@@ -2915,8 +2929,10 @@ bool AudioUnitPluginFormat::requiresUnblockedMessageThreadDuringCreation (const | |||
pluginName, version, manufacturer)) | |||
{ | |||
if (AudioComponent auComp = AudioComponentFindNext (nullptr, &componentDesc)) | |||
{ | |||
if (AudioComponentGetDescription (auComp, &componentDesc) == noErr) | |||
return ((componentDesc.componentFlags & kAudioComponentFlag_IsV3AudioUnit) != 0); | |||
return AudioUnitFormatHelpers::isPluginAUv3 (componentDesc); | |||
} | |||
} | |||
return false; | |||
@@ -2948,11 +2964,7 @@ StringArray AudioUnitPluginFormat::searchPathsForPlugins (const FileSearchPath&, | |||
|| desc.componentType == kAudioUnitType_Mixer | |||
|| desc.componentType == kAudioUnitType_MIDIProcessor) | |||
{ | |||
ignoreUnused (allowPluginsWhichRequireAsynchronousInstantiation); | |||
const auto isAUv3 = ((desc.componentFlags & kAudioComponentFlag_IsV3AudioUnit) != 0); | |||
if (allowPluginsWhichRequireAsynchronousInstantiation || ! isAUv3) | |||
if (allowPluginsWhichRequireAsynchronousInstantiation || ! AudioUnitFormatHelpers::isPluginAUv3 (desc)) | |||
result.add (AudioUnitFormatHelpers::createPluginIdentifier (desc)); | |||
} | |||
} | |||
@@ -27,7 +27,7 @@ namespace juce | |||
{ | |||
//============================================================================== | |||
class BluetoothMidiPairingWindowClass : public ObjCClass<NSObject> | |||
class API_AVAILABLE (macos (10.11)) BluetoothMidiPairingWindowClass : public ObjCClass<NSObject> | |||
{ | |||
public: | |||
struct Callbacks | |||
@@ -117,7 +117,7 @@ private: | |||
} | |||
}; | |||
class BluetoothMidiSelectorWindowHelper : public DeletedAtShutdown | |||
class API_AVAILABLE (macos (10.11)) BluetoothMidiSelectorWindowHelper : public DeletedAtShutdown | |||
{ | |||
public: | |||
BluetoothMidiSelectorWindowHelper (ModalComponentManager::Callback* exitCallback, | |||
@@ -528,8 +528,9 @@ void File::addToDock() const | |||
File File::getContainerForSecurityApplicationGroupIdentifier (const String& appGroup) | |||
{ | |||
if (auto* url = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier: juceStringToNS (appGroup)]) | |||
return File (nsStringToJuce ([url path])); | |||
if (@available (macOS 10.8, *)) | |||
if (auto* url = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier: juceStringToNS (appGroup)]) | |||
return File (nsStringToJuce ([url path])); | |||
return File(); | |||
} | |||
@@ -393,7 +393,7 @@ JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
#endif | |||
//============================================================================== | |||
class URLConnectionState : public URLConnectionStateBase | |||
class API_AVAILABLE (macos (10.9)) URLConnectionState : public URLConnectionStateBase | |||
{ | |||
public: | |||
URLConnectionState (NSURLRequest* req, const int maxRedirects) | |||
@@ -164,7 +164,7 @@ inline var nsDictionaryToVar (NSDictionary* dictionary) | |||
DynamicObject::Ptr dynamicObject (new DynamicObject()); | |||
for (NSString* key in dictionary) | |||
dynamicObject->setProperty (nsStringToJuce (key), nsObjectToVar (dictionary[key])); | |||
dynamicObject->setProperty (nsStringToJuce (key), nsObjectToVar ([dictionary objectForKey: key])); | |||
return var (dynamicObject.get()); | |||
} | |||
@@ -28,12 +28,21 @@ namespace juce | |||
class ScopedLowPowerModeDisabler::Pimpl | |||
{ | |||
public: | |||
Pimpl() = default; | |||
~Pimpl() { [[NSProcessInfo processInfo] endActivity: activity]; } | |||
Pimpl() | |||
{ | |||
if (@available (macOS 10.9, *)) | |||
activity = [[NSProcessInfo processInfo] beginActivityWithOptions: NSActivityUserInitiatedAllowingIdleSystemSleep | |||
reason: @"App must remain in high-power mode"]; | |||
} | |||
~Pimpl() | |||
{ | |||
if (@available (macOS 10.9, *)) | |||
[[NSProcessInfo processInfo] endActivity: activity]; | |||
} | |||
private: | |||
id activity { [[NSProcessInfo processInfo] beginActivityWithOptions: NSActivityUserInitiatedAllowingIdleSystemSleep | |||
reason: @"App must remain in high-power mode"] }; | |||
id activity; | |||
JUCE_DECLARE_NON_COPYABLE (Pimpl) | |||
JUCE_DECLARE_NON_MOVEABLE (Pimpl) | |||
@@ -41,31 +41,6 @@ namespace juce | |||
#define JUCE_IOS_CONTAINER_API_AVAILABLE 1 | |||
#endif | |||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") | |||
constexpr auto juceUIAccessibilityContainerTypeNone = | |||
#if JUCE_IOS_CONTAINER_API_AVAILABLE | |||
UIAccessibilityContainerTypeNone; | |||
#else | |||
0; | |||
#endif | |||
constexpr auto juceUIAccessibilityContainerTypeDataTable = | |||
#if JUCE_IOS_CONTAINER_API_AVAILABLE | |||
UIAccessibilityContainerTypeDataTable; | |||
#else | |||
1; | |||
#endif | |||
constexpr auto juceUIAccessibilityContainerTypeList = | |||
#if JUCE_IOS_CONTAINER_API_AVAILABLE | |||
UIAccessibilityContainerTypeList; | |||
#else | |||
2; | |||
#endif | |||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
#define JUCE_NATIVE_ACCESSIBILITY_INCLUDED 1 | |||
//============================================================================== | |||
@@ -164,7 +139,12 @@ private: | |||
if (auto* handler = getHandler (self)) | |||
{ | |||
if (handler->getTableInterface() != nullptr) | |||
return juceUIAccessibilityContainerTypeDataTable; | |||
{ | |||
if (@available (iOS 11.0, *)) | |||
return UIAccessibilityContainerTypeDataTable; | |||
return 1; // UIAccessibilityContainerTypeDataTable | |||
} | |||
const auto role = handler->getRole(); | |||
@@ -172,11 +152,17 @@ private: | |||
|| role == AccessibilityRole::list | |||
|| role == AccessibilityRole::tree) | |||
{ | |||
return juceUIAccessibilityContainerTypeList; | |||
if (@available (iOS 11.0, *)) | |||
return UIAccessibilityContainerTypeList; | |||
return 2; // UIAccessibilityContainerTypeList | |||
} | |||
} | |||
return juceUIAccessibilityContainerTypeNone; | |||
if (@available (iOS 11.0, *)) | |||
return UIAccessibilityContainerTypeNone; | |||
return 0; // UIAccessibilityContainerTypeNone | |||
} | |||
}; | |||
@@ -23,6 +23,7 @@ | |||
============================================================================== | |||
*/ | |||
API_AVAILABLE (macos (10.10)) | |||
static void juceFreeAccessibilityPlatformSpecificData (NSAccessibilityElement<NSAccessibility>*) {} | |||
namespace juce | |||
@@ -35,16 +36,17 @@ namespace juce | |||
#define JUCE_NATIVE_ACCESSIBILITY_INCLUDED 1 | |||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") | |||
//============================================================================== | |||
class AccessibilityHandler::AccessibilityNativeImpl | |||
{ | |||
public: | |||
explicit AccessibilityNativeImpl (AccessibilityHandler& handler) | |||
: accessibilityElement (AccessibilityElement::create (handler)) | |||
{} | |||
{ | |||
if (@available (macOS 10.10, *)) | |||
accessibilityElement = AccessibilityElement::create (handler); | |||
} | |||
API_AVAILABLE (macos (10.10)) | |||
NSAccessibilityElement<NSAccessibility>* getAccessibilityElement() const noexcept | |||
{ | |||
return accessibilityElement.get(); | |||
@@ -52,7 +54,7 @@ public: | |||
private: | |||
//============================================================================== | |||
class AccessibilityElement : public AccessibleObjCClass<NSAccessibilityElement<NSAccessibility>> | |||
class API_AVAILABLE (macos (10.10)) AccessibilityElement : public AccessibleObjCClass<NSAccessibilityElement<NSAccessibility>> | |||
{ | |||
public: | |||
static Holder create (AccessibilityHandler& handler) | |||
@@ -830,6 +832,7 @@ private: | |||
}; | |||
//============================================================================== | |||
API_AVAILABLE (macos (10.10)) | |||
AccessibilityElement::Holder accessibilityElement; | |||
//============================================================================== | |||
@@ -839,7 +842,10 @@ private: | |||
//============================================================================== | |||
AccessibilityNativeHandle* AccessibilityHandler::getNativeImplementation() const | |||
{ | |||
return (AccessibilityNativeHandle*) nativeImpl->getAccessibilityElement(); | |||
if (@available (macOS 10.10, *)) | |||
return (AccessibilityNativeHandle*) nativeImpl->getAccessibilityElement(); | |||
return nullptr; | |||
} | |||
static bool areAnyAccessibilityClientsActive() | |||
@@ -873,12 +879,15 @@ static void sendHandlerNotification (const AccessibilityHandler& handler, | |||
if (! areAnyAccessibilityClientsActive() || notification == NSAccessibilityNotificationName{}) | |||
return; | |||
if (id accessibilityElement = (id) handler.getNativeImplementation()) | |||
if (@available (macOS 10.9, *)) | |||
{ | |||
sendAccessibilityEvent (accessibilityElement, notification, | |||
(notification == NSAccessibilityLayoutChangedNotification | |||
? @{ NSAccessibilityUIElementsKey: @[ accessibilityElement ] } | |||
: nil)); | |||
if (id accessibilityElement = (id) handler.getNativeImplementation()) | |||
{ | |||
sendAccessibilityEvent (accessibilityElement, notification, | |||
(notification == NSAccessibilityLayoutChangedNotification | |||
? @{ NSAccessibilityUIElementsKey: @[ accessibilityElement ] } | |||
: nil)); | |||
} | |||
} | |||
} | |||
@@ -937,10 +946,13 @@ void AccessibilityHandler::postAnnouncement (const String& announcementString, A | |||
if (! areAnyAccessibilityClientsActive()) | |||
return; | |||
if (@available (macOS 10.10, *)) | |||
{ | |||
if (@available (macOS 10.9, *)) | |||
{ | |||
auto nsPriority = [priority] | |||
{ | |||
// The below doesn't get noticed by the @available check above | |||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability") | |||
switch (priority) | |||
{ | |||
case AnnouncementPriority::low: return NSAccessibilityPriorityLow; | |||
@@ -950,6 +962,8 @@ void AccessibilityHandler::postAnnouncement (const String& announcementString, A | |||
jassertfalse; | |||
return NSAccessibilityPriorityLow; | |||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
}(); | |||
sendAccessibilityEvent ((id) [NSApp mainWindow], | |||
@@ -959,6 +973,4 @@ void AccessibilityHandler::postAnnouncement (const String& announcementString, A | |||
} | |||
} | |||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
} // namespace juce |
@@ -112,10 +112,13 @@ public: | |||
preview->addToDesktop (0, (void*) nsViewPreview); | |||
preview->setVisible (true); | |||
if (! isSave) | |||
if (@available (macOS 10.11, *)) | |||
{ | |||
auto* openPanel = static_cast<NSOpenPanel*> (panel); | |||
[openPanel setAccessoryViewDisclosed: YES]; | |||
if (! isSave) | |||
{ | |||
auto* openPanel = static_cast<NSOpenPanel*> (panel); | |||
[openPanel setAccessoryViewDisclosed: YES]; | |||
} | |||
} | |||
} | |||
@@ -1789,10 +1789,13 @@ private: | |||
void setFullScreenSizeConstraints (const ComponentBoundsConstrainer& c) | |||
{ | |||
const auto minSize = NSMakeSize (static_cast<float> (c.getMinimumWidth()), | |||
0.0f); | |||
[window setMinFullScreenContentSize: minSize]; | |||
[window setMaxFullScreenContentSize: NSMakeSize (100000, 100000)]; | |||
if (@available (macOS 10.11, *)) | |||
{ | |||
const auto minSize = NSMakeSize (static_cast<float> (c.getMinimumWidth()), | |||
0.0f); | |||
[window setMinFullScreenContentSize: minSize]; | |||
[window setMaxFullScreenContentSize: NSMakeSize (100000, 100000)]; | |||
} | |||
} | |||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (NSViewComponentPeer) | |||
@@ -26,7 +26,7 @@ | |||
namespace juce | |||
{ | |||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new", "-Wdeprecated-declarations") | |||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations") | |||
extern NSMenu* createNSMenu (const PopupMenu&, const String& name, int topLevelMenuId, | |||
int topLevelIndex, bool addDelegate); | |||
@@ -87,7 +87,7 @@ struct StatusItemContainer : public Timer | |||
}; | |||
//============================================================================== | |||
struct ButtonBasedStatusItem : public StatusItemContainer | |||
struct API_AVAILABLE (macos (10.10)) ButtonBasedStatusItem : public StatusItemContainer | |||
{ | |||
//============================================================================== | |||
ButtonBasedStatusItem (SystemTrayIconComponent& iconComp, const Image& im) | |||
@@ -384,7 +384,7 @@ public: | |||
//============================================================================== | |||
Pimpl (SystemTrayIconComponent& iconComp, const Image& im) | |||
{ | |||
if (std::floor (NSFoundationVersionNumber) > NSFoundationVersionNumber10_10) | |||
if (@available (macOS 10.10, *)) | |||
statusItemHolder = std::make_unique<ButtonBasedStatusItem> (iconComp, im); | |||
else | |||
statusItemHolder = std::make_unique<ViewBasedStatusItem> (iconComp, im); | |||
@@ -32,7 +32,7 @@ namespace juce | |||
static NSURL* appendParametersToFileURL (const URL& url, NSURL* fileUrl) | |||
{ | |||
if (@available (macOS 10.9, *)) | |||
if (@available (macOS 10.10, *)) | |||
{ | |||
const auto parameterNames = url.getParameterNames(); | |||
const auto parameterValues = url.getParameterValues(); | |||
@@ -263,7 +263,7 @@ private: | |||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
#endif | |||
struct WebViewDelegateClass : public ObjCClass<NSObject> | |||
struct API_AVAILABLE (macos (10.10)) WebViewDelegateClass : public ObjCClass<NSObject> | |||
{ | |||
WebViewDelegateClass() : ObjCClass<NSObject> ("JUCEWebViewDelegate_") | |||
{ | |||
@@ -339,7 +339,7 @@ private: | |||
} | |||
#if WKWEBVIEW_OPENPANEL_SUPPORTED | |||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") | |||
API_AVAILABLE (macos (10.12)) | |||
static void runOpenPanel (id, SEL, WKWebView*, WKOpenPanelParameters* parameters, WKFrameInfo*, | |||
void (^completionHandler)(NSArray<NSURL*>*)) | |||
{ | |||
@@ -402,7 +402,6 @@ private: | |||
delete wrapper; | |||
}); | |||
} | |||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
#endif | |||
}; | |||
@@ -507,7 +506,7 @@ private: | |||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
#endif | |||
class WKWebViewImpl : public WebViewBase | |||
class API_AVAILABLE (macos (10.11)) WKWebViewImpl : public WebViewBase | |||
{ | |||
public: | |||
WKWebViewImpl (WebBrowserComponent* owner) | |||
@@ -587,7 +586,7 @@ class WebBrowserComponent::Pimpl | |||
public: | |||
Pimpl (WebBrowserComponent* owner) | |||
{ | |||
if (@available (macOS 10.10, *)) | |||
if (@available (macOS 10.11, *)) | |||
webView = std::make_unique<WKWebViewImpl> (owner); | |||
#if JUCE_MAC | |||
else | |||
@@ -31,11 +31,7 @@ namespace juce | |||
#elif JUCE_WINDOWS | |||
#include "../native/juce_win32_CameraDevice.h" | |||
#elif JUCE_IOS | |||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") | |||
#include "../native/juce_ios_CameraDevice.h" | |||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
#elif JUCE_ANDROID | |||
#include "../native/juce_android_CameraDevice.h" | |||
#endif | |||
@@ -766,7 +766,7 @@ private: | |||
//============================================================================== | |||
#if JUCE_USE_NEW_CAMERA_API | |||
class PhotoOutputDelegateClass : public ObjCClass<NSObject> | |||
class API_AVAILABLE (ios (10.0)) PhotoOutputDelegateClass : public ObjCClass<NSObject> | |||
{ | |||
public: | |||
PhotoOutputDelegateClass() : ObjCClass<NSObject> ("PhotoOutputDelegateClass_") | |||
@@ -820,6 +820,7 @@ private: | |||
JUCE_CAMERA_LOG ("didFinishCaptureForSettings(), error = " + errorString); | |||
} | |||
API_AVAILABLE (ios (11.0)) | |||
static void didFinishProcessingPhoto (id self, SEL, AVCapturePhotoOutput*, AVCapturePhoto* capturePhoto, NSError* error) | |||
{ | |||
getOwner (self).takingPicture = false; | |||
@@ -226,7 +226,7 @@ private: | |||
{ | |||
JUCE_CAMERA_LOG (nsStringToJuce ([notification description])); | |||
NSError* error = notification.userInfo[AVCaptureSessionErrorKey]; | |||
NSError* error = [notification.userInfo objectForKey: AVCaptureSessionErrorKey]; | |||
auto errorString = error != nil ? nsStringToJuce (error.localizedDescription) : String(); | |||
getOwner (self).cameraSessionRuntimeError (errorString); | |||
} | |||
@@ -244,8 +244,7 @@ private: | |||
}; | |||
#if JUCE_USE_NEW_CAMERA_API | |||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") | |||
class PostCatalinaPhotoOutput : public ImageOutputBase | |||
class API_AVAILABLE (macos (10.15)) PostCatalinaPhotoOutput : public ImageOutputBase | |||
{ | |||
public: | |||
PostCatalinaPhotoOutput() | |||
@@ -329,7 +328,6 @@ private: | |||
AVCapturePhotoOutput* imageOutput = nil; | |||
std::unique_ptr<NSObject, NSObjectDeleter> delegate; | |||
}; | |||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
#endif | |||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations") | |||
@@ -195,8 +195,15 @@ private: | |||
public: | |||
~PlayerControllerBase() | |||
{ | |||
detachPlayerStatusObserver(); | |||
detachPlaybackObserver(); | |||
// Derived classes must call detachPlayerStatusObserver() before destruction! | |||
jassert (! playerStatusObserverAttached); | |||
// Derived classes must call detachPlaybackObserver() before destruction! | |||
jassert (! playbackObserverAttached); | |||
// Note that it's unsafe to call detachPlayerStatusObserver and detachPlaybackObserver | |||
// directly here, because those functions call into the derived class, which will have | |||
// been destroyed at this point. | |||
} | |||
protected: | |||
@@ -226,8 +233,8 @@ private: | |||
if ([keyPath isEqualToString: nsStringLiteral ("rate")]) | |||
{ | |||
auto oldRate = [change[NSKeyValueChangeOldKey] floatValue]; | |||
auto newRate = [change[NSKeyValueChangeNewKey] floatValue]; | |||
auto oldRate = [[change objectForKey: NSKeyValueChangeOldKey] floatValue]; | |||
auto newRate = [[change objectForKey: NSKeyValueChangeNewKey] floatValue]; | |||
if (oldRate == 0 && newRate != 0) | |||
owner.playbackStarted(); | |||
@@ -236,7 +243,7 @@ private: | |||
} | |||
else if ([keyPath isEqualToString: nsStringLiteral ("status")]) | |||
{ | |||
auto status = [change[NSKeyValueChangeNewKey] intValue]; | |||
auto status = [[change objectForKey: NSKeyValueChangeNewKey] intValue]; | |||
if (status == AVPlayerStatusFailed) | |||
owner.errorOccurred(); | |||
@@ -329,8 +336,8 @@ private: | |||
auto* urlAsset = (AVURLAsset*) playerItem.asset; | |||
URL url (nsStringToJuce (urlAsset.URL.absoluteString)); | |||
auto oldStatus = [change[NSKeyValueChangeOldKey] intValue]; | |||
auto newStatus = [change[NSKeyValueChangeNewKey] intValue]; | |||
auto oldStatus = [[change objectForKey: NSKeyValueChangeOldKey] intValue]; | |||
auto newStatus = [[change objectForKey: NSKeyValueChangeNewKey] intValue]; | |||
// Ignore spurious notifications | |||
if (oldStatus == newStatus) | |||
@@ -481,6 +488,8 @@ private: | |||
forKeyPath: nsStringLiteral ("status") | |||
options: NSKeyValueObservingOptionNew | |||
context: this]; | |||
playerStatusObserverAttached = true; | |||
} | |||
void detachPlayerStatusObserver() | |||
@@ -495,6 +504,8 @@ private: | |||
forKeyPath: nsStringLiteral ("status") | |||
context: this]; | |||
} | |||
playerStatusObserverAttached = false; | |||
} | |||
void attachPlaybackObserver() | |||
@@ -505,6 +516,8 @@ private: | |||
name: AVPlayerItemDidPlayToEndTimeNotification | |||
object: [crtp().getPlayer() currentItem]]; | |||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
playbackObserverAttached = true; | |||
} | |||
void detachPlaybackObserver() | |||
@@ -512,6 +525,8 @@ private: | |||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wundeclared-selector") | |||
[[NSNotificationCenter defaultCenter] removeObserver: playerItemPlaybackStatusObserver.get()]; | |||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||
playbackObserverAttached = false; | |||
} | |||
private: | |||
@@ -556,6 +571,8 @@ private: | |||
owner.playbackStopped(); | |||
} | |||
bool playerStatusObserverAttached = false, playbackObserverAttached = false; | |||
JUCE_DECLARE_WEAK_REFERENCEABLE (PlayerControllerBase) | |||
}; | |||
@@ -572,38 +589,21 @@ private: | |||
useNativeControls = false; | |||
#endif | |||
if (useNativeControls) | |||
wrappedPlayer = [&]() -> std::unique_ptr<WrappedPlayer> | |||
{ | |||
#if ! JUCE_32BIT | |||
playerView = [[AVPlayerView alloc] init]; | |||
if (@available (macOS 10.9, *)) | |||
if (useNativeControls) | |||
return std::make_unique<WrappedPlayerView>(); | |||
#endif | |||
} | |||
else | |||
{ | |||
view = [[NSView alloc] init]; | |||
playerLayer = [[AVPlayerLayer alloc] init]; | |||
[view setLayer: playerLayer]; | |||
} | |||
} | |||
~PlayerController() | |||
{ | |||
#if JUCE_32BIT | |||
[view release]; | |||
[playerLayer release]; | |||
#else | |||
[playerView release]; | |||
#endif | |||
return std::make_unique<WrappedPlayerLayer> (); | |||
}(); | |||
} | |||
NSView* getView() | |||
{ | |||
#if ! JUCE_32BIT | |||
if (useNativeControls) | |||
return playerView; | |||
#endif | |||
return view; | |||
return wrappedPlayer->getView(); | |||
} | |||
Result load (NSURL* url) | |||
@@ -629,12 +629,7 @@ private: | |||
detachPlayerStatusObserver(); | |||
detachPlaybackObserver(); | |||
#if ! JUCE_32BIT | |||
if (useNativeControls) | |||
[playerView setPlayer: player]; | |||
else | |||
#endif | |||
[playerLayer setPlayer: player]; | |||
wrappedPlayer->setPlayer (player); | |||
if (player != nil) | |||
{ | |||
@@ -645,21 +640,46 @@ private: | |||
AVPlayer* getPlayer() const | |||
{ | |||
#if ! JUCE_32BIT | |||
if (useNativeControls) | |||
return [playerView player]; | |||
#endif | |||
return [playerLayer player]; | |||
return wrappedPlayer->getPlayer(); | |||
} | |||
private: | |||
NSView* view = nil; | |||
AVPlayerLayer* playerLayer = nil; | |||
struct WrappedPlayer | |||
{ | |||
virtual ~WrappedPlayer() = default; | |||
virtual NSView* getView() const = 0; | |||
virtual AVPlayer* getPlayer() const = 0; | |||
virtual void setPlayer (AVPlayer*) = 0; | |||
}; | |||
class WrappedPlayerLayer : public WrappedPlayer | |||
{ | |||
public: | |||
WrappedPlayerLayer () { [view.get() setLayer: playerLayer.get()]; } | |||
NSView* getView() const override { return view.get(); } | |||
AVPlayer* getPlayer() const override { return [playerLayer.get() player]; } | |||
void setPlayer (AVPlayer* player) override { [playerLayer.get() setPlayer: player]; } | |||
private: | |||
NSUniquePtr<NSView> view { [[NSView alloc] init] }; | |||
NSUniquePtr<AVPlayerLayer> playerLayer { [[AVPlayerLayer alloc] init] }; | |||
}; | |||
#if ! JUCE_32BIT | |||
// 32-bit builds don't have AVPlayerView | |||
AVPlayerView* playerView = nil; | |||
class API_AVAILABLE (macos (10.9)) WrappedPlayerView : public WrappedPlayer | |||
{ | |||
public: | |||
WrappedPlayerView() = default; | |||
NSView* getView() const override { return playerView.get(); } | |||
AVPlayer* getPlayer() const override { return [playerView.get() player]; } | |||
void setPlayer (AVPlayer* player) override { [playerView.get() setPlayer: player]; } | |||
private: | |||
NSUniquePtr<AVPlayerView> playerView { [[AVPlayerView alloc] init] }; | |||
}; | |||
#endif | |||
std::unique_ptr<WrappedPlayer> wrappedPlayer; | |||
}; | |||
#else | |||
//============================================================================== | |||
@@ -716,13 +736,19 @@ private: | |||
void setPlayer (AVPlayer* playerToUse) | |||
{ | |||
detachPlayerStatusObserver(); | |||
detachPlaybackObserver(); | |||
if (useNativeControls) | |||
[playerViewController.get() setPlayer: playerToUse]; | |||
else | |||
[playerLayer.get() setPlayer: playerToUse]; | |||
attachPlayerStatusObserver(); | |||
attachPlaybackObserver(); | |||
if (playerToUse != nil) | |||
{ | |||
attachPlayerStatusObserver(); | |||
attachPlaybackObserver(); | |||
} | |||
} | |||
private: | |||