CMakeLists.txt
author Peter Kovacs <kpeter@inf.elte.hu>
Tue, 15 Mar 2011 19:32:21 +0100
changeset 1047 ddd3c0d3d9bf
parent 1031 06491fd08efd
parent 1033 16d466589b54
child 1056 6660ac776acf
permissions -rw-r--r--
Implement the scaling Price Refinement heuristic in CostScaling (#417)
instead of Early Termination.

These two heuristics are similar, but the newer one is faster
and not only makes it possible to skip some epsilon phases, but
it can improve the performance of the other phases, as well.
     1 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
     2 
     3 SET(PROJECT_NAME "LEMON")
     4 PROJECT(${PROJECT_NAME})
     5 
     6 INCLUDE(FindPythonInterp)
     7 INCLUDE(FindWget)
     8 
     9 IF(EXISTS ${PROJECT_SOURCE_DIR}/cmake/version.cmake)
    10   INCLUDE(${PROJECT_SOURCE_DIR}/cmake/version.cmake)
    11 ELSEIF(DEFINED ENV{LEMON_VERSION})
    12   SET(LEMON_VERSION $ENV{LEMON_VERSION} CACHE STRING "LEMON version string.")
    13 ELSE()
    14   EXECUTE_PROCESS(
    15     COMMAND ${PYTHON_EXECUTABLE} ./scripts/chg-len.py
    16     WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
    17     OUTPUT_VARIABLE HG_REVISION_PATH
    18     ERROR_QUIET
    19     OUTPUT_STRIP_TRAILING_WHITESPACE
    20   )
    21   EXECUTE_PROCESS(
    22     COMMAND hg id -i
    23     WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
    24     OUTPUT_VARIABLE HG_REVISION
    25     ERROR_QUIET
    26     OUTPUT_STRIP_TRAILING_WHITESPACE
    27   )
    28   IF(HG_REVISION STREQUAL "")
    29     SET(HG_REVISION_ID "hg-tip")
    30   ELSE()
    31     IF(HG_REVISION_PATH STREQUAL "")
    32       SET(HG_REVISION_ID ${HG_REVISION})
    33     ELSE()
    34       SET(HG_REVISION_ID ${HG_REVISION_PATH}.${HG_REVISION})
    35     ENDIF()
    36   ENDIF()
    37   SET(LEMON_VERSION ${HG_REVISION_ID} CACHE STRING "LEMON version string.")
    38 ENDIF()
    39 
    40 SET(PROJECT_VERSION ${LEMON_VERSION})
    41 
    42 SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
    43 
    44 FIND_PACKAGE(Doxygen)
    45 FIND_PACKAGE(Ghostscript)
    46 FIND_PACKAGE(GLPK 4.33)
    47 FIND_PACKAGE(CPLEX)
    48 FIND_PACKAGE(COIN)
    49 
    50 IF(DEFINED ENV{LEMON_CXX_WARNING})
    51   SET(CXX_WARNING $ENV{LEMON_CXX_WARNING})
    52 ELSE()
    53   IF(CMAKE_COMPILER_IS_GNUCXX)
    54     SET(CXX_WARNING "-Wall -W -Wunused -Wformat=2 -Wctor-dtor-privacy -Wnon-virtual-dtor -Wno-char-subscripts -Wwrite-strings -Wno-char-subscripts -Wreturn-type -Wcast-qual -Wcast-align -Wsign-promo -Woverloaded-virtual -ansi -fno-strict-aliasing -Wold-style-cast -Wno-unknown-pragmas")
    55     SET(CMAKE_CXX_FLAGS_DEBUG CACHE STRING "-ggdb")
    56     SET(CMAKE_C_FLAGS_DEBUG CACHE STRING "-ggdb")
    57   ELSEIF(MSVC)
    58     # This part is unnecessary 'casue the same is set by the lemon/core.h.
    59     # Still keep it as an example.
    60     SET(CXX_WARNING "/wd4250 /wd4355 /wd4503 /wd4800 /wd4996")
    61     # Suppressed warnings:
    62     # C4250: 'class1' : inherits 'class2::member' via dominance
    63     # C4355: 'this' : used in base member initializer list
    64     # C4503: 'function' : decorated name length exceeded, name was truncated
    65     # C4800: 'type' : forcing value to bool 'true' or 'false'
    66     #        (performance warning)
    67     # C4996: 'function': was declared deprecated
    68   ELSE()
    69     SET(CXX_WARNING "-Wall -W")
    70   ENDIF()
    71 ENDIF()
    72 SET(LEMON_CXX_WARNING_FLAGS ${CXX_WARNING} CACHE STRING "LEMON warning flags.")
    73 
    74 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LEMON_CXX_WARNING_FLAGS}")
    75 
    76 SET( CMAKE_CXX_FLAGS_MAINTAINER "-Werror -ggdb" CACHE STRING
    77     "Flags used by the C++ compiler during maintainer builds."
    78     FORCE )
    79 SET( CMAKE_C_FLAGS_MAINTAINER "-Werror" CACHE STRING
    80     "Flags used by the C compiler during maintainer builds."
    81     FORCE )
    82 SET( CMAKE_EXE_LINKER_FLAGS_MAINTAINER
    83     "-Wl,--warn-unresolved-symbols,--warn-once" CACHE STRING
    84     "Flags used for linking binaries during maintainer builds."
    85     FORCE )
    86 SET( CMAKE_SHARED_LINKER_FLAGS_MAINTAINER
    87     "-Wl,--warn-unresolved-symbols,--warn-once" CACHE STRING
    88     "Flags used by the shared libraries linker during maintainer builds."
    89     FORCE )
    90 MARK_AS_ADVANCED(
    91     CMAKE_CXX_FLAGS_MAINTAINER
    92     CMAKE_C_FLAGS_MAINTAINER
    93     CMAKE_EXE_LINKER_FLAGS_MAINTAINER
    94     CMAKE_SHARED_LINKER_FLAGS_MAINTAINER )
    95 
    96 IF(CMAKE_CONFIGURATION_TYPES)
    97   LIST(APPEND CMAKE_CONFIGURATION_TYPES Maintainer)
    98   LIST(REMOVE_DUPLICATES CMAKE_CONFIGURATION_TYPES)
    99   SET(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING
   100       "Add the configurations that we need"
   101       FORCE)
   102  endif()
   103 
   104 IF(NOT CMAKE_BUILD_TYPE)
   105   SET(CMAKE_BUILD_TYPE "Release")
   106 ENDIF()
   107 
   108 SET( CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING
   109     "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel Maintainer."
   110     FORCE )
   111 
   112 
   113 INCLUDE(CheckTypeSize)
   114 CHECK_TYPE_SIZE("long long" LONG_LONG)
   115 SET(LEMON_HAVE_LONG_LONG ${HAVE_LONG_LONG})
   116 
   117 ENABLE_TESTING()
   118 
   119 IF(${CMAKE_BUILD_TYPE} STREQUAL "Maintainer")
   120   ADD_CUSTOM_TARGET(check ALL COMMAND ${CMAKE_CTEST_COMMAND})
   121 ELSE()
   122   ADD_CUSTOM_TARGET(check COMMAND ${CMAKE_CTEST_COMMAND})
   123 ENDIF()
   124 
   125 ADD_SUBDIRECTORY(lemon)
   126 IF(${CMAKE_SOURCE_DIR} STREQUAL ${PROJECT_SOURCE_DIR})
   127   ADD_SUBDIRECTORY(contrib)
   128   ADD_SUBDIRECTORY(demo)
   129   ADD_SUBDIRECTORY(tools)
   130   ADD_SUBDIRECTORY(doc)
   131   ADD_SUBDIRECTORY(test)
   132 ENDIF()
   133 
   134 CONFIGURE_FILE(
   135   ${PROJECT_SOURCE_DIR}/cmake/LEMONConfig.cmake.in
   136   ${PROJECT_BINARY_DIR}/cmake/LEMONConfig.cmake
   137   @ONLY
   138 )
   139 IF(UNIX)
   140   INSTALL(
   141     FILES ${PROJECT_BINARY_DIR}/cmake/LEMONConfig.cmake
   142     DESTINATION share/lemon/cmake
   143   )
   144 ELSEIF(WIN32)
   145   INSTALL(
   146     FILES ${PROJECT_BINARY_DIR}/cmake/LEMONConfig.cmake
   147     DESTINATION cmake
   148   )
   149 ENDIF()
   150 
   151 IF(${CMAKE_SOURCE_DIR} STREQUAL ${PROJECT_SOURCE_DIR})
   152   SET(CPACK_PACKAGE_NAME ${PROJECT_NAME})
   153   SET(CPACK_PACKAGE_VENDOR "EGRES")
   154   SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY
   155     "LEMON - Library for Efficient Modeling and Optimization in Networks")
   156   SET(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
   157 
   158   SET(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
   159 
   160   SET(CPACK_PACKAGE_INSTALL_DIRECTORY
   161     "${PROJECT_NAME} ${PROJECT_VERSION}")
   162   SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY
   163     "${PROJECT_NAME} ${PROJECT_VERSION}")
   164 
   165   SET(CPACK_COMPONENTS_ALL headers library html_documentation bin)
   166 
   167   SET(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "C++ headers")
   168   SET(CPACK_COMPONENT_LIBRARY_DISPLAY_NAME "Dynamic-link library")
   169   SET(CPACK_COMPONENT_BIN_DISPLAY_NAME "Command line utilities")
   170   SET(CPACK_COMPONENT_HTML_DOCUMENTATION_DISPLAY_NAME "HTML documentation")
   171 
   172   SET(CPACK_COMPONENT_HEADERS_DESCRIPTION
   173     "C++ header files")
   174   SET(CPACK_COMPONENT_LIBRARY_DESCRIPTION
   175     "DLL and import library")
   176   SET(CPACK_COMPONENT_BIN_DESCRIPTION
   177     "Command line utilities")
   178   SET(CPACK_COMPONENT_HTML_DOCUMENTATION_DESCRIPTION
   179     "Doxygen generated documentation")
   180 
   181   SET(CPACK_COMPONENT_HEADERS_DEPENDS library)
   182 
   183   SET(CPACK_COMPONENT_HEADERS_GROUP "Development")
   184   SET(CPACK_COMPONENT_LIBRARY_GROUP "Development")
   185   SET(CPACK_COMPONENT_HTML_DOCUMENTATION_GROUP "Documentation")
   186 
   187   SET(CPACK_COMPONENT_GROUP_DEVELOPMENT_DESCRIPTION
   188     "Components needed to develop software using LEMON")
   189   SET(CPACK_COMPONENT_GROUP_DOCUMENTATION_DESCRIPTION
   190     "Documentation of LEMON")
   191 
   192   SET(CPACK_ALL_INSTALL_TYPES Full Developer)
   193 
   194   SET(CPACK_COMPONENT_HEADERS_INSTALL_TYPES Developer Full)
   195   SET(CPACK_COMPONENT_LIBRARY_INSTALL_TYPES Developer Full)
   196   SET(CPACK_COMPONENT_HTML_DOCUMENTATION_INSTALL_TYPES Full)
   197 
   198   SET(CPACK_GENERATOR "NSIS")
   199   SET(CPACK_NSIS_MUI_ICON "${PROJECT_SOURCE_DIR}/cmake/nsis/lemon.ico")
   200   SET(CPACK_NSIS_MUI_UNIICON "${PROJECT_SOURCE_DIR}/cmake/nsis/uninstall.ico")
   201   #SET(CPACK_PACKAGE_ICON "${PROJECT_SOURCE_DIR}/cmake/nsis\\\\installer.bmp")
   202   SET(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\lemon.ico")
   203   SET(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} ${PROJECT_NAME}")
   204   SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\lemon.cs.elte.hu")
   205   SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\lemon.cs.elte.hu")
   206   SET(CPACK_NSIS_CONTACT "lemon-user@lemon.cs.elte.hu")
   207   SET(CPACK_NSIS_CREATE_ICONS_EXTRA "
   208     CreateShortCut \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\Documentation.lnk\\\" \\\"$INSTDIR\\\\share\\\\doc\\\\index.html\\\"
   209     ")
   210   SET(CPACK_NSIS_DELETE_ICONS_EXTRA "
   211     !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
   212     Delete \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\Documentation.lnk\\\"
   213     ")
   214 
   215   INCLUDE(CPack)
   216 ENDIF()