Commit 495319e0 authored by Philip Quinn's avatar Philip Quinn

CMake: Add support for detecting the 'lite' library in 'FindCapnProto.cmake'.

Also, use pkg-config (if available) to get hints about the paths.
parent 62b2b775
...@@ -19,8 +19,12 @@ ...@@ -19,8 +19,12 @@
# Path to the `capnpc-c++` tool (can be set to override). # Path to the `capnpc-c++` tool (can be set to override).
# CAPNP_INCLUDE_DIRS # CAPNP_INCLUDE_DIRS
# Include directories for the library's headers (can be set to override). # Include directories for the library's headers (can be set to override).
# CAPNP_LIBRARIES # CANP_LIBRARIES
# The necessary library paths to link with. # The Cap'n Proto library paths.
# CAPNP_LIBRARIES_LITE
# Paths to only the 'lite' libraries.
# CAPNP_DEFINITIONS
# Compiler definitions required for building with the library.
# CAPNP_FOUND # CAPNP_FOUND
# Set if the libraries have been located. # Set if the libraries have been located.
# #
...@@ -28,6 +32,7 @@ ...@@ -28,6 +32,7 @@
# #
# find_package(CapnProto REQUIRED) # find_package(CapnProto REQUIRED)
# include_directories(${CAPNP_INCLUDE_DIRS}) # include_directories(${CAPNP_INCLUDE_DIRS})
# add_definitions(${CAPNP_DEFINITIONS})
# #
# capnp_generate_cpp(CAPNP_SRCS CAPNP_HDRS schema.capnp) # capnp_generate_cpp(CAPNP_SRCS CAPNP_HDRS schema.capnp)
# add_executable(a a.cc ${CAPNP_SRCS} ${CAPNP_HDRS}) # add_executable(a a.cc ${CAPNP_SRCS} ${CAPNP_HDRS})
...@@ -40,6 +45,8 @@ ...@@ -40,6 +45,8 @@
# capnp_generate_cpp(...) # capnp_generate_cpp(...)
# #
# CAPNP_GENERATE_CPP ===========================================================
function(CAPNP_GENERATE_CPP SOURCES HEADERS) function(CAPNP_GENERATE_CPP SOURCES HEADERS)
if(NOT ARGN) if(NOT ARGN)
message(SEND_ERROR "CAPNP_GENERATE_CPP() called without any source files.") message(SEND_ERROR "CAPNP_GENERATE_CPP() called without any source files.")
...@@ -121,29 +128,64 @@ function(CAPNP_GENERATE_CPP SOURCES HEADERS) ...@@ -121,29 +128,64 @@ function(CAPNP_GENERATE_CPP SOURCES HEADERS)
set(${HEADERS} ${${HEADERS}} PARENT_SCOPE) set(${HEADERS} ${${HEADERS}} PARENT_SCOPE)
endfunction() endfunction()
find_library(CAPNP_LIB_KJ kj) # Find Libraries/Paths =========================================================
find_library(CAPNP_LIB_KJ-ASYNC kj-async)
find_library(CAPNP_LIB_CAPNP capnp) # Use pkg-config to get path hints and definitions
find_library(CAPNP_LIB_CAPNP-RPC capnp-rpc) find_package(PkgConfig QUIET)
find_library(CAPNP_LIB_CAPNPC capnpc) pkg_check_modules(PKGCONFIG_CAPNP capnp)
mark_as_advanced(CAPNP_LIB_KJ CAPNP_LIB_KJ-ASYNC CAPNP_LIB_CAPNP CAPNP_LIB_CAPNP-RPC CAPNP_LIB_CAPNPC) pkg_check_modules(PKGCONFIG_CAPNP_RPC capnp-rpc QUIET)
set(CAPNP_LIBRARIES
find_library(CAPNP_LIB_KJ kj
HINTS ${PKGCONFIG_CAPNP_LIBDIR} ${PKGCONFIG_CAPNP_LIBRARY_DIRS}
)
find_library(CAPNP_LIB_KJ-ASYNC kj-async
HINTS ${PKGCONFIG_CAPNP_RPC_LIBDIR} ${PKGCONFIG_CAPNP_RPC_LIBRARY_DIRS}
)
find_library(CAPNP_LIB_CAPNP capnp
HINTS ${PKGCONFIG_CAPNP_LIBDIR} ${PKGCONFIG_CAPNP_LIBRARY_DIRS}
)
find_library(CAPNP_LIB_CAPNP-RPC capnp-rpc
HINTS ${PKGCONFIG_CAPNP_RPC_LIBDIR} ${PKGCONFIG_CAPNP_RPC_LIBRARY_DIRS}
)
mark_as_advanced(CAPNP_LIB_KJ CAPNP_LIB_KJ-ASYNC CAPNP_LIB_CAPNP CAPNP_LIB_CAPNP-RPC)
set(CAPNP_LIBRARIES_LITE
${CAPNP_LIB_KJ} ${CAPNP_LIB_KJ}
${CAPNP_LIB_KJ-ASYNC}
${CAPNP_LIB_CAPNP} ${CAPNP_LIB_CAPNP}
)
set(CAPNP_LIBRARIES
${CAPNP_LIBRARIES_LITE}
${CAPNP_LIB_KJ-ASYNC}
${CAPNP_LIB_CAPNP-RPC} ${CAPNP_LIB_CAPNP-RPC}
${CAPNP_LIB_CAPNPC}
) )
find_path(CAPNP_INCLUDE_DIRS capnp/generated-header-support.h) # Was only the 'lite' library found?
if(CAPNP_LIB_CAPNP_FOUND AND NOT CAPNP_LIB_CAPNP-RPC_FOUND)
set(CAPNP_DEFINITIONS "-DCAPNP_LITE")
else()
set(CAPNP_DEFINITIONS)
endif()
find_path(CAPNP_INCLUDE_DIRS capnp/generated-header-support.h
HINTS ${PKGCONFIG_CAPNP_INCLUDEDIR} ${PKGCONFIG_CAPNP_INCLUDE_DIRS}
)
find_program(CAPNP_EXECUTABLE find_program(CAPNP_EXECUTABLE
NAMES capnp NAMES capnp
DOC "Cap'n Proto Command-line Tool" DOC "Cap'n Proto Command-line Tool"
HINTS ${PKGCONFIG_CAPNP_PREFIX}/bin
) )
find_program(CAPNPC_CXX_EXECUTABLE find_program(CAPNPC_CXX_EXECUTABLE
NAMES capnpc-c++ NAMES capnpc-c++
DOC "Capn'n Proto C++ Compiler" DOC "Capn'n Proto C++ Compiler"
HINTS ${PKGCONFIG_CAPNP_PREFIX}/bin
) )
# Only *require* the include directory, libkj, and libcapnp. If compiling with
# CAPNP_LITE, nothing else will be found.
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(CAPNP DEFAULT_MSG
CAPNP_INCLUDE_DIRS
CAPNP_LIB_KJ
CAPNP_LIB_CAPNP
)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment