cmake_minimum_required(VERSION 3.2.2)
cmake_policy(SET CMP0048 NEW)


set(CMAKE_DEBUG_POSTFIX d)

set (PROJECT QMapControl)

project(${PROJECT}
    VERSION "0.9.7.9")

configure_file(${CMAKE_SOURCE_DIR}/qmapcontrol_config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/../qmapcontrol_config.h)

string(TOUPPER ${PROJECT_NAME} PROJECT_TO_UPPER)
string(TOLOWER ${PROJECT_NAME} PROJECT_TO_LOWER)

find_package(Qt5 5.4.2 COMPONENTS Core Widgets Network REQUIRED)

if(CMAKE_COMPILER_IS_GNUCXX)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic -Woverloaded-virtual --std=c++11")
elseif(MSVC)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:wchar_t")
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic -Woverloaded-virtual --std=c++11")
else()
    message("Unknown compiler!")
endif()

if(USING_MATH_DEFINES)
    add_definitions(-D_USE_MATH_DEFINES)
endif(USING_MATH_DEFINES)

if(PRODUCTION_RELEASE)
    add_definitions(-D_PRODUCTION_RELEASE)
endif(PRODUCTION_RELEASE)

include_directories(src)

if (NOT DEFINED QMAPCONTROL_BUILD_STATIC)
    set (QMAPCONTROL_BUILD_STATIC FALSE)
endif (NOT DEFINED QMAPCONTROL_BUILD_STATIC)

if (QMAPCONTROL_BUILD_STATIC)
    set(QMAPCONTROL_BUILD_CONFIGURATION STATIC)
else (QMAPCONTROL_BUILD_STATIC)
    set(QMAPCONTROL_BUILD_CONFIGURATION SHARED)
endif (QMAPCONTROL_BUILD_STATIC)

message("Building project ${PROJECT_NAME}")
message("
Configuration
-------------
PROJECT_VERSION             = ${PROJECT_VERSION}
CMAKE_BUILD_TYPE            = ${CMAKE_BUILD_TYPE}
BUILD_CONFIGUTION           = ${QMAPCONTROL_BUILD_CONFIGURATION}
ENV_CXX_FLAGS               = $ENV{CXXFLAGS}
CMAKE_CXX_FLAGS             = ${CMAKE_CXX_FLAGS}
CMAKE_CXX_BUILD_TYPE_FLAGS  = ${CMAKE_CXX_BUILD_TYPE_FLAGS}
LDFLAGS                     = $ENV{LDFLAGS}
CMAKE_EXE_LINKER_FLAGS      = ${CMAKE_EXE_LINKER_FLAGS}
CMAKE_INSTALL_PREFIX        = ${CMAKE_INSTALL_PREFIX}
")

set(QMAPCONTROL_SOURCES)
set(QMAPCONTROL_HEADERS)

set(QMAPCONTROL_HEADERS
    src/arrowpoint.h
    src/bingapimapadapter.h
    src/circlepoint.h
    src/curve.h
    src/emptymapadapter.h
    src/fixedimageoverlay.h
    src/geometry.h
    src/geometrylayer.h
    src/googlemapadapter.h
    src/gps_position.h
    src/imagemanager.h
    src/imagepoint.h
    src/layer.h
    src/layermanager.h
    src/linestring.h
    src/mapadapter.h
    src/mapcontrol.h
    src/maplayer.h
    src/mapnetwork.h
    src/openaerialmapadapter.h
    src/osmmapadapter.h
    src/point.h
    src/qmapcontrol_global.h
    src/tilemapadapter.h
    src/wmsmapadapter.h
    )

set(QMAPCONTROL_SOURCES
    src/arrowpoint.cpp
    src/bingapimapadapter.cpp
    src/circlepoint.cpp
    src/curve.cpp
    src/emptymapadapter.cpp
    src/fixedimageoverlay.cpp
    src/geometry.cpp
    src/geometrylayer.cpp
    src/googlemapadapter.cpp
    src/gps_position.cpp
    src/imagemanager.cpp
    src/imagepoint.cpp
    src/layer.cpp
    src/layermanager.cpp
    src/linestring.cpp
    src/mapadapter.cpp
    src/mapcontrol.cpp
    src/maplayer.cpp
    src/mapnetwork.cpp
    src/openaerialmapadapter.cpp
    src/osmmapadapter.cpp
    src/point.cpp
    src/tilemapadapter.cpp
    src/wmsmapadapter.cpp
    )

# project version
set(VERSION ${PROJECT_VERSION})
set(SOVERSION ${PROJECT_VERSION})
add_definitions(-DQMAPCONTROL_VERSION=${PROJECT_VERSION_MAJOR}*65536+${PROJECT_VERSION_MINOR}*256+${PROJECT_VERSION_PATCH})
add_definitions(-DQMAPCONTROL_VERSION_STR="${PROJECT_VERSION}")



add_library(${PROJECT_NAME} ${QMAPCONTROL_BUILD_CONFIGURATION}
    ${QMAPCONTROL_SOURCES}
    ${QMAPCONTROL_HEADERS}
    )


# LINKING
target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Widgets Qt5::Network)
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src)

set_target_properties(${PROJECT_NAME} PROPERTIES
    SOVERSION ${PROJECT_VERSION}
    VERSION ${PROJECT_VERSION}
    DEFINE_SYMBOL ${PROJECT_TO_UPPER}_LIBRARY)

if(APPLE)
    set_target_properties(${PROJECT_NAME} PROPERTIES
        BUILD_WITH_INSTALL_RPATH ON
        INSTALL_NAME_DIR "@loader_path/lib")
endif(APPLE)
