CMake: add C4GROUP_TOOL_ONLY

When cross-compiling c4group should be build for the host
machine before building OpenClonk for the target.

Without C4GROUP_TOOL_ONLY option, we have to build OpenClonk
for the host.

C4GROUP_TOOL_ONLY allow to build only c4group tool for the
host.

Signed-off-by: Romain Naour <romain.naour@gmail.com>
---
With this patch I can build OpenClonk with Buildroot.
stable-8
Romain Naour 2018-04-08 22:47:18 +02:00
parent 54d2ce7e07
commit f8136fcbc5
1 changed files with 248 additions and 221 deletions

View File

@ -48,6 +48,7 @@ CMAKE_DEPENDENT_OPTION(USE_WIN32_WINDOWS "Use Microsoft Desktop App User Interfa
CMAKE_DEPENDENT_OPTION(USE_SDL_MAINLOOP "Use SDL to create windows etc. Qt editor." ON "NOT USE_COCOA AND NOT USE_WIN32_WINDOWS AND NOT HEADLESS_ONLY" OFF) CMAKE_DEPENDENT_OPTION(USE_SDL_MAINLOOP "Use SDL to create windows etc. Qt editor." ON "NOT USE_COCOA AND NOT USE_WIN32_WINDOWS AND NOT HEADLESS_ONLY" OFF)
option(WITH_AUTOMATIC_UPDATE "Automatic updates are downloaded from the project website." OFF) option(WITH_AUTOMATIC_UPDATE "Automatic updates are downloaded from the project website." OFF)
option(HEADLESS_ONLY "Only build headless parts. Somewhat reduces dependencies. (still needs libpng because that one's small and hard to remove.) Only tested with make/gcc/linux." OFF) option(HEADLESS_ONLY "Only build headless parts. Somewhat reduces dependencies. (still needs libpng because that one's small and hard to remove.) Only tested with make/gcc/linux." OFF)
option(C4GROUP_TOOL_ONLY "Only build c4group binary." OFF)
set_property(GLOBAL PROPERTY USE_FOLDERS ${PROJECT_FOLDERS}) set_property(GLOBAL PROPERTY USE_FOLDERS ${PROJECT_FOLDERS})
@ -230,25 +231,30 @@ CHECK_CXX_SOURCE_COMPILES("#include <getopt.h>\nint main(int argc, char * argv[]
# Locate libraries # Locate libraries
############################################################################ ############################################################################
SET(JPEG_NAMES ${JPEG_NAMES} libjpeg jpeg-static) SET(JPEG_NAMES ${JPEG_NAMES} libjpeg jpeg-static)
if(NOT HEADLESS_ONLY) if(NOT HEADLESS_ONLY AND NOT C4GROUP_TOOL_ONLY)
find_package(Freetype REQUIRED) find_package(Freetype REQUIRED)
include_directories( include_directories(
${FREETYPE_INCLUDE_DIRS}) ${FREETYPE_INCLUDE_DIRS})
link_directories( link_directories(
${FREETYPE_LIBRARY_DIRS}) ${FREETYPE_LIBRARY_DIRS})
endif() endif()
find_package(JPEG REQUIRED)
find_package(PNG REQUIRED) # Needed for c4group
find_package(ZLIB REQUIRED) find_package(ZLIB REQUIRED)
include_directories(
${JPEG_INCLUDE_DIR} if (NOT C4GROUP_TOOL_ONLY)
${PNG_INCLUDE_DIR} find_package(JPEG REQUIRED)
${ZLIB_INCLUDE_DIR}) find_package(PNG REQUIRED)
if(CMAKE_SYSTEM MATCHES "Windows") include_directories(
message(STATUS "Using Win32 threading.") ${JPEG_INCLUDE_DIR}
else() ${PNG_INCLUDE_DIR}
find_package("Threads" REQUIRED) ${ZLIB_INCLUDE_DIR})
SET(HAVE_PTHREAD ${CMAKE_USE_PTHREADS_INIT} CACHE INTERNAL "libpthread available") if(CMAKE_SYSTEM MATCHES "Windows")
message(STATUS "Using Win32 threading.")
else()
find_package("Threads" REQUIRED)
SET(HAVE_PTHREAD ${CMAKE_USE_PTHREADS_INIT} CACHE INTERNAL "libpthread available")
endif()
endif() endif()
# FINDLIB works the same as find_library, but also marks the resulting var as # FINDLIB works the same as find_library, but also marks the resulting var as
@ -273,19 +279,20 @@ if(NOT HAVE_GETOPT_H)
set(GETOPT_LIBRARIES getopt) set(GETOPT_LIBRARIES getopt)
endif() endif()
# TinyXML if (NOT C4GROUP_TOOL_ONLY)
find_package(TinyXML) # TinyXML
if(NOT TinyXML_FOUND) find_package(TinyXML)
add_subdirectory(thirdparty/tinyxml) if(NOT TinyXML_FOUND)
set_property(TARGET tinyxml PROPERTY FOLDER "Third-party libraries") add_subdirectory(thirdparty/tinyxml)
set(TinyXML_INCLUDE_DIRS thirdparty/tinyxml) set_property(TARGET tinyxml PROPERTY FOLDER "Third-party libraries")
set(TinyXML_LIBRARIES tinyxml) set(TinyXML_INCLUDE_DIRS thirdparty/tinyxml)
set(TinyXML_FOUND TRUE) set(TinyXML_LIBRARIES tinyxml)
set(TinyXML_FOUND TRUE)
endif()
include_directories(SYSTEM ${TinyXML_INCLUDE_DIRS})
endif() endif()
include_directories(SYSTEM ${TinyXML_INCLUDE_DIRS}) if(NOT HEADLESS_ONLY AND NOT C4GROUP_TOOL_ONLY)
if(NOT HEADLESS_ONLY)
find_package(OpenGL) find_package(OpenGL)
find_package(GLEW REQUIRED) find_package(GLEW REQUIRED)
include_directories(${GLEW_INCLUDE_DIRS}) include_directories(${GLEW_INCLUDE_DIRS})
@ -297,24 +304,26 @@ if(NOT HEADLESS_ONLY)
CHECK_CXX_SOURCE_COMPILES("#include <GL/glew.h>\nvoid GLAPIENTRY OpenGLDebugProc(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const char* message, const void* userParam) {}\nint main() { GLDEBUGPROCARB proc = &OpenGLDebugProc; }" GLDEBUGPROCARB_USERPARAM_IS_CONST) CHECK_CXX_SOURCE_COMPILES("#include <GL/glew.h>\nvoid GLAPIENTRY OpenGLDebugProc(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const char* message, const void* userParam) {}\nint main() { GLDEBUGPROCARB proc = &OpenGLDebugProc; }" GLDEBUGPROCARB_USERPARAM_IS_CONST)
endif() endif()
if(UNIX AND NOT APPLE) if(NOT C4GROUP_TOOL_ONLY)
FINDLIB(X11_LIBRARIES X11) if(UNIX AND NOT APPLE)
FINDLIB(X11_LIBRARIES X11)
set(Backward_DIR thirdparty/backward-cpp) set(Backward_DIR thirdparty/backward-cpp)
find_package(Backward) find_package(Backward)
if(Backward_FOUND) if(Backward_FOUND)
set(HAVE_BACKWARD 1) set(HAVE_BACKWARD 1)
endif() endif()
if(NOT DEFINED PROC_SELF_EXE) if(NOT DEFINED PROC_SELF_EXE)
macro(FIND_PROC_SELF_EXE path) macro(FIND_PROC_SELF_EXE path)
if(EXISTS ${path}) if(EXISTS ${path})
set(PROC_SELF_EXE ${path} CACHE FILEPATH "Path to /proc/self/exe (Linux) or equivalent") set(PROC_SELF_EXE ${path} CACHE FILEPATH "Path to /proc/self/exe (Linux) or equivalent")
endif() endif()
endmacro() endmacro()
FIND_PROC_SELF_EXE(/proc/self/exe) # Linux FIND_PROC_SELF_EXE(/proc/self/exe) # Linux
FIND_PROC_SELF_EXE(/proc/curproc/file) # FreeBSD FIND_PROC_SELF_EXE(/proc/curproc/file) # FreeBSD
FIND_PROC_SELF_EXE(/proc/curproc/exe) # NetBSD FIND_PROC_SELF_EXE(/proc/curproc/exe) # NetBSD
endif()
endif() endif()
endif() endif()
@ -326,71 +335,75 @@ if (WIN32)
set(HAVE_DBGHELP ${DBGHELP_FOUND}) set(HAVE_DBGHELP ${DBGHELP_FOUND})
endif() endif()
find_package(Upnp) if(NOT C4GROUP_TOOL_ONLY)
if(UPNP_FOUND) find_package(Upnp)
include_directories(SYSTEM ${UPNP_INCLUDE_DIR}) if(UPNP_FOUND)
endif() include_directories(SYSTEM ${UPNP_INCLUDE_DIR})
endif()
find_package(Readline) find_package(Readline)
if(READLINE_FOUND) if(READLINE_FOUND)
include_directories(SYSTEM ${READLINE_INCLUDE_DIR}) include_directories(SYSTEM ${READLINE_INCLUDE_DIR})
endif() endif()
SET(HAVE_LIBREADLINE ${READLINE_FOUND} CACHE INTERNAL "libreadline available") SET(HAVE_LIBREADLINE ${READLINE_FOUND} CACHE INTERNAL "libreadline available")
find_package(GTK3 COMPONENTS gthread gio gobject glib OPTIONAL_COMPONENTS gtksourceview) find_package(GTK3 COMPONENTS gthread gio gobject glib OPTIONAL_COMPONENTS gtksourceview)
# Select an audio library # Select an audio library
find_package("Audio") find_package("Audio")
if(Audio_FOUND) if(Audio_FOUND)
include_directories(${Audio_INCLUDE_DIRS}) include_directories(${Audio_INCLUDE_DIRS})
endif() endif()
# SDL # SDL
if(USE_SDL_MAINLOOP) if(USE_SDL_MAINLOOP)
find_package(SDL2 REQUIRED) find_package(SDL2 REQUIRED)
else() else()
# for gamepads # for gamepads
find_package(SDL2) find_package(SDL2)
endif() endif()
set(HAVE_SDL ${SDL2_FOUND}) set(HAVE_SDL ${SDL2_FOUND})
include_directories(SYSTEM ${SDL2_INCLUDE_DIRS}) include_directories(SYSTEM ${SDL2_INCLUDE_DIRS})
# Qt5 for editor # Qt5 for editor
find_path(Qt5DIR qt.pro PATHS ${CMAKE_ADDITIONAL_DEPS_PATH}/qt-5.5.0) find_path(Qt5DIR qt.pro PATHS ${CMAKE_ADDITIONAL_DEPS_PATH}/qt-5.5.0)
find_package(Qt5Widgets 5.4 PATHS ${Qt5DIR}/qtbase/lib/cmake/Qt5Widgets) find_package(Qt5Widgets 5.4 PATHS ${Qt5DIR}/qtbase/lib/cmake/Qt5Widgets)
if(Qt5Widgets_FOUND) if(Qt5Widgets_FOUND)
SET(WITH_QT_EDITOR ${Qt5Widgets_FOUND} "Qt editor dialogues available") SET(WITH_QT_EDITOR ${Qt5Widgets_FOUND} "Qt editor dialogues available")
set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOUIC ON)
# As moc files are generated in the binary dir, tell CMake # As moc files are generated in the binary dir, tell CMake
# to always look for includes there: # to always look for includes there:
set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_INCLUDE_CURRENT_DIR ON)
else() else()
message("Qt5Widgets not found. Building openclonk without editor.") message("Qt5Widgets not found. Building openclonk without editor.")
UNSET(WITH_QT_EDITOR) UNSET(WITH_QT_EDITOR)
endif()
endif() endif()
############################################################################ ############################################################################
# generated source files # generated source files
############################################################################ ############################################################################
find_program(GLIB_COMPILE_RESOURCES glib-compile-resources) if(NOT C4GROUP_TOOL_ONLY)
find_program(GLIB_COMPILE_RESOURCES glib-compile-resources)
add_custom_command( add_custom_command(
OUTPUT mape-resource.c OUTPUT mape-resource.c
COMMAND COMMAND
${GLIB_COMPILE_RESOURCES} "--internal" "--generate" ${GLIB_COMPILE_RESOURCES} "--internal" "--generate"
"--target" "mape-resource.c" "--target" "mape-resource.c"
"--sourcedir" ${CMAKE_CURRENT_SOURCE_DIR}/src/res "--sourcedir" ${CMAKE_CURRENT_SOURCE_DIR}/src/res
"${CMAKE_CURRENT_SOURCE_DIR}/src/res/mape.xml" "${CMAKE_CURRENT_SOURCE_DIR}/src/res/mape.xml"
MAIN_DEPENDENCY src/res/mape.xml MAIN_DEPENDENCY src/res/mape.xml
DEPENDS DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/src/res/ocd.ico ${CMAKE_CURRENT_SOURCE_DIR}/src/res/ocd.ico
${CMAKE_CURRENT_SOURCE_DIR}/src/res/ocf.ico ${CMAKE_CURRENT_SOURCE_DIR}/src/res/ocf.ico
${CMAKE_CURRENT_SOURCE_DIR}/src/res/ocg.ico ${CMAKE_CURRENT_SOURCE_DIR}/src/res/ocg.ico
${CMAKE_CURRENT_SOURCE_DIR}/src/res/ocm.ico ${CMAKE_CURRENT_SOURCE_DIR}/src/res/ocm.ico
${CMAKE_CURRENT_SOURCE_DIR}/src/res/ocs.ico ${CMAKE_CURRENT_SOURCE_DIR}/src/res/ocs.ico
VERBATIM VERBATIM
) )
endif()
############################################################################ ############################################################################
# Mac OS bundle setup # Mac OS bundle setup
@ -1174,7 +1187,7 @@ target_link_libraries(c4script
${GETOPT_LIBRARIES} ${GETOPT_LIBRARIES}
) )
if(NOT HEADLESS_ONLY) if(NOT HEADLESS_ONLY AND NOT C4GROUP_TOOL_ONLY)
add_executable(openclonk WIN32 MACOSX_BUNDLE add_executable(openclonk WIN32 MACOSX_BUNDLE
${OC_SYSTEM_SOURCES} ${OC_SYSTEM_SOURCES}
${OC_GUI_SOURCES} ${OC_GUI_SOURCES}
@ -1214,40 +1227,42 @@ if(NOT HEADLESS_ONLY)
endif() endif()
endif() endif()
add_executable(openclonk-server if(NOT C4GROUP_TOOL_ONLY)
${OC_SYSTEM_SOURCES} add_executable(openclonk-server
${OC_CLONK_SOURCES} ${OC_SYSTEM_SOURCES}
src/platform/C4AppT.cpp ${OC_CLONK_SOURCES}
src/platform/C4StdInProc.cpp src/platform/C4AppT.cpp
src/platform/C4StdInProc.h src/platform/C4StdInProc.cpp
) src/platform/C4StdInProc.h
target_compile_definitions(openclonk-server PRIVATE "USE_CONSOLE") )
target_compile_definitions(openclonk-server PRIVATE "USE_CONSOLE")
target_link_libraries(openclonk-server target_link_libraries(openclonk-server
${PNG_LIBRARIES} ${PNG_LIBRARIES}
${JPEG_LIBRARIES} ${JPEG_LIBRARIES}
${EXECINFO_LIBRARY} ${EXECINFO_LIBRARY}
${SDL2_LIBRARIES} ${SDL2_LIBRARIES}
${READLINE_LIBRARIES} ${READLINE_LIBRARIES}
${Audio_LIBRARIES} ${Audio_LIBRARIES}
${GETOPT_LIBRARIES} ${GETOPT_LIBRARIES}
${TinyXML_LIBRARIES} ${TinyXML_LIBRARIES}
${DBGHELP_LIBRARIES} ${DBGHELP_LIBRARIES}
libmisc libmisc
libc4script libc4script
libopenclonk libopenclonk
) )
if(UPNP_FOUND) if(UPNP_FOUND)
target_link_libraries(openclonk-server ${UPNP_LIBRARIES}) target_link_libraries(openclonk-server ${UPNP_LIBRARIES})
endif() endif()
if(USE_COCOA) if(USE_COCOA)
target_link_libraries(openclonk-server "-framework Cocoa") target_link_libraries(openclonk-server "-framework Cocoa")
endif() endif()
if(HAVE_BACKWARD) if(HAVE_BACKWARD)
target_link_libraries(openclonk-server Backward::Backward) target_link_libraries(openclonk-server Backward::Backward)
endif()
endif() endif()
if(GTK3_FOUND AND GTK3_gtksourceview_FOUND AND NOT HEADLESS_ONLY) if(GTK3_FOUND AND GTK3_gtksourceview_FOUND AND NOT HEADLESS_ONLY AND NOT C4GROUP_TOOL_ONLY)
add_executable(mape ${MAPE_BASE_SOURCES} ${MAPE_SOURCES}) add_executable(mape ${MAPE_BASE_SOURCES} ${MAPE_SOURCES})
target_compile_options(mape PRIVATE ${GTK3_COMPILE_DEFINITIONS} ${GTK3_gtksourceview_COMPILE_DEFINITIONS}) target_compile_options(mape PRIVATE ${GTK3_COMPILE_DEFINITIONS} ${GTK3_gtksourceview_COMPILE_DEFINITIONS})
set_property(TARGET mape PROPERTY FOLDER "Utilities") set_property(TARGET mape PROPERTY FOLDER "Utilities")
@ -1274,17 +1289,19 @@ target_link_libraries(c4group
libmisc libmisc
) )
add_executable(netpuncher EXCLUDE_FROM_ALL if(NOT C4GROUP_TOOL_ONLY)
src/netpuncher/C4PuncherHash.h add_executable(netpuncher EXCLUDE_FROM_ALL
src/netpuncher/main.cpp src/netpuncher/C4PuncherHash.h
) src/netpuncher/main.cpp
)
target_link_libraries(netpuncher target_link_libraries(netpuncher
libmisc libmisc
) )
if(WIN32) if(WIN32)
target_link_libraries(libmisc iphlpapi ws2_32) target_link_libraries(libmisc iphlpapi ws2_32)
endif()
endif() endif()
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:Debug>:_DEBUG>) set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:Debug>:_DEBUG>)
@ -1301,7 +1318,7 @@ if (APPLE AND NOT CMAKE_GENERATOR STREQUAL "Xcode")
set(EXECUTABLE_NAME openclonk) set(EXECUTABLE_NAME openclonk)
endif() endif()
if(NOT HEADLESS_ONLY) if(NOT HEADLESS_ONLY AND NOT C4GROUP_TOOL_ONLY)
set_target_properties(openclonk PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/src/res/Info.plist") set_target_properties(openclonk PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/src/res/Info.plist")
endif() endif()
@ -1387,7 +1404,9 @@ endif()
############################################################################ ############################################################################
# Miscellaneous # Miscellaneous
############################################################################ ############################################################################
add_subdirectory(tests) if(NOT C4GROUP_TOOL_ONLY)
add_subdirectory(tests)
endif()
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
@ -1435,18 +1454,20 @@ IF(WITH_AUTOMATIC_UPDATE)
INSTALL(CODE "MESSAGE(SEND_ERROR \"Installation is only supported for WITH_AUTOMATIC_UPDATE disabled\")") INSTALL(CODE "MESSAGE(SEND_ERROR \"Installation is only supported for WITH_AUTOMATIC_UPDATE disabled\")")
ENDIF() ENDIF()
# hack to build the data on install, see if(NOT C4GROUP_TOOL_ONLY)
# http://public.kitware.com/Bug/view.php?id=8438 # hack to build the data on install, see
add_custom_target(data) # http://public.kitware.com/Bug/view.php?id=8438
set_property(TARGET data PROPERTY FOLDER "Setup") add_custom_target(data)
install( set_property(TARGET data PROPERTY FOLDER "Setup")
CODE install(
"execute_process( CODE
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target data "execute_process(
)" COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target data
) )"
)
endif()
if (NOT APPLE) if (NOT APPLE AND NOT C4GROUP_TOOL_ONLY)
install( install(
FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc32.png FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc32.png
DESTINATION share/icons/hicolor/32x32/apps DESTINATION share/icons/hicolor/32x32/apps
@ -1494,71 +1515,75 @@ ELSE()
SET(native_c4group c4group) SET(native_c4group c4group)
ENDIF() ENDIF()
# NOTE: The scripts that does the autobuilds and ultimately the automated if(NOT C4GROUP_TOOL_ONLY)
# releases as well do keep their own list of group files around currently. # NOTE: The scripts that does the autobuilds and ultimately the automated
# So if you change anything here, change it in the release scripts as well. # releases as well do keep their own list of group files around currently.
# See openclonk-release-scripts.git/groupcontent.py # So if you change anything here, change it in the release scripts as well.
set(OC_C4GROUPS # See openclonk-release-scripts.git/groupcontent.py
Graphics.ocg set(OC_C4GROUPS
Material.ocg Graphics.ocg
Sound.ocg Material.ocg
System.ocg Sound.ocg
Objects.ocd System.ocg
Decoration.ocd Objects.ocd
Arena.ocf Decoration.ocd
Parkour.ocf Arena.ocf
Defense.ocf Parkour.ocf
Missions.ocf Defense.ocf
Tutorials.ocf Missions.ocf
Worlds.ocf Tutorials.ocf
) Worlds.ocf
if(APPLE) )
list(APPEND OC_C4GROUPS Music.ocg) if(APPLE)
endif() list(APPEND OC_C4GROUPS Music.ocg)
foreach(group ${OC_C4GROUPS})
if (APPLE)
if (CMAKE_GENERATOR STREQUAL Xcode)
add_custom_command(TARGET openclonk
POST_BUILD COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/tools/osx_pack_gamedata.sh"
"$<TARGET_FILE:${native_c4group}>"
"${CMAKE_CURRENT_SOURCE_DIR}/planet/${group}"
# leave out third parameter here so the script can figure out Xcode-ish paths as usual
DEPENDS "${native_c4group}"
)
else()
add_custom_command(TARGET openclonk
POST_BUILD COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/tools/osx_pack_gamedata.sh"
"$<TARGET_FILE:${native_c4group}>"
"${CMAKE_CURRENT_SOURCE_DIR}/planet/${group}"
"${CMAKE_CURRENT_BINARY_DIR}/openclonk.app/Contents/Resources"
DEPENDS "${native_c4group}"
)
endif()
else()
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${group}
COMMAND "${native_c4group}" ARGS "${CMAKE_CURRENT_SOURCE_DIR}/planet/${group}" -t "${CMAKE_CURRENT_BINARY_DIR}/${group}"
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/planet/${group}
DEPENDS "${native_c4group}"
VERBATIM
)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${group} DESTINATION share/games/openclonk)
endif() endif()
endforeach()
foreach(group ${OC_C4GROUPS})
if (APPLE)
if (CMAKE_GENERATOR STREQUAL Xcode)
add_custom_command(TARGET openclonk
POST_BUILD COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/tools/osx_pack_gamedata.sh"
"$<TARGET_FILE:${native_c4group}>"
"${CMAKE_CURRENT_SOURCE_DIR}/planet/${group}"
# leave out third parameter here so the script can figure out Xcode-ish paths as usual
DEPENDS "${native_c4group}"
)
else()
add_custom_command(TARGET openclonk
POST_BUILD COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/tools/osx_pack_gamedata.sh"
"$<TARGET_FILE:${native_c4group}>"
"${CMAKE_CURRENT_SOURCE_DIR}/planet/${group}"
"${CMAKE_CURRENT_BINARY_DIR}/openclonk.app/Contents/Resources"
DEPENDS "${native_c4group}"
)
endif()
else()
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${group}
COMMAND "${native_c4group}" ARGS "${CMAKE_CURRENT_SOURCE_DIR}/planet/${group}" -t "${CMAKE_CURRENT_BINARY_DIR}/${group}"
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/planet/${group}
DEPENDS "${native_c4group}"
VERBATIM
)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${group} DESTINATION share/games/openclonk)
endif()
endforeach()
endif()
if(NOT APPLE) if(NOT APPLE)
if(NOT HEADLESS_ONLY) if(NOT HEADLESS_ONLY)
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/planet/Music.ocg DESTINATION share/games/openclonk) install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/planet/Music.ocg DESTINATION share/games/openclonk)
endif() endif()
# group files (game data) if(NOT C4GROUP_TOOL_ONLY)
add_custom_target(groups DEPENDS ${OC_C4GROUPS}) # group files (game data)
set_property(TARGET groups PROPERTY FOLDER "Setup") add_custom_target(groups DEPENDS ${OC_C4GROUPS})
add_dependencies(data groups) set_property(TARGET groups PROPERTY FOLDER "Setup")
add_dependencies(data groups)
endif()
# Install binaries # Install binaries
install(TARGETS c4group DESTINATION bin) install(TARGETS c4group DESTINATION bin)
endif() endif()
if(NOT HEADLESS_ONLY) if(NOT HEADLESS_ONLY AND NOT C4GROUP_TOOL_ONLY)
if(NOT APPLE) if(NOT APPLE)
# Install new files # Install new files
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/openclonk.desktop DESTINATION share/applications) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/openclonk.desktop DESTINATION share/applications)
@ -1584,26 +1609,28 @@ endif()
# setup_openclonk.exe # setup_openclonk.exe
############################################################################ ############################################################################
find_program(MAKENSIS makensis PATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\NSIS]) if(NOT C4GROUP_TOOL_ONLY)
find_program(MAKENSIS makensis PATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\NSIS])
if(NOT HEADLESS_ONLY) if(NOT HEADLESS_ONLY)
add_custom_command( add_custom_command(
OUTPUT setup_openclonk.exe OUTPUT setup_openclonk.exe
COMMAND ${MAKENSIS} -NOCD -DSRCDIR=${CMAKE_CURRENT_SOURCE_DIR} -DPROGRAMFILES=$PROGRAMFILES "-DPRODUCT_NAME=${C4ENGINENAME}" "-DPRODUCT_COMPANY=${C4PROJECT}" "-DCLONK=$<TARGET_FILE_DIR:openclonk>\\$<TARGET_FILE_NAME:openclonk>" "-DC4GROUP=$<TARGET_FILE_DIR:c4group>\\$<TARGET_FILE_NAME:c4group>" ${CMAKE_CURRENT_SOURCE_DIR}/tools/install/oc.nsi "-XOutFile setup_openclonk.exe" COMMAND ${MAKENSIS} -NOCD -DSRCDIR=${CMAKE_CURRENT_SOURCE_DIR} -DPROGRAMFILES=$PROGRAMFILES "-DPRODUCT_NAME=${C4ENGINENAME}" "-DPRODUCT_COMPANY=${C4PROJECT}" "-DCLONK=$<TARGET_FILE_DIR:openclonk>\\$<TARGET_FILE_NAME:openclonk>" "-DC4GROUP=$<TARGET_FILE_DIR:c4group>\\$<TARGET_FILE_NAME:c4group>" ${CMAKE_CURRENT_SOURCE_DIR}/tools/install/oc.nsi "-XOutFile setup_openclonk.exe"
MAIN_DEPENDENCY MAIN_DEPENDENCY
${CMAKE_CURRENT_SOURCE_DIR}/tools/install/oc.nsi ${CMAKE_CURRENT_SOURCE_DIR}/tools/install/oc.nsi
DEPENDS DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/tools/install/header.bmp ${CMAKE_CURRENT_SOURCE_DIR}/tools/install/header.bmp
${CMAKE_CURRENT_SOURCE_DIR}/tools/install/inst.ico ${CMAKE_CURRENT_SOURCE_DIR}/tools/install/inst.ico
${CMAKE_CURRENT_SOURCE_DIR}/tools/install/uninst.ico ${CMAKE_CURRENT_SOURCE_DIR}/tools/install/uninst.ico
${OC_C4GROUPS} openclonk c4group ${OC_C4GROUPS} openclonk c4group
VERBATIM VERBATIM
) )
add_custom_target(setup add_custom_target(setup
DEPENDS setup_openclonk.exe groups DEPENDS setup_openclonk.exe groups
) )
set_property(TARGET setup PROPERTY FOLDER "Setup") set_property(TARGET setup PROPERTY FOLDER "Setup")
endif()
endif() endif()
############################################################################ ############################################################################