diff --git a/cmake/DeployMacros.cmake b/cmake/DeployMacros.cmake index 8ddd72f5..0c1d1b77 100644 --- a/cmake/DeployMacros.cmake +++ b/cmake/DeployMacros.cmake @@ -73,7 +73,8 @@ deploy_target( [DEPLOY_DIR ] [DESTINATION ] [RESOURCES [ ...] ] [PLUGINS [ ...] ] [FILES [ ...] ] - [OPTIONS ...] [VERBOSE] [ZIP_NO_DMG] [DEB_USR_DIR]) + [OPTIONS ...] [VERBOSE] [ZIP_NO_DMG] + [DEB_USR_DIR] [DEB_ADD_SERVICE]) Create make target "deploy_", depends on target "deploy". On this target create release package, containing all dependencies: @@ -119,6 +120,13 @@ depends on target platform DEPLOY_ADD_LIBPATH variable used as additional library search path +If DEB_ADD_SERVICE then -service.deb package will be created. +This package use contents of CMAKE_CURRENT_SOURCE_DIR/debian-service directory: + * CMAKE_CURRENT_SOURCE_DIR/debian-service/DEBIAN/ + * CMAKE_CURRENT_SOURCE_DIR/debian-service/*.service +.service file placed in /opt/COMPANY/target, you should copy it to system with script +You can use "postinst,postrm,preinst,prerm,config" files to configure service + ]] @@ -550,8 +558,9 @@ macro(deploy_target _T) set(_OPTIONS) set(_ZIP_DMG 1) set(_DEB_OPT 1) + set(_DEB_SERVICE 0) set(_cur_arg) - set(__args "DESTINATION;DEPLOY_DIR;RESOURCES;PLUGINS;FILES;OPTIONS;VERBOSE;ZIP_NO_DMG;DEB_USR_DIR") + set(__args "DESTINATION;DEPLOY_DIR;RESOURCES;PLUGINS;FILES;OPTIONS;VERBOSE;ZIP_NO_DMG;DEB_USR_DIR;DEB_ADD_SERVICE") foreach(_i ${ARGN}) if (_i IN_LIST __args) set(_cur_arg "${_i}") @@ -562,6 +571,8 @@ macro(deploy_target _T) set(_ZIP_DMG 0) elseif("${_cur_arg}" STREQUAL "DEB_USR_DIR") set(_DEB_OPT 0) + elseif("${_cur_arg}" STREQUAL "DEB_ADD_SERVICE") + set(_DEB_SERVICE 1) endif() elseif ("${_cur_arg}" STREQUAL "DESTINATION") set(_cur_arg) @@ -596,7 +607,7 @@ macro(deploy_target _T) #set(_add_search_path "${_add_search_path}") #message("app depend ${_T} libpath ${_add_search_path}") set(_CMD_) - set(_has_deploy 0) + set(_deployed) if ("x${CMAKE_SYSTEM_NAME}" STREQUAL "xLinux") set(_os_id "") set(_os_ver "") @@ -689,6 +700,17 @@ macro(deploy_target _T) set(_CMD_ ${_CMD_} COMMAND mkdir ${_VERB} -p "${_AGD}/usr/bin") set(_CMD_ ${_CMD_} COMMAND ln -srf ${_VERB} "${_bin_path}/${_T}" "${_AGD}/usr/bin/${_T}") endif() + + file(GLOB _files "${CMAKE_CURRENT_SOURCE_DIR}/debian/DEBIAN/*") + foreach (_f ${_files}) + set(_CMD_ ${_CMD_} COMMAND cp ${_VERB} -f "${_f}" "${_AGD}/DEBIAN/") + endforeach() + + file(GLOB _files "${_AGD}/DEBIAN/p*inst" "${_AGD}/DEBIAN/p*rm" "${_AGD}/DEBIAN/config") + foreach (_f ${_files}) + set(_CMD_ ${_CMD_} COMMAND chmod 0755 ${_VERB} "${_f}") + endforeach() + if (NOT CMAKE_LDD) find_program(CMAKE_LDD ldd) endif() @@ -704,45 +726,99 @@ macro(deploy_target _T) set(_deb_name "${_TV}_${_TARGET_OS}_${_DEB_ARCH}.deb") #message("VER = \"${_DEBVERSION}\"") #message("DEB = \"${_deb_name}\"") + list(APPEND _CMD_ COMMAND echo "Package: ${_DEBNAME}" ${_C_echof}) + list(APPEND _CMD_ COMMAND echo "Version: ${_DEBVERSION}" ${_C_echo}) + list(APPEND _CMD_ COMMAND echo "Architecture: ${_DEB_ARCH}" ${_C_echo}) + list(APPEND _CMD_ COMMAND echo "Maintainer: ${${_T}_COMPANY} <>" ${_C_echo}) + list(APPEND _CMD_ COMMAND ${PIP_DEPLOY_TOOL} ${_OPTIONS} --prefix "Depends: " --dependencies ${_dt_opts} -a "${_DEP_LIBS_CS}" -o "${_lib_path}" ${_DEPLOY_DIR}/${_T} ${_ADD_DEPS} ${_C_echo}) + list(APPEND _CMD_ COMMAND echo "Conflicts:" ${_C_echo}) + list(APPEND _CMD_ COMMAND echo "Replaces:" ${_C_echo}) + list(APPEND _CMD_ COMMAND echo "Section: misc" ${_C_echo}) + list(APPEND _CMD_ COMMAND echo "Priority: optional" ${_C_echo}) + list(APPEND _CMD_ COMMAND echo "Description: ${${_T}_INFO}" ${_C_echo}) + + list(APPEND _CMD_ COMMAND echo "[Desktop Entry]" ${_D_echof}) + list(APPEND _CMD_ COMMAND echo "Encoding=UTF-8" ${_D_echo}) + list(APPEND _CMD_ COMMAND echo "Type=Application" ${_D_echo}) + list(APPEND _CMD_ COMMAND echo "Name=${${_T}_LABEL}" ${_D_echo}) + list(APPEND _CMD_ COMMAND echo "GenericName=${${_T}_LABEL}" ${_D_echo}) + list(APPEND _CMD_ COMMAND echo "Comment=${${_T}_INFO}" ${_D_echo}) + list(APPEND _CMD_ COMMAND echo "Exec=${_app_bin_path}/${_T}" ${_D_echo}) + list(APPEND _CMD_ COMMAND echo "Icon=${_app_ico_path}/${_ICON_NAME}" ${_D_echo}) + list(APPEND _CMD_ COMMAND echo "Terminal=false" ${_D_echo}) + list(APPEND _CMD_ COMMAND echo "StartupNotify=true" ${_D_echo}) + list(APPEND _CMD_ COMMAND echo "Categories=Utility;" ${_D_echo}) + add_custom_target(deploy_${_T} # gather deb dir COMMAND rm -rf ${_VERB} "${_AGD}" COMMAND mkdir ${_VERB} -p "${_AGD}/DEBIAN" ${_CMD_} - COMMAND echo "Package: ${_DEBNAME}" ${_C_echof} - COMMAND echo "Version: ${_DEBVERSION}" ${_C_echo} - COMMAND echo "Architecture: ${_DEB_ARCH}" ${_C_echo} - COMMAND echo "Maintainer: ${${_T}_COMPANY} <>" ${_C_echo} - COMMAND ${PIP_DEPLOY_TOOL} ${_OPTIONS} --prefix "Depends: " --dependencies ${_dt_opts} -a "${_DEP_LIBS_CS}" -o "${_lib_path}" ${_DEPLOY_DIR}/${_T} ${_ADD_DEPS} ${_C_echo} - COMMAND echo "Conflicts:" ${_C_echo} - COMMAND echo "Replaces:" ${_C_echo} - COMMAND echo "Section: misc" ${_C_echo} - COMMAND echo "Priority: optional" ${_C_echo} - COMMAND echo "Description: ${${_T}_INFO}" ${_C_echo} - - COMMAND echo "[Desktop Entry]" ${_D_echof} - COMMAND echo "Encoding=UTF-8" ${_D_echo} - COMMAND echo "Type=Application" ${_D_echo} - COMMAND echo "Name=${${_T}_LABEL}" ${_D_echo} - COMMAND echo "GenericName=${${_T}_LABEL}" ${_D_echo} - COMMAND echo "Comment=${${_T}_INFO}" ${_D_echo} - COMMAND echo "Exec=${_app_bin_path}/${_T}" ${_D_echo} - COMMAND echo "Icon=${_app_ico_path}/${_ICON_NAME}" ${_D_echo} - COMMAND echo "Terminal=false" ${_D_echo} - COMMAND echo "StartupNotify=true" ${_D_echo} - #COMMAND echo "X-KDE-StartupNotify=true" ${_D_echo} - COMMAND echo "Categories=Utility;" ${_D_echo} - #COMMAND -l "${CMAKE_LDD}" -P xcb -q ${Qt5_ROOT} -s "\"${CMAKE_PREFIX_PATH}/lib;${_add_search_path}\"" -o ${_AGD}/usr/lib -p ${_AGD}/usr/ ${_AGD}/Contents/MacOS/${_T} # generate deb - COMMAND cd ${_AGD} "&&" md5deep -rl usr opt ">" DEBIAN/md5sums + COMMAND cd ${_AGD} "&&" md5deep -rl opt usr ">" DEBIAN/md5sums COMMAND mkdir ${_VERB} -p ${_DESTINATION} COMMAND dpkg-deb -Z gzip -b ${_AGD} ${_DESTINATION}/${_deb_name} VERBATIM COMMENT "Generating ${_deb_name}" ) - set(_has_deploy 1) + set(_deployed "deploy_${_T}") + + if (_DEB_SERVICE) + set(_CMD_) + set(_DEB "${_TV}-service_deb_${_DEB_ARCH}") + set(_AGD "${_DEPLOY_DIR}/${_DEB}") + set(_C_echof ">" "${_AGD}/DEBIAN/control") + set(_C_echo ">>" "${_AGD}/DEBIAN/control") + set(_opt_path "${_AGD}/opt/${${_T}_COMPANY}/${_T}") + set(_CMD_ ${_CMD_} COMMAND mkdir ${_VERB} -p "${_opt_path}") + + file(GLOB _files "${CMAKE_CURRENT_SOURCE_DIR}/debian-service/*.service") + foreach (_f ${_files}) + set(_CMD_ ${_CMD_} COMMAND cp ${_VERB} -f "${_f}" "${_opt_path}/") + endforeach() + + file(GLOB _files "${CMAKE_CURRENT_SOURCE_DIR}/debian-service/DEBIAN/*") + foreach (_f ${_files}) + set(_CMD_ ${_CMD_} COMMAND cp ${_VERB} -f "${_f}" "${_AGD}/DEBIAN/") + endforeach() + + file(GLOB _files "${_AGD}/DEBIAN/p*inst" "${_AGD}/DEBIAN/p*rm" "${_AGD}/DEBIAN/config") + foreach (_f ${_files}) + set(_CMD_ ${_CMD_} COMMAND chmod 0755 ${_VERB} "${_f}") + endforeach() + + set(_deb_name "${_TV}-service_${_TARGET_OS}_${_DEB_ARCH}.deb") + #message("VER = \"${_DEBVERSION}\"") + #message("DEB = \"${_deb_name}\"") + list(APPEND _CMD_ COMMAND echo "Package: ${_DEBNAME}-service" ${_C_echof}) + list(APPEND _CMD_ COMMAND echo "Version: ${_DEBVERSION}" ${_C_echo}) + list(APPEND _CMD_ COMMAND echo "Architecture: ${_DEB_ARCH}" ${_C_echo}) + list(APPEND _CMD_ COMMAND echo "Maintainer: ${${_T}_COMPANY} <>" ${_C_echo}) + list(APPEND _CMD_ COMMAND echo "Depends: ${_DEBNAME}" ${_C_echo}) #-${_DEBVERSION}" + list(APPEND _CMD_ COMMAND echo "Conflicts:" ${_C_echo}) + list(APPEND _CMD_ COMMAND echo "Replaces:" ${_C_echo}) + list(APPEND _CMD_ COMMAND echo "Section: misc" ${_C_echo}) + list(APPEND _CMD_ COMMAND echo "Priority: optional" ${_C_echo}) + list(APPEND _CMD_ COMMAND echo "Description: ${${_T}_LABEL} service" ${_C_echo}) + + add_custom_target(deploy_${_T}-service + # gather deb dir + COMMAND rm -rf ${_VERB} "${_AGD}" + COMMAND mkdir ${_VERB} -p "${_AGD}/DEBIAN" + ${_CMD_} + + # generate deb + #COMMAND cd ${_AGD} "&&" md5deep -rl * ">" DEBIAN/md5sums + COMMAND mkdir ${_VERB} -p ${_DESTINATION} + COMMAND dpkg-deb -Z gzip -b ${_AGD} ${_DESTINATION}/${_deb_name} + VERBATIM + COMMENT "Generating ${_deb_name}" + ) + list(APPEND _deployed "deploy_${_T}-service") + endif() + elseif(WIN32) if (NOT CMAKE_OBJDUMP) find_program(CMAKE_OBJDUMP objdump) @@ -769,7 +845,7 @@ macro(deploy_target _T) COMMAND cd "\"${_DEPLOY_DIR}\"" "&&" zip -q -r "\"${_DESTINATION}/${_zip_name}\"" "\"${_TV}_win_${MY_ARCH}\"" COMMENT "Generating ${_zip_name}" ) - set(_has_deploy 1) + set(_deployed "deploy_${_T}") elseif (APPLE) set(MACOSX_BUNDLE_GUI_IDENTIFIER "${${_T}_FULLNAME}") set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${${_T}_VERSION}") @@ -834,7 +910,7 @@ macro(deploy_target _T) ${_cmd_gen_dmg} COMMENT "${_comment}" ) - set(_has_deploy 1) + set(_deployed "deploy_${_T}") elseif (DEFINED ANDROID_PLATFORM) set(_res_files) set(_res_files "${_res_files}\n ") @@ -972,9 +1048,9 @@ macro(deploy_target _T) ${_CMD_} COMMENT "Generating ${_base_name}.apk/aab" ) - set(_has_deploy 1) - endif() - if (_has_deploy) - add_dependencies(deploy deploy_${_T}) + set(_deployed "deploy_${_T}") endif() + foreach (_d ${_deployed}) + add_dependencies(deploy ${_d}) + endforeach() endmacro()