view Resources/CMake/GoogleLogConfiguration.cmake @ 1851:d364926389e0

OrthancFindRequestHandler::FilterQueryTag
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 01 Dec 2015 14:53:52 +0100
parents d2bccd57795e
children
line wrap: on
line source

if (STATIC_BUILD OR NOT USE_SYSTEM_GOOGLE_LOG)
  SET(GOOGLE_LOG_SOURCES_DIR ${CMAKE_BINARY_DIR}/glog-0.3.2)
  SET(GOOGLE_LOG_URL "http://www.montefiore.ulg.ac.be/~jodogne/Orthanc/ThirdPartyDownloads/glog-0.3.2.tar.gz")
  SET(GOOGLE_LOG_MD5 "897fbff90d91ea2b6d6e78c8cea641cc")

  if (IS_DIRECTORY "${GOOGLE_LOG_SOURCES_DIR}")
    set(FirstRun OFF)
  else()
    set(FirstRun ON)
  endif()

  DownloadPackage(${GOOGLE_LOG_MD5} ${GOOGLE_LOG_URL} "${GOOGLE_LOG_SOURCES_DIR}")

  # Glog 0.3.3 fails to build with old versions of MinGW, such as the
  # one installed on our Continuous Integration Server that runs
  # Debian Squeeze. We thus stick to Glog 0.3.2 for the time being.

  #SET(GOOGLE_LOG_SOURCES_DIR ${CMAKE_BINARY_DIR}/glog-0.3.3)
  #DownloadPackage(
  #  "a6fd2c22f8996846e34c763422717c18"
  #  "http://www.montefiore.ulg.ac.be/~jodogne/Orthanc/ThirdPartyDownloads/glog-0.3.3.tar.gz"
  #  "${GOOGLE_LOG_SOURCES_DIR}")


  set(GOOGLE_LOG_HEADERS
    ${GOOGLE_LOG_SOURCES_DIR}/src/glog/logging.h
    ${GOOGLE_LOG_SOURCES_DIR}/src/glog/raw_logging.h
    ${GOOGLE_LOG_SOURCES_DIR}/src/glog/stl_logging.h
    ${GOOGLE_LOG_SOURCES_DIR}/src/glog/vlog_is_on.h
    )

  set(ac_google_namespace google)
  set(ac_google_start_namespace "namespace google {")
  set(ac_google_end_namespace "}")

  if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR
      ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" OR
      ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD" OR
      ${CMAKE_SYSTEM_NAME} STREQUAL "kFreeBSD")
    set(ac_cv_have_unistd_h 1)
    set(ac_cv_have_stdint_h 1)
    set(ac_cv_have_systypes_h 0)
    set(ac_cv_have_inttypes_h 0)
    set(ac_cv_have_libgflags 0)
    set(ac_cv_have_uint16_t 1)
    set(ac_cv_have_u_int16_t 0)
    set(ac_cv_have___uint16 0)
    set(ac_cv_cxx_using_operator 1)
    set(ac_cv_have___builtin_expect 1)
  else()
    set(ac_cv_have_unistd_h 0)
    set(ac_cv_have_stdint_h 0)
    set(ac_cv_have_systypes_h 0)
    set(ac_cv_have_inttypes_h 0)
    set(ac_cv_have_libgflags 0)
    set(ac_cv_have_uint16_t 0)
    set(ac_cv_have_u_int16_t 0)
    set(ac_cv_have___uint16 1)
    set(ac_cv_cxx_using_operator 1)
    set(ac_cv_have___builtin_expect 0)
  endif()

  foreach (f ${GOOGLE_LOG_HEADERS})
    configure_file(${f}.in ${f})
  endforeach()

  include_directories(
    ${GOOGLE_LOG_SOURCES_DIR}/src
    )

  if (CMAKE_COMPILER_IS_GNUCXX)
    if ("${CMAKE_SYSTEM_VERSION}" STREQUAL "LinuxStandardBase")
      execute_process(
        COMMAND ${PATCH_EXECUTABLE} -N utilities.cc -i ${ORTHANC_ROOT}/Resources/Patches/glog-utilities-lsb.diff
        WORKING_DIRECTORY ${GOOGLE_LOG_SOURCES_DIR}/src
        RESULT_VARIABLE Failure
        )
    else()
      execute_process(
        COMMAND ${PATCH_EXECUTABLE} -N utilities.cc -i ${ORTHANC_ROOT}/Resources/Patches/glog-utilities.diff
        WORKING_DIRECTORY ${GOOGLE_LOG_SOURCES_DIR}/src
        RESULT_VARIABLE Failure
        )
    endif()

    if (Failure AND FirstRun)
      message(FATAL_ERROR "Error while patching a file")
    endif()

    # Patches for MinGW
    execute_process(
      #COMMAND ${PATCH_EXECUTABLE} -N port.h -i ${ORTHANC_ROOT}/Resources/Patches/glog-port-h.diff 
      COMMAND ${PATCH_EXECUTABLE} -N port.h -i ${ORTHANC_ROOT}/Resources/Patches/glog-port-h-v2.diff 
      WORKING_DIRECTORY ${GOOGLE_LOG_SOURCES_DIR}/src/windows
      RESULT_VARIABLE Failure
      )

    if (Failure AND FirstRun)
      message(FATAL_ERROR "Error while patching a file")
    endif()

    execute_process(
      COMMAND ${PATCH_EXECUTABLE} -N port.cc -i ${ORTHANC_ROOT}/Resources/Patches/glog-port-cc.diff 
      WORKING_DIRECTORY ${GOOGLE_LOG_SOURCES_DIR}/src/windows
      RESULT_VARIABLE Failure
      )

    if (Failure AND FirstRun)
      message(FATAL_ERROR "Error while patching a file")
    endif()

  elseif (MSVC)
    # https://code.google.com/p/google-glog/issues/detail?id=117
    configure_file(
      ${ORTHANC_ROOT}/Resources/Patches/glog-visual-studio-port.h
      ${GOOGLE_LOG_SOURCES_DIR}/src/windows/port.h
      COPYONLY)

  endif()


  if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR
      ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" OR
      ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD" OR
      ${CMAKE_SYSTEM_NAME} STREQUAL "kFreeBSD")
    if ("${CMAKE_SYSTEM_VERSION}" STREQUAL "LinuxStandardBase")
      # Install the specific configuration for LSB SDK
      configure_file(
        ${ORTHANC_ROOT}/Resources/CMake/GoogleLogConfigurationLSB.h
        ${GOOGLE_LOG_SOURCES_DIR}/src/config.h
        COPYONLY)
    elseif ("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
      # Install the specific configuration for Mac OS
      configure_file(
        ${ORTHANC_ROOT}/Resources/CMake/GoogleLogConfigurationDarwin.h
        ${GOOGLE_LOG_SOURCES_DIR}/src/config.h
        COPYONLY)
    else()
      configure_file(
        ${ORTHANC_ROOT}/Resources/CMake/GoogleLogConfiguration.h
        ${GOOGLE_LOG_SOURCES_DIR}/src/config.h
        COPYONLY)
    endif()

    set(GOOGLE_LOG_SOURCES
      ${GOOGLE_LOG_SOURCES_DIR}/src/demangle.cc
      ${GOOGLE_LOG_SOURCES_DIR}/src/logging.cc
      ${GOOGLE_LOG_SOURCES_DIR}/src/raw_logging.cc
      ${GOOGLE_LOG_SOURCES_DIR}/src/signalhandler.cc
      ${GOOGLE_LOG_SOURCES_DIR}/src/symbolize.cc
      ${GOOGLE_LOG_SOURCES_DIR}/src/utilities.cc
      ${GOOGLE_LOG_SOURCES_DIR}/src/vlog_is_on.cc
      )

  elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
    include_directories(
      ${GOOGLE_LOG_SOURCES_DIR}/src/windows
      )

    set(GOOGLE_LOG_SOURCES
      ${GOOGLE_LOG_SOURCES_DIR}/src/windows/port.cc
      ${GOOGLE_LOG_SOURCES_DIR}/src/logging.cc
      ${GOOGLE_LOG_SOURCES_DIR}/src/raw_logging.cc
      ${GOOGLE_LOG_SOURCES_DIR}/src/utilities.cc
      ${GOOGLE_LOG_SOURCES_DIR}/src/vlog_is_on.cc
      )

    add_definitions(
      -DGLOG_NO_ABBREVIATED_SEVERITIES=1
      -DNO_FRAME_POINTER=1
      -DGOOGLE_GLOG_DLL_DECL=
      )

    if (CMAKE_COMPILER_IS_GNUCXX)
      # This is a patch for MinGW64
      add_definitions(-D_TIME_H__S=1)
    endif()
  endif()

else()
  CHECK_INCLUDE_FILE_CXX(glog/logging.h HAVE_GOOGLE_LOG_H)
  if (NOT HAVE_GOOGLE_LOG_H)
    message(FATAL_ERROR "Please install the libgoogle-glog-dev package")
  endif()

  link_libraries(glog)
endif()


CHECK_INCLUDE_FILES(sec_api/string_s.h HAVE_SECURE_STRING_EXTENSIONS)
if (HAVE_SECURE_STRING_EXTENSIONS)
  add_definitions(-DHAVE_SECURE_STRING_EXTENSIONS=1)
else()
  add_definitions(-DHAVE_SECURE_STRING_EXTENSIONS=0)
endif()

add_definitions(-DORTHANC_ENABLE_GOOGLE_LOG=1)