diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 95de2034..f97df9b8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -206,8 +206,9 @@ jobs: mv ./build/UI/frontend-plugins/${{ env.PLUGIN_NAME }}/${{ env.LIB_NAME }}.so ./${{ env.LIB_NAME }}/bin/64bit/${{ env.LIB_NAME }}.so mv ./UI/frontend-plugins/${{ env.PLUGIN_NAME }}/data ./${{ env.LIB_NAME }}/data # Macro modules + mkdir -p ./${{ env.LIB_NAME }}/bin/64bit/adv-ss-plugins strip -d ./build/UI/frontend-plugins/${{ env.PLUGIN_NAME }}/src/external-macro-modules/opencv/advanced-scene-switcher-opencv.so - mv ./build/UI/frontend-plugins/${{ env.PLUGIN_NAME }}/src/external-macro-modules/opencv/advanced-scene-switcher-opencv.so ./${{ env.LIB_NAME }}/bin/64bit/ + mv ./build/UI/frontend-plugins/${{ env.PLUGIN_NAME }}/src/external-macro-modules/opencv/advanced-scene-switcher-opencv.so ./${{ env.LIB_NAME }}/bin/64bit/adv-ss-plugins tar -cvzf "${FILE_NAME}" ${{ env.LIB_NAME }} - name: "Publish" uses: actions/upload-artifact@v2.2.1 @@ -291,9 +292,10 @@ jobs: $env:FILE_NAME="${{ env.PLUGIN_NAME }}-${env:FILE_DATE}-${{ github.sha }}-windows" echo "FILE_NAME=${env:FILE_NAME}" >> ${env:GITHUB_ENV} robocopy .\build${{ matrix.arch }}\rundir\RelWithDebInfo\obs-plugins\${{ matrix.arch }}bit\ .\package\obs-plugins\${{ matrix.arch }}bit ${{ env.LIB_NAME }}* /E /XF .gitignore + robocopy .\build${{ matrix.arch }}\rundir\RelWithDebInfo\obs-plugins\${{ matrix.arch }}bit\ .\package\obs-plugins\${{ matrix.arch }}bit adv-ss-plugins /E /XF .gitignore robocopy .\build${{ matrix.arch }}\rundir\RelWithDebInfo\data\obs-plugins\${{ env.LIB_NAME }}\ .\package\data\obs-plugins\${{ env.LIB_NAME }}\ /E /XF .gitignore - cp UI/frontend-plugins/${{ env.PLUGIN_NAME }}/deps/opencv/build/bin/Release/*dll package/obs-plugins/${{ matrix.arch }}bit - cp UI/frontend-plugins/${{ env.PLUGIN_NAME }}/deps/openvr/bin/win${{ matrix.arch }}/*dll package/obs-plugins/${{ matrix.arch }}bit + cp UI/frontend-plugins/${{ env.PLUGIN_NAME }}/deps/opencv/build/bin/Release/*dll package/obs-plugins/${{ matrix.arch }}bit/adv-ss-plugins + cp UI/frontend-plugins/${{ env.PLUGIN_NAME }}/deps/openvr/bin/win${{ matrix.arch }}/*dll package/obs-plugins/${{ matrix.arch }}bit/adv-ss-plugins exit 0 - name: Publish zip if: success() diff --git a/CI/macos/SceneSwitcher.pkgproj b/CI/macos/SceneSwitcher.pkgproj index e2edf648..738c1329 100644 --- a/CI/macos/SceneSwitcher.pkgproj +++ b/CI/macos/SceneSwitcher.pkgproj @@ -30,6 +30,327 @@ CHILDREN + + CHILDREN + + + CHILDREN + + GID + 80 + PATH + ../../../../../build/UI/frontend-plugins/SceneSwitcher/src/external-macro-modules/opencv/advanced-scene-switcher-opencv.so + PATH_TYPE + 3 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + CHILDREN + + GID + 80 + PATH + ../../deps/opencv/build/lib/libopencv_objdetect.4.5.3.dylib + PATH_TYPE + 3 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + CHILDREN + + GID + 80 + PATH + ../../deps/opencv/build/lib/libopencv_features2d.4.5.dylib + PATH_TYPE + 3 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + CHILDREN + + GID + 80 + PATH + ../../deps/opencv/build/lib/libopencv_core.4.5.dylib + PATH_TYPE + 3 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + CHILDREN + + GID + 80 + PATH + ../../deps/opencv/build/lib/libopencv_calib3d.4.5.dylib + PATH_TYPE + 3 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + CHILDREN + + GID + 80 + PATH + ../../deps/opencv/build/lib/libopencv_calib3d.4.5.3.dylib + PATH_TYPE + 3 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + CHILDREN + + GID + 80 + PATH + ../../deps/opencv/build/lib/libopencv_imgproc.4.5.dylib + PATH_TYPE + 3 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + CHILDREN + + GID + 80 + PATH + ../../deps/opencv/build/lib/libopencv_features2d.4.5.3.dylib + PATH_TYPE + 3 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + CHILDREN + + GID + 80 + PATH + ../../deps/opencv/build/lib/libopencv_core.4.5.3.dylib + PATH_TYPE + 3 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + CHILDREN + + GID + 80 + PATH + ../../deps/opencv/build/lib/libopencv_flann.4.5.dylib + PATH_TYPE + 3 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + CHILDREN + + GID + 80 + PATH + ../../deps/opencv/build/lib/libopencv_calib3d.dylib + PATH_TYPE + 3 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + CHILDREN + + GID + 80 + PATH + ../../deps/opencv/build/lib/libopencv_objdetect.dylib + PATH_TYPE + 3 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + CHILDREN + + GID + 80 + PATH + ../../deps/opencv/build/lib/libopencv_imgproc.4.5.3.dylib + PATH_TYPE + 3 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + CHILDREN + + GID + 80 + PATH + ../../deps/opencv/build/lib/libopencv_flann.dylib + PATH_TYPE + 3 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + CHILDREN + + GID + 80 + PATH + ../../deps/opencv/build/lib/libopencv_imgproc.dylib + PATH_TYPE + 3 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + CHILDREN + + GID + 80 + PATH + ../../deps/opencv/build/lib/libopencv_flann.4.5.3.dylib + PATH_TYPE + 3 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + CHILDREN + + GID + 80 + PATH + ../../deps/opencv/build/lib/libopencv_features2d.dylib + PATH_TYPE + 3 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + CHILDREN + + GID + 80 + PATH + ../../deps/opencv/build/lib/libopencv_core.dylib + PATH_TYPE + 3 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + CHILDREN + + GID + 80 + PATH + ../../deps/opencv/build/lib/libopencv_objdetect.4.5.dylib + PATH_TYPE + 3 + PERMISSIONS + 493 + TYPE + 3 + UID + 0 + + + GID + 80 + PATH + adv-ss-plugins + PATH_TYPE + 0 + PERMISSIONS + 493 + TYPE + 2 + UID + 0 + CHILDREN @@ -46,310 +367,6 @@ UID 0 - - CHILDREN - - GID - 80 - PATH - ../../../../../build/UI/frontend-plugins/SceneSwitcher/src/external-macro-modules/opencv/advanced-scene-switcher-opencv.so - PATH_TYPE - 3 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 80 - PATH - ../../deps/opencv/build/lib/libopencv_objdetect.4.5.3.dylib - PATH_TYPE - 3 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 80 - PATH - ../../deps/opencv/build/lib/libopencv_features2d.4.5.dylib - PATH_TYPE - 3 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 80 - PATH - ../../deps/opencv/build/lib/libopencv_core.4.5.dylib - PATH_TYPE - 3 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 80 - PATH - ../../deps/opencv/build/lib/libopencv_calib3d.4.5.dylib - PATH_TYPE - 3 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 80 - PATH - ../../deps/opencv/build/lib/libopencv_calib3d.4.5.3.dylib - PATH_TYPE - 3 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 80 - PATH - ../../deps/opencv/build/lib/libopencv_imgproc.4.5.dylib - PATH_TYPE - 3 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 80 - PATH - ../../deps/opencv/build/lib/libopencv_features2d.4.5.3.dylib - PATH_TYPE - 3 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 80 - PATH - ../../deps/opencv/build/lib/libopencv_core.4.5.3.dylib - PATH_TYPE - 3 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 80 - PATH - ../../deps/opencv/build/lib/libopencv_flann.4.5.dylib - PATH_TYPE - 3 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 80 - PATH - ../../deps/opencv/build/lib/libopencv_calib3d.dylib - PATH_TYPE - 3 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 80 - PATH - ../../deps/opencv/build/lib/libopencv_objdetect.dylib - PATH_TYPE - 3 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 80 - PATH - ../../deps/opencv/build/lib/libopencv_imgproc.4.5.3.dylib - PATH_TYPE - 3 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 80 - PATH - ../../deps/opencv/build/lib/libopencv_flann.dylib - PATH_TYPE - 3 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 80 - PATH - ../../deps/opencv/build/lib/libopencv_imgproc.dylib - PATH_TYPE - 3 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 80 - PATH - ../../deps/opencv/build/lib/libopencv_flann.4.5.3.dylib - PATH_TYPE - 3 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 80 - PATH - ../../deps/opencv/build/lib/libopencv_features2d.dylib - PATH_TYPE - 3 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 80 - PATH - ../../deps/opencv/build/lib/libopencv_core.dylib - PATH_TYPE - 3 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - CHILDREN - - GID - 80 - PATH - ../../deps/opencv/build/lib/libopencv_objdetect.4.5.dylib - PATH_TYPE - 3 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - GID 80 diff --git a/src/advanced-scene-switcher.cpp b/src/advanced-scene-switcher.cpp index 57796f8e..51b14763 100644 --- a/src/advanced-scene-switcher.cpp +++ b/src/advanced-scene-switcher.cpp @@ -626,20 +626,28 @@ static void OBSEvent(enum obs_frontend_event event, void *switcher) void LoadPlugins() { - QFileInfo fi(obs_get_module_binary_path(obs_current_module())); - QDirIterator it(fi.absolutePath(), QStringList() << "*.so", - QDir::Files); + QFileInfo libPath( + QString(obs_get_module_binary_path(obs_current_module()))); + QString pluginDir(libPath.absolutePath() + "/adv-ss-plugins"); +#ifdef _WIN32 + QString libPattern = "*.dll"; + SetDllDirectory(pluginDir.toStdWString().c_str()); +#else + QString libPattern = "*.so"; +#endif + QDirIterator it(pluginDir, QStringList() << libPattern, QDir::Files); while (it.hasNext()) { auto file = it.next(); - if (it.fileName() == "advanced-scene-switcher.so") { - continue; - } blog(LOG_INFO, "attempting to load \"%s\"", file.toStdString().c_str()); auto lib = new QLibrary(file, nullptr); if (lib->load()) { blog(LOG_INFO, "successfully loaded \"%s\"", file.toStdString().c_str()); + } else { + blog(LOG_WARNING, "failed to load \"%s\": %s", + file.toStdString().c_str(), + lib->errorString().toStdString().c_str()); } } } @@ -658,10 +666,7 @@ extern "C" void InitSceneSwitcher() } PlatformInit(); -#if !defined(_WIN32) - // Windows does not require the plugins to be loaded manually LoadPlugins(); -#endif SetupDock(); auto cb = []() { diff --git a/src/external-macro-modules/CMakeLists.txt b/src/external-macro-modules/CMakeLists.txt index 46a5a0a7..e37c2780 100644 --- a/src/external-macro-modules/CMakeLists.txt +++ b/src/external-macro-modules/CMakeLists.txt @@ -1,3 +1,57 @@ +# Helper function to install plugins to correct location +function(install_advss_plugin target) + set(plugin_folder "adv-ss-plugins") + if(APPLE) + set(_bit_suffix "") + elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_bit_suffix "64bit/") + else() + set(_bit_suffix "32bit/") + endif() + + set_target_properties(${target} PROPERTIES PREFIX "") + + install( + TARGETS ${target} + LIBRARY DESTINATION "${OBS_PLUGIN_DESTINATION}/${plugin_folder}" + RUNTIME DESTINATION "${OBS_PLUGIN_DESTINATION}/${plugin_folder}") + add_custom_command( + TARGET ${target} + POST_BUILD + COMMAND + "${CMAKE_COMMAND}" -E copy "$" + "${OBS_OUTPUT_DIR}/$/obs-plugins/${_bit_suffix}/${plugin_folder}/$" + VERBATIM) + + if(DEFINED ENV{obsInstallerTempDir}) + add_custom_command( + TARGET ${target} + POST_BUILD + COMMAND + "${CMAKE_COMMAND}" -E copy "$" + "$ENV{obsInstallerTempDir}/${OBS_PLUGIN_DESTINATION}/${plugin_folder}/$" + VERBATIM) + endif() + + if(MSVC) + obs_debug_copy_helper( + ${target} + "${OBS_OUTPUT_DIR}/$/obs-plugins/${_bit_suffix}/${plugin_folder}" + ) + + if(DEFINED ENV{obsInstallerTempDir}) + obs_debug_copy_helper( + ${target} + "$ENV{obsInstallerTempDir}/${OBS_PLUGIN_DESTINATION}/${plugin_folder}") + endif() + + install( + DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/pdbs/" + DESTINATION "${OBS_PLUGIN_DESTINATION}/${plugin_folder}" + CONFIGURATIONS Debug RelWithDebInfo) + endif() +endfunction() + # Add macro conditions or actions which have dependencies to external libraries # or other components which might potentially not be fulfilled by the user and # thus cause issues. diff --git a/src/external-macro-modules/opencv/CMakeLists.txt b/src/external-macro-modules/opencv/CMakeLists.txt index 80c9c6c5..db85af00 100644 --- a/src/external-macro-modules/opencv/CMakeLists.txt +++ b/src/external-macro-modules/opencv/CMakeLists.txt @@ -34,8 +34,9 @@ if(BUILD_OUT_OF_TREE) set(LIB_OUT_DIR "/lib/obs-plugins") endif() set_target_properties(advanced-scene-switcher-opencv PROPERTIES PREFIX "") - install(TARGETS advanced-scene-switcher-opencv - LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/${LIB_OUT_DIR}) + install( + TARGETS advanced-scene-switcher-opencv + LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/${LIB_OUT_DIR}/adv-ss-plugins) endif() else() target_link_libraries( @@ -46,5 +47,5 @@ else() Qt5::Core Qt5::Widgets libobs) - install_obs_plugin(advanced-scene-switcher-opencv) + install_advss_plugin(advanced-scene-switcher-opencv) endif() diff --git a/src/external-macro-modules/openvr/CMakeLists.txt b/src/external-macro-modules/openvr/CMakeLists.txt index 77b83275..5d87a80a 100644 --- a/src/external-macro-modules/openvr/CMakeLists.txt +++ b/src/external-macro-modules/openvr/CMakeLists.txt @@ -73,8 +73,9 @@ if(BUILD_OUT_OF_TREE) set(LIB_OUT_DIR "/lib/obs-plugins") endif() set_target_properties(advanced-scene-switcher-openvr PROPERTIES PREFIX "") - install(TARGETS advanced-scene-switcher-openvr - LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/${LIB_OUT_DIR}) + install( + TARGETS advanced-scene-switcher-openvr + LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/${LIB_OUT_DIR}/adv-ss-plugins) endif() else() target_link_libraries( @@ -85,5 +86,5 @@ else() Qt5::Core Qt5::Widgets libobs) - install_obs_plugin(advanced-scene-switcher-openvr) + install_advss_plugin(advanced-scene-switcher-openvr) endif()