@@ -561,8 +561,8 @@ | |||||
LLVM_LTO = YES; | LLVM_LTO = YES; | ||||
MACOSX_DEPLOYMENT_TARGET = 10.11; | MACOSX_DEPLOYMENT_TARGET = 10.11; | ||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | 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_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner; | ||||
PRODUCT_NAME = "DemoRunner"; | PRODUCT_NAME = "DemoRunner"; | ||||
USE_HEADERMAP = NO; | USE_HEADERMAP = NO; | ||||
@@ -642,8 +642,8 @@ | |||||
INSTALL_PATH = "$(HOME)/Applications"; | INSTALL_PATH = "$(HOME)/Applications"; | ||||
MACOSX_DEPLOYMENT_TARGET = 10.11; | MACOSX_DEPLOYMENT_TARGET = 10.11; | ||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | 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_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner; | ||||
PRODUCT_NAME = "DemoRunner"; | PRODUCT_NAME = "DemoRunner"; | ||||
USE_HEADERMAP = NO; | USE_HEADERMAP = NO; | ||||
@@ -564,8 +564,8 @@ | |||||
INSTALL_PATH = "$(HOME)/Applications"; | INSTALL_PATH = "$(HOME)/Applications"; | ||||
LLVM_LTO = YES; | LLVM_LTO = YES; | ||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | 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_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner; | ||||
PRODUCT_NAME = "DemoRunner"; | PRODUCT_NAME = "DemoRunner"; | ||||
USE_HEADERMAP = NO; | USE_HEADERMAP = NO; | ||||
@@ -645,8 +645,8 @@ | |||||
INFOPLIST_PREPROCESS = NO; | INFOPLIST_PREPROCESS = NO; | ||||
INSTALL_PATH = "$(HOME)/Applications"; | INSTALL_PATH = "$(HOME)/Applications"; | ||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | 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_BUNDLE_IDENTIFIER = com.rmsl.jucedemorunner; | ||||
PRODUCT_NAME = "DemoRunner"; | PRODUCT_NAME = "DemoRunner"; | ||||
USE_HEADERMAP = NO; | USE_HEADERMAP = NO; | ||||
@@ -486,8 +486,8 @@ | |||||
LLVM_LTO = YES; | LLVM_LTO = YES; | ||||
MACOSX_DEPLOYMENT_TARGET = 10.11; | MACOSX_DEPLOYMENT_TARGET = 10.11; | ||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | 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_BUNDLE_IDENTIFIER = com.juce.pluginhost; | ||||
PRODUCT_NAME = "AudioPluginHost"; | PRODUCT_NAME = "AudioPluginHost"; | ||||
USE_HEADERMAP = NO; | USE_HEADERMAP = NO; | ||||
@@ -615,8 +615,8 @@ | |||||
INSTALL_PATH = "$(HOME)/Applications"; | INSTALL_PATH = "$(HOME)/Applications"; | ||||
MACOSX_DEPLOYMENT_TARGET = 10.11; | MACOSX_DEPLOYMENT_TARGET = 10.11; | ||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | 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_BUNDLE_IDENTIFIER = com.juce.pluginhost; | ||||
PRODUCT_NAME = "AudioPluginHost"; | PRODUCT_NAME = "AudioPluginHost"; | ||||
USE_HEADERMAP = NO; | USE_HEADERMAP = NO; | ||||
@@ -494,8 +494,8 @@ | |||||
INSTALL_PATH = "$(HOME)/Applications"; | INSTALL_PATH = "$(HOME)/Applications"; | ||||
LLVM_LTO = YES; | LLVM_LTO = YES; | ||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | 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_BUNDLE_IDENTIFIER = com.juce.pluginhost; | ||||
PRODUCT_NAME = "Plugin Host"; | PRODUCT_NAME = "Plugin Host"; | ||||
USE_HEADERMAP = NO; | USE_HEADERMAP = NO; | ||||
@@ -624,8 +624,8 @@ | |||||
INFOPLIST_PREPROCESS = NO; | INFOPLIST_PREPROCESS = NO; | ||||
INSTALL_PATH = "$(HOME)/Applications"; | INSTALL_PATH = "$(HOME)/Applications"; | ||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | 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_BUNDLE_IDENTIFIER = com.juce.pluginhost; | ||||
PRODUCT_NAME = "Plugin Host"; | PRODUCT_NAME = "Plugin Host"; | ||||
USE_HEADERMAP = NO; | 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>>: | $<$<OR:$<COMPILE_LANGUAGE:CXX>,$<COMPILE_LANGUAGE:OBJCXX>>: | ||||
-Wzero-as-null-pointer-constant -Wunused-private-field | -Wzero-as-null-pointer-constant -Wunused-private-field | ||||
-Woverloaded-virtual -Wreorder | -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") | elseif(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") | ||||
target_compile_options(juce_recommended_warning_flags INTERFACE | target_compile_options(juce_recommended_warning_flags INTERFACE | ||||
-Wall -Wextra -Wpedantic -Wstrict-aliasing -Wuninitialized | -Wall -Wextra -Wpedantic -Wstrict-aliasing -Wuninitialized | ||||
@@ -1170,8 +1170,8 @@ | |||||
INSTALL_PATH = "$(HOME)/Applications"; | INSTALL_PATH = "$(HOME)/Applications"; | ||||
MACOSX_DEPLOYMENT_TARGET = 10.12; | MACOSX_DEPLOYMENT_TARGET = 10.12; | ||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../Build $(SRCROOT)/../../../../modules"; | 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_BUNDLE_IDENTIFIER = com.juce.theprojucer; | ||||
PRODUCT_NAME = "Projucer"; | PRODUCT_NAME = "Projucer"; | ||||
USE_HEADERMAP = NO; | USE_HEADERMAP = NO; | ||||
@@ -1239,8 +1239,8 @@ | |||||
INSTALL_PATH = "$(HOME)/Applications"; | INSTALL_PATH = "$(HOME)/Applications"; | ||||
MACOSX_DEPLOYMENT_TARGET = 10.12; | MACOSX_DEPLOYMENT_TARGET = 10.12; | ||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../Build $(SRCROOT)/../../../../modules"; | 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_BUNDLE_IDENTIFIER = com.juce.theprojucer; | ||||
PRODUCT_NAME = "Projucer"; | PRODUCT_NAME = "Projucer"; | ||||
USE_HEADERMAP = NO; | USE_HEADERMAP = NO; | ||||
@@ -1577,6 +1577,7 @@ public: | |||||
s.set ("GCC_FAST_MATH", "YES"); | s.set ("GCC_FAST_MATH", "YES"); | ||||
auto recommendedWarnings = config.getRecommendedCompilerWarningFlags(); | auto recommendedWarnings = config.getRecommendedCompilerWarningFlags(); | ||||
recommendedWarnings.common.addArray (recommendedWarnings.objc); | |||||
recommendedWarnings.cpp.addArray (recommendedWarnings.common); | recommendedWarnings.cpp.addArray (recommendedWarnings.common); | ||||
struct XcodeWarningFlags | struct XcodeWarningFlags | ||||
@@ -868,6 +868,9 @@ ProjectExporter::BuildConfiguration::BuildConfiguration (Project& p, const Value | |||||
llvmFlags.cpp.addArray ({ | llvmFlags.cpp.addArray ({ | ||||
"-Wunused-private-field", "-Winconsistent-missing-destructor-override" | "-Wunused-private-field", "-Winconsistent-missing-destructor-override" | ||||
}); | }); | ||||
llvmFlags.objc.addArray ({ | |||||
"-Wunguarded-availability", "-Wunguarded-availability-new" | |||||
}); | |||||
auto& gccFlags = recommendedCompilerWarningFlags[CompilerNames::gcc] = BuildConfiguration::CompilerWarningFlags::getRecommendedForGCCAndLLVM(); | auto& gccFlags = recommendedCompilerWarningFlags[CompilerNames::gcc] = BuildConfiguration::CompilerWarningFlags::getRecommendedForGCCAndLLVM(); | ||||
gccFlags.common.addArray ({ | gccFlags.common.addArray ({ | ||||
@@ -289,8 +289,7 @@ public: | |||||
return result; | return result; | ||||
} | } | ||||
StringArray common; | |||||
StringArray cpp; | |||||
StringArray common, cpp, objc; | |||||
}; | }; | ||||
CompilerWarningFlags getRecommendedCompilerWarningFlags() const; | CompilerWarningFlags getRecommendedCompilerWarningFlags() const; | ||||
@@ -451,8 +451,8 @@ | |||||
LLVM_LTO = YES; | LLVM_LTO = YES; | ||||
MACOSX_DEPLOYMENT_TARGET = 10.10; | MACOSX_DEPLOYMENT_TARGET = 10.10; | ||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | 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_BUNDLE_IDENTIFIER = com.juce.UnitTestRunner; | ||||
PRODUCT_NAME = "UnitTestRunner"; | PRODUCT_NAME = "UnitTestRunner"; | ||||
USE_HEADERMAP = NO; | USE_HEADERMAP = NO; | ||||
@@ -573,8 +573,8 @@ | |||||
INSTALL_PATH = "/usr/bin"; | INSTALL_PATH = "/usr/bin"; | ||||
MACOSX_DEPLOYMENT_TARGET = 10.10; | MACOSX_DEPLOYMENT_TARGET = 10.10; | ||||
MTL_HEADER_SEARCH_PATHS = "$(SRCROOT)/../../../../modules/juce_audio_processors/format_types/VST3_SDK $(SRCROOT)/../../JuceLibraryCode $(SRCROOT)/../../../../modules"; | 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_BUNDLE_IDENTIFIER = com.juce.UnitTestRunner; | ||||
PRODUCT_NAME = "UnitTestRunner"; | PRODUCT_NAME = "UnitTestRunner"; | ||||
USE_HEADERMAP = NO; | USE_HEADERMAP = NO; | ||||
@@ -82,10 +82,8 @@ namespace CoreMidiHelpers | |||||
struct Sender; | struct Sender; | ||||
#if JUCE_HAS_NEW_COREMIDI_API | #if JUCE_HAS_NEW_COREMIDI_API | ||||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") | |||||
template <> | 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) | explicit Sender (MIDIEndpointRef ep) | ||||
: umpConverter (getProtocolForEndpoint (ep)) | : umpConverter (getProtocolForEndpoint (ep)) | ||||
@@ -177,8 +175,6 @@ namespace CoreMidiHelpers | |||||
send(); | send(); | ||||
} | } | ||||
}; | }; | ||||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||||
#endif | #endif | ||||
#if JUCE_HAS_OLD_COREMIDI_API | #if JUCE_HAS_OLD_COREMIDI_API | ||||
@@ -829,10 +825,8 @@ namespace CoreMidiHelpers | |||||
struct CreatorFunctions; | struct CreatorFunctions; | ||||
#if JUCE_HAS_NEW_COREMIDI_API | #if JUCE_HAS_NEW_COREMIDI_API | ||||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") | |||||
template <> | template <> | ||||
struct CreatorFunctions<ImplementationStrategy::onlyNew> | |||||
struct API_AVAILABLE (macos (11.0), ios (14.0)) CreatorFunctions<ImplementationStrategy::onlyNew> | |||||
{ | { | ||||
static OSStatus createInputPort (ump::PacketProtocol protocol, | static OSStatus createInputPort (ump::PacketProtocol protocol, | ||||
MIDIClientRef client, | MIDIClientRef client, | ||||
@@ -894,8 +888,6 @@ namespace CoreMidiHelpers | |||||
static_cast<MidiPortAndCallback*> (readProcRefCon)->handlePackets (*list); | static_cast<MidiPortAndCallback*> (readProcRefCon)->handlePackets (*list); | ||||
} | } | ||||
}; | }; | ||||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||||
#endif | #endif | ||||
#if JUCE_HAS_OLD_COREMIDI_API | #if JUCE_HAS_OLD_COREMIDI_API | ||||
@@ -287,7 +287,7 @@ namespace AudioUnitFormatHelpers | |||||
NSBundle* bundle = [[NSBundle alloc] initWithPath: (NSString*) fileOrIdentifier.toCFString()]; | NSBundle* bundle = [[NSBundle alloc] initWithPath: (NSString*) fileOrIdentifier.toCFString()]; | ||||
NSArray* audioComponents = [bundle objectForInfoDictionaryKey: @"AudioComponents"]; | NSArray* audioComponents = [bundle objectForInfoDictionaryKey: @"AudioComponents"]; | ||||
NSDictionary* dict = audioComponents[0]; | |||||
NSDictionary* dict = [audioComponents objectAtIndex: 0]; | |||||
desc.componentManufacturer = stringToOSType (nsStringToJuce ((NSString*) [dict valueForKey: @"manufacturer"])); | desc.componentManufacturer = stringToOSType (nsStringToJuce ((NSString*) [dict valueForKey: @"manufacturer"])); | ||||
desc.componentType = stringToOSType (nsStringToJuce ((NSString*) [dict valueForKey: @"type"])); | desc.componentType = stringToOSType (nsStringToJuce ((NSString*) [dict valueForKey: @"type"])); | ||||
@@ -436,6 +436,14 @@ namespace AudioUnitFormatHelpers | |||||
*/ | */ | ||||
std::vector<size_t> channels; | 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); | AudioComponentGetDescription (auComponent, &componentDesc); | ||||
isAUv3 = ((componentDesc.componentFlags & kAudioComponentFlag_IsV3AudioUnit) != 0); | |||||
isAUv3 = AudioUnitFormatHelpers::isPluginAUv3 (componentDesc); | |||||
wantsMidiMessages = componentDesc.componentType == kAudioUnitType_MusicDevice | wantsMidiMessages = componentDesc.componentType == kAudioUnitType_MusicDevice | ||||
|| componentDesc.componentType == kAudioUnitType_MusicEffect | || componentDesc.componentType == kAudioUnitType_MusicEffect | ||||
@@ -2577,7 +2585,10 @@ private: | |||||
{ | { | ||||
const auto viewSize = [&controller] | 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) | if (size.width == 0 || size.height == 0) | ||||
size = controller.view.frame.size; | size = controller.view.frame.size; | ||||
@@ -2886,12 +2897,15 @@ void AudioUnitPluginFormat::createPluginInstance (const PluginDescription& desc, | |||||
auto callbackBlock = new AUAsyncInitializationCallback (rate, blockSize, std::move (callback)); | 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; | AudioComponentInstance audioUnit; | ||||
@@ -2915,8 +2929,10 @@ bool AudioUnitPluginFormat::requiresUnblockedMessageThreadDuringCreation (const | |||||
pluginName, version, manufacturer)) | pluginName, version, manufacturer)) | ||||
{ | { | ||||
if (AudioComponent auComp = AudioComponentFindNext (nullptr, &componentDesc)) | if (AudioComponent auComp = AudioComponentFindNext (nullptr, &componentDesc)) | ||||
{ | |||||
if (AudioComponentGetDescription (auComp, &componentDesc) == noErr) | if (AudioComponentGetDescription (auComp, &componentDesc) == noErr) | ||||
return ((componentDesc.componentFlags & kAudioComponentFlag_IsV3AudioUnit) != 0); | |||||
return AudioUnitFormatHelpers::isPluginAUv3 (componentDesc); | |||||
} | |||||
} | } | ||||
return false; | return false; | ||||
@@ -2948,11 +2964,7 @@ StringArray AudioUnitPluginFormat::searchPathsForPlugins (const FileSearchPath&, | |||||
|| desc.componentType == kAudioUnitType_Mixer | || desc.componentType == kAudioUnitType_Mixer | ||||
|| desc.componentType == kAudioUnitType_MIDIProcessor) | || 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)); | 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: | public: | ||||
struct Callbacks | struct Callbacks | ||||
@@ -117,7 +117,7 @@ private: | |||||
} | } | ||||
}; | }; | ||||
class BluetoothMidiSelectorWindowHelper : public DeletedAtShutdown | |||||
class API_AVAILABLE (macos (10.11)) BluetoothMidiSelectorWindowHelper : public DeletedAtShutdown | |||||
{ | { | ||||
public: | public: | ||||
BluetoothMidiSelectorWindowHelper (ModalComponentManager::Callback* exitCallback, | BluetoothMidiSelectorWindowHelper (ModalComponentManager::Callback* exitCallback, | ||||
@@ -528,8 +528,9 @@ void File::addToDock() const | |||||
File File::getContainerForSecurityApplicationGroupIdentifier (const String& appGroup) | 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(); | return File(); | ||||
} | } | ||||
@@ -393,7 +393,7 @@ JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||||
#endif | #endif | ||||
//============================================================================== | //============================================================================== | ||||
class URLConnectionState : public URLConnectionStateBase | |||||
class API_AVAILABLE (macos (10.9)) URLConnectionState : public URLConnectionStateBase | |||||
{ | { | ||||
public: | public: | ||||
URLConnectionState (NSURLRequest* req, const int maxRedirects) | URLConnectionState (NSURLRequest* req, const int maxRedirects) | ||||
@@ -164,7 +164,7 @@ inline var nsDictionaryToVar (NSDictionary* dictionary) | |||||
DynamicObject::Ptr dynamicObject (new DynamicObject()); | DynamicObject::Ptr dynamicObject (new DynamicObject()); | ||||
for (NSString* key in dictionary) | for (NSString* key in dictionary) | ||||
dynamicObject->setProperty (nsStringToJuce (key), nsObjectToVar (dictionary[key])); | |||||
dynamicObject->setProperty (nsStringToJuce (key), nsObjectToVar ([dictionary objectForKey: key])); | |||||
return var (dynamicObject.get()); | return var (dynamicObject.get()); | ||||
} | } | ||||
@@ -28,12 +28,21 @@ namespace juce | |||||
class ScopedLowPowerModeDisabler::Pimpl | class ScopedLowPowerModeDisabler::Pimpl | ||||
{ | { | ||||
public: | 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: | 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_COPYABLE (Pimpl) | ||||
JUCE_DECLARE_NON_MOVEABLE (Pimpl) | JUCE_DECLARE_NON_MOVEABLE (Pimpl) | ||||
@@ -41,31 +41,6 @@ namespace juce | |||||
#define JUCE_IOS_CONTAINER_API_AVAILABLE 1 | #define JUCE_IOS_CONTAINER_API_AVAILABLE 1 | ||||
#endif | #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 | #define JUCE_NATIVE_ACCESSIBILITY_INCLUDED 1 | ||||
//============================================================================== | //============================================================================== | ||||
@@ -164,7 +139,12 @@ private: | |||||
if (auto* handler = getHandler (self)) | if (auto* handler = getHandler (self)) | ||||
{ | { | ||||
if (handler->getTableInterface() != nullptr) | if (handler->getTableInterface() != nullptr) | ||||
return juceUIAccessibilityContainerTypeDataTable; | |||||
{ | |||||
if (@available (iOS 11.0, *)) | |||||
return UIAccessibilityContainerTypeDataTable; | |||||
return 1; // UIAccessibilityContainerTypeDataTable | |||||
} | |||||
const auto role = handler->getRole(); | const auto role = handler->getRole(); | ||||
@@ -172,11 +152,17 @@ private: | |||||
|| role == AccessibilityRole::list | || role == AccessibilityRole::list | ||||
|| role == AccessibilityRole::tree) | || 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>*) {} | static void juceFreeAccessibilityPlatformSpecificData (NSAccessibilityElement<NSAccessibility>*) {} | ||||
namespace juce | namespace juce | ||||
@@ -35,16 +36,17 @@ namespace juce | |||||
#define JUCE_NATIVE_ACCESSIBILITY_INCLUDED 1 | #define JUCE_NATIVE_ACCESSIBILITY_INCLUDED 1 | ||||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") | |||||
//============================================================================== | //============================================================================== | ||||
class AccessibilityHandler::AccessibilityNativeImpl | class AccessibilityHandler::AccessibilityNativeImpl | ||||
{ | { | ||||
public: | public: | ||||
explicit AccessibilityNativeImpl (AccessibilityHandler& handler) | 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 | NSAccessibilityElement<NSAccessibility>* getAccessibilityElement() const noexcept | ||||
{ | { | ||||
return accessibilityElement.get(); | return accessibilityElement.get(); | ||||
@@ -52,7 +54,7 @@ public: | |||||
private: | private: | ||||
//============================================================================== | //============================================================================== | ||||
class AccessibilityElement : public AccessibleObjCClass<NSAccessibilityElement<NSAccessibility>> | |||||
class API_AVAILABLE (macos (10.10)) AccessibilityElement : public AccessibleObjCClass<NSAccessibilityElement<NSAccessibility>> | |||||
{ | { | ||||
public: | public: | ||||
static Holder create (AccessibilityHandler& handler) | static Holder create (AccessibilityHandler& handler) | ||||
@@ -830,6 +832,7 @@ private: | |||||
}; | }; | ||||
//============================================================================== | //============================================================================== | ||||
API_AVAILABLE (macos (10.10)) | |||||
AccessibilityElement::Holder accessibilityElement; | AccessibilityElement::Holder accessibilityElement; | ||||
//============================================================================== | //============================================================================== | ||||
@@ -839,7 +842,10 @@ private: | |||||
//============================================================================== | //============================================================================== | ||||
AccessibilityNativeHandle* AccessibilityHandler::getNativeImplementation() const | AccessibilityNativeHandle* AccessibilityHandler::getNativeImplementation() const | ||||
{ | { | ||||
return (AccessibilityNativeHandle*) nativeImpl->getAccessibilityElement(); | |||||
if (@available (macOS 10.10, *)) | |||||
return (AccessibilityNativeHandle*) nativeImpl->getAccessibilityElement(); | |||||
return nullptr; | |||||
} | } | ||||
static bool areAnyAccessibilityClientsActive() | static bool areAnyAccessibilityClientsActive() | ||||
@@ -873,12 +879,15 @@ static void sendHandlerNotification (const AccessibilityHandler& handler, | |||||
if (! areAnyAccessibilityClientsActive() || notification == NSAccessibilityNotificationName{}) | if (! areAnyAccessibilityClientsActive() || notification == NSAccessibilityNotificationName{}) | ||||
return; | 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()) | if (! areAnyAccessibilityClientsActive()) | ||||
return; | return; | ||||
if (@available (macOS 10.10, *)) | |||||
{ | |||||
if (@available (macOS 10.9, *)) | |||||
{ | |||||
auto nsPriority = [priority] | auto nsPriority = [priority] | ||||
{ | { | ||||
// The below doesn't get noticed by the @available check above | |||||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability") | |||||
switch (priority) | switch (priority) | ||||
{ | { | ||||
case AnnouncementPriority::low: return NSAccessibilityPriorityLow; | case AnnouncementPriority::low: return NSAccessibilityPriorityLow; | ||||
@@ -950,6 +962,8 @@ void AccessibilityHandler::postAnnouncement (const String& announcementString, A | |||||
jassertfalse; | jassertfalse; | ||||
return NSAccessibilityPriorityLow; | return NSAccessibilityPriorityLow; | ||||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||||
}(); | }(); | ||||
sendAccessibilityEvent ((id) [NSApp mainWindow], | sendAccessibilityEvent ((id) [NSApp mainWindow], | ||||
@@ -959,6 +973,4 @@ void AccessibilityHandler::postAnnouncement (const String& announcementString, A | |||||
} | } | ||||
} | } | ||||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||||
} // namespace juce | } // namespace juce |
@@ -112,10 +112,13 @@ public: | |||||
preview->addToDesktop (0, (void*) nsViewPreview); | preview->addToDesktop (0, (void*) nsViewPreview); | ||||
preview->setVisible (true); | 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) | 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) | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (NSViewComponentPeer) | ||||
@@ -26,7 +26,7 @@ | |||||
namespace juce | 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, | extern NSMenu* createNSMenu (const PopupMenu&, const String& name, int topLevelMenuId, | ||||
int topLevelIndex, bool addDelegate); | 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) | ButtonBasedStatusItem (SystemTrayIconComponent& iconComp, const Image& im) | ||||
@@ -384,7 +384,7 @@ public: | |||||
//============================================================================== | //============================================================================== | ||||
Pimpl (SystemTrayIconComponent& iconComp, const Image& im) | Pimpl (SystemTrayIconComponent& iconComp, const Image& im) | ||||
{ | { | ||||
if (std::floor (NSFoundationVersionNumber) > NSFoundationVersionNumber10_10) | |||||
if (@available (macOS 10.10, *)) | |||||
statusItemHolder = std::make_unique<ButtonBasedStatusItem> (iconComp, im); | statusItemHolder = std::make_unique<ButtonBasedStatusItem> (iconComp, im); | ||||
else | else | ||||
statusItemHolder = std::make_unique<ViewBasedStatusItem> (iconComp, im); | statusItemHolder = std::make_unique<ViewBasedStatusItem> (iconComp, im); | ||||
@@ -32,7 +32,7 @@ namespace juce | |||||
static NSURL* appendParametersToFileURL (const URL& url, NSURL* fileUrl) | 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 parameterNames = url.getParameterNames(); | ||||
const auto parameterValues = url.getParameterValues(); | const auto parameterValues = url.getParameterValues(); | ||||
@@ -263,7 +263,7 @@ private: | |||||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | JUCE_END_IGNORE_WARNINGS_GCC_LIKE | ||||
#endif | #endif | ||||
struct WebViewDelegateClass : public ObjCClass<NSObject> | |||||
struct API_AVAILABLE (macos (10.10)) WebViewDelegateClass : public ObjCClass<NSObject> | |||||
{ | { | ||||
WebViewDelegateClass() : ObjCClass<NSObject> ("JUCEWebViewDelegate_") | WebViewDelegateClass() : ObjCClass<NSObject> ("JUCEWebViewDelegate_") | ||||
{ | { | ||||
@@ -339,7 +339,7 @@ private: | |||||
} | } | ||||
#if WKWEBVIEW_OPENPANEL_SUPPORTED | #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*, | static void runOpenPanel (id, SEL, WKWebView*, WKOpenPanelParameters* parameters, WKFrameInfo*, | ||||
void (^completionHandler)(NSArray<NSURL*>*)) | void (^completionHandler)(NSArray<NSURL*>*)) | ||||
{ | { | ||||
@@ -402,7 +402,6 @@ private: | |||||
delete wrapper; | delete wrapper; | ||||
}); | }); | ||||
} | } | ||||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||||
#endif | #endif | ||||
}; | }; | ||||
@@ -507,7 +506,7 @@ private: | |||||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | JUCE_END_IGNORE_WARNINGS_GCC_LIKE | ||||
#endif | #endif | ||||
class WKWebViewImpl : public WebViewBase | |||||
class API_AVAILABLE (macos (10.11)) WKWebViewImpl : public WebViewBase | |||||
{ | { | ||||
public: | public: | ||||
WKWebViewImpl (WebBrowserComponent* owner) | WKWebViewImpl (WebBrowserComponent* owner) | ||||
@@ -587,7 +586,7 @@ class WebBrowserComponent::Pimpl | |||||
public: | public: | ||||
Pimpl (WebBrowserComponent* owner) | Pimpl (WebBrowserComponent* owner) | ||||
{ | { | ||||
if (@available (macOS 10.10, *)) | |||||
if (@available (macOS 10.11, *)) | |||||
webView = std::make_unique<WKWebViewImpl> (owner); | webView = std::make_unique<WKWebViewImpl> (owner); | ||||
#if JUCE_MAC | #if JUCE_MAC | ||||
else | else | ||||
@@ -31,11 +31,7 @@ namespace juce | |||||
#elif JUCE_WINDOWS | #elif JUCE_WINDOWS | ||||
#include "../native/juce_win32_CameraDevice.h" | #include "../native/juce_win32_CameraDevice.h" | ||||
#elif JUCE_IOS | #elif JUCE_IOS | ||||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wunguarded-availability", "-Wunguarded-availability-new") | |||||
#include "../native/juce_ios_CameraDevice.h" | #include "../native/juce_ios_CameraDevice.h" | ||||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||||
#elif JUCE_ANDROID | #elif JUCE_ANDROID | ||||
#include "../native/juce_android_CameraDevice.h" | #include "../native/juce_android_CameraDevice.h" | ||||
#endif | #endif | ||||
@@ -766,7 +766,7 @@ private: | |||||
//============================================================================== | //============================================================================== | ||||
#if JUCE_USE_NEW_CAMERA_API | #if JUCE_USE_NEW_CAMERA_API | ||||
class PhotoOutputDelegateClass : public ObjCClass<NSObject> | |||||
class API_AVAILABLE (ios (10.0)) PhotoOutputDelegateClass : public ObjCClass<NSObject> | |||||
{ | { | ||||
public: | public: | ||||
PhotoOutputDelegateClass() : ObjCClass<NSObject> ("PhotoOutputDelegateClass_") | PhotoOutputDelegateClass() : ObjCClass<NSObject> ("PhotoOutputDelegateClass_") | ||||
@@ -820,6 +820,7 @@ private: | |||||
JUCE_CAMERA_LOG ("didFinishCaptureForSettings(), error = " + errorString); | JUCE_CAMERA_LOG ("didFinishCaptureForSettings(), error = " + errorString); | ||||
} | } | ||||
API_AVAILABLE (ios (11.0)) | |||||
static void didFinishProcessingPhoto (id self, SEL, AVCapturePhotoOutput*, AVCapturePhoto* capturePhoto, NSError* error) | static void didFinishProcessingPhoto (id self, SEL, AVCapturePhotoOutput*, AVCapturePhoto* capturePhoto, NSError* error) | ||||
{ | { | ||||
getOwner (self).takingPicture = false; | getOwner (self).takingPicture = false; | ||||
@@ -226,7 +226,7 @@ private: | |||||
{ | { | ||||
JUCE_CAMERA_LOG (nsStringToJuce ([notification description])); | 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(); | auto errorString = error != nil ? nsStringToJuce (error.localizedDescription) : String(); | ||||
getOwner (self).cameraSessionRuntimeError (errorString); | getOwner (self).cameraSessionRuntimeError (errorString); | ||||
} | } | ||||
@@ -244,8 +244,7 @@ private: | |||||
}; | }; | ||||
#if JUCE_USE_NEW_CAMERA_API | #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: | public: | ||||
PostCatalinaPhotoOutput() | PostCatalinaPhotoOutput() | ||||
@@ -329,7 +328,6 @@ private: | |||||
AVCapturePhotoOutput* imageOutput = nil; | AVCapturePhotoOutput* imageOutput = nil; | ||||
std::unique_ptr<NSObject, NSObjectDeleter> delegate; | std::unique_ptr<NSObject, NSObjectDeleter> delegate; | ||||
}; | }; | ||||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | |||||
#endif | #endif | ||||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations") | JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations") | ||||
@@ -195,8 +195,15 @@ private: | |||||
public: | public: | ||||
~PlayerControllerBase() | ~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: | protected: | ||||
@@ -226,8 +233,8 @@ private: | |||||
if ([keyPath isEqualToString: nsStringLiteral ("rate")]) | 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) | if (oldRate == 0 && newRate != 0) | ||||
owner.playbackStarted(); | owner.playbackStarted(); | ||||
@@ -236,7 +243,7 @@ private: | |||||
} | } | ||||
else if ([keyPath isEqualToString: nsStringLiteral ("status")]) | else if ([keyPath isEqualToString: nsStringLiteral ("status")]) | ||||
{ | { | ||||
auto status = [change[NSKeyValueChangeNewKey] intValue]; | |||||
auto status = [[change objectForKey: NSKeyValueChangeNewKey] intValue]; | |||||
if (status == AVPlayerStatusFailed) | if (status == AVPlayerStatusFailed) | ||||
owner.errorOccurred(); | owner.errorOccurred(); | ||||
@@ -329,8 +336,8 @@ private: | |||||
auto* urlAsset = (AVURLAsset*) playerItem.asset; | auto* urlAsset = (AVURLAsset*) playerItem.asset; | ||||
URL url (nsStringToJuce (urlAsset.URL.absoluteString)); | 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 | // Ignore spurious notifications | ||||
if (oldStatus == newStatus) | if (oldStatus == newStatus) | ||||
@@ -481,6 +488,8 @@ private: | |||||
forKeyPath: nsStringLiteral ("status") | forKeyPath: nsStringLiteral ("status") | ||||
options: NSKeyValueObservingOptionNew | options: NSKeyValueObservingOptionNew | ||||
context: this]; | context: this]; | ||||
playerStatusObserverAttached = true; | |||||
} | } | ||||
void detachPlayerStatusObserver() | void detachPlayerStatusObserver() | ||||
@@ -495,6 +504,8 @@ private: | |||||
forKeyPath: nsStringLiteral ("status") | forKeyPath: nsStringLiteral ("status") | ||||
context: this]; | context: this]; | ||||
} | } | ||||
playerStatusObserverAttached = false; | |||||
} | } | ||||
void attachPlaybackObserver() | void attachPlaybackObserver() | ||||
@@ -505,6 +516,8 @@ private: | |||||
name: AVPlayerItemDidPlayToEndTimeNotification | name: AVPlayerItemDidPlayToEndTimeNotification | ||||
object: [crtp().getPlayer() currentItem]]; | object: [crtp().getPlayer() currentItem]]; | ||||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | JUCE_END_IGNORE_WARNINGS_GCC_LIKE | ||||
playbackObserverAttached = true; | |||||
} | } | ||||
void detachPlaybackObserver() | void detachPlaybackObserver() | ||||
@@ -512,6 +525,8 @@ private: | |||||
JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wundeclared-selector") | JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wundeclared-selector") | ||||
[[NSNotificationCenter defaultCenter] removeObserver: playerItemPlaybackStatusObserver.get()]; | [[NSNotificationCenter defaultCenter] removeObserver: playerItemPlaybackStatusObserver.get()]; | ||||
JUCE_END_IGNORE_WARNINGS_GCC_LIKE | JUCE_END_IGNORE_WARNINGS_GCC_LIKE | ||||
playbackObserverAttached = false; | |||||
} | } | ||||
private: | private: | ||||
@@ -556,6 +571,8 @@ private: | |||||
owner.playbackStopped(); | owner.playbackStopped(); | ||||
} | } | ||||
bool playerStatusObserverAttached = false, playbackObserverAttached = false; | |||||
JUCE_DECLARE_WEAK_REFERENCEABLE (PlayerControllerBase) | JUCE_DECLARE_WEAK_REFERENCEABLE (PlayerControllerBase) | ||||
}; | }; | ||||
@@ -572,38 +589,21 @@ private: | |||||
useNativeControls = false; | useNativeControls = false; | ||||
#endif | #endif | ||||
if (useNativeControls) | |||||
wrappedPlayer = [&]() -> std::unique_ptr<WrappedPlayer> | |||||
{ | { | ||||
#if ! JUCE_32BIT | #if ! JUCE_32BIT | ||||
playerView = [[AVPlayerView alloc] init]; | |||||
if (@available (macOS 10.9, *)) | |||||
if (useNativeControls) | |||||
return std::make_unique<WrappedPlayerView>(); | |||||
#endif | #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() | NSView* getView() | ||||
{ | { | ||||
#if ! JUCE_32BIT | |||||
if (useNativeControls) | |||||
return playerView; | |||||
#endif | |||||
return view; | |||||
return wrappedPlayer->getView(); | |||||
} | } | ||||
Result load (NSURL* url) | Result load (NSURL* url) | ||||
@@ -629,12 +629,7 @@ private: | |||||
detachPlayerStatusObserver(); | detachPlayerStatusObserver(); | ||||
detachPlaybackObserver(); | detachPlaybackObserver(); | ||||
#if ! JUCE_32BIT | |||||
if (useNativeControls) | |||||
[playerView setPlayer: player]; | |||||
else | |||||
#endif | |||||
[playerLayer setPlayer: player]; | |||||
wrappedPlayer->setPlayer (player); | |||||
if (player != nil) | if (player != nil) | ||||
{ | { | ||||
@@ -645,21 +640,46 @@ private: | |||||
AVPlayer* getPlayer() const | AVPlayer* getPlayer() const | ||||
{ | { | ||||
#if ! JUCE_32BIT | |||||
if (useNativeControls) | |||||
return [playerView player]; | |||||
#endif | |||||
return [playerLayer player]; | |||||
return wrappedPlayer->getPlayer(); | |||||
} | } | ||||
private: | 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 | #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 | #endif | ||||
std::unique_ptr<WrappedPlayer> wrappedPlayer; | |||||
}; | }; | ||||
#else | #else | ||||
//============================================================================== | //============================================================================== | ||||
@@ -716,13 +736,19 @@ private: | |||||
void setPlayer (AVPlayer* playerToUse) | void setPlayer (AVPlayer* playerToUse) | ||||
{ | { | ||||
detachPlayerStatusObserver(); | |||||
detachPlaybackObserver(); | |||||
if (useNativeControls) | if (useNativeControls) | ||||
[playerViewController.get() setPlayer: playerToUse]; | [playerViewController.get() setPlayer: playerToUse]; | ||||
else | else | ||||
[playerLayer.get() setPlayer: playerToUse]; | [playerLayer.get() setPlayer: playerToUse]; | ||||
attachPlayerStatusObserver(); | |||||
attachPlaybackObserver(); | |||||
if (playerToUse != nil) | |||||
{ | |||||
attachPlayerStatusObserver(); | |||||
attachPlaybackObserver(); | |||||
} | |||||
} | } | ||||
private: | private: | ||||