1
0
Эх сурвалжийг харах

Export libobs cmake target, so external plugins can be built without ugly hacks

BtbN 11 жил өмнө
parent
commit
38594fff9e

+ 52 - 3
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
 			"$<TARGET_FILE:${target}>"

+ 14 - 10
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})
-
-install_obs_core(libobs)
+	PRIVATE
+		jansson
+		${libobs_PLATFORM_DEPS}
+		${Libswscale_LIBRARIES}
+		${Libswresample_LIBRARIES}
+		${Libavutil_LIBRARIES})
+
+install_obs_core(libobs EXPORT LibObs)
 install_obs_data(libobs ../build/data/libobs libobs)
+install_obs_headers(${libobs_HEADERS})
 

+ 13 - 0
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)
+

+ 10 - 0
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()

+ 2 - 2
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"

+ 0 - 0
libobs/config.h.in → libobs/obsconfig.h.in