migrating to the latest JUCE version

This commit is contained in:
2022-11-04 23:11:33 +01:00
committed by Nikolai Rodionov
parent 4257a0f8ba
commit faf8f18333
2796 changed files with 888518 additions and 784244 deletions

76
deps/juce/docs/ARA.md vendored Normal file
View File

@ -0,0 +1,76 @@
# ARA plugin support
JUCE supports the development of ARA enabled hosts and plugins. Since the ARA SDK is not included
in JUCE there are some steps you need to take to enable all ARA related functionality.
## External dependencies
- ARA SDK 2.1.0
You can download the ARA SDK from Celemony's Github. The command below will recursively clone the
right version into the `ARA_SDK` directory
git clone --recursive --branch releases/2.1.0 https://github.com/Celemony/ARA_SDK
## Enabling ARA features in JUCE
Once you have downloaded the ARA SDK you need to configure JUCE to use it.
### The Projucer
Add the path to the Global Paths settings.
### CMake
Use the `juce_set_ara_sdk_path` function in your CMakeLists file.
Alternatively, if you are building the examples and extras with CMake from the JUCE repo directory
you can also specify `-DJUCE_GLOBAL_ARA_SDK_PATH=/your/path/to/ARA_SDK` parameter to CMake to
enable ARA.
## Building the AudioPluginHost with ARA
The AudioPluginHost has simple ARA hosting features, but you need to modify its build configuration
to enable them.
### The Projucer
After opening `AudioPluginHost.jucer` go to *Modules**juce_audio_processors* and enable the
*JUCE_PLUGINHOST_ARA* setting.
### CMake
Set `JUCE_PLUGINHOST_ARA=1` inside `AudioPluginHost/CMakeLists.txt`.
### Loading ARA plugins
ARA capable plugins will now have two entries in the Create plugin menu, and the one saying (ARA)
will activate additional ARA features. If you right click on the plugin in the graph, you can use
the “Show ARA host control” item to assign an audio file that the plugin can read through the ARA
interfaces.
## Adding ARA features to existing plugins
### The Projucer
Check the Enable ARA option in the Plugin Formats settings. ARA is an extension to VST3 and AU
plugins, hence you need to have at least one of those options enabled too for valid build targets.
### CMake
Add the property `IS_ARA_EFFECT TRUE` to your `juce_add_plugin` call.
### Modifying the plugin code
In addition to the `createPluginFilter()` function that is needed for all audio plugins, you will
now need to provide an implementation to the `createARAFactory()` function as well. You can do this
by inheriting from `juce::ARADocumentControllerSpecialisation` and using its helper function. The
class documentation should make this clear by also providing an example. You can also find an
example in the ARAPluginDemo.
## Learning about ARA
ARA provides an extensive API that allows you to exchange information with the host in completely
new ways. To understand the basics and to build up your knowledge its best to read the official
ARA documentation, which has approachable introductory sections. You can find the documentation in
the SDK directory at `ARA_SDK/ARA_Library/html_docs/index.html`.

View File

@ -213,6 +213,10 @@ that the call to `juce_add_module` which adds a specific module happens *before*
The modules will be placed in a group named "JUCE Modules" within the group for each target,
alongside the "Source Files" and "Header Files" groups.
Note: Source groups will only work when all JUCE-dependent targets are created using the
`juce_add_*` functions. The standard `add_executable` and `add_library` commands are likely to
result in broken builds when source groups are enabled!
#### `JUCE_COPY_PLUGIN_AFTER_BUILD`
Controls whether plugin targets should be installed to the system after building. Note that the
@ -243,341 +247,393 @@ commands, properties beginning with `JUCE_` can be _queried_, but changing their
have any effect (or might even break things in unexpected ways!), so always pass JUCE target
attributes directly to these creation functions, rather than adding them later.
- `PRODUCT_NAME`
- The name of the output built by this target, similar to CMake's `OUTPUT_NAME` property. If not
specified, this will default to the target name.
`PRODUCT_NAME`
- The name of the output built by this target, similar to CMake's `OUTPUT_NAME` property. If not
specified, this will default to the target name.
- `VERSION`
- A version number string in the format "major.minor.bugfix". If not specified, the `VERSION` of
the project containing the target will be used instead. On Apple platforms, this is the
user-facing version string. This option corresponds to the `CFBundleShortVersionString` field in
the target's plist.
`VERSION`
- A version number string in the format "major.minor.bugfix". If not specified, the `VERSION` of
the project containing the target will be used instead. On Apple platforms, this is the
user-facing version string. This option corresponds to the `CFBundleShortVersionString` field in
the target's plist.
- `BUILD_VERSION`
- A version number string in the format "major.minor.bugfix". If not specified, this will match
the `VERSION` of the target. On Apple platforms, this is the private version string used to
distinguish between App Store builds. This option corresponds to the `CFBundleVersion` field in
the target's plist.
- `BUNDLE_ID`
- An identifier string in the form "com.yourcompany.productname" which should uniquely identify
this target. Mainly used for macOS builds. If not specified, a default will be generated using
the target's `COMPANY_NAME` and `PRODUCT_NAME`.
- `MICROPHONE_PERMISSION_ENABLED`
- May be either TRUE or FALSE. Adds the appropriate entries to an app's Info.plist.
- `MICROPHONE_PERMISSION_TEXT`
- The text your app will display when it requests microphone permissions.
- `CAMERA_PERMISSION_ENABLED`
- May be either TRUE or FALSE. Adds the appropriate entries to an app's Info.plist.
- `CAMERA_PERMISSION_TEXT`
- The text your app will display when it requests camera permissions.
- `BLUETOOTH_PERMISSION_ENABLED`
- May be either TRUE or FALSE. Adds the appropriate entries to an app's Info.plist.
- `BLUETOOTH_PERMISSION_TEXT`
- The text your app will display when it requests bluetooth permissions.
- `SEND_APPLE_EVENTS_PERMISSION_ENABLED`
- May be either TRUE or FALSE. Enable this to allow your app to send Apple events.
- `SEND_APPLE_EVENTS_PERMISSION_TEXT`
- The text your app will display when it requests permission to send Apple events.
- `FILE_SHARING_ENABLED`
- May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's Info.plist.
- `DOCUMENT_BROWSER_ENABLED`
- May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's Info.plist.
- `STATUS_BAR_HIDDEN`
- May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's Info.plist.
- `REQUIRES_FULL_SCREEN`
- May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's Info.plist.
- `BACKGROUND_AUDIO_ENABLED`
- May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's Info.plist.
- `BACKGROUND_BLE_ENABLED`
- May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's Info.plist.
- `APP_GROUPS_ENABLED`
- May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's entitlements.
- `APP_GROUP_IDS`
- The app groups to which your iOS app belongs. These will be added to your app's entitlements.
- `ICLOUD_PERMISSIONS_ENABLED`
- May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's entitlements.
- `IPHONE_SCREEN_ORIENTATIONS`
- May be one or more of `UIInterfaceOrientationUnknown`, `UIInterfaceOrientationPortrait`,
`UIInterfaceOrientationPortraitUpsideDown`, `UIInterfaceOrientationLandscapeLeft`, or
`UIInterfaceOrientationLandscapeRight`. Adds appropriate entries to an iOS app's plist.
- `IPAD_SCREEN_ORIENTATIONS`
- May be one or more of `UIInterfaceOrientationUnknown`, `UIInterfaceOrientationPortrait`,
`UIInterfaceOrientationPortraitUpsideDown`, `UIInterfaceOrientationLandscapeLeft`, or
`UIInterfaceOrientationLandscapeRight`. Adds appropriate entries to an iOS app's plist.
- `LAUNCH_STORYBOARD_FILE`
- A custom launch storyboard file to use on iOS. If not supplied, a default storyboard will be
used.
- `CUSTOM_XCASSETS_FOLDER`
- A path to an xcassets directory, containing icons and/or launch images for this target. If this
is specified, the ICON_BIG and ICON_SMALL arguments will not have an effect on iOS, and a launch
storyboard will not be used.
- `TARGETED_DEVICE_FAMILY`
- Specifies the device families on which the product must be capable of running. Allowed values
are "1", "2", and "1,2"; these correspond to "iPhone/iPod touch", "iPad", and "iPhone/iPod and
iPad" respectively. This will default to "1,2", meaning that the target will target iPhone,
iPod, and iPad.
- `ICON_BIG`, `ICON_SMALL`
- Paths to image files that will be used to generate app icons. If only one of these parameters
is specified, then that image will be used for all icon resolutions. If both arguments are
specified, then the appropriate image will be picked for each icon resolution.
- `COMPANY_COPYRIGHT`
- Copyright text which will be added to the app/plugin's Info.plist. The value of this argument
will be inherited from the `JUCE_COMPANY_COPYRIGHT` property, so if you want to use the same
`COMPANY_COPYRIGHT` for several targets in a build tree, you can call
`set_directory_properties(PROPERTIES JUCE_COMPANY_COPYRIGHT ...)` after including JUCE but
before adding the targets, and then omit the `COMPANY_COPYRIGHT` argument when creating the
individual targets.
- `COMPANY_NAME`
- The name of this target's author. Will be added to the app/plugin's Info.plist, and may be used
to generate part of the `BUNDLE_ID` if no ID was given explicitly. The value of this argument
will be inherited from the `JUCE_COMPANY_NAME` property, so if you want to use the same
`COMPANY_NAME` for several targets in a build tree, you can call
`set_directory_properties(PROPERTIES JUCE_COMPANY_NAME ...)` after including JUCE but before
adding the targets, and then omit the `COMPANY_NAME` argument when creating the individual
targets.
- `COMPANY_WEBSITE`
- The address of a website related to this target in some way. The value of this argument will be
inherited from the `JUCE_COMPANY_WEBSITE` property, so if you want to use the same
`COMPANY_WEBSITE` for several targets in a build tree, you can call
`set_directory_properties(PROPERTIES JUCE_COMPANY_WEBSITE ...)` after including JUCE but before
adding the targets, and then omit the `COMPANY_WEBSITE` argument when creating the individual
targets.
- `COMPANY_EMAIL`
- An email address for this target's author. The value of this argument will be inherited from the
`JUCE_COMPANY_EMAIL` property, so if you want to use the same `COMPANY_EMAIL` for several
targets in a build tree, you can call `set_directory_properties(PROPERTIES JUCE_COMPANY_EMAIL
...)` after including JUCE but before adding the targets, and then omit the `COMPANY_EMAIL`
argument when creating the individual targets.
- `DOCUMENT_EXTENSIONS`
- File extensions that should be associated with this target. For example, the Projucer passes
the string `jucer` because it wants to open `.jucer` files. If your target has several different
document types, you can pass them as multiple arguments, e.g. `DOCUMENT_EXTENSIONS wav mp3 aif`.
- `NEEDS_CURL`
- On Linux, JUCE may or may not need to link to Curl depending on the compile definitions that are
set on a JUCE target. By default, we don't link Curl because you might not need it, but if you
get linker or include errors that reference Curl, just set this argument to `TRUE`.
- `NEEDS_WEB_BROWSER`
- On Linux, JUCE may or may not need to link to Webkit depending on the compile definitions that
are set on a JUCE target. By default, we don't link Webkit because you might not need it, but
if you get linker or include errors that reference Webkit, just set this argument to `TRUE`.
- `NEEDS_STORE_KIT`
- On macOS, JUCE may or may not need to link to StoreKit depending on the compile definitions that
are set on a JUCE target. By default, we don't link StoreKit because you might not need it, but
if you get linker or include errors that reference StoreKit, just set this argument to `TRUE`.
- `PUSH_NOTIFICATIONS_ENABLED`
- Sets app entitlements to allow push notifications. False by default.
- `NETWORK_MULTICAST_ENABLED`
- Sets app entitlements to allow IP multicast or broadcast on macOS/iOS. False by default.
- `HARDENED_RUNTIME_ENABLED`
- Enables macOS' hardened runtime for this target. Required for notarisation. False by default.
- `HARDENED_RUNTIME_OPTIONS`
- A set of space-separated entitlement keys that will be added to this target's entitlements
plist if `HARDENED_RUNTIME_ENABLED` is `TRUE`. Each key should be in the form
`com.apple.security.*` where `*` is a specific entitlement.
- `APP_SANDBOX_ENABLED`
- Enables macOS' app sandbox for this target. False by default.
- `APP_SANDBOX_INHERIT`
- Allows child processes to inherit the static entitlements of their parent process. If this
is set to `TRUE`, no other app sandbox entitlements will be set on this target.
- `APP_SANDBOX_OPTIONS`
- A set of space-separated entitlement keys that will be added to this target's entitlements
plist if `APP_SANDBOX_ENABLED` is `TRUE`. Each key should be in the form `com.apple.security.*`
where `*` is a specific entitlement.
- `PLIST_TO_MERGE`
- A string to insert into an app/plugin's Info.plist.
- `FORMATS`
- For plugin targets, specifies the plugin targets to build. Should be provided as a
space-separated list. Valid values are `Standalone Unity VST3 AU AUv3 AAX VST`. `AU` and `AUv3`
plugins will only be enabled when building on macOS. It is an error to pass `AAX` or `VST`
without first calling `juce_set_aax_sdk_path` or `juce_set_vst2_sdk_path` respectively.
- `PLUGIN_NAME`
- The name of the plugin. In a DAW environment, this is the name that will be displayed to the
user when they go to load a plugin. This name may differ from the name of the physical plugin
file (to set the name of the plugin file, use the `PRODUCT_NAME` option). If not specified,
the `PLUGIN_NAME` will default to match the `PRODUCT_NAME`.
- `PLUGIN_MANUFACTURER_CODE`
- A four-character unique ID for your company. For AU compatibility, this must contain at least
one upper-case letter. GarageBand 10.3 requires the first letter to be upper-case, and the
remaining letters to be lower-case.
- `PLUGIN_CODE`
- A four-character unique ID for your plugin. For AU compatibility, this must contain exactly one
upper-case letter. GarageBand 10.3 requires the first letter to be upper-case, and the remaining
letters to be lower-case.
- `DESCRIPTION`
- A short description of your plugin.
- `IS_SYNTH`
- Whether the plugin is a synth. Will be used to set sensible plugin category values if they
are not provided explicitly.
- `NEEDS_MIDI_INPUT`
- Whether the plugin should provide a midi input.
- `NEEDS_MIDI_OUTPUT`
- Whether the plugin should provide a midi output.
- `IS_MIDI_EFFECT`
- Whether the plugin is a MIDI effect (some hosts provide a special channel-strip location for
MIDI effect plugins).
- `EDITOR_WANTS_KEYBOARD_FOCUS`
- Whether the plugin requires keyboard focus, or should defer all keyboard handling to the host.
- `DISABLE_AAX_BYPASS`
- Whether the AAX bypass function should be disabled.
- `DISABLE_AAX_MULTI_MONO`
- Whether the AAX multi mono bus layout should be disabled.
- `AAX_IDENTIFIER`
- The bundle ID for the AAX plugin target. Matches the `BUNDLE_ID` by default.
- `VST_NUM_MIDI_INS`
- For VST2 and VST3 plugins that accept midi, this allows you to configure the number of inputs.
- `VST_NUM_MIDI_OUTS`
- For VST2 and VST3 plugins that produce midi, this allows you to configure the number of outputs.
- `VST2_CATEGORY`
- Should be one of: `kPlugCategUnknown`, `kPlugCategEffect`, `kPlugCategSynth`,
`kPlugCategAnalysis`, `kPlugCategMatering`, `kPlugCategSpacializer`, `kPlugCategRoomFx`,
`kPlugSurroundFx`, `kPlugCategRestoration`, `kPlugCategOfflineProcess`, `kPlugCategShell`,
`kPlugCategGenerator`.
- `VST3_CATEGORIES`
- Should be one or more, separated by spaces, of the following: `Fx`, `Instrument`, `Analyzer`,
`Delay`, `Distortion`, `Drum`, `Dynamics`, `EQ`, `External`, `Filter`, `Generator`, `Mastering`,
`Modulation`, `Mono`, `Network`, `NoOfflineProcess`, `OnlyOfflineProcess`, `OnlyRT`,
`Pitch Shift`, `Restoration`, `Reverb`, `Sampler`, `Spatial`, `Stereo`, `Surround`, `Synth`,
`Tools`, `Up-Downmix`
- `AU_MAIN_TYPE`
- Should be one of: `kAudioUnitType_Effect`, `kAudioUnitType_FormatConverter`,
`kAudioUnitType_Generator`, `kAudioUnitType_MIDIProcessor`, `kAudioUnitType_Mixer`,
`kAudioUnitType_MusicDevice`, `kAudioUnitType_MusicEffect`, `kAudioUnitType_OfflineEffect`,
`kAudioUnitType_Output`, `kAudioUnitType_Panner`
- `AU_EXPORT_PREFIX`
- A prefix for the names of entry-point functions that your component exposes. Typically this
will be a version of your plugin's name that can be used as part of a C++ token. Defaults
to your plugin's name with the suffix 'AU'.
- `AU_SANDBOX_SAFE`
- May be either TRUE or FALSE. Adds the appropriate entries to an AU plugin's Info.plist.
- `SUPPRESS_AU_PLIST_RESOURCE_USAGE`
- May be either TRUE or FALSE. Defaults to FALSE. Set this to TRUE to disable the `resourceUsage`
key in the target's plist. This is useful for AU plugins that must access resources which cannot
be declared in the resourceUsage block, such as UNIX domain sockets. In particular,
PACE-protected AU plugins may require this option to be enabled in order for the plugin to load
in GarageBand.
- `AAX_CATEGORY`
- Should be one or more of: `AAX_ePlugInCategory_None`, `AAX_ePlugInCategory_EQ`,
`AAX_ePlugInCategory_Dynamics`, `AAX_ePlugInCategory_PitchShift`, `AAX_ePlugInCategory_Reverb`,
`AAX_ePlugInCategory_Delay`, `AAX_ePlugInCategory_Modulation`, `AAX_ePlugInCategory_Harmonic`,
`AAX_ePlugInCategory_NoiseReduction`, `AAX_ePlugInCategory_Dither`,
`AAX_ePlugInCategory_SoundField`, `AAX_ePlugInCategory_HWGenerators`,
`AAX_ePlugInCategory_SWGenerators`, `AAX_ePlugInCategory_WrappedPlugin`,
`AAX_ePlugInCategory_Effect`
- `PLUGINHOST_AU`
- May be either TRUE or FALSE (defaults to FALSE). If TRUE, will add the preprocessor definition
`JUCE_PLUGINHOST_AU=1` to the new target, and will link the macOS frameworks necessary for
hosting plugins. Using this parameter should be preferred over using
`target_compile_definitions` to manually set the `JUCE_PLUGINHOST_AU` preprocessor definition.
- `USE_LEGACY_COMPATIBILITY_PLUGIN_CODE`
- May be either TRUE or FALSE (defaults to FALSE). If TRUE, will override the value of the
preprocessor definition "JucePlugin_ManufacturerCode" with the hex equivalent of "proj". This
option exists to maintain compatiblity with a previous, buggy version of JUCE's CMake support
which mishandled the manufacturer code property. Most projects should leave this option set to
its default value.
- `COPY_PLUGIN_AFTER_BUILD`
- Whether or not to install the plugin to the current system after building. False by default.
If you want all of the plugins in a subdirectory to be installed automatically after building,
you can set the property `JUCE_COPY_PLUGIN_AFTER_BUILD` on the directory before adding the
plugins, rather than setting this argument on each individual target. Note that on Windows,
the default install locations may not be writable by normal user accounts.
- `VST_COPY_DIR`
- The location to which VST2 (legacy) plugins will be copied after building if
`COPY_PLUGIN_AFTER_BUILD` is set on this target. If you want to install all of the VST2 plugins
in a subdirectory to a non-default location, you can set the `JUCE_VST_COPY_DIR` property on
the directory before adding the plugin targets, rather than setting this argument on each
individual target.
- `VST3_COPY_DIR`
- The location to which VST3 plugins will be copied after building if `COPY_PLUGIN_AFTER_BUILD`
is set on this target. If you want to install all of the VST3 plugins in a subdirectory to a
non-default location, you can set the `JUCE_VST3_COPY_DIR` property on the directory before
adding the plugin targets, rather than setting this argument on each individual target.
- `AAX_COPY_DIR`
- The location to which AAX plugins will be copied after building if `COPY_PLUGIN_AFTER_BUILD`
is set on this target. If you want to install all of the AAX plugins in a subdirectory to a
non-default location, you can set the `JUCE_AAX_COPY_DIR` property on the directory before
adding the plugin targets, rather than setting this argument on each individual target.
- `AU_COPY_DIR`
- The location to which AU plugins will be copied after building if `COPY_PLUGIN_AFTER_BUILD`
is set on this target. If you want to install all of the AU plugins in a subdirectory to a
non-default location, you can set the `JUCE_AU_COPY_DIR` property on the directory before
adding the plugin targets, rather than setting this argument on each individual target.
- `UNITY_COPY_DIR`
- The location to which Unity plugins will be copied after building if `COPY_PLUGIN_AFTER_BUILD`
is set on this target. If you want to install all of the Unity plugins in a subdirectory to a
non-default location, you can set the `JUCE_UNITY_COPY_DIR` property on the directory before
adding the plugin targets, rather than setting this argument on each individual target.
Unlike the other `COPY_DIR` arguments, this argument does not have a default value so be sure
to set it if you have enabled `COPY_PLUGIN_AFTER_BUILD` and the `Unity` format.
`BUILD_VERSION`
- A version number string in the format "major.minor.bugfix". If not specified, this will match
the `VERSION` of the target. On Apple platforms, this is the private version string used to
distinguish between App Store builds. This option corresponds to the `CFBundleVersion` field in
the target's plist.
`BUNDLE_ID`
- An identifier string in the form "com.yourcompany.productname" which should uniquely identify
this target. Mainly used for macOS builds. If not specified, a default will be generated using
the target's `COMPANY_NAME` and `PRODUCT_NAME`.
`MICROPHONE_PERMISSION_ENABLED`
- May be either TRUE or FALSE. Adds the appropriate entries to an app's Info.plist.
`MICROPHONE_PERMISSION_TEXT`
- The text your app will display when it requests microphone permissions.
`CAMERA_PERMISSION_ENABLED`
- May be either TRUE or FALSE. Adds the appropriate entries to an app's Info.plist.
`CAMERA_PERMISSION_TEXT`
- The text your app will display when it requests camera permissions.
`BLUETOOTH_PERMISSION_ENABLED`
- May be either TRUE or FALSE. Adds the appropriate entries to an app's Info.plist.
`BLUETOOTH_PERMISSION_TEXT`
- The text your app will display when it requests bluetooth permissions.
`SEND_APPLE_EVENTS_PERMISSION_ENABLED`
- May be either TRUE or FALSE. Enable this to allow your app to send Apple events.
`SEND_APPLE_EVENTS_PERMISSION_TEXT`
- The text your app will display when it requests permission to send Apple events.
`FILE_SHARING_ENABLED`
- May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's Info.plist.
`DOCUMENT_BROWSER_ENABLED`
- May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's Info.plist.
`STATUS_BAR_HIDDEN`
- May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's Info.plist.
`REQUIRES_FULL_SCREEN`
- May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's Info.plist.
`BACKGROUND_AUDIO_ENABLED`
- May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's Info.plist.
`BACKGROUND_BLE_ENABLED`
- May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's Info.plist.
`APP_GROUPS_ENABLED`
- May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's entitlements.
`APP_GROUP_IDS`
- The app groups to which your iOS app belongs. These will be added to your app's entitlements.
`ICLOUD_PERMISSIONS_ENABLED`
- May be either TRUE or FALSE. Adds the appropriate entries to an iOS app's entitlements.
`IPHONE_SCREEN_ORIENTATIONS`
- May be one or more of `UIInterfaceOrientationUnknown`, `UIInterfaceOrientationPortrait`,
`UIInterfaceOrientationPortraitUpsideDown`, `UIInterfaceOrientationLandscapeLeft`, or
`UIInterfaceOrientationLandscapeRight`. Adds appropriate entries to an iOS app's plist.
`IPAD_SCREEN_ORIENTATIONS`
- May be one or more of `UIInterfaceOrientationUnknown`, `UIInterfaceOrientationPortrait`,
`UIInterfaceOrientationPortraitUpsideDown`, `UIInterfaceOrientationLandscapeLeft`, or
`UIInterfaceOrientationLandscapeRight`. Adds appropriate entries to an iOS app's plist.
`LAUNCH_STORYBOARD_FILE`
- A custom launch storyboard file to use on iOS. If not supplied, a default storyboard will be
used. If this is specified, then this will take precedence over a LaunchImage inside a custom
xcassets directory.
`CUSTOM_XCASSETS_FOLDER`
- A path to an xcassets directory, containing icons and/or launch images for this target. If this
is specified, the ICON_BIG and ICON_SMALL arguments will not have an effect on iOS. LaunchImages
have been deprecated from iOS 13 onward, but if your xcassets folder contains a LaunchImage and
a custom storyboard hasn't been specified, then it will be used.
`TARGETED_DEVICE_FAMILY`
- Specifies the device families on which the product must be capable of running. Allowed values
are "1", "2", and "1,2"; these correspond to "iPhone/iPod touch", "iPad", and "iPhone/iPod and
iPad" respectively. This will default to "1,2", meaning that the target will target iPhone,
iPod, and iPad.
`ICON_BIG`, `ICON_SMALL`
- Paths to image files that will be used to generate app icons. If only one of these parameters
is specified, then that image will be used for all icon resolutions. If both arguments are
specified, then the appropriate image will be picked for each icon resolution.
`COMPANY_COPYRIGHT`
- Copyright text which will be added to the app/plugin's Info.plist. The value of this argument
will be inherited from the `JUCE_COMPANY_COPYRIGHT` property, so if you want to use the same
`COMPANY_COPYRIGHT` for several targets in a build tree, you can call
`set_directory_properties(PROPERTIES JUCE_COMPANY_COPYRIGHT ...)` after including JUCE but
before adding the targets, and then omit the `COMPANY_COPYRIGHT` argument when creating the
individual targets.
`COMPANY_NAME`
- The name of this target's author. Will be added to the app/plugin's Info.plist, and may be used
to generate part of the `BUNDLE_ID` if no ID was given explicitly. The value of this argument
will be inherited from the `JUCE_COMPANY_NAME` property, so if you want to use the same
`COMPANY_NAME` for several targets in a build tree, you can call
`set_directory_properties(PROPERTIES JUCE_COMPANY_NAME ...)` after including JUCE but before
adding the targets, and then omit the `COMPANY_NAME` argument when creating the individual
targets.
`COMPANY_WEBSITE`
- The address of a website related to this target in some way. The value of this argument will be
inherited from the `JUCE_COMPANY_WEBSITE` property, so if you want to use the same
`COMPANY_WEBSITE` for several targets in a build tree, you can call
`set_directory_properties(PROPERTIES JUCE_COMPANY_WEBSITE ...)` after including JUCE but before
adding the targets, and then omit the `COMPANY_WEBSITE` argument when creating the individual
targets.
`COMPANY_EMAIL`
- An email address for this target's author. The value of this argument will be inherited from the
`JUCE_COMPANY_EMAIL` property, so if you want to use the same `COMPANY_EMAIL` for several
targets in a build tree, you can call `set_directory_properties(PROPERTIES JUCE_COMPANY_EMAIL
...)` after including JUCE but before adding the targets, and then omit the `COMPANY_EMAIL`
argument when creating the individual targets.
`DOCUMENT_EXTENSIONS`
- File extensions that should be associated with this target. For example, the Projucer passes
the string `jucer` because it wants to open `.jucer` files. If your target has several different
document types, you can pass them as multiple arguments, e.g. `DOCUMENT_EXTENSIONS wav mp3 aif`.
`NEEDS_CURL`
- On Linux, JUCE may or may not need to link to Curl depending on the compile definitions that are
set on a JUCE target. By default, we don't link Curl because you might not need it, but if you
get linker or include errors that reference Curl, just set this argument to `TRUE`.
`NEEDS_WEB_BROWSER`
- On Linux, JUCE may or may not need to link to Webkit depending on the compile definitions that
are set on a JUCE target. By default, we don't link Webkit because you might not need it, but
if you get linker or include errors that reference Webkit, just set this argument to `TRUE`.
`NEEDS_STORE_KIT`
- On macOS, JUCE may or may not need to link to StoreKit depending on the compile definitions that
are set on a JUCE target. By default, we don't link StoreKit because you might not need it, but
if you get linker or include errors that reference StoreKit, just set this argument to `TRUE`.
`PUSH_NOTIFICATIONS_ENABLED`
- Sets app entitlements to allow push notifications. False by default.
`NETWORK_MULTICAST_ENABLED`
- Sets app entitlements to allow IP multicast or broadcast on macOS/iOS. False by default.
`HARDENED_RUNTIME_ENABLED`
- Enables macOS' hardened runtime for this target. Required for notarisation. False by default.
`HARDENED_RUNTIME_OPTIONS`
- A set of space-separated entitlement keys that will be added to this target's entitlements
plist if `HARDENED_RUNTIME_ENABLED` is `TRUE`. Each key should be in the form
`com.apple.security.*` where `*` is a specific entitlement.
`APP_SANDBOX_ENABLED`
- Enables macOS' app sandbox for this target. False by default.
`APP_SANDBOX_INHERIT`
- Allows child processes to inherit the static entitlements of their parent process. If this
is set to `TRUE`, no other app sandbox entitlements will be set on this target.
`APP_SANDBOX_OPTIONS`
- A set of space-separated entitlement keys that will be added to this target's entitlements
plist if `APP_SANDBOX_ENABLED` is `TRUE`. Each key should be in the form `com.apple.security.*`
where `*` is a specific entitlement.
`APP_SANDBOX_FILE_ACCESS_HOME_RO`
- A set of space-separated paths that will be added to this target's entitlements plist for
accessing read-only paths relative to the home directory if `APP_SANDBOX_ENABLED` is `TRUE`.
`APP_SANDBOX_FILE_ACCESS_HOME_RW`
- A set of space-separated paths that will be added to this target's entitlements plist for
accessing read/write paths relative to the home directory if `APP_SANDBOX_ENABLED` is `TRUE`.
`APP_SANDBOX_FILE_ACCESS_ABS_RO`
- A set of space-separated paths that will be added to this target's entitlements plist for
accessing read-only absolute paths if `APP_SANDBOX_ENABLED` is `TRUE`.
`APP_SANDBOX_FILE_ACCESS_ABS_RW`
- A set of space-separated paths that will be added to this target's entitlements plist for
accessing read/write absolute paths if `APP_SANDBOX_ENABLED` is `TRUE`.
`PLIST_TO_MERGE`
- A string to insert into an app/plugin's Info.plist.
`FORMATS`
- For plugin targets, specifies the plugin targets to build. Should be provided as a
space-separated list. Valid values are `Standalone Unity VST3 AU AUv3 AAX VST`. `AU` and `AUv3`
plugins will only be enabled when building on macOS. It is an error to pass `AAX` or `VST`
without first calling `juce_set_aax_sdk_path` or `juce_set_vst2_sdk_path` respectively.
`PLUGIN_NAME`
- The name of the plugin. In a DAW environment, this is the name that will be displayed to the
user when they go to load a plugin. This name may differ from the name of the physical plugin
file (to set the name of the plugin file, use the `PRODUCT_NAME` option). If not specified,
the `PLUGIN_NAME` will default to match the `PRODUCT_NAME`.
`PLUGIN_MANUFACTURER_CODE`
- A four-character unique ID for your company. For AU compatibility, this must contain at least
one upper-case letter. GarageBand 10.3 requires the first letter to be upper-case, and the
remaining letters to be lower-case.
`PLUGIN_CODE`
- A four-character unique ID for your plugin. For AU compatibility, this must contain exactly one
upper-case letter. GarageBand 10.3 requires the first letter to be upper-case, and the remaining
letters to be lower-case.
`DESCRIPTION`
- A short description of your plugin.
`IS_SYNTH`
- Whether the plugin is a synth. Will be used to set sensible plugin category values if they
are not provided explicitly.
`NEEDS_MIDI_INPUT`
- Whether the plugin should provide a midi input.
`NEEDS_MIDI_OUTPUT`
- Whether the plugin should provide a midi output.
`IS_MIDI_EFFECT`
- Whether the plugin is a MIDI effect (some hosts provide a special channel-strip location for
MIDI effect plugins).
`EDITOR_WANTS_KEYBOARD_FOCUS`
- Whether the plugin requires keyboard focus, or should defer all keyboard handling to the host.
`DISABLE_AAX_BYPASS`
- Whether the AAX bypass function should be disabled.
`DISABLE_AAX_MULTI_MONO`
- Whether the AAX multi mono bus layout should be disabled.
`AAX_IDENTIFIER`
- The bundle ID for the AAX plugin target. Matches the `BUNDLE_ID` by default.
`VST_NUM_MIDI_INS`
- For VST2 and VST3 plugins that accept midi, this allows you to configure the number of inputs.
`VST_NUM_MIDI_OUTS`
- For VST2 and VST3 plugins that produce midi, this allows you to configure the number of outputs.
`VST2_CATEGORY`
- Should be one of: `kPlugCategUnknown`, `kPlugCategEffect`, `kPlugCategSynth`,
`kPlugCategAnalysis`, `kPlugCategMatering`, `kPlugCategSpacializer`, `kPlugCategRoomFx`,
`kPlugSurroundFx`, `kPlugCategRestoration`, `kPlugCategOfflineProcess`, `kPlugCategShell`,
`kPlugCategGenerator`.
`VST3_CATEGORIES`
- Should be one or more, separated by spaces, of the following: `Fx`, `Instrument`, `Analyzer`,
`Delay`, `Distortion`, `Drum`, `Dynamics`, `EQ`, `External`, `Filter`, `Generator`, `Mastering`,
`Modulation`, `Mono`, `Network`, `NoOfflineProcess`, `OnlyOfflineProcess`, `OnlyRT`,
`Pitch Shift`, `Restoration`, `Reverb`, `Sampler`, `Spatial`, `Stereo`, `Surround`, `Synth`,
`Tools`, `Up-Downmix`
`AU_MAIN_TYPE`
- Should be one of: `kAudioUnitType_Effect`, `kAudioUnitType_FormatConverter`,
`kAudioUnitType_Generator`, `kAudioUnitType_MIDIProcessor`, `kAudioUnitType_Mixer`,
`kAudioUnitType_MusicDevice`, `kAudioUnitType_MusicEffect`, `kAudioUnitType_OfflineEffect`,
`kAudioUnitType_Output`, `kAudioUnitType_Panner`
`AU_EXPORT_PREFIX`
- A prefix for the names of entry-point functions that your component exposes. Typically this
will be a version of your plugin's name that can be used as part of a C++ token. Defaults
to your plugin's name with the suffix 'AU'.
`AU_SANDBOX_SAFE`
- May be either TRUE or FALSE. Adds the appropriate entries to an AU plugin's Info.plist.
`SUPPRESS_AU_PLIST_RESOURCE_USAGE`
- May be either TRUE or FALSE. Defaults to FALSE. Set this to TRUE to disable the `resourceUsage`
key in the target's plist. This is useful for AU plugins that must access resources which cannot
be declared in the resourceUsage block, such as UNIX domain sockets. In particular,
PACE-protected AU plugins may require this option to be enabled in order for the plugin to load
in GarageBand.
`AAX_CATEGORY`
- Should be one or more of: `AAX_ePlugInCategory_None`, `AAX_ePlugInCategory_EQ`,
`AAX_ePlugInCategory_Dynamics`, `AAX_ePlugInCategory_PitchShift`, `AAX_ePlugInCategory_Reverb`,
`AAX_ePlugInCategory_Delay`, `AAX_ePlugInCategory_Modulation`, `AAX_ePlugInCategory_Harmonic`,
`AAX_ePlugInCategory_NoiseReduction`, `AAX_ePlugInCategory_Dither`,
`AAX_ePlugInCategory_SoundField`, `AAX_ePlugInCategory_HWGenerators`,
`AAX_ePlugInCategory_SWGenerators`, `AAX_ePlugInCategory_WrappedPlugin`,
`AAX_EPlugInCategory_Effect`
`PLUGINHOST_AU`
- May be either TRUE or FALSE (defaults to FALSE). If TRUE, will add the preprocessor definition
`JUCE_PLUGINHOST_AU=1` to the new target, and will link the macOS frameworks necessary for
hosting plugins. Using this parameter should be preferred over using
`target_compile_definitions` to manually set the `JUCE_PLUGINHOST_AU` preprocessor definition.
`USE_LEGACY_COMPATIBILITY_PLUGIN_CODE`
- May be either TRUE or FALSE (defaults to FALSE). If TRUE, will override the value of the
preprocessor definition "JucePlugin_ManufacturerCode" with the hex equivalent of "proj". This
option exists to maintain compatibility with a previous, buggy version of JUCE's CMake support
which mishandled the manufacturer code property. Most projects should leave this option set to
its default value.
`COPY_PLUGIN_AFTER_BUILD`
- Whether or not to install the plugin to the current system after building. False by default.
If you want all of the plugins in a subdirectory to be installed automatically after building,
you can set the property `JUCE_COPY_PLUGIN_AFTER_BUILD` on the directory before adding the
plugins, rather than setting this argument on each individual target. Note that on Windows,
the default install locations may not be writable by normal user accounts.
`VST_COPY_DIR`
- The location to which VST2 (legacy) plugins will be copied after building if
`COPY_PLUGIN_AFTER_BUILD` is set on this target. If you want to install all of the VST2 plugins
in a subdirectory to a non-default location, you can set the `JUCE_VST_COPY_DIR` property on
the directory before adding the plugin targets, rather than setting this argument on each
individual target.
`VST3_COPY_DIR`
- The location to which VST3 plugins will be copied after building if `COPY_PLUGIN_AFTER_BUILD`
is set on this target. If you want to install all of the VST3 plugins in a subdirectory to a
non-default location, you can set the `JUCE_VST3_COPY_DIR` property on the directory before
adding the plugin targets, rather than setting this argument on each individual target.
`AAX_COPY_DIR`
- The location to which AAX plugins will be copied after building if `COPY_PLUGIN_AFTER_BUILD`
is set on this target. If you want to install all of the AAX plugins in a subdirectory to a
non-default location, you can set the `JUCE_AAX_COPY_DIR` property on the directory before
adding the plugin targets, rather than setting this argument on each individual target.
`AU_COPY_DIR`
- The location to which AU plugins will be copied after building if `COPY_PLUGIN_AFTER_BUILD`
is set on this target. If you want to install all of the AU plugins in a subdirectory to a
non-default location, you can set the `JUCE_AU_COPY_DIR` property on the directory before
adding the plugin targets, rather than setting this argument on each individual target.
`UNITY_COPY_DIR`
- The location to which Unity plugins will be copied after building if `COPY_PLUGIN_AFTER_BUILD`
is set on this target. If you want to install all of the Unity plugins in a subdirectory to a
non-default location, you can set the `JUCE_UNITY_COPY_DIR` property on the directory before
adding the plugin targets, rather than setting this argument on each individual target.
Unlike the other `COPY_DIR` arguments, this argument does not have a default value so be sure
to set it if you have enabled `COPY_PLUGIN_AFTER_BUILD` and the `Unity` format.
`IS_ARA_EFFECT`
- May be either TRUE or FALSE (defaults to FALSE). If TRUE it enables additional codepaths in the
VST3 and AU plugin wrappers allowing compatible hosts to load the plugin with additional ARA
functionality. It will also add the preprocessor definition `JucePlugin_Enable_ARA=1`, which can
be used in preprocessor conditions inside the plugin code. You should not add this definition
using `target_compile_definitions` manually.
`ARA_FACTORY_ID`
- A globally unique and versioned identifier string. If not provided a sensible default will be
generated using the `BUNDLE_ID` and `VERSION` values. The version must be updated if e.g. the
plugin's (compatible) document archive ID(s) or its analysis or playback transformation
capabilities change.
`ARA_DOCUMENT_ARCHIVE_ID`
- Identifier string for document archives created by the document controller. This ID must be
globally unique and is shared only amongst document controllers that create the same archives and
produce the same render results based upon the same input data. This means that the ID must be
updated if the archive format changes in any way that is no longer downwards compatible. If not
provided a version independent default will be created that is only appropriate as long as the
format remains unchanged.
`ARA_ANALYSIS_TYPES`
- Defaults to having no analyzable types. Should be one or more of the following values if the
document controller has the corresponding analysis capability: `kARAContentTypeNotes`,
`kARAContentTypeTempoEntries`, `kARAContentTypeBarSignatures`, `kARAContentTypeStaticTuning `,
`kARAContentTypeKeySignatures`, `kARAContentTypeSheetChords`
`ARA_TRANSFORMATION_FLAGS`
- Defaults to `kARAPlaybackTransformationNoChanges`. If the document controller has the ability to
provide the corresponding change it should be one or more of:
`kARAPlaybackTransformationTimestretch`, `kARAPlaybackTransformationTimestretchReflectingTempo`,
`kARAPlaybackTransformationContentBasedFadeAtTail`,
`kARAPlaybackTransformationContentBasedFadeAtHead`
#### `juce_add_binary_data`
@ -644,10 +700,11 @@ target!).
juce_set_aax_sdk_path(<absolute path>)
juce_set_vst2_sdk_path(<absolute path>)
juce_set_vst3_sdk_path(<absolute path>)
juce_set_ara_sdk_path(<absolute path>)
Call these functions from your CMakeLists to set up your local AAX, VST2, and VST3 SDKs. These
functions should be called *before* adding any targets that may depend on the AAX/VST2/VST3 SDKs
(plugin hosts, AAX/VST2/VST3 plugins etc.).
Call these functions from your CMakeLists to set up your local AAX, VST2, VST3 and ARA SDKs. These
functions should be called *before* adding any targets that may depend on the AAX/VST2/VST3/ARA SDKs
(plugin hosts, AAX/VST2/VST3/ARA plugins etc.).
#### `juce_add_module`

View File

@ -17,7 +17,7 @@ JUCE convention for naming modules is lower-case with underscores, e.g.
juce_events
juce_graphics
But any name that is a valid C++ identifer is OK.
But any name that is a valid C++ identifier is OK.
Inside the root of this folder, there must be a set of public header and source files which
the user's' project will include. The module may have as many other internal source files as
@ -185,11 +185,18 @@ Possible values:
parent folder, which need to be added to a project's header search path
- OSXFrameworks
- (Optional) A list (space or comma-separated) of OSX frameworks that are needed
- (Optional) A list (space or comma-separated) of OSX frameworks that are needed by this module
- WeakOSXFrameworks
- (Optional) A list (space or comma-separated) of weak linked OSX frameworks that are needed
by this module
- iOSFrameworks
- (Optional) Like OSXFrameworks, but for iOS targets
- (Optional) A list (space or comma-separated) of iOS frameworks that are needed by this module
- WeakiOSFrameworks
- (Optional) A list (space or comma-separated) of weak linked iOS frameworks that are needed
by this module
- linuxPackages
- (Optional) A list (space or comma-separated) pkg-config packages that should be used to pass

View File

@ -6,7 +6,7 @@ flag used to disable it is noted.
This has been tested on Ubuntu 16.04 LTS (Xenial Xerus), 18.04 LTS (Bionic
Beaver), and 20.04 LTS (Focal Fossa). Packages may differ in name or not be
available on other distrubutions.
available on other distributions.
## Compiler
A C++ compiler is required. JUCE has been tested thoroughly with Clang and GCC:

View File

@ -802,8 +802,8 @@ WARN_LOGFILE =
# Note: If this tag is empty the current directory is searched.
INPUT = build \
"../JUCE Module Format.md" \
"../CMake API.md"
"build/JUCE Module Format.md" \
"build/CMake API.md"
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses

View File

@ -173,3 +173,8 @@ if __name__ == "__main__":
# Create an extra header file containing the module hierarchy.
with open(os.path.join(args.dest_dir, "juce_modules.dox"), "w") as f:
f.write("\r\n\r\n".join(module_definitions))
# Copy markdown docs
for name in ["JUCE Module Format.md", "CMake API.md"]:
shutil.copyfile(os.path.join(args.source_dir, "..", "docs", name),
os.path.join(args.dest_dir, name))