2020-03-15 05:43:23 +01:00
cmake_minimum_required ( VERSION 3.7 )
2020-02-06 01:21:02 +01:00
2020-10-13 23:10:34 +02:00
# Has to be set before `project()`, and ignored on non-macos:
2020-10-15 21:07:45 +02:00
set ( CMAKE_OSX_DEPLOYMENT_TARGET 10.12 CACHE STRING "macOS deployment target (Apple clang only)" )
2020-10-13 23:10:34 +02:00
2020-06-22 18:32:16 +02:00
project ( liblokimq CXX C )
2020-02-06 01:21:02 +01:00
2020-03-05 06:00:35 +01:00
include ( GNUInstallDirs )
2020-03-13 15:37:31 +01:00
set ( LOKIMQ_VERSION_MAJOR 1 )
2020-05-12 20:33:59 +02:00
set ( LOKIMQ_VERSION_MINOR 2 )
2020-12-14 08:18:58 +01:00
set ( LOKIMQ_VERSION_PATCH 3 )
2020-03-13 15:37:31 +01:00
set ( LOKIMQ_VERSION "${LOKIMQ_VERSION_MAJOR}.${LOKIMQ_VERSION_MINOR}.${LOKIMQ_VERSION_PATCH}" )
message ( STATUS "lokimq v${LOKIMQ_VERSION}" )
set ( LOKIMQ_LIBVERSION 0 )
2020-03-13 18:26:36 +01:00
2020-11-17 17:40:59 +01:00
if ( CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME )
set ( lokimq_IS_TOPLEVEL_PROJECT TRUE )
else ( )
set ( lokimq_IS_TOPLEVEL_PROJECT FALSE )
endif ( )
2020-03-13 18:26:36 +01:00
2020-11-17 17:40:59 +01:00
option ( BUILD_SHARED_LIBS "Build shared libraries instead of static ones" ON )
set ( lokimq_INSTALL_DEFAULT OFF )
if ( BUILD_SHARED_LIBS OR lokimq_IS_TOPLEVEL_PROJECT )
set ( lokimq_INSTALL_DEFAULT ON )
endif ( )
option ( LOKIMQ_BUILD_TESTS "Building and perform lokimq tests" ${ lokimq_IS_TOPLEVEL_PROJECT } )
option ( LOKIMQ_INSTALL "Add lokimq libraries and headers to cmake install target; defaults to ON if BUILD_SHARED_LIBS is enabled or we are the top-level project; OFF for a static subdirectory build" ${ lokimq_INSTALL_DEFAULT } )
option ( LOKIMQ_INSTALL_CPPZMQ "Install cppzmq header with lokimq/ headers (requires LOKIMQ_INSTALL)" ON )
2020-03-05 06:00:35 +01:00
list ( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" )
2020-03-13 19:29:30 +01:00
configure_file ( lokimq/version.h.in lokimq/version.h @ONLY )
2020-03-13 19:31:43 +01:00
configure_file ( liblokimq.pc.in liblokimq.pc @ONLY )
2020-03-13 19:29:30 +01:00
2020-03-02 16:21:52 +01:00
add_library ( lokimq
2020-05-09 02:42:16 +02:00
l o k i m q / a d d r e s s . c p p
2020-03-13 18:02:54 +01:00
l o k i m q / a u t h . c p p
2020-02-06 01:21:02 +01:00
l o k i m q / b t _ s e r i a l i z e . c p p
2020-03-13 18:02:54 +01:00
l o k i m q / c o n n e c t i o n s . c p p
l o k i m q / j o b s . c p p
l o k i m q / l o k i m q . c p p
l o k i m q / p r o x y . c p p
l o k i m q / w o r k e r . c p p
2020-03-02 16:21:52 +01:00
)
2020-03-13 15:37:31 +01:00
set_target_properties ( lokimq PROPERTIES SOVERSION ${ LOKIMQ_LIBVERSION } )
2020-03-13 19:27:29 +01:00
set ( THREADS_PREFER_PTHREAD_FLAG ON )
find_package ( Threads REQUIRED )
target_link_libraries ( lokimq PRIVATE Threads::Threads )
2020-03-14 18:19:13 +01:00
# libzmq is nearly impossible to link statically from a system-installed static library: it depends
2020-03-15 05:43:23 +01:00
# on a ton of other libraries, some of which are not all statically available. If the caller wants
# to mess with this, so be it: they can set up a libzmq target and we'll use it. Otherwise if they
# asked us to do things statically, don't even try to find a system lib and just build it.
set ( lokimq_build_static_libzmq OFF )
if ( TARGET libzmq )
target_link_libraries ( lokimq PUBLIC libzmq )
elseif ( BUILD_SHARED_LIBS )
include ( FindPkgConfig )
pkg_check_modules ( libzmq libzmq>=4.3 IMPORTED_TARGET )
2020-04-29 03:52:18 +02:00
2020-03-15 05:43:23 +01:00
if ( libzmq_FOUND )
2020-05-17 01:06:01 +02:00
# Debian sid includes a -isystem in the mit-krb package that, starting with pkg-config 0.29.2,
# breaks cmake's pkgconfig module because it stupidly thinks "-isystem" is a path, so if we find
# -isystem in the include dirs then hack it out.
get_property ( zmq_inc TARGET PkgConfig::libzmq PROPERTY INTERFACE_INCLUDE_DIRECTORIES )
list ( FIND zmq_inc "-isystem" broken_isystem )
if ( NOT broken_isystem EQUAL -1 )
list ( REMOVE_AT zmq_inc ${ broken_isystem } )
set_property ( TARGET PkgConfig::libzmq PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${ zmq_inc } )
endif ( )
2020-03-15 05:43:23 +01:00
target_link_libraries ( lokimq PUBLIC PkgConfig::libzmq )
else ( )
set ( lokimq_build_static_libzmq ON )
endif ( )
else ( )
set ( lokimq_build_static_libzmq ON )
2020-03-14 18:19:13 +01:00
endif ( )
2020-03-15 05:43:23 +01:00
if ( lokimq_build_static_libzmq )
2020-09-16 16:32:49 +02:00
message ( STATUS "libzmq >= 4.3 not found or static build requested, building bundled version" )
2020-03-05 06:00:35 +01:00
list ( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/local-libzmq" )
include ( LocalLibzmq )
2020-03-15 05:43:23 +01:00
target_link_libraries ( lokimq PUBLIC libzmq_vendor )
2020-03-05 06:00:35 +01:00
endif ( )
2020-03-02 16:21:52 +01:00
target_include_directories ( lokimq
P U B L I C
$ < I N S T A L L _ I N T E R F A C E : >
$ < B U I L D _ I N T E R F A C E : $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } >
2020-03-15 05:43:23 +01:00
$ < B U I L D _ I N T E R F A C E : $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / c p p z m q >
2020-03-02 16:21:52 +01:00
)
2020-02-06 01:21:02 +01:00
2020-03-02 16:21:52 +01:00
target_compile_options ( lokimq PRIVATE -Wall -Wextra -Werror )
2020-03-05 19:52:28 +01:00
set_target_properties ( lokimq PROPERTIES
2020-05-12 20:33:59 +02:00
C X X _ S T A N D A R D 1 7
2020-03-05 19:52:28 +01:00
C X X _ S T A N D A R D _ R E Q U I R E D O N
2020-03-13 19:28:03 +01:00
C X X _ E X T E N S I O N S O F F
2020-03-05 19:52:28 +01:00
P O S I T I O N _ I N D E P E N D E N T _ C O D E O N
)
2020-02-06 01:21:02 +01:00
2020-03-14 18:19:13 +01:00
function ( link_dep_libs target linktype libdirs )
2020-03-15 05:43:23 +01:00
foreach ( lib ${ ARGN } )
find_library ( link_lib- ${ lib } NAMES ${ lib } PATHS ${ libdirs } )
if ( link_lib- ${ lib } )
target_link_libraries ( ${ target } ${ linktype } ${ link_lib-${lib } } )
endif ( )
endforeach ( )
2020-03-14 18:19:13 +01:00
endfunction ( )
2020-03-15 05:43:23 +01:00
# If the caller has already set up a sodium target then we will just link to it, otherwise we go
# looking for it.
if ( TARGET sodium )
2020-05-15 06:36:01 +02:00
target_link_libraries ( lokimq PUBLIC sodium )
2020-03-15 05:43:23 +01:00
if ( lokimq_build_static_libzmq )
target_link_libraries ( libzmq_vendor INTERFACE sodium )
endif ( )
2020-03-14 18:19:13 +01:00
else ( )
2020-11-17 17:40:59 +01:00
include ( FindPkgConfig )
2020-03-15 05:43:23 +01:00
pkg_check_modules ( sodium REQUIRED libsodium IMPORTED_TARGET )
if ( BUILD_SHARED_LIBS )
2020-05-15 06:36:01 +02:00
target_link_libraries ( lokimq PUBLIC PkgConfig::sodium )
2020-03-15 05:43:23 +01:00
if ( lokimq_build_static_libzmq )
target_link_libraries ( libzmq_vendor INTERFACE PkgConfig::sodium )
endif ( )
else ( )
2020-05-15 06:36:01 +02:00
link_dep_libs ( lokimq PUBLIC "${sodium_STATIC_LIBRARY_DIRS}" ${ sodium_STATIC_LIBRARIES } )
target_include_directories ( lokimq PUBLIC ${ sodium_STATIC_INCLUDE_DIRS } )
2020-03-15 05:43:23 +01:00
if ( lokimq_build_static_libzmq )
link_dep_libs ( libzmq_vendor INTERFACE "${sodium_STATIC_LIBRARY_DIRS}" ${ sodium_STATIC_LIBRARIES } )
target_link_libraries ( libzmq_vendor INTERFACE ${ sodium_STATIC_INCLUDE_DIRS } )
endif ( )
endif ( )
2020-03-14 18:19:13 +01:00
endif ( )
2020-03-05 21:00:26 +01:00
2020-03-01 19:28:50 +01:00
add_library ( lokimq::lokimq ALIAS lokimq )
2020-03-02 16:21:52 +01:00
export (
T A R G E T S l o k i m q
N A M E S P A C E l o k i m q : :
F I L E l o k i m q T a r g e t s . c m a k e
)
2020-03-13 22:53:55 +01:00
2020-11-17 17:40:59 +01:00
if ( LOKIMQ_INSTALL )
install (
T A R G E T S l o k i m q
E X P O R T l o k i m q C o n f i g
D E S T I N A T I O N $ { C M A K E _ I N S T A L L _ L I B D I R }
)
install (
F I L E S l o k i m q / a d d r e s s . h
l o k i m q / a u t h . h
l o k i m q / b a s e 3 2 z . h
l o k i m q / b a s e 6 4 . h
l o k i m q / b a t c h . h
l o k i m q / b t _ s e r i a l i z e . h
l o k i m q / b t _ v a l u e . h
l o k i m q / c o n n e c t i o n s . h
l o k i m q / h e x . h
l o k i m q / l o k i m q . h
l o k i m q / m e s s a g e . h
l o k i m q / s t r i n g _ v i e w . h
l o k i m q / v a r i a n t . h
$ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / l o k i m q / v e r s i o n . h
D E S T I N A T I O N $ { C M A K E _ I N S T A L L _ I N C L U D E D I R } / l o k i m q
)
if ( LOKIMQ_INSTALL_CPPZMQ )
install (
F I L E S c p p z m q / z m q . h p p
D E S T I N A T I O N $ { C M A K E _ I N S T A L L _ I N C L U D E D I R } / l o k i m q
)
endif ( )
2020-03-13 19:29:30 +01:00
2020-03-13 19:31:43 +01:00
2020-11-17 17:40:59 +01:00
install (
F I L E S $ { C M A K E _ C U R R E N T _ B I N A R Y _ D I R } / l i b l o k i m q . p c
D E S T I N A T I O N $ { C M A K E _ I N S T A L L _ L I B D I R } / p k g c o n f i g
)
2020-03-01 19:28:50 +01:00
endif ( )
if ( LOKIMQ_BUILD_TESTS )
2020-02-06 23:10:26 +01:00
add_subdirectory ( tests )
endif ( )