File: mac-codesign.cmake

package info (click to toggle)
kid3 3.9.6-3
  • links: PTS
  • area: main
  • in suites: sid, trixie
  • size: 16,212 kB
  • sloc: cpp: 67,855; sh: 1,966; python: 1,648; ansic: 762; xml: 558; java: 164; makefile: 37
file content (90 lines) | stat: -rw-r--r-- 2,907 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
if(CMAKE_SCRIPT_MODE_FILE AND NOT CMAKE_PARENT_LIST_FILE)
  set(_pathToParent "${CMAKE_CURRENT_SOURCE_DIR}/./")
else()
  set(_pathToParent "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/./")
endif()
set(_bundleName "kid3.app")
set(_pathToBundle "${_pathToParent}/${_bundleName}")

if(NOT DEFINED ENV{SIGNING_IDENTITY})
  message(WARNING "Environment variable SIGNING_IDENTITY not set, not signing")

  # Try to sign using the KDE CI tools
  if(EXISTS $ENV{CI_PROJECT_DIR}/ci-notary-service/signmacapp.py AND
     EXISTS $ENV{CI_PROJECT_DIR}/ci-utilities/signing/signmacapp.ini)
    find_package(Python3 COMPONENTS Interpreter REQUIRED)
    set(PYTHON_EXECUTABLE "${Python3_EXECUTABLE}")
    execute_process(
      COMMAND ${PYTHON_EXECUTABLE} ci-notary-service/signmacapp.py -v
        --config ci-utilities/signing/signmacapp.ini ${_pathToBundle}
      WORKING_DIRECTORY "$ENV{CI_PROJECT_DIR}"
      RESULT_VARIABLE _result
    )
    if(NOT (${_result} EQUAL 0))
      message(WARNING "signmacapp.py ${_pathToBundle} failed with ${_result}")
    endif()
  endif()

  return()
endif()

set(SIGNING_IDENTITY $ENV{SIGNING_IDENTITY})
set(CODESIGN codesign --force --sign "${SIGNING_IDENTITY}" --options=runtime)

execute_process(
  COMMAND xcrun -f codesign_allocate
  OUTPUT_STRIP_TRAILING_WHITESPACE
  OUTPUT_VARIABLE CODESIGN_ALLOCATE
)

execute_process(
  COMMAND find "${_bundleName}/Contents/PlugIns" -type f -d -print
  WORKING_DIRECTORY "${_pathToParent}"
  OUTPUT_VARIABLE _pluginFilesToSign
)

execute_process(
  COMMAND find "${_bundleName}" \( -name "*.framework" -or -name "*.dylib" \) -d -print
  WORKING_DIRECTORY "${_pathToParent}"
  OUTPUT_VARIABLE _libFilesToSign
)

string(STRIP ${_pluginFilesToSign} _pluginFilesToSign)
string(STRIP ${_libFilesToSign} _libFilesToSign)
string(REPLACE "\n" ";" _pluginFilesToSign ${_pluginFilesToSign})
string(REPLACE "\n" ";" _libFilesToSign ${_libFilesToSign})
set(_filesToSign ${_pluginFilesToSign} ${_libFilesToSign})
list(APPEND _filesToSign
  "${_bundleName}/Contents/MacOS/kid3"
  "${_bundleName}/Contents/MacOS/kid3-cli"
  "${_bundleName}"
)
list(REMOVE_DUPLICATES _filesToSign)

message(STATUS "Signing ${_bundleName}")
foreach(_fileToSign ${_filesToSign})
  execute_process(
    COMMAND cmake -E env CODESIGN_ALLOCATE=${CODESIGN_ALLOCATE} ${CODESIGN} "${_fileToSign}"
    WORKING_DIRECTORY "${_pathToParent}"
    RESULT_VARIABLE _result
  )
  if(NOT (${_result} EQUAL 0))
    message(WARNING "Could not sign file '${_fileToSign}'")
  endif()
endforeach()

execute_process(
  COMMAND codesign --verify "${_pathToParent}/${_bundleName}"
  RESULT_VARIABLE _result
)
if(NOT ${_result} EQUAL 0)
  message(FATAL_ERROR "Signature verification failed")
endif()

execute_process(
  COMMAND spctl --assess --type execute "${_pathToParent}/${_bundleName}"
  RESULT_VARIABLE _result
)
if(NOT ${_result} EQUAL 0)
  message(WARNING "Signature assessment failed")
endif()