From fa63bee29887e90b934443858c373ba3bbec7060 Mon Sep 17 00:00:00 2001 From: Matt Firth Date: Thu, 14 Mar 2024 15:26:28 +0000 Subject: [PATCH 01/23] Update gitignore for temp codesigning artefacts --- .gitignore | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 21de9aaa2..ec88a9ee0 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,8 @@ docs/venv reaper-adm-extension/test/reaper_adm/data/UserPlugins/ shared/version/eps_version.cpp submodules/visr -submodules/VST3 \ No newline at end of file +submodules/VST3 +packaging/codesign/*.dmg +packaging/codesign/*.tar +packaging/codesign/*.zip +packaging/codesign/tmp \ No newline at end of file From 70c8ffe6bc269e0ff57bc77236c3668d8cc51dd6 Mon Sep 17 00:00:00 2001 From: Matt Firth Date: Thu, 14 Mar 2024 15:29:22 +0000 Subject: [PATCH 02/23] Look for setup files in setup app bundle --- tools/setup/helpers/manifests.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tools/setup/helpers/manifests.cpp b/tools/setup/helpers/manifests.cpp index b28dddd64..50fb63c29 100644 --- a/tools/setup/helpers/manifests.cpp +++ b/tools/setup/helpers/manifests.cpp @@ -37,8 +37,9 @@ namespace { // Same as exe dir return File::getSpecialLocation(File::SpecialLocationType::currentExecutableFile).getParentDirectory(); #elif __APPLE__ - // Same as dir containing bundle - return File::getSpecialLocation(File::SpecialLocationType::currentApplicationFile).getParentDirectory(); + // For mac, these are in "Resources" directory of Setup bundle + return File::getSpecialLocation(File::SpecialLocationType::currentApplicationFile) + .getChildFile("Contents").getChildFile("Resources"); #else throw std::runtime_error("Unsupported OS"); #endif From 166983f405fd991e7e93c8b00f01186d265d2ea8 Mon Sep 17 00:00:00 2001 From: Matt Firth Date: Fri, 15 Mar 2024 14:26:37 +0000 Subject: [PATCH 03/23] Don't require hyphen before "tweak" portion of version tag ... and don't insert a period in place of it in the descriptive version strings --- cmake_modules/get_git_version.cmake | 6 ++++-- shared/version/eps_version.h | 6 +++--- shared/version/gen_version.cmake | 6 ++++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/cmake_modules/get_git_version.cmake b/cmake_modules/get_git_version.cmake index beba03c7d..1004ec46d 100644 --- a/cmake_modules/get_git_version.cmake +++ b/cmake_modules/get_git_version.cmake @@ -19,12 +19,14 @@ endfunction() function(update_version_from_git NUMERIC_VERSION DESCRIPTIVE_VERSION) find_package(Git) if(Git_FOUND) + + #TODO: This is very similar to code in shared/version/gen_version.cmake - consolidate! git_describe(_GIT_REVISION --tags --abbrev=4 --dirty --match v[0-9]*) string(REGEX REPLACE "^v([0-9]+)\\..*" "\\1" VERSION_MAJOR "${_GIT_REVISION}") string(REGEX REPLACE "^v[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${_GIT_REVISION}") string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${_GIT_REVISION}") - string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+-(.*)" "\\1" VERSION_TWEAK "${_GIT_REVISION}") + string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+(.*)" "\\1" VERSION_TWEAK "${_GIT_REVISION}") if(_GIT_REVISION) set(${NUMERIC_VERSION}_MAJOR ${VERSION_MAJOR} PARENT_SCOPE) @@ -36,7 +38,7 @@ function(update_version_from_git NUMERIC_VERSION DESCRIPTIVE_VERSION) if(NOT VERSION_TWEAK STREQUAL _GIT_REVISION) # Tweak is present - set(${DESCRIPTIVE_VERSION} "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_TWEAK}" PARENT_SCOPE) + set(${DESCRIPTIVE_VERSION} "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}${VERSION_TWEAK}" PARENT_SCOPE) if(VERSION_TWEAK MATCHES "^[0-9]+$") # Tweak is numeric set(${NUMERIC_VERSION}_TWEAK ${VERSION_TWEAK} PARENT_SCOPE) diff --git a/shared/version/eps_version.h b/shared/version/eps_version.h index 329a187bd..f1294a66a 100644 --- a/shared/version/eps_version.h +++ b/shared/version/eps_version.h @@ -4,12 +4,12 @@ namespace eps { // baseVersion is the numeric-only version string. - /// It consists of 3 parts (or 4 if "patch" portion is available and is purely numeric) - /// [major].[minor].[revision] (or [major].[minor].[revision].[patch]) + /// It consists of 3 parts (or 4 if "tweak" portion is available and is purely numeric) + /// [major].[minor].[patch(revision)] (or [major].[minor].[patch(revision)].[tweak]) extern std::string const& baseVersion(); // currentVersion is the complete, descriptive version string. - /// It includes the last release version, including any alphanumeric information in the "patch" portion + /// It includes the last release version, including any alphanumeric information in the "tweak" portion /// It also includes a partial commit hash, and a dirty flag if necessary extern std::string const& currentVersion(); diff --git a/shared/version/gen_version.cmake b/shared/version/gen_version.cmake index 18415368e..312db9204 100644 --- a/shared/version/gen_version.cmake +++ b/shared/version/gen_version.cmake @@ -32,10 +32,12 @@ if(Git_FOUND) string(REGEX REPLACE "^v([0-9]+)\\..*" "\\1" VERSION_MAJOR "${_GIT_REVISION}") string(REGEX REPLACE "^v[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${_GIT_REVISION}") string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${_GIT_REVISION}") - string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+-(.*)" "\\1" VERSION_TWEAK "${_GIT_REVISION}") + string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+(.*)" "\\1" VERSION_TWEAK "${_GIT_REVISION}") message(STATUS "Version info from Git: " ${_GIT_REVISION}) if(_GIT_REVISION) + + #TODO: This is very similar to code in cmake_modules/get_git_version.cmake - consolidate! set(DESCRIPTIVE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}" ) set(NUMERIC_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}" ) @@ -43,7 +45,7 @@ if(Git_FOUND) if(NOT VERSION_TWEAK STREQUAL _GIT_REVISION) # Tweak is present - set(DESCRIPTIVE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_TWEAK}" ) + set(DESCRIPTIVE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}${VERSION_TWEAK}" ) if(VERSION_TWEAK MATCHES "^[0-9]+$") # Tweak is numeric set(NUMERIC_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_TWEAK}" ) From 0c60a7a2aa7fffc047ed89dee5186036b562821e Mon Sep 17 00:00:00 2001 From: Matt Firth Date: Fri, 15 Mar 2024 14:53:46 +0000 Subject: [PATCH 04/23] Update changelog and release process --- CHANGELOG.md | 4 ++++ packaging/release_process.txt | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d970af226..a095f9871 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +Version 1.1.0b + +* Fix installation on MacOS where Gatekeeper enforces translocation [#273](https://github.com/ebu/ear-production-suite/pull/273) + Version 1.1.0 * Support for 128 channels when using REAPER >=v7.0 [#244](https://github.com/ebu/ear-production-suite/issues/244) [#254](https://github.com/ebu/ear-production-suite/pull/254) [#267](https://github.com/ebu/ear-production-suite/pull/267) diff --git a/packaging/release_process.txt b/packaging/release_process.txt index 3437f4779..fbd2fa590 100644 --- a/packaging/release_process.txt +++ b/packaging/release_process.txt @@ -11,9 +11,10 @@ Tag it with version (e.g, git tag -a v0.8.0-EPS-beta -m "v0.8.0 beta release") Push tag (e.g, git push origin v0.8.0-EPS-beta) Close all PRs and related issues Allow CI to build it -Download MacOS "universal" artefact and Windows artefact +Download MacOS "universal" artefact, Windows artefact, and Linux artefact For MacOS artefact: Sign it, Notorise it, and staple Create a release from the tag on GitHub - include change summary in notes Upload signed MacOS version as release asset Upload Windows version as release asset -Update website + push \ No newline at end of file +Upload Linux version as release asset +Update website (version_info.json) + push \ No newline at end of file From 926a08d5ec4d5e9c81e2013896ff85e1dcf93d85 Mon Sep 17 00:00:00 2001 From: Matt Firth Date: Fri, 15 Mar 2024 16:05:17 +0000 Subject: [PATCH 05/23] Update readmes and license --- packaging/LICENSE.pdf | Bin 201531 -> 201531 bytes packaging/README.md.in | 10 ++++++---- packaging/README.pdf | Bin 177608 -> 178539 bytes 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packaging/LICENSE.pdf b/packaging/LICENSE.pdf index aaf12f729f82128b9a0e54c38644486168997e9d..68838da4ee670fe7c2c128e32479db26096d38d6 100644 GIT binary patch delta 134 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 delta 29498 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

rBGsKkjW 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 b8acaqI-8lpF>`XTbF#pZlZ%5ZO2GXeyBn<3 From 7155b529e19276009c81b123013623de4dff5b33 Mon Sep 17 00:00:00 2001 From: Matt Firth Date: Fri, 15 Mar 2024 16:48:44 +0000 Subject: [PATCH 06/23] Setup app icon (MacOS) --- tools/setup/CMakeLists.txt | 20 ++++++++++++++------ tools/setup/icon.icns | Bin 0 -> 56344 bytes 2 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 tools/setup/icon.icns diff --git a/tools/setup/CMakeLists.txt b/tools/setup/CMakeLists.txt index d7d188bd3..6eeac242c 100644 --- a/tools/setup/CMakeLists.txt +++ b/tools/setup/CMakeLists.txt @@ -7,6 +7,7 @@ find_package(JUCE REQUIRED QUIET) set(MACOSX_BUNDLE_BUNDLE_NAME "Setup EAR Production Suite") set(MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION}") set(MACOSX_BUNDLE_GUI_IDENTIFIER "ch.ebu.eps_setup") +set(MACOSX_BUNDLE_ICON_FILE "icon.icns") set(MACOSX_BUNDLE_COPYRIGHT "(C) 2019-2024 BBC, (C) 2020-2021 EBU, (C) 2019-2021 IRT") add_executable(setup WIN32 MACOSX_BUNDLE) @@ -47,17 +48,19 @@ set(SOURCES_SETUP source_group("Header Files" FILES ${HEADERS_SETUP}) -target_sources(setup - PRIVATE - ${HEADERS_SETUP} - ${SOURCES_SETUP} -) - if(APPLE) + target_sources(setup + PRIVATE + ${HEADERS_SETUP} + ${SOURCES_SETUP} + icon.icns + ) set_target_properties(setup PROPERTIES OUTPUT_NAME "Setup EAR Production Suite" XCODE_ATTRIBUTE_EXECUTABLE_NAME "Setup EAR Production Suite" MACOSX_BUNDLE TRUE) + set_source_files_properties(icon.icns PROPERTIES + MACOSX_PACKAGE_LOCATION "Resources") add_custom_command(TARGET setup POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/packaging/install_list.xml $/../Resources/install_list.xml ) @@ -66,6 +69,11 @@ if(APPLE) ) endif() if(WIN32) + target_sources(setup + PRIVATE + ${HEADERS_SETUP} + ${SOURCES_SETUP} + ) set_target_properties(setup PROPERTIES OUTPUT_NAME "setup" WIN32_EXECUTABLE TRUE) diff --git a/tools/setup/icon.icns b/tools/setup/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..b521b11995511dc66f27fd865156010591e406bf GIT binary patch literal 56344 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

GIaK3(zYV;0c5>zgeomZ_qph(}vlZr4)$Mke~|U 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 Date: Sun, 17 Mar 2024 12:28:09 +0000 Subject: [PATCH 07/23] Collate a list of EPS VST targets --- CMakeLists.txt | 1 + cmake_modules/juce_helpers.cmake | 4 ++++ ear-production-suite-plugins/CMakeLists.txt | 1 + ear-production-suite-plugins/plugins/CMakeLists.txt | 2 +- .../plugins/binaural_monitoring/CMakeLists.txt | 2 +- .../plugins/direct_speakers/CMakeLists.txt | 2 +- ear-production-suite-plugins/plugins/hoa/CMakeLists.txt | 2 +- .../plugins/monitoring/CMakeLists.txt | 2 ++ ear-production-suite-plugins/plugins/object/CMakeLists.txt | 2 +- ear-production-suite-plugins/plugins/scene/CMakeLists.txt | 2 +- 10 files changed, 14 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cd8f5fdd2..9f4874fe0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,7 @@ set(EPS_SHARED_DIR ${CMAKE_CURRENT_SOURCE_DIR}/shared) set(JUCE_SUPPORT_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/shared/resources) add_subdirectory(${EPS_SHARED_DIR}/version) +set(EPS_PLUGIN_TARGETS) add_subdirectory(ear-production-suite-plugins) add_subdirectory(reaper-adm-extension) add_subdirectory(reaper-adm-export-source-plugin) diff --git a/cmake_modules/juce_helpers.cmake b/cmake_modules/juce_helpers.cmake index 2afc3b643..209d43996 100644 --- a/cmake_modules/juce_helpers.cmake +++ b/cmake_modules/juce_helpers.cmake @@ -38,6 +38,10 @@ function(add_juce_vst3_plugin PLUGIN_NAME) target_include_directories(${PLUGIN_NAME}_VST3 PRIVATE ${_SUPPORT_PATH}/ ${EPS_SHARED_DIR}) target_link_libraries(${PLUGIN_NAME}_VST3 PRIVATE Juce::VST3) + set(EPS_PLUGIN_TARGETS_COPY ${EPS_PLUGIN_TARGETS}) + list(APPEND EPS_PLUGIN_TARGETS_COPY ${PLUGIN_NAME}_VST3 ) + set(EPS_PLUGIN_TARGETS ${EPS_PLUGIN_TARGETS_COPY} PARENT_SCOPE) + set_target_properties(${PLUGIN_NAME}_VST3 PROPERTIES BUNDLE TRUE OUTPUT_NAME "${PLUGIN_OUTPUT_NAME}" diff --git a/ear-production-suite-plugins/CMakeLists.txt b/ear-production-suite-plugins/CMakeLists.txt index 4f04261d5..00d82bc44 100644 --- a/ear-production-suite-plugins/CMakeLists.txt +++ b/ear-production-suite-plugins/CMakeLists.txt @@ -49,6 +49,7 @@ endif() add_subdirectory(lib) add_subdirectory(plugins) +set(EPS_PLUGIN_TARGETS ${EPS_PLUGIN_TARGETS} PARENT_SCOPE) add_subdirectory(tools) add_subdirectory(packaging) if(EAR_PLUGINS_UNIT_TESTS) diff --git a/ear-production-suite-plugins/plugins/CMakeLists.txt b/ear-production-suite-plugins/plugins/CMakeLists.txt index e490cf7a3..951d34da5 100644 --- a/ear-production-suite-plugins/plugins/CMakeLists.txt +++ b/ear-production-suite-plugins/plugins/CMakeLists.txt @@ -5,4 +5,4 @@ add_subdirectory(hoa) add_subdirectory(scene) add_subdirectory(monitoring) add_subdirectory(binaural_monitoring) - +set(EPS_PLUGIN_TARGETS ${EPS_PLUGIN_TARGETS} PARENT_SCOPE) diff --git a/ear-production-suite-plugins/plugins/binaural_monitoring/CMakeLists.txt b/ear-production-suite-plugins/plugins/binaural_monitoring/CMakeLists.txt index 6579d42dd..a046d2a89 100644 --- a/ear-production-suite-plugins/plugins/binaural_monitoring/CMakeLists.txt +++ b/ear-production-suite-plugins/plugins/binaural_monitoring/CMakeLists.txt @@ -65,7 +65,7 @@ add_juce_vst3_plugin( DISPLAY_NAME "EAR Binaural Monitoring" DESCRIPTION "The binaural monitoring plugin" OUTPUT_NAME "EAR Binaural Monitoring") - +set(EPS_PLUGIN_TARGETS ${EPS_PLUGIN_TARGETS} PARENT_SCOPE) target_link_libraries(ear_binaural_monitoring_VST3 PRIVATE ear-plugin-base ear-version bear) install(TARGETS ear_binaural_monitoring_VST3 COMPONENT Plugins DESTINATION "${EPS_PLUGIN_INSTALL_PREFIX}ear-production-suite") diff --git a/ear-production-suite-plugins/plugins/direct_speakers/CMakeLists.txt b/ear-production-suite-plugins/plugins/direct_speakers/CMakeLists.txt index 02e5d8589..ff7f2e54a 100644 --- a/ear-production-suite-plugins/plugins/direct_speakers/CMakeLists.txt +++ b/ear-production-suite-plugins/plugins/direct_speakers/CMakeLists.txt @@ -72,7 +72,7 @@ add_juce_vst3_plugin(direct_speakers DISPLAY_NAME "EAR DirectSpeakers" DESCRIPTION "The metadata input plugin for channel-based audio" OUTPUT_NAME "EAR DirectSpeakers") - +set(EPS_PLUGIN_TARGETS ${EPS_PLUGIN_TARGETS} PARENT_SCOPE) target_link_libraries(direct_speakers_VST3 PRIVATE ear-plugin-base ear-version) target_compile_definitions(direct_speakers_VST3 PRIVATE USE_NEW_DESIGN) diff --git a/ear-production-suite-plugins/plugins/hoa/CMakeLists.txt b/ear-production-suite-plugins/plugins/hoa/CMakeLists.txt index c17acc845..0c9413658 100644 --- a/ear-production-suite-plugins/plugins/hoa/CMakeLists.txt +++ b/ear-production-suite-plugins/plugins/hoa/CMakeLists.txt @@ -68,7 +68,7 @@ add_juce_vst3_plugin(hoa DISPLAY_NAME "EAR HOA" DESCRIPTION "The metadata input plugin for scene-based audio" OUTPUT_NAME "EAR HOA") - +set(EPS_PLUGIN_TARGETS ${EPS_PLUGIN_TARGETS} PARENT_SCOPE) target_link_libraries(hoa_VST3 PRIVATE ear-plugin-base ear-version) install_juce_vst3_plugin(hoa "${EPS_PLUGIN_INSTALL_PREFIX}ear-production-suite") diff --git a/ear-production-suite-plugins/plugins/monitoring/CMakeLists.txt b/ear-production-suite-plugins/plugins/monitoring/CMakeLists.txt index f907cefc0..93e6e171e 100644 --- a/ear-production-suite-plugins/plugins/monitoring/CMakeLists.txt +++ b/ear-production-suite-plugins/plugins/monitoring/CMakeLists.txt @@ -51,6 +51,7 @@ function(add_monitoring_plugin SPEAKER_LAYOUT SPEAKER_LAYOUT_NAME AUDIO_PACK_FOR OUTPUT_NAME "EAR Monitoring ${SPEAKER_LAYOUT}" IDE_FOLDER ${IDE_FOLDER_PLUGINS} ) + set(EPS_PLUGIN_TARGETS ${EPS_PLUGIN_TARGETS} PARENT_SCOPE) target_compile_definitions( ear_monitoring_${SPEAKER_LAYOUT}_VST3 PRIVATE SPEAKER_LAYOUT="${SPEAKER_LAYOUT}" @@ -75,3 +76,4 @@ if(EAR_PLUGINS_BUILD_ALL_MONITORING_PLUGINS) add_monitoring_plugin("4+7+0" "7.1+4H" "AP_00010017" "A9") add_monitoring_plugin("2+7+0" "7.1+2H" "AP_00010016" "AA") endif() +set(EPS_PLUGIN_TARGETS ${EPS_PLUGIN_TARGETS} PARENT_SCOPE) diff --git a/ear-production-suite-plugins/plugins/object/CMakeLists.txt b/ear-production-suite-plugins/plugins/object/CMakeLists.txt index 97c78f878..bccc08a7f 100644 --- a/ear-production-suite-plugins/plugins/object/CMakeLists.txt +++ b/ear-production-suite-plugins/plugins/object/CMakeLists.txt @@ -73,7 +73,7 @@ add_juce_vst3_plugin(object DISPLAY_NAME "EAR Object" DESCRIPTION "The metadata input plugin for objects" OUTPUT_NAME "EAR Object") - +set(EPS_PLUGIN_TARGETS ${EPS_PLUGIN_TARGETS} PARENT_SCOPE) target_include_directories(object_VST3 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) target_link_libraries(object_VST3 PRIVATE ear-plugin-base ear-version) install_juce_vst3_plugin(object "${EPS_PLUGIN_INSTALL_PREFIX}ear-production-suite") diff --git a/ear-production-suite-plugins/plugins/scene/CMakeLists.txt b/ear-production-suite-plugins/plugins/scene/CMakeLists.txt index e199a9823..c774b2a76 100644 --- a/ear-production-suite-plugins/plugins/scene/CMakeLists.txt +++ b/ear-production-suite-plugins/plugins/scene/CMakeLists.txt @@ -97,7 +97,7 @@ add_juce_vst3_plugin(scene DISPLAY_NAME "EAR Scene" DESCRIPTION "The scene plugin" OUTPUT_NAME "EAR Scene") - +set(EPS_PLUGIN_TARGETS ${EPS_PLUGIN_TARGETS} PARENT_SCOPE) target_link_libraries(scene_VST3 PRIVATE ear-plugin-base ear-version) install_juce_vst3_plugin(scene "${EPS_PLUGIN_INSTALL_PREFIX}ear-production-suite") From 86da81eafb4007780796f52f77b661f7ac27b702 Mon Sep 17 00:00:00 2001 From: Matt Firth Date: Sun, 17 Mar 2024 20:14:57 +0000 Subject: [PATCH 08/23] Copy setup resources in to bundle as post build step This allows for testing of the setup application without needed packaging --- tools/setup/CMakeLists.txt | 51 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/tools/setup/CMakeLists.txt b/tools/setup/CMakeLists.txt index 6eeac242c..48e186bea 100644 --- a/tools/setup/CMakeLists.txt +++ b/tools/setup/CMakeLists.txt @@ -91,6 +91,57 @@ add_custom_command(TARGET setup PRE_BUILD COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/helpers/gen_license_header.cmake ) +if(APPLE) + + # Setup needs all the bits of the EPS in the Resources of the bundle to work + # - copy all in to the bundle as a post-build step which will allow for testing without needing packaging + + add_dependencies(setup ${EPS_PLUGIN_TARGETS}) + add_dependencies(setup adm_export_source_VST3) + add_dependencies(setup project_upgrade_gui project_upgrade) + add_dependencies(setup reaper_adm) + + add_custom_command(TARGET setup POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory $ $/Resources/VST3/$ + ) + + add_custom_command(TARGET setup POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory $ $/Resources/Tools/$ + ) + + foreach(TGT IN LISTS EPS_PLUGIN_TARGETS) + add_custom_command(TARGET setup POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory $ $/Resources/VST3/ear-production-suite/$ + ) + endforeach() + + add_custom_command(TARGET setup POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy $ $/Resources/Tools/ + ) + + add_custom_command(TARGET setup POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy $ $/Resources/UserPlugins/$ + ) + + add_custom_command(TARGET setup POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/reaper-adm-extension/src/reaper_adm/ADMPresets $/Resources/UserPlugins/ADMPresets + ) + + add_custom_command(TARGET setup POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/packaging/Templates $/Resources/Templates + ) + + # Setup requires LICENSE.pdf and README.pdf but these only get generated during packaging + # Just put blank files in for now + add_custom_command(TARGET setup POST_BUILD + COMMAND ${CMAKE_COMMAND} -E touch $/Resources/LICENSE.pdf + ) + add_custom_command(TARGET setup POST_BUILD + COMMAND ${CMAKE_COMMAND} -E touch $/Resources/README.pdf + ) + +endif() + set_target_properties(setup PROPERTIES FOLDER tools) target_link_libraries(setup PRIVATE Juce::core ear-version) target_include_directories(setup PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${EPS_SHARED_DIR}) From d09c41b8418f221f749791156253e384ba1b5bbb Mon Sep 17 00:00:00 2001 From: Matt Firth Date: Sun, 17 Mar 2024 21:37:20 +0000 Subject: [PATCH 09/23] Update packaging install locations --- packaging/CMakeLists.txt | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/packaging/CMakeLists.txt b/packaging/CMakeLists.txt index b60b3ef68..e8660946d 100644 --- a/packaging/CMakeLists.txt +++ b/packaging/CMakeLists.txt @@ -31,17 +31,6 @@ add_custom_target(generate-package-docs "${CMAKE_CURRENT_LIST_DIR}/LICENSE.pdf" ) -install(DIRECTORY - Templates - DESTINATION - .) - -install(FILES - README.pdf - LICENSE.pdf - DESTINATION - .) - if(NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") if(WIN32) install(FILES @@ -56,11 +45,29 @@ if(NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") .) endif() -install(TARGETS - project_upgrade - project_upgrade_gui +install(FILES + README.pdf + LICENSE.pdf DESTINATION - ./Tools) + .) + +if(APPLE) + install(FILES + README.pdf + LICENSE.pdf + DESTINATION + "./Setup\ EAR\ Production\ Suite.app/Content/Resources") +else() + install(DIRECTORY + Templates + DESTINATION + .) + install(TARGETS + project_upgrade + project_upgrade_gui + DESTINATION + ./Tools) +endif() set(CPACK_GENERATOR "ZIP") set(CPACK_PACKAGE_NAME "EAR Production Suite") From 7b1680ffa659e3b0460b54b79237f3252e402d16 Mon Sep 17 00:00:00 2001 From: Matt Firth Date: Mon, 18 Mar 2024 00:22:21 +0000 Subject: [PATCH 10/23] Try install components to app resources during packaging --- .github/workflows/build.yml | 11 ++++++++--- tools/setup/CMakeLists.txt | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 167dfa41a..bc6e34e85 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -149,7 +149,12 @@ jobs: file(TO_NATIVE_PATH "${RUNNER_WORKSPACE}/${INSTALL_DIR}" PREFIX) file(APPEND "$ENV{GITHUB_OUTPUT}" "install_prefix=${PREFIX}\n") file(APPEND "$ENV{GITHUB_OUTPUT}" "install_dir=${INSTALL_DIR}\n") - + if(APPLE) + file(APPEND "$ENV{GITHUB_OUTPUT}" "install_prefix_setup=${PREFIX}/../..\n") + else() + file(APPEND "$ENV{GITHUB_OUTPUT}" "install_prefix_setup=${PREFIX}\n") + endif() + - name: 'Windows: set up developer environment' uses: ilammy/msvc-dev-cmd@v1 if: matrix.config.os == 'windows-latest' @@ -202,7 +207,7 @@ jobs: - name: 'unix: Tar output dir.' if: ${{ matrix.config.package && !startsWith(matrix.config.os, 'windows') }} - run: tar -cvf ${{ steps.cmake_install_prefix.outputs.install_dir }}.tar -C ${{ steps.cmake_install_prefix.outputs.install_prefix }} . + run: tar -cvf ${{ steps.cmake_install_prefix.outputs.install_dir }}.tar -C ${{ steps.cmake_install_prefix.outputs.install_prefix_setup }} . - name: 'unix: Upload Tar as build artifact.' if: ${{ matrix.config.package && !startsWith(matrix.config.os, 'windows') }} @@ -216,7 +221,7 @@ jobs: uses: actions/upload-artifact@v2 with: name: ${{ steps.cmake_install_prefix.outputs.install_dir }} - path: ${{ steps.cmake_install_prefix.outputs.install_prefix }} + path: ${{ steps.cmake_install_prefix.outputs.install_prefix_setup }} - name: 'Windows Disk Space' if: matrix.config.os == 'windows-latest' diff --git a/tools/setup/CMakeLists.txt b/tools/setup/CMakeLists.txt index 48e186bea..20412157e 100644 --- a/tools/setup/CMakeLists.txt +++ b/tools/setup/CMakeLists.txt @@ -91,7 +91,7 @@ add_custom_command(TARGET setup PRE_BUILD COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/helpers/gen_license_header.cmake ) -if(APPLE) +if(APPLE AND NOT EPS_CI) # Setup needs all the bits of the EPS in the Resources of the bundle to work # - copy all in to the bundle as a post-build step which will allow for testing without needing packaging From bb24cda0a8d3c3eb0c397b98c862b97b6f6c51a0 Mon Sep 17 00:00:00 2001 From: Matt Firth Date: Mon, 18 Mar 2024 00:43:28 +0000 Subject: [PATCH 11/23] Correct install paths --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bc6e34e85..de2a3b921 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -147,12 +147,12 @@ jobs: file(TO_CMAKE_PATH "$ENV{RUNNER_WORKSPACE}" RUNNER_WORKSPACE) set(INSTALL_DIR "${NAME_NO_SPACES}") file(TO_NATIVE_PATH "${RUNNER_WORKSPACE}/${INSTALL_DIR}" PREFIX) - file(APPEND "$ENV{GITHUB_OUTPUT}" "install_prefix=${PREFIX}\n") + file(APPEND "$ENV{GITHUB_OUTPUT}" "install_prefix_setup=${PREFIX}\n") file(APPEND "$ENV{GITHUB_OUTPUT}" "install_dir=${INSTALL_DIR}\n") if(APPLE) - file(APPEND "$ENV{GITHUB_OUTPUT}" "install_prefix_setup=${PREFIX}/../..\n") + file(APPEND "$ENV{GITHUB_OUTPUT}" "install_prefix=${PREFIX}/Setup\ EAR\ Production\ Suite.app/Content/Resources\n") else() - file(APPEND "$ENV{GITHUB_OUTPUT}" "install_prefix_setup=${PREFIX}\n") + file(APPEND "$ENV{GITHUB_OUTPUT}" "install_prefix=${PREFIX}\n") endif() - name: 'Windows: set up developer environment' From dc04001d179fab33d0298ddfab432a3e54e8cb34 Mon Sep 17 00:00:00 2001 From: Matt Firth Date: Mon, 18 Mar 2024 01:01:10 +0000 Subject: [PATCH 12/23] Fix setup install path on macos when packaging --- packaging/CMakeLists.txt | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/packaging/CMakeLists.txt b/packaging/CMakeLists.txt index e8660946d..6964aaae6 100644 --- a/packaging/CMakeLists.txt +++ b/packaging/CMakeLists.txt @@ -31,32 +31,41 @@ add_custom_target(generate-package-docs "${CMAKE_CURRENT_LIST_DIR}/LICENSE.pdf" ) -if(NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") - if(WIN32) - install(FILES - install_list.xml - uninstall_list.xml - DESTINATION - ./SetupFiles) - endif() - install(TARGETS - setup - DESTINATION - .) -endif() - install(FILES README.pdf LICENSE.pdf DESTINATION .) - + if(APPLE) install(FILES README.pdf LICENSE.pdf DESTINATION "./Setup\ EAR\ Production\ Suite.app/Content/Resources") + install(TARGETS + setup + DESTINATION + ../../../) +elseif(WIN32) + install(FILES + install_list.xml + uninstall_list.xml + DESTINATION + ./SetupFiles) + install(TARGETS + setup + DESTINATION + .) + install(DIRECTORY + Templates + DESTINATION + .) + install(TARGETS + project_upgrade + project_upgrade_gui + DESTINATION + ./Tools) else() install(DIRECTORY Templates From 2b26eb1ee514527cdcb2960d86321dd7f630e21d Mon Sep 17 00:00:00 2001 From: Matt Firth Date: Mon, 18 Mar 2024 01:18:50 +0000 Subject: [PATCH 13/23] Correct "Content" in paths --- .github/workflows/build.yml | 2 +- packaging/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index de2a3b921..3cf358f15 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -150,7 +150,7 @@ jobs: file(APPEND "$ENV{GITHUB_OUTPUT}" "install_prefix_setup=${PREFIX}\n") file(APPEND "$ENV{GITHUB_OUTPUT}" "install_dir=${INSTALL_DIR}\n") if(APPLE) - file(APPEND "$ENV{GITHUB_OUTPUT}" "install_prefix=${PREFIX}/Setup\ EAR\ Production\ Suite.app/Content/Resources\n") + file(APPEND "$ENV{GITHUB_OUTPUT}" "install_prefix=${PREFIX}/Setup\ EAR\ Production\ Suite.app/Contents/Resources\n") else() file(APPEND "$ENV{GITHUB_OUTPUT}" "install_prefix=${PREFIX}\n") endif() diff --git a/packaging/CMakeLists.txt b/packaging/CMakeLists.txt index 6964aaae6..ce9d7b002 100644 --- a/packaging/CMakeLists.txt +++ b/packaging/CMakeLists.txt @@ -42,7 +42,7 @@ if(APPLE) README.pdf LICENSE.pdf DESTINATION - "./Setup\ EAR\ Production\ Suite.app/Content/Resources") + "./Setup\ EAR\ Production\ Suite.app/Contents/Resources") install(TARGETS setup DESTINATION From bef3c7147b7c6172050f3e7773329690f49acd23 Mon Sep 17 00:00:00 2001 From: Matt Firth Date: Mon, 18 Mar 2024 01:30:28 +0000 Subject: [PATCH 14/23] Correct path for readmes and license on macos --- packaging/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packaging/CMakeLists.txt b/packaging/CMakeLists.txt index ce9d7b002..435ff75fe 100644 --- a/packaging/CMakeLists.txt +++ b/packaging/CMakeLists.txt @@ -42,7 +42,7 @@ if(APPLE) README.pdf LICENSE.pdf DESTINATION - "./Setup\ EAR\ Production\ Suite.app/Contents/Resources") + ../../../) install(TARGETS setup DESTINATION From ece886deb49307fcbb9748752b8eb2d7420933bd Mon Sep 17 00:00:00 2001 From: Matt Firth Date: Mon, 18 Mar 2024 02:26:07 +0000 Subject: [PATCH 15/23] Don't forget proj upgrade tools --- packaging/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packaging/CMakeLists.txt b/packaging/CMakeLists.txt index 435ff75fe..515278ea8 100644 --- a/packaging/CMakeLists.txt +++ b/packaging/CMakeLists.txt @@ -47,6 +47,11 @@ if(APPLE) setup DESTINATION ../../../) + install(TARGETS + project_upgrade + project_upgrade_gui + DESTINATION + ./Tools) elseif(WIN32) install(FILES install_list.xml From 05e7396bc1a18f3861c85be8b2671d5451c8ed09 Mon Sep 17 00:00:00 2001 From: Matt Firth Date: Mon, 18 Mar 2024 02:41:07 +0000 Subject: [PATCH 16/23] Don't forget Templates (and general tidy) --- packaging/CMakeLists.txt | 44 ++++++++++++++++------------------------ 1 file changed, 18 insertions(+), 26 deletions(-) diff --git a/packaging/CMakeLists.txt b/packaging/CMakeLists.txt index 515278ea8..aafd326b2 100644 --- a/packaging/CMakeLists.txt +++ b/packaging/CMakeLists.txt @@ -30,29 +30,40 @@ add_custom_target(generate-package-docs "${CMAKE_CURRENT_LIST_DIR}/README.pdf" "${CMAKE_CURRENT_LIST_DIR}/LICENSE.pdf" ) - + +# Common Files (all OS) +# note: '.' is "Setup EAR Production Suite.app/Contents/Resources" on MacOS install(FILES README.pdf LICENSE.pdf DESTINATION .) +install(TARGETS + project_upgrade + project_upgrade_gui + DESTINATION + ./Tools) +install(DIRECTORY + Templates + DESTINATION + .) if(APPLE) + # '.' is currectly Resources dir. Need these installing at base dir too. install(FILES README.pdf LICENSE.pdf DESTINATION ../../../) + # Back-up to base dir for setup install location install(TARGETS setup DESTINATION ../../../) - install(TARGETS - project_upgrade - project_upgrade_gui - DESTINATION - ./Tools) -elseif(WIN32) +endif() + +if(WIN32) + # Win tidies manifests in to a subdir. Note MacOS doesn't need as already has manifests in bundle (as a build-time copy step). install(FILES install_list.xml uninstall_list.xml @@ -62,25 +73,6 @@ elseif(WIN32) setup DESTINATION .) - install(DIRECTORY - Templates - DESTINATION - .) - install(TARGETS - project_upgrade - project_upgrade_gui - DESTINATION - ./Tools) -else() - install(DIRECTORY - Templates - DESTINATION - .) - install(TARGETS - project_upgrade - project_upgrade_gui - DESTINATION - ./Tools) endif() set(CPACK_GENERATOR "ZIP") From ce3b8971787c6d24ab244150a4c0cfb7e515805e Mon Sep 17 00:00:00 2001 From: Matt Firth Date: Mon, 18 Mar 2024 10:46:21 +0000 Subject: [PATCH 17/23] Codesigning status --- packaging/codesign/codesign.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packaging/codesign/codesign.py b/packaging/codesign/codesign.py index 8b6602ea2..4a178614e 100644 --- a/packaging/codesign/codesign.py +++ b/packaging/codesign/codesign.py @@ -3,8 +3,12 @@ import os from glob import glob +def status(message): + print("\n>>>>>>>>>> " + message + "\n") + def sign(certificate): # Sign all plugins + status("Signing plugins...") plugins = glob(os.path.join("tmp/VST3/ear-production-suite", "*.vst3")) plugins.append("tmp/VST3/ADM Export Source.vst3") for p in plugins: @@ -15,20 +19,24 @@ def sign(certificate): "-s", certificate, "tmp/Setup EAR Production Suite.app"]) # Sign project upgrade gui app bundle + status("Signing project upgrade gui app...") subprocess.run(["xcrun", "codesign", "--timestamp", "--options", "runtime", "-s", certificate, "tmp/Tools/Project Upgrade Utility GUI.app"]) # REAPER extension is naked dylib so no Info.plist to derive identifier from, specify on command line + status("Signing reaper extension...") subprocess.run(["xcrun", "codesign", "--timestamp", "--options", "runtime", "-i", "ch.ebu.eps.reaper_adm", "-s", certificate, "tmp/UserPlugins/reaper_adm.dylib"]) # Project upgrade command line exe has no Info.plist to derive identifier from, specify on command line + status("Signing project upgrade cli tool...") subprocess.run(["xcrun", "codesign", "--timestamp", "--options", "runtime", "-i", "ch.ebu.eps.reaper_project_upgrade", "-s", certificate, "tmp/Tools/project_upgrade"]) def extract(fileName): + status("Extracting...") subprocess.run(["tar", "-xvf", fileName]) tarFile = fileName.replace("zip", "tar") subprocess.run(["rm", "-rf", "tmp/"]) @@ -37,11 +45,13 @@ def extract(fileName): subprocess.run(["rm", tarFile]) def createDmg(outputname): + status("Creating disk image...") dmgFile = outputname + ".dmg" volName = outputname subprocess.run(["hdiutil", "create", "-volname", volName, "-srcfolder", "./tmp", "-ov", "-format", "UDZO", dmgFile]) def signDmg(certificate, outputname): + status("Signing disk image...") dmgFile = outputname + ".dmg" subprocess.run(["xcrun", "codesign", "-s", certificate, dmgFile]) From e21b6e233322f719cab22d96e9a690c79223f760 Mon Sep 17 00:00:00 2001 From: Matt Firth Date: Mon, 18 Mar 2024 11:12:09 +0000 Subject: [PATCH 18/23] Update codesign.py paths --- packaging/codesign/codesign.py | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/packaging/codesign/codesign.py b/packaging/codesign/codesign.py index 4a178614e..75a9ecb6e 100644 --- a/packaging/codesign/codesign.py +++ b/packaging/codesign/codesign.py @@ -9,31 +9,33 @@ def status(message): def sign(certificate): # Sign all plugins status("Signing plugins...") - plugins = glob(os.path.join("tmp/VST3/ear-production-suite", "*.vst3")) - plugins.append("tmp/VST3/ADM Export Source.vst3") + plugins = glob(os.path.join("tmp/Setup EAR Production Suite.app/Contents/Resources/VST3/ear-production-suite", "*.vst3")) + plugins.append("tmp/Setup EAR Production Suite.app/Contents/Resources/VST3/ADM Export Source.vst3") for p in plugins: + print(" " + p) subprocess.run(["xcrun", "codesign", "--timestamp", "--options", "runtime", "-s", certificate, p]) - # Sign setup app bundle - subprocess.run(["xcrun", "codesign", "--timestamp", "--options", "runtime", - "-s", certificate, "tmp/Setup EAR Production Suite.app"]) - - # Sign project upgrade gui app bundle - status("Signing project upgrade gui app...") - subprocess.run(["xcrun", "codesign", "--timestamp", "--options", "runtime", - "-s", certificate, "tmp/Tools/Project Upgrade Utility GUI.app"]) - # REAPER extension is naked dylib so no Info.plist to derive identifier from, specify on command line status("Signing reaper extension...") subprocess.run(["xcrun", "codesign", "--timestamp", "--options", "runtime", "-i", "ch.ebu.eps.reaper_adm", - "-s", certificate, "tmp/UserPlugins/reaper_adm.dylib"]) + "-s", certificate, "tmp/Setup EAR Production Suite.app/Contents/Resources/UserPlugins/reaper_adm.dylib"]) + + # Sign project upgrade gui app bundle + status("Signing project upgrade gui app...") + subprocess.run(["xcrun", "codesign", "--timestamp", "--options", "runtime", + "-s", certificate, "tmp/Setup EAR Production Suite.app/Contents/Resources/Tools/Project Upgrade Utility GUI.app"]) # Project upgrade command line exe has no Info.plist to derive identifier from, specify on command line status("Signing project upgrade cli tool...") subprocess.run(["xcrun", "codesign", "--timestamp", "--options", "runtime", "-i", "ch.ebu.eps.reaper_project_upgrade", - "-s", certificate, "tmp/Tools/project_upgrade"]) + "-s", certificate, "tmp/Setup EAR Production Suite.app/Contents/Resources/Tools/project_upgrade"]) + + # Sign setup app bundle + status("Signing setup app...") + subprocess.run(["xcrun", "codesign", "--timestamp", "--options", "runtime", + "-s", certificate, "tmp/Setup EAR Production Suite.app"]) def extract(fileName): status("Extracting...") From 6de486306de9a81db0b926b6240f8ceced14d7c5 Mon Sep 17 00:00:00 2001 From: Matt Firth Date: Tue, 19 Mar 2024 16:32:10 +0000 Subject: [PATCH 19/23] Update comment --- shared/version/eps_version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/version/eps_version.h b/shared/version/eps_version.h index f1294a66a..4086cec5a 100644 --- a/shared/version/eps_version.h +++ b/shared/version/eps_version.h @@ -5,7 +5,7 @@ namespace eps { // baseVersion is the numeric-only version string. /// It consists of 3 parts (or 4 if "tweak" portion is available and is purely numeric) - /// [major].[minor].[patch(revision)] (or [major].[minor].[patch(revision)].[tweak]) + /// [major].[minor].[patch(revision)] (or [major].[minor].[patch(revision)][tweak]) extern std::string const& baseVersion(); // currentVersion is the complete, descriptive version string. From 56a1b236c741730809e11963163ad8ff372511f9 Mon Sep 17 00:00:00 2001 From: Matt Firth Date: Tue, 19 Mar 2024 17:13:08 +0000 Subject: [PATCH 20/23] Revert "Update comment" This reverts commit 6de486306de9a81db0b926b6240f8ceced14d7c5. --- shared/version/eps_version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/version/eps_version.h b/shared/version/eps_version.h index 4086cec5a..f1294a66a 100644 --- a/shared/version/eps_version.h +++ b/shared/version/eps_version.h @@ -5,7 +5,7 @@ namespace eps { // baseVersion is the numeric-only version string. /// It consists of 3 parts (or 4 if "tweak" portion is available and is purely numeric) - /// [major].[minor].[patch(revision)] (or [major].[minor].[patch(revision)][tweak]) + /// [major].[minor].[patch(revision)] (or [major].[minor].[patch(revision)].[tweak]) extern std::string const& baseVersion(); // currentVersion is the complete, descriptive version string. From bd911d53deed358c97cc748cd634cd5165c4c0f0 Mon Sep 17 00:00:00 2001 From: Matt Firth Date: Tue, 19 Mar 2024 17:16:21 +0000 Subject: [PATCH 21/23] Use common target_sources call for setup --- tools/setup/CMakeLists.txt | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/tools/setup/CMakeLists.txt b/tools/setup/CMakeLists.txt index 20412157e..fcd739a46 100644 --- a/tools/setup/CMakeLists.txt +++ b/tools/setup/CMakeLists.txt @@ -48,13 +48,14 @@ set(SOURCES_SETUP source_group("Header Files" FILES ${HEADERS_SETUP}) +target_sources(setup + PRIVATE + ${HEADERS_SETUP} + ${SOURCES_SETUP} +) + if(APPLE) - target_sources(setup - PRIVATE - ${HEADERS_SETUP} - ${SOURCES_SETUP} - icon.icns - ) + target_sources(setup PRIVATE icon.icns) set_target_properties(setup PROPERTIES OUTPUT_NAME "Setup EAR Production Suite" XCODE_ATTRIBUTE_EXECUTABLE_NAME "Setup EAR Production Suite" @@ -68,6 +69,7 @@ if(APPLE) COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/packaging/uninstall_list.xml $/../Resources/uninstall_list.xml ) endif() + if(WIN32) target_sources(setup PRIVATE From 976ea2e0f98807093d40976ce06a47a3c882d30a Mon Sep 17 00:00:00 2001 From: Matt Firth Date: Tue, 19 Mar 2024 17:17:17 +0000 Subject: [PATCH 22/23] Fix tab/space mess --- tools/setup/CMakeLists.txt | 110 ++++++++++++++++++------------------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/tools/setup/CMakeLists.txt b/tools/setup/CMakeLists.txt index fcd739a46..4cb6f4c80 100644 --- a/tools/setup/CMakeLists.txt +++ b/tools/setup/CMakeLists.txt @@ -12,38 +12,38 @@ set(MACOSX_BUNDLE_COPYRIGHT "(C) 2019-2024 BBC, (C) 2020-2021 EBU, (C) 2019-2021 add_executable(setup WIN32 MACOSX_BUNDLE) set(HEADERS_SETUP - MainComponent.h - WindowBody.h - install_phases/component_initial.h - install_phases/component_license.h - install_phases/component_select_operation.h - install_phases/component_install_locations.h - install_phases/component_error_log.h - install_phases/component_uninstall_confirm.h - install_phases/component_existing_search.h - install_phases/component_processing.h - install_phases/component_complete.h - helpers/manifests.h - ${EPS_SHARED_DIR}/helper/resource_paths_juce-file.hpp - ${EPS_SHARED_DIR}/update_check_settings_file.h + MainComponent.h + WindowBody.h + install_phases/component_initial.h + install_phases/component_license.h + install_phases/component_select_operation.h + install_phases/component_install_locations.h + install_phases/component_error_log.h + install_phases/component_uninstall_confirm.h + install_phases/component_existing_search.h + install_phases/component_processing.h + install_phases/component_complete.h + helpers/manifests.h + ${EPS_SHARED_DIR}/helper/resource_paths_juce-file.hpp + ${EPS_SHARED_DIR}/update_check_settings_file.h ) set(SOURCES_SETUP - Main.cpp - MainComponent.cpp - WindowBody.cpp - install_phases/component_initial.cpp - install_phases/component_license.cpp - install_phases/component_select_operation.cpp - install_phases/component_install_locations.cpp - install_phases/component_error_log.cpp - install_phases/component_uninstall_confirm.cpp - install_phases/component_existing_search.cpp - install_phases/component_processing.cpp - install_phases/component_complete.cpp - helpers/manifests.cpp - ${EPS_SHARED_DIR}/binary_data.cpp - ${EPS_SHARED_DIR}/update_check_settings_file.cpp + Main.cpp + MainComponent.cpp + WindowBody.cpp + install_phases/component_initial.cpp + install_phases/component_license.cpp + install_phases/component_select_operation.cpp + install_phases/component_install_locations.cpp + install_phases/component_error_log.cpp + install_phases/component_uninstall_confirm.cpp + install_phases/component_existing_search.cpp + install_phases/component_processing.cpp + install_phases/component_complete.cpp + helpers/manifests.cpp + ${EPS_SHARED_DIR}/binary_data.cpp + ${EPS_SHARED_DIR}/update_check_settings_file.cpp ) source_group("Header Files" FILES ${HEADERS_SETUP}) @@ -55,43 +55,43 @@ target_sources(setup ) if(APPLE) - target_sources(setup PRIVATE icon.icns) - set_target_properties(setup PROPERTIES + target_sources(setup PRIVATE icon.icns) + set_target_properties(setup PROPERTIES OUTPUT_NAME "Setup EAR Production Suite" XCODE_ATTRIBUTE_EXECUTABLE_NAME "Setup EAR Production Suite" MACOSX_BUNDLE TRUE) - set_source_files_properties(icon.icns PROPERTIES - MACOSX_PACKAGE_LOCATION "Resources") - add_custom_command(TARGET setup POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/packaging/install_list.xml $/../Resources/install_list.xml - ) - add_custom_command(TARGET setup POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/packaging/uninstall_list.xml $/../Resources/uninstall_list.xml - ) + set_source_files_properties(icon.icns PROPERTIES + MACOSX_PACKAGE_LOCATION "Resources") + add_custom_command(TARGET setup POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/packaging/install_list.xml $/../Resources/install_list.xml + ) + add_custom_command(TARGET setup POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/packaging/uninstall_list.xml $/../Resources/uninstall_list.xml + ) endif() if(WIN32) - target_sources(setup - PRIVATE - ${HEADERS_SETUP} - ${SOURCES_SETUP} - ) - set_target_properties(setup PROPERTIES + target_sources(setup + PRIVATE + ${HEADERS_SETUP} + ${SOURCES_SETUP} + ) + set_target_properties(setup PROPERTIES OUTPUT_NAME "setup" WIN32_EXECUTABLE TRUE) - target_link_options(setup PRIVATE "/MANIFESTUAC:level='requireAdministrator'") - add_custom_command(TARGET setup POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/packaging/install_list.xml $/SetupFiles/install_list.xml - ) - add_custom_command(TARGET setup POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/packaging/uninstall_list.xml $/SetupFiles/uninstall_list.xml - ) + target_link_options(setup PRIVATE "/MANIFESTUAC:level='requireAdministrator'") + add_custom_command(TARGET setup POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/packaging/install_list.xml $/SetupFiles/install_list.xml + ) + add_custom_command(TARGET setup POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/packaging/uninstall_list.xml $/SetupFiles/uninstall_list.xml + ) endif() add_custom_command(TARGET setup PRE_BUILD - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/helpers - COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/helpers/gen_license_header.cmake - ) + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/helpers + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/helpers/gen_license_header.cmake +) if(APPLE AND NOT EPS_CI) From f8afca7470eec993e4d27cfe763efe001306c96e Mon Sep 17 00:00:00 2001 From: Matt Firth Date: Tue, 19 Mar 2024 17:39:39 +0000 Subject: [PATCH 23/23] Avoid passing up var by using CACHE INTERNAL --- CMakeLists.txt | 2 +- cmake_modules/juce_helpers.cmake | 9 +++++---- ear-production-suite-plugins/CMakeLists.txt | 1 - ear-production-suite-plugins/plugins/CMakeLists.txt | 1 - .../plugins/binaural_monitoring/CMakeLists.txt | 5 +++-- .../plugins/direct_speakers/CMakeLists.txt | 5 +++-- .../plugins/hoa/CMakeLists.txt | 5 +++-- .../plugins/monitoring/CMakeLists.txt | 10 +++++----- .../plugins/object/CMakeLists.txt | 5 +++-- .../plugins/scene/CMakeLists.txt | 5 +++-- 10 files changed, 26 insertions(+), 22 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f4874fe0..bd206610b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,7 +52,7 @@ set(EPS_SHARED_DIR ${CMAKE_CURRENT_SOURCE_DIR}/shared) set(JUCE_SUPPORT_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/shared/resources) add_subdirectory(${EPS_SHARED_DIR}/version) -set(EPS_PLUGIN_TARGETS) +set(EPS_PLUGIN_TARGETS "" CACHE INTERNAL "") add_subdirectory(ear-production-suite-plugins) add_subdirectory(reaper-adm-extension) add_subdirectory(reaper-adm-export-source-plugin) diff --git a/cmake_modules/juce_helpers.cmake b/cmake_modules/juce_helpers.cmake index 209d43996..ff8568b98 100644 --- a/cmake_modules/juce_helpers.cmake +++ b/cmake_modules/juce_helpers.cmake @@ -1,6 +1,6 @@ function(add_juce_vst3_plugin PLUGIN_NAME) set(options) - set(oneValueArgs IDE_FOLDER DESCRIPTION DISPLAY_NAME OUTPUT_NAME CODE_PREFIX CODE_SUFFIX) + set(oneValueArgs IDE_FOLDER DESCRIPTION DISPLAY_NAME OUTPUT_NAME CODE_PREFIX CODE_SUFFIX IS_EPS_PLUGIN) set(multiValueArgs SOURCES) cmake_parse_arguments(PLUGIN "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) @@ -38,9 +38,10 @@ function(add_juce_vst3_plugin PLUGIN_NAME) target_include_directories(${PLUGIN_NAME}_VST3 PRIVATE ${_SUPPORT_PATH}/ ${EPS_SHARED_DIR}) target_link_libraries(${PLUGIN_NAME}_VST3 PRIVATE Juce::VST3) - set(EPS_PLUGIN_TARGETS_COPY ${EPS_PLUGIN_TARGETS}) - list(APPEND EPS_PLUGIN_TARGETS_COPY ${PLUGIN_NAME}_VST3 ) - set(EPS_PLUGIN_TARGETS ${EPS_PLUGIN_TARGETS_COPY} PARENT_SCOPE) + if(PLUGIN_IS_EPS_PLUGIN) + list(APPEND EPS_PLUGIN_TARGETS ${PLUGIN_NAME}_VST3) + set(EPS_PLUGIN_TARGETS ${EPS_PLUGIN_TARGETS} CACHE INTERNAL "") + endif() set_target_properties(${PLUGIN_NAME}_VST3 PROPERTIES BUNDLE TRUE diff --git a/ear-production-suite-plugins/CMakeLists.txt b/ear-production-suite-plugins/CMakeLists.txt index 00d82bc44..4f04261d5 100644 --- a/ear-production-suite-plugins/CMakeLists.txt +++ b/ear-production-suite-plugins/CMakeLists.txt @@ -49,7 +49,6 @@ endif() add_subdirectory(lib) add_subdirectory(plugins) -set(EPS_PLUGIN_TARGETS ${EPS_PLUGIN_TARGETS} PARENT_SCOPE) add_subdirectory(tools) add_subdirectory(packaging) if(EAR_PLUGINS_UNIT_TESTS) diff --git a/ear-production-suite-plugins/plugins/CMakeLists.txt b/ear-production-suite-plugins/plugins/CMakeLists.txt index 951d34da5..e8e347ad6 100644 --- a/ear-production-suite-plugins/plugins/CMakeLists.txt +++ b/ear-production-suite-plugins/plugins/CMakeLists.txt @@ -5,4 +5,3 @@ add_subdirectory(hoa) add_subdirectory(scene) add_subdirectory(monitoring) add_subdirectory(binaural_monitoring) -set(EPS_PLUGIN_TARGETS ${EPS_PLUGIN_TARGETS} PARENT_SCOPE) diff --git a/ear-production-suite-plugins/plugins/binaural_monitoring/CMakeLists.txt b/ear-production-suite-plugins/plugins/binaural_monitoring/CMakeLists.txt index a046d2a89..f3aefac59 100644 --- a/ear-production-suite-plugins/plugins/binaural_monitoring/CMakeLists.txt +++ b/ear-production-suite-plugins/plugins/binaural_monitoring/CMakeLists.txt @@ -64,8 +64,9 @@ add_juce_vst3_plugin( CODE_SUFFIX "F0" # Speaker Monitoring suffixes start from A0 and increment. For bin, lets use F0 (Note FF is scene) DISPLAY_NAME "EAR Binaural Monitoring" DESCRIPTION "The binaural monitoring plugin" - OUTPUT_NAME "EAR Binaural Monitoring") -set(EPS_PLUGIN_TARGETS ${EPS_PLUGIN_TARGETS} PARENT_SCOPE) + OUTPUT_NAME "EAR Binaural Monitoring" + IS_EPS_PLUGIN ON) + target_link_libraries(ear_binaural_monitoring_VST3 PRIVATE ear-plugin-base ear-version bear) install(TARGETS ear_binaural_monitoring_VST3 COMPONENT Plugins DESTINATION "${EPS_PLUGIN_INSTALL_PREFIX}ear-production-suite") diff --git a/ear-production-suite-plugins/plugins/direct_speakers/CMakeLists.txt b/ear-production-suite-plugins/plugins/direct_speakers/CMakeLists.txt index ff7f2e54a..92af5bf65 100644 --- a/ear-production-suite-plugins/plugins/direct_speakers/CMakeLists.txt +++ b/ear-production-suite-plugins/plugins/direct_speakers/CMakeLists.txt @@ -71,8 +71,9 @@ add_juce_vst3_plugin(direct_speakers CODE_SUFFIX "10" DISPLAY_NAME "EAR DirectSpeakers" DESCRIPTION "The metadata input plugin for channel-based audio" - OUTPUT_NAME "EAR DirectSpeakers") -set(EPS_PLUGIN_TARGETS ${EPS_PLUGIN_TARGETS} PARENT_SCOPE) + OUTPUT_NAME "EAR DirectSpeakers" + IS_EPS_PLUGIN ON) + target_link_libraries(direct_speakers_VST3 PRIVATE ear-plugin-base ear-version) target_compile_definitions(direct_speakers_VST3 PRIVATE USE_NEW_DESIGN) diff --git a/ear-production-suite-plugins/plugins/hoa/CMakeLists.txt b/ear-production-suite-plugins/plugins/hoa/CMakeLists.txt index 0c9413658..45d7f9e29 100644 --- a/ear-production-suite-plugins/plugins/hoa/CMakeLists.txt +++ b/ear-production-suite-plugins/plugins/hoa/CMakeLists.txt @@ -67,8 +67,9 @@ add_juce_vst3_plugin(hoa CODE_SUFFIX "12" DISPLAY_NAME "EAR HOA" DESCRIPTION "The metadata input plugin for scene-based audio" - OUTPUT_NAME "EAR HOA") -set(EPS_PLUGIN_TARGETS ${EPS_PLUGIN_TARGETS} PARENT_SCOPE) + OUTPUT_NAME "EAR HOA" + IS_EPS_PLUGIN ON) + target_link_libraries(hoa_VST3 PRIVATE ear-plugin-base ear-version) install_juce_vst3_plugin(hoa "${EPS_PLUGIN_INSTALL_PREFIX}ear-production-suite") diff --git a/ear-production-suite-plugins/plugins/monitoring/CMakeLists.txt b/ear-production-suite-plugins/plugins/monitoring/CMakeLists.txt index 93e6e171e..40bccd5bf 100644 --- a/ear-production-suite-plugins/plugins/monitoring/CMakeLists.txt +++ b/ear-production-suite-plugins/plugins/monitoring/CMakeLists.txt @@ -45,19 +45,20 @@ function(add_monitoring_plugin SPEAKER_LAYOUT SPEAKER_LAYOUT_NAME AUDIO_PACK_FOR add_juce_vst3_plugin( ear_monitoring_${SPEAKER_LAYOUT} SOURCES ${SOURCES_MONITORING} ${HEADERS_MONITORING} - CODE_SUFFIX ${PLUGIN_CODE_SUFFIX} + CODE_SUFFIX ${PLUGIN_CODE_SUFFIX} DISPLAY_NAME "EAR Monitoring ${SPEAKER_LAYOUT}" DESCRIPTION "The monitoring plugin (${SPEAKER_LAYOUT})" OUTPUT_NAME "EAR Monitoring ${SPEAKER_LAYOUT}" IDE_FOLDER ${IDE_FOLDER_PLUGINS} - ) - set(EPS_PLUGIN_TARGETS ${EPS_PLUGIN_TARGETS} PARENT_SCOPE) + IS_EPS_PLUGIN ON) + target_compile_definitions( ear_monitoring_${SPEAKER_LAYOUT}_VST3 PRIVATE SPEAKER_LAYOUT="${SPEAKER_LAYOUT}" SPEAKER_LAYOUT_NAME="${SPEAKER_LAYOUT_NAME}" - AUDIO_PACK_FORMAT_ID="${AUDIO_PACK_FORMAT_ID}" + AUDIO_PACK_FORMAT_ID="${AUDIO_PACK_FORMAT_ID}" ) + target_link_libraries(ear_monitoring_${SPEAKER_LAYOUT}_VST3 PRIVATE ear-plugin-base ear-version) install_juce_vst3_plugin(ear_monitoring_${SPEAKER_LAYOUT} "${EPS_PLUGIN_INSTALL_PREFIX}ear-production-suite") endfunction() @@ -76,4 +77,3 @@ if(EAR_PLUGINS_BUILD_ALL_MONITORING_PLUGINS) add_monitoring_plugin("4+7+0" "7.1+4H" "AP_00010017" "A9") add_monitoring_plugin("2+7+0" "7.1+2H" "AP_00010016" "AA") endif() -set(EPS_PLUGIN_TARGETS ${EPS_PLUGIN_TARGETS} PARENT_SCOPE) diff --git a/ear-production-suite-plugins/plugins/object/CMakeLists.txt b/ear-production-suite-plugins/plugins/object/CMakeLists.txt index bccc08a7f..1e813bba6 100644 --- a/ear-production-suite-plugins/plugins/object/CMakeLists.txt +++ b/ear-production-suite-plugins/plugins/object/CMakeLists.txt @@ -72,8 +72,9 @@ add_juce_vst3_plugin(object CODE_SUFFIX "11" DISPLAY_NAME "EAR Object" DESCRIPTION "The metadata input plugin for objects" - OUTPUT_NAME "EAR Object") -set(EPS_PLUGIN_TARGETS ${EPS_PLUGIN_TARGETS} PARENT_SCOPE) + OUTPUT_NAME "EAR Object" + IS_EPS_PLUGIN ON) + target_include_directories(object_VST3 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) target_link_libraries(object_VST3 PRIVATE ear-plugin-base ear-version) install_juce_vst3_plugin(object "${EPS_PLUGIN_INSTALL_PREFIX}ear-production-suite") diff --git a/ear-production-suite-plugins/plugins/scene/CMakeLists.txt b/ear-production-suite-plugins/plugins/scene/CMakeLists.txt index c774b2a76..10496442d 100644 --- a/ear-production-suite-plugins/plugins/scene/CMakeLists.txt +++ b/ear-production-suite-plugins/plugins/scene/CMakeLists.txt @@ -96,8 +96,9 @@ add_juce_vst3_plugin(scene CODE_SUFFIX "FF" DISPLAY_NAME "EAR Scene" DESCRIPTION "The scene plugin" - OUTPUT_NAME "EAR Scene") -set(EPS_PLUGIN_TARGETS ${EPS_PLUGIN_TARGETS} PARENT_SCOPE) + OUTPUT_NAME "EAR Scene" + IS_EPS_PLUGIN ON) + target_link_libraries(scene_VST3 PRIVATE ear-plugin-base ear-version) install_juce_vst3_plugin(scene "${EPS_PLUGIN_INSTALL_PREFIX}ear-production-suite")