# HG changeset patch # User Sebastien Jodogne # Date 1349776702 -7200 # Node ID bdc60d16cc984075d1b1fa241cb903bb8fd8b5b2 # Parent 1969ff16457c3e1927a8e02d2d03e3ceca85a22b improved cmake diff -r 1969ff16457c -r bdc60d16cc98 CMakeLists.txt --- a/CMakeLists.txt Mon Oct 08 13:27:49 2012 +0200 +++ b/CMakeLists.txt Tue Oct 09 11:58:22 2012 +0200 @@ -1,36 +1,55 @@ cmake_minimum_required(VERSION 2.8) project(Orthanc) -include(${CMAKE_SOURCE_DIR}/Resources/CMake/AutoGeneratedCode.cmake) -include(${CMAKE_SOURCE_DIR}/Resources/CMake/DownloadPackage.cmake) + +# Parameters of the build +SET(STATIC_BUILD ON CACHE BOOL "Static build of the third-party libraries (necessary for Windows)") +SET(STANDALONE_BUILD OFF CACHE BOOL "Standalone build (all the resources are embedded, necessary for releases)") +SET(ENABLE_SSL ON CACHE BOOL "Include support for SSL") +SET(BUILD_UNIT_TESTS ON CACHE BOOL "Build the unit tests") +SET(DEBIAN_FORCE_HARDENING OFF CACHE BOOL "Force the injection of Debian hardening flags (unrecommended)") +SET(USE_DYNAMIC_JSONCPP OFF CACHE BOOL "Use the dynamic version of JsonCpp (only for Debian sid)") +SET(USE_DYNAMIC_GOOGLE_LOG ON CACHE BOOL "Use the dynamic version of Google Log") +SET(USE_DYNAMIC_GOOGLE_TEST ON CACHE BOOL "Use the dynamic version of Google Test (not for Debian sid)") +SET(USE_STATIC_DEBIAN_GOOGLE_TEST OFF CACHE BOOL "Use the sources of Google Test shipped with libgtest-dev (only for Debian sid)") + +# Version of the build, should always be "mainline" except in release branches +add_definitions( + -DORTHANC_VERSION="mainline" + ) + +# Some basic inclusions include(CheckIncludeFiles) include(CheckIncludeFileCXX) - -add_definitions(-DORTHANC_VERSION="mainline") +include(${CMAKE_SOURCE_DIR}/Resources/CMake/AutoGeneratedCode.cmake) +include(${CMAKE_SOURCE_DIR}/Resources/CMake/DownloadPackage.cmake) +include(${CMAKE_SOURCE_DIR}/Resources/CMake/Compiler.cmake) -SET(STATIC_BUILD ON CACHE BOOL "Static build of the third-party libraries (necessary for Windows)") -SET(STANDALONE_BUILD OFF CACHE BOOL "Standalone build (necessary for cross-compilation or binary releases)") -SET(ENABLE_SSL ON CACHE BOOL "Include support for SSL") -SET(BUILD_UNIT_TESTS ON CACHE BOOL "Build the unit tests") -SET(DEBIAN_HARDENING OFF CACHE BOOL "Use Debian hardening flags") -SET(USE_DYNAMIC_JSONCPP OFF CACHE BOOL "Use the dynamic version of JsonCpp, only for Debian Unstable") -SET(USE_DYNAMIC_GOOGLE_LOG ON CACHE BOOL "Use the dynamic version of Google Log") - +# Configuration of the standalone builds if (${CMAKE_CROSSCOMPILING}) + # Cross-compilation implies the standalone build SET(STANDALONE_BUILD ON) endif() -if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows") - CHECK_INCLUDE_FILES(rpc.h HAVE_UUID_H) +if (${STANDALONE_BUILD}) + # We embed all the resources in the binaries for standalone builds + add_definitions(-DORTHANC_STANDALONE=1) + EmbedResources( + PREPARE_DATABASE OrthancServer/PrepareDatabase.sql + ORTHANC_EXPLORER OrthancExplorer + ) else() - CHECK_INCLUDE_FILES(uuid/uuid.h HAVE_UUID_H) -endif() - -if (NOT HAVE_UUID_H) - message(FATAL_ERROR "Please install the uuid-dev package") + add_definitions( + -DORTHANC_STANDALONE=0 + -DORTHANC_PATH=\"${CMAKE_SOURCE_DIR}\" + ) + EmbedResources( + PREPARE_DATABASE OrthancServer/PrepareDatabase.sql + ) endif() +# Prepare the third-party dependencies SET(THIRD_PARTY_SOURCES ${CMAKE_SOURCE_DIR}/Resources/md5/md5.c ${CMAKE_SOURCE_DIR}/Resources/base64/base64.cpp @@ -55,106 +74,7 @@ include(${CMAKE_SOURCE_DIR}/Resources/CMake/LibPngConfiguration.cmake) -if (${CMAKE_COMPILER_IS_GNUCXX}) - set(CMAKE_C_FLAGS "-Wall -Wno-long-long -Wno-implicit-function-declaration") - # --std=c99 makes libcurl not to compile - # -pedantic gives a lot of warnings on OpenSSL - set(CMAKE_CXX_FLAGS "-Wall -pedantic -Wno-long-long -Wno-variadic-macros") -elseif (${MSVC}) - # http://stackoverflow.com/a/6510446 - foreach(flag_var - CMAKE_C_FLAGS_DEBUG - CMAKE_CXX_FLAGS_DEBUG - CMAKE_C_FLAGS_RELEASE - CMAKE_CXX_FLAGS_RELEASE - CMAKE_C_FLAGS_MINSIZEREL - CMAKE_CXX_FLAGS_MINSIZEREL - CMAKE_C_FLAGS_RELWITHDEBINFO - CMAKE_CXX_FLAGS_RELWITHDEBINFO) - string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") - string(REGEX REPLACE "/MDd" "/MTd" ${flag_var} "${${flag_var}}") - endforeach(flag_var) - add_definitions( - -D_CRT_SECURE_NO_WARNINGS=1 - -D_CRT_SECURE_NO_DEPRECATE=1 - ) - include_directories(${CMAKE_SOURCE_DIR}/Resources/VisualStudio) - link_libraries(netapi32) -endif() - - -if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") - if (DEBIAN_HARDENING) - execute_process( - COMMAND dpkg-buildflags --get CPPFLAGS - OUTPUT_VARIABLE DEBIAN_CPP_FLAGS - OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process( - COMMAND dpkg-buildflags --get CFLAGS - OUTPUT_VARIABLE DEBIAN_C_FLAGS - OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process( - COMMAND dpkg-buildflags --get CXXFLAGS - OUTPUT_VARIABLE DEBIAN_CXX_FLAGS - OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process( - COMMAND dpkg-buildflags --get LDFLAGS - OUTPUT_VARIABLE DEBIAN_LD_FLAGS - OUTPUT_STRIP_TRAILING_WHITESPACE) - - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${DEBIAN_C_FLAGS} ${DEBIAN_CPP_FLAGS}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DEBIAN_CXX_FLAGS} ${DEBIAN_CPP_FLAGS}") - endif() - - add_definitions( - -D_LARGEFILE64_SOURCE=1 - -D_FILE_OFFSET_BITS=64 - ) - set(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed ${DEBIAN_LD_FLAGS}") - set(CMAKE_MODULE_LINKER_FLAGS "-Wl,--no-undefined ${DEBIAN_LD_FLAGS}") - set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined ${DEBIAN_LD_FLAGS}") - - # http://www.mail-archive.com/cmake@cmake.org/msg08837.html - set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "") - link_libraries(uuid pthread rt) - -elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Windows") - add_definitions( - -DWINVER=0x0501 - -D_CRT_SECURE_NO_WARNINGS=1 - ) - link_libraries(rpcrt4 ws2_32) -endif() - - -if (${STATIC_BUILD}) - add_definitions(-DORTHANC_STATIC=1) -else() - add_definitions(-DORTHANC_STATIC=0) -endif() - -if (${STANDALONE_BUILD}) - add_definitions( - -DORTHANC_STANDALONE=1 - ) - - EmbedResources( - PREPARE_DATABASE OrthancServer/PrepareDatabase.sql - ORTHANC_EXPLORER OrthancExplorer - ) - -else() - add_definitions( - -DORTHANC_STANDALONE=0 - -DORTHANC_PATH=\"${CMAKE_SOURCE_DIR}\" - ) - - EmbedResources( - PREPARE_DATABASE OrthancServer/PrepareDatabase.sql - ) -endif() - - +# The main instructions to build the Orthanc binaries add_library(CoreLibrary STATIC ${AUTOGENERATED_SOURCES} @@ -212,9 +132,10 @@ OrthancServer/main.cpp ) -TARGET_LINK_LIBRARIES(Orthanc ServerLibrary CoreLibrary) +target_link_libraries(Orthanc ServerLibrary CoreLibrary) +# Build the unit tests if required if (BUILD_UNIT_TESTS) include(${CMAKE_SOURCE_DIR}/Resources/CMake/GoogleTestConfiguration.cmake) add_executable(UnitTests @@ -225,10 +146,11 @@ UnitTests/Versions.cpp UnitTests/Zip.cpp ) - TARGET_LINK_LIBRARIES(UnitTests ServerLibrary CoreLibrary) + target_link_libraries(UnitTests ServerLibrary CoreLibrary) endif() +# Generate the Doxygen documentation if Doxygen is present find_package(Doxygen) if (DOXYGEN_FOUND) configure_file( @@ -240,4 +162,4 @@ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating API documentation with Doxygen" VERBATIM ) -endif(DOXYGEN_FOUND) +endif() diff -r 1969ff16457c -r bdc60d16cc98 NEWS --- a/NEWS Mon Oct 08 13:27:49 2012 +0200 +++ b/NEWS Tue Oct 09 11:58:22 2012 +0200 @@ -1,6 +1,8 @@ Pending changes in the mainline =============================== +* Help on the command line +* Possibility of dynamic linking against jsoncpp, sqlite, boost and dmctk Version 0.2.2 (2012/10/04) @@ -10,7 +12,6 @@ * Fixes to Debian packaging - Version 0.2.1 (2012/09/28) ========================== @@ -19,7 +20,6 @@ * Ready for Debian packaging - Version 0.2.0 (2012/09/16) ========================== @@ -41,7 +41,6 @@ * Standalone build for cross-compilation - Version 0.1.1 (2012/07/20) ========================== @@ -50,7 +49,6 @@ * Add path to storage in Configuration.json - Version 0.1.0 (2012/07/19) ========================== diff -r 1969ff16457c -r bdc60d16cc98 Resources/CMake/Compiler.cmake --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Resources/CMake/Compiler.cmake Tue Oct 09 11:58:22 2012 +0200 @@ -0,0 +1,90 @@ +# This file sets all the compiler-related flags + +if (${CMAKE_COMPILER_IS_GNUCXX}) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-long-long -Wno-implicit-function-declaration") + # --std=c99 makes libcurl not to compile + # -pedantic gives a lot of warnings on OpenSSL + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic -Wno-long-long -Wno-variadic-macros") +elseif (${MSVC}) + # http://stackoverflow.com/a/6510446 + foreach(flag_var + CMAKE_C_FLAGS_DEBUG + CMAKE_CXX_FLAGS_DEBUG + CMAKE_C_FLAGS_RELEASE + CMAKE_CXX_FLAGS_RELEASE + CMAKE_C_FLAGS_MINSIZEREL + CMAKE_CXX_FLAGS_MINSIZEREL + CMAKE_C_FLAGS_RELWITHDEBINFO + CMAKE_CXX_FLAGS_RELWITHDEBINFO) + string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") + string(REGEX REPLACE "/MDd" "/MTd" ${flag_var} "${${flag_var}}") + endforeach(flag_var) + add_definitions( + -D_CRT_SECURE_NO_WARNINGS=1 + -D_CRT_SECURE_NO_DEPRECATE=1 + ) + include_directories(${CMAKE_SOURCE_DIR}/Resources/VisualStudio) + link_libraries(netapi32) +endif() + + +if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + if (DEBIAN_FORCE_HARDENING) + execute_process( + COMMAND dpkg-buildflags --get CPPFLAGS + OUTPUT_VARIABLE DEBIAN_CPP_FLAGS + OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process( + COMMAND dpkg-buildflags --get CFLAGS + OUTPUT_VARIABLE DEBIAN_C_FLAGS + OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process( + COMMAND dpkg-buildflags --get CXXFLAGS + OUTPUT_VARIABLE DEBIAN_CXX_FLAGS + OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process( + COMMAND dpkg-buildflags --get LDFLAGS + OUTPUT_VARIABLE DEBIAN_LD_FLAGS + OUTPUT_STRIP_TRAILING_WHITESPACE) + + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${DEBIAN_C_FLAGS} ${DEBIAN_CPP_FLAGS}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DEBIAN_CXX_FLAGS} ${DEBIAN_CPP_FLAGS}") + endif() + + add_definitions( + -D_LARGEFILE64_SOURCE=1 + -D_FILE_OFFSET_BITS=64 + ) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--as-needed ${DEBIAN_LD_FLAGS}") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-undefined ${DEBIAN_LD_FLAGS}") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined ${DEBIAN_LD_FLAGS}") + + # Remove the "-rdynamic" option + # http://www.mail-archive.com/cmake@cmake.org/msg08837.html + set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "") + link_libraries(uuid pthread rt) + +elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Windows") + add_definitions( + -DWINVER=0x0501 + -D_CRT_SECURE_NO_WARNINGS=1 + ) + link_libraries(rpcrt4 ws2_32) +endif() + + +if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows") + CHECK_INCLUDE_FILES(rpc.h HAVE_UUID_H) +else() + CHECK_INCLUDE_FILES(uuid/uuid.h HAVE_UUID_H) +endif() + +if (NOT HAVE_UUID_H) + message(FATAL_ERROR "Please install the uuid-dev package") +endif() + +if (${STATIC_BUILD}) + add_definitions(-DORTHANC_STATIC=1) +else() + add_definitions(-DORTHANC_STATIC=0) +endif() diff -r 1969ff16457c -r bdc60d16cc98 Resources/CMake/GoogleLogConfiguration.cmake --- a/Resources/CMake/GoogleLogConfiguration.cmake Mon Oct 08 13:27:49 2012 +0200 +++ b/Resources/CMake/GoogleLogConfiguration.cmake Tue Oct 09 11:58:22 2012 +0200 @@ -1,4 +1,4 @@ -if (${STATIC_BUILD} OR NOT ${USE_DYNAMIC_GOOGLE_LOG}) +if (STATIC_BUILD OR NOT USE_DYNAMIC_GOOGLE_LOG) SET(GOOGLE_LOG_SOURCES_DIR ${CMAKE_BINARY_DIR}/glog-0.3.2) DownloadPackage("http://google-glog.googlecode.com/files/glog-0.3.2.tar.gz" "${GOOGLE_LOG_SOURCES_DIR}" "" "") diff -r 1969ff16457c -r bdc60d16cc98 Resources/CMake/GoogleTestConfiguration.cmake --- a/Resources/CMake/GoogleTestConfiguration.cmake Mon Oct 08 13:27:49 2012 +0200 +++ b/Resources/CMake/GoogleTestConfiguration.cmake Tue Oct 09 11:58:22 2012 +0200 @@ -1,4 +1,7 @@ -if (${STATIC_BUILD}) +if (USE_STATIC_DEBIAN_GOOGLE_TEST) + message(FATAL_ERROR "todo") + +elseif (STATIC_BUILD OR NOT USE_DYNAMIC_GOOGLE_TEST) SET(GTEST_SOURCES_DIR ${CMAKE_BINARY_DIR}/gtest-1.6.0) DownloadPackage("http://googletest.googlecode.com/files/gtest-1.6.0.zip" "${GTEST_SOURCES_DIR}" "" "")