From 683585938ce2e19db3f4e2aad3ed3d4ba83d3d40 Mon Sep 17 00:00:00 2001 From: Palana Date: Mon, 30 Dec 2013 20:52:44 +0100 Subject: [PATCH] add infrastructure for app bundle target and unmark as advanced --- CMakeLists.txt | 5 ++- cmake/obs_helpers.cmake | 79 ++++++++++++++++++++++++++++++++++++ libobs-opengl/CMakeLists.txt | 2 + libobs/CMakeLists.txt | 8 ++-- obs/CMakeLists.txt | 10 +++-- 5 files changed, 94 insertions(+), 10 deletions(-) create mode 100644 cmake/obs_helpers.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 864369229..07df2989d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,12 +25,13 @@ if(UNIX) set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH};@loader_path/;@executable_path/") option(BUILD_APP_BUNDLE "Build app bundle" false) - #TODO: figure out distribution options - mark_as_advanced(BUILD_APP_BUNDLE) endif() set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) endif() +include(obs_helpers) + +obs_add_data_dir(/) set(LIBRARY_OUTPUT_PATH ${obs_BINARY_DIR}/bin) set(RUNTIME_OUTPUT_PATH ${obs_BINARY_DIR}/bin) diff --git a/cmake/obs_helpers.cmake b/cmake/obs_helpers.cmake new file mode 100644 index 000000000..51bdbeccc --- /dev/null +++ b/cmake/obs_helpers.cmake @@ -0,0 +1,79 @@ +#copy data files and libs into (additional) directory (trees) +#todo: improve dependency interaction + +set(OBS_CORE_LIBS "" CACHE INTERNAL "obs core libs") +set(OBS_CORE_LIB_TARGETS "" CACHE INTERNAL "obs core lib targets") + +function(obs_add_core_lib lib) + get_property(location TARGET ${lib} PROPERTY LOCATION) + list(APPEND OBS_CORE_LIBS ${location}) + set(OBS_CORE_LIBS ${OBS_CORE_LIBS} CACHE INTERNAL "") + + get_filename_component(filename ${location} NAME) + + foreach(target ${OBS_CORE_LIB_TARGETS}) + get_property(tar_location TARGET ${target} PROPERTY LOCATION) + get_filename_component(dir ${tar_location} DIRECTORY) + add_custom_command(TARGET ${target} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${location} + "${dir}/") + + set_property(DIRECTORY ${dir} APPEND PROPERTY + ADDITIONAL_MAKE_CLEAN_FILES ${filename}) + endforeach() +endfunction() + +function(obs_add_core_lib_target target) + list(APPEND OBS_CORE_LIB_DIRS ${target}) + set(OBS_CORE_LIB_TARGETS ${OBS_CORE_LIB_TARGETS} CACHE INTERNAL "") + + get_property(tar_location TARGET ${target} PROPERTY LOCATION) + get_filename_component(dir ${tar_location} DIRECTORY) + + foreach(lib ${OBS_CORE_LIBS}) + get_filename_component(filename ${lib} NAME) + add_custom_command(TARGET ${target} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy ${lib} + "${dir}/") + + set_property(DIRECTORY APPEND PROPERTY + ADDITIONAL_MAKE_CLEAN_FILES "${dir}/${filename}") + endforeach() +endfunction() + +set(OBS_DATA_DIRS "" CACHE INTERNAL "data_dirs") +set(OBS_DATA_SOURCES "" CACHE INTERNAL "source_dirs") + +function(obs_add_data_source prefix) + string(MD5 hash ${prefix}) + set(source_name "OBS_DATA_SOURCES_${hash}") + set(prefix_name "OBS_DATA_SOURCE_${hash}") + set(args ${ARGN}) + + foreach(target ${OBS_DATA_DIRS}) + file(COPY + ${args} + DESTINATION + "${target}/${prefix}") + endforeach() + + set(${source_name} ${args} CACHE INTERNAL "") + set(${prefix_name} ${prefix} CACHE INTERNAL "") + list(APPEND OBS_DATA_SOURCES ${hash}) + set(OBS_DATA_SOURCES ${OBS_DATA_SOURCES} CACHE INTERNAL "") +endfunction() + +function(obs_add_data_dir dir) + set(dir "${obs_BINARY_DIR}/${dir}") + list(APPEND OBS_DATA_DIRS ${dir}) + set(OBS_DATA_DIRS ${OBS_DATA_DIRS} CACHE INTERNAL "") + + foreach(hash ${OBS_DATA_SOURCES}) + set(source_name "OBS_DATA_SOURCES_${hash}") + set(prefix_name "OBS_DATA_SOURCE_${hash}") + file(COPY + ${${source_name}} + DESTINATION + "${dir}/${${prefix_name}}") + endforeach() +endfunction() diff --git a/libobs-opengl/CMakeLists.txt b/libobs-opengl/CMakeLists.txt index 37de85ec8..a92b47d3b 100644 --- a/libobs-opengl/CMakeLists.txt +++ b/libobs-opengl/CMakeLists.txt @@ -71,3 +71,5 @@ target_link_libraries(libobs-opengl libobs ${OPENGL_LIBRARIES} ${GLEW_LIBRARIES}) + +obs_add_core_lib(libobs-opengl) diff --git a/libobs/CMakeLists.txt b/libobs/CMakeLists.txt index 2e0f9fffc..fa4d46fb3 100644 --- a/libobs/CMakeLists.txt +++ b/libobs/CMakeLists.txt @@ -86,7 +86,7 @@ target_link_libraries(libobs ${LIBAVUTIL_LIBRARIES} ${LIBSWRESAMPLE_LIBRARIES}) -file(COPY - ${obs_SOURCE_DIR}/build/data/libobs/default.effect - DESTINATION - ${obs_BINARY_DIR}/data/libobs/) +obs_add_core_lib(libobs) + +obs_add_data_source(/data/libobs/ + ${obs_SOURCE_DIR}/build/data/libobs/default.effect) diff --git a/obs/CMakeLists.txt b/obs/CMakeLists.txt index d7c003dbe..f76c67c6c 100644 --- a/obs/CMakeLists.txt +++ b/obs/CMakeLists.txt @@ -96,11 +96,13 @@ add_executable(obs if(APPLE) set_target_properties(obs PROPERTIES MACOSX_BUNDLE ${BUILD_APP_BUNDLE}) + if(BUILD_APP_BUNDLE) + obs_add_core_lib_target(obs) + obs_add_data_dir(/bin/obs.app/Contents/) + endif() endif() -file(COPY +obs_add_data_source(/data/obs-studio/locale ${obs_SOURCE_DIR}/build/data/obs-studio/locale/en.txt ${obs_SOURCE_DIR}/build/data/obs-studio/locale/ja.txt - ${obs_SOURCE_DIR}/build/data/obs-studio/locale/locale.ini - DESTINATION - ${obs_BINARY_DIR}/data/obs-studio/locale/) + ${obs_SOURCE_DIR}/build/data/obs-studio/locale/locale.ini)