CMAKE: started to add bundle support

master
Martin Gerhardy 2019-06-20 16:06:11 +02:00
parent 8a3db7b105
commit f2a9be74a2
5 changed files with 70 additions and 4 deletions

View File

@ -1,9 +1,11 @@
macro(engine_install TARGET FILE DESTINATION INSTALL_DATA)
set(INSTALL_DATA_DIR "${CMAKE_INSTALL_DATADIR}/${CMAKE_PROJECT_NAME}-${TARGET}")
get_filename_component(filename ${FILE} NAME)
target_sources(${TARGET} PRIVATE ${DATA_DIR}/${FILE})
set_source_files_properties(${DATA_DIR}/${FILE} PROPERTIES MACOSX_PACKAGE_LOCATION Resources/${DESTINATION})
if (INSTALL_DATA)
install(FILES ${DATA_DIR}/${FILE} DESTINATION ${INSTALL_DATA_DIR}/${DESTINATION} COMPONENT ${TARGET})
endif()
get_filename_component(filename ${FILE} NAME)
configure_file(${DATA_DIR}/${FILE} ${CMAKE_BINARY_DIR}/${TARGET}/${DESTINATION}/${filename} COPYONLY)
endmacro()
@ -32,7 +34,11 @@ macro(engine_add_executable)
set(DESCRIPTION "")
set(NAME ${_EXE_TARGET})
set(APPICON "${_EXE_TARGET}-icon")
set(ICON "${APPICON}.png")
if (APPLE)
set(ICON "${APPICON}.icns")
else()
set(ICON "${APPICON}.png")
endif()
set(${_EXE_TARGET}_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE INTERNAL "${_EXE_TARGET} source directory")
if (_EXE_WINDOWED)
@ -99,6 +105,25 @@ macro(engine_add_executable)
install(FILES ${PROJECT_BINARY_DIR}/${CMAKE_PROJECT_NAME}-${_EXE_TARGET}.service DESTINATION lib/systemd/user)
endif()
endif()
elseif(APPLE)
configure_file(${ROOT_DIR}/contrib/installer/osx/application.plist.in ${CMAKE_CURRENT_BINARY_DIR}/application.plist)
set_target_properties(${_EXE_TARGET} PROPERTIES
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/application.plist
MACOSX_BUNDLE ON
XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "YES")
set_target_properties(${_EXE_TARGET} PROPERTIES MACOSX_BUNDLE_GUI_IDENTIFIER "${CMAKE_PROJECT_NAME}.${_EXE_TARGET}")
if (${CMAKE_GENERATOR} STREQUAL "Xcode")
set_target_properties(${_EXE_TARGET} PROPERTIES MACOSX_BUNDLE_EXECUTABLE_NAME \${EXECUTABLE_NAME})
set_target_properties(${_EXE_TARGET} PROPERTIES MACOSX_BUNDLE_PRODUCT_NAME \${PRODUCT_NAME})
set_target_properties(${_EXE_TARGET} PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME \${PRODUCT_NAME})
else()
set_target_properties(${_EXE_TARGET} PROPERTIES MACOSX_BUNDLE_PRODUCT_NAME "${_EXE_TARGET}")
set_target_properties(${_EXE_TARGET} PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "${_EXE_TARGET}")
endif()
elseif(MSVC)
target_sources(${_EXE_TARGET} PRIVATE ${ROOT_DIR}/contrib/installer/windows/application.manifest)
elseif(MINGW)
target_sources(${_EXE_TARGET} PRIVATE ${ROOT_DIR}/contrib/installer/windows/application.rc)
endif()
set_property(GLOBAL PROPERTY ${_EXE_TARGET}_EXECUTABLE True)
@ -115,10 +140,14 @@ macro(engine_add_executable)
configure_file(lua/${luasrc} ${CMAKE_BINARY_DIR}/${_EXE_TARGET}/${datafiledir}/${filename} COPYONLY)
endforeach()
if (EXISTS ${ROOT_DIR}/contrib/${ICON})
set(ICON_FULL_PATH ${DATA_DIR}/${_EXE_TARGET}/${ICON})
if (EXISTS ${ICON_FULL_PATH})
if (INSTALL_DATA)
install(FILES ${ROOT_DIR}/contrib/${ICON} DESTINATION ${INSTALL_ICON_DIR} COMPONENT ${_EXE_TARGET})
install(FILES ${ICON_FULL_PATH} DESTINATION ${INSTALL_ICON_DIR} COMPONENT ${_EXE_TARGET})
endif()
target_sources(${_EXE_TARGET} PRIVATE ${ICON_FULL_PATH})
set_target_properties(${_EXE_TARGET} PROPERTIES MACOSX_BUNDLE_ICON_FILE ${ICON})
set_source_files_properties(${ICON_FULL_PATH} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
endif()
if (INSTALL_DATA)
install(TARGETS ${_EXE_TARGET} DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${_EXE_TARGET})

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en-US</string>
<key>CFBundleExecutable</key>
<string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
<key>CFBundleIdentifier</key>
<string>@CMAKE_PROJECT_NAME@.@_EXE_TARGET@</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleIconFile</key>
<string>@APPICON@</string>
<key>CFBundleName</key>
<string>@_EXE_TARGET@</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>NSHighResolutionCapable</key>
<true/>
</dict>
</plist>

View File

@ -0,0 +1,14 @@
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"
xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<asmv3:application>
<asmv3:windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
true/pm
</dpiAware> <!-- legacy -->
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">
permonitorv2,permonitor
</dpiAwareness> <!-- falls back to pm if pmv2 is not available -->
</asmv3:windowsSettings>
</asmv3:application>
</assembly>
<!-- kate: hl xml; -->

View File

@ -0,0 +1 @@
1 RT_MANIFEST "application.manifest"

Binary file not shown.