[Lemon-commits] Akos Ladanyi: Build GLPK dependent parts with CM...

Lemon HG hg at lemon.cs.elte.hu
Wed Jan 21 08:56:36 CET 2009


details:   http://lemon.cs.elte.hu/hg/lemon/rev/17d918051964
changeset: 496:17d918051964
user:      Akos Ladanyi <ladanyi [at] tmit.bme.hu>
date:      Tue Jan 20 12:23:14 2009 +0000
description:
	Build GLPK dependent parts with CMake too

diffstat:

6 files changed, 101 insertions(+), 8 deletions(-)
CMakeLists.txt       |    9 +++++++++
cmake/FindGLPK.cmake |   20 ++++++++++++++++++++
demo/CMakeLists.txt  |    6 +++++-
lemon/CMakeLists.txt |   27 +++++++++++++++++++++++++--
lemon/config.h.cmake |    3 +++
test/CMakeLists.txt  |   44 +++++++++++++++++++++++++++++++++++++++-----

diffs (183 lines):

diff --git a/CMakeLists.txt b/CMakeLists.txt
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -9,6 +9,15 @@
 
 INCLUDE(FindDoxygen)
 INCLUDE(FindGhostscript)
+FIND_PACKAGE(GLPK 4.33)
+
+ADD_DEFINITIONS(-DHAVE_CONFIG_H)
+
+IF(GLPK_FOUND)
+  SET(HAVE_LP TRUE)
+  SET(HAVE_MIP TRUE)
+  SET(HAVE_GLPK TRUE)
+ENDIF(GLPK_FOUND)
 
 ENABLE_TESTING()
 
diff --git a/cmake/FindGLPK.cmake b/cmake/FindGLPK.cmake
new file mode 100644
--- /dev/null
+++ b/cmake/FindGLPK.cmake
@@ -0,0 +1,20 @@
+SET(GLPK_REGKEY "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\Glpk;InstallPath]")
+GET_FILENAME_COMPONENT(GLPK_ROOT_PATH ${GLPK_REGKEY} ABSOLUTE)
+
+FIND_PATH(GLPK_INCLUDE_DIR
+  glpk.h
+  PATHS ${GLPK_REGKEY}/include)
+
+FIND_LIBRARY(GLPK_LIBRARY
+  NAMES glpk
+  PATHS ${GLPK_REGKEY}/lib)
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLPK DEFAULT_MSG GLPK_LIBRARY GLPK_INCLUDE_DIR)
+
+IF(GLPK_FOUND)
+  SET(GLPK_LIBRARIES ${GLPK_LIBRARY})
+  SET(GLPK_BIN_DIR ${GLPK_ROOT_PATH}/bin)
+ENDIF(GLPK_FOUND)
+
+MARK_AS_ADVANCED(GLPK_LIBRARY GLPK_INCLUDE_DIR GLPK_BIN_DIR)
diff --git a/demo/CMakeLists.txt b/demo/CMakeLists.txt
--- a/demo/CMakeLists.txt
+++ b/demo/CMakeLists.txt
@@ -1,4 +1,8 @@
-INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR})
+INCLUDE_DIRECTORIES(
+  ${CMAKE_SOURCE_DIR}
+  ${CMAKE_BINARY_DIR}
+  ${GLPK_INCLUDE_DIR}
+)
 
 LINK_DIRECTORIES(${CMAKE_BINARY_DIR}/lemon)
 
diff --git a/lemon/CMakeLists.txt b/lemon/CMakeLists.txt
--- a/lemon/CMakeLists.txt
+++ b/lemon/CMakeLists.txt
@@ -1,11 +1,28 @@
-INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR})
+INCLUDE_DIRECTORIES(
+  ${CMAKE_SOURCE_DIR}
+  ${CMAKE_BINARY_DIR}
+  ${GLPK_INCLUDE_DIR}
+)
 
-ADD_LIBRARY(lemon
+CONFIGURE_FILE(
+  ${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake
+  ${CMAKE_CURRENT_BINARY_DIR}/config.h
+)
+
+SET(LEMON_SOURCES
   arg_parser.cc
   base.cc
   color.cc
+  lp_base.cc
+  lp_skeleton.cc
   random.cc)
 
+IF(HAVE_GLPK)
+  SET(LEMON_SOURCES ${LEMON_SOURCES} glpk.cc)
+ENDIF(HAVE_GLPK)
+
+ADD_LIBRARY(lemon ${LEMON_SOURCES})
+
 INSTALL(
   TARGETS lemon
   ARCHIVE DESTINATION lib
@@ -16,3 +33,9 @@
   DESTINATION include/lemon
   COMPONENT headers
   FILES_MATCHING PATTERN "*.h")
+
+IF(WIN32)
+  INSTALL(FILES ${GLPK_BIN_DIR}/glpk.dll DESTINATION bin)
+  INSTALL(FILES ${GLPK_BIN_DIR}/libltdl3.dll DESTINATION bin)
+  INSTALL(FILES ${GLPK_BIN_DIR}/zlib1.dll DESTINATION bin)
+ENDIF(WIN32)
diff --git a/lemon/config.h.cmake b/lemon/config.h.cmake
new file mode 100644
--- /dev/null
+++ b/lemon/config.h.cmake
@@ -0,0 +1,3 @@
+#cmakedefine HAVE_LP 1
+#cmakedefine HAVE_MIP 1
+#cmakedefine HAVE_GLPK 1
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -1,4 +1,8 @@
-INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR})
+INCLUDE_DIRECTORIES(
+  ${CMAKE_SOURCE_DIR}
+  ${CMAKE_BINARY_DIR}
+  ${GLPK_INCLUDE_DIR}
+)
 
 LINK_DIRECTORIES(${CMAKE_BINARY_DIR}/lemon)
 
@@ -11,26 +15,56 @@
   digraph_test
   dijkstra_test
   dim_test
+  edge_set_test
   error_test
-  edge_set_test
   graph_copy_test
   graph_test
   graph_utils_test
   hao_orlin_test
   heap_test
   kruskal_test
-  lp_test
-  mip_test
   maps_test
   max_matching_test
-  radix_sort_test
   path_test
   preflow_test
+  radix_sort_test
   random_test
   suurballe_test
   time_measure_test
   unionfind_test)
 
+IF(HAVE_LP)
+  ADD_EXECUTABLE(lp_test lp_test.cc)
+  TARGET_LINK_LIBRARIES(lp_test lemon ${GLPK_LIBRARIES})
+  ADD_TEST(lp_test lp_test)
+
+  IF(WIN32)
+    GET_TARGET_PROPERTY(TARGET_LOC lp_test LOCATION)
+    GET_FILENAME_COMPONENT(TARGET_PATH ${TARGET_LOC} PATH)
+    ADD_CUSTOM_COMMAND(TARGET lp_test POST_BUILD
+      COMMAND cmake -E copy ${GLPK_BIN_DIR}/glpk.dll ${TARGET_PATH}
+      COMMAND cmake -E copy ${GLPK_BIN_DIR}/libltdl3.dll ${TARGET_PATH}
+      COMMAND cmake -E copy ${GLPK_BIN_DIR}/zlib1.dll ${TARGET_PATH}
+    )
+  ENDIF(WIN32)
+ENDIF(HAVE_LP)
+
+IF(HAVE_MIP)
+  ADD_EXECUTABLE(mip_test mip_test.cc)
+  TARGET_LINK_LIBRARIES(mip_test lemon ${GLPK_LIBRARIES})
+  ADD_TEST(mip_test mip_test)
+
+  IF(WIN32)
+    GET_TARGET_PROPERTY(TARGET_LOC mip_test LOCATION)
+    GET_FILENAME_COMPONENT(TARGET_PATH ${TARGET_LOC} PATH)
+    ADD_CUSTOM_COMMAND(TARGET mip_test POST_BUILD
+      COMMAND cmake -E copy ${GLPK_BIN_DIR}/glpk.dll ${TARGET_PATH}
+      COMMAND cmake -E copy ${GLPK_BIN_DIR}/libltdl3.dll ${TARGET_PATH}
+      COMMAND cmake -E copy ${GLPK_BIN_DIR}/zlib1.dll ${TARGET_PATH}
+    )
+  ENDIF(WIN32)
+ENDIF(HAVE_MIP)
+
 FOREACH(TEST_NAME ${TESTS})
   ADD_EXECUTABLE(${TEST_NAME} ${TEST_NAME}.cc)
   TARGET_LINK_LIBRARIES(${TEST_NAME} lemon)



More information about the Lemon-commits mailing list