AusweisApp2/cmake/SignFiles.cmake.in

64 lines
1.5 KiB
CMake

CMAKE_MINIMUM_REQUIRED(VERSION 3.1.0)
FUNCTION(IS_SIGNED _result _file)
EXECUTE_PROCESS(COMMAND "@SIGNTOOL_CMD@" verify /pa ${file}
OUTPUT_VARIABLE _output
ERROR_QUIET
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}")
IF("${_output}" MATCHES "Successfully verified: ")
SET(${_result} TRUE PARENT_SCOPE)
ELSE()
SET(${_result} FALSE PARENT_SCOPE)
ENDIF()
ENDFUNCTION()
FUNCTION(CREATE_PARAMETER _output_param _output_remain _input)
SET(param)
SET(remain)
FOREACH(file ${_input})
UNSET(signed)
IS_SIGNED(signed "${file}")
IF(signed)
MESSAGE(STATUS "File is already signed: ${file}")
CONTINUE()
ENDIF()
# Avoid max parameter length
# Windows has a limit of 8191
STRING(LENGTH "${param} ${file}" len)
IF(len LESS 7500)
LIST(APPEND param ${file})
ELSE()
LIST(APPEND remain ${file})
ENDIF()
ENDFOREACH()
SET(${_output_param} ${param} PARENT_SCOPE)
SET(${_output_remain} ${remain} PARENT_SCOPE)
ENDFUNCTION()
SET(FILE_EXTENSIONS *.dll ${SIGN_EXT})
MESSAGE(STATUS "Sign files in directory: ${CMAKE_BINARY_DIR}")
MESSAGE(STATUS "Sign file extensions: ${FILE_EXTENSIONS}")
FILE(GLOB_RECURSE FILES RELATIVE "${CMAKE_BINARY_DIR}" ${FILE_EXTENSIONS})
MESSAGE(STATUS "Sign files: ${FILES}")
WHILE(FILES)
CREATE_PARAMETER(param remain "${FILES}")
IF(param)
MESSAGE(STATUS "Call signtool with files: ${param}")
EXECUTE_PROCESS(COMMAND "@SIGNTOOL_CMD@" @SIGNTOOL_PARAMS@ ${param} WORKING_DIRECTORY "${CMAKE_BINARY_DIR}")
ELSE()
MESSAGE(WARNING "Every file is already signed")
BREAK()
ENDIF()
SET(FILES ${remain})
ENDWHILE()