diff --git a/CMakeLists.txt b/CMakeLists.txt
index 784984c..c9cf372 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -30,6 +30,9 @@ set(CMAKE_INCLUDE_CURRENTDIR ON)
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules )
include(MacroLogFeature)
+# Find the plugin libraries
+include(MacroFindGStreamerLibrary)
+
if(UNIX)
if (APPLE)
add_definitions(-DAPPLE)
@@ -37,7 +40,7 @@ if(UNIX)
# the RPATH to be used when installing
set(CMAKE_SKIP_RPATH TRUE)
set(OpenGL_DIR /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/)
- set(CMAKE_OSX_ARCHITECTURES x86_64)
+ set(CMAKE_OSX_ARCHITECTURES "x86_64")
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.14")
# find icu4c in OSX (pretty well hidden...)
@@ -464,7 +467,7 @@ IF(APPLE)
ELSE(APPLE)
- link_directories (${GTK3_LIBRARY_DIRS})
+ link_directories (${GTK3_LIBRARY_DIRS})
add_executable(${VMIX_BINARY}
${VMIX_SRCS}
@@ -509,14 +512,14 @@ target_link_libraries(${VMIX_BINARY} LINK_PRIVATE
)
-
### DEFINE THE PACKAGING (all OS)
SET(CPACK_PACKAGE_NAME "vimix")
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "vimix\nReal-time video mixing for live performance.")
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md")
-SET(CPACK_PACKAGE_CONTACT "bruno.herbelin@gmail.com")
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING.txt")
+SET(CPACK_PACKAGE_CONTACT "bruno.herbelin@gmail.com")
+SET(CPACK_PACKAGE_HOMEPAGE_URL "https://brunoherbelin.github.io/vimix")
SET(CPACK_PACKAGE_VERSION_MAJOR "${VIMIX_VERSION_MAJOR}")
SET(CPACK_PACKAGE_VERSION_MINOR "${VIMIX_VERSION_MINOR}")
SET(CPACK_PACKAGE_VERSION_PATCH "${VIMIX_VERSION_PATCH}")
@@ -528,23 +531,19 @@ SET(CPACK_SOURCE_IGNORE_FILES
)
+# optimize size ?
+SET(CPACK_STRIP_FILES TRUE)
+
### DEFINE THE PACKAGING (OS specific)
IF(APPLE)
-# include( InstallRequiredSystemLibraries )
-
# Bundle target
- set(CPACK_GENERATOR "DragNDrop")
+ set(CPACK_GENERATOR DragNDrop)
+ set(CPACK_BINARY_DRAGNDROP ON)
# OSX cpack info
set(CPACK_SYSTEM_NAME "OSX_${CMAKE_OSX_DEPLOYMENT_TARGET}_${CMAKE_OSX_ARCHITECTURES}")
- set(CPACK_BUNDLE_NAME ${CPACK_PACKAGE_NAME})
- set(CPACK_BUNDLE_ICON ${MACOSX_BUNDLE_ICON_FILE})
- set(CPACK_BUNDLE_PLIST ${MACOSX_BUNDLE_PLIST_FILE})
-
- set(APPS "\${CMAKE_INSTALL_PREFIX}/vimix.app")
- # set( APPS "\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/vimix${CMAKE_EXECUTABLE_SUFFIX}")
install(TARGETS ${VMIX_BINARY}
CONFIGURATIONS Release RelWithDebInfo
@@ -566,8 +565,6 @@ IF(APPLE)
message(STATUS "install gst-plugins-bad ${PKG_GSTREAMER_BAD_PLUGIN_DIR}")
endif()
- find_library(PKG_GSTREAMER_LIBAV_LIBRARY NAMES gstlibav )
- message(STATUS "install libav ${PKG_GSTREAMER_LIBAV_LIBRARY}")
# intall the gst-plugin-scanner program (used by plugins at load time)
set(PKG_GSTREAMER_SCANNER "${PKG_GSTREAMER_PREFIX}/libexec/gstreamer-1.0/gst-plugin-scanner")
@@ -581,24 +578,24 @@ IF(APPLE)
# Install the gst-plugins (all those installed with brew )
install(DIRECTORY "${PKG_GSTREAMER_PLUGIN_DIR}" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
install(DIRECTORY "${PKG_GSTREAMER_BASE_PLUGIN_DIR}" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
- install(DIRECTORY "/usr/local/Cellar/gst-plugins-good/1.18.4/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
install(DIRECTORY "${PKG_GSTREAMER_BAD_PLUGIN_DIR}" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
+
+ install(DIRECTORY "/usr/local/Cellar/gst-plugins-good/1.18.4/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
install(DIRECTORY "/usr/local/Cellar/gst-plugins-ugly/1.18.4_1/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
install(DIRECTORY "/usr/local/Cellar/gst-libav/1.18.4/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
- # install locally recompiled & installed gst-plugins (because not included in brew package)
- install(DIRECTORY "/usr/local/lib/gstreamer-1.0" DESTINATION "${plugin_dest_dir}" COMPONENT Runtime)
-# # install locally recompiled gst-plugins (because not included in brew package)
-# set(LOCAL_BUILD_BAD "/usr/local/lib/gstreamer-1.0/")
-# install(FILES "${LOCAL_BUILD_BAD}/libgstapplemedia.dylib" DESTINATION "${plugin_dest_dir}/gstreamer-1.0" COMPONENT Runtime)
-# install(FILES "${LOCAL_BUILD_BAD}/libgstde265.dylib" DESTINATION "${plugin_dest_dir}/gstreamer-1.0" COMPONENT Runtime)
-# install(FILES "${LOCAL_BUILD_BAD}/libgstx265.dylib" DESTINATION "${plugin_dest_dir}/gstreamer-1.0" COMPONENT Runtime)
+ # install locally recompiled & installed gst-plugins (because not included in brew package)
+ install(FILES "/usr/local/lib/gstreamer-1.0/libgstapplemedia.dylib" DESTINATION "${plugin_dest_dir}/gstreamer-1.0" COMPONENT Runtime)
+ install(FILES "/usr/local/lib/gstreamer-1.0/libgstde265.dylib" DESTINATION "${plugin_dest_dir}/gstreamer-1.0" COMPONENT Runtime)
+ install(FILES "/usr/local/lib/gstreamer-1.0/libgstx265.dylib" DESTINATION "${plugin_dest_dir}/gstreamer-1.0" COMPONENT Runtime)
# ICU DATA LIB GST dependency : undocumented and hacked here : seems to work
- install(FILES "${ICU_LIBRARIES}" DESTINATION "${plugin_dest_dir}/gstreamer-1.0" COMPONENT Runtime)
- message(STATUS "install icu4c from ${ICU_LIBRARY_DIRS}")
+# install(FILES "${ICU_LINK_LIBRARIES}" DESTINATION "${plugin_dest_dir}/gstreamer-1.0" COMPONENT Runtime)
+ install(FILES "/usr/local/Cellar/icu4c/69.1/lib/libicudata.69.1.dylib" DESTINATION "${plugin_dest_dir}/gstreamer-1.0" RENAME "libicudata.69.dylib" COMPONENT Runtime)
+ message(STATUS "install ${ICU_LINK_LIBRARIES} from ${ICU_LIBRARY_DIRS}")
# package runtime fixup bundle
+ set(APPS "\${CMAKE_INSTALL_PREFIX}/vimix.app")
install(CODE "
file(GLOB_RECURSE GSTPLUGINS \"\${CMAKE_INSTALL_PREFIX}/${plugin_dest_dir}/gstreamer-1.0/*.dylib\")
list(APPEND LIBS_PATH \"\${ICU_LIBRARY_DIRS}\")
@@ -609,18 +606,22 @@ IF(APPLE)
COMPONENT Runtime
)
- set(CPACK_BINARY_DRAGNDROP ON)
+# # package runtime fixup bundle and codesign
+# set(BUNDLE_NAME "vimix.app")
+# set(BUNDLE_LIBS_DIR "${plugin_dest_dir}/gstreamer-1.0")
+# set(BUNDLE_DIRS "${ICU_LIBRARY_DIRS}")
+# set(APPLE_CODESIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/osx/entitlements.plist")
+
+# configure_file(cmake/modules/BundleInstall.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/BundleInstall.cmake" @ONLY)
+# install(SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/BundleInstall.cmake" COMPONENT Runtime)
ELSE(APPLE)
- set(APPS "\${CMAKE_INSTALL_PREFIX}/bin/vimix")
-
install(TARGETS ${VMIX_BINARY}
CONFIGURATIONS Release RelWithDebInfo
RUNTIME DESTINATION bin COMPONENT Runtime
)
-
ENDIF(APPLE)
# Package full name
diff --git a/cmake/modules/BundleInstall.cmake.in b/cmake/modules/BundleInstall.cmake.in
new file mode 100644
index 0000000..1389932
--- /dev/null
+++ b/cmake/modules/BundleInstall.cmake.in
@@ -0,0 +1,41 @@
+set(BUNDLE_NAME @BUNDLE_NAME@)
+set(BUNDLE_LIBS_DIR @BUNDLE_LIBS_DIR@)
+set(BUNDLE_DIRS @BUNDLE_DIRS@)
+set(APPLE_CODESIGN_IDENTITY @APPLE_CODESIGN_IDENTITY@)
+set(APPLE_CODESIGN_ENTITLEMENTS @APPLE_CODESIGN_ENTITLEMENTS@)
+
+set(BUNDLE_PATH "${CMAKE_INSTALL_PREFIX}/${BUNDLE_NAME}")
+
+include(BundleUtilities)
+
+#fixup_bundle tries to copy system libraries without this. Wtf?
+function(gp_resolved_file_type_override file type)
+ if(file MATCHES "^(/usr/lib)")
+ set(type "system" PARENT_SCOPE)
+ endif()
+endfunction()
+
+file(GLOB_RECURSE BUNDLE_LIBS "${CMAKE_INSTALL_PREFIX}/${BUNDLE_LIBS_DIR}/*.dylib")
+
+set(BU_CHMOD_BUNDLE_ITEMS ON)
+fixup_bundle("${BUNDLE_PATH}" "${BUNDLE_LIBS}" "${BUNDLE_DIRS}")
+
+if(DEFINED APPLE_CODESIGN_IDENTITY AND DEFINED APPLE_CODESIGN_ENTITLEMENTS)
+# execute_process(COMMAND
+# codesign --verbose=4 --deep --force --options runtime
+# --entitlements "${APPLE_CODESIGN_ENTITLEMENTS}"
+# --sign "${APPLE_CODESIGN_IDENTITY}"
+# "${BUNDLE_NAME}"
+# )
+ foreach(PATH_TO_SIGN IN LISTS BUNDLE_LIBS BUNDLE_PATH)
+ execute_process(COMMAND
+ codesign --verbose=4 --deep --force
+ --entitlements "${APPLE_CODESIGN_ENTITLEMENTS}"
+ --sign "${APPLE_CODESIGN_IDENTITY}"
+ "${PATH_TO_SIGN}"
+ )
+ endforeach()
+else()
+ message(STATUS "Not signing bundle. Specify -DAPPLE_CODESIGN_IDENTITY and -DAPPLE_CODESIGN_ENTITLEMENTS to cmake before running cpack to sign")
+endif()
+
diff --git a/osx/Info.plist b/osx/Info.plist
index 2bb19dc..3932dab 100644
--- a/osx/Info.plist
+++ b/osx/Info.plist
@@ -9,7 +9,7 @@
NSCameraUsageDescription
vimix needs to access the camera to enable camera sources.
LSMinimumSystemVersion
- 10.13.0
+ 10.14.0
NSHighResolutionCapable
NSPrincipalClass
@@ -22,6 +22,12 @@
CFBundleDocumentTypes
+ CFBundleTypeExtensions
+
+ mix
+
+ CFBundleTypeIconFile
+ vimix.icns
CFBundleTypeName
vimix session
CFBundleTypeRole
diff --git a/osx/vimixRelease.entitlements b/osx/entitlements.plist
similarity index 74%
rename from osx/vimixRelease.entitlements
rename to osx/entitlements.plist
index 6cfee69..973abc7 100644
--- a/osx/vimixRelease.entitlements
+++ b/osx/entitlements.plist
@@ -2,6 +2,8 @@
+ com.apple.security.cs.disable-library-validation
+
com.apple.security.device.camera