This repository has been archived on 2020-09-07. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
libs/qad/QADDeploy.cmake

199 lines
5.9 KiB
CMake

if (POLICY CMP0057)
cmake_policy(SET CMP0057 NEW)
endif()
set(__prop_names "LABEL;VERSION;FULLNAME;COMPANY;ICON;INFO")
# usage: set_deploy_property(<target> NAME <value> [NAME <value> [...]])
#
# Set target deploy property, where NAME one of:
# * LABEL - application icon name
# * VERSION - version
# * FULLNAME - package name in format "*.*.*"
# * COMPANY - company name
# * ICON - icon file
# * INFO - additional info
#
# You can setup several properties in one command
#
macro(set_deploy_property _T)
set(_name)
set(_is_name 1)
foreach(_i ${ARGN})
if (_is_name)
set(_is_name 0)
if (_i IN_LIST __prop_names)
else()
message(FATAL_ERROR "Invalid property name \"${_i}\"!")
endif()
set(_name ${_i})
else()
set(_is_name 1)
set(${_T}_${_name} ${_i})
endif()
endforeach()
endmacro()
# usage: make_rc(<target> <rc_out_file>)
#
# Generate Windows *.rc file from deploy properties
# and return file path to <rc_out_file>
#
# You should set deploy properties before
# call this macro, see "set_deploy_property()"
#
macro(make_rc _T _out)
if (WIN32)
set(WINDOWS_RC_FULLNAME "${${_T}_FULLNAME}")
set(WINDOWS_RC_VERSION "${${_T}_VERSION}")
set(WINDOWS_RC_LABEL "${${_T}_LABEL}")
set(WINDOWS_RC_COMPANY "${${_T}_COMPANY}")
set(WINDOWS_RC_INFO "${${_T}_INFO}")
get_filename_component(WINDOWS_RC_ICON "${${_T}_ICON}" REALPATH BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(_rc_file "${CMAKE_CURRENT_BINARY_DIR}/winres.rc")
file(WRITE ${_rc_file}
"# if defined(UNDER_CE)
# include <winbase.h>
# else
# include <winver.h>
# endif
1 ICON ${WINDOWS_RC_ICON}
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,0
PRODUCTVERSION 1,0,0,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x9L
#else
FILEFLAGS 0x8L
#endif
FILEOS 0x40004L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK \"StringFileInfo\"
BEGIN
BLOCK \"040904b0\"
BEGIN
VALUE \"Comments\", \"\\0\"
VALUE \"CompanyName\", \"${WINDOWS_RC_COMPANY}\\0\"
VALUE \"FileDescription\", \"${WINDOWS_RC_INFO}\\0\"
VALUE \"FileVersion\", \"${WINDOWS_RC_VERSION}\\0\"
VALUE \"InternalName\", \"${WINDOWS_RC_FULLNAME}\\0\"
VALUE \"LegalTrademarks\", \"\\0\"
VALUE \"OriginalFilename\", \"${_T}.exe\\0\"
VALUE \"PrivateBuild\", \"1\\0\"
VALUE \"ProductName\", \"${WINDOWS_RC_LABEL}\\0\"
VALUE \"ProductVersion\", \"${WINDOWS_RC_VERSION}\\0\"
VALUE \"SpecialBuild\", \"\\0\"
END
END
BLOCK \"VarFileInfo\"
BEGIN
VALUE \"Translation\", 0x409, 1200
END
END
")
set(${_out} ${_rc_file})
endif()
endmacro()
# usage: deploy_target(<target> <full_app_name> <version> <icon> <label> <copyright> <info>
# [DEPLOY_DIR <dir>] [DESTINATION <dir>] [NO_AUTO_ICON_EXT])
#
# DEPLOY_DIR - dir where you install
# * executable on Windows, Linux
# * <T>.app directory with executable on MacOS
#
# DESTINATION - dir where macro place package
#
# Example:
# deploy_target(my_app DESTINATION packages)
#
# Create make target "deploy"
#
# This macro use "deploy_tool" from sdk,
# make sure it can be executed from shell
# You should set deploy properties before
# call this macro, see "set_deploy_property()"
#
# use "CMAKE_OTOOL" or "CMAKE_OBJDUMP" variable,
# depends on target platform
# can use "DEPLOY_ADD_LIBPATH" variable as additional
# library search path
#
macro(deploy_target _T)
set(_DESTINATION "${CMAKE_INSTALL_PREFIX}")
set(_DEPLOY_DIR "${CMAKE_INSTALL_PREFIX}")
set(_is_dest 0)
set(_is_deploy_dir 0)
foreach(_i ${ARGN})
if (_is_dest)
set(_is_dest 0)
set(_DESTINATION "${_i}/")
else()
if (_is_deploy_dir)
set(_is_deploy_dir 0)
set(_DEPLOY_DIR "${_i}/")
else()
if ("x${_i}" STREQUAL "xDESTINATION")
set(_is_dest 1)
else()
if ("x${_i}" STREQUAL "xDEPLOY_DIR")
set(_is_deploy_dir 1)
endif()
endif()
endif()
endif()
#message("-i = ${_i}")
endforeach()
get_filename_component(_ICON_NAME "${icon}" NAME)
get_filename_component(_ICON_FN "${icon}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(_TV "${_T}-${version}")
set(_DEP_LIBPATH)
get_target_property(_LL ${_T} LINK_LIBRARIES)
foreach (_L ${_LL})
if (TARGET ${_L})
get_target_property(_II ${_L} IMPORTED)
if (NOT _II)
#message("depend on ${_L}")
set(_DEP_LIBPATH "${_DEP_LIBPATH}\;$<TARGET_FILE_DIR:${_L}>")
endif()
endif()
endforeach()
#message("app depend libpath ${_DEP_LIBPATH}")
if (APPLE)
set(MACOSX_BUNDLE_GUI_IDENTIFIER "${${_T}_FULLNAME}")
set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${${_T}_VERSION}")
set(MACOSX_BUNDLE_LONG_VERSION_STRING "${${_T}_VERSION}")
set(MACOSX_BUNDLE_ICON_FILE "${${_T}_ICON}")
set(MACOSX_BUNDLE_BUNDLE_NAME "${${_T}_LABEL}")
set(MACOSX_BUNDLE_COPYRIGHT "${${_T}_COMPANY}")
set(MACOSX_BUNDLE_INFO_STRING "${${_T}_INFO}")
set(MACOSX_BUNDLE_BUNDLE_VERSION "6.0")
set_target_properties(${_T} PROPERTIES MACOSX_BUNDLE TRUE)
set(_AGD "${_DEPLOY_DIR}/${_T}.app")
set(_DMG "${CMAKE_CURRENT_BINARY_DIR}/dmg")
add_custom_target(deploy
# gather .app dir
COMMAND mkdir -p ${_AGD}/Contents/Resources
COMMAND mkdir -p ${_AGD}/Contents/Frameworks
COMMAND mkdir -p ${_DEPLOY_DIR}/lang
COMMAND mkdir -p ${_DESTINATION}
COMMAND cp ${_ICON_FN} ${_AGD}/Contents/Resources
COMMAND cp -r ${_DEPLOY_DIR}/lang ${_AGD}/Contents/MacOS
COMMAND deploy_tool -M "${CMAKE_OTOOL}" -P cocoa -S mac -q ${Qt5_ROOT} -s \"${CMAKE_PREFIX_PATH}/lib\;${DEPLOY_ADD_LIBPATH}${_DEP_LIBPATH}\" -o ${_AGD}/Contents/Frameworks -p ${_AGD}/Contents/PlugIns ${_AGD}/Contents/MacOS/${_T}
# prepare dmg dir
COMMAND rm -rf ${_DMG}
COMMAND mkdir -p ${_DMG}
COMMAND cp -r ${_AGD} ${_DMG}
COMMAND ln --symbolic /Applications ${_DMG}
# generate dmg
COMMAND genisoimage -quiet -V ${_T} -D -R -apple -no-pad -o ${_DESTINATION}/${_TV}.dmg ${_DMG}
COMMENT "Generating ${_TV}.dmg"
)
endif()
endmacro()