diff --git a/cmake/Modules/ObsHelpers.cmake b/cmake/Modules/ObsHelpers.cmake index 0fe2d9f70..3a668a08d 100644 --- a/cmake/Modules/ObsHelpers.cmake +++ b/cmake/Modules/ObsHelpers.cmake @@ -55,6 +55,8 @@ if(NOT UNIX_STRUCTURE) set(OBS_PLUGIN64_DESTINATION "obs-plugins/64bit") add_definitions(-DOBS_DATA_PATH="../../${OBS_DATA_DESTINATION}") endif() + set(OBS_CMAKE_DESTINATION "cmake") + set(OBS_INCLUDE_DESTINATION "include") else() set(OBS_EXECUTABLE_DESTINATION "bin") set(OBS_EXECUTABLE32_DESTINATION "bin32") @@ -66,6 +68,8 @@ else() set(OBS_PLUGIN32_DESTINATION "lib32/obs-plugins") set(OBS_PLUGIN64_DESTINATION "lib64/obs-plugins") set(OBS_DATA_DESTINATION "share/obs") + set(OBS_CMAKE_DESTINATION "lib/cmake") + set(OBS_INCLUDE_DESTINATION "include/obs") add_definitions(-DOBS_DATA_PATH="${OBS_DATA_DESTINATION}") add_definitions(-DOBS_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}/") endif() @@ -137,6 +141,46 @@ function(obs_install_additional) endif() endfunction() +macro(export_obs_core target exportname) + install(TARGETS ${target} + EXPORT "${exportname}Target" + LIBRARY DESTINATION "${OBS_LIBRARY_DESTINATION}" + RUNTIME DESTINATION "${OBS_EXECUTABLE_DESTINATION}") + + export(TARGETS ${target} FILE "${CMAKE_CURRENT_BINARY_DIR}/${exportname}Target.cmake") + export(PACKAGE "${exportname}") + + set(CONF_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}") + configure_file("${exportname}Config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${exportname}Config.cmake" @ONLY) + + set(CONF_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/${OBS_INCLUDE_DESTINATION}") + configure_file("${exportname}Config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${exportname}Config.cmake" @ONLY) + + configure_file("${exportname}ConfigVersion.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${exportname}ConfigVersion.cmake" @ONLY) + + install(FILES + "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${exportname}Config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/${exportname}ConfigVersion.cmake" + DESTINATION "${OBS_CMAKE_DESTINATION}/${exportname}") + + install(EXPORT "${exportname}Target" + DESTINATION "${OBS_CMAKE_DESTINATION}/${exportname}") +endmacro() + +macro(install_obs_headers) + foreach(hdr ${ARGN}) + if("${hdr}" MATCHES "^/.*$") + set(subdir) + else() + get_filename_component(subdir "${hdr}" DIRECTORY) + if(subdir) + set(subdir "/${subdir}") + endif() + endif() + install(FILES "${hdr}" DESTINATION "${OBS_INCLUDE_DESTINATION}${subdir}") + endforeach() +endmacro() + macro(install_obs_core target) if(CMAKE_SIZEOF_VOID_P EQUAL 8) set(_bit_suffix "64bit/") @@ -148,9 +192,14 @@ macro(install_obs_core target) set(_bit_suffix "") endif() - install(TARGETS ${target} - LIBRARY DESTINATION "${OBS_LIBRARY_DESTINATION}" - RUNTIME DESTINATION "${OBS_EXECUTABLE_DESTINATION}") + if("${ARGV1}" STREQUAL "EXPORT") + export_obs_core("${target}" "${ARGV2}") + else() + install(TARGETS ${target} + LIBRARY DESTINATION "${OBS_LIBRARY_DESTINATION}" + RUNTIME DESTINATION "${OBS_EXECUTABLE_DESTINATION}") + endif() + add_custom_command(TARGET ${target} POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy "$" diff --git a/libobs/CMakeLists.txt b/libobs/CMakeLists.txt index e0cba7118..6f8b87cfc 100644 --- a/libobs/CMakeLists.txt +++ b/libobs/CMakeLists.txt @@ -59,11 +59,11 @@ if(MSVC) endif() configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/config.h.in" - "${CMAKE_BINARY_DIR}/config/config.h") + "${CMAKE_CURRENT_SOURCE_DIR}/obsconfig.h.in" + "${CMAKE_BINARY_DIR}/config/obsconfig.h") set(libobs_config_HEADERS - config.h + "${CMAKE_BINARY_DIR}/config/obsconfig.h" obs-config.h) set(libobs_callback_SOURCES @@ -203,6 +203,7 @@ set(libobs_SOURCES ${libobs_libobs_SOURCES}) set(libobs_HEADERS + ${libobs_config_HEADERS} ${libobs_callback_HEADERS} ${libobs_graphics_HEADERS} ${libobs_mediaio_HEADERS} @@ -225,13 +226,16 @@ set_target_properties(libobs PROPERTIES OUTPUT_NAME obs VERSION "0" SOVERSION "0") +target_compile_definitions(libobs PUBLIC HAVE_OBSCONFIG_H) target_link_libraries(libobs - jansson - ${libobs_PLATFORM_DEPS} - ${Libswscale_LIBRARIES} - ${Libswresample_LIBRARIES} - ${Libavutil_LIBRARIES}) + PRIVATE + jansson + ${libobs_PLATFORM_DEPS} + ${Libswscale_LIBRARIES} + ${Libswresample_LIBRARIES} + ${Libavutil_LIBRARIES}) -install_obs_core(libobs) +install_obs_core(libobs EXPORT LibObs) install_obs_data(libobs ../build/data/libobs libobs) +install_obs_headers(${libobs_HEADERS}) diff --git a/libobs/LibObsConfig.cmake.in b/libobs/LibObsConfig.cmake.in new file mode 100644 index 000000000..9f15bee9c --- /dev/null +++ b/libobs/LibObsConfig.cmake.in @@ -0,0 +1,13 @@ +# - Config file for the LibObs package +# It defines the following variables +# LIBOBS_INCLUDE_DIRS +# LIBOBS_LIBRARIES + +set(LIBOBS_INCLUDE_DIRS "@CONF_INCLUDE_DIRS@") + +if(NOT TARGET libobs) + include("${CMAKE_CURRENT_LIST_DIR}/LibObsTarget.cmake") +endif() + +set(LIBOBS_LIBRARIES libobs) + diff --git a/libobs/LibObsConfigVersion.cmake.in b/libobs/LibObsConfigVersion.cmake.in new file mode 100644 index 000000000..269b37406 --- /dev/null +++ b/libobs/LibObsConfigVersion.cmake.in @@ -0,0 +1,10 @@ +set(PACKAGE_VERSION "@OBS_VERSION@") + +if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}") + set(PACKAGE_VERSION_EXACT TRUE) + endif() +endif() diff --git a/libobs/obs-config.h b/libobs/obs-config.h index 0250b2480..4f304fb65 100644 --- a/libobs/obs-config.h +++ b/libobs/obs-config.h @@ -17,8 +17,8 @@ #pragma once -#ifdef HAVE_CONFIG_H -# include "config.h" +#ifdef HAVE_OBSCONFIG_H +# include "obsconfig.h" #else #define OBS_VERSION "unknown" diff --git a/libobs/config.h.in b/libobs/obsconfig.h.in similarity index 100% rename from libobs/config.h.in rename to libobs/obsconfig.h.in