cmake_minimum_required(VERSION 3.16)

project(serialdevice)

if(WIN32)

    add_definitions(-DUNICODE -D_UNICODE)

    if(MSVC)
	    set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
    endif()

endif()

if(DEFINED TARGET_BIN_LOCATION)
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${TARGET_BIN_LOCATION})
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${TARGET_BIN_LOCATION})
else()
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)
endif()

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)

find_package(QT NAMES Qt6 Qt5)

message(STATUS "Using prefix Qt${QT_VERSION_MAJOR} for components...")

find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(sources src/libserialdevice.cpp)

set(headers src/libserialdevice.h
            src/libserialdeviceenum.h
            src/serial.h)

if(UNIX)

    if(DEFINED sources)
        list(APPEND sources src/serial_unix.cpp)
    else()
        set(sources src/serial_unix.cpp)
    endif()

endif()

if(WIN32)

    if(DEFINED sources)
        list(APPEND sources src/serial_win.cpp)
    else()
        set(sources src/serial_win.cpp)
    endif()

endif()

if(WIN32)
    add_library(serialdevice SHARED ${sources} ${headers})
else()
    add_library(serialdevice STATIC ${sources} ${headers})
endif()

target_link_libraries(serialdevice PRIVATE Qt${QT_VERSION_MAJOR}::Core)
if(${QT_VERSION_MAJOR} GREATER 4)
    target_link_libraries(serialdevice PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
endif()

target_compile_definitions(serialdevice PRIVATE CONFIGURE_DLL_EXPORT)

set_target_properties(serialdevice PROPERTIES DEBUG_POSTFIX "d")

install(TARGETS serialdevice DESTINATION lib)

