@@ -11,12 +11,15 @@ get_filename_component(CPP_DRIVER_ROOT "${CPP_DRIVER_ROOT}/.." ABSOLUTE)
1111find_package (PkgConfig REQUIRED)
1212pkg_check_modules(SCYLLA_CPP_DRIVER REQUIRED IMPORTED_TARGET scylla-cpp-driver)
1313
14+ option (SCYLLA_SMOKE_BUILD_STATIC
15+ "Build statically linked smoke test executable" OFF )
16+
1417set (_pkg_config_use_static_libs_saved OFF )
1518if (DEFINED PKG_CONFIG_USE_STATIC_LIBS)
1619 set (_pkg_config_use_static_libs_saved "${PKG_CONFIG_USE_STATIC_LIBS} " )
1720endif ()
1821set (PKG_CONFIG_USE_STATIC_LIBS ON )
19- pkg_check_modules(SCYLLA_CPP_DRIVER_STATIC REQUIRED IMPORTED_TARGET scylla-cpp-driver_static)
22+ pkg_check_modules(SCYLLA_CPP_DRIVER_STATIC IMPORTED_TARGET scylla-cpp-driver_static)
2023if (_pkg_config_use_static_libs_saved)
2124 set (PKG_CONFIG_USE_STATIC_LIBS "${_pkg_config_use_static_libs_saved} " )
2225else ()
@@ -122,33 +125,94 @@ endif()
122125
123126add_executable (scylla-cpp-driver-smoke-test
124127 src/smoke_test.c)
125- target_link_libraries (scylla-cpp-driver-smoke-test PRIVATE
126- PkgConfig::SCYLLA_CPP_DRIVER)
127128
128- add_executable (scylla-cpp-driver-smoke-test -static
129- src/smoke_test.c)
130- set_target_properties (scylla-cpp-driver-smoke-test -static PROPERTIES
131- OUTPUT_NAME "scylla-cpp-driver-smoke-test-static" )
132- if (NOT PKG_CONFIG_EXECUTABLE)
133- message (FATAL_ERROR "pkg-config executable not available for static linkage" )
129+ set (_smoke_link_target "PkgConfig::SCYLLA_CPP_DRIVER" )
130+ set (_smoke_use_static TRUE )
131+ set (_smoke_extra_link_libraries "" )
132+ if (WIN32 )
133+ set (_smoke_use_static FALSE )
134+ else ()
135+ if (APPLE )
136+ set (_smoke_shared_patterns ".dylib" ".dylib.*" )
137+ else ()
138+ set (_smoke_shared_patterns ".so" ".so.*" )
139+ endif ()
140+ foreach (_smoke_dir IN LISTS SCYLLA_CPP_DRIVER_LIBRARY_DIRS)
141+ foreach (_smoke_lib IN LISTS SCYLLA_CPP_DRIVER_LIBRARIES)
142+ foreach (_smoke_pattern IN LISTS _smoke_shared_patterns)
143+ file (GLOB _smoke_shared_candidates
144+ "${_smoke_dir} /lib${_smoke_lib}${_smoke_pattern} " )
145+ if (_smoke_shared_candidates)
146+ set (_smoke_use_static FALSE )
147+ break ()
148+ endif ()
149+ endforeach ()
150+ if (NOT _smoke_use_static)
151+ break ()
152+ endif ()
153+ endforeach ()
154+ if (NOT _smoke_use_static)
155+ break ()
156+ endif ()
157+ endforeach ()
134158endif ()
135- execute_process (
136- COMMAND ${PKG_CONFIG_EXECUTABLE} --libs --static scylla-cpp-driver_static
137- OUTPUT_VARIABLE _smoke_static_libs_output
138- RESULT_VARIABLE _smoke_static_libs_result
139- OUTPUT_STRIP_TRAILING_WHITESPACE)
140- if (NOT _smoke_static_libs_result EQUAL 0 OR _smoke_static_libs_output STREQUAL "" )
141- message (FATAL_ERROR
142- "Unable to resolve static link flags from scylla-cpp-driver_static pkg-config metadata" )
159+ if (_smoke_use_static)
160+ if (SCYLLA_CPP_DRIVER_STATIC_FOUND AND TARGET PkgConfig::SCYLLA_CPP_DRIVER_STATIC)
161+ message (STATUS
162+ "scylla-cpp-driver shared library not found; linking smoke test statically" )
163+ set (_smoke_link_target "PkgConfig::SCYLLA_CPP_DRIVER_STATIC" )
164+ if (NOT WIN32 )
165+ list (APPEND _smoke_extra_link_libraries m)
166+ endif ()
167+ else ()
168+ message (FATAL_ERROR
169+ "scylla-cpp-driver shared library not found and static package metadata unavailable; cannot link smoke test" )
170+ endif ()
143171endif ()
144- separate_arguments (_smoke_static_link_libraries UNIX_COMMAND "${_smoke_static_libs_output} " )
145- if (NOT WIN32 )
146- list (APPEND _smoke_static_link_libraries m)
172+ unset (_smoke_dir)
173+ unset (_smoke_lib)
174+ unset (_smoke_pattern)
175+ unset (_smoke_shared_candidates)
176+ unset (_smoke_shared_patterns)
177+ unset (_smoke_use_static)
178+
179+ target_link_libraries (scylla-cpp-driver-smoke-test PRIVATE
180+ ${_smoke_link_target}
181+ ${_smoke_extra_link_libraries} )
182+ unset (_smoke_extra_link_libraries)
183+ unset (_smoke_link_target)
184+
185+ if (SCYLLA_SMOKE_BUILD_STATIC)
186+ if (NOT SCYLLA_CPP_DRIVER_STATIC_FOUND)
187+ message (FATAL_ERROR
188+ "Static scylla-cpp-driver pkg-config metadata required to build static smoke test" )
189+ endif ()
190+
191+ add_executable (scylla-cpp-driver-smoke-test -static
192+ src/smoke_test.c)
193+ set_target_properties (scylla-cpp-driver-smoke-test -static PROPERTIES
194+ OUTPUT_NAME "scylla-cpp-driver-smoke-test-static" )
195+ if (NOT PKG_CONFIG_EXECUTABLE)
196+ message (FATAL_ERROR "pkg-config executable not available for static linkage" )
197+ endif ()
198+ execute_process (
199+ COMMAND ${PKG_CONFIG_EXECUTABLE} --libs --static scylla-cpp-driver_static
200+ OUTPUT_VARIABLE _smoke_static_libs_output
201+ RESULT_VARIABLE _smoke_static_libs_result
202+ OUTPUT_STRIP_TRAILING_WHITESPACE)
203+ if (NOT _smoke_static_libs_result EQUAL 0 OR _smoke_static_libs_output STREQUAL "" )
204+ message (FATAL_ERROR
205+ "Unable to resolve static link flags from scylla-cpp-driver_static pkg-config metadata" )
206+ endif ()
207+ separate_arguments (_smoke_static_link_libraries UNIX_COMMAND "${_smoke_static_libs_output} " )
208+ if (NOT WIN32 )
209+ list (APPEND _smoke_static_link_libraries m)
210+ endif ()
211+ target_link_libraries (scylla-cpp-driver-smoke-test -static PRIVATE
212+ ${_smoke_static_link_libraries} )
213+ unset (_smoke_static_libs_output)
214+ unset (_smoke_static_link_libraries)
147215endif ()
148- target_link_libraries (scylla-cpp-driver-smoke-test -static PRIVATE
149- ${_smoke_static_link_libraries} )
150- unset (_smoke_static_libs_output)
151- unset (_smoke_static_link_libraries)
152216
153217set (SMOKE_APP_COMPONENT_NAME "" )
154218set (SMOKE_APP_COMPONENT_ARGS "" )
@@ -157,17 +221,25 @@ if(APPLE)
157221 set (SMOKE_APP_COMPONENT_ARGS COMPONENT ${SMOKE_APP_COMPONENT_NAME} )
158222endif ()
159223
224+ set (_smoke_install_targets scylla-cpp-driver-smoke-test )
225+ if (TARGET scylla-cpp-driver-smoke-test -static )
226+ list (APPEND _smoke_install_targets scylla-cpp-driver-smoke-test -static )
227+ endif ()
228+
160229install (TARGETS
161- scylla-cpp-driver-smoke-test
162- scylla-cpp-driver-smoke-test -static
230+ ${_smoke_install_targets}
163231 DESTINATION bin
164232 ${SMOKE_APP_COMPONENT_ARGS} )
233+ unset (_smoke_install_targets)
165234
166235#------------------------
167236# Packaging (CPack)
168237#------------------------
169238
170- set (CPACK_PACKAGE_NAME "scylla-cpp-driver-smoke-app" )
239+ if (NOT DEFINED CPACK_PACKAGE_NAME)
240+ set (CPACK_PACKAGE_NAME "scylla-cpp-driver-smoke-app" )
241+ endif ()
242+ set (_SMOKE_APP_PACKAGE_BASENAME "${CPACK_PACKAGE_NAME} " )
171243set (CPACK_PACKAGE_VENDOR "ScyllaDB" )
172244set (CPACK_PACKAGE_CONTACT "ScyllaDB <info@scylladb.com>" )
173245set (CPACK_PACKAGE_DESCRIPTION_SUMMARY
@@ -192,7 +264,7 @@ elseif(APPLE)
192264 COPYONLY )
193265 set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR} /LICENSE.txt" )
194266 set (CPACK_PACKAGE_FILE_NAME
195- "scylla-cpp-driver-smoke-app -${PROJECT_VERSION_STRING} -macos" )
267+ "${_SMOKE_APP_PACKAGE_BASENAME} -${PROJECT_VERSION_STRING} -macos" )
196268 set (CPACK_PRODUCTBUILD_IDENTIFIER "com.scylladb.cpp-rs-driver.smoke-app" )
197269 set (CPACK_PRODUCTBUILD_SIGNING_IDENTITY "" )
198270 if (SMOKE_APP_COMPONENT_NAME)
@@ -209,7 +281,7 @@ else()
209281 set (CPACK_GENERATOR "DEB;RPM" )
210282 set (CPACK_RESOURCE_FILE_LICENSE "${CPP_DRIVER_ROOT} /LICENSE" )
211283 set (CPACK_PACKAGE_FILE_NAME
212- "scylla-cpp-driver-smoke-app -${PROJECT_VERSION_STRING} -${CMAKE_SYSTEM_NAME} " )
284+ "${_SMOKE_APP_PACKAGE_BASENAME} -${PROJECT_VERSION_STRING} -${CMAKE_SYSTEM_NAME} " )
213285 set (CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
214286 set (CPACK_DEBIAN_PACKAGE_MAINTAINER "ScyllaDB" )
215287 set (CPACK_DEBIAN_PACKAGE_SECTION "database" )
@@ -222,3 +294,4 @@ else()
222294endif ()
223295
224296include (CPack)
297+ unset (_SMOKE_APP_PACKAGE_BASENAME)
0 commit comments