cmake_minimum_required(VERSION 3.14)

project(ExtendedLog
	LANGUAGES CXX
	VERSION 1.2.0.3
	DESCRIPTION "A library to create and read a 'extended' log-file."
)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
option(BUILD_SHARED_LIBS "Force building shared library" ON)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)

set(H_FILES
	include/ExtendedLog_global.h
	include/LogEntry.hpp
	include/LogReader.hpp
	include/EntryType.hpp
	include/LogWriter.hpp
	include/MultipleLogWriter.hpp
	include/TextLogReader.hpp
	include/TextLogWriter.hpp
	include/XmlLogReader.hpp
	include/XmlLogWriter.hpp
)

set(CPP_FILES
	src/LogEntry.cpp
	src/LogReader.cpp
	src/MultipleLogWriter.cpp
	src/TextLogReader.cpp
	src/TextLogWriter.cpp
	src/XmlLogReader.cpp
	src/XmlLogWriter.cpp
)

set(PROJECT_FILES
	${H_FILES}
	${CPP_FILES}
)

if(WIN32)
	# we need the following to statements for the windows file-attributes configuration
	set(PROJECT_VENDOR "E W")
	set(WIN32_FILE_EXTENSION "dll")

	configure_file(
		${CMAKE_CURRENT_SOURCE_DIR}/winres.rc.in
		${CMAKE_BINARY_DIR}/winres.rc
		@ONLY
	)

    list(APPEND PROJECT_FILES
		${CMAKE_BINARY_DIR}/winres.rc
    )
endif()

add_library(ExtendedLog SHARED
	${PROJECT_FILES}
)

add_library(ExtendedLog::ExtendedLog ALIAS ExtendedLog)
target_link_libraries(ExtendedLog PUBLIC Qt${QT_VERSION_MAJOR}::Core)

if(BUILD_SHARED_LIBS)
	target_compile_definitions(ExtendedLog PRIVATE EXTENDEDLOG_LIBRARY)
	target_compile_definitions(ExtendedLog PUBLIC EXTENDEDLOG_SHARED)
endif(BUILD_SHARED_LIBS)

include(GNUInstallDirs)
target_include_directories(ExtendedLog PUBLIC
	$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> # include directory in your build tree
	$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>       # include directory when installed
)

include(CMakePackageConfigHelpers)

set_target_properties(ExtendedLog PROPERTIES
	SOVERSION ${PROJECT_VERSION_MAJOR}
	VERSION ${PROJECT_VERSION}
)

write_basic_package_version_file(
	${CMAKE_CURRENT_BINARY_DIR}/ExtendedLogConfigVersion.cmake
	VERSION "${PROJECT_VERSION}"
    COMPATIBILITY SameMajorVersion
)

set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/ExtendedLog)

install(
	TARGETS ExtendedLog
	EXPORT ExtendedLogConfig
	LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
	ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
	RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

install(
	FILES ${H_FILES}
	DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ExtendedLog
)

install(
  FILES ${QM_FILES}
  DESTINATION ${CMAKE_INSTALL_DATADIR}/ExtendedLog/i18n
)

install(
	FILES ${CMAKE_CURRENT_BINARY_DIR}/ExtendedLogConfigVersion.cmake
	DESTINATION ${INSTALL_CONFIGDIR}
)

install(
	EXPORT ExtendedLogConfig
	DESTINATION ${INSTALL_CONFIGDIR}
)

export(
	TARGETS ExtendedLog
	FILE ExtendedLogConfig.cmake
)
