cmake_minimum_required(VERSION 3.14)

project(ExtendedLogViewer
	LANGUAGES CXX
    VERSION 1.2.0.0
	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()
#    qt6_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()

# Declare that the project will have a German translation.
qt_standard_project_setup(I18N_TRANSLATED_LANGUAGES de)

qt_add_translations(
	ExtendedLogViewer
	TS_OUTPUT_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/lang/
	QM_FILES_OUTPUT_VARIABLE QM_FILES
)

add_library(ExtendedLogViewer SHARED
	${H_FILES}
	${CPP_FILES}
	${UI_FILES}
	${RES_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
)
