deploy features

This commit is contained in:
2020-05-07 17:41:26 +03:00
parent 3386c7702c
commit 25ddc832af
2 changed files with 59 additions and 33 deletions

View File

@@ -130,7 +130,7 @@ else()
set(CMAKE_INSTALL_RPATH "@executable_path/../Frameworks;@executable_path/lib;@loader_path/../lib") set(CMAKE_INSTALL_RPATH "@executable_path/../Frameworks;@executable_path/lib;@loader_path/../lib")
set(CMAKE_MACOSX_RPATH 1) set(CMAKE_MACOSX_RPATH 1)
else() else()
set(CMAKE_INSTALL_RPATH "\$ORIGIN/lib") set(CMAKE_INSTALL_RPATH "\$ORIGIN;\$ORIGIN/lib")
endif() endif()
endif() endif()
if(LIB) if(LIB)

View File

@@ -73,16 +73,16 @@ deploy_target(<target> [DEPLOY_DIR <dir>] [DESTINATION <dir>]
[RESOURCES <dir|file> [<dir|file> ...] ] [RESOURCES <dir|file> [<dir|file> ...] ]
[PLUGINS <dir|file> [<dir|file> ...] ] [PLUGINS <dir|file> [<dir|file> ...] ]
[FILES <dir|file> [<dir|file> ...] ] [FILES <dir|file> [<dir|file> ...] ]
[OPTIONS <flag> ...] [VERBOSE] [ZIP_DMG]) [OPTIONS <flag> ...] [VERBOSE] [ZIP_NO_DMG] [DEB_USR_DIR])
Create make target "deploy_<target>", depends on target "deploy" Create make target "deploy_<target>", depends on target "deploy".
On this target create release package, containing all dependencies: On this target create release package, containing all dependencies:
*.zip on Windows, *.deb on Linux, *.dmg an MacOS, *.apk and *.aab on Android *.zip on Windows, *.deb on Linux, *.dmg an MacOS, *.apk and *.aab on Android.
If defined ZIP_DMG then *.dmg.zip will be created on MacOS If not defined ZIP_NO_DMG then *.dmg.zip will be created on MacOS.
You should set version and deploy properties You should set version and deploy properties
before call this macro, see before call this macro, see
"set_version()" and "set_deploy_property()" "set_version()" and "set_deploy_property()".
Example: Example:
deploy_target(my_app DESTINATION packages) deploy_target(my_app DESTINATION packages)
@@ -95,11 +95,11 @@ DEPLOY_DIR - dir where you install
DESTINATION - dir where macro place package DESTINATION - dir where macro place package
RESOURCES, PLUGINS and FILES - list of directories and files, copied to: RESOURCES, PLUGINS and FILES - list of directories and files, copied to:
| | Windows | Linux | MacOS | | | Windows | Linux | Linux (DEB_USR_DIR) | MacOS |
| ----------|---------|---------------------------|--------------------| |-----------|---------|---------------------|---------------------------|--------------------|
| RESOURCES | root | /usr/share/COMPANY/target | Contents/Resources | | RESOURCES | root | /opt/COMPANY/target | /usr/share/COMPANY/target | Contents/Resources |
| PLUGINS | root | /usr/lib/COMPANY/target | Contents/PlugIns | | PLUGINS | root | /opt/COMPANY/target | /usr/lib/COMPANY/target | Contents/PlugIns |
| FILES | root | /usr/bin | Contents/MacOS | | FILES | root | /opt/COMPANY/target | /usr/bin | Contents/MacOS |
Relative paths are taken from DEPLOY_DIR Relative paths are taken from DEPLOY_DIR
Also check library dependencies from PLUGINS and FILES Also check library dependencies from PLUGINS and FILES
@@ -548,17 +548,20 @@ macro(deploy_target _T)
set(_VERB) set(_VERB)
set(_WVERB 1> NUL) set(_WVERB 1> NUL)
set(_OPTIONS) set(_OPTIONS)
set(_ZIP_DMG 0) set(_ZIP_DMG 1)
set(_DEB_OPT 1)
set(_cur_arg) set(_cur_arg)
set(__args "DESTINATION;DEPLOY_DIR;RESOURCES;PLUGINS;FILES;OPTIONS;VERBOSE;ZIP_DMG") set(__args "DESTINATION;DEPLOY_DIR;RESOURCES;PLUGINS;FILES;OPTIONS;VERBOSE;ZIP_NO_DMG;DEB_USR_DIR")
foreach(_i ${ARGN}) foreach(_i ${ARGN})
if (_i IN_LIST __args) if (_i IN_LIST __args)
set(_cur_arg "${_i}") set(_cur_arg "${_i}")
if ("${_cur_arg}" STREQUAL "VERBOSE") if ("${_cur_arg}" STREQUAL "VERBOSE")
set(_VERB -v) set(_VERB -v)
set(_WVERB) set(_WVERB)
elseif("${_cur_arg}" STREQUAL "ZIP_DMG") elseif("${_cur_arg}" STREQUAL "ZIP_NO_DMG")
set(_ZIP_DMG 1) set(_ZIP_DMG 0)
elseif("${_cur_arg}" STREQUAL "DEB_USR_DIR")
set(_DEB_OPT 0)
endif() endif()
elseif ("${_cur_arg}" STREQUAL "DESTINATION") elseif ("${_cur_arg}" STREQUAL "DESTINATION")
set(_cur_arg) set(_cur_arg)
@@ -595,9 +598,6 @@ macro(deploy_target _T)
set(_CMD_) set(_CMD_)
set(_has_deploy 0) set(_has_deploy 0)
if ("x${CMAKE_SYSTEM_NAME}" STREQUAL "xLinux") if ("x${CMAKE_SYSTEM_NAME}" STREQUAL "xLinux")
if (NOT CMAKE_LDD)
find_program(CMAKE_LDD ldd)
endif()
string(REPLACE "_" "-" _DEBNAME "${_T}") string(REPLACE "_" "-" _DEBNAME "${_T}")
string(REPLACE "_" "-" _DEBVERSION "${${_T}_VERSION}") string(REPLACE "_" "-" _DEBVERSION "${${_T}_VERSION}")
set(_DEB_ARCH) set(_DEB_ARCH)
@@ -622,14 +622,44 @@ macro(deploy_target _T)
set(_C_echo ">>" "${_AGD}/DEBIAN/control") set(_C_echo ">>" "${_AGD}/DEBIAN/control")
set(_D_echof ">" "${_AGD}/usr/share/applications/${_DEBNAME}.desktop") set(_D_echof ">" "${_AGD}/usr/share/applications/${_DEBNAME}.desktop")
set(_D_echo ">>" "${_AGD}/usr/share/applications/${_DEBNAME}.desktop") set(_D_echo ">>" "${_AGD}/usr/share/applications/${_DEBNAME}.desktop")
__make_copy(_CMD_ _RES_DIRS _RES_FILES "${_AGD}/usr/share/${${_T}_COMPANY}/${_T}") set(_bin_path "${_AGD}/usr/bin")
__make_copy(_CMD_ _PLUG_DIRS _PLUG_FILES "${_AGD}/usr/lib/${${_T}_COMPANY}/${_T}") set(_lib_path "${_AGD}/usr/lib")
__make_copy(_CMD_ _FILE_DIRS _FILE_FILES "${_AGD}/usr/bin") set(_pli_path "${_AGD}/usr/lib/${${_T}_COMPANY}/${_T}")
set(_res_path "${_AGD}/usr/share/${${_T}_COMPANY}/${_T}")
set(_ico_path "${_AGD}/usr/share/pixmaps")
set(_app_bin_path "/usr/bin")
set(_app_ico_path "/usr/share/pixmaps")
if(_DEB_OPT)
set(_bin_path "${_AGD}/opt/${${_T}_COMPANY}/${_T}")
set(_lib_path "${_AGD}/opt/${${_T}_COMPANY}/${_T}/lib")
set(_pli_path "${_AGD}/opt/${${_T}_COMPANY}/${_T}")
set(_res_path "${_AGD}/opt/${${_T}_COMPANY}/${_T}")
set(_ico_path "${_AGD}/opt/${${_T}_COMPANY}/${_T}/pixmaps")
set(_app_bin_path "/opt/${${_T}_COMPANY}/${_T}")
set(_app_ico_path "/opt/${${_T}_COMPANY}/${_T}/pixmaps")
endif()
set(_CMD_ ${_CMD_} COMMAND mkdir ${_VERB} -p "${_bin_path}")
set(_CMD_ ${_CMD_} COMMAND mkdir ${_VERB} -p "${_lib_path}")
set(_CMD_ ${_CMD_} COMMAND mkdir ${_VERB} -p "${_pli_path}")
set(_CMD_ ${_CMD_} COMMAND mkdir ${_VERB} -p "${_res_path}")
set(_CMD_ ${_CMD_} COMMAND mkdir ${_VERB} -p "${_ico_path}")
set(_CMD_ ${_CMD_} COMMAND mkdir ${_VERB} -p "${_AGD}/usr/share/applications")
__make_copy(_CMD_ _FILE_DIRS _FILE_FILES ${_bin_path})
__make_copy(_CMD_ _PLUG_DIRS _PLUG_FILES ${_pli_path})
__make_copy(_CMD_ _RES_DIRS _RES_FILES ${_res_path})
set(_CMD_ ${_CMD_} COMMAND cp ${_VERB} -f "${_DEPLOY_DIR}/${_T}" "${_bin_path}/")
if (_DEP_LIBS) if (_DEP_LIBS)
set(_CMD_ ${_CMD_} COMMAND cp ${_VERB} -f ${_DEP_LIBS} ${_AGD}/usr/lib) set(_CMD_ ${_CMD_} COMMAND cp ${_VERB} -f "${_DEP_LIBS}" "${_lib_path}/")
endif() endif()
if (_ICON_NAME) if (_ICON_NAME)
set(_CMD_ ${_CMD_} COMMAND cp ${_VERB} -f ${_ICON_FN} ${_AGD}/usr/share/pixmaps) set(_CMD_ ${_CMD_} COMMAND cp ${_VERB} -f "${_ICON_FN}" "${_ico_path}/")
endif()
if(_DEB_OPT)
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()
if (NOT CMAKE_LDD)
find_program(CMAKE_LDD ldd)
endif() endif()
set(_dt_opts -l "${CMAKE_LDD}") set(_dt_opts -l "${CMAKE_LDD}")
if (CMAKE_CROSSCOMPILING) if (CMAKE_CROSSCOMPILING)
@@ -643,19 +673,15 @@ macro(deploy_target _T)
set(_deb_name "${_TV}_debian_${_DEB_ARCH}.deb") set(_deb_name "${_TV}_debian_${_DEB_ARCH}.deb")
add_custom_target(deploy_${_T} add_custom_target(deploy_${_T}
# gather deb dir # gather deb dir
COMMAND mkdir ${_VERB} -p ${_AGD}/DEBIAN COMMAND rm -rf ${_VERB} "${_AGD}"
COMMAND mkdir ${_VERB} -p ${_AGD}/usr/bin COMMAND mkdir ${_VERB} -p "${_AGD}/DEBIAN"
COMMAND mkdir ${_VERB} -p ${_AGD}/usr/lib
COMMAND mkdir ${_VERB} -p ${_AGD}/usr/share/pixmaps
COMMAND mkdir ${_VERB} -p ${_AGD}/usr/share/applications
COMMAND cp ${_VERB} -f ${_DEPLOY_DIR}/${_T} ${_AGD}/usr/bin
${_CMD_} ${_CMD_}
COMMAND echo "Package: ${_DEBNAME}" ${_C_echof} COMMAND echo "Package: ${_DEBNAME}" ${_C_echof}
COMMAND echo "Version: ${_DEBVERSION}" ${_C_echo} COMMAND echo "Version: ${_DEBVERSION}" ${_C_echo}
COMMAND echo "Architecture: ${_DEB_ARCH}" ${_C_echo} COMMAND echo "Architecture: ${_DEB_ARCH}" ${_C_echo}
COMMAND echo "Maintainer: ${${_T}_COMPANY} <>" ${_C_echo} COMMAND echo "Maintainer: ${${_T}_COMPANY} <>" ${_C_echo}
COMMAND ${PIP_DEPLOY_TOOL} ${_OPTIONS} --prefix "Depends: " --dependencies ${_dt_opts} -a "${_DEP_LIBS_CS}" -o "${_AGD}/usr/lib" ${_DEPLOY_DIR}/${_T} ${_ADD_DEPS} ${_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 "Conflicts:" ${_C_echo}
COMMAND echo "Replaces:" ${_C_echo} COMMAND echo "Replaces:" ${_C_echo}
COMMAND echo "Section: misc" ${_C_echo} COMMAND echo "Section: misc" ${_C_echo}
@@ -668,8 +694,8 @@ macro(deploy_target _T)
COMMAND echo "Name=${${_T}_LABEL}" ${_D_echo} COMMAND echo "Name=${${_T}_LABEL}" ${_D_echo}
COMMAND echo "GenericName=${${_T}_LABEL}" ${_D_echo} COMMAND echo "GenericName=${${_T}_LABEL}" ${_D_echo}
COMMAND echo "Comment=${${_T}_INFO}" ${_D_echo} COMMAND echo "Comment=${${_T}_INFO}" ${_D_echo}
COMMAND echo "Exec=/usr/bin/${_T}" ${_D_echo} COMMAND echo "Exec=${_app_bin_path}/${_T}" ${_D_echo}
COMMAND echo "Icon=/usr/share/pixmaps/${_ICON_NAME}" ${_D_echo} COMMAND echo "Icon=${_app_ico_path}/${_ICON_NAME}" ${_D_echo}
COMMAND echo "Terminal=false" ${_D_echo} COMMAND echo "Terminal=false" ${_D_echo}
COMMAND echo "StartupNotify=true" ${_D_echo} COMMAND echo "StartupNotify=true" ${_D_echo}
#COMMAND echo "X-KDE-StartupNotify=true" ${_D_echo} #COMMAND echo "X-KDE-StartupNotify=true" ${_D_echo}
@@ -677,7 +703,7 @@ macro(deploy_target _T)
#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} #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 # generate deb
COMMAND cd ${_AGD} "&&" md5deep -rl usr ">" DEBIAN/md5sums COMMAND cd ${_AGD} "&&" md5deep -rl usr opt ">" DEBIAN/md5sums
COMMAND mkdir ${_VERB} -p ${_DESTINATION} COMMAND mkdir ${_VERB} -p ${_DESTINATION}
COMMAND dpkg-deb -b ${_AGD} ${_DESTINATION}/${_deb_name} COMMAND dpkg-deb -b ${_AGD} ${_DESTINATION}/${_deb_name}
VERBATIM VERBATIM