cmake_minimum_required(VERSION 3.14)

project(ExtendedLogViewer
	LANGUAGES CXX
    VERSION 1.1.2.3
	DESCRIPTION "A graphical user interface library to view 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)
set(CMAKE_AUTOUIC_SEARCH_PATHS ui)
option(BUILD_SHARED_LIBS "Force building shared library" ON)
set(NAME ExtendedLogViewer)

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

set(TS_FILES
	lang/ExtendedLogViewer_de.ts
	lang/ExtendedLogViewer_en.ts
)

if(COMMAND qt_create_translation)
    qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
else()
    qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
endif()

set(H_FILES
	include/ExtendedLogViewer_global.h
	include/ExtendedLogViewer.hpp
)

set(CPP_FILES
	src/ExtendedLogViewer.cpp
)

set(RES_FILES
	resources/ExtendedLogViewer.qrc
)

set(UI_FILES
	ui/ExtendedLogViewer.ui
)

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(
		resources/winres.rc.in
		winres.rc
		@ONLY
	)

    list(APPEND RES_FILES
		winres.rc
    )
endif()

add_library(ExtendedLogViewer SHARED
	${H_FILES}
	${CPP_FILES}
	${UI_FILES}
	${RES_FILES}
	${TS_FILES}
	${QM_FILES}
)

add_library(ExtendedLogViewer::ExtendedLogViewer ALIAS ExtendedLogViewer)
target_link_libraries(ExtendedLogViewer PRIVATE
	Qt${QT_VERSION_MAJOR}::Widgets
	ExtendedLog
)

if(BUILD_SHARED_LIBS)
	target_compile_definitions(ExtendedLogViewer PRIVATE EXTENDEDLOGVIEWER_LIBRARY)
	target_compile_definitions(ExtendedLogViewer PUBLIC EXTENDEDLOGVIEWER_SHARED)
endif(BUILD_SHARED_LIBS)

include(GNUInstallDirs)
target_include_directories(${NAME} 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(${NAME} PROPERTIES
	SOVERSION ${PROJECT_VERSION_MAJOR}
	VERSION ${PROJECT_VERSION}
)

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

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

install(
	TARGETS ${NAME}
	EXPORT ${NAME}Config
	LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
	ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
	RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

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

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

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

install(
	EXPORT ${NAME}Config
	DESTINATION ${INSTALL_CONFIGDIR}
)

export(
	TARGETS ${NAME}
	FILE ${NAME}Config.cmake
)

set(LOG_TEST_FILES test/main.cpp)
add_executable(logTest ${LOG_TEST_FILES})
target_include_directories(logTest PUBLIC
      $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> # include directory in your build tree
      $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>       # include directory when installed
)
target_link_libraries(logTest PRIVATE
	Qt${QT_VERSION_MAJOR}::Widgets
    ExtendedLogViewer
	ExtendedLog
)
