Skip to content

Commit 5a3aa8e

Browse files
committed
Merge branch 'install-receipt' of github.com:sourceryinstitute/OpenCoarrays
2 parents e28f7c9 + 72eecb1 commit 5a3aa8e

File tree

2 files changed

+45
-3
lines changed

2 files changed

+45
-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: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
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 checksumed receipt for all installed assets")
5+
6+
# Set receipt install destination
7+
set(RECEIPT_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}")
8+
9+
# Mimic cmake_install.cmake's handlin of components
10+
if(CMAKE_INSTALL_COMPONENT)
11+
set(HASHED_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.SHA256.txt")
12+
else()
13+
set(HASHED_INSTALL_MANIFEST "install_manifest.SHA256.txt")
14+
endif()
15+
16+
# Clean out any old install manifest on re-installation, if it exists
17+
file(REMOVE "${CMAKE_BINARY_DIR}/${HASHED_INSTALL_MANIFEST}")
18+
19+
# Loop over files computing hashes
20+
foreach(file IN LISTS CMAKE_INSTALL_MANIFEST_FILES)
21+
file(SHA256 "${file}" _file_sha256)
22+
file(RELATIVE_PATH FILE_REL_PATH "${RECEIPT_INSTALL_DIR}" "${file}")
23+
file(APPEND "${CMAKE_BINARY_DIR}/${HASHED_INSTALL_MANIFEST}" "${_file_sha256} ${FILE_REL_PATH}\n")
24+
endforeach()
25+
file(APPEND "${CMAKE_BINARY_DIR}/${HASHED_INSTALL_MANIFEST}"
26+
"# Paths relative to \${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}\n")
27+
28+
file(INSTALL DESTINATION "${RECEIPT_INSTALL_DIR}" TYPE FILE PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ FILES
29+
"${CMAKE_BINARY_DIR}/${HASHED_INSTALL_MANIFEST}")
30+
31+
file(SHA256 "${CMAKE_BINARY_DIR}/${HASHED_INSTALL_MANIFEST}" MANIFEST_SHA256)
32+
message(STATUS
33+
"Global checksum for OpenCoarrays installation:
34+
${MANIFEST_SHA256} ${HASHED_INSTALL_MANIFEST}")
35+
message(STATUS "${PROJECT_NAME} was configured with SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH}")
36+
message(STATUS "The current environment has SOURCE_DATE_EPOCH set to: $ENV{SOURCE_DATE_EPOCH}")

0 commit comments

Comments
 (0)