chore: build macOS app bundle

This commit is contained in:
yvt 2020-12-13 22:31:48 +09:00
parent bffbf913c2
commit e9cd690a71
No known key found for this signature in database
GPG Key ID: 5002B95A6A0B37CC
4 changed files with 82 additions and 25 deletions

View File

@ -252,8 +252,7 @@ endif()
add_subdirectory(Resources)
add_subdirectory(Sources)
if(UNIX)
if(UNIX AND NOT APPLE)
# various texts
INSTALL(FILES AUTHORS LICENSE README.md DESTINATION ${OPENSPADES_INSTALL_DOC}/)
@ -271,15 +270,7 @@ if(UNIX)
if(OPENSPADES_RESOURCES)
# install asset paks (including non-GPL one)
install(FILES
${CMAKE_BINARY_DIR}/Resources/pak000-Nonfree.pak
${CMAKE_BINARY_DIR}/Resources/pak002-Base.pak
${CMAKE_BINARY_DIR}/Resources/pak005-Models.pak
${CMAKE_BINARY_DIR}/Resources/pak010-BaseSkin.pak
${CMAKE_BINARY_DIR}/Resources/pak050-Locales.pak
${CMAKE_BINARY_DIR}/Resources/pak999-References.pak
${CMAKE_BINARY_DIR}/Resources/font-unifont.pak
DESTINATION ${OPENSPADES_INSTALL_RESOURCES})
install(FILES ${PAK_FILES} DESTINATION ${OPENSPADES_INSTALL_RESOURCES})
endif(OPENSPADES_RESOURCES)
# Package info (used for automatic update check)
@ -302,9 +293,35 @@ if(UNIX)
# Currently there is no files in lib/openspades. But if you reading this message in future and want to
# place somewhere libs, binaries or other non-media stuff, place them in lib/openspades. Thank you.
endif(UNIX)
endif(UNIX AND NOT APPLE)
if(APPLE)
# Create a macOS application bundle
set_target_properties(OpenSpades PROPERTIES
MACOSX_BUNDLE ON
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/XSpades/XSpades-Info.plist
MACOSX_BUNDLE_BUNDLE_VERSION ${OPENSPADES_FULL_VERSION}
MACOSX_BUNDLE_LONG_VERSION_STRING ${OPENSPADES_FULL_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${OPENSPADES_FULL_VERSION}
MACOSX_BUNDLE_GUI_IDENTIFIER jp.yvt.openspades
MACOSX_BUNDLE_BUNDLE_NAME OpenSpades)
set(BUNDLE_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/Resources/Icons/OpenSpades.icns)
list(APPEND BUNDLE_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE)
if(OPENSPADES_RESOURCES)
list(APPEND BUNDLE_RESOURCES ${PAK_FILES})
set_source_files_properties(${PAK_FILES}
PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
add_dependencies(OpenSpades OpenSpades_Resources_DevPaks OpenSpades_Resources)
endif(OPENSPADES_RESOURCES)
list(APPEND BUNDLE_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/Resources/PackageInfo.json)
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/Resources/PackageInfo.json
PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
list(APPEND BUNDLE_RESOURCES ${CMAKE_CURRENT_SOURCE_DIR}/Sources/Externals/lib/libysrspades.dylib)
set_target_properties(OpenSpades PROPERTIES RESOURCE "${BUNDLE_RESOURCES}")
target_sources(OpenSpades PRIVATE "${BUNDLE_RESOURCES}")
endif(APPLE)
#see http://www.cmake.org/cmake/help/v2.8.11/cpack.html
set(CPACK_PACKAGE_NAME "OpenSpades")

View File

@ -124,8 +124,7 @@ GCC 4.9 / Clang 3.2 or later is recommended because OpenSpades relies on C++11 f
2. `vcpkg/bootstrap-vcpkg.sh`
3. `vcpkg/vcpkg install @vcpkg_x86_64-darwin.txt`
4. Download [macOS release of OpenSpades](https://github.com/yvt/openspades/releases), show the package contents, and copy `libysrspades.dylib` to `Sources/Externals/lib`.
5. Download and extract the [Non-free pak](https://github.com/yvt/openspades-paks/releases/download/r33/OpenSpadesDevPackage-r33.zip). After that, copy `Nonfree/pak000-Nonfree.pak` and `font-unifont.pak` to `Resources/`.
6. Create directory `openspades.mk` in the cloned/downloaded openspades repo and compile:
5. Create directory `openspades.mk` in the cloned/downloaded openspades repo and compile:
```bash
mkdir openspades.mk
@ -134,13 +133,13 @@ GCC 4.9 / Clang 3.2 or later is recommended because OpenSpades relies on C++11 f
ninja
```
7. Launch:
6. Launch:
```bash
bin/openspades
open bin/OpenSpades.app
```
(Creating an application bundle is not supported yet. Universal builds aren't supported either.)
(Universal builds aren't supported yet.)
## Troubleshooting
For troubleshooting and common problems see [TROUBLESHOOTING](TROUBLESHOOTING.md).

View File

@ -1,13 +1,30 @@
set(COMPILED_PAK_FILES
${CMAKE_CURRENT_BINARY_DIR}/pak002-Base.pak
${CMAKE_CURRENT_BINARY_DIR}/pak005-Models.pak
${CMAKE_CURRENT_BINARY_DIR}/pak010-BaseSkin.pak
${CMAKE_CURRENT_BINARY_DIR}/pak050-Locales.pak
${CMAKE_CURRENT_BINARY_DIR}/pak999-References.pak)
set(PAK_FILES
${COMPILED_PAK_FILES}
${CMAKE_CURRENT_BINARY_DIR}/pak000-Nonfree.pak
${CMAKE_CURRENT_BINARY_DIR}/font-unifont.pak
PARENT_SCOPE)
if(OPENSPADES_RESOURCES)
if (WIN32)
# No automatic downloading for Windows (for now)
elseif (UNIX)
add_custom_target(OpenSpades_Resources_DevPaks ALL COMMENT "Downloading non-GPL assets")
add_custom_target(OpenSpades_Resources_DevPaks ALL COMMENT "Downloading non-GPL assets"
DEPENDS
${CMAKE_CURRENT_BINARY_DIR}/pak000-Nonfree.pak
${CMAKE_CURRENT_BINARY_DIR}/font-unifont.pak)
add_custom_command(
TARGET OpenSpades_Resources_DevPaks
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/downloadpak.sh
OUTPUT
${CMAKE_CURRENT_BINARY_DIR}/pak000-Nonfree.pak
${CMAKE_CURRENT_BINARY_DIR}/font-unifont.pak
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
endif()
@ -23,27 +40,30 @@ if(OPENSPADES_RESOURCES)
add_custom_target(OpenSpades_Resources ALL
COMMENT "Packing assets"
SOURCES ${SCRIPT_FILES} ${SHADER_FILES}
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR})
DEPENDS ${COMPILED_PAK_FILES})
if(WIN32)
if(MSVC)
# multi-config
add_custom_command(
TARGET OpenSpades_Resources
OUTPUT ${COMPILED_PAK_FILES}
COMMAND powershell -ExecutionPolicy Bypass ${CMAKE_CURRENT_SOURCE_DIR}/mkpak.ps1
${CMAKE_BINARY_DIR}/bin/$<CONFIGURATION>/Resources
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
else()
add_custom_command(
TARGET OpenSpades_Resources
OUTPUT ${COMPILED_PAK_FILES}
COMMAND powershell -ExecutionPolicy Bypass ${CMAKE_CURRENT_SOURCE_DIR}/mkpak.ps1
${CMAKE_BINARY_DIR}/bin/Resources
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
endif()
elseif (UNIX)
add_custom_command(
TARGET OpenSpades_Resources
OUTPUT ${COMPILED_PAK_FILES}
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/mkpak.sh
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
endif()
@ -51,7 +71,7 @@ if(OPENSPADES_RESOURCES)
DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
endif()
if(UNIX)
if(UNIX AND NOT APPLE)
add_custom_target(OpenSpades_Unix ALL COMMENT "Process unix stuff")
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Icons)
@ -77,4 +97,4 @@ if(UNIX)
COMMAND sh -c \"gzip -9 -c ${CMAKE_CURRENT_BINARY_DIR}/Unix/Man/openspades.6 > openspades.6.gz\"
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Unix/Man
)
endif(UNIX)
endif(UNIX AND NOT APPLE)

View File

@ -47,6 +47,27 @@ set_target_properties(OpenSpades PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BIN
set_target_properties(OpenSpades PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set_target_properties(OpenSpades PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
if(APPLE)
# This value is reflected to the macOS application bundle's name, so use
# the correct capitalization
set_target_properties(OpenSpades PROPERTIES OUTPUT_NAME OpenSpades)
else(APPLE)
set_target_properties(OpenSpades PROPERTIES OUTPUT_NAME openspades)
endif(APPLE)
if (APPLE)
# The built pak files are copied into the macOS application bundle. CMake
# won't copy unless they are included in the target's source files.
#
# Since they are specified as `add_custom_command`'s output files, so they
# have the `GENERATED` property. However, `GENERATED` is a directory-local
# property (until [cmake!5308] lands in CMake 3.20). This means it needs to
# be set again here.
#
# [cmake!5308]: https://gitlab.kitware.com/cmake/cmake/-/merge_requests/5308
set_source_files_properties(${PAK_FILES} PROPERTIES GENERATED 1)
endif(APPLE)
if(WIN32)
# Use a single output directory for all configs
# (Without this, the generated binary cannot find pak files created by mkpak.ps1 unless