cmake_minimum_required(VERSION 3.5)

project(${OMCZeroMQName} VERSION 0.1)

set(Boost_DEBUG 1)
message(STATUS "MINGW:")
message(STATUS ${IS_MINGW64})

# Check environment variables
if(WIN32)
  if(NOT DEFINED ENV{OMDEV})
    message(FATAL_ERROR "Environment variable \"OMDEV\" is not set.")
  endif()
  if(NOT DEFINED ENV{MSYSTEM_PREFIX})
    message(FATAL_ERROR "Environment variable \"MSYSTEM_PREFIX\" is not set.")
  endif()
  string(REPLACE "\\" "/" OMDEV_ESCAPED "$ENV{OMDEV}")
  string(REPLACE "\\" "/" MSYSTEM_PREFIX_ESCAPED "$ENV{MSYSTEM_PREFIX}")
endif()

if(IS_MINGW32)
  message(FATAL_ERROR "32-bit version not supported")
elseif(IS_MINGW64)
  set(BOOST_ROOT ${MSYSTEM_PREFIX_ESCAPED})
else()
  if(MSVC_VERSION GREATER 1800)
    message(STATUS "USE MSVC 2015 and greater:")
    set(Boost_COMPILER  "-vc142")
  elseif(MSVC_VERSION GREATER 1700)
    set(BOOST_ROOT ${OMDEV_ESCAPED}"/lib/3rdParty/boost-1_59/")
  else()
    set(BOOST_ROOT ${OMDEV_ESCAPED}"/lib/3rdParty/boost-1_55/")
  endif()
endif(IS_MINGW32)
message(STATUS "Boost root for omc - zeromq:")
message(STATUS ${BOOST_ROOT})
find_package(Boost 1.60.0 COMPONENTS program_options)
if(Boost_FOUND)
  if(NOT(COMPILER_SUPPORTS_CXX11))
    find_package(Threads)
    if(Boost_THREAD_FOUND AND Boost_ATOMIC_FOUND)
      add_definitions(-DUSE_THREAD)
      message(STATUS "Using boost thread for omc zeromq")
    else(Boost_THREAD_FOUND AND Boost_ATOMIC_FOUND)
      message(STATUS "Boost thread for omc zeromq disabled")
    endif(Boost_THREAD_FOUND AND Boost_ATOMIC_FOUND)
  else(NOT(COMPILER_SUPPORTS_CXX11))
    message(STATUS "Boost thread disabled for omc zeromq because of available C++11 support")
  endif(NOT(COMPILER_SUPPORTS_CXX11))
else()
  message(STATUS "Boost version is older than 1.60 therefore boost threads and system is needed for boost property tree")
  #older boost versions needs for boost property tree library boost threads and system
  find_package(Boost REQUIRED COMPONENTS program_options thread)
endif()

message(STATUS "using boost include for omc - zeromq:  ${Boost_INCLUDE_DIR}")
message(STATUS "Boost Libraries for omc - zeromq:")
message(STATUS ${Boost_LIBRARIES})
#dynamic link boost
add_definitions( -DBOOST_ALL_NO_LIB )
add_definitions( -DBOOST_ALL_DYN_LINK )
#for msvc the c-api library is not supported therfore the generated import library from the mingw dll is used
if(MSVC)
  message(STATUS "OMC C API Root: ${OMCAPI_ROOT} " )
  set(OMCCAPI_INLCUDE_HOME  ${OMCAPI_ROOT}/include/)
  set(OMCCAPI_LIBRARY_RELEASE_HOME   ${OMCAPI_ROOT}/lib)
  find_library(OMCCAPIName "libOMCDLL" NO_DEFAULT_PATH NO_SYSTEM_ENVIRONMENT_PATH
       PATHS ${OMCCAPI_LIBRARY_RELEASE_HOME} )
  message(STATUS "A ${OMCCAPIName} B" )
  if(NOT OMCCAPIName)
    message(FATAL_ERROR "Could not find omc c- api library ${OMCCAPI_LIBRARY_RELEASE_HOME}")
  endif(OMCCAPIName)
endif(MSVC)


message(STATUS "omc c api include:")
message(STATUS "${OMCCAPI_INLCUDE_HOME}")
message(STATUS "omc c api library path:")
#FIND_PATH(OMCCAPI_INCLUDE_DIR OMC.h PATHS ${OMCCAPI_INLCUDE_HOME})
#IF (NOT OMCCAPI_INCLUDE_DIR)
#  MESSAGE(FATAL_ERROR "Could not find omc c- api")
#ENDIF(NOT OMCCAPI_INCLUDE_DIR)
message(STATUS "omc c api library: ${OMCCAPIName}  includ dir: ${OMCCAPI_INCLUDE_DIR} ")



include_directories(${cppzmq_INCLUDE_DIR} ${ZeroMQ_INCLUDE_DIR}  ${OMCCAPI_INCLUDE_DIR} ${Boost_INCLUDE_DIR} include/)
add_executable(${OMCZeroMQName} src/omc.cpp src/omcZeromqTask.cpp)


#link with gc lib
#target_link_libraries(${OMCZeroMQName}   ${ZeroMQ_LIB} ${OMCCAPIName} ${Boost_LIBRARIES} ${OMCGC_LIB} )
#target_link_libraries(${OMCZeroMQName}  ${ZeroMQ_LIBRARY} ${OMCCAPIName} ${Boost_LIBRARIES}  )
target_link_libraries(${OMCZeroMQName} libzmq ${OMCCAPIName} ${Boost_LIBRARIES}  )
install(TARGETS ${OMCZeroMQName} DESTINATION bin )
