diff options
Diffstat (limited to 'utils/cmake/deploy.cmake')
-rw-r--r-- | utils/cmake/deploy.cmake | 153 |
1 files changed, 111 insertions, 42 deletions
diff --git a/utils/cmake/deploy.cmake b/utils/cmake/deploy.cmake index 4a43c033fa..95c384bcef 100644 --- a/utils/cmake/deploy.cmake +++ b/utils/cmake/deploy.cmake | |||
@@ -39,37 +39,66 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux") | |||
39 | -DOUTDIR=${CMAKE_BINARY_DIR} | 39 | -DOUTDIR=${CMAKE_BINARY_DIR} |
40 | -DURL=https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage | 40 | -DURL=https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage |
41 | -P ${CMAKE_CURRENT_LIST_DIR}/download.cmake | 41 | -P ${CMAKE_CURRENT_LIST_DIR}/download.cmake |
42 | ) | 42 | ) |
43 | # intermediate target needed to be able to get back to the actual file dependency. | 43 | # intermediate target needed to be able to get back to the actual file dependency. |
44 | add_custom_target(linuxdeploy DEPENDS ${LINUXDEPLOY}) | 44 | add_custom_target(linuxdeploy DEPENDS ${LINUXDEPLOY}) |
45 | function(deploy_qt target qtbindir iconfile desktopfile dmgbuildcfg) | 45 | |
46 | function(deploy_qt) | ||
47 | cmake_parse_arguments(deploy "" | ||
48 | "TARGET;DESKTOPFILE;ICONFILE;QTBINDIR;DMGBUILDCFG" | ||
49 | "EXECUTABLES" | ||
50 | ${ARGN}) | ||
46 | if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") | 51 | if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") |
47 | message(WARNING "Deploying a Debug build.") | 52 | message(WARNING "Deploying a Debug build.") |
48 | endif() | 53 | endif() |
49 | 54 | ||
55 | add_custom_target(deploy_${deploy_TARGET} | ||
56 | DEPENDS ${CMAKE_BINARY_DIR}/${deploy_TARGET}.AppImage) | ||
57 | |||
58 | # need extra rules so we can use generator expressions | ||
59 | # (using get_target_property() doesn't know neede values during generation) | ||
60 | set(_deploy_deps "") | ||
61 | foreach(_deploy_exe_tgt ${deploy_EXECUTABLES}) | ||
62 | add_custom_command( | ||
63 | OUTPUT ${CMAKE_BINARY_DIR}/${_deploy_exe_tgt}.appimage.stamp | ||
64 | COMMENT "Copying ${_deploy_exe_tgt} to AppImage" | ||
65 | COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/AppImage-${deploy_TARGET}/usr/bin | ||
66 | COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${_deploy_exe_tgt}> | ||
67 | ${CMAKE_BINARY_DIR}/AppImage-${deploy_TARGET}/usr/bin | ||
68 | COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/${_deploy_exe_tgt}.appimage.stamp | ||
69 | DEPENDS ${_deploy_exe_tgt} | ||
70 | ) | ||
71 | add_custom_target(deploy_${deploy_TARGET}_${_deploy_exe_tgt} | ||
72 | DEPENDS ${CMAKE_BINARY_DIR}/${_deploy_exe_tgt}.appimage.stamp) | ||
73 | |||
74 | set(_deploy_deps "${_deploy_deps};deploy_${deploy_TARGET}_${_deploy_exe_tgt}") | ||
75 | endforeach() | ||
76 | |||
50 | add_custom_command( | 77 | add_custom_command( |
51 | OUTPUT ${CMAKE_BINARY_DIR}/${target}.AppImage | 78 | OUTPUT ${CMAKE_BINARY_DIR}/${deploy_TARGET}.AppImage |
52 | COMMENT "Creating AppImage ${target}" | 79 | COMMENT "Creating AppImage ${deploy_TARGET}" |
53 | COMMAND OUTPUT=${CMAKE_BINARY_DIR}/${target}.AppImage | 80 | COMMAND OUTPUT=${CMAKE_BINARY_DIR}/${deploy_TARGET}.AppImage |
54 | ${LINUXDEPLOY} | 81 | ${LINUXDEPLOY} |
55 | --plugin qt | 82 | --plugin qt |
56 | --icon-file=${iconfile} | 83 | --icon-file=${deploy_ICONFILE} |
57 | --desktop-file=${desktopfile} | 84 | --desktop-file=${deploy_DESKTOPFILE} |
58 | --executable=$<TARGET_FILE:${target}> | 85 | --executable=$<TARGET_FILE:${deploy_TARGET}> |
59 | --appdir=AppImage-${target} | 86 | --appdir=${CMAKE_BINARY_DIR}/AppImage-${deploy_TARGET} |
60 | --output=appimage | 87 | --output=appimage |
61 | --verbosity=2 | 88 | --verbosity=2 |
62 | DEPENDS ${target} linuxdeploy | 89 | DEPENDS ${deploy_TARGET} ${_deploy_deps} linuxdeploy |
63 | ) | 90 | ) |
64 | add_custom_target(deploy_${target} | 91 | add_dependencies(deploy deploy_${deploy_TARGET}) |
65 | DEPENDS ${CMAKE_BINARY_DIR}/${target}.AppImage) | ||
66 | add_dependencies(deploy deploy_${target}) | ||
67 | endfunction() | 92 | endfunction() |
68 | endif() | 93 | endif() |
69 | 94 | ||
70 | # MacOS: Build dmg | 95 | # MacOS: Build dmg |
71 | if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") | 96 | if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") |
72 | function(deploy_qt target qtbindir iconfile desktopfile dmgbuildcfg) | 97 | function(deploy_qt) |
98 | cmake_parse_arguments(deploy "" | ||
99 | "TARGET;DESKTOPFILE;ICONFILE;QTBINDIR;DMGBUILDCFG" | ||
100 | "EXECUTABLES" | ||
101 | ${ARGN}) | ||
73 | if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") | 102 | if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") |
74 | message(WARNING "Deploying a Debug build.") | 103 | message(WARNING "Deploying a Debug build.") |
75 | endif() | 104 | endif() |
@@ -77,6 +106,25 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") | |||
77 | set(DMGBUILD_STAMP ${CMAKE_BINARY_DIR}/dmgbuild.stamp) | 106 | set(DMGBUILD_STAMP ${CMAKE_BINARY_DIR}/dmgbuild.stamp) |
78 | find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${qtbindir}") | 107 | find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${qtbindir}") |
79 | 108 | ||
109 | # need extra rules so we can use generator expressions | ||
110 | # (using get_target_property() doesn't know neede values during generation) | ||
111 | set(_deploy_deps "") | ||
112 | foreach(_deploy_exe_tgt ${deploy_EXECUTABLES}) | ||
113 | add_custom_command( | ||
114 | OUTPUT ${CMAKE_BINARY_DIR}/${_deploy_exe_tgt}.app.stamp | ||
115 | COMMENT "Copying ${_deploy_exe_tgt} to App" | ||
116 | COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_BUNDLE_CONTENT_DIR:${deploy_TARGET}>/bin | ||
117 | COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${_deploy_exe_tgt}> | ||
118 | $<TARGET_BUNDLE_CONTENT_DIR:${deploy_TARGET}>/bin | ||
119 | COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/${_deploy_exe_tgt}.app.stamp | ||
120 | DEPENDS ${_deploy_exe_tgt} | ||
121 | ) | ||
122 | add_custom_target(deploy_${deploy_TARGET}_${_deploy_exe_tgt} | ||
123 | DEPENDS ${CMAKE_BINARY_DIR}/${_deploy_exe_tgt}.app.stamp) | ||
124 | |||
125 | set(_deploy_deps "${_deploy_deps};deploy_${deploy_TARGET}_${_deploy_exe_tgt}") | ||
126 | endforeach() | ||
127 | |||
80 | add_custom_command( | 128 | add_custom_command( |
81 | COMMENT "Setting up dmgbuild virtualenv" | 129 | COMMENT "Setting up dmgbuild virtualenv" |
82 | OUTPUT ${DMGBUILD_STAMP} | 130 | OUTPUT ${DMGBUILD_STAMP} |
@@ -86,62 +134,83 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") | |||
86 | 134 | ||
87 | add_custom_command( | 135 | add_custom_command( |
88 | # TODO: find a better way to figure the app bundle name. | 136 | # TODO: find a better way to figure the app bundle name. |
89 | OUTPUT ${CMAKE_BINARY_DIR}/${target}.dmg | 137 | OUTPUT ${CMAKE_BINARY_DIR}/${deploy_TARGET}.dmg |
90 | COMMENT "Running macdeployqt and creating dmg ${target}" | 138 | COMMENT "Running macdeployqt and creating dmg ${deploy_TARGET}" |
91 | COMMAND ${MACDEPLOYQT_EXECUTABLE} ${target}.app | 139 | COMMAND ${MACDEPLOYQT_EXECUTABLE} ${deploy_TARGET}.app |
92 | COMMAND ${DMGBUILD} -s ${dmgbuildcfg} | 140 | COMMAND ${DMGBUILD} -s ${deploy_DMGBUILDCFG} |
93 | -Dappbundle=${target}.app | 141 | -Dappbundle=${deploy_TARGET}.app |
94 | ${target} ${CMAKE_BINARY_DIR}/${target}.dmg | 142 | ${deploy_TARGET} ${CMAKE_BINARY_DIR}/${deploy_TARGET}.dmg |
95 | DEPENDS ${target} | 143 | DEPENDS ${deploy_TARGET} |
96 | ${DMGBUILD_STAMP} | 144 | ${DMGBUILD_STAMP} |
145 | ${_deploy_deps} | ||
97 | ) | 146 | ) |
98 | add_custom_target(deploy_${target} | 147 | add_custom_target(deploy_${deploy_TARGET} |
99 | DEPENDS ${CMAKE_BINARY_DIR}/${target}.dmg) | 148 | DEPENDS ${CMAKE_BINARY_DIR}/${deploy_TARGET}.dmg) |
100 | add_dependencies(deploy deploy_${target}) | 149 | add_dependencies(deploy deploy_${deploy_TARGET}) |
101 | endfunction() | 150 | endfunction() |
102 | endif() | 151 | endif() |
103 | 152 | ||
104 | # Windows. Copy to dist folder, run windeployqt on the binary, compress to zip. | 153 | # Windows. Copy to dist folder, run windeployqt on the binary, compress to zip. |
105 | if(CMAKE_SYSTEM_NAME STREQUAL "Windows") | 154 | if(CMAKE_SYSTEM_NAME STREQUAL "Windows") |
106 | function(deploy_qt target qtbindir iconfile desktopfile dmgbuildcfg) | 155 | function(deploy_qt) |
156 | cmake_parse_arguments(deploy "" | ||
157 | "TARGET;DESKTOPFILE;ICONFILE;QTBINDIR;DMGBUILDCFG" | ||
158 | "EXECUTABLES" | ||
159 | ${ARGN}) | ||
107 | if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") | 160 | if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") |
108 | message(WARNING "Deploying a Debug build.") | 161 | message(WARNING "Deploying a Debug build.") |
109 | endif() | 162 | endif() |
110 | set(_targetfile ${target}.exe) # TODO: Use property. OUTPUT_NAME seems to fail. | ||
111 | find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${qtbindir}") | 163 | find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${qtbindir}") |
112 | set(deploydir ${CMAKE_BINARY_DIR}/deploy-${target}) | 164 | set(deploydir ${CMAKE_BINARY_DIR}/deploy-${deploy_TARGET}) |
113 | if(WINDEPLOYQT_EXECUTABLE) | 165 | if(WINDEPLOYQT_EXECUTABLE) |
114 | add_custom_command( | 166 | add_custom_command( |
115 | COMMENT "Creating deploy folder and running windeployqt" | 167 | COMMENT "Creating deploy folder and running windeployqt" |
116 | OUTPUT ${deploydir}/${_targetfile} | 168 | OUTPUT ${deploydir}/${deploy_TARGET} |
117 | COMMAND ${CMAKE_COMMAND} -E make_directory ${deploydir} | 169 | COMMAND ${CMAKE_COMMAND} -E make_directory ${deploydir} |
118 | COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_targetfile} ${deploydir} | 170 | COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${deploy_TARGET}> ${deploydir} |
119 | COMMAND ${WINDEPLOYQT_EXECUTABLE} | 171 | COMMAND ${WINDEPLOYQT_EXECUTABLE} |
120 | $<IF:$<CONFIG:Debug>,--debug,--release> # on MinGW, release is mistaken as debug. | 172 | $<IF:$<CONFIG:Debug>,--debug,--release> # on MinGW, release is mistaken as debug. |
121 | ${deploydir}/${_targetfile} | 173 | ${deploydir}/$<TARGET_FILE:${deploy_TARGET}> |
122 | DEPENDS ${target} | 174 | DEPENDS ${deploy_TARGET} |
123 | ) | 175 | ) |
124 | else() | 176 | else() |
125 | add_custom_command( | 177 | add_custom_command( |
126 | COMMENT "Creating deploy folder" | 178 | COMMENT "Creating deploy folder" |
127 | OUTPUT ${deploydir}/${_targetfile} | 179 | OUTPUT ${deploydir}/${deploy_TARGET} |
128 | COMMAND ${CMAKE_COMMAND} -E make_directory ${deploydir} | 180 | COMMAND ${CMAKE_COMMAND} -E make_directory ${deploydir} |
129 | COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_targetfile} ${deploydir} | 181 | COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${deploy_TARGET}> ${deploydir} |
130 | DEPENDS ${target} | 182 | DEPENDS ${deploy_TARGET} |
131 | ) | 183 | ) |
132 | endif() | 184 | endif() |
185 | # need extra rules so we can use generator expressions | ||
186 | # (using get_target_property() doesn't know neede values during generation) | ||
187 | set(_deploy_deps "") | ||
188 | foreach(_deploy_exe_tgt ${deploy_EXECUTABLES}) | ||
189 | add_custom_command( | ||
190 | OUTPUT ${CMAKE_BINARY_DIR}/${_deploy_exe_tgt}.app.stamp | ||
191 | COMMENT "Copying ${_deploy_exe_tgt} to deploy folder" | ||
192 | COMMAND ${CMAKE_COMMAND} -E make_directory ${deploydir} | ||
193 | COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${_deploy_exe_tgt}> ${deploydir} | ||
194 | COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/${_deploy_exe_tgt}.app.stamp | ||
195 | DEPENDS ${_deploy_exe_tgt} | ||
196 | ) | ||
197 | add_custom_target(deploy_${deploy_TARGET}_${_deploy_exe_tgt} | ||
198 | DEPENDS ${CMAKE_BINARY_DIR}/${_deploy_exe_tgt}.app.stamp) | ||
199 | |||
200 | set(_deploy_deps "${_deploy_deps};deploy_${deploy_TARGET}_${_deploy_exe_tgt}") | ||
201 | endforeach() | ||
133 | add_custom_command( | 202 | add_custom_command( |
134 | COMMENT "Compressing to zip" | 203 | COMMENT "Compressing to zip" |
135 | OUTPUT ${CMAKE_BINARY_DIR}/${target}.zip | 204 | OUTPUT ${CMAKE_BINARY_DIR}/${deploy_TARGET}.zip |
136 | WORKING_DIRECTORY ${deploydir} | 205 | WORKING_DIRECTORY ${deploydir} |
137 | COMMAND ${CMAKE_COMMAND} -E tar c ${CMAKE_BINARY_DIR}/${target}.zip | 206 | COMMAND ${CMAKE_COMMAND} -E tar c ${CMAKE_BINARY_DIR}/${deploy_TARGET}.zip |
138 | --format=zip . | 207 | --format=zip . |
139 | DEPENDS ${deploydir}/${_targetfile} | 208 | DEPENDS ${deploydir}/${deploy_TARGET} ${_deploy_deps} |
140 | ) | 209 | ) |
141 | 210 | ||
142 | add_custom_target(deploy_${target} | 211 | add_custom_target(deploy_${deploy_TARGET} |
143 | DEPENDS ${CMAKE_BINARY_DIR}/${target}.zip) | 212 | DEPENDS ${CMAKE_BINARY_DIR}/${deploy_TARGET}.zip) |
144 | add_dependencies(deploy deploy_${target}) | 213 | add_dependencies(deploy deploy_${deploy_TARGET}) |
145 | endfunction() | 214 | endfunction() |
146 | endif() | 215 | endif() |
147 | 216 | ||