cmake/FindGLPK.cmake
author Peter Kovacs <kpeter@inf.elte.hu>
Thu, 15 Nov 2012 07:17:48 +0100
changeset 1013 f6f6896a4724
parent 637 4faa0c763906
child 1062 caf16813b1e8
permissions -rw-r--r--
Ensure strongly polynomial running time for CycleCanceling (#436)
The number of iterations performed by Howard's algorithm is limited.
If the limit is reached, a strongly polynomial implementation,
HartmannOrlinMmc is executed to find a minimum mean cycle.
This iteration limit is typically not reached, thus the combined
method is practically equivalent to Howard's algorithm, while it
also ensures the strongly polynomial time bound.
ladanyi@637
     1
SET(GLPK_ROOT_DIR "" CACHE PATH "GLPK root directory")
ladanyi@637
     2
ladanyi@473
     3
SET(GLPK_REGKEY "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\Glpk;InstallPath]")
ladanyi@473
     4
GET_FILENAME_COMPONENT(GLPK_ROOT_PATH ${GLPK_REGKEY} ABSOLUTE)
ladanyi@473
     5
ladanyi@473
     6
FIND_PATH(GLPK_INCLUDE_DIR
ladanyi@473
     7
  glpk.h
ladanyi@637
     8
  PATHS ${GLPK_REGKEY}/include
ladanyi@637
     9
  HINTS ${GLPK_ROOT_DIR}/include
ladanyi@637
    10
)
ladanyi@473
    11
FIND_LIBRARY(GLPK_LIBRARY
ladanyi@637
    12
  glpk
ladanyi@637
    13
  PATHS ${GLPK_REGKEY}/lib
ladanyi@637
    14
  HINTS ${GLPK_ROOT_DIR}/lib
ladanyi@637
    15
)
ladanyi@473
    16
ladanyi@638
    17
IF(GLPK_INCLUDE_DIR AND GLPK_LIBRARY)
ladanyi@638
    18
  FILE(READ ${GLPK_INCLUDE_DIR}/glpk.h GLPK_GLPK_H)
ladanyi@638
    19
ladanyi@638
    20
  STRING(REGEX MATCH "define[ ]+GLP_MAJOR_VERSION[ ]+[0-9]+" GLPK_MAJOR_VERSION_LINE "${GLPK_GLPK_H}")
ladanyi@638
    21
  STRING(REGEX REPLACE "define[ ]+GLP_MAJOR_VERSION[ ]+([0-9]+)" "\\1" GLPK_VERSION_MAJOR "${GLPK_MAJOR_VERSION_LINE}")
ladanyi@638
    22
ladanyi@638
    23
  STRING(REGEX MATCH "define[ ]+GLP_MINOR_VERSION[ ]+[0-9]+" GLPK_MINOR_VERSION_LINE "${GLPK_GLPK_H}")
ladanyi@638
    24
  STRING(REGEX REPLACE "define[ ]+GLP_MINOR_VERSION[ ]+([0-9]+)" "\\1" GLPK_VERSION_MINOR "${GLPK_MINOR_VERSION_LINE}")
ladanyi@638
    25
ladanyi@638
    26
  SET(GLPK_VERSION_STRING "${GLPK_VERSION_MAJOR}.${GLPK_VERSION_MINOR}")
ladanyi@638
    27
ladanyi@638
    28
  IF(GLPK_FIND_VERSION)
ladanyi@638
    29
    IF(GLPK_FIND_VERSION_COUNT GREATER 2)
ladanyi@638
    30
      MESSAGE(SEND_ERROR "unexpected version string")
ladanyi@638
    31
    ENDIF(GLPK_FIND_VERSION_COUNT GREATER 2)
ladanyi@638
    32
ladanyi@638
    33
    MATH(EXPR GLPK_REQUESTED_VERSION "${GLPK_FIND_VERSION_MAJOR}*100 + ${GLPK_FIND_VERSION_MINOR}")
ladanyi@638
    34
    MATH(EXPR GLPK_FOUND_VERSION "${GLPK_VERSION_MAJOR}*100 + ${GLPK_VERSION_MINOR}")
ladanyi@638
    35
ladanyi@638
    36
    IF(GLPK_FOUND_VERSION LESS GLPK_REQUESTED_VERSION)
ladanyi@638
    37
      SET(GLPK_PROPER_VERSION_FOUND FALSE)
ladanyi@638
    38
    ELSE(GLPK_FOUND_VERSION LESS GLPK_REQUESTED_VERSION)
ladanyi@638
    39
      SET(GLPK_PROPER_VERSION_FOUND TRUE)
ladanyi@638
    40
    ENDIF(GLPK_FOUND_VERSION LESS GLPK_REQUESTED_VERSION)
ladanyi@638
    41
  ELSE(GLPK_FIND_VERSION)
ladanyi@638
    42
    SET(GLPK_PROPER_VERSION_FOUND TRUE)
ladanyi@638
    43
  ENDIF(GLPK_FIND_VERSION)
ladanyi@638
    44
ENDIF(GLPK_INCLUDE_DIR AND GLPK_LIBRARY)
ladanyi@638
    45
ladanyi@473
    46
INCLUDE(FindPackageHandleStandardArgs)
ladanyi@638
    47
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLPK DEFAULT_MSG GLPK_LIBRARY GLPK_INCLUDE_DIR GLPK_PROPER_VERSION_FOUND)
ladanyi@473
    48
ladanyi@473
    49
IF(GLPK_FOUND)
ladanyi@619
    50
  SET(GLPK_INCLUDE_DIRS ${GLPK_INCLUDE_DIR})
ladanyi@473
    51
  SET(GLPK_LIBRARIES ${GLPK_LIBRARY})
ladanyi@473
    52
  SET(GLPK_BIN_DIR ${GLPK_ROOT_PATH}/bin)
ladanyi@473
    53
ENDIF(GLPK_FOUND)
ladanyi@473
    54
ladanyi@473
    55
MARK_AS_ADVANCED(GLPK_LIBRARY GLPK_INCLUDE_DIR GLPK_BIN_DIR)
ladanyi@619
    56
ladanyi@619
    57
IF(GLPK_FOUND)
ladanyi@627
    58
  SET(LEMON_HAVE_LP TRUE)
ladanyi@627
    59
  SET(LEMON_HAVE_MIP TRUE)
ladanyi@627
    60
  SET(LEMON_HAVE_GLPK TRUE)
ladanyi@619
    61
ENDIF(GLPK_FOUND)