64 lines
1.5 KiB
CMake
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()
|