CMake: Have headless build as a project instead of a separate config

Hardly anyone ever tests the headless build, because it requires you to
run CMake a second time with -DUSE_CONSOLE=On. So now it's an included
project which you'll get whether you want it or not.

I'm well aware that this could be solved more nicely, and that we could
be splitting unchanged files out into a separate support library, but
that's left for a later date.
shapetextures
Nicolas Hake 2015-12-15 20:18:25 +01:00
parent c767ad6931
commit da51a2d8af
4 changed files with 74 additions and 37 deletions

View File

@ -47,10 +47,9 @@ endfunction()
############################################################################ ############################################################################
include(CMakeDependentOption) include(CMakeDependentOption)
option(PROJECT_FOLDERS "Put source files into subfolders in project file" ON) option(PROJECT_FOLDERS "Put source files into subfolders in project file" ON)
option(USE_CONSOLE "Build dedicated server" OFF) option(USE_SDL_MAINLOOP "Use SDL to create windows etc." OFF)
CMAKE_DEPENDENT_OPTION(USE_SDL_MAINLOOP "Use SDL to create windows etc." OFF "NOT USE_CONSOLE" OFF)
CMAKE_DEPENDENT_OPTION(USE_X11 "Use X11 to create windows etc." ON CMAKE_DEPENDENT_OPTION(USE_X11 "Use X11 to create windows etc." ON
"UNIX AND NOT APPLE AND NOT USE_SDL_MAINLOOP AND NOT USE_CONSOLE" OFF) "UNIX AND NOT APPLE AND NOT USE_SDL_MAINLOOP" OFF)
CMAKE_DEPENDENT_OPTION(USE_GTK "Use GTK for the developer mode" ON "USE_X11" OFF) CMAKE_DEPENDENT_OPTION(USE_GTK "Use GTK for the developer mode" ON "USE_X11" OFF)
CMAKE_DEPENDENT_OPTION(USE_COCOA "Use Apple Cocoa for the developer mode and the windows." ON "APPLE" OFF) CMAKE_DEPENDENT_OPTION(USE_COCOA "Use Apple Cocoa for the developer mode and the windows." ON "APPLE" 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)
@ -120,7 +119,8 @@ endif()
############################################################################ ############################################################################
# OC_CLONK_SOURCES: Sources for OpenClonk that are needed by every build. # OC_CLONK_SOURCES: Sources for OpenClonk that are needed by every build.
# OC_SYSTEM_SOURCES: Sources for OpenClonk that are only needed by specific # OC_SYSTEM_SOURCES: Sources for OpenClonk that are only needed by specific
# configurations. # platforms.
# OC_GUI_SOURCES: Sources that are only needed by GUI applications.
set(OC_CLONK_SOURCES set(OC_CLONK_SOURCES
src/C4Globals.cpp src/C4Globals.cpp
src/c4group/C4Components.h src/c4group/C4Components.h
@ -591,6 +591,7 @@ if(APPLE)
src/platform/C4AppDelegate.h src/platform/C4AppDelegate.h
src/platform/C4AppDelegate.mm src/platform/C4AppDelegate.mm
src/platform/StdSchedulerMac.mm src/platform/StdSchedulerMac.mm
src/platform/ObjectiveCAssociated.h
) )
else() else()
list(APPEND OC_SYSTEM_SOURCES list(APPEND OC_SYSTEM_SOURCES
@ -600,6 +601,8 @@ endif()
if(WIN32) if(WIN32)
list(APPEND OC_SYSTEM_SOURCES list(APPEND OC_SYSTEM_SOURCES
src/platform/C4CrashHandlerWin32.cpp src/platform/C4CrashHandlerWin32.cpp
)
list(APPEND OC_GUI_SOURCES
src/res/engine.rc src/res/engine.rc
src/res/resource.h src/res/resource.h
) )
@ -644,7 +647,7 @@ if(USE_GTK)
${CMAKE_CURRENT_SOURCE_DIR}/src/res/NoIft_Trans.png ${CMAKE_CURRENT_SOURCE_DIR}/src/res/NoIft_Trans.png
VERBATIM VERBATIM
) )
list(APPEND OC_CLONK_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/editor-icons.h) list(APPEND OC_GUI_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/editor-icons.h)
add_custom_command( add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/oc-icon.h OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/oc-icon.h
@ -656,9 +659,9 @@ if(USE_GTK)
${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc.ico ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc.ico
VERBATIM VERBATIM
) )
list(APPEND OC_CLONK_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/oc-icon.h) list(APPEND OC_GUI_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/oc-icon.h)
list(APPEND OC_SYSTEM_SOURCES list(APPEND OC_GUI_SOURCES
src/editor/C4ConsoleGTK.cpp src/editor/C4ConsoleGTK.cpp
src/editor/C4ConsoleGTKDlg.cpp src/editor/C4ConsoleGTKDlg.cpp
src/editor/C4ConsoleGTKDlg.h src/editor/C4ConsoleGTKDlg.h
@ -667,23 +670,19 @@ if(USE_GTK)
src/platform/C4WindowGTK.cpp src/platform/C4WindowGTK.cpp
) )
elseif(USE_SDL_MAINLOOP) elseif(USE_SDL_MAINLOOP)
list(APPEND OC_SYSTEM_SOURCES list(APPEND OC_GUI_SOURCES
src/platform/C4AppSDL.cpp src/platform/C4AppSDL.cpp
src/platform/C4WindowSDL.cpp src/platform/C4WindowSDL.cpp
) )
elseif(USE_CONSOLE)
list(APPEND OC_SYSTEM_SOURCES
src/platform/C4AppT.cpp
)
elseif(WIN32) elseif(WIN32)
list(APPEND OC_SYSTEM_SOURCES list(APPEND OC_GUI_SOURCES
src/editor/C4ConsoleWin32.cpp src/editor/C4ConsoleWin32.cpp
src/platform/C4WindowWin32.cpp src/platform/C4WindowWin32.cpp
src/platform/StdJoystick.cpp src/platform/StdJoystick.cpp
src/platform/StdJoystick.h src/platform/StdJoystick.h
) )
elseif(USE_COCOA) elseif(USE_COCOA)
list(APPEND OC_SYSTEM_SOURCES list(APPEND OC_GUI_SOURCES
src/editor/C4ConsoleCocoa.mm src/editor/C4ConsoleCocoa.mm
src/platform/C4AppMac.mm src/platform/C4AppMac.mm
src/platform/C4WindowMac.mm src/platform/C4WindowMac.mm
@ -696,11 +695,10 @@ elseif(USE_COCOA)
src/platform/CocoaKeycodeMap.h src/platform/CocoaKeycodeMap.h
src/editor/C4EditorWindowController.h src/editor/C4EditorWindowController.h
src/editor/C4EditorWindowController.mm src/editor/C4EditorWindowController.mm
src/platform/ObjectiveCAssociated.h
) )
endif() endif()
if(WITH_AUTOMATIC_UPDATE) if(WITH_AUTOMATIC_UPDATE)
list(APPEND OC_CLONK_SOURCES list(APPEND OC_GUI_SOURCES
src/gui/C4UpdateDlg.cpp src/gui/C4UpdateDlg.cpp
src/gui/C4UpdateDlg.h src/gui/C4UpdateDlg.h
) )
@ -796,10 +794,8 @@ if(MSVC)
endif() endif()
endif() endif()
if(NOT USE_CONSOLE) SET(JPEG_NAMES ${JPEG_NAMES} libjpeg jpeg-static)
SET(JPEG_NAMES ${JPEG_NAMES} libjpeg jpeg-static) find_package(JPEG REQUIRED)
find_package(JPEG REQUIRED)
endif()
find_package(PNG REQUIRED) find_package(PNG REQUIRED)
find_package(ZLIB REQUIRED) find_package(ZLIB REQUIRED)
include_directories(${JPEG_INCLUDE_DIR} ${PNG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR}) include_directories(${JPEG_INCLUDE_DIR} ${PNG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR})
@ -811,10 +807,8 @@ else()
SET(HAVE_PTHREAD ${CMAKE_USE_PTHREADS_INIT} CACHE INTERNAL "libpthread available") SET(HAVE_PTHREAD ${CMAKE_USE_PTHREADS_INIT} CACHE INTERNAL "libpthread available")
endif() endif()
if(NOT USE_CONSOLE) find_package(Freetype REQUIRED)
find_package(Freetype REQUIRED) include_directories(${FREETYPE_INCLUDE_DIRS})
include_directories(${FREETYPE_INCLUDE_DIRS})
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
# advanced so it doesn't show in GUIs by default # advanced so it doesn't show in GUIs by default
@ -858,7 +852,7 @@ endif()
# Set GTK link directory. This needs to be done before add_executable, # Set GTK link directory. This needs to be done before add_executable,
# otherwise the path is not used for linking clonk # otherwise the path is not used for linking clonk
find_package(GTK3 COMPONENTS gthread gio gobject OPTIONAL_COMPONENTS gtksourceview) find_package(GTK3 COMPONENTS gthread gio gobject glib OPTIONAL_COMPONENTS gtksourceview)
if(USE_GTK) if(USE_GTK)
link_directories(${GTK3_LIBRARY_DIRS}) link_directories(${GTK3_LIBRARY_DIRS})
endif() endif()
@ -932,7 +926,7 @@ if(APPLE)
${OC_BUNDLE_RESOURCES} ${OC_BUNDLE_RESOURCES}
PROPERTIES MACOSX_PACKAGE_LOCATION Resources PROPERTIES MACOSX_PACKAGE_LOCATION Resources
) )
list(APPEND OC_SYSTEM_SOURCES ${OC_BUNDLE_RESOURCES}) list(APPEND OC_GUI_SOURCES ${OC_BUNDLE_RESOURCES})
endif() endif()
@ -942,9 +936,17 @@ endif()
add_definitions(-DHAVE_CONFIG_H) add_definitions(-DHAVE_CONFIG_H)
add_executable(openclonk WIN32 MACOSX_BUNDLE add_executable(openclonk WIN32 MACOSX_BUNDLE
${OC_SYSTEM_SOURCES} ${OC_SYSTEM_SOURCES}
${OC_GUI_SOURCES}
${OC_CLONK_SOURCES} ${OC_CLONK_SOURCES}
) )
add_executable(openclonk-server
${OC_SYSTEM_SOURCES}
${OC_CLONK_SOURCES}
src/platform/C4AppT.cpp
)
set_property(TARGET openclonk-server APPEND PROPERTY COMPILE_DEFINITIONS "USE_CONSOLE")
if(GTK3_FOUND AND GTK3_gtksourceview_FOUND) if(GTK3_FOUND AND GTK3_gtksourceview_FOUND)
add_executable(mape ${MAPE_BASE_SOURCES} ${MAPE_SOURCES}) add_executable(mape ${MAPE_BASE_SOURCES} ${MAPE_SOURCES})
set_property(TARGET mape APPEND PROPERTY COMPILE_FLAGS ${GTK3_COMPILE_DEFINITIONS}) set_property(TARGET mape APPEND PROPERTY COMPILE_FLAGS ${GTK3_COMPILE_DEFINITIONS})
@ -1054,12 +1056,22 @@ target_link_libraries(openclonk
libmisc libmisc
) )
target_link_libraries(openclonk-server
${PNG_LIBRARIES}
${JPEG_LIBRARIES}
${EXECINFO_LIBRARY}
libc4script
libmisc
)
if (SDL_FOUND) if (SDL_FOUND)
target_link_libraries(openclonk ${SDL_LIBRARY}) target_link_libraries(openclonk ${SDL_LIBRARY})
endif() endif()
if(Audio_FOUND) if(Audio_FOUND)
target_link_libraries(openclonk ${Audio_LIBRARIES}) target_link_libraries(openclonk ${Audio_LIBRARIES})
target_link_libraries(openclonk-server ${Audio_LIBRARIES})
include_directories(${Audio_INCLUDE_DIRS}) include_directories(${Audio_INCLUDE_DIRS})
endif() endif()
@ -1083,8 +1095,8 @@ if(HAVE_PTHREAD)
pthread pthread
) )
endif() endif()
if(USE_CONSOLE) if(HAVE_LIBREADLINE)
target_link_libraries(openclonk target_link_libraries(openclonk-server
${READLINE_LIBRARIES} ${READLINE_LIBRARIES}
) )
endif() endif()
@ -1133,6 +1145,7 @@ if(MSVC)
endforeach() endforeach()
endfunction() endfunction()
oc_set_target_names(openclonk) oc_set_target_names(openclonk)
oc_set_target_names(openclonk-server)
oc_set_target_names(c4group) oc_set_target_names(c4group)
oc_set_target_names(c4script) oc_set_target_names(c4script)
@ -1248,11 +1261,13 @@ if(NOT HAVE_GETOPT_H)
include_directories(SYSTEM thirdparty/getopt) include_directories(SYSTEM thirdparty/getopt)
add_subdirectory(thirdparty/getopt) add_subdirectory(thirdparty/getopt)
target_link_libraries(openclonk getopt) target_link_libraries(openclonk getopt)
target_link_libraries(openclonk-server getopt)
elseif(MINGW) elseif(MINGW)
# Link libiberty which my contain getopt with mingw # Link libiberty which my contain getopt with mingw
FINDLIB(iberty_LIBRARIES iberty) FINDLIB(iberty_LIBRARIES iberty)
if(iberty_LIBRARIES) if(iberty_LIBRARIES)
target_link_libraries(openclonk iberty) target_link_libraries(openclonk iberty)
target_link_libraries(openclonk-server iberty)
endif() endif()
endif() endif()
@ -1269,11 +1284,13 @@ endif()
include_directories(SYSTEM ${TinyXML_INCLUDE_DIRS}) include_directories(SYSTEM ${TinyXML_INCLUDE_DIRS})
target_link_libraries(openclonk ${TinyXML_LIBRARIES}) target_link_libraries(openclonk ${TinyXML_LIBRARIES})
target_link_libraries(openclonk-server ${TinyXML_LIBRARIES})
if(WIN32) if(WIN32)
find_package(DbgHelp) find_package(DbgHelp)
if(DBGHELP_FOUND) if(DBGHELP_FOUND)
target_link_libraries(openclonk ${DBGHELP_LIBRARIES}) target_link_libraries(openclonk ${DBGHELP_LIBRARIES})
target_link_libraries(openclonk-server ${DBGHELP_LIBRARIES})
include_directories(${DBGHELP_INCLUDE_DIR}) include_directories(${DBGHELP_INCLUDE_DIR})
endif() endif()
set(HAVE_DBGHELP ${DBGHELP_FOUND}) set(HAVE_DBGHELP ${DBGHELP_FOUND})
@ -1301,6 +1318,11 @@ if(USE_GTK)
target_link_libraries(openclonk target_link_libraries(openclonk
${GTK3_LIBRARIES} ${GTK3_LIBRARIES}
) )
# We really only need Glib here, but FindGTK3.cmake doesn't currently set
# a variable for that if it's using pkg-config
target_link_libraries(openclonk-server
${GTK3_glib_LIBRARIES}
)
endif() endif()
if(USE_X11) if(USE_X11)
FINDLIB(X11_LIBRARIES X11) FINDLIB(X11_LIBRARIES X11)
@ -1320,15 +1342,18 @@ if (WIN32)
FINDLIB(wavifil32_LIBRARIES wavifil32) FINDLIB(wavifil32_LIBRARIES wavifil32)
if (VFW32_LIBRARIES) if (VFW32_LIBRARIES)
target_link_libraries(openclonk vfw32) target_link_libraries(openclonk vfw32)
target_link_libraries(openclonk-server vfw32)
set(HAVE_VFW32 TRUE) set(HAVE_VFW32 TRUE)
elseif(wavifil32_LIBRARIES) elseif(wavifil32_LIBRARIES)
target_link_libraries(openclonk wavifil32 msvfw32) target_link_libraries(openclonk wavifil32 msvfw32)
target_link_libraries(openclonk-server wavifil32 msvfw32)
set(HAVE_VFW32 TRUE) set(HAVE_VFW32 TRUE)
endif() endif()
target_link_libraries(openclonk ws2_32 winmm) target_link_libraries(openclonk ws2_32)
target_link_libraries(openclonk-server ws2_32)
target_link_libraries(c4group ws2_32) target_link_libraries(c4group ws2_32)
target_link_libraries(c4script ws2_32 winmm) target_link_libraries(c4script ws2_32)
if(TARGET mape) if(TARGET mape)
target_link_libraries(mape winmm) target_link_libraries(mape winmm)
# Suppress the console window for mape even though only a main() and not # Suppress the console window for mape even though only a main() and not
@ -1342,6 +1367,7 @@ endif()
if(UPNP_FOUND) if(UPNP_FOUND)
include_directories(SYSTEM ${UPNP_INCLUDE_DIR}) include_directories(SYSTEM ${UPNP_INCLUDE_DIR})
target_link_libraries(openclonk ${UPNP_LIBRARIES}) target_link_libraries(openclonk ${UPNP_LIBRARIES})
target_link_libraries(openclonk-server ${UPNP_LIBRARIES})
endif() endif()
add_subdirectory(tests EXCLUDE_FROM_ALL) add_subdirectory(tests EXCLUDE_FROM_ALL)
@ -1368,6 +1394,7 @@ if(USE_GCC_PCH)
add_precompiled_header(libmisc src/C4Include.h) add_precompiled_header(libmisc src/C4Include.h)
add_precompiled_header(libc4script src/C4Include.h) add_precompiled_header(libc4script src/C4Include.h)
add_precompiled_header(openclonk src/C4Include.h) add_precompiled_header(openclonk src/C4Include.h)
add_precompiled_header(openclonk-server src/C4Include.h)
endif() endif()
# When cross-compiling, import c4group from a native build # When cross-compiling, import c4group from a native build

View File

@ -25,6 +25,7 @@
# gobject - Glib GObject 2.0 # gobject - Glib GObject 2.0
# gio - Glib GIO 2.0 # gio - Glib GIO 2.0
# gthread # gthread
# glib - Glib 2.0
# #
# If any of these components are requested, the following variables will be # If any of these components are requested, the following variables will be
# defined with the same meaning as above: # defined with the same meaning as above:
@ -60,7 +61,6 @@ if(PKG_CONFIG_FOUND)
if(__component STREQUAL "${__cname}") if(__component STREQUAL "${__cname}")
pkg_check_modules(GTK3_${__cname} ${__GTK3_QUIET} "${__cfullname}") pkg_check_modules(GTK3_${__cname} ${__GTK3_QUIET} "${__cfullname}")
if(GTK3_${__cname}_FOUND) if(GTK3_${__cname}_FOUND)
list(REMOVE_ITEM GTK3_${__cname}_LIBRARIES ${GTK3_LIBRARIES})
if(GTK3_LIBRARY_DIRS) if(GTK3_LIBRARY_DIRS)
list(REMOVE_ITEM GTK3_${__cname}_LIBRARY_DIRS ${GTK3_LIBRARY_DIRS}) list(REMOVE_ITEM GTK3_${__cname}_LIBRARY_DIRS ${GTK3_LIBRARY_DIRS})
endif() endif()
@ -80,6 +80,7 @@ if(PKG_CONFIG_FOUND)
__GTK3_HANDLE_COMPONENT(gobject "gobject-2.0") __GTK3_HANDLE_COMPONENT(gobject "gobject-2.0")
__GTK3_HANDLE_COMPONENT(gio "gio-2.0") __GTK3_HANDLE_COMPONENT(gio "gio-2.0")
__GTK3_HANDLE_COMPONENT(gthread "gthread-2.0") __GTK3_HANDLE_COMPONENT(gthread "gthread-2.0")
__GTK3_HANDLE_COMPONENT(glib "glib-2.0")
endforeach() endforeach()
set(GTK3_COMPILE_DEFINITIONS ${GTK3_CFLAGS_OTHER}) set(GTK3_COMPILE_DEFINITIONS ${GTK3_CFLAGS_OTHER})
@ -171,6 +172,7 @@ else()
__GTK3_HANDLE_COMPONENT(gobject gobject/gobject.h glib-2.0 gobject-2.0) __GTK3_HANDLE_COMPONENT(gobject gobject/gobject.h glib-2.0 gobject-2.0)
__GTK3_HANDLE_COMPONENT(gio gio/gio.h glib-2.0 gio-2.0) __GTK3_HANDLE_COMPONENT(gio gio/gio.h glib-2.0 gio-2.0)
__GTK3_HANDLE_COMPONENT(gthread glib/gthread.h glib-2.0 gthread-2.0) __GTK3_HANDLE_COMPONENT(gthread glib/gthread.h glib-2.0 gthread-2.0)
__GTK3_HANDLE_COMPONENT(glib glib.h glib-2.0 glib-2.0)
endforeach() endforeach()
# Parse version from GTK3 header # Parse version from GTK3 header

View File

@ -99,9 +99,6 @@
/* compile without debug options */ /* compile without debug options */
#cmakedefine NDEBUG 1 #cmakedefine NDEBUG 1
/* dedicated server mode */
#cmakedefine USE_CONSOLE 1
/* MP3 music */ /* MP3 music */
#cmakedefine USE_MP3 1 #cmakedefine USE_MP3 1
@ -111,6 +108,9 @@
/* Define to 1 if the X Window System is used */ /* Define to 1 if the X Window System is used */
#cmakedefine USE_X11 1 #cmakedefine USE_X11 1
/* Use Apple Cocoa for the UI */
#cmakedefine USE_COCOA 1
/* Enable automatic update system */ /* Enable automatic update system */
#cmakedefine WITH_AUTOMATIC_UPDATE 1 #cmakedefine WITH_AUTOMATIC_UPDATE 1
@ -130,9 +130,6 @@
/* Define to 1 if you have support for precompiled headers */ /* Define to 1 if you have support for precompiled headers */
#cmakedefine HAVE_PRECOMPILED_HEADERS 1 #cmakedefine HAVE_PRECOMPILED_HEADERS 1
/* Use Apple Cocoa for the UI */
#cmakedefine USE_COCOA 1
/* Select an audio provider */ /* Select an audio provider */
#define AUDIO_TK_NONE 0 #define AUDIO_TK_NONE 0
#define AUDIO_TK_OPENAL 1 #define AUDIO_TK_OPENAL 1
@ -141,3 +138,12 @@
/* Include OpenAL extensions (alext.h) for sound modifiers */ /* Include OpenAL extensions (alext.h) for sound modifiers */
#cmakedefine HAVE_ALEXT 1 #cmakedefine HAVE_ALEXT 1
#ifdef USE_CONSOLE
/* FIXME: Sort this out in CMake instead of here */
#undef USE_COCOA
#undef USE_SDL_MAINLOOP
#undef USE_X11
#undef WITH_AUTOMATIC_UPDATE
#undef WITH_DEVELOPER_MODE
#endif

View File

@ -338,6 +338,8 @@ public:
// Set by Init to the widget which is used as a // Set by Init to the widget which is used as a
// render target, which can be the whole window. // render target, which can be the whole window.
/*GtkWidget*/void * render_widget; /*GtkWidget*/void * render_widget;
#endif
#ifdef USE_X11
protected: protected:
bool FindFBConfig(int samples, GLXFBConfig *info); bool FindFBConfig(int samples, GLXFBConfig *info);