Skip to content

Commit 53b56dc

Browse files
committed
static
1 parent 383be92 commit 53b56dc

File tree

7 files changed

+382
-78
lines changed

7 files changed

+382
-78
lines changed

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,20 +81,23 @@ jobs:
8181
steps:
8282
- uses: actions/checkout@v4
8383

84+
- name: Install GNU make
85+
run: brew install make
86+
8487
- name: Build packages
85-
run: make build-package
88+
run: gmake build-package
8689

8790
- name: Install driver dev package
88-
run: make -C packaging/smoke-test-app install-driver-dev
91+
run: gmake -C packaging/smoke-test-app install-driver-dev
8992

9093
- name: Build smoke-test application package
91-
run: make -C packaging/smoke-test-app build-package
94+
run: gmake -C packaging/smoke-test-app build-package
9295

9396
- name: Install smoke-test application package
94-
run: make -C packaging/smoke-test-app install-app
97+
run: gmake -C packaging/smoke-test-app install-app
9598

9699
- name: Test smoke-test application
97-
run: make -C packaging/smoke-test-app test-app-package
100+
run: gmake -C packaging/smoke-test-app test-app-package
98101

99102
- name: Collect artifacts
100103
run: |

CMakeLists.txt

Lines changed: 61 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ set(SCYLLA_DRIVER_COMPONENT_ARGS COMPONENT ${SCYLLA_DRIVER_COMPONENT_NAME})
6060
# These must be set before add_subdirectory() calls so install commands can use them
6161
set(SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME "${SCYLLA_DRIVER_COMPONENT_NAME}")
6262
set(SCYLLA_DRIVER_DEV_COMPONENT_NAME "${SCYLLA_DRIVER_COMPONENT_NAME}-dev")
63+
string(TOUPPER "${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}" SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME_UPPER)
64+
string(TOUPPER "${SCYLLA_DRIVER_DEV_COMPONENT_NAME}" SCYLLA_DRIVER_DEV_COMPONENT_NAME_UPPER)
6365

6466
if(CASS_BUILD_SHARED)
6567
set(BUILD_SHARED_LIBS ON)
@@ -279,11 +281,49 @@ endif()
279281
set(CPACK_MONOLITHIC_INSTALL ON)
280282
set(CPACK_VERBATIM_VARIABLES ON)
281283

284+
# Normalize package output names so generated artifacts share a consistent
285+
# `scylla_cpp_driver_<version>_<platform>.{deb,rpm,pkg,msi}` pattern.
282286
set(CPACK_MONOLITHIC_INSTALL OFF)
283287

288+
set(SCYLLA_DRIVER_ARTIFACT_BASE_NAME ${SCYLLA_DRIVER_COMPONENT_NAME})
289+
set(_scylla_driver_system_processor "${CMAKE_SYSTEM_PROCESSOR}")
290+
291+
set(SCYLLA_DRIVER_DEB_ARCH "${_scylla_driver_system_processor}")
292+
set(SCYLLA_DRIVER_RPM_ARCH "${_scylla_driver_system_processor}")
293+
set(SCYLLA_DRIVER_WIN_ARCH "${_scylla_driver_system_processor}")
294+
295+
if(_scylla_driver_system_processor MATCHES "^(x86_64|AMD64)$")
296+
set(SCYLLA_DRIVER_DEB_ARCH "amd64")
297+
set(SCYLLA_DRIVER_RPM_ARCH "x86_64")
298+
set(SCYLLA_DRIVER_WIN_ARCH "x64")
299+
elseif(_scylla_driver_system_processor MATCHES "^(aarch64|ARM64)$")
300+
set(SCYLLA_DRIVER_DEB_ARCH "arm64")
301+
set(SCYLLA_DRIVER_RPM_ARCH "aarch64")
302+
set(SCYLLA_DRIVER_WIN_ARCH "arm64")
303+
endif()
304+
305+
# Fall back to raw processor strings when no mapping exists.
306+
if(NOT SCYLLA_DRIVER_DEB_ARCH)
307+
set(SCYLLA_DRIVER_DEB_ARCH "${_scylla_driver_system_processor}")
308+
endif()
309+
if(NOT SCYLLA_DRIVER_RPM_ARCH)
310+
set(SCYLLA_DRIVER_RPM_ARCH "${_scylla_driver_system_processor}")
311+
endif()
312+
if(NOT SCYLLA_DRIVER_WIN_ARCH)
313+
set(SCYLLA_DRIVER_WIN_ARCH "${_scylla_driver_system_processor}")
314+
endif()
315+
316+
# Provide a default artifact name that individual generators can refine.
317+
set(CPACK_PACKAGE_FILE_NAME
318+
"${SCYLLA_DRIVER_ARTIFACT_BASE_NAME}_${PROJECT_VERSION_STRING}")
319+
284320
# Set the list of components for CPack
285321
set(CPACK_COMPONENTS_ALL ${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME} ${SCYLLA_DRIVER_DEV_COMPONENT_NAME})
286322

323+
# Ensure CPack emits one artifact per component instead of merging them into a
324+
# single bundle.
325+
set(CPACK_COMPONENTS_GROUPING IGNORE)
326+
287327
include(CPackComponent)
288328

289329
# Runtime component: shared libraries only
@@ -295,32 +335,38 @@ cpack_add_component(${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}
295335
# Dev component: headers, static libraries, pkg-config files, and development symlinks
296336
cpack_add_component(${SCYLLA_DRIVER_DEV_COMPONENT_NAME}
297337
DISPLAY_NAME "Scylla C++ Driver Development"
298-
DESCRIPTION "Headers, static libraries, and development files for the Scylla C++ Driver"
299-
DEPENDS ${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME})
338+
DESCRIPTION "Headers, static libraries, and development files for the Scylla C++ Driver")
300339

301340
if(WIN32)
302341
set(CPACK_GENERATOR "WIX")
303342
set(CPACK_PACKAGE_INSTALL_DIRECTORY "ScyllaDB\\Scylla CPP Driver")
304343
# Stable GUID keeps WiX upgrades working between versions
305344
set(CPACK_WIX_UPGRADE_GUID "3E09F4F4-1C4A-4B8B-973D-0CBA64D5E78F")
345+
set(CPACK_PACKAGE_FILE_NAME
346+
"${SCYLLA_DRIVER_ARTIFACT_BASE_NAME}_${PROJECT_VERSION_STRING}_${SCYLLA_DRIVER_WIN_ARCH}")
306347
elseif(APPLE)
307348
configure_file(
308349
"${CMAKE_CURRENT_SOURCE_DIR}/LICENSE"
309350
"${CMAKE_CURRENT_BINARY_DIR}/LICENSE.txt"
310351
COPYONLY)
311352
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_BINARY_DIR}/LICENSE.txt")
312353
set(CPACK_GENERATOR "productbuild;DragNDrop")
354+
set(CPACK_DMG_COMPONENT_INSTALL ON)
313355
set(CPACK_PACKAGE_FILE_NAME
314-
"${_CPACK_PACKAGE_NAME}-${PROJECT_VERSION_STRING}-macos")
356+
"${SCYLLA_DRIVER_ARTIFACT_BASE_NAME}_${PROJECT_VERSION_STRING}_macos")
315357
set(CPACK_PRODUCTBUILD_IDENTIFIER "com.scylladb.cpp-rs-driver")
316358
set(CPACK_PRODUCTBUILD_SIGNING_IDENTITY "")
317359
set(CPACK_PRODUCTBUILD_COMPONENT_INSTALL ON)
318360

319361
else()
320362
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
321363
set(CPACK_GENERATOR "DEB;RPM")
322-
set(CPACK_PACKAGE_FILE_NAME
323-
"${_CPACK_PACKAGE_NAME}-${PROJECT_VERSION_STRING}-${CMAKE_SYSTEM_NAME}")
364+
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${SCYLLA_DRIVER_DEB_ARCH}")
365+
366+
set(CPACK_DEBIAN_${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME_UPPER}_FILE_NAME
367+
"${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}_${PROJECT_VERSION_STRING}_${SCYLLA_DRIVER_DEB_ARCH}.deb")
368+
set(CPACK_DEBIAN_${SCYLLA_DRIVER_DEV_COMPONENT_NAME_UPPER}_FILE_NAME
369+
"${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_${PROJECT_VERSION_STRING}_${SCYLLA_DRIVER_DEB_ARCH}.deb")
324370

325371
# DEB package configuration
326372
set(CPACK_DEB_COMPONENT_INSTALL ON)
@@ -331,20 +377,23 @@ else()
331377
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
332378

333379
# DEB runtime package
334-
set(CPACK_DEBIAN_${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}_PACKAGE_NAME "${_CPACK_PACKAGE_NAME}")
335-
set(CPACK_DEBIAN_${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}_PACKAGE_SECTION "libs")
380+
set(CPACK_DEBIAN_${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME_UPPER}_PACKAGE_NAME "${_CPACK_PACKAGE_NAME}")
381+
set(CPACK_DEBIAN_${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME_UPPER}_PACKAGE_SECTION "libs")
336382

337383
# DEB dev package
338-
set(CPACK_DEBIAN_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_PACKAGE_NAME "${_CPACK_PACKAGE_NAME}-dev")
339-
set(CPACK_DEBIAN_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_PACKAGE_SECTION "libdevel")
340-
set(CPACK_DEBIAN_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_PACKAGE_DEPENDS "${_CPACK_PACKAGE_NAME} (= \${CPACK_DEBIAN_PACKAGE_VERSION})")
384+
set(CPACK_DEBIAN_${SCYLLA_DRIVER_DEV_COMPONENT_NAME_UPPER}_PACKAGE_NAME "${_CPACK_PACKAGE_NAME}-dev")
385+
set(CPACK_DEBIAN_${SCYLLA_DRIVER_DEV_COMPONENT_NAME_UPPER}_PACKAGE_SECTION "libdevel")
341386

342387
# RPM package configuration
343388
set(CPACK_RPM_COMPONENT_INSTALL ON)
344389
set(CPACK_RPM_PACKAGE_LICENSE "Apache-2.0")
345390
set(CPACK_RPM_PACKAGE_URL ${CPACK_PACKAGE_HOMEPAGE_URL})
346391
set(CPACK_RPM_PACKAGE_RELEASE 1)
347392
set(CPACK_RPM_PACKAGE_GROUP "Applications/Databases")
393+
set(CPACK_RPM_PACKAGE_ARCHITECTURE "${SCYLLA_DRIVER_RPM_ARCH}")
394+
395+
set(CPACK_RPM_${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}_FILE_NAME
396+
"${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}_${PROJECT_VERSION_STRING}_${SCYLLA_DRIVER_RPM_ARCH}.rpm")
348397

349398
# RPM runtime package
350399
set(CPACK_RPM_${SCYLLA_DRIVER_RUNTIME_COMPONENT_NAME}_PACKAGE_NAME "${_CPACK_PACKAGE_NAME}")
@@ -353,7 +402,8 @@ else()
353402
# RPM dev package (devel suffix is standard for RPM)
354403
set(CPACK_RPM_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_PACKAGE_NAME "${_CPACK_PACKAGE_NAME}-devel")
355404
set(CPACK_RPM_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_PACKAGE_GROUP "Development/Libraries")
356-
set(CPACK_RPM_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_PACKAGE_REQUIRES "${_CPACK_PACKAGE_NAME} = ${PROJECT_VERSION_STRING}-${CPACK_RPM_PACKAGE_RELEASE}")
405+
set(CPACK_RPM_${SCYLLA_DRIVER_DEV_COMPONENT_NAME}_FILE_NAME
406+
"${SCYLLA_DRIVER_COMPONENT_NAME}-devel_${PROJECT_VERSION_STRING}_${SCYLLA_DRIVER_RPM_ARCH}.rpm")
357407
endif()
358408

359409
include(CPack)

Makefile

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,11 @@ build-driver: .package-configure
338338

339339
build-package: build-driver
340340
@cd build; for gen in $(CPACK_GENERATORS); do \
341-
cpack -G $${gen} -C $(CMAKE_BUILD_TYPE); \
341+
if [ "$${gen}" = "productbuild" ] && [ "$(OS_TYPE)" = "macos" ]; then \
342+
cmake -DCPACK_BUILD_DIR="$$PWD" -DCPACK_BUILD_CONFIG="$(CMAKE_BUILD_TYPE)" -P ../cmake/RunMacProductbuild.cmake; \
343+
else \
344+
cpack -G $${gen} -C $(CMAKE_BUILD_TYPE); \
345+
fi; \
342346
done
343347

344348
_update-rust-tooling:

cmake/RunMacProductbuild.cmake

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
cmake_minimum_required(VERSION 3.16)
2+
3+
if(NOT DEFINED CPACK_BUILD_DIR OR CPACK_BUILD_DIR STREQUAL "")
4+
message(FATAL_ERROR "CPACK_BUILD_DIR must point to the CPack build directory")
5+
endif()
6+
7+
if(NOT DEFINED CPACK_BUILD_CONFIG OR CPACK_BUILD_CONFIG STREQUAL "")
8+
set(CPACK_BUILD_CONFIG "Release")
9+
endif()
10+
11+
set(_cpack_config "${CPACK_BUILD_DIR}/CPackConfig.cmake")
12+
if(NOT EXISTS "${_cpack_config}")
13+
message(FATAL_ERROR "Could not find CPack configuration file at ${_cpack_config}")
14+
endif()
15+
16+
include("${_cpack_config}")
17+
18+
if(NOT DEFINED CPACK_COMPONENTS_ALL OR CPACK_COMPONENTS_ALL STREQUAL "")
19+
message(FATAL_ERROR "No components configured for packaging")
20+
endif()
21+
22+
if(NOT DEFINED CPACK_PACKAGE_FILE_NAME OR CPACK_PACKAGE_FILE_NAME STREQUAL "")
23+
message(FATAL_ERROR "CPACK_PACKAGE_FILE_NAME is empty")
24+
endif()
25+
26+
set(_cpack_executable "cpack")
27+
if(DEFINED CPACK_EXECUTABLE AND NOT CPACK_EXECUTABLE STREQUAL "")
28+
set(_cpack_executable "${CPACK_EXECUTABLE}")
29+
endif()
30+
31+
string(REGEX MATCH "^(.+)_([0-9].*)$" _matched "${CPACK_PACKAGE_FILE_NAME}")
32+
if(NOT _matched)
33+
message(FATAL_ERROR "Unexpected CPACK_PACKAGE_FILE_NAME format: ${CPACK_PACKAGE_FILE_NAME}")
34+
endif()
35+
set(_base_name "${CMAKE_MATCH_1}")
36+
set(_suffix "${CMAKE_MATCH_2}")
37+
38+
foreach(_component IN LISTS CPACK_COMPONENTS_ALL)
39+
set(_package_name "${_base_name}_${_suffix}")
40+
if(NOT _component STREQUAL "${_base_name}")
41+
string(REPLACE "${_base_name}" "${_component}" _package_name "${_package_name}")
42+
if(_package_name STREQUAL "${_base_name}_${_suffix}")
43+
set(_package_name "${_component}_${_suffix}")
44+
endif()
45+
endif()
46+
47+
message(STATUS "Generating productbuild package for component '${_component}' as '${_package_name}.pkg'")
48+
49+
execute_process(
50+
COMMAND "${_cpack_executable}" -G productbuild -C "${CPACK_BUILD_CONFIG}"
51+
-D "CPACK_COMPONENTS_ALL=${_component}"
52+
-D "CPACK_PACKAGE_FILE_NAME=${_package_name}"
53+
--config "${_cpack_config}"
54+
WORKING_DIRECTORY "${CPACK_BUILD_DIR}"
55+
RESULT_VARIABLE _result)
56+
if(NOT _result EQUAL 0)
57+
message(FATAL_ERROR "cpack failed for component ${_component} with exit code ${_result}")
58+
endif()
59+
endforeach()

0 commit comments

Comments
 (0)