cmake/FindGLPK.cmake
author Peter Kovacs <kpeter@inf.elte.hu>
Thu, 12 Nov 2009 23:26:13 +0100
changeset 806 fa6f37d7a25b
parent 637 4faa0c763906
child 1062 caf16813b1e8
permissions -rw-r--r--
Entirely rework CapacityScaling (#180)

- Use the new interface similarly to NetworkSimplex.
- Rework the implementation using an efficient internal structure
for handling the residual network. This improvement made the
code much faster (up to 2-5 times faster on large graphs).
- Handle GEQ supply type (LEQ is not supported).
- Handle negative costs for arcs of finite capacity.
(Note that this algorithm cannot handle arcs of negative cost
and infinite upper bound, thus it returns UNBOUNDED if such
an arc exists.)
- Extend the documentation.
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)