mariadb/cmake/sign.cmake.in
2022-08-09 18:41:09 +03:00

36 lines
1.2 KiB
CMake

# If timestamping is used, it can (rarely) fail, when public timestamping service has issues.
#
# To handle the error gracefully and transparently, we'll retry the signtool command,
# second time without "/t URL" parameter
SET(SIGNTOOL_PARAMETERS_NO_TIMESTAMP "@SIGNTOOL_PARAMETERS@")
LIST(FIND SIGNTOOL_PARAMETERS_NO_TIMESTAMP /t idx)
IF(NOT(idx EQUAL -1))
LIST(REMOVE_AT SIGNTOOL_PARAMETERS_NO_TIMESTAMP ${idx})
#remove the URL following /t , as well
LIST(REMOVE_AT SIGNTOOL_PARAMETERS_NO_TIMESTAMP ${idx})
ENDIF()
GET_FILENAME_COMPONENT(SIGNTOOL_DIR "@SIGNTOOL_EXECUTABLE@" DIRECTORY)
GET_FILENAME_COMPONENT(SIGNTOOL_NAME "@SIGNTOOL_EXECUTABLE@" NAME)
FILE(GLOB_RECURSE files "@CMAKE_BINARY_DIR@/*.signme")
MESSAGE(STATUS "signing files")
FOREACH(f ${files})
STRING(REPLACE ".signme" "" exe_location "${f}")
string (REPLACE ";" " " params "@SIGNTOOL_PARAMETERS@")
EXECUTE_PROCESS(COMMAND
cmd /c "${SIGNTOOL_NAME}" sign @SIGNTOOL_PARAMETERS@ "${exe_location}" 2>NUL
|| "${SIGNTOOL_NAME}" sign ${SIGNTOOL_PARAMETERS_NO_TIMESTAMP} "${exe_location}"
WORKING_DIRECTORY ${SIGNTOOL_DIR}
RESULT_VARIABLE ERR)
IF(NOT ${ERR} EQUAL 0)
MESSAGE( "Error ${ERR} signing ${exe_location}")
ELSE()
FILE(REMOVE ${f})
ENDIF()
ENDFOREACH()