cmake_minimum_required(VERSION 2.8.4)
project(kRPC)

set(VERSION_NUMBER 0.4.5)
set(CMAKE_BUILD_TYPE "Release")

if(CMAKE_COMPILER_IS_GNUCXX)
  # Enable C++ 2011 when building with gcc
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
endif()

# Check for protobuf
find_package(Protobuf 3.2 REQUIRED)

# Check for ASIO headers
find_path(HAVE_ASIO asio.hpp)
message(${HAVE_ASIO})
if(NOT HAVE_ASIO)
  unset(HAVE_ASIO CACHE)
  message(FATAL_ERROR "asio.hpp not found")
endif()
add_definitions(-DASIO_STANDALONE)

if(WIN32 OR CYGWIN)
  add_definitions(-D_SCL_SECURE_NO_WARNINGS)
  add_definitions(-D_WIN32_WINNT=0x0501)
  add_definitions(-D__USE_W32_SOCKETS)
endif()

if(MSVC)
  # protobuf statically links against MT, so need to compile with /MT not /MD
  foreach(var
        CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
        CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
      if(${var} MATCHES "/MD")
        string(REGEX REPLACE "/MD" "/MT" ${var} "${${var}}")
      endif()
    endforeach()
endif()

include_directories(include include/krpc ${PROTOBUF_INCLUDE_DIRS})

file(GLOB SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
add_library(krpc SHARED ${SRC})

set_target_properties(
  krpc PROPERTIES VERSION   ${VERSION_NUMBER}
                  SOVERSION ${VERSION_NUMBER}
                  INSTALL_NAME_DIR lib)

target_link_libraries(krpc ${PROTOBUF_LIBRARIES})

if(WIN32 OR CYGWIN)
  target_link_libraries(krpc ws2_32 mswsock)
endif()

install(TARGETS krpc
        LIBRARY DESTINATION lib
        ARCHIVE DESTINATION lib)

install(DIRECTORY include DESTINATION . FILES_MATCHING PATTERN "*.hpp")
