cmake_minimum_required(VERSION 3.14)

project(SqlWorker
    LANGUAGES CXX
    VERSION 4.1.0.12
    DESCRIPTION "Library for easy connections to MySql-servers."
)

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 Qt5 COMPONENTS Core Sql LinguistTools REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Sql LinguistTools REQUIRED)

set(TS_FILES
    lang/SqlWorker_de_DE.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/SqlWorker_global.hpp
    include/DatabaseWorker.hpp
    include/DatabaseType.hpp
)

set(CPP_FILES
    src/DatabaseWorker.cpp
)

set(PROJECT_FILES
    ${H_FILES}
    ${CPP_FILES}
    ${TS_FILES}
    ${QM_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(${PROJECT_NAME} SHARED
    ${PROJECT_FILES}
    include/DatabaseType.hpp
)

add_library(SqlWorker::SqlWorker ALIAS ${PROJECT_NAME})
target_link_libraries(${PROJECT_NAME} PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Sql)

if(BUILD_SHARED_LIBS)
    target_compile_definitions(${PROJECT_NAME} PRIVATE SQLWORKER_LIBRARY)
    target_compile_definitions(${PROJECT_NAME} PUBLIC SQLWORKER_SHARED)
endif(BUILD_SHARED_LIBS)

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

write_basic_package_version_file(
    ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
    VERSION "${PROJECT_VERSION}"
    COMPATIBILITY AnyNewerVersion
)

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

install(
    TARGETS ${PROJECT_NAME}
    EXPORT ${PROJECT_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}/${PROJECT_NAME}
)

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

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

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

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