cmake_minimum_required (VERSION 2.8)

execute_process(COMMAND uname -m OUTPUT_VARIABLE PROCESSOR OUTPUT_STRIP_TRAILING_WHITESPACE)

option(BUILD_SHARED_LIBS "Build using shared libraries" OFF)
if(NOT CMAKE_HOST_WIN32)
  set(ENABLE_SSE42 OFF CACHE BOOL "Enable sse4.2 instructions on intel chips.")
  set(STD_CXX_VERSION c++11 CACHE STRING "Choose the C++ standard version for the build.")
  set(STD_C_VERSION gnu11 CACHE STRING "Choose that C standard version for the build.")
  set(ENABLE_ADDRESS_SANITIZER OFF CACHE BOOL "Enable address sanitizer for memory corruption checks.")
  set(ENABLE_THREAD_SANITIZER OFF CACHE BOOL "Enable thread sanitizer (disables address sanitizer).")
endif(NOT CMAKE_HOST_WIN32)

set(VERSION_NUM 5.3.5.1)
set(VERSION_COMMIT c72f6812)
set(VERSION_BUILD_TIME 062490)

get_cmake_property(_variableNames VARIABLES)
list (SORT _variableNames)
foreach (_variableName ${_variableNames})
    message(STATUS "${_variableName}=`${${_variableName}}`")
    endforeach()

PROJECT(AMPSC++Client CXX C)

if (NOT CMAKE_BUILD_TYPE)
  SET(CMAKE_BUILD_TYPE "Release")
endif()

if(NOT CMAKE_HOST_WIN32)
  if(NOT ${CMAKE_HOST_SYSTEM_NAME})
    execute_process(COMMAND uname -s OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_NAME OUTPUT_STRIP_TRAILING_WHITESPACE)
  endif(NOT ${CMAKE_HOST_SYSTEM_NAME})
  if(ENABLE_SSE42)
    if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Darwin")
      message("sse42 disabled")
    else(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Darwin")
      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
      set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2")
      message("sse4.2 enabled")
    endif(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Darwin")
  else(ENABLE_SSE42)
    message("sse42 disabled")
  endif(ENABLE_SSE42)

  if(ENABLE_THREAD_SANITIZER)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread")
  else(ENABLE_THREAD_SANITIZER)
    if(ENABLE_ADDRESS_SANITIZER)
      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
      set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
    endif(ENABLE_ADDRESS_SANITIZER)
  endif(ENABLE_THREAD_SANITIZER)
endif(NOT CMAKE_HOST_WIN32)

if(CMAKE_HOST_WIN32)
  add_definitions(/DAMPS_BUILD=1)
  if(BUILD_SHARED_LIBS)
    add_definitions(/DAMPS_SHARED=1)
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /TP /W3 /Zi /EHsc /Od /MDd /LD")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /TP /W3 /Zi /EHsc /Ox /Ot /MD /LD")
  else(BUILD_SHARED_LIBS)
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /TP /W3 /Zi /EHsc /Od /MDd")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /TP /W3 /Zi /EHsc /Ox /Ot /MD")
  endif(BUILD_SHARED_LIBS)
else(CMAKE_HOST_WIN32)
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=${STD_C_VERSION}")
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wconversion -Wsign-compare ")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=${STD_CXX_VERSION}")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wconversion -pedantic -Wsign-compare -Wno-long-long -Wno-variadic-macros")
endif(CMAKE_HOST_WIN32)

include_directories(BEFORE include )
add_library(amps src/amps_protocol.c src/amps_ssl.c src/atfork.c src/client.c src/message.c src/tcp.c src/tcps.c src/transports.c src/unix.c src/uri.c)
set_target_properties(amps PROPERTIES VERSION ${VERSION_NUM})

install(TARGETS amps ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin)
install(DIRECTORY include DESTINATION . FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp")

set(CPACK_PACKAGE_NAME "amps-c++-client")
set(CPACK_PACKAGE_VENDOR "60East Technologies, Inc.")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "AMPS C++ Client Library")
set(CPACK_PACKAGE_VERSION "${VERSION_NUM}")
set(CPACK_PACKAGE_INSTALL_DIRECTORY "AMPS-C++")

if(CMAKE_HOST_WIN32)
  set(CPACK_SYSTEM_NAME "Windows")
  set(CPACK_GENERATOR "ZIP")
else(CMAKE_HOST_WIN32)
  set(CPACK_GENERATOR "TGZ")
endif(CMAKE_HOST_WIN32)

include(CPack)


