A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
at master 219 lines 10 kB view raw
1# 2# __________ __ ___. 3# Open \______ \ ____ ____ | | _\_ |__ _______ ___ 4# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / 5# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < 6# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ 7# \/ \/ \/ \/ \/ 8# 9# All files in this archive are subject to the GNU General Public License. 10# See the file COPYING in the source tree root for full license agreement. 11# 12# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 13# KIND, either express or implied. 14# 15 16# include this file to 17# - get a new target "deploy" 18# - get a function "deploy_qt()" which will add a deploy target that creates a 19# zip / AppImage / dmg and depends on "deploy". 20 21if(NOT have_deploy) 22 add_custom_target(deploy) 23 set(have_deploy ON) 24endif() 25 26# Linux: Build AppImage 27if(CMAKE_SYSTEM_NAME STREQUAL "Linux") 28 set(LINUXDEPLOY ${CMAKE_BINARY_DIR}/linuxdeploy-x86_64.AppImage) 29 set(LINUXDEPLOYQT ${CMAKE_BINARY_DIR}/linuxdeploy-plugin-qt-x86_64.AppImage) 30 add_custom_command( 31 COMMENT "Downloading linuxdeploy" 32 OUTPUT ${LINUXDEPLOY} 33 ${LINUXDEPLOYQT} 34 COMMAND ${CMAKE_COMMAND} 35 -DOUTDIR=${CMAKE_BINARY_DIR} 36 -DURL=https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage 37 -P ${CMAKE_CURRENT_LIST_DIR}/download.cmake 38 COMMAND ${CMAKE_COMMAND} 39 -DOUTDIR=${CMAKE_BINARY_DIR} 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 42 ) 43 # intermediate target needed to be able to get back to the actual file dependency. 44 add_custom_target(linuxdeploy DEPENDS ${LINUXDEPLOY}) 45 46 function(deploy_qt) 47 cmake_parse_arguments(deploy "" 48 "TARGET;DESKTOPFILE;ICONFILE;QTBINDIR;DMGBUILDCFG" 49 "EXECUTABLES" 50 ${ARGN}) 51 if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") 52 message(WARNING "Deploying a Debug build.") 53 endif() 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 77 add_custom_command( 78 OUTPUT ${CMAKE_BINARY_DIR}/${deploy_TARGET}.AppImage 79 COMMENT "Creating AppImage ${deploy_TARGET}" 80 COMMAND OUTPUT=${CMAKE_BINARY_DIR}/${deploy_TARGET}.AppImage 81 ${LINUXDEPLOY} 82 --plugin qt 83 --icon-file=${deploy_ICONFILE} 84 --desktop-file=${deploy_DESKTOPFILE} 85 --executable=$<TARGET_FILE:${deploy_TARGET}> 86 --appdir=${CMAKE_BINARY_DIR}/AppImage-${deploy_TARGET} 87 --output=appimage 88 --verbosity=2 89 DEPENDS ${deploy_TARGET} ${_deploy_deps} linuxdeploy 90 ) 91 add_dependencies(deploy deploy_${deploy_TARGET}) 92 endfunction() 93endif() 94 95# MacOS: Build dmg 96if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") 97 function(deploy_qt) 98 cmake_parse_arguments(deploy "" 99 "TARGET;DESKTOPFILE;ICONFILE;QTBINDIR;DMGBUILDCFG" 100 "EXECUTABLES" 101 ${ARGN}) 102 if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") 103 message(WARNING "Deploying a Debug build.") 104 endif() 105 set(DMGBUILD ${CMAKE_BINARY_DIR}/venv/bin/python3 -m dmgbuild) 106 set(DMGBUILD_STAMP ${CMAKE_BINARY_DIR}/dmgbuild.stamp) 107 find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${QTBINDIR}") 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 128 add_custom_command( 129 COMMENT "Setting up dmgbuild virtualenv" 130 OUTPUT ${DMGBUILD_STAMP} 131 COMMAND python3 -m venv ${CMAKE_BINARY_DIR}/venv 132 COMMAND ${CMAKE_BINARY_DIR}/venv/bin/python -m pip install -q dmgbuild 133 ) 134 135 add_custom_command( 136 # TODO: find a better way to figure the app bundle name. 137 OUTPUT ${CMAKE_BINARY_DIR}/${deploy_TARGET}.dmg 138 COMMENT "Running macdeployqt and creating dmg ${deploy_TARGET}" 139 COMMAND ${MACDEPLOYQT_EXECUTABLE} ${deploy_TARGET}.app 140 COMMAND ${DMGBUILD} -s ${deploy_DMGBUILDCFG} 141 -Dappbundle=${deploy_TARGET}.app 142 ${deploy_TARGET} ${CMAKE_BINARY_DIR}/${deploy_TARGET}.dmg 143 DEPENDS ${deploy_TARGET} 144 ${DMGBUILD_STAMP} 145 ${_deploy_deps} 146 ) 147 add_custom_target(deploy_${deploy_TARGET} 148 DEPENDS ${CMAKE_BINARY_DIR}/${deploy_TARGET}.dmg) 149 add_dependencies(deploy deploy_${deploy_TARGET}) 150 endfunction() 151endif() 152 153# Windows. Copy to dist folder, run windeployqt on the binary, compress to zip. 154if(CMAKE_SYSTEM_NAME STREQUAL "Windows") 155 function(deploy_qt) 156 cmake_parse_arguments(deploy "" 157 "TARGET;DESKTOPFILE;ICONFILE;QTBINDIR;DMGBUILDCFG" 158 "EXECUTABLES" 159 ${ARGN}) 160 if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") 161 message(WARNING "Deploying a Debug build.") 162 endif() 163 find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${QTBINDIR}") 164 set(deploydir ${CMAKE_BINARY_DIR}/deploy-${deploy_TARGET}) 165 if(WINDEPLOYQT_EXECUTABLE) 166 add_custom_command( 167 COMMENT "Creating deploy folder and running windeployqt" 168 OUTPUT ${deploydir}/${deploy_TARGET} 169 COMMAND ${CMAKE_COMMAND} -E make_directory ${deploydir} 170 COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${deploy_TARGET}> ${deploydir} 171 COMMAND ${WINDEPLOYQT_EXECUTABLE} 172 # on MinGW, release is mistaken as debug for Qt less than 5.14. 173 # For later versions the opposite is true: adding --debug or 174 # --release will fail with "platform plugin not found." 175 $<IF:$<VERSION_LESS:${Qt${QT_VERSION_MAJOR}Core_VERSION},5.14.0>,$<IF:$<CONFIG:Debug>,--debug,--release>,> 176 ${deploydir}/$<TARGET_FILE_NAME:${deploy_TARGET}> 177 DEPENDS ${deploy_TARGET} 178 ) 179 else() 180 add_custom_command( 181 COMMENT "Creating deploy folder" 182 OUTPUT ${deploydir}/${deploy_TARGET} 183 COMMAND ${CMAKE_COMMAND} -E make_directory ${deploydir} 184 COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${deploy_TARGET}> ${deploydir} 185 DEPENDS ${deploy_TARGET} 186 ) 187 endif() 188 # need extra rules so we can use generator expressions 189 # (using get_target_property() doesn't know neede values during generation) 190 set(_deploy_deps "") 191 foreach(_deploy_exe_tgt ${deploy_EXECUTABLES}) 192 add_custom_command( 193 OUTPUT ${CMAKE_BINARY_DIR}/${_deploy_exe_tgt}.app.stamp 194 COMMENT "Copying ${_deploy_exe_tgt} to deploy folder" 195 COMMAND ${CMAKE_COMMAND} -E make_directory ${deploydir} 196 COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${_deploy_exe_tgt}> ${deploydir} 197 COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/${_deploy_exe_tgt}.app.stamp 198 DEPENDS ${_deploy_exe_tgt} 199 ) 200 add_custom_target(deploy_${deploy_TARGET}_${_deploy_exe_tgt} 201 DEPENDS ${CMAKE_BINARY_DIR}/${_deploy_exe_tgt}.app.stamp) 202 203 set(_deploy_deps "${_deploy_deps};deploy_${deploy_TARGET}_${_deploy_exe_tgt}") 204 endforeach() 205 add_custom_command( 206 COMMENT "Compressing to zip" 207 OUTPUT ${CMAKE_BINARY_DIR}/${deploy_TARGET}.zip 208 WORKING_DIRECTORY ${deploydir} 209 COMMAND ${CMAKE_COMMAND} -E tar c ${CMAKE_BINARY_DIR}/${deploy_TARGET}.zip 210 --format=zip . 211 DEPENDS ${deploydir}/${deploy_TARGET} ${_deploy_deps} 212 ) 213 214 add_custom_target(deploy_${deploy_TARGET} 215 DEPENDS ${CMAKE_BINARY_DIR}/${deploy_TARGET}.zip) 216 add_dependencies(deploy deploy_${deploy_TARGET}) 217 endfunction() 218endif() 219