Skip to content

Commit f78c971

Browse files
committed
Install receipt with SHA256 checksums
- This will be great for making it easier to: - Uninstall the package, ensuring that the files are not custom modifications - Verify reproducible builds
1 parent 9401589 commit f78c971

File tree

2 files changed

+38
-3
lines changed

2 files changed

+38
-3
lines changed

CMakeLists.txt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ cmake_minimum_required(VERSION 3.10)
22

33
cmake_policy(VERSION 3.10...3.14)
44

5+
if(DEFINED ENV{SOURCE_DATE_EPOCH})
6+
set(SOURCE_DATE_EPOCH "$ENV{SOURCE_DATE_EPOCH}")
7+
endif()
8+
59
set(CMAKE_SKIP_RPATH ON
610
CACHE BOOL "Don't add a build-dir rpath")
711
set(CMAKE_BUILD_WITH_INSTALL_RPATH ON
@@ -941,6 +945,8 @@ foreach(SCRIPT ${TRAVIS_SCRIPTS})
941945
endif()
942946
endforeach()
943947

944-
install(FILES "${CMAKE_BINARY_DIR}/sha256_install_manifest.txt"
945-
DESTINATION "${CMAKE_INSTALL_DATADIR}/opencoarrays"
946-
OPTIONAL)
948+
# Create and install a manifest of installed files, and another containing their sha256 hashes
949+
foreach(VAR CMAKE_BINARY_DIR CMAKE_INSTALL_DATADIR PROJECT_NAME SOURCE_DATE_EPOCH)
950+
install(CODE "set(${VAR} \"${${VAR}}\")")
951+
endforeach()
952+
install(SCRIPT "${CMAKE_CURRENT_LIST_DIR}/cmake/InstallFileManifest.cmake")

cmake/InstallFileManifest.cmake

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# This script will create and install an install manifest, including SHA256 hashes of each installed file
2+
# Variables passed from CMake must be set with `install(CODE "set(...)")`
3+
4+
message(STATUS "Generating SHA256 checksums for all installed assets")
5+
6+
# Mimic cmake_install.cmake's handlin of components
7+
if(CMAKE_INSTALL_COMPONENT)
8+
set(HASHED_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.SHA256.txt")
9+
else()
10+
set(HASHED_INSTALL_MANIFEST "install_manifest.SHA256.txt")
11+
endif()
12+
13+
# Clean out any old install manifest on re-installation, if it exists
14+
file(REMOVE "${CMAKE_BINARY_DIR}/${HASHED_INSTALL_MANIFEST}")
15+
16+
# Loop over files computing hashes
17+
foreach(file IN LISTS CMAKE_INSTALL_MANIFEST_FILES)
18+
file(SHA256 "${file}" _file_sha256)
19+
file(APPEND "${CMAKE_BINARY_DIR}/${HASHED_INSTALL_MANIFEST}" "${_file_sha256} ${file}\n")
20+
endforeach()
21+
22+
file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}" TYPE FILE PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ FILES
23+
"${CMAKE_BINARY_DIR}/${HASHED_INSTALL_MANIFEST}")
24+
25+
file(SHA256 "${CMAKE_BINARY_DIR}/${HASHED_INSTALL_MANIFEST}" MANIFEST_SHA256)
26+
message(STATUS
27+
"Global checksum for OpenCoarrays installation:\n${MANIFEST_SHA256} ${HASHED_INSTALL_MANIFEST}")
28+
message(STATUS "${PROJECT_NAME} was configured with SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH}")
29+
message(STATUS "The current environment has SOURCE_DATE_EPOCH set to: $ENV{SOURCE_DATE_EPOCH}")

0 commit comments

Comments
 (0)