Skip to content

Commit 3513e6f

Browse files
committed
1
1 parent c933146 commit 3513e6f

File tree

5 files changed

+249
-133
lines changed

5 files changed

+249
-133
lines changed

.github/workflows/build-cpack-packages.yml

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -103,20 +103,16 @@ jobs:
103103

104104
macos:
105105
name: macOS packages
106-
runs-on: macos-13
106+
runs-on: macos-15-intel
107107
steps:
108108
- uses: actions/checkout@v4
109109

110-
- name: Install Docker
111-
run: |
112-
set -euo pipefail
113-
brew install colima docker
114-
colima start
115-
docker context use colima
116-
117110
- name: Build packages
118111
run: make build-package
119112

113+
- name: Build smoke-test application package
114+
run: make -C packaging/smoke-test-app package BUILD_TYPE=${{ inputs.build-type }}
115+
120116
- name: Install driver package (pkg)
121117
run: |
122118
set -euo pipefail
@@ -130,26 +126,11 @@ jobs:
130126
sudo installer -pkg "$pkg" -target /
131127
done
132128
133-
- name: Build smoke-test application package
134-
run: |
135-
set -euo pipefail
136-
make -C packaging/smoke-test-app package \
137-
BUILD_TYPE=${{ inputs.build-type }}
138-
139129
- name: Install smoke-test application package (pkg)
140-
run: |
141-
set -euo pipefail
142-
make -C packaging/smoke-test-app install-pkg
130+
run: make -C packaging/smoke-test-app install-pkg
143131

144132
- name: Run smoke-test application against local Scylla
145-
run: |
146-
set -euo pipefail
147-
cleanup() {
148-
docker compose -f tests/examples_cluster/docker-compose.yml down --remove-orphans
149-
}
150-
trap cleanup EXIT
151-
docker compose -f tests/examples_cluster/docker-compose.yml up -d --wait
152-
/usr/local/bin/scylla-cpp-driver-smoke-test 172.43.0.2
133+
run: make -C packaging/smoke-test-app test-package
153134

154135
- name: Collect artifacts
155136
run: |
@@ -175,6 +156,22 @@ jobs:
175156
steps:
176157
- uses: actions/checkout@v4
177158

159+
- name: Install Docker
160+
shell: pwsh
161+
run: |
162+
$ErrorActionPreference = 'Stop'
163+
$dockerService = Get-Service -Name docker -ErrorAction SilentlyContinue
164+
if (-not $dockerService) {
165+
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
166+
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
167+
Install-Package -Name docker -ProviderName DockerMsftProvider -Force
168+
}
169+
try {
170+
Start-Service docker -ErrorAction Stop
171+
} catch {
172+
Write-Warning "Docker service failed to start: $($_.Exception.Message)"
173+
}
174+
178175
- name: Add WiX to PATH
179176
shell: pwsh
180177
run: |

Makefile

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ SHELL = bash
66
ifeq ($(OS),Windows_NT)
77
SHELL := pwsh.exe
88
.SHELLFLAGS := -NoProfile -Command
9+
.ONESHELL:
910
endif
1011

1112
UNAME_S := $(shell uname -s)
@@ -306,14 +307,18 @@ build-examples:
306307
$(MAKE) .ubuntu-package-install-dependencies; \
307308
fi
308309

309-
.package-build-prepare-windows:
310+
.package-build-prepare-windows-openssl:
310311
if (-not (choco list --local-only --exact openssl.light | Select-String '^openssl.light$$')) {
311312
choco install openssl.light --no-progress -y
312-
};
313+
}
314+
315+
.package-build-prepare-windows-pkgconfiglite:
313316
if (-not (choco list --local-only --exact pkgconfiglite | Select-String '^pkgconfiglite$$')) {
314317
choco install pkgconfiglite --no-progress -y
315318
}
316319

320+
.package-build-prepare-windows: .package-build-prepare-windows-openssl .package-build-prepare-windows-pkgconfiglite
321+
317322
ifeq ($(OS_TYPE),macos)
318323
.package-build-prepare:
319324
else ifeq ($(OS_TYPE),windows)

packaging/smoke-test-app/CMakeLists.txt

Lines changed: 127 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -1,135 +1,154 @@
11
cmake_minimum_required(VERSION 3.15)
22
project(scylla_cpp_driver_smoke_app LANGUAGES C)
33

4-
# Derive driver version information from the root header so the smoke-app
5-
# package stays in lockstep with the driver packages.
4+
# Derive driver version information from pkg-config metadata when the
5+
# scylla-cpp-driver dev package is available. This keeps the smoke-app
6+
# aligned with the installed driver packages instead of relying on
7+
# building the driver from the same CMake project.
68
get_filename_component(CPP_DRIVER_ROOT "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE)
79
get_filename_component(CPP_DRIVER_ROOT "${CPP_DRIVER_ROOT}/.." ABSOLUTE)
8-
set(CASS_INCLUDE_DIR "${CPP_DRIVER_ROOT}/include")
910

10-
file(STRINGS "${CASS_INCLUDE_DIR}/cassandra.h" _VERSION_PARTS
11-
REGEX "^#define[ \t]+CASS_VERSION_(MAJOR|MINOR|PATCH|SUFFIX)[ \t]+([0-9]+|\"([^\"]+)\")$")
11+
find_package(PkgConfig REQUIRED)
12+
pkg_check_modules(SCYLLA_CPP_DRIVER REQUIRED IMPORTED_TARGET scylla-cpp-driver)
1213

13-
foreach(part MAJOR MINOR PATCH SUFFIX)
14-
string(REGEX MATCH "CASS_VERSION_${part}[ \t]+([0-9]+|\"([^\"]+)\")"
15-
PROJECT_VERSION_${part} "${_VERSION_PARTS}")
16-
if(PROJECT_VERSION_${part})
17-
string(REGEX REPLACE "CASS_VERSION_${part}[ \t]+([0-9]+|\"([^\"]+)\")" "\\1"
18-
PROJECT_VERSION_${part} "${PROJECT_VERSION_${part}}")
14+
set(_pkg_config_use_static_libs_saved OFF)
15+
if(DEFINED PKG_CONFIG_USE_STATIC_LIBS)
16+
set(_pkg_config_use_static_libs_saved "${PKG_CONFIG_USE_STATIC_LIBS}")
17+
endif()
18+
set(PKG_CONFIG_USE_STATIC_LIBS ON)
19+
pkg_check_modules(SCYLLA_CPP_DRIVER_STATIC REQUIRED IMPORTED_TARGET scylla-cpp-driver_static)
20+
if(_pkg_config_use_static_libs_saved)
21+
set(PKG_CONFIG_USE_STATIC_LIBS "${_pkg_config_use_static_libs_saved}")
22+
else()
23+
unset(PKG_CONFIG_USE_STATIC_LIBS)
24+
endif()
25+
unset(_pkg_config_use_static_libs_saved)
26+
27+
set(PROJECT_VERSION_STRING "")
28+
if(SCYLLA_CPP_DRIVER_VERSION)
29+
set(PROJECT_VERSION_STRING "${SCYLLA_CPP_DRIVER_VERSION}")
30+
string(REPLACE "-" ";" _version_parts "${PROJECT_VERSION_STRING}")
31+
list(GET _version_parts 0 _numeric_version)
32+
list(LENGTH _version_parts _parts_length)
33+
if(_parts_length GREATER 1)
34+
list(REMOVE_AT _version_parts 0)
35+
list(JOIN _version_parts "-" PROJECT_VERSION_SUFFIX)
36+
else()
37+
set(PROJECT_VERSION_SUFFIX "")
1938
endif()
20-
endforeach()
2139

22-
if(NOT PROJECT_VERSION_MAJOR OR NOT PROJECT_VERSION_MINOR)
23-
message(FATAL_ERROR "Unable to extract driver version from cassandra.h")
40+
string(REPLACE "." ";" _numeric_split "${_numeric_version}")
41+
list(LENGTH _numeric_split _numeric_length)
42+
if(_numeric_length GREATER 0)
43+
list(GET _numeric_split 0 PROJECT_VERSION_MAJOR)
44+
else()
45+
set(PROJECT_VERSION_MAJOR "")
46+
endif()
47+
if(_numeric_length GREATER 1)
48+
list(GET _numeric_split 1 PROJECT_VERSION_MINOR)
49+
else()
50+
set(PROJECT_VERSION_MINOR "")
51+
endif()
52+
if(_numeric_length GREATER 2)
53+
list(GET _numeric_split 2 PROJECT_VERSION_PATCH)
54+
else()
55+
set(PROJECT_VERSION_PATCH "")
56+
endif()
2457
endif()
2558

26-
set(PROJECT_VERSION_STRING
27-
"${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")
28-
if(NOT PROJECT_VERSION_PATCH STREQUAL "")
29-
set(PROJECT_VERSION_STRING
30-
"${PROJECT_VERSION_STRING}.${PROJECT_VERSION_PATCH}")
31-
endif()
32-
if(NOT PROJECT_VERSION_SUFFIX STREQUAL "")
33-
string(REPLACE "\"" ""
34-
PROJECT_VERSION_SUFFIX ${PROJECT_VERSION_SUFFIX})
35-
set(PROJECT_VERSION_STRING
36-
"${PROJECT_VERSION_STRING}-${PROJECT_VERSION_SUFFIX}")
37-
endif()
59+
if(PROJECT_VERSION_STRING STREQUAL "")
60+
# Fallback to parsing cassandra.h when pkg-config metadata does not provide
61+
# version information (should be rare, but keeps backwards compatibility).
62+
set(CASS_INCLUDE_DIR "")
63+
foreach(_candidate_dir IN LISTS SCYLLA_CPP_DRIVER_INCLUDE_DIRS)
64+
if(EXISTS "${_candidate_dir}/cassandra.h")
65+
set(CASS_INCLUDE_DIR "${_candidate_dir}")
66+
break()
67+
endif()
68+
endforeach()
69+
if(CASS_INCLUDE_DIR STREQUAL "")
70+
set(CASS_INCLUDE_DIR "${CPP_DRIVER_ROOT}/include")
71+
endif()
3872

39-
set(CMAKE_C_STANDARD 11)
40-
set(CMAKE_C_STANDARD_REQUIRED ON)
41-
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
73+
file(STRINGS "${CASS_INCLUDE_DIR}/cassandra.h" _VERSION_PARTS
74+
REGEX "^#define[ \t]+CASS_VERSION_(MAJOR|MINOR|PATCH|SUFFIX)[ \t]+([0-9]+|\"([^\"]+)\")$")
4275

43-
find_package(PkgConfig)
44-
if(PKG_CONFIG_FOUND)
45-
pkg_check_modules(SCYLLA_CPP_DRIVER scylla-cpp-driver)
46-
endif()
76+
foreach(part MAJOR MINOR PATCH SUFFIX)
77+
string(REGEX MATCH "CASS_VERSION_${part}[ \t]+([0-9]+|\"([^\"]+)\")"
78+
PROJECT_VERSION_${part} "${_VERSION_PARTS}")
79+
if(PROJECT_VERSION_${part})
80+
string(REGEX REPLACE "CASS_VERSION_${part}[ \t]+([0-9]+|\"([^\"]+)\")" "\\1"
81+
PROJECT_VERSION_${part} "${PROJECT_VERSION_${part}}")
82+
endif()
83+
endforeach()
4784

48-
set(DRIVER_INCLUDE_DIRS "")
49-
set(DRIVER_LIBRARY_DIRS "")
50-
set(DRIVER_LIBRARIES "")
51-
set(DRIVER_COMPILE_OPTIONS "")
52-
set(DRIVER_LINK_OPTIONS "")
53-
54-
if(PKG_CONFIG_FOUND AND SCYLLA_CPP_DRIVER_FOUND)
55-
list(APPEND DRIVER_INCLUDE_DIRS ${SCYLLA_CPP_DRIVER_INCLUDE_DIRS})
56-
list(APPEND DRIVER_LIBRARY_DIRS ${SCYLLA_CPP_DRIVER_LIBRARY_DIRS})
57-
list(APPEND DRIVER_LIBRARIES ${SCYLLA_CPP_DRIVER_LIBRARIES})
58-
list(APPEND DRIVER_COMPILE_OPTIONS ${SCYLLA_CPP_DRIVER_CFLAGS_OTHER})
59-
list(APPEND DRIVER_LINK_OPTIONS ${SCYLLA_CPP_DRIVER_LDFLAGS_OTHER})
60-
endif()
85+
if(NOT PROJECT_VERSION_MAJOR OR NOT PROJECT_VERSION_MINOR)
86+
message(FATAL_ERROR "Unable to extract driver version from metadata or cassandra.h")
87+
endif()
6188

62-
if(NOT PKG_CONFIG_FOUND OR NOT SCYLLA_CPP_DRIVER_FOUND)
63-
if(NOT DEFINED SCYLLA_CPP_DRIVER_ROOT AND DEFINED ENV{SCYLLA_CPP_DRIVER_ROOT})
64-
set(SCYLLA_CPP_DRIVER_ROOT "$ENV{SCYLLA_CPP_DRIVER_ROOT}")
89+
set(PROJECT_VERSION_STRING
90+
"${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")
91+
if(NOT PROJECT_VERSION_PATCH STREQUAL "")
92+
set(PROJECT_VERSION_STRING
93+
"${PROJECT_VERSION_STRING}.${PROJECT_VERSION_PATCH}")
6594
endif()
66-
if(NOT DEFINED SCYLLA_CPP_DRIVER_ROOT)
67-
if(WIN32)
68-
set(SCYLLA_CPP_DRIVER_ROOT "C:/Program Files/ScyllaDB/Scylla CPP Driver")
69-
elseif(APPLE)
70-
set(SCYLLA_CPP_DRIVER_ROOT "/usr/local")
71-
else()
72-
set(SCYLLA_CPP_DRIVER_ROOT "/usr")
73-
endif()
95+
if(NOT PROJECT_VERSION_SUFFIX STREQUAL "")
96+
string(REPLACE "\"" "" PROJECT_VERSION_SUFFIX ${PROJECT_VERSION_SUFFIX})
97+
set(PROJECT_VERSION_STRING
98+
"${PROJECT_VERSION_STRING}-${PROJECT_VERSION_SUFFIX}")
7499
endif()
100+
endif()
75101

76-
find_path(SCYLLA_CPP_DRIVER_INCLUDE_DIR cassandra.h
77-
PATHS
78-
"${SCYLLA_CPP_DRIVER_ROOT}/include"
79-
PATH_SUFFIXES
80-
""
81-
"cassandra"
82-
"x86_64-linux-gnu"
83-
"x86_64-linux-gnu/cassandra")
84-
85-
find_library(SCYLLA_CPP_DRIVER_LIBRARY
86-
NAMES scylla-cpp-driver
87-
PATHS
88-
"${SCYLLA_CPP_DRIVER_ROOT}/lib"
89-
"${SCYLLA_CPP_DRIVER_ROOT}/lib64"
90-
"${SCYLLA_CPP_DRIVER_ROOT}/lib/x86_64-linux-gnu"
91-
"${SCYLLA_CPP_DRIVER_ROOT}/lib64/x86_64-linux-gnu")
92-
93-
if(NOT SCYLLA_CPP_DRIVER_INCLUDE_DIR OR NOT SCYLLA_CPP_DRIVER_LIBRARY)
94-
message(FATAL_ERROR
95-
"Unable to locate scylla-cpp-driver installation. Set SCYLLA_CPP_DRIVER_ROOT "
96-
"or install pkg-config so the package can be discovered automatically.")
102+
set(CMAKE_C_STANDARD 11)
103+
set(CMAKE_C_STANDARD_REQUIRED ON)
104+
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
105+
if(PROJECT_VERSION_SUFFIX)
106+
string(REPLACE "\"" "" PROJECT_VERSION_SUFFIX ${PROJECT_VERSION_SUFFIX})
107+
if(PROJECT_VERSION_PATCH)
108+
set(PROJECT_VERSION_STRING
109+
"${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}-${PROJECT_VERSION_SUFFIX}")
110+
else()
111+
set(PROJECT_VERSION_STRING
112+
"${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}-${PROJECT_VERSION_SUFFIX}")
113+
endif()
114+
elseif(PROJECT_VERSION_STRING STREQUAL "")
115+
set(PROJECT_VERSION_STRING
116+
"${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")
117+
if(NOT PROJECT_VERSION_PATCH STREQUAL "")
118+
set(PROJECT_VERSION_STRING
119+
"${PROJECT_VERSION_STRING}.${PROJECT_VERSION_PATCH}")
97120
endif()
98-
99-
set(SCYLLA_CPP_DRIVER_FOUND TRUE)
100-
set(DRIVER_INCLUDE_DIRS ${SCYLLA_CPP_DRIVER_INCLUDE_DIR})
101-
get_filename_component(_driver_library_dir ${SCYLLA_CPP_DRIVER_LIBRARY} DIRECTORY)
102-
set(DRIVER_LIBRARY_DIRS ${_driver_library_dir})
103-
set(DRIVER_LIBRARIES ${SCYLLA_CPP_DRIVER_LIBRARY})
104121
endif()
105122

106123
add_executable(scylla-cpp-driver-smoke-test
107124
src/smoke_test.c)
125+
target_link_libraries(scylla-cpp-driver-smoke-test PRIVATE
126+
PkgConfig::SCYLLA_CPP_DRIVER)
108127

109-
if(DRIVER_INCLUDE_DIRS)
110-
target_include_directories(scylla-cpp-driver-smoke-test PRIVATE
111-
${DRIVER_INCLUDE_DIRS})
112-
endif()
113-
114-
if(DRIVER_LIBRARY_DIRS)
115-
target_link_directories(scylla-cpp-driver-smoke-test PRIVATE
116-
${DRIVER_LIBRARY_DIRS})
117-
endif()
118-
119-
if(DRIVER_LIBRARIES)
120-
target_link_libraries(scylla-cpp-driver-smoke-test PRIVATE
121-
${DRIVER_LIBRARIES})
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")
122134
endif()
123-
124-
if(DRIVER_COMPILE_OPTIONS)
125-
target_compile_options(scylla-cpp-driver-smoke-test PRIVATE
126-
${DRIVER_COMPILE_OPTIONS})
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")
127143
endif()
128-
129-
if(DRIVER_LINK_OPTIONS)
130-
target_link_options(scylla-cpp-driver-smoke-test PRIVATE
131-
${DRIVER_LINK_OPTIONS})
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)
132147
endif()
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)
133152

134153
set(SMOKE_APP_COMPONENT_NAME "")
135154
set(SMOKE_APP_COMPONENT_ARGS "")
@@ -138,7 +157,9 @@ if(APPLE)
138157
set(SMOKE_APP_COMPONENT_ARGS COMPONENT ${SMOKE_APP_COMPONENT_NAME})
139158
endif()
140159

141-
install(TARGETS scylla-cpp-driver-smoke-test
160+
install(TARGETS
161+
scylla-cpp-driver-smoke-test
162+
scylla-cpp-driver-smoke-test-static
142163
DESTINATION bin
143164
${SMOKE_APP_COMPONENT_ARGS})
144165

0 commit comments

Comments
 (0)