diff --git a/pgproto/CMakeLists.txt b/pgproto/CMakeLists.txt index 58ae0ab7e584be76b98eb31285ce3f5bb4c8a015..169ffd50f6e7aa71c9f317596367560d9e3b06e9 100644 --- a/pgproto/CMakeLists.txt +++ b/pgproto/CMakeLists.txt @@ -2,31 +2,30 @@ cmake_minimum_required(VERSION 2.8) project(protocol C) -include(cmake/utils.cmake) +set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH}) +set(CMAKE_INCLUDE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_INCLUDE_PATH}) +include(utils) + +# It's not really a target dir, it's `target/debug` or something... +# TODO: rename this variable to PICODATA_BUILD_DIR if (NOT PICODATA_TARGET_DIR) - message(FATAL_ERROR - "Specify the picodata target directory via PICODATA_TARGET_DIR.") + message(FATAL_ERROR "PICODATA_TARGET_DIR not set") endif() -include(cmake/FindMsgPuck.cmake) -if (NOT MSGPUCK_FOUND) - message(FATAL_ERROR - "MsgPuck were not found.") -endif() +set(TARANTOOL_PREFIX "${PICODATA_TARGET_DIR}/build/tarantool-sys/tarantool-prefix") +set(TARANTOOL_INCLUDE_DIRS "${TARANTOOL_PREFIX}/include/tarantool") -set(TARANTOOL_INCLUDE_DIRS - "${PICODATA_TARGET_DIR}/build/tarantool-sys/tarantool-prefix/include/tarantool") -set(PICODATA_EXECUTABLE - "${PICODATA_TARGET_DIR}/picodata") +# Set search hints and find the MsgPuck library +list(APPEND MSGPUCK_ROOT_DIR "${PICODATA_TARGET_DIR}/../../tarantool-sys/src/lib/msgpuck") +list(APPEND MSGPUCK_ROOT_DIR "${TARANTOOL_PREFIX}/src/tarantool-build/src/lib/msgpuck") +find_package(MsgPuck REQUIRED) -# EXISTS works only with real pathes +# All the necessary prerequisites should be available if we've found the executable +set(PICODATA_EXECUTABLE "${PICODATA_TARGET_DIR}/picodata") get_filename_component(PICODATA_EXECUTABLE ${PICODATA_EXECUTABLE} REALPATH) -get_filename_component(TARANTOOL_INCLUDE_DIRS ${TARANTOOL_INCLUDE_DIRS} REALPATH) - -if (NOT EXISTS "${PICODATA_EXECUTABLE}" OR NOT EXISTS "${TARANTOOL_INCLUDE_DIRS}/module.h") - message(FATAL_ERROR - "Can't find picodata executable or tarantool headers. Rebuild can fix this issue.") +if (NOT EXISTS "${PICODATA_EXECUTABLE}") + message(FATAL_ERROR "Can't find picodata executable at ${PICODATA_EXECUTABLE}") endif() include_directories(${PROJECT_SOURCE_DIR}/src) diff --git a/pgproto/cmake/FindMsgPuck.cmake b/pgproto/cmake/FindMsgPuck.cmake index 289560d4f25779d3c869f2b02124a86f7ea371cb..c3e0b933414a1b810a162efad75641190f2ebffd 100644 --- a/pgproto/cmake/FindMsgPuck.cmake +++ b/pgproto/cmake/FindMsgPuck.cmake @@ -3,16 +3,23 @@ # # MSGPUCK_FOUND - true if MsgPuck was found # MSGPUCK_INCLUDE_DIRS - the directory of the MsgPuck headers -# MSGPUCK_LIBRARIES - the MsgPuck static library needed for linking -# +# MSGPUCK_LIB - the MsgPuck static library needed for linking + +set(_MSGPUCK_ROOT_HINTS + HINTS ${MSGPUCK_ROOT_DIR}) -find_path(MSGPUCK_INCLUDE_DIR msgpuck.h PATH_SUFFIXES msgpuck) -find_library(MSGPUCK_LIBRARY NAMES libmsgpuck.a) +find_path(MSGPUCK_INCLUDE_DIRS + NAMES msgpuck.h + PATH_SUFFIXES msgpuck + ${_MSGPUCK_ROOT_HINTS}) + +find_library(MSGPUCK_LIB + NAMES libmsgpuck.a + ${_MSGPUCK_ROOT_HINTS}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(MsgPuck - REQUIRED_VARS MSGPUCK_INCLUDE_DIR MSGPUCK_LIBRARY) -set(MSGPUCK_INCLUDE_DIRS ${MSGPUCK_INCLUDE_DIR}) -set(MSGPUCK_LIBRARIES ${MSGPUCK_LIBRARY}) -mark_as_advanced(MSGPUCK_INCLUDE_DIR MSGPUCK_INCLUDE_DIRS - MSGPUCK_LIBRARY MSGPUCK_LIBRARIES) + REQUIRED_VARS MSGPUCK_INCLUDE_DIRS MSGPUCK_LIB) + +set(MSGPUCK_FOUND TRUE) +mark_as_advanced(MSGPUCK_INCLUDE_DIRS MSGPUCK_LIB)