Просмотр исходного кода

Merge pull request #77 from BtbN/cmake_export

Export libobs cmake target, so external plugins can be built
Jim 12 лет назад
Родитель
Сommit
195edbb0af

+ 4 - 0
cmake/Modules/ObsCpack.cmake

@@ -78,4 +78,8 @@ endif()
 
 
 set(CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_NAME}")
 set(CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_NAME}")
 
 
+if(UNIX_STRUCTURE)
+	set(CPACK_SET_DESTDIR TRUE)
+endif()
+
 include(CPack)
 include(CPack)

+ 62 - 3
cmake/Modules/ObsHelpers.cmake

@@ -55,6 +55,8 @@ if(NOT UNIX_STRUCTURE)
 		set(OBS_PLUGIN64_DESTINATION "obs-plugins/64bit")
 		set(OBS_PLUGIN64_DESTINATION "obs-plugins/64bit")
 		add_definitions(-DOBS_DATA_PATH="../../${OBS_DATA_DESTINATION}")
 		add_definitions(-DOBS_DATA_PATH="../../${OBS_DATA_DESTINATION}")
 	endif()
 	endif()
+	set(OBS_CMAKE_DESTINATION "cmake")
+	set(OBS_INCLUDE_DESTINATION "include")
 else()
 else()
 	set(OBS_EXECUTABLE_DESTINATION "bin")
 	set(OBS_EXECUTABLE_DESTINATION "bin")
 	set(OBS_EXECUTABLE32_DESTINATION "bin32")
 	set(OBS_EXECUTABLE32_DESTINATION "bin32")
@@ -66,6 +68,8 @@ else()
 	set(OBS_PLUGIN32_DESTINATION "lib32/obs-plugins")
 	set(OBS_PLUGIN32_DESTINATION "lib32/obs-plugins")
 	set(OBS_PLUGIN64_DESTINATION "lib64/obs-plugins")
 	set(OBS_PLUGIN64_DESTINATION "lib64/obs-plugins")
 	set(OBS_DATA_DESTINATION "share/obs")
 	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_DATA_PATH="${OBS_DATA_DESTINATION}")
 	add_definitions(-DOBS_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}/")
 	add_definitions(-DOBS_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}/")
 endif()
 endif()
@@ -137,6 +141,56 @@ function(obs_install_additional)
 	endif()
 	endif()
 endfunction()
 endfunction()
 
 
+macro(export_obs_core target exportname)
+	install(TARGETS ${target}
+		EXPORT "${exportname}Target"
+		LIBRARY DESTINATION "${OBS_LIBRARY_DESTINATION}"
+		ARCHIVE 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}")
+	set(CONF_PLUGIN_DEST "${CMAKE_BINARY_DIR}/rundir/${CMAKE_BUILD_TYPE}/obs-plugins/${_lib_suffix}bit")
+	set(CONF_PLUGIN_DEST32 "${CMAKE_BINARY_DIR}/rundir/${CMAKE_BUILD_TYPE}/obs-plugins/32bit")
+	set(CONF_PLUGIN_DEST64 "${CMAKE_BINARY_DIR}/rundir/${CMAKE_BUILD_TYPE}/obs-plugins/64bit")
+	configure_file("${exportname}Config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${exportname}Config.cmake" @ONLY)
+
+	file(RELATIVE_PATH _pdir "${CMAKE_INSTALL_PREFIX}/${OBS_CMAKE_DESTINATION}/${exportname}" "${CMAKE_INSTALL_PREFIX}")
+	set(CONF_INCLUDE_DIRS "\${CMAKE_CURRENT_LIST_DIR}/${_pdir}${OBS_INCLUDE_DESTINATION}")
+	set(CONF_PLUGIN_DEST "\${CMAKE_CURRENT_LIST_DIR}/${_pdir}${OBS_PLUGIN_DESTINATION}")
+	set(CONF_PLUGIN_DEST32 "\${CMAKE_CURRENT_LIST_DIR}/${_pdir}${OBS_PLUGIN32_DESTINATION}")
+	set(CONF_PLUGIN_DEST64 "\${CMAKE_CURRENT_LIST_DIR}/${_pdir}${OBS_PLUGIN64_DESTINATION}")
+	configure_file("${exportname}Config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${exportname}Config.cmake" @ONLY)
+
+	set(_pdir)
+
+	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(IS_ABSOLUTE "${hdr}")
+			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)
 macro(install_obs_core target)
 	if(CMAKE_SIZEOF_VOID_P EQUAL 8)
 	if(CMAKE_SIZEOF_VOID_P EQUAL 8)
 		set(_bit_suffix "64bit/")
 		set(_bit_suffix "64bit/")
@@ -148,9 +202,14 @@ macro(install_obs_core target)
 		set(_bit_suffix "")
 		set(_bit_suffix "")
 	endif()
 	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
 	add_custom_command(TARGET ${target} POST_BUILD
 		COMMAND "${CMAKE_COMMAND}" -E copy
 		COMMAND "${CMAKE_COMMAND}" -E copy
 			"$<TARGET_FILE:${target}>"
 			"$<TARGET_FILE:${target}>"

+ 1 - 4
deps/CMakeLists.txt

@@ -1,7 +1,4 @@
 
 
-if(WIN32)
-	add_subdirectory(w32-pthreads)
-endif()
-
+add_subdirectory(w32-pthreads)
 add_subdirectory(glad)
 add_subdirectory(glad)
 add_subdirectory(jansson)
 add_subdirectory(jansson)

+ 4 - 0
deps/w32-pthreads/CMakeLists.txt

@@ -1,5 +1,9 @@
 project(w32-pthreads)
 project(w32-pthreads)
 
 
+if(NOT WIN32)
+	return()
+endif()
+
 set(w32-pthreads_SOURCES
 set(w32-pthreads_SOURCES
 	pthread.c)
 	pthread.c)
 
 

+ 19 - 12
libobs/CMakeLists.txt

@@ -26,8 +26,6 @@ if(WIN32)
 	set(libobs_PLATFORM_DEPS
 	set(libobs_PLATFORM_DEPS
 		w32-pthreads
 		w32-pthreads
 		winmm.lib)
 		winmm.lib)
-
-	add_definitions(-DPTW32_STATIC_LIB)
 elseif(APPLE)
 elseif(APPLE)
 	set(libobs_PLATFORM_SOURCES
 	set(libobs_PLATFORM_SOURCES
 		obs-cocoa.c
 		obs-cocoa.c
@@ -59,11 +57,11 @@ if(MSVC)
 endif()
 endif()
 
 
 configure_file(
 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
 set(libobs_config_HEADERS
-	config.h
+	"${CMAKE_BINARY_DIR}/config/obsconfig.h"
 	obs-config.h)
 	obs-config.h)
 
 
 set(libobs_callback_SOURCES
 set(libobs_callback_SOURCES
@@ -203,6 +201,7 @@ set(libobs_SOURCES
 	${libobs_libobs_SOURCES})
 	${libobs_libobs_SOURCES})
 
 
 set(libobs_HEADERS
 set(libobs_HEADERS
+	${libobs_config_HEADERS}
 	${libobs_callback_HEADERS}
 	${libobs_callback_HEADERS}
 	${libobs_graphics_HEADERS}
 	${libobs_graphics_HEADERS}
 	${libobs_mediaio_HEADERS}
 	${libobs_mediaio_HEADERS}
@@ -225,13 +224,21 @@ set_target_properties(libobs PROPERTIES
 	OUTPUT_NAME obs
 	OUTPUT_NAME obs
 	VERSION "0"
 	VERSION "0"
 	SOVERSION "0")
 	SOVERSION "0")
-target_link_libraries(libobs
-	jansson
-	${libobs_PLATFORM_DEPS}
-	${Libswscale_LIBRARIES}
-	${Libswresample_LIBRARIES}
-	${Libavutil_LIBRARIES})
+target_compile_definitions(libobs PUBLIC HAVE_OBSCONFIG_H)
 
 
-install_obs_core(libobs)
+if(NOT MSVC)
+	target_compile_options(libobs PUBLIC "-mmmx" "-msse" "-msse2")
+endif()
+
+target_link_libraries(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_data(libobs ../build/data/libobs libobs)
+install_obs_headers(${libobs_HEADERS})
 
 

+ 23 - 0
libobs/LibObsConfig.cmake.in

@@ -0,0 +1,23 @@
+# - Config file for the LibObs package
+# It defines the following variables
+#  LIBOBS_INCLUDE_DIRS
+#  LIBOBS_LIBRARIES
+#  LIBOBS_PLUGIN_DESTINATION{,32,64}
+
+set(LIBOBS_PLUGIN_DESTINATION "@CONF_PLUGIN_DEST@")
+set(LIBOBS_PLUGIN_DESTINATION32 "@CONF_PLUGIN_DEST32@")
+set(LIBOBS_PLUGIN_DESTINATION64 "@CONF_PLUGIN_DEST64@")
+set(LIBOBS_INCLUDE_DIRS "@CONF_INCLUDE_DIRS@")
+
+# Cleanup possible relative paths
+get_filename_component(LIBOBS_PLUGIN_DESTINATION "${LIBOBS_PLUGIN_DESTINATION}" ABSOLUTE)
+get_filename_component(LIBOBS_PLUGIN_DESTINATION32 "${LIBOBS_PLUGIN_DESTINATION32}" ABSOLUTE)
+get_filename_component(LIBOBS_PLUGIN_DESTINATION64 "${LIBOBS_PLUGIN_DESTINATION64}" ABSOLUTE)
+get_filename_component(LIBOBS_INCLUDE_DIRS "${LIBOBS_INCLUDE_DIRS}" ABSOLUTE)
+
+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
 #pragma once
 
 
-#ifdef HAVE_CONFIG_H
-# include "config.h"
+#ifdef HAVE_OBSCONFIG_H
+# include "obsconfig.h"
 #else
 #else
 
 
 #define OBS_VERSION "unknown"
 #define OBS_VERSION "unknown"

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


+ 6 - 3
plugins/mac-avcapture/CMakeLists.txt

@@ -5,13 +5,14 @@ find_library(COCOA Cocoa)
 find_library(COREFOUNDATION CoreFoundation)
 find_library(COREFOUNDATION CoreFoundation)
 find_library(COREMEDIA CoreMedia)
 find_library(COREMEDIA CoreMedia)
 find_library(COREVIDEO CoreVideo)
 find_library(COREVIDEO CoreVideo)
-
+find_library(COCOA Cocoa)
 
 
 include_directories(${AVFOUNDATION}
 include_directories(${AVFOUNDATION}
                     ${COCOA}
                     ${COCOA}
                     ${COREFOUNDATION}
                     ${COREFOUNDATION}
                     ${COREMEDIA}
                     ${COREMEDIA}
-                    ${COREVIDEO})
+                    ${COREVIDEO}
+		    ${COCOA})
 
 
 set(mac-avcapture_HEADERS
 set(mac-avcapture_HEADERS
 	)
 	)
@@ -33,6 +34,8 @@ target_link_libraries(mac-avcapture
 	${COCOA}
 	${COCOA}
 	${COREFOUNDATION}
 	${COREFOUNDATION}
 	${COREMEDIA}
 	${COREMEDIA}
-	${COREVIDEO})
+	${COREVIDEO}
+	${COCOA})
 
 
 install_obs_plugin(mac-avcapture)
 install_obs_plugin(mac-avcapture)
+

+ 6 - 0
plugins/obs-ffmpeg/CMakeLists.txt

@@ -1,5 +1,10 @@
 project(obs-ffmpeg)
 project(obs-ffmpeg)
 
 
+if(WIN32)
+	set(obs-ffmpeg_PLATFORM_DEPS
+		w32-pthreads)
+endif()
+
 find_package(Libavcodec REQUIRED)
 find_package(Libavcodec REQUIRED)
 include_directories(${Libavcodec_INCLUDE_DIR})
 include_directories(${Libavcodec_INCLUDE_DIR})
 add_definitions(${Libavcodec_DEFINITIONS})
 add_definitions(${Libavcodec_DEFINITIONS})
@@ -32,6 +37,7 @@ add_library(obs-ffmpeg MODULE
 	${obs-ffmpeg_SOURCES})
 	${obs-ffmpeg_SOURCES})
 target_link_libraries(obs-ffmpeg
 target_link_libraries(obs-ffmpeg
 	libobs
 	libobs
+	${obs-ffmpeg_PLATFORM_DEPS}
 	${Libavcodec_LIBRARIES}
 	${Libavcodec_LIBRARIES}
 	${Libavutil_LIBRARIES}
 	${Libavutil_LIBRARIES}
 	${Libswscale_LIBRARIES}
 	${Libswscale_LIBRARIES}

+ 1 - 0
plugins/obs-outputs/CMakeLists.txt

@@ -2,6 +2,7 @@ project(obs-outputs)
 
 
 if(WIN32)
 if(WIN32)
 	set(obs-outputs_PLATFORM_DEPS
 	set(obs-outputs_PLATFORM_DEPS
+		w32-pthreads
 		ws2_32.lib
 		ws2_32.lib
 		winmm.lib)
 		winmm.lib)
 endif()
 endif()

+ 3 - 0
test/test-input/CMakeLists.txt

@@ -21,6 +21,9 @@ if(APPLE)
 	set(test-input_PLATFORM_DEPS
 	set(test-input_PLATFORM_DEPS
 		${IOSURF}
 		${IOSURF}
 		${COCOA})
 		${COCOA})
+elseif(WIN32)
+	set(test-input_PLATFORM_DEPS
+		w32-pthreads)
 endif()
 endif()
 
 
 set(test-input_SOURCES
 set(test-input_SOURCES