diff --git a/.travis.yml b/.travis.yml index ce79862c..47ae06a8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -56,7 +56,7 @@ jobs: env: - INSTALL_DIR="sfizz-${TRAVIS_BRANCH}-${TRAVIS_OS_NAME}-${TRAVIS_CPU_ARCH}" script: .travis/script_osx.sh - after_success: .travis/prepare_osx.sh + after_success: .travis/prepare_tarball.sh - name: "MOD devices arm" env: diff --git a/.travis/prepare_osx.sh b/.travis/prepare_osx.sh deleted file mode 100755 index f9b0c53a..00000000 --- a/.travis/prepare_osx.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash - -set -ex - -test -z "$CONTAINER" - -if ! [ -z "$CONTAINER" ]; then - . .travis/docker_container.sh -else - . .travis/no_container.sh -fi - -cd build -buildenv make DESTDIR=${PWD}/${INSTALL_DIR} install - -# Bundle LV2 dependencies -cd "${INSTALL_DIR}"/Library/Audio/Plug-Ins/LV2 -dylibbundler -cd -of -b -x sfizz.lv2/Contents/Binary/sfizz.so -d sfizz.lv2/Contents/libs/ -p @loader_path/../libs/ -dylibbundler -cd -of -b -x sfizz.lv2/Contents/Binary/sfizz_ui.so -d sfizz.lv2/Contents/libs/ -p @loader_path/../libs/ -cd "${TRAVIS_BUILD_DIR}/build" - -# Bundle VST3 dependencies -cd "${INSTALL_DIR}"/Library/Audio/Plug-Ins/VST3 -dylibbundler -cd -of -b -x sfizz.vst3/Contents/MacOS/sfizz -d sfizz.vst3/Contents/libs/ -p @loader_path/../libs/ -cd "${TRAVIS_BUILD_DIR}/build" - -# Bundle AU dependencies -cd "${INSTALL_DIR}"/Library/Audio/Plug-Ins/Components -dylibbundler -cd -of -b -x sfizz.component/Contents/Resources/plugin.vst3/Contents/MacOS/sfizz -d sfizz.component/Contents/Resources/plugin.vst3/Contents/libs/ -p @loader_path/../libs/ -cd "${TRAVIS_BUILD_DIR}/build" - -# -tar -zcvf "${INSTALL_DIR}.tar.gz" ${INSTALL_DIR} - -# Only release a tarball if there is a tag -if [[ ${TRAVIS_TAG} != "" ]]; then - mv "${INSTALL_DIR}.tar.gz" ${TRAVIS_BUILD_DIR} -fi - -cd "${TRAVIS_BUILD_DIR}" diff --git a/CMakeLists.txt b/CMakeLists.txt index d0d3c7cb..3356da61 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,6 +38,9 @@ include (SfizzConfig) # Don't use IPO in non Release builds include (CheckIPO) +# Dylib bunder for macOS +include (BundleDylibs) + # Add Abseil add_subdirectory (external/abseil-cpp EXCLUDE_FROM_ALL) diff --git a/cmake/BundleDylibs.cmake b/cmake/BundleDylibs.cmake new file mode 100644 index 00000000..abee5c18 --- /dev/null +++ b/cmake/BundleDylibs.cmake @@ -0,0 +1,32 @@ +# Dylib bundler for macOS +# Requires the external program "dylibbundler" + +if(APPLE) + find_program(DYLIBBUNDLER_PROGRAM "dylibbundler") + if(NOT DYLIBBUNDLER_PROGRAM) + message(WARNING "The installation helper \"dylibbundler\" is not available.") + endif() +endif() + +function(bundle_dylibs NAME PATH) + if(NOT APPLE OR NOT DYLIBBUNDLER_PROGRAM) + return() + endif() + + set(_relative_libdir "../libs") + + get_filename_component(_dir "${PATH}" DIRECTORY) + set(_dir "${_dir}/${_relative_libdir}") + + set(_script "${CMAKE_CURRENT_BINARY_DIR}/_bundle-dylibs.${NAME}.cmake") + + file(WRITE "${_script}" +"execute_process(COMMAND \"${DYLIBBUNDLER_PROGRAM}\" + \"-cd\" \"-of\" \"-b\" + \"-x\" \"\$ENV{DESTDIR}${PATH}\" + \"-d\" \"\$ENV{DESTDIR}${_dir}\" + \"-p\" \"@loader_path/${_relative_libdir}/\") +") + + install(SCRIPT "${_script}" ${ARGN}) +endfunction() diff --git a/lv2/CMakeLists.txt b/lv2/CMakeLists.txt index a888ca81..743b26d2 100644 --- a/lv2/CMakeLists.txt +++ b/lv2/CMakeLists.txt @@ -105,6 +105,12 @@ endif() # Installation if (NOT MSVC) - install (DIRECTORY ${PROJECT_BINARY_DIR} DESTINATION ${LV2PLUGIN_INSTALL_DIR} + install(DIRECTORY ${PROJECT_BINARY_DIR} DESTINATION ${LV2PLUGIN_INSTALL_DIR} + COMPONENT "lv2") + bundle_dylibs(lv2 + "${LV2PLUGIN_INSTALL_DIR}/${PROJECT_NAME}.lv2/Contents/Binary/sfizz.so" + COMPONENT "lv2") + bundle_dylibs(lv2-ui + "${LV2PLUGIN_INSTALL_DIR}/${PROJECT_NAME}.lv2/Contents/Binary/sfizz_ui.so" COMPONENT "lv2") endif() diff --git a/vst/CMakeLists.txt b/vst/CMakeLists.txt index ea7f391d..b5db2495 100644 --- a/vst/CMakeLists.txt +++ b/vst/CMakeLists.txt @@ -118,9 +118,12 @@ endif() # Installation if (NOT MSVC) - install (DIRECTORY "${PROJECT_BINARY_DIR}/${VSTPLUGIN_BUNDLE_NAME}" + install(DIRECTORY "${PROJECT_BINARY_DIR}/${VSTPLUGIN_BUNDLE_NAME}" DESTINATION "${VSTPLUGIN_INSTALL_DIR}" COMPONENT "vst") + bundle_dylibs(vst + "${VSTPLUGIN_INSTALL_DIR}/${VSTPLUGIN_BUNDLE_NAME}/Contents/MacOS/sfizz" + COMPONENT "vst") endif() # --- Audio Unit wrapper --- # @@ -296,5 +299,11 @@ elseif(SFIZZ_AU) install(DIRECTORY "${PROJECT_BINARY_DIR}/${VSTPLUGIN_BUNDLE_NAME}/" DESTINATION "${AUPLUGIN_INSTALL_DIR}/${AUPLUGIN_BUNDLE_NAME}/Contents/Resources/plugin.vst3" COMPONENT "au") + bundle_dylibs(au + "${AUPLUGIN_INSTALL_DIR}/${AUPLUGIN_BUNDLE_NAME}/Contents/MacOS/sfizz" + COMPONENT "au") + bundle_dylibs(au-vst + "${AUPLUGIN_INSTALL_DIR}/${AUPLUGIN_BUNDLE_NAME}/Contents/Resources/plugin.vst3/Contents/MacOS/sfizz" + COMPONENT "au") endif() endif()