# SDK support library.
SET(LIBDVSDK_SRC_FILES
	# Forward to runtime library part.
	sdk_base.cpp
	sdk_module.cpp
	# Standalone library part.
	sdk_cross.cpp
	../config_tree/tree.cpp
	../config_tree/helper.cpp
	../config_tree/node.cpp)

# Set full RPATH
SET(CMAKE_INSTALL_RPATH ${USER_LOCAL_PREFIX}/${CMAKE_INSTALL_LIBDIR})

# Compile SDK library.
ADD_LIBRARY(sdk SHARED ${LIBDVSDK_SRC_FILES})
ADD_LIBRARY(dv::sdk ALIAS sdk)

SET_TARGET_PROPERTIES(sdk PROPERTIES OUTPUT_NAME dvsdk)

TARGET_LINK_LIBRARIES(
	sdk
	PUBLIC dv::processing
	PRIVATE Boost::filesystem)

TARGET_INCLUDE_DIRECTORIES(
	sdk
	PUBLIC $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>
	PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
	PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)

TARGET_COMPILE_FEATURES(sdk PUBLIC cxx_std_20)

SET_TARGET_PROPERTIES(sdk PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR} VERSION ${PROJECT_VERSION})

TARGET_COMPILE_OPTIONS(sdk PRIVATE ${SYSTEM_WARN_CXX_FLAGS})

# Hidden visibility for public library.
SET_TARGET_PROPERTIES(
	sdk
	PROPERTIES C_VISIBILITY_PRESET hidden
			   CXX_VISIBILITY_PRESET hidden
			   VISIBILITY_INLINES_HIDDEN 1)

# Install
INSTALL(
	TARGETS sdk
	EXPORT "dv-targets"
	ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
	LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
	RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})

# Visibility macros for the library.
INCLUDE(GenerateExportHeader)

GENERATE_EXPORT_HEADER(
	sdk
	BASE_NAME
	dvsdk
	EXPORT_FILE_NAME
	${PROJECT_BINARY_DIR}/include/dv-sdk/api_visibility.h)

INSTALL(FILES ${PROJECT_BINARY_DIR}/include/dv-sdk/api_visibility.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dv-sdk)

# CMake targets and files to support FIND_PACKAGE().
SET(CMAKE_EXPORT_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/dv)

INSTALL(
	EXPORT "dv-targets"
	DESTINATION ${CMAKE_EXPORT_DESTINATION}
	NAMESPACE "dv::")

INCLUDE(CMakePackageConfigHelpers)

# Generate a config file so other CMake project can include it.
CONFIGURE_PACKAGE_CONFIG_FILE(
	${PROJECT_SOURCE_DIR}/cmake/dv-config.cmake.in ${PROJECT_BINARY_DIR}/dv-config.cmake
	INSTALL_DESTINATION ${CMAKE_EXPORT_DESTINATION}
	PATH_VARS CMAKE_EXPORT_DESTINATION)

# Generate a version file; IMPORTANT: Compatibility setting is SameMajorVersion, so CMake will assume that any version
# requirement with same major version value will be compatible. Adjust this setting according to your project
# requirements, for a publicly released library, this setting is the de-facto assumed default by many package managers.
# State the compatibility approach in your docs if this is not the case. Compatibility setting can be removed for
# internal unstable libraries.
WRITE_BASIC_PACKAGE_VERSION_FILE(
	${PROJECT_BINARY_DIR}/dv-config-version.cmake
	VERSION ${PROJECT_VERSION}
	COMPATIBILITY SameMajorVersion)

# Install CMake config files.
INSTALL(FILES ${PROJECT_BINARY_DIR}/dv-config.cmake ${PROJECT_BINARY_DIR}/dv-config-version.cmake
		DESTINATION ${CMAKE_EXPORT_DESTINATION})

# Generate pkg-config file
CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/cmake/libdvsdk.pc.in ${PROJECT_BINARY_DIR}/libdvsdk.pc @ONLY)

INSTALL(FILES ${PROJECT_BINARY_DIR}/libdvsdk.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
