summaryrefslogtreecommitdiff
path: root/utils/cmake/deploy.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'utils/cmake/deploy.cmake')
-rw-r--r--utils/cmake/deploy.cmake153
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()
68endif() 93endif()
69 94
70# MacOS: Build dmg 95# MacOS: Build dmg
71if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") 96if(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()
102endif() 151endif()
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.
105if(CMAKE_SYSTEM_NAME STREQUAL "Windows") 154if(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()
146endif() 215endif()
147 216