Fix launch of Cocoa example due to missing MainMenu.nib in bundle app

This commit is contained in:
Ceylo 2018-01-12 21:34:22 +01:00 committed by Lukas Dürrenberger
parent c24de5fcaf
commit 777ec2c04d
7 changed files with 69 additions and 60 deletions

View file

@ -1,6 +1,34 @@
set(SRCROOT ${PROJECT_SOURCE_DIR}/examples/cocoa)
# Usage: compile_xib(INPUT path/to/file.xib OUTPUT path/to/file.nib)
function(compile_xib)
cmake_parse_arguments(THIS "" "INPUT;OUTPUT" "" ${ARGN})
if (NOT THIS_INPUT)
message(FATAL_ERROR "Missing required argument INPUT in call to compile_xib()")
endif()
if (NOT THIS_OUTPUT)
message(FATAL_ERROR "Missing required argument OUTPUT in call to compile_xib()")
endif()
if (NOT DEFINED IBTOOL)
find_program(IBTOOL ibtool HINTS "/usr/bin" "${OSX_DEVELOPER_ROOT}/usr/bin")
endif()
if(NOT IBTOOL)
message(FATAL_ERROR "ibtool is required to compile .xib files but wasn't found.")
endif()
# Default args taken from Xcode 9 when it generates a nib from a xib
set(DEFAULT_ARGS --errors --warnings --notices --module cocoa --auto-activate-custom-fonts --target-device mac --minimum-deployment-target ${CMAKE_OSX_DEPLOYMENT_TARGET} --output-format human-readable-text)
add_custom_command(OUTPUT "${THIS_OUTPUT}"
COMMAND "${IBTOOL}" ${DEFAULT_ARGS} "${THIS_INPUT}" --compile "${THIS_OUTPUT}"
DEPENDS "${THIS_INPUT}"
COMMENT "Generating ${THIS_OUTPUT}"
VERBATIM)
endfunction()
# all source files
set(SRC ${SRCROOT}/CocoaAppDelegate.h
${SRCROOT}/CocoaAppDelegate.mm
@ -8,8 +36,7 @@ set(SRC ${SRCROOT}/CocoaAppDelegate.h
${SRCROOT}/NSString+stdstring.mm
${SRCROOT}/main.m)
# all XIB files
set(XIBS MainMenu)
compile_xib(INPUT "${SRCROOT}/MainMenu.xib" OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/MainMenu.nib")
# all resource files
set(RESOURCES ${SRCROOT}/resources/logo.png
@ -18,50 +45,17 @@ set(RESOURCES ${SRCROOT}/resources/logo.png
${SRCROOT}/resources/blue.png
${SRCROOT}/resources/green.png
${SRCROOT}/resources/red.png
${SRCROOT}/resources/Credits.rtf)
# define the cocoa target and customize it
add_executable(cocoa MACOSX_BUNDLE ${SRC} ${RESOURCES})
${SRCROOT}/resources/Credits.rtf
${CMAKE_CURRENT_BINARY_DIR}/MainMenu.nib)
set_source_files_properties(${RESOURCES} PROPERTIES
MACOSX_PACKAGE_LOCATION Resources)
# define the cocoa target and customize it
sfml_add_example(cocoa
SOURCES ${SRC}
BUNDLE_RESOURCES ${RESOURCES}
DEPENDS sfml-system sfml-window sfml-graphics)
set_target_properties(cocoa PROPERTIES
MACOSX_BUNDLE TRUE
MACOSX_BUNDLE_INFO_PLIST ${SRCROOT}/resources/Cocoa-Info.plist)
target_link_libraries(cocoa "-framework Cocoa -framework Foundation"
sfml-system sfml-window sfml-graphics)
# set the target's folder (for IDEs that support it, e.g. Visual Studio)
set_target_properties(cocoa PROPERTIES FOLDER "Examples")
# compile XIB files
find_program(IBTOOL ibtool HINTS "/usr/bin" "${OSX_DEVELOPER_ROOT}/usr/bin")
if(${IBTOOL} STREQUAL "IBTOOL-NOTFOUND")
message(FATAL_ERROR "ibtool is required to compile .xib files but wasn't found.")
endif()
set(RESOURCE_PATH "cocoa.app/Contents/Resources")
set(XIB_OUTPUT_PATH "${RESOURCE_PATH}/")
set(XIB_INPUT_PATH "${SRCROOT}/")
foreach(XIB ${XIBS})
add_custom_command(TARGET cocoa
POST_BUILD
COMMAND ${IBTOOL} --errors
--output-format human-readable-text
--compile ${XIB_OUTPUT_PATH}/${XIB}.nib
${XIB_INPUT_PATH}/${XIB}.xib
COMMENT "Compiling ${XIB}.xib")
# deactivated options: --warnings --notices
endforeach()
# add install rule
install(TARGETS cocoa
BUNDLE DESTINATION ${INSTALL_MISC_DIR}/examples/cocoa
COMPONENT examples)
#
# define the cocoa target
# sfml_add_example is not compatible with application bundles !
#
#sfml_add_example(cocoa
# SOURCES ${SRC}
# DEPENDS sfml-system sfml-window sfml-graphics)
#
target_link_libraries(cocoa "-framework Cocoa -framework Foundation")