Skip to content

Commit 2951073

Browse files
- Added UDPCAP_INSTALL cmake option
- Prevent installing gtest libraries - link against delayimp, so ninja also links that lib
1 parent 4df3a11 commit 2951073

File tree

6 files changed

+95
-87
lines changed

6 files changed

+95
-87
lines changed

.github/workflows/build-windows.yml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,15 @@ jobs:
3131
run: |
3232
if ( '${{ matrix.library_type }}' -eq 'static' )
3333
{
34-
echo "build_shared_libs=OFF" >> "$Env:GITHUB_ENV"
35-
echo "package_postfix=static" >> "$Env:GITHUB_ENV"
34+
echo "build_shared_libs=OFF" >> "$Env:GITHUB_ENV"
35+
echo "udpcap_library_type=STATIC" >> "$Env:GITHUB_ENV"
36+
echo "package_postfix=static" >> "$Env:GITHUB_ENV"
3637
}
3738
else
3839
{
39-
echo "build_shared_libs=ON" >> "$Env:GITHUB_ENV"
40-
echo "package_postfix=shared" >> "$Env:GITHUB_ENV"
40+
echo "build_shared_libs=OFF" >> "$Env:GITHUB_ENV"
41+
echo "udpcap_library_type=SHARED" >> "$Env:GITHUB_ENV"
42+
echo "package_postfix=shared" >> "$Env:GITHUB_ENV"
4143
}
4244
4345
- name: Checkout
@@ -60,6 +62,7 @@ jobs:
6062
-A ${{ matrix.build_arch }} ^
6163
-T ${{ env.VS_TOOLSET }} ^
6264
-DCMAKE_INSTALL_PREFIX=${{env.INSTALL_PREFIX}} ^
65+
-DUDPCAP_LIBRARY_TYPE=${{ env.udpcap_library_type }} ^
6366
-DBUILD_SHARED_LIBS=${{ env.build_shared_libs }}
6467
6568
- name: Build (Release)

CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ option(UDPCAP_BUILD_TESTS
3939
"Build the udpcap GTests. Requires GTest::GTest to be available."
4040
OFF)
4141

42+
option(UDPCAP_INSTALL
43+
"Install udpcap library and headers"
44+
ON)
45+
4246
option(UDPCAP_THIRDPARTY_ENABLED
4347
"Enable building against the builtin dependencies"
4448
ON)

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,12 +128,14 @@ You can set the following CMake Options to control how Udpcap is supposed to bui
128128
|----------------------------------------------|----------|-------------|-----------------------------------------------------------------------------------------------------------------|
129129
| `UDPCAP_BUILD_SAMPLES` | `BOOL` | `ON` | Build the Udpcap (and asio) samples for sending and receiving dummy data |
130130
| `UDPCAP_BUILD_TESTS` | `BOOL` | `OFF` | Build the udpcap GTests. Requires GTest::GTest to be available. |
131+
| `UDPCAP_INSTALL` | `BOOL` | `ON` | Install udpcap library and headers |
131132
| `UDPCAP_THIRDPARTY_ENABLED` | `BOOL` | `ON` | Activate / Deactivate the usage of integrated dependencies. |
132133
| `UDPCAP_THIRDPARTY_USE_BUILTIN_NPCAP` | `BOOL` | `ON` | Fetch and build against an integrated Version of the npcap SDK. <br>Only available if `UDPCAP_THIRDPARTY_ENABLED=ON` |
133134
| `UDPCAP_THIRDPARTY_USE_BUILTIN_PCAPPLUSPLUS` | `BOOL` | `ON` | Fetch and build against an integrated Version of Pcap++. <br>_Only available if `UDPCAP_THIRDPARTY_ENABLED=ON`_ |
134135
| `UDPCAP_THIRDPARTY_USE_BUILTIN_ASIO` | `BOOL` | `ON` | Fetch and build against an integrated Version of asio. <br>Only available if `UDPCAP_THIRDPARTY_ENABLED=ON` |
135136
| `UDPCAP_THIRDPARTY_USE_BUILTIN_GTEST` | `BOOL` | `ON` | Fetch and build tests against a predefined version of GTest. If disabled, the targets have to be provided externally. <br>Only available if `UDPCAP_THIRDPARTY_ENABLED=ON` and `UDPCAP_BUILD_TESTS=ON`|
136137
| `UDPCAP_LIBRARY_TYPE` | `STRING` | | Controls the library type of Udpcap by injecting the string into the `add_library` call. Can be set to STATIC / SHARED / OBJECT. If set, this will override the regular `BUILD_SHARED_LIBS` CMake option. If not set, CMake will use the default setting, which is controlled by `BUILD_SHARED_LIBS`. |
138+
137139
# How to integrate Udpcap in your project
138140
139141
**Integrate as binaries**:

thirdparty/GTest/GTest_make_available.cmake

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,12 @@ FetchContent_Declare(GTest
55
DOWNLOAD_EXTRACT_TIMESTAMP FALSE
66
)
77

8+
set(INSTALL_GTEST OFF) # Enable installation of googletest. (Projects embedding googletest may want to turn this OFF.)
9+
set(BUILD_GMOCK OFF) # Builds the googlemock subproject
10+
811
message(STATUS "Fetching GTest...")
912
FetchContent_MakeAvailable(GTest)
1013

11-
set(GTest_ROOT_DIR "${gtest_SOURCE_DIR}")
12-
13-
# Googletest automatically forces MT instead of MD if we do not set this option.
14-
if(MSVC)
15-
set(gtest_force_shared_crt ON CACHE BOOL "My option" FORCE)
16-
set(BUILD_GMOCK OFF CACHE BOOL "My option" FORCE)
17-
set(INSTALL_GTEST OFF CACHE BOOL "My option" FORCE)
18-
endif()
1914

2015
# Prepend googletest-module/FindGTest.cmake to Module Path
2116
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/Modules/")

thirdparty/pcapplusplus/pcapplusplus_make_available.cmake

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ FetchContent_Declare(pcapplusplus
55
DOWNLOAD_EXTRACT_TIMESTAMP FALSE
66
)
77

8+
set(PCAPPP_INSTALL ON)
9+
810
message(STATUS "Fetching Pcap++...")
911
FetchContent_MakeAvailable(pcapplusplus)
1012

udpcap/CMakeLists.txt

Lines changed: 77 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ generate_export_header(${PROJECT_NAME}
6969
add_library (udpcap::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
7070

7171
target_link_libraries(${PROJECT_NAME}
72+
PUBLIC
73+
delayimp # ecaludp delay loads wpcap.dll and Ninja does not implicitly link delayimp.lib
7274
PRIVATE
7375
npcap::npcap
7476
PcapPlusPlus::Pcap++
@@ -135,80 +137,80 @@ source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}" FILES
135137
################################################################################
136138
### Installation rules
137139
################################################################################
140+
if (UDPCAP_INSTALL)
141+
set(UDPCAP_INSTALL_CMAKE_DIR "lib/cmake/udpcap")
142+
143+
# Install Runtime & Libs
144+
install(
145+
TARGETS ${PROJECT_NAME}
146+
EXPORT udpcapTargets
147+
148+
RUNTIME
149+
DESTINATION "bin"
150+
COMPONENT udpcap_runtime
151+
152+
LIBRARY
153+
DESTINATION "lib"
154+
COMPONENT udpcap_runtime
155+
156+
ARCHIVE
157+
DESTINATION "lib"
158+
COMPONENT udpcap_dev
159+
)
160+
161+
# Install public header files (-> dev package)
162+
install(
163+
DIRECTORY "include/udpcap"
164+
DESTINATION "include"
165+
COMPONENT udpcap_dev
166+
FILES_MATCHING PATTERN "*.h"
167+
)
168+
169+
# Install the auto-generated header with the export macros (-> dev package)
170+
install(
171+
DIRECTORY "${PROJECT_BINARY_DIR}/include/udpcap"
172+
DESTINATION "include"
173+
COMPONENT udpcap_dev
174+
FILES_MATCHING PATTERN "*.h"
175+
)
176+
177+
# Install Target.cmake file (-> dev packag)
178+
install(
179+
EXPORT udpcapTargets
180+
FILE udpcapTargets.cmake
181+
DESTINATION ${UDPCAP_INSTALL_CMAKE_DIR}
182+
NAMESPACE udpcap::
183+
COMPONENT udpcap_dev
184+
)
138185

139-
# set(UDPCAP_INSTALL_CMAKE_DIR "lib/cmake/udpcap")
140-
141-
# # Install Runtime & Libs
142-
# install(
143-
# TARGETS ${PROJECT_NAME}
144-
# EXPORT udpcapTargets
145-
146-
# RUNTIME
147-
# DESTINATION "bin"
148-
# COMPONENT udpcap_runtime
149-
150-
# LIBRARY
151-
# DESTINATION "lib"
152-
# COMPONENT udpcap_runtime
153-
154-
# ARCHIVE
155-
# DESTINATION "lib"
156-
# COMPONENT udpcap_dev
157-
# )
158-
159-
# # Install public header files (-> dev package)
160-
# install(
161-
# DIRECTORY "include/udpcap"
162-
# DESTINATION "include"
163-
# COMPONENT udpcap_dev
164-
# FILES_MATCHING PATTERN "*.h"
165-
# )
166-
167-
# # Install the auto-generated header with the export macros (-> dev package)
168-
# install(
169-
# DIRECTORY "${PROJECT_BINARY_DIR}/include/udpcap"
170-
# DESTINATION "include"
171-
# COMPONENT udpcap_dev
172-
# FILES_MATCHING PATTERN "*.h"
173-
# )
174-
175-
# # Install Target.cmake file (-> dev packag)
176-
# install(
177-
# EXPORT udpcapTargets
178-
# FILE udpcapTargets.cmake
179-
# DESTINATION ${UDPCAP_INSTALL_CMAKE_DIR}
180-
# NAMESPACE udpcap::
181-
# COMPONENT udpcap_dev
182-
# )
183-
184-
# # Create and install Config.cmake file (-> dev package)
185-
186-
# include(CMakePackageConfigHelpers)
187-
188-
# get_target_property(target_type ${PROJECT_NAME} TYPE)
189-
# if (target_type STREQUAL STATIC_LIBRARY)
190-
# set(CONFIG_INPUT_FILENAME "udpcapConfig-static.cmake.in")
191-
# else()
192-
# set(CONFIG_INPUT_FILENAME "udpcapConfig-shared.cmake.in")
193-
# endif()
194-
195-
# configure_package_config_file(
196-
# "cmake/${CONFIG_INPUT_FILENAME}"
197-
# "${CMAKE_CURRENT_BINARY_DIR}/cmake_/udpcapConfig.cmake"
198-
# INSTALL_DESTINATION ${UDPCAP_INSTALL_CMAKE_DIR}
199-
# PATH_VARS UDPCAP_INSTALL_CMAKE_DIR
200-
# )
201-
# write_basic_package_version_file(
202-
# "${CMAKE_CURRENT_BINARY_DIR}/cmake_/udpcapConfigVersion.cmake"
203-
# VERSION ${PROJECT_VERSION}
204-
# COMPATIBILITY SameMajorVersion
205-
# )
206-
207-
# install(
208-
# FILES
209-
# "${CMAKE_CURRENT_BINARY_DIR}/cmake_/udpcapConfig.cmake"
210-
# "${CMAKE_CURRENT_BINARY_DIR}/cmake_/udpcapConfigVersion.cmake"
211-
# DESTINATION ${UDPCAP_INSTALL_CMAKE_DIR}
212-
# COMPONENT udpcap_dev
213-
# )
186+
# Create and install Config.cmake file (-> dev package)
214187

188+
include(CMakePackageConfigHelpers)
189+
190+
get_target_property(target_type ${PROJECT_NAME} TYPE)
191+
if (target_type STREQUAL STATIC_LIBRARY)
192+
set(CONFIG_INPUT_FILENAME "udpcapConfig-static.cmake.in")
193+
else()
194+
set(CONFIG_INPUT_FILENAME "udpcapConfig-shared.cmake.in")
195+
endif()
196+
197+
configure_package_config_file(
198+
"cmake/${CONFIG_INPUT_FILENAME}"
199+
"${CMAKE_CURRENT_BINARY_DIR}/cmake_/udpcapConfig.cmake"
200+
INSTALL_DESTINATION ${UDPCAP_INSTALL_CMAKE_DIR}
201+
PATH_VARS UDPCAP_INSTALL_CMAKE_DIR
202+
)
203+
write_basic_package_version_file(
204+
"${CMAKE_CURRENT_BINARY_DIR}/cmake_/udpcapConfigVersion.cmake"
205+
VERSION ${PROJECT_VERSION}
206+
COMPATIBILITY SameMajorVersion
207+
)
208+
209+
install(
210+
FILES
211+
"${CMAKE_CURRENT_BINARY_DIR}/cmake_/udpcapConfig.cmake"
212+
"${CMAKE_CURRENT_BINARY_DIR}/cmake_/udpcapConfigVersion.cmake"
213+
DESTINATION ${UDPCAP_INSTALL_CMAKE_DIR}
214+
COMPONENT udpcap_dev
215+
)
216+
endif()

0 commit comments

Comments
 (0)