#################################################
#   ___________    ____ ______  __ __  _____    #
#   \____ \__  \ _/ ___\\____ \|  |  \/  ___/   #
#   |  |_> > __ \\  \___|  |_> >  |  /\___ \    #
#   |   __(____  /\___  >   __/|____//____  >   #
#   |__|       \/     \/|__|              \/    #
#                                               #
#################################################
project(PacpusTools)

create_export(EXPORT_HDR ${PROJECT_NAME} "${PACPUS_INCLUDE_DIR}/Pacpus/PacpusTools")

# ========================================
# Compiler definitions
# ========================================
add_definitions(${QT_DEFINITIONS})

# ========================================
# Include directories
# ========================================
include_directories(${QT_INCLUDE_DIR})

# ========================================
# Link directories
# ========================================
link_directories(
    ${PROJECT_BINARY_DIR}/../PacpusLib
	${PROJECT_BINARY_DIR}/../RoadTime
)

# ========================================
# List of sources
# ========================================
set(PROJECT_HDRS
    ${EXPORT_HDR}
    ${PACPUS_INCLUDE_DIR}/Pacpus/PacpusTools/AsyncWorkerBase.h
    ${PACPUS_INCLUDE_DIR}/Pacpus/PacpusTools/BinaryDecoder.h
    ${PACPUS_INCLUDE_DIR}/Pacpus/PacpusTools/geodesie.h
    ${PACPUS_INCLUDE_DIR}/Pacpus/PacpusTools/matrice.h
    ${PACPUS_INCLUDE_DIR}/Pacpus/PacpusTools/PeriodicWorker.h
    ${PACPUS_INCLUDE_DIR}/Pacpus/PacpusTools/PosixShMem.h
    ${PACPUS_INCLUDE_DIR}/Pacpus/PacpusTools/ShMem.h
    #${PACPUS_INCLUDE_DIR}/Pacpus/PacpusTools/pacpusStruct.h
    #${PACPUS_INCLUDE_DIR}/Pacpus/PacpusTools/PacpusSerialPort.h
)

set(PROJECT_SRCS
    ./src/matrice.cpp
    ./src/geodesie.cpp
    ./src/AsyncWorkerBase.cpp
    ./src/PeriodicWorker.cpp
    #./src/PacpusSerialPort.cpp
)

# ========================================
# Files to MOC
# ========================================
set(FILES_TO_MOC
    ${PACPUS_INCLUDE_DIR}/Pacpus/PacpusTools/AsyncWorkerBase.h
    ${PACPUS_INCLUDE_DIR}/Pacpus/PacpusTools/PeriodicWorker.h
    #${PACPUS_INCLUDE_DIR}/Pacpus/PacpusTools/PacpusSerialPort.h
)

# ========================================
# Call MOC
# ========================================
qt_wrap_cpp(
    PROJECT_MOC_SRCS
    ${FILES_TO_MOC}
)

# ========================================
# Platform specific sources
# ========================================
# Unix
if(UNIX)
    list(APPEND PROJECT_SRCS
        ${PACPUS_INCLUDE_DIR}/Pacpus/PacpusTools/PosixShMem.h
        src/PosixShMem.cpp
    )
endif()
# Windows
if(WIN32)
    list(APPEND PROJECT_SRCS
        ${PACPUS_INCLUDE_DIR}/Pacpus/PacpusTools/Win32ShMem.h
        src/Win32ShMem.cpp
    )
endif()

# ========================================
# Build a library
# ========================================
pacpus_add_library(
    ${PROJECT_NAME} SHARED
    ${PROJECT_SRCS}
    ${PROJECT_MOC_SRCS}
)

# ========================================
# Libraries
# ========================================
set(OPT_LIBRARIES
    optimized PacpusLib debug PacpusLib_d
)

# Windows platform
if(WIN32)
    LIST(APPEND OPT_LIBRARIES
        optimized ROAD_TIME debug ROAD_TIME_d
)
endif()

target_link_libraries(
    ${PROJECT_NAME}
    ${QT_LIBRARIES}
    ${PACPUS_DEPENDENCIES_LIB}
    ${OPT_LIBRARIES}
)

# ========================================
# Install
# ========================================
pacpus_install(${PROJECT_NAME})

# ========================================
# Folder
# ========================================
pacpus_folder(${PROJECT_NAME} "libraries")
