Skip to content

Commit a627916

Browse files
committed
add CMake package configuration file
This will enabled other CMake-based projects to find an installed version of cpp-netlib via find_package(cppnetlib [[VERSION] 0.10.1] [REQUIRED]) To link to the installed cppnetlib version projects want to use include_directories(${CPPNETLIB_INCLUDE_DIRS}) target_link_library(myTarget ${CPPNETLIB_LIBRARIES})
1 parent aef1e7d commit a627916

File tree

4 files changed

+112
-8
lines changed

4 files changed

+112
-8
lines changed

Diff for: CMakeLists.txt

+53-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,24 @@ project(CPP-NETLIB)
88

99
option( CPP-NETLIB_BUILD_SHARED_LIBS "Build cpp-netlib as shared libraries." OFF )
1010

11+
include(GNUInstallDirs)
12+
13+
# determine install path for CMake config files
14+
if(WIN32 AND NOT CYGWIN)
15+
set(DEF_INSTALL_CMAKE_DIR CMake)
16+
else()
17+
set(DEF_INSTALL_CMAKE_DIR lib/CMake/cppnetlib)
18+
endif()
19+
set(INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH "Installation directory for CMake files")
20+
21+
# Make relative cmake install path absolute (needed later on)
22+
if(NOT IS_ABSOLUTE "${INSTALL_CMAKE_DIR}")
23+
set(INSTALL_CMAKE_DIR "${CMAKE_INSTALL_PREFIX}/${INSTALL_CMAKE_DIR}")
24+
endif()
25+
26+
1127
if(CPP-NETLIB_BUILD_SHARED_LIBS OR BUILD_SHARED_LIBS)
12-
message ("Linking boost testing libs dynamically...")
28+
message (STATUS "Linking boost testing libs dynamically...")
1329
set(Boost_USE_STATIC_LIBS OFF)
1430
set(CPP-NETLIB_BUILD_SHARED_LIBS ON)
1531
set(BUILD_SHARED_LIBS ON)
@@ -68,5 +84,40 @@ endif()
6884

6985
enable_testing()
7086

71-
include(GNUInstallDirs)
7287
install(DIRECTORY boost DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
88+
89+
###
90+
## Export Targets
91+
# (so cpp-netlib can be easily used by other CMake projects)
92+
# [see http://www.cmake.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file]
93+
94+
# Add all targets to the build-tree export set
95+
export(TARGETS cppnetlib-client-connections cppnetlib-server-parsers cppnetlib-uri
96+
FILE "${PROJECT_BINARY_DIR}/cppnetlibTargets.cmake")
97+
# Export the package for use from the build-tree
98+
# (this registers the build-tree with a global CMake-registry)
99+
export(PACKAGE cppnetlib)
100+
# Create the cppnetlibConfig.cmake and cppnetlibConfigVersion files
101+
file(RELATIVE_PATH REL_INCLUDE_DIR "${INSTALL_CMAKE_DIR}"
102+
"${CMAKE_INSTALL_FULL_INCLUDEDIR}")
103+
# ... for the build tree
104+
set(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}")
105+
configure_file(cppnetlibConfig.cmake.in
106+
"${PROJECT_BINARY_DIR}/cppnetlibConfig.cmake" @ONLY)
107+
# ... for the install tree
108+
set(CONF_INCLUDE_DIRS "\${CPPNETLIB_CMAKE_DIR}/${REL_INCLUDE_DIR}")
109+
configure_file(cppnetlibConfig.cmake.in
110+
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/cppnetlibConfig.cmake" @ONLY)
111+
# ... for both
112+
configure_file(cppnetlibConfigVersion.cmake.in
113+
"${PROJECT_BINARY_DIR}/cppnetlibConfigVersion.cmake" @ONLY)
114+
# Install the cppnetlibConfig.cmake and cppnetlibConfigVersion.cmake
115+
install(FILES
116+
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/cppnetlibConfig.cmake"
117+
"${PROJECT_BINARY_DIR}/cppnetlibConfigVersion.cmake"
118+
DESTINATION "${INSTALL_CMAKE_DIR}"
119+
COMPONENT dev)
120+
# Install the export set for use with the install-tree
121+
install(EXPORT cppnetlibTargets
122+
DESTINATION "${INSTALL_CMAKE_DIR}"
123+
COMPONENT dev)

Diff for: cppnetlibConfig.cmake.in

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# - Config file for the cppnetlib package
2+
# It defines the following variables
3+
# CPPNETLIB_INCLUDE_DIRS - include directories for cppnetlib
4+
# CPPNETLIB_LIBRARIES - libraries to link against
5+
# CPPNETLIB_EXECUTABLE - the bar executable
6+
7+
# Compute paths
8+
get_filename_component(CPPNETLIB_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
9+
set(CPPNETLIB_INCLUDE_DIRS "@CONF_INCLUDE_DIRS@")
10+
11+
# Our library dependencies (contains definitions for IMPORTED targets)
12+
if( NOT TARGET cppnetlib-client-connections
13+
AND NOT TARGET cppnetlib-server-parsers
14+
AND NOT TARGET cppnetlib-uri
15+
AND NOT CPPNETLIB_BINARY_DIR)
16+
include("${CPPNETLIB_CMAKE_DIR}/cppnetlibTargets.cmake")
17+
endif()
18+
19+
# These are IMPORTED targets created by cppnetlibTargets.cmake
20+
set(CPPNETLIB_LIBRARIES
21+
cppnetlib-client-connections
22+
cppnetlib-server-parsers
23+
cppnetlib-uri)
24+
#set(CPPNETLIB_EXECUTABLE ...) # maybe the examples?

Diff for: cppnetlibConfigVersion.cmake.in

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
set(PACKAGE_VERSION "@CPPNETLIB_VERSION_STRING@")
2+
3+
# Check whether the requested PACKAGE_FIND_VERSION is compatible
4+
if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}")
5+
set(PACKAGE_VERSION_COMPATIBLE FALSE)
6+
else()
7+
set(PACKAGE_VERSION_COMPATIBLE TRUE)
8+
if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}")
9+
set(PACKAGE_VERSION_EXACT TRUE)
10+
endif()
11+
endif()

Diff for: libs/network/src/CMakeLists.txt

+24-6
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,38 @@
88

99
include_directories(${CPP-NETLIB_SOURCE_DIR})
1010

11+
file(GLOB_RECURSE CPP-NETLIB_HEADERS
12+
"${CPP-NETLIB_SOURCE_DIR}/boost/" "*.hpp")
13+
1114
set(CPP-NETLIB_URI_SRCS uri/uri.cpp uri/schemes.cpp)
1215
add_library(cppnetlib-uri ${CPP-NETLIB_URI_SRCS})
1316
set_target_properties(cppnetlib-uri
14-
PROPERTIES VERSION ${CPPNETLIB_VERSION_STRING} SOVERSION ${CPPNETLIB_VERSION_MAJOR})
15-
install(TARGETS cppnetlib-uri DESTINATION ${CMAKE_INSTALL_LIBDIR})
17+
PROPERTIES VERSION ${CPPNETLIB_VERSION_STRING}
18+
SOVERSION ${CPPNETLIB_VERSION_MAJOR}
19+
PUBLIC_HEADER "${CPP-NETLIB_HEADERS}")
20+
install(TARGETS cppnetlib-uri
21+
EXPORT cppnetlibTargets
22+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR}
23+
LIBRARY DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR})
1624

1725
set(CPP-NETLIB_HTTP_SERVER_SRCS server_request_parsers_impl.cpp)
1826
add_library(cppnetlib-server-parsers ${CPP-NETLIB_HTTP_SERVER_SRCS})
1927
set_target_properties(cppnetlib-server-parsers
20-
PROPERTIES VERSION ${CPPNETLIB_VERSION_STRING} SOVERSION ${CPPNETLIB_VERSION_MAJOR})
21-
install(TARGETS cppnetlib-server-parsers DESTINATION ${CMAKE_INSTALL_LIBDIR})
28+
PROPERTIES VERSION ${CPPNETLIB_VERSION_STRING}
29+
SOVERSION ${CPPNETLIB_VERSION_MAJOR}
30+
PUBLIC_HEADER "${CPP-NETLIB_HEADERS}")
31+
install(TARGETS cppnetlib-server-parsers
32+
EXPORT cppnetlibTargets
33+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR}
34+
LIBRARY DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR})
2235

2336
set(CPP-NETLIB_HTTP_CLIENT_SRCS client.cpp)
2437
add_library(cppnetlib-client-connections ${CPP-NETLIB_HTTP_CLIENT_SRCS})
2538
set_target_properties(cppnetlib-client-connections
26-
PROPERTIES VERSION ${CPPNETLIB_VERSION_STRING} SOVERSION ${CPPNETLIB_VERSION_MAJOR})
27-
install(TARGETS cppnetlib-client-connections DESTINATION ${CMAKE_INSTALL_LIBDIR})
39+
PROPERTIES VERSION ${CPPNETLIB_VERSION_STRING}
40+
SOVERSION ${CPPNETLIB_VERSION_MAJOR}
41+
PUBLIC_HEADER "${CPP-NETLIB_HEADERS}")
42+
install(TARGETS cppnetlib-client-connections
43+
EXPORT cppnetlibTargets
44+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR}
45+
LIBRARY DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR})

0 commit comments

Comments
 (0)