From 217985adf0785779799b8b6f9b39d89f811d56f9 Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Fri, 14 Jul 2017 16:03:06 +0200 Subject: [PATCH 1/3] CMake: pkg-config Fallback Try to find installs of `libzmq` that were performed with autotools with a `pkg-config` fallback. --- CMakeLists.txt | 30 +++++++++++++++++++++++++++++- cppzmqConfig.cmake.in | 30 +++++++++++++++++++++++++++++- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c0d0d29..08fb7a6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,35 @@ cmake_minimum_required(VERSION 2.8.12) project(cppzmq) -find_package(ZeroMQ REQUIRED) +find_package(ZeroMQ) + +# libzmq autotools install: fallback to pkg-config +if(NOT ZeroMQ_FOUND) + find_package(PkgConfig) + pkg_check_modules(PC_LIBZMQ QUIET libzmq) + + set(ZeroMQ_VERSION ${PC_LIBZMQ_VERSION}) + find_library(ZeroMQ_LIBRARY NAMES libzmq.so + PATHS ${PC_LIBZMQ_LIBDIR} ${PC_LIBZMQ_LIBRARY_DIRS}) + find_library(ZeroMQ_STATIC_LIBRARY NAMES libzmq.a + PATHS ${PC_LIBZMQ_LIBDIR} ${PC_LIBZMQ_LIBRARY_DIRS}) + + add_library(libzmq SHARED IMPORTED) + set_property(TARGET libzmq PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PC_LIBZMQ_INCLUDE_DIRS}) + set_property(TARGET libzmq PROPERTY IMPORTED_LOCATION ${ZeroMQ_LIBRARY}) + + add_library(libzmq-static STATIC IMPORTED ${PC_LIBZMQ_INCLUDE_DIRS}) + set_property(TARGET libzmq-static PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PC_LIBZMQ_INCLUDE_DIRS}) + set_property(TARGET libzmq-static PROPERTY IMPORTED_LOCATION ${ZeroMQ_STATIC_LIBRARY}) + + if(ZeroMQ_LIBRARY AND ZeroMQ_STATIC_LIBRARY) + set(ZeroMQ_FOUND ON) + endif() +endif() + +if(NOT ZeroMQ_FOUND) + message(FATAL_ERROR "ZeroMQ was NOT found!") +endif() if (ZeroMQ_FOUND AND (NOT TARGET libzmq OR NOT TARGET libzmq-static)) message(FATAL_ERROR "ZeroMQ version not supported!") diff --git a/cppzmqConfig.cmake.in b/cppzmqConfig.cmake.in index 24b217c..2dd990b 100644 --- a/cppzmqConfig.cmake.in +++ b/cppzmqConfig.cmake.in @@ -17,7 +17,35 @@ @PACKAGE_INIT@ include(CMakeFindDependencyMacro) -find_dependency(ZeroMQ) +find_package(ZeroMQ) + +# libzmq autotools install: fallback to pkg-config +if(NOT ZeroMQ_FOUND) + find_package(PkgConfig) + pkg_check_modules(PC_LIBZMQ QUIET libzmq) + + set(ZeroMQ_VERSION ${PC_LIBZMQ_VERSION}) + find_library(ZeroMQ_LIBRARY NAMES libzmq.so + PATHS ${PC_LIBZMQ_LIBDIR} ${PC_LIBZMQ_LIBRARY_DIRS}) + find_library(ZeroMQ_STATIC_LIBRARY NAMES libzmq.a + PATHS ${PC_LIBZMQ_LIBDIR} ${PC_LIBZMQ_LIBRARY_DIRS}) + + add_library(libzmq SHARED IMPORTED) + set_property(TARGET libzmq PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PC_LIBZMQ_INCLUDE_DIRS}) + set_property(TARGET libzmq PROPERTY IMPORTED_LOCATION ${ZeroMQ_LIBRARY}) + + add_library(libzmq-static STATIC IMPORTED ${PC_LIBZMQ_INCLUDE_DIRS}) + set_property(TARGET libzmq-static PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PC_LIBZMQ_INCLUDE_DIRS}) + set_property(TARGET libzmq-static PROPERTY IMPORTED_LOCATION ${ZeroMQ_STATIC_LIBRARY}) + + if(ZeroMQ_LIBRARY AND ZeroMQ_STATIC_LIBRARY) + set(ZeroMQ_FOUND ON) + endif() +endif() + +if(NOT ZeroMQ_FOUND) + message(FATAL_ERROR "ZeroMQ was NOT found!") +endif() if(NOT TARGET @PROJECT_NAME@) include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") From 2008da35e6b7e2fcd441e0e4eb3314c88d2d39b1 Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Tue, 18 Jul 2017 20:15:41 +0200 Subject: [PATCH 2/3] Pkg-Config Fallback: File move the new logic to a simple file so we do not add code duplication --- CMakeLists.txt | 22 ++-------------------- cppzmqConfig.cmake.in | 21 +-------------------- libzmqPkgConfigFallback.cmake | 20 ++++++++++++++++++++ 3 files changed, 23 insertions(+), 40 deletions(-) create mode 100644 libzmqPkgConfigFallback.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 08fb7a6..f0b8f89 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,26 +5,7 @@ find_package(ZeroMQ) # libzmq autotools install: fallback to pkg-config if(NOT ZeroMQ_FOUND) - find_package(PkgConfig) - pkg_check_modules(PC_LIBZMQ QUIET libzmq) - - set(ZeroMQ_VERSION ${PC_LIBZMQ_VERSION}) - find_library(ZeroMQ_LIBRARY NAMES libzmq.so - PATHS ${PC_LIBZMQ_LIBDIR} ${PC_LIBZMQ_LIBRARY_DIRS}) - find_library(ZeroMQ_STATIC_LIBRARY NAMES libzmq.a - PATHS ${PC_LIBZMQ_LIBDIR} ${PC_LIBZMQ_LIBRARY_DIRS}) - - add_library(libzmq SHARED IMPORTED) - set_property(TARGET libzmq PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PC_LIBZMQ_INCLUDE_DIRS}) - set_property(TARGET libzmq PROPERTY IMPORTED_LOCATION ${ZeroMQ_LIBRARY}) - - add_library(libzmq-static STATIC IMPORTED ${PC_LIBZMQ_INCLUDE_DIRS}) - set_property(TARGET libzmq-static PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PC_LIBZMQ_INCLUDE_DIRS}) - set_property(TARGET libzmq-static PROPERTY IMPORTED_LOCATION ${ZeroMQ_STATIC_LIBRARY}) - - if(ZeroMQ_LIBRARY AND ZeroMQ_STATIC_LIBRARY) - set(ZeroMQ_FOUND ON) - endif() + include(${CMAKE_CURRENT_LIST_DIR}/libzmqPkgConfigFallback.cmake) endif() if(NOT ZeroMQ_FOUND) @@ -79,4 +60,5 @@ install(EXPORT ${PROJECT_NAME}-targets DESTINATION ${CPPZMQ_CMAKECONFIG_INSTALL_DIR}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake + ${CMAKE_SOURCE_DIR}/libzmqPkgConfigFallback.cmake DESTINATION ${CPPZMQ_CMAKECONFIG_INSTALL_DIR}) diff --git a/cppzmqConfig.cmake.in b/cppzmqConfig.cmake.in index 2dd990b..6fe6f5f 100644 --- a/cppzmqConfig.cmake.in +++ b/cppzmqConfig.cmake.in @@ -21,26 +21,7 @@ find_package(ZeroMQ) # libzmq autotools install: fallback to pkg-config if(NOT ZeroMQ_FOUND) - find_package(PkgConfig) - pkg_check_modules(PC_LIBZMQ QUIET libzmq) - - set(ZeroMQ_VERSION ${PC_LIBZMQ_VERSION}) - find_library(ZeroMQ_LIBRARY NAMES libzmq.so - PATHS ${PC_LIBZMQ_LIBDIR} ${PC_LIBZMQ_LIBRARY_DIRS}) - find_library(ZeroMQ_STATIC_LIBRARY NAMES libzmq.a - PATHS ${PC_LIBZMQ_LIBDIR} ${PC_LIBZMQ_LIBRARY_DIRS}) - - add_library(libzmq SHARED IMPORTED) - set_property(TARGET libzmq PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PC_LIBZMQ_INCLUDE_DIRS}) - set_property(TARGET libzmq PROPERTY IMPORTED_LOCATION ${ZeroMQ_LIBRARY}) - - add_library(libzmq-static STATIC IMPORTED ${PC_LIBZMQ_INCLUDE_DIRS}) - set_property(TARGET libzmq-static PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PC_LIBZMQ_INCLUDE_DIRS}) - set_property(TARGET libzmq-static PROPERTY IMPORTED_LOCATION ${ZeroMQ_STATIC_LIBRARY}) - - if(ZeroMQ_LIBRARY AND ZeroMQ_STATIC_LIBRARY) - set(ZeroMQ_FOUND ON) - endif() + include(${CMAKE_CURRENT_LIST_DIR}/libzmqPkgConfigFallback.cmake) endif() if(NOT ZeroMQ_FOUND) diff --git a/libzmqPkgConfigFallback.cmake b/libzmqPkgConfigFallback.cmake new file mode 100644 index 0000000..bb57aaf --- /dev/null +++ b/libzmqPkgConfigFallback.cmake @@ -0,0 +1,20 @@ +find_package(PkgConfig) +pkg_check_modules(PC_LIBZMQ QUIET libzmq) + +set(ZeroMQ_VERSION ${PC_LIBZMQ_VERSION}) +find_library(ZeroMQ_LIBRARY NAMES libzmq.so + PATHS ${PC_LIBZMQ_LIBDIR} ${PC_LIBZMQ_LIBRARY_DIRS}) +find_library(ZeroMQ_STATIC_LIBRARY NAMES libzmq.a + PATHS ${PC_LIBZMQ_LIBDIR} ${PC_LIBZMQ_LIBRARY_DIRS}) + +add_library(libzmq SHARED IMPORTED) +set_property(TARGET libzmq PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PC_LIBZMQ_INCLUDE_DIRS}) +set_property(TARGET libzmq PROPERTY IMPORTED_LOCATION ${ZeroMQ_LIBRARY}) + +add_library(libzmq-static STATIC IMPORTED ${PC_LIBZMQ_INCLUDE_DIRS}) +set_property(TARGET libzmq-static PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${PC_LIBZMQ_INCLUDE_DIRS}) +set_property(TARGET libzmq-static PROPERTY IMPORTED_LOCATION ${ZeroMQ_STATIC_LIBRARY}) + +if(ZeroMQ_LIBRARY AND ZeroMQ_STATIC_LIBRARY) + set(ZeroMQ_FOUND ON) +endif() From d1568bf1e95b699693655a5d9994861534752f07 Mon Sep 17 00:00:00 2001 From: Axel Huebl Date: Wed, 19 Jul 2017 10:43:07 +0200 Subject: [PATCH 3/3] Fix #121 CMake Min Version CMake targets / interfaces need at least CMake 3.0 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f0b8f89..44c0835 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8.12) +cmake_minimum_required(VERSION 3.0.0) project(cppzmq) find_package(ZeroMQ)