diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c1dd648..57369d4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -202,6 +202,13 @@ jobs: - name: Build macOS (packaging) if: steps.cache.outputs.cache-hit == 'true' shell: bash + env: + MACOS_APP_CERTIFICATE: ${{ secrets.MACOS_APP_CERTIFICATE }} + MACOS_INSTALLER_CERTIFICATE: ${{ secrets.MACOS_INSTALLER_CERTIFICATE }} + MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }} + MACOS_NOTARIZATION_USER: ${{ secrets.MACOS_NOTARIZATION_USER }} + MACOS_NOTARIZATION_PASS: ${{ secrets.MACOS_NOTARIZATION_PASS }} + MACOS_NOTARIZATION_TEAM: ${{ secrets.MACOS_NOTARIZATION_TEAM }} run: | source deps/PawPaw/local.env macos-universal-10.15 ./utils/create-macos-installer.sh diff --git a/docs/CARDINAL-MODULES.md b/docs/CARDINAL-MODULES.md index cfc231e..cd97036 100644 --- a/docs/CARDINAL-MODULES.md +++ b/docs/CARDINAL-MODULES.md @@ -194,7 +194,7 @@ The meaning of the outputs is: - Step: Trigger for step change - Bar Phase: 0-10v smooth ramp for the bar position (with bar division being a right-click option) - Beat Phase: 0-10v smooth ramp for the beat position -- BPM: Volts per Beat per Second, as supported by Impromptu Clocked/Clkd and ZZC Clock +- BPM: Beats per minute in [Rack standard](https://vcvrack.com/manual/VoltageStandards#Pitch-and-Frequencies), supported by Impromptu Clocked/Clkd and ZZC Clock ## Extra modules diff --git a/docs/DIFFERENCES.md b/docs/DIFFERENCES.md index adbc4b8..539f637 100644 --- a/docs/DIFFERENCES.md +++ b/docs/DIFFERENCES.md @@ -10,7 +10,7 @@ Also, the official plugin works pretty much like the free standalone where you l This is intentionally not allowed/enabled in Cardinal, as the target is to make a self-contained plugin binary. Online access is also not allowed. -Bellow follows a list of features comparing the official plugin to Cardinal. +Below follows a list of features comparing the official plugin to Cardinal. | Feature | Rack Pro | Cardinal | Additional notes | |--------------------------------|---------------------------|---------------------------------|------------------| @@ -36,7 +36,7 @@ Bellow follows a list of features comparing the official plugin to Cardinal. | FX plugin variant | 16 ins, 16 outs | 2 ins, 2 outs | | | Raw-CV plugin variant | Unsupported | 8 audio IO + 10 CV IO | Available in JACK, LV2 and VST3 formats, not possible in AU and VST2 | | Arbitrary parameter automation | Yes | No (*) | Static 24 automatable params, use Host Params/Map modules to map them to module parameters | -| Integrated plugin host | No, Host payed separately | Yes, using Carla or Ildaeil | | +| Integrated plugin host | No, Host paid separately | Yes, using Carla or Ildaeil | | | Host sync/timing | Using MIDI signals | Using dedicated module | | | Linux/X11 event handling | Runs on 2nd thread | Runs on main/GUI thread | | | v1 module compatibility | No | No, but with less restrictions | Module widgets can load resources at any point | diff --git a/docs/LICENSES.md b/docs/LICENSES.md index b659fa7..1a024a2 100644 --- a/docs/LICENSES.md +++ b/docs/LICENSES.md @@ -99,7 +99,7 @@ Below follows a list of all code licenses used in Cardinal and linked submodules ## ARTWORK / PANEL LICENSES -Bellow follows a list of all licenses related to **artwork and module panels**, sorted by file name. +Below follows a list of all licenses related to **artwork and module panels**, sorted by file name. Licenses were retrieved from the official project's LICENSE, README or related files. When * is used, it is meant as wildcard of all files, with potential exceptions mentioned afterwards. When a license is uncertain, ??? is used. diff --git a/docs/OVERVIEW.md b/docs/OVERVIEW.md index f1a702f..69d1c45 100644 --- a/docs/OVERVIEW.md +++ b/docs/OVERVIEW.md @@ -45,7 +45,7 @@ Implementing new plugin formats will be done here. This directory contains special header files needed to build the original Rack code as required by Cardinal. These headers are included before the official Rack ones, allowing us to override some implementation details. -Additionally a few compatiblity headers are present, helping compile the code for more targets than officially supported in Rack. +Additionally a few compatibility headers are present, helping compile the code for more targets than officially supported in Rack. ## lv2export diff --git a/dpf b/dpf index d38701a..5b32b1c 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit d38701abff789f44f2f483a6360416a9adbcc8f9 +Subproject commit 5b32b1cac430e3038319e46c9e10f459e95ca598 diff --git a/patches/examples/SpotlightKid_-_Cringe-Synth.vcv b/patches/examples/SpotlightKid_-_Cringe-Synth.vcv new file mode 100644 index 0000000..fa5a0d6 --- /dev/null +++ b/patches/examples/SpotlightKid_-_Cringe-Synth.vcv @@ -0,0 +1,2114 @@ +{ + "version": "2.4.1", + "path": "SpotlightKid_-_Cringe-Synth.vcv", + "zoom": 1.0, + "gridOffset": [ + 2.798046827316284, + -0.03702713921666145 + ], + "modules": [ + { + "id": 2799203590388841, + "plugin": "Cardinal", + "model": "TextEditor", + "version": "2.0", + "params": [], + "leftModuleId": 7835847246020659, + "data": { + "filepath": "", + "lang": "None", + "etext": "# Cringe - A polyphonic macro-ocillator Synth\n\n(inspired by \"Arturia Minifreak\" and\n\"Behringer Grind\")\n\n* Surge XT Twist macro oscillator\n (based on \"Mutable Instruments Plaits\")\n* Macro oscillator into Surge XT filter,\n into Surge XT EG/VCA\n* Chorus, delay and reverb\n* Notes can be triggered via MIDI.\n* Modwheel controls vibrato.\n* MIDI CCs are mapped to the most important\n parameters:\n \n * Oszillator params 1-4\n * Filter cutoff, resonance, drive, env amount\n * Envelope attack, decay, sustain, release\n\n\n\n\n", + "width": 27 + }, + "pos": [ + 76, + 0 + ] + }, + { + "id": 6686738058731514, + "plugin": "SurgeXTRack", + "model": "SurgeXTQuadLFO", + "version": "2.0", + "params": [ + { + "value": 0.5813294649124146, + "id": 0 + }, + { + "value": 0.38461539149284363, + "id": 1 + }, + { + "value": 0.38461539149284363, + "id": 2 + }, + { + "value": 0.38461539149284363, + "id": 3 + }, + { + "value": 0.0, + "id": 4 + }, + { + "value": 0.0, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + }, + { + "value": 0.0, + "id": 7 + }, + { + "value": 0.0, + "id": 8 + }, + { + "value": 0.0, + "id": 9 + }, + { + "value": 0.0, + "id": 10 + }, + { + "value": 0.0, + "id": 11 + }, + { + "value": 1.0, + "id": 12 + }, + { + "value": 1.0, + "id": 13 + }, + { + "value": 1.0, + "id": 14 + }, + { + "value": 1.0, + "id": 15 + }, + { + "value": 0.0, + "id": 16 + }, + { + "value": 0.0, + "id": 17 + }, + { + "value": 0.0, + "id": 18 + }, + { + "value": 0.0, + "id": 19 + }, + { + "value": 0.0, + "id": 20 + }, + { + "value": 0.0, + "id": 21 + }, + { + "value": 0.0, + "id": 22 + }, + { + "value": 0.0, + "id": 23 + }, + { + "value": 0.0, + "id": 24 + }, + { + "value": 0.0, + "id": 25 + }, + { + "value": 0.0, + "id": 26 + }, + { + "value": 0.0, + "id": 27 + }, + { + "value": 0.0, + "id": 28 + }, + { + "value": 0.0, + "id": 29 + }, + { + "value": 0.0, + "id": 30 + }, + { + "value": 0.0, + "id": 31 + }, + { + "value": 0.0, + "id": 32 + }, + { + "value": 0.0, + "id": 33 + }, + { + "value": 0.0, + "id": 34 + }, + { + "value": 0.0, + "id": 35 + }, + { + "value": 0.0, + "id": 36 + }, + { + "value": 0.0, + "id": 37 + }, + { + "value": 0.0, + "id": 38 + }, + { + "value": 0.0, + "id": 39 + }, + { + "value": 0.0, + "id": 40 + }, + { + "value": 0.0, + "id": 41 + }, + { + "value": 0.0, + "id": 42 + }, + { + "value": 0.0, + "id": 43 + }, + { + "value": 0.0, + "id": 44 + }, + { + "value": 0.0, + "id": 45 + }, + { + "value": 0.0, + "id": 46 + }, + { + "value": 0.0, + "id": 47 + }, + { + "value": 0.0, + "id": 48 + } + ], + "data": { + "xtshared": { + "streamingVersion": 1, + "buildInfo": "os:linux surge:git-no-commit buildtime=Jun 27 2025 10:36:53", + "isCoupledToGlobalStyle": true, + "localStyle": 10001, + "localDisplayRegionColor": 900001, + "localModulationColor": 900005, + "localControlValueColor": 900001, + "localPowerButtonColor": 900003 + }, + "modulespecific": { + "clockStyle": 0, + "forcePolyphony": -1 + } + }, + "pos": [ + 40, + 1 + ] + }, + { + "id": 2284558036713263, + "plugin": "Befaco", + "model": "Atte", + "version": "2.0", + "params": [ + { + "value": 1.2077964584022993e-7, + "id": 0 + }, + { + "value": 0.5275605320930481, + "id": 1 + }, + { + "value": 1.0, + "id": 2 + }, + { + "value": 1.0, + "id": 3 + }, + { + "value": 1.0, + "id": 4 + }, + { + "value": 1.0, + "id": 5 + }, + { + "value": 1.0, + "id": 6 + }, + { + "value": 1.0, + "id": 7 + } + ], + "data": { + "normalledVoltageIdx": 2 + }, + "pos": [ + 28, + 1 + ] + }, + { + "id": 3851544056860100, + "plugin": "SurgeXTRack", + "model": "SurgeXTOSCTwist", + "version": "2.0", + "params": [ + { + "value": -2.0, + "id": 0 + }, + { + "value": 0.004999999888241291, + "id": 1 + }, + { + "value": 0.7480300068855286, + "id": 2 + }, + { + "value": 0.28346529603004456, + "id": 3 + }, + { + "value": 0.7244109511375427, + "id": 4 + }, + { + "value": 1.1943727429297724e-7, + "id": 5 + }, + { + "value": 1.0, + "id": 6 + }, + { + "value": 0.693000078201294, + "id": 7 + }, + { + "value": 0.012000009417533875, + "id": 8 + }, + { + "value": 0.0, + "id": 9 + }, + { + "value": 0.0, + "id": 10 + }, + { + "value": 0.0, + "id": 11 + }, + { + "value": 0.0, + "id": 12 + }, + { + "value": 0.0, + "id": 13 + }, + { + "value": 0.0, + "id": 14 + }, + { + "value": 0.0, + "id": 15 + }, + { + "value": 0.0, + "id": 16 + }, + { + "value": 0.0, + "id": 17 + }, + { + "value": 0.0, + "id": 18 + }, + { + "value": 0.0, + "id": 19 + }, + { + "value": 0.0, + "id": 20 + }, + { + "value": 0.0, + "id": 21 + }, + { + "value": 0.0, + "id": 22 + }, + { + "value": 0.0, + "id": 23 + }, + { + "value": 0.0, + "id": 24 + }, + { + "value": 0.0, + "id": 25 + }, + { + "value": 0.0, + "id": 26 + }, + { + "value": 0.0, + "id": 27 + }, + { + "value": 0.0, + "id": 28 + }, + { + "value": 0.0, + "id": 29 + }, + { + "value": 0.0, + "id": 30 + }, + { + "value": 0.0, + "id": 31 + }, + { + "value": 0.0, + "id": 32 + }, + { + "value": 0.0, + "id": 33 + }, + { + "value": 0.0, + "id": 34 + }, + { + "value": 0.0, + "id": 35 + }, + { + "value": 0.0, + "id": 36 + }, + { + "value": 0.0, + "id": 37 + }, + { + "value": 0.0, + "id": 38 + }, + { + "value": 0.0, + "id": 39 + }, + { + "value": 0.0, + "id": 40 + }, + { + "value": 1.0, + "id": 41 + }, + { + "value": 0.0, + "id": 42 + }, + { + "value": 0.0, + "id": 43 + }, + { + "value": 0.0, + "id": 44 + }, + { + "value": 0.0, + "id": 45 + }, + { + "value": 0.0, + "id": 46 + }, + { + "value": 0.0, + "id": 47 + }, + { + "value": 1.0, + "id": 48 + }, + { + "value": 0.0, + "id": 49 + }, + { + "value": 1.0, + "id": 50 + } + ], + "rightModuleId": 8399478428125930, + "data": { + "xtshared": { + "streamingVersion": 1, + "buildInfo": "os:linux surge:git-no-commit buildtime=Jun 27 2025 10:36:53", + "isCoupledToGlobalStyle": true, + "localStyle": 10001, + "localDisplayRegionColor": 900001, + "localModulationColor": 900005, + "localControlValueColor": 900001, + "localPowerButtonColor": 900003 + }, + "modulespecific": { + "paramNatural": [ + { + "index": 0, + "valtype": 0, + "val_i": 0 + }, + { + "index": 1, + "valtype": 2, + "val_f": 0.49606001377105713 + }, + { + "index": 2, + "valtype": 2, + "val_f": -0.4330694079399109 + }, + { + "index": 3, + "valtype": 2, + "val_f": 0.44882190227508545 + }, + { + "index": 4, + "valtype": 2, + "val_f": -0.9999997615814209 + }, + { + "index": 5, + "valtype": 2, + "val_f": 1.0 + }, + { + "index": 6, + "valtype": 2, + "val_f": 0.693000078201294 + } + ], + "halfbandM": 6, + "halfbandSteep": true, + "doDCBlock": true, + "displayPolyChannel": 0 + } + }, + "pos": [ + 4, + 0 + ] + }, + { + "id": 8399478428125930, + "plugin": "SurgeXTRack", + "model": "SurgeXTVCF", + "version": "2.0", + "params": [ + { + "value": -0.8504011631011963, + "id": 0 + }, + { + "value": 0.015748150646686554, + "id": 1 + }, + { + "value": 1.2440974712371826, + "id": 2 + }, + { + "value": 1.0, + "id": 3 + }, + { + "value": 1.0, + "id": 4 + }, + { + "value": 0.9380000829696655, + "id": 5 + }, + { + "value": 0.0, + "id": 6 + }, + { + "value": 0.0, + "id": 7 + }, + { + "value": 0.0, + "id": 8 + }, + { + "value": 0.0, + "id": 9 + }, + { + "value": 0.0, + "id": 10 + }, + { + "value": 0.0, + "id": 11 + }, + { + "value": 0.0, + "id": 12 + }, + { + "value": 0.0, + "id": 13 + }, + { + "value": 0.0, + "id": 14 + }, + { + "value": 0.0, + "id": 15 + }, + { + "value": 0.0, + "id": 16 + }, + { + "value": 0.0, + "id": 17 + }, + { + "value": 0.0, + "id": 18 + }, + { + "value": 0.0, + "id": 19 + }, + { + "value": 0.0, + "id": 20 + }, + { + "value": 0.0, + "id": 21 + }, + { + "value": 0.0, + "id": 22 + }, + { + "value": 0.0, + "id": 23 + }, + { + "value": 0.0, + "id": 24 + }, + { + "value": 2.0, + "id": 25 + }, + { + "value": 0.0, + "id": 26 + } + ], + "leftModuleId": 3851544056860100, + "rightModuleId": 2029604380744860, + "data": { + "xtshared": { + "streamingVersion": 1, + "buildInfo": "os:linux surge:git-no-commit buildtime=Jun 27 2025 10:36:53", + "isCoupledToGlobalStyle": true, + "localStyle": 10001, + "localDisplayRegionColor": 900001, + "localModulationColor": 900005, + "localControlValueColor": 900001, + "localPowerButtonColor": 900003 + }, + "modulespecific": { + "displayPolyChannel": 0 + } + }, + "pos": [ + 16, + 0 + ] + }, + { + "id": 2029604380744860, + "plugin": "SurgeXTRack", + "model": "SurgeXTEGxVCA", + "version": "2.0", + "params": [ + { + "value": 1.0025711059570312, + "id": 0 + }, + { + "value": 0.0, + "id": 1 + }, + { + "value": 0.0, + "id": 2 + }, + { + "value": 1.200857013827772e-7, + "id": 3 + }, + { + "value": 0.6141747236251831, + "id": 4 + }, + { + "value": 1.1983998149389663e-7, + "id": 5 + }, + { + "value": 0.4803157150745392, + "id": 6 + }, + { + "value": 1.0, + "id": 7 + }, + { + "value": 1.0, + "id": 8 + }, + { + "value": 1.0, + "id": 9 + }, + { + "value": 1.0, + "id": 10 + }, + { + "value": 0.0, + "id": 11 + }, + { + "value": 0.0, + "id": 12 + }, + { + "value": 0.0, + "id": 13 + }, + { + "value": 0.0, + "id": 14 + }, + { + "value": 0.0, + "id": 15 + }, + { + "value": 0.0, + "id": 16 + }, + { + "value": 0.0, + "id": 17 + }, + { + "value": 0.0, + "id": 18 + }, + { + "value": 0.0, + "id": 19 + }, + { + "value": 0.0, + "id": 20 + }, + { + "value": 0.0, + "id": 21 + }, + { + "value": 0.0, + "id": 22 + }, + { + "value": 0.0, + "id": 23 + }, + { + "value": 0.0, + "id": 24 + }, + { + "value": 0.0, + "id": 25 + }, + { + "value": 0.0, + "id": 26 + }, + { + "value": 0.0, + "id": 27 + }, + { + "value": 0.0, + "id": 28 + }, + { + "value": 0.0, + "id": 29 + }, + { + "value": 0.0, + "id": 30 + }, + { + "value": 0.0, + "id": 31 + }, + { + "value": 0.0, + "id": 32 + }, + { + "value": 0.0, + "id": 33 + }, + { + "value": 0.0, + "id": 34 + }, + { + "value": 0.0, + "id": 35 + }, + { + "value": 0.0, + "id": 36 + }, + { + "value": 0.0, + "id": 37 + }, + { + "value": 0.0, + "id": 38 + }, + { + "value": 0.0, + "id": 39 + }, + { + "value": 0.0, + "id": 40 + }, + { + "value": 0.0, + "id": 41 + }, + { + "value": 0.0, + "id": 42 + }, + { + "value": 0.0, + "id": 43 + } + ], + "leftModuleId": 8399478428125930, + "rightModuleId": 5435983300881264, + "data": { + "xtshared": { + "streamingVersion": 1, + "buildInfo": "os:linux surge:git-no-commit buildtime=Jun 27 2025 10:36:53", + "isCoupledToGlobalStyle": true, + "localStyle": 10001, + "localDisplayRegionColor": 900001, + "localModulationColor": 900005, + "localControlValueColor": 900001, + "localPowerButtonColor": 900003 + }, + "modulespecific": { + "clockStyle": 0 + } + }, + "pos": [ + 28, + 0 + ] + }, + { + "id": 5435983300881264, + "plugin": "SurgeXTRack", + "model": "SurgeXTFXChorus", + "version": "2.0", + "params": [ + { + "value": 0.5607175230979919, + "id": 0 + }, + { + "value": 0.5821687579154968, + "id": 1 + }, + { + "value": 0.05000000074505806, + "id": 2 + }, + { + "value": 0.07999999821186066, + "id": 3 + }, + { + "value": 0.2769230902194977, + "id": 4 + }, + { + "value": 1.0, + "id": 5 + }, + { + "value": 0.08871415257453918, + "id": 6 + }, + { + "value": 1.0, + "id": 7 + }, + { + "value": 0.0, + "id": 8 + }, + { + "value": 0.0, + "id": 9 + }, + { + "value": 0.0, + "id": 10 + }, + { + "value": 0.0, + "id": 11 + }, + { + "value": 0.0, + "id": 12 + }, + { + "value": 0.0, + "id": 13 + }, + { + "value": 0.0, + "id": 14 + }, + { + "value": 0.0, + "id": 15 + }, + { + "value": 0.0, + "id": 16 + }, + { + "value": 0.0, + "id": 17 + }, + { + "value": 0.0, + "id": 18 + }, + { + "value": 0.0, + "id": 19 + }, + { + "value": 0.0, + "id": 20 + }, + { + "value": 0.0, + "id": 21 + }, + { + "value": 0.0, + "id": 22 + }, + { + "value": 0.0, + "id": 23 + }, + { + "value": 0.0, + "id": 24 + }, + { + "value": 0.0, + "id": 25 + }, + { + "value": 0.0, + "id": 26 + }, + { + "value": 0.0, + "id": 27 + }, + { + "value": 0.0, + "id": 28 + }, + { + "value": 0.0, + "id": 29 + }, + { + "value": 0.0, + "id": 30 + }, + { + "value": 0.0, + "id": 31 + }, + { + "value": 0.0, + "id": 32 + }, + { + "value": 0.0, + "id": 33 + }, + { + "value": 0.0, + "id": 34 + }, + { + "value": 0.0, + "id": 35 + }, + { + "value": 0.0, + "id": 36 + }, + { + "value": 0.0, + "id": 37 + }, + { + "value": 0.0, + "id": 38 + }, + { + "value": 0.0, + "id": 39 + }, + { + "value": 0.0, + "id": 40 + }, + { + "value": 0.0, + "id": 41 + }, + { + "value": 0.0, + "id": 42 + }, + { + "value": 0.0, + "id": 43 + }, + { + "value": 0.0, + "id": 44 + }, + { + "value": 0.0, + "id": 45 + }, + { + "value": 0.0, + "id": 46 + }, + { + "value": 0.0, + "id": 47 + }, + { + "value": 0.0, + "id": 48 + }, + { + "value": 0.0, + "id": 49 + }, + { + "value": 0.0, + "id": 50 + }, + { + "value": 0.0, + "id": 51 + }, + { + "value": 0.0, + "id": 52 + }, + { + "value": 0.0, + "id": 53 + }, + { + "value": 0.0, + "id": 54 + }, + { + "value": 0.0, + "id": 55 + }, + { + "value": 0.0, + "id": 56 + }, + { + "value": 0.0, + "id": 57 + }, + { + "value": 0.0, + "id": 58 + }, + { + "value": 0.0, + "id": 59 + }, + { + "value": 1.0, + "id": 60 + }, + { + "value": 1.0, + "id": 61 + } + ], + "leftModuleId": 2029604380744860, + "rightModuleId": 4677901538619524, + "data": { + "xtshared": { + "streamingVersion": 1, + "buildInfo": "os:linux surge:git-no-commit buildtime=Jun 27 2025 10:36:53", + "isCoupledToGlobalStyle": true, + "localStyle": 10001, + "localDisplayRegionColor": 900001, + "localModulationColor": 900005, + "localControlValueColor": 900001, + "localPowerButtonColor": 900003 + }, + "modulespecific": { + "loadedPreset": 11, + "presetName": "Soft", + "presetIsDirty": true, + "clockStyle": 0, + "polyphonicMode": false, + "paramNatural": [ + { + "index": 0, + "valtype": 2, + "val_f": -6.5142598152160645 + }, + { + "index": 1, + "valtype": 2, + "val_f": 2.314700126647949 + }, + { + "index": 2, + "valtype": 2, + "val_f": 0.05000000074505806 + }, + { + "index": 3, + "valtype": 2, + "val_f": 0.07999999821186066 + }, + { + "index": 4, + "valtype": 2, + "val_f": -24.0 + }, + { + "index": 5, + "valtype": 2, + "val_f": 70.0 + }, + { + "index": 6, + "valtype": 2, + "val_f": 0.08871415257453918 + }, + { + "index": 7, + "valtype": 2, + "val_f": 24.0 + }, + { + "index": 8, + "valtype": 0, + "val_i": 0 + }, + { + "index": 9, + "valtype": 0, + "val_i": 0 + }, + { + "index": 10, + "valtype": 0, + "val_i": 0 + }, + { + "index": 11, + "valtype": 0, + "val_i": 0 + } + ] + } + }, + "pos": [ + 40, + 0 + ] + }, + { + "id": 4677901538619524, + "plugin": "SurgeXTRack", + "model": "SurgeXTDelay", + "version": "2.0", + "params": [ + { + "value": -0.8456680178642273, + "id": 0 + }, + { + "value": -0.7816022634506226, + "id": 1 + }, + { + "value": 0.0, + "id": 2 + }, + { + "value": 0.5, + "id": 3 + }, + { + "value": 0.0, + "id": 4 + }, + { + "value": -60.0, + "id": 5 + }, + { + "value": 70.0, + "id": 6 + }, + { + "value": 2.0, + "id": 7 + }, + { + "value": 0.0, + "id": 8 + }, + { + "value": 0.0, + "id": 9 + }, + { + "value": 0.0, + "id": 10 + }, + { + "value": 0.0, + "id": 11 + }, + { + "value": 0.0, + "id": 12 + }, + { + "value": 0.0, + "id": 13 + }, + { + "value": 0.0, + "id": 14 + }, + { + "value": 0.0, + "id": 15 + }, + { + "value": 0.0, + "id": 16 + }, + { + "value": 0.0, + "id": 17 + }, + { + "value": 0.0, + "id": 18 + }, + { + "value": 0.0, + "id": 19 + }, + { + "value": 0.0, + "id": 20 + }, + { + "value": 0.0, + "id": 21 + }, + { + "value": 0.0, + "id": 22 + }, + { + "value": 0.0, + "id": 23 + }, + { + "value": 0.0, + "id": 24 + }, + { + "value": 0.0, + "id": 25 + }, + { + "value": 0.0, + "id": 26 + }, + { + "value": 0.0, + "id": 27 + }, + { + "value": 0.0, + "id": 28 + }, + { + "value": 0.0, + "id": 29 + }, + { + "value": 0.0, + "id": 30 + }, + { + "value": 0.0, + "id": 31 + }, + { + "value": 0.0, + "id": 32 + }, + { + "value": 0.0, + "id": 33 + }, + { + "value": 0.0, + "id": 34 + }, + { + "value": 0.0, + "id": 35 + }, + { + "value": 0.0, + "id": 36 + }, + { + "value": 0.0, + "id": 37 + }, + { + "value": 0.0, + "id": 38 + }, + { + "value": 0.0, + "id": 39 + }, + { + "value": 0.0, + "id": 40 + }, + { + "value": 0.0, + "id": 41 + }, + { + "value": 0.0, + "id": 42 + }, + { + "value": 0.0, + "id": 43 + }, + { + "value": 0.0, + "id": 44 + }, + { + "value": 0.0, + "id": 45 + }, + { + "value": 0.0, + "id": 46 + }, + { + "value": 0.0, + "id": 47 + }, + { + "value": 0.0, + "id": 48 + }, + { + "value": 0.0, + "id": 49 + }, + { + "value": 3.0, + "id": 50 + } + ], + "leftModuleId": 5435983300881264, + "rightModuleId": 7835847246020659, + "data": { + "xtshared": { + "streamingVersion": 1, + "buildInfo": "os:linux surge:git-no-commit buildtime=Jun 27 2025 10:36:53", + "isCoupledToGlobalStyle": true, + "localStyle": 10001, + "localDisplayRegionColor": 900001, + "localModulationColor": 900005, + "localControlValueColor": 900001, + "localPowerButtonColor": 900003 + }, + "modulespecific": { + "clockStyle": 0 + } + }, + "pos": [ + 52, + 0 + ] + }, + { + "id": 7835847246020659, + "plugin": "SurgeXTRack", + "model": "SurgeXTFXReverb", + "version": "2.0", + "params": [ + { + "value": 0.19752730429172516, + "id": 0 + }, + { + "value": 0.6650000214576721, + "id": 1 + }, + { + "value": 0.23214100301265717, + "id": 2 + }, + { + "value": 0.40044617652893066, + "id": 3 + }, + { + "value": 0.2785710096359253, + "id": 4 + }, + { + "value": 0.4517306089401245, + "id": 5 + }, + { + "value": 0.4615384638309479, + "id": 6 + }, + { + "value": 0.5, + "id": 7 + }, + { + "value": 0.7460850477218628, + "id": 8 + }, + { + "value": 0.0, + "id": 9 + }, + { + "value": 0.5, + "id": 10 + }, + { + "value": 0.0, + "id": 11 + }, + { + "value": 0.0, + "id": 12 + }, + { + "value": 0.0, + "id": 13 + }, + { + "value": 0.0, + "id": 14 + }, + { + "value": 0.0, + "id": 15 + }, + { + "value": 0.0, + "id": 16 + }, + { + "value": 0.0, + "id": 17 + }, + { + "value": 0.0, + "id": 18 + }, + { + "value": 0.0, + "id": 19 + }, + { + "value": 0.0, + "id": 20 + }, + { + "value": 0.0, + "id": 21 + }, + { + "value": 0.0, + "id": 22 + }, + { + "value": 0.0, + "id": 23 + }, + { + "value": 0.0, + "id": 24 + }, + { + "value": 0.0, + "id": 25 + }, + { + "value": 0.0, + "id": 26 + }, + { + "value": 0.0, + "id": 27 + }, + { + "value": 0.0, + "id": 28 + }, + { + "value": 0.0, + "id": 29 + }, + { + "value": 0.0, + "id": 30 + }, + { + "value": 0.0, + "id": 31 + }, + { + "value": 0.0, + "id": 32 + }, + { + "value": 0.0, + "id": 33 + }, + { + "value": 0.0, + "id": 34 + }, + { + "value": 0.0, + "id": 35 + }, + { + "value": 0.0, + "id": 36 + }, + { + "value": 0.0, + "id": 37 + }, + { + "value": 0.0, + "id": 38 + }, + { + "value": 0.0, + "id": 39 + }, + { + "value": 0.0, + "id": 40 + }, + { + "value": 0.0, + "id": 41 + }, + { + "value": 0.0, + "id": 42 + }, + { + "value": 0.0, + "id": 43 + }, + { + "value": 0.0, + "id": 44 + }, + { + "value": 0.0, + "id": 45 + }, + { + "value": 0.0, + "id": 46 + }, + { + "value": 0.0, + "id": 47 + }, + { + "value": 0.0, + "id": 48 + }, + { + "value": 0.0, + "id": 49 + }, + { + "value": 0.0, + "id": 50 + }, + { + "value": 0.0, + "id": 51 + }, + { + "value": 0.0, + "id": 52 + }, + { + "value": 0.0, + "id": 53 + }, + { + "value": 0.0, + "id": 54 + }, + { + "value": 0.0, + "id": 55 + }, + { + "value": 0.0, + "id": 56 + }, + { + "value": 0.0, + "id": 57 + }, + { + "value": 0.0, + "id": 58 + }, + { + "value": 0.0, + "id": 59 + }, + { + "value": 1.0, + "id": 60 + }, + { + "value": 1.0, + "id": 61 + } + ], + "leftModuleId": 4677901538619524, + "rightModuleId": 2799203590388841, + "data": { + "xtshared": { + "streamingVersion": 1, + "buildInfo": "os:linux surge:git-no-commit buildtime=Jun 27 2025 10:36:53", + "isCoupledToGlobalStyle": true, + "localStyle": 10001, + "localDisplayRegionColor": 900001, + "localModulationColor": 900005, + "localControlValueColor": 900001, + "localPowerButtonColor": 900003 + }, + "modulespecific": { + "loadedPreset": 13, + "presetName": "Room", + "presetIsDirty": true, + "polyphonicMode": false, + "paramNatural": [ + { + "index": 0, + "valtype": 2, + "val_f": -5.432145118713379 + }, + { + "index": 1, + "valtype": 0, + "val_i": 2 + }, + { + "index": 2, + "valtype": 2, + "val_f": 0.23214100301265717 + }, + { + "index": 3, + "valtype": 2, + "val_f": 0.004461765289306641 + }, + { + "index": 4, + "valtype": 2, + "val_f": 0.2785710096359253 + }, + { + "index": 5, + "valtype": 2, + "val_f": -1.2750205993652344 + }, + { + "index": 6, + "valtype": 2, + "val_f": 0.0 + }, + { + "index": 7, + "valtype": 2, + "val_f": 0.0 + }, + { + "index": 8, + "valtype": 2, + "val_f": 36.991058349609375 + }, + { + "index": 9, + "valtype": 2, + "val_f": 0.0 + }, + { + "index": 10, + "valtype": 2, + "val_f": 0.0 + }, + { + "index": 11, + "valtype": 0, + "val_i": 0 + } + ] + } + }, + "pos": [ + 64, + 0 + ] + }, + { + "id": 2, + "plugin": "Cardinal", + "model": "HostMIDI", + "version": "2.0", + "params": [], + "data": { + "pwRange": 2.0, + "smooth": false, + "forceGateGaps": false, + "channels": 8, + "polyMode": 0, + "lastPitch": 8192, + "lastMod": 0, + "inputChannel": 0, + "outputChannel": 0 + }, + "pos": [ + 16, + 1 + ] + }, + { + "id": 5386134664554238, + "plugin": "Cardinal", + "model": "HostMIDIMap", + "version": "2.0", + "params": [], + "data": { + "maps": [ + { + "cc": 37, + "moduleId": 3851544056860100, + "paramId": 2 + }, + { + "cc": 38, + "moduleId": 3851544056860100, + "paramId": 3 + }, + { + "cc": 39, + "moduleId": 3851544056860100, + "paramId": 4 + }, + { + "cc": 40, + "moduleId": 3851544056860100, + "paramId": 5 + }, + { + "cc": 33, + "moduleId": 2029604380744860, + "paramId": 3 + }, + { + "cc": 34, + "moduleId": 2029604380744860, + "paramId": 4 + }, + { + "cc": 35, + "moduleId": 2029604380744860, + "paramId": 5 + }, + { + "cc": 36, + "moduleId": 2029604380744860, + "paramId": 6 + }, + { + "cc": 62, + "moduleId": 8399478428125930, + "paramId": 0 + }, + { + "cc": 63, + "moduleId": 8399478428125930, + "paramId": 1 + }, + { + "cc": 75, + "moduleId": 8399478428125930, + "paramId": 2 + }, + { + "cc": 1, + "moduleId": 2284558036713263, + "paramId": 0 + }, + { + "cc": 76, + "moduleId": 2284558036713263, + "paramId": 1 + }, + { + "cc": -1, + "moduleId": -1, + "paramId": 0 + } + ], + "smooth": true, + "channel": 0 + }, + "pos": [ + 4, + 1 + ] + }, + { + "id": 6151661423319598, + "plugin": "Cardinal", + "model": "HostAudio2", + "version": "2.0", + "params": [ + { + "value": 1.0, + "id": 0 + } + ], + "data": { + "dcFilter": true + }, + "pos": [ + 68, + 1 + ] + } + ], + "cables": [ + { + "id": 4870882873778933, + "outputModuleId": 2, + "outputId": 0, + "inputModuleId": 3851544056860100, + "inputId": 0, + "color": "#e8ff52" + }, + { + "id": 2579627869165631, + "outputModuleId": 8399478428125930, + "outputId": 0, + "inputModuleId": 2029604380744860, + "inputId": 0, + "color": "#ff5252" + }, + { + "id": 962456096359109, + "outputModuleId": 8399478428125930, + "outputId": 1, + "inputModuleId": 2029604380744860, + "inputId": 1, + "color": "#ff9352" + }, + { + "id": 2222999430484636, + "outputModuleId": 4677901538619524, + "outputId": 0, + "inputModuleId": 7835847246020659, + "inputId": 0, + "color": "#52ff7d" + }, + { + "id": 6472190894340858, + "outputModuleId": 4677901538619524, + "outputId": 1, + "inputModuleId": 7835847246020659, + "inputId": 1, + "color": "#52ffbe" + }, + { + "id": 4851926975624854, + "outputModuleId": 5435983300881264, + "outputId": 0, + "inputModuleId": 4677901538619524, + "inputId": 0, + "color": "#52ffff" + }, + { + "id": 1131323874335431, + "outputModuleId": 5435983300881264, + "outputId": 1, + "inputModuleId": 4677901538619524, + "inputId": 1, + "color": "#52beff" + }, + { + "id": 378399834714435, + "outputModuleId": 2, + "outputId": 1, + "inputModuleId": 2029604380744860, + "inputId": 2, + "color": "#e8ff52" + }, + { + "id": 5460605340883330, + "outputModuleId": 6686738058731514, + "outputId": 0, + "inputModuleId": 2284558036713263, + "inputId": 0, + "color": "#ff5293" + }, + { + "id": 4133716265410150, + "outputModuleId": 2284558036713263, + "outputId": 0, + "inputModuleId": 3851544056860100, + "inputId": 2, + "color": "#ff5252" + }, + { + "id": 1320773246873342, + "outputModuleId": 2029604380744860, + "outputId": 0, + "inputModuleId": 5435983300881264, + "inputId": 0, + "color": "#ff9352" + }, + { + "id": 3376170110142204, + "outputModuleId": 2029604380744860, + "outputId": 1, + "inputModuleId": 5435983300881264, + "inputId": 1, + "color": "#ffd452" + }, + { + "id": 3429691906124004, + "outputModuleId": 2029604380744860, + "outputId": 2, + "inputModuleId": 2284558036713263, + "inputId": 1, + "color": "#e8ff52" + }, + { + "id": 291747936352326, + "outputModuleId": 2284558036713263, + "outputId": 1, + "inputModuleId": 8399478428125930, + "inputId": 2, + "color": "#a8ff52" + }, + { + "id": 7571876195938815, + "outputModuleId": 3851544056860100, + "outputId": 0, + "inputModuleId": 8399478428125930, + "inputId": 0, + "color": "#67ff52" + }, + { + "id": 1260042254448408, + "outputModuleId": 3851544056860100, + "outputId": 0, + "inputModuleId": 8399478428125930, + "inputId": 1, + "color": "#52ff7d" + }, + { + "id": 5302575887902969, + "outputModuleId": 2, + "outputId": 1, + "inputModuleId": 3851544056860100, + "inputId": 1, + "color": "#ffd452" + }, + { + "id": 7099271353973173, + "outputModuleId": 7835847246020659, + "outputId": 0, + "inputModuleId": 6151661423319598, + "inputId": 0, + "color": "#ff5252" + }, + { + "id": 7428242121207301, + "outputModuleId": 7835847246020659, + "outputId": 1, + "inputModuleId": 6151661423319598, + "inputId": 1, + "color": "#ffd452" + } + ] +} diff --git a/plugins/Cardinal/src/AudioFile.cpp b/plugins/Cardinal/src/AudioFile.cpp index 53e8933..82ed656 100644 --- a/plugins/Cardinal/src/AudioFile.cpp +++ b/plugins/Cardinal/src/AudioFile.cpp @@ -201,7 +201,7 @@ struct CarlaInternalPluginModule : Module, Runner { { switch (opcode) { - // cannnot be supported + // cannot be supported case NATIVE_HOST_OPCODE_HOST_IDLE: break; // other stuff diff --git a/plugins/Cardinal/src/Carla.cpp b/plugins/Cardinal/src/Carla.cpp index bf51a29..072c4ca 100644 --- a/plugins/Cardinal/src/Carla.cpp +++ b/plugins/Cardinal/src/Carla.cpp @@ -27,7 +27,7 @@ #include "water/xml/XmlDocument.h" #ifndef CARDINAL_SYSDEPS -// private method that takes ownership, we can use it to avoid superfulous allocations +// private method that takes ownership, we can use it to avoid superfluous allocations extern "C" { json_t *jsonp_stringn_nocheck_own(const char* value, size_t len); } @@ -244,7 +244,7 @@ struct CarlaModule : Module { { switch (opcode) { - // cannnot be supported + // cannot be supported case NATIVE_HOST_OPCODE_HOST_IDLE: break; // other stuff diff --git a/plugins/Cardinal/src/Ildaeil.cpp b/plugins/Cardinal/src/Ildaeil.cpp index 98f568e..05b3750 100644 --- a/plugins/Cardinal/src/Ildaeil.cpp +++ b/plugins/Cardinal/src/Ildaeil.cpp @@ -52,7 +52,7 @@ #include #ifndef CARDINAL_SYSDEPS -// private method that takes ownership, we can use it to avoid superfulous allocations +// private method that takes ownership, we can use it to avoid superfluous allocations extern "C" { json_t *jsonp_stringn_nocheck_own(const char* value, size_t len); } @@ -575,7 +575,7 @@ struct IldaeilModule : Module { { switch (opcode) { - // cannnot be supported? + // cannot be supported? case NATIVE_HOST_OPCODE_HOST_IDLE: break; // other stuff diff --git a/plugins/Cardinal/src/TextEditor.cpp b/plugins/Cardinal/src/TextEditor.cpp index 5fa67ed..04228c5 100644 --- a/plugins/Cardinal/src/TextEditor.cpp +++ b/plugins/Cardinal/src/TextEditor.cpp @@ -85,7 +85,7 @@ struct TextEditorModule : Module { { file.clear(); - // Rack Core Notes compatiblity + // Rack Core Notes compatibility if (json_t* const textJ = json_object_get(rootJ, "text")) { text = json_string_value(textJ); diff --git a/src/CardinalX11WindowIcon.cpp b/src/CardinalX11WindowIcon.cpp index d7d3fe3..7ddba29 100644 --- a/src/CardinalX11WindowIcon.cpp +++ b/src/CardinalX11WindowIcon.cpp @@ -1214,7 +1214,7 @@ static constexpr const unsigned long sCardinalX11Icon[] = { static constexpr const uint32_t sCardinalX11IconSize = 2 + 16 * 16 + 2 + 48 * 48 + 2 + 128 * 128; -// declaration first, ensuring extern/visiblity status is respected +// declaration first, ensuring extern/visibility status is respected extern const unsigned long* gCardinalX11Icon; // definition afterwards diff --git a/src/Makefile b/src/Makefile index 8799bff..440fcf4 100644 --- a/src/Makefile +++ b/src/Makefile @@ -33,6 +33,7 @@ BUILD_CXX_FLAGS += -DnsvgParseFromFile=nsvgParseFromFileCardinal RACK_FILES += AsyncDialog.cpp RACK_FILES += CardinalModuleWidget.cpp +RACK_FILES += custom/Browser.cpp RACK_FILES += custom/asset.cpp RACK_FILES += custom/dep.cpp RACK_FILES += custom/library.cpp @@ -68,6 +69,7 @@ IGNORED_FILES += Rack/src/plugin.cpp IGNORED_FILES += Rack/src/rtaudio.cpp IGNORED_FILES += Rack/src/rtmidi.cpp IGNORED_FILES += Rack/src/app/AudioDisplay.cpp +IGNORED_FILES += Rack/src/app/Browser.cpp IGNORED_FILES += Rack/src/app/MenuBar.cpp IGNORED_FILES += Rack/src/app/MidiDisplay.cpp IGNORED_FILES += Rack/src/app/ModuleWidget.cpp diff --git a/include/componentlibrary.hpp b/src/custom/Browser.cpp similarity index 80% rename from include/componentlibrary.hpp rename to src/custom/Browser.cpp index 5b0705f..ef9a335 100644 --- a/include/componentlibrary.hpp +++ b/src/custom/Browser.cpp @@ -1,6 +1,6 @@ /* * DISTRHO Cardinal Plugin - * Copyright (C) 2021-2022 Filipe Coelho + * Copyright (C) 2021-2026 Filipe Coelho * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -15,17 +15,14 @@ * For a full copy of the GNU General Public License see the LICENSE file. */ -#pragma once - +// little hack to force browser yellow color to cardinal red #define SCHEME_YELLOW SCHEME_YELLOW_OldVCV -#include_next "componentlibrary.hpp" +#include "componentlibrary.hpp" #undef SCHEME_YELLOW - namespace rack { namespace componentlibrary { - -// Yellow? What's that? static const NVGcolor SCHEME_YELLOW = nvgRGBf(0.76f, 0.11f, 0.22f); - } } + +#include "../src/app/Browser.cpp" diff --git a/utils/create-macos-installer.sh b/utils/create-macos-installer.sh index c88d2d1..c8d4880 100755 --- a/utils/create-macos-installer.sh +++ b/utils/create-macos-installer.sh @@ -26,10 +26,34 @@ rm -rf vst2/*.vst/Contents/Resources rm -rf vst3/*.vst3/Contents/Resources rm -rf clap/*.clap/Contents/Resources +if [ -n "${MACOS_APP_CERTIFICATE}" ] && [ -n "${MACOS_INSTALLER_CERTIFICATE}" ] && [ -n "${MACOS_CERTIFICATE_PASSWORD}" ]; then + security create-keychain -p "" $(pwd)/keychain.db + security unlock-keychain -p "" $(pwd)/keychain.db + echo -n "${MACOS_APP_CERTIFICATE}" | base64 --decode -o cert.p12 + security import cert.p12 -P "${MACOS_CERTIFICATE_PASSWORD}" -A -t cert -f pkcs12 -k $(pwd)/keychain.db + echo -n "${MACOS_INSTALLER_CERTIFICATE}" | base64 --decode -o cert.p12 + security import cert.p12 -P "${MACOS_CERTIFICATE_PASSWORD}" -A -t cert -f pkcs12 -k $(pwd)/keychain.db + rm cert.p12 + security list-keychain -d user -s $(pwd)/keychain.db + + MACOS_APP_DEV_ID="$(security find-identity -v $(pwd)/keychain.db | grep 'Developer ID Application:' | head -n 1 | cut -d' ' -f 5-99 | sed 's/\"//g')" + codesign -s "${MACOS_APP_DEV_ID}" --deep --force --verbose --option=runtime au/*.component + codesign -s "${MACOS_APP_DEV_ID}" --deep --force --verbose --option=runtime clap/*.clap + codesign -s "${MACOS_APP_DEV_ID}" --deep --force --verbose --option=runtime jack/*.app + codesign -s "${MACOS_APP_DEV_ID}" --deep --force --verbose --option=runtime native/*.app + codesign -s "${MACOS_APP_DEV_ID}" --deep --force --verbose --option=runtime vst2/*.vst + codesign -s "${MACOS_APP_DEV_ID}" --deep --force --verbose --option=runtime vst3/*.vst3 + codesign -s "${MACOS_APP_DEV_ID}" --force --verbose --option=runtime lv2/*.lv2/*.dylib + + MACOS_INSTALLER_DEV_ID="$(security find-identity -v $(pwd)/keychain.db | grep 'Developer ID Installer:' | head -n 1 | cut -d' ' -f 5-99 | sed 's/\"//g')" + PKG_SIGN_ARGS=(--sign "${MACOS_INSTALLER_DEV_ID}") +fi + pkgbuild \ --identifier "studio.kx.distrho.cardinal.resources" \ --install-location "/Library/Application Support/Cardinal/" \ --root "${PWD}/res/" \ + "${PKG_SIGN_ARGS[@]}" \ ../dpf-cardinal-resources.pkg pkgbuild \ @@ -37,6 +61,7 @@ pkgbuild \ --component-plist "../utils/macOS/Build_JACK.plist" \ --install-location "/Applications/" \ --root "${PWD}/jack/" \ + "${PKG_SIGN_ARGS[@]}" \ ../dpf-cardinal-jack.pkg pkgbuild \ @@ -44,36 +69,42 @@ pkgbuild \ --component-plist "../utils/macOS/Build_Native.plist" \ --install-location "/Applications/" \ --root "${PWD}/native/" \ + "${PKG_SIGN_ARGS[@]}" \ ../dpf-cardinal-native.pkg pkgbuild \ --identifier "studio.kx.distrho.plugins.cardinal.components" \ --install-location "/Library/Audio/Plug-Ins/Components/" \ --root "${PWD}/au/" \ + "${PKG_SIGN_ARGS[@]}" \ ../dpf-cardinal-components.pkg pkgbuild \ --identifier "studio.kx.distrho.plugins.cardinal.lv2bundles" \ --install-location "/Library/Audio/Plug-Ins/LV2/" \ --root "${PWD}/lv2/" \ + "${PKG_SIGN_ARGS[@]}" \ ../dpf-cardinal-lv2bundles.pkg pkgbuild \ --identifier "studio.kx.distrho.plugins.cardinal.vst2bundles" \ --install-location "/Library/Audio/Plug-Ins/VST/" \ --root "${PWD}/vst2/" \ + "${PKG_SIGN_ARGS[@]}" \ ../dpf-cardinal-vst2bundles.pkg pkgbuild \ --identifier "studio.kx.distrho.plugins.cardinal.vst3bundles" \ --install-location "/Library/Audio/Plug-Ins/VST3/" \ --root "${PWD}/vst3/" \ + "${PKG_SIGN_ARGS[@]}" \ ../dpf-cardinal-vst3bundles.pkg pkgbuild \ --identifier "studio.kx.distrho.plugins.cardinal.clapbundles" \ --install-location "/Library/Audio/Plug-Ins/CLAP/" \ --root "${PWD}/clap/" \ + "${PKG_SIGN_ARGS[@]}" \ ../dpf-cardinal-clapbundles.pkg cd .. @@ -86,4 +117,14 @@ productbuild \ --identifier "studio.kx.distrho.cardinal" \ --package-path "${PWD}" \ --version 0 \ + "${PKG_SIGN_ARGS[@]}" \ Cardinal-macOS.pkg + +if [ -n "${MACOS_NOTARIZATION_USER}" ] && [ -n "${MACOS_NOTARIZATION_PASS}" ] && [ -n "${MACOS_NOTARIZATION_TEAM}" ]; then + xcrun notarytool submit Cardinal-macOS.pkg \ + --apple-id ${MACOS_NOTARIZATION_USER} \ + --password ${MACOS_NOTARIZATION_PASS} \ + --team-id ${MACOS_NOTARIZATION_TEAM} \ + --wait + xcrun stapler staple Cardinal-macOS.pkg +fi