From 1ad99c96306fd883b13dd2873a0334fe934846df Mon Sep 17 00:00:00 2001 From: Horst Schirmeier Date: Thu, 29 Aug 2013 19:21:31 +0200 Subject: [PATCH] cmake: find MySQL client lib This change introduces a CMake-style FindMySQL.cmake properly looking for libmysqlclient_r with mysql_config. This also fixes linking on some machines. Change-Id: Ifdbfdc3c7440dead37a8b63aaa86732d636aa0e2 --- cmake/FindMySQL.cmake | 59 +++++++++++++++++++ .../dciao-kernelstructs/CMakeLists.txt | 5 +- .../ecos_kernel_test/CMakeLists.txt | 7 ++- src/experiments/kesorefs/CMakeLists.txt | 5 +- tools/import-trace/CMakeLists.txt | 5 +- tools/prune-trace/CMakeLists.txt | 5 +- 6 files changed, 79 insertions(+), 7 deletions(-) create mode 100644 cmake/FindMySQL.cmake diff --git a/cmake/FindMySQL.cmake b/cmake/FindMySQL.cmake new file mode 100644 index 00000000..a8edcd3a --- /dev/null +++ b/cmake/FindMySQL.cmake @@ -0,0 +1,59 @@ +# Find the MySQL includes and client library +# This module defines +# MYSQL_INCLUDE_DIR, where to find mysql.h +# MYSQL_LIBRARIES, the libraries needed to use MySQL. +# MYSQL_FOUND, If false, do not try to use MySQL. + +set(MYSQL_CONFIG_PREFER_PATH "$ENV{MYSQL_HOME}/bin" CACHE FILEPATH + "preferred path to MySQL (mysql_config)") +find_program(MYSQL_CONFIG mysql_config + ${MYSQL_CONFIG_PREFER_PATH} + /usr/local/mysql/bin/ + /usr/local/bin/ + /usr/bin/ + ) + +if(MYSQL_CONFIG) + message(STATUS "Using mysql_config: ${MYSQL_CONFIG}") + # set INCLUDE_DIR + exec_program(${MYSQL_CONFIG} + ARGS --include + OUTPUT_VARIABLE MYSQL_INCLUDE_DIR) + + # set LIBRARY_DIR + exec_program(${MYSQL_CONFIG} + ARGS --libs_r + OUTPUT_VARIABLE MYSQL_LIBRARIES) + +else(MYSQL_CONFIG) + # FIXME incomplete + find_path(MYSQL_INCLUDE_DIR mysql.h + /usr/local/include + /usr/local/include/mysql + /usr/local/mysql/include + /usr/local/mysql/include/mysql + /usr/include + /usr/include/mysql + #find_library(mysqlclient ... + # PATHS + # ${MYSQL_ADD_LIBRARY_PATH} + # /usr/lib/mysql + # /usr/local/lib + # /usr/local/lib/mysql + # /usr/local/mysql/lib + #) +) +endif(MYSQL_CONFIG) + +set(MYSQL_INCLUDE_DIR ${MYSQL_INCLUDE_DIR} CACHE FILEPATH INTERNAL) +set(MYSQL_LIBRARIES ${MYSQL_LIBRARIES} CACHE FILEPATH INTERNAL) + +if(MYSQL_INCLUDE_DIR AND MYSQL_LIBRARIES) + set(MYSQL_FOUND TRUE CACHE INTERNAL "MySQL found") + message(STATUS "Found MySQL: ${MYSQL_INCLUDE_DIR}, ${MYSQL_LIBRARIES}") +else(MYSQL_INCLUDE_DIR AND MYSQL_LIBRARIES) + set(MYSQL_FOUND FALSE CACHE INTERNAL "MySQL found") + message(STATUS "MySQL not found.") +endif(MYSQL_INCLUDE_DIR AND MYSQL_LIBRARIES) + +mark_as_advanced(MYSQL_INCLUDE_DIR MYSQL_LIBRARIES) diff --git a/src/experiments/dciao-kernelstructs/CMakeLists.txt b/src/experiments/dciao-kernelstructs/CMakeLists.txt index a1834697..a14aacf7 100644 --- a/src/experiments/dciao-kernelstructs/CMakeLists.txt +++ b/src/experiments/dciao-kernelstructs/CMakeLists.txt @@ -21,6 +21,9 @@ find_package(Protobuf REQUIRED) include_directories(${PROTOBUF_INCLUDE_DIRS}) include_directories(${CMAKE_CURRENT_BINARY_DIR}) +find_package(MySQL REQUIRED) +include_directories(${MYSQL_INCLUDE_DIR}) + PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS ${MY_PROTOS}) ## Build library @@ -30,6 +33,6 @@ target_link_libraries(fail-${EXPERIMENT_NAME} ${PROTOBUF_LIBRARY}) ## This is the example's campaign server distributing experiment parameters add_executable(${EXPERIMENT_NAME}-server main.cc) -target_link_libraries(${EXPERIMENT_NAME}-server -Wl,--start-group fail-${EXPERIMENT_NAME} fail-sal fail-util fail-cpn fail-comm ${PROTOBUF_LIBRARY} ${Boost_THREAD_LIBRARY} -lmysqlclient -Wl,--end-group) +target_link_libraries(${EXPERIMENT_NAME}-server -Wl,--start-group fail-${EXPERIMENT_NAME} fail-sal fail-util fail-cpn fail-comm ${PROTOBUF_LIBRARY} ${Boost_THREAD_LIBRARY} ${MYSQL_LIBRARIES} -Wl,--end-group) install(TARGETS ${EXPERIMENT_NAME}-server RUNTIME DESTINATION bin) diff --git a/src/experiments/ecos_kernel_test/CMakeLists.txt b/src/experiments/ecos_kernel_test/CMakeLists.txt index 883e2039..7546f9c6 100644 --- a/src/experiments/ecos_kernel_test/CMakeLists.txt +++ b/src/experiments/ecos_kernel_test/CMakeLists.txt @@ -22,14 +22,17 @@ find_package(Protobuf REQUIRED) include_directories(${PROTOBUF_INCLUDE_DIRS}) include_directories(${CMAKE_CURRENT_BINARY_DIR}) +find_package(MySQL REQUIRED) +include_directories(${MYSQL_INCLUDE_DIR}) + PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS ${MY_PROTOS}) ## Build library add_library(fail-${EXPERIMENT_NAME} ${PROTO_SRCS} ${PROTO_HDRS} ${MY_CAMPAIGN_SRCS}) add_dependencies(fail-${EXPERIMENT_NAME} fail-tracing fail-comm) -target_link_libraries(fail-${EXPERIMENT_NAME} ${PROTOBUF_LIBRARY} -lmysqlclient_r) +target_link_libraries(fail-${EXPERIMENT_NAME} ${PROTOBUF_LIBRARY} ${MYSQL_LIBRARIES}) ## This is the example's campaign server distributing experiment parameters add_executable(${EXPERIMENT_NAME}-server main.cc) -target_link_libraries(${EXPERIMENT_NAME}-server fail-${EXPERIMENT_NAME} fail ${PROTOBUF_LIBRARY} ${Boost_THREAD_LIBRARY} -lmysqlclient_r) +target_link_libraries(${EXPERIMENT_NAME}-server fail-${EXPERIMENT_NAME} fail ${PROTOBUF_LIBRARY} ${Boost_THREAD_LIBRARY} ${MYSQL_LIBRARIES}) install(TARGETS ${EXPERIMENT_NAME}-server RUNTIME DESTINATION bin) diff --git a/src/experiments/kesorefs/CMakeLists.txt b/src/experiments/kesorefs/CMakeLists.txt index d3dfb253..37298030 100644 --- a/src/experiments/kesorefs/CMakeLists.txt +++ b/src/experiments/kesorefs/CMakeLists.txt @@ -21,6 +21,9 @@ find_package(Protobuf REQUIRED) include_directories(${PROTOBUF_INCLUDE_DIRS}) include_directories(${CMAKE_CURRENT_BINARY_DIR}) +find_package(MySQL REQUIRED) +include_directories(${MYSQL_INCLUDE_DIR}) + PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS ${MY_PROTOS}) ## Build library @@ -30,5 +33,5 @@ target_link_libraries(fail-${EXPERIMENT_NAME} ${PROTOBUF_LIBRARY}) ## This is the example's campaign server distributing experiment parameters add_executable(${EXPERIMENT_NAME}-server main.cc) -target_link_libraries(${EXPERIMENT_NAME}-server -Wl,--start-group fail-${EXPERIMENT_NAME} fail-sal fail-util fail-cpn fail-comm ${PROTOBUF_LIBRARY} ${Boost_THREAD_LIBRARY} -lmysqlclient -Wl,--end-group) +target_link_libraries(${EXPERIMENT_NAME}-server -Wl,--start-group fail-${EXPERIMENT_NAME} fail-sal fail-util fail-cpn fail-comm ${PROTOBUF_LIBRARY} ${Boost_THREAD_LIBRARY} ${MYSQL_LIBRARIES} -Wl,--end-group) install(TARGETS ${EXPERIMENT_NAME}-server RUNTIME DESTINATION bin) diff --git a/tools/import-trace/CMakeLists.txt b/tools/import-trace/CMakeLists.txt index 80fce373..561a9c9c 100644 --- a/tools/import-trace/CMakeLists.txt +++ b/tools/import-trace/CMakeLists.txt @@ -17,13 +17,14 @@ if (BUILD_LLVM_DISASSEMBLER) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LLVM_CXX_FLAGS} -fexceptions") endif(BUILD_LLVM_DISASSEMBLER) - +find_package(MySQL REQUIRED) +include_directories(${MYSQL_INCLUDE_DIR}) add_executable(import-trace main.cc ${SRCS}) target_link_libraries(import-trace ${PROTOBUF_LIBRARY} - -lmysqlclient + ${MYSQL_LIBRARIES} fail-util fail-comm fail-sal) diff --git a/tools/prune-trace/CMakeLists.txt b/tools/prune-trace/CMakeLists.txt index 32328f6d..a79e3451 100644 --- a/tools/prune-trace/CMakeLists.txt +++ b/tools/prune-trace/CMakeLists.txt @@ -3,7 +3,10 @@ set(SRCS BasicPruner.cc ) +find_package(MySQL REQUIRED) +include_directories(${MYSQL_INCLUDE_DIR}) + ## This is the example's campaign server distributing experiment parameters add_executable(prune-trace main.cc ${SRCS}) -target_link_libraries(prune-trace -lmysqlclient fail-util) +target_link_libraries(prune-trace ${MYSQL_LIBRARIES} fail-util) install(TARGETS prune-trace RUNTIME DESTINATION bin)