tBuild curses client with cmake. - vaccinewars - be a doctor and try to vaccinate the world
(HTM) git clone git://src.adamsgaard.dk/vaccinewars
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 2282a4f361d8e3bc9d0d0d1006766fa8c1263e84
(DIR) parent e26f3cc0f06b0f72cb9cda70eea4cae8ffc23946
(HTM) Author: Ben Webb <ben@salilab.org>
Date: Fri, 27 Mar 2015 14:32:15 -0700
Build curses client with cmake.
Diffstat:
M CMakeLists.txt | 54 +++++++++++++++++++++++++++----
A cmake_modules/FindGLIB.cmake | 120 +++++++++++++++++++++++++++++++
M config-cmake.h.in | 18 +++++++++++++++---
A src/curses_client/CMakeLists.txt | 1 +
M src/cursesport/cursesport.h | 8 ++++++--
M src/dopewars.h | 2 +-
M src/network.h | 2 +-
7 files changed, 192 insertions(+), 13 deletions(-)
---
(DIR) diff --git a/CMakeLists.txt b/CMakeLists.txt
t@@ -1,11 +1,19 @@
cmake_minimum_required(VERSION 2.8)
project(dopewars)
-set(VERSION SVN)
+set(VERSION "SVN")
include(CheckIncludeFiles)
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
+ ${PROJECT_SOURCE_DIR}/cmake_modules)
+include(${PROJECT_SOURCE_DIR}/cmake_modules/FindGLIB.cmake)
+
+# Find source headers
+include_directories("${PROJECT_SOURCE_DIR}/src")
+
# Find generated config.h
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_CONFIG_H")
include_directories("${PROJECT_BINARY_DIR}")
check_include_files(fcntl.h HAVE_FCNTL_H)
t@@ -14,15 +22,49 @@ check_include_files(unistd.h HAVE_UNISTD_H)
check_include_files(stdlib.h HAVE_STDLIB_H)
# Process client options
-option(GUI_CLIENT "include graphical client (GTK+/Win32)" "probe")
-option(CURSES_CLIENT "include curses client" "probe")
+option(GUI_CLIENT "include graphical client (GTK+/Win32)" ON)
+option(CURSES_CLIENT "include curses client" ON)
option(GUI_SERVER "use a simple GTK+/Win32 GUI for the server" "probe")
-option(WITH_ESD "support ESD sound output" "probe")
-option(WITH_SDL "support SDL sound output" "probe")
+option(WITH_ESD "support ESD sound output" ON)
+option(WITH_SDL "support SDL sound output" ON)
+
+find_package(GLIB)
+if (!GLIB_FOUND)
+ message(FATAL_ERROR "GLib is required")
+else()
+ set(EXTRA_LIBS ${EXTRA_LIBS} ${GLIB_LIBRARIES})
+ include_directories(${GLIB_INCLUDE_DIRS})
+endif()
+
+if (CURSES_CLIENT)
+ find_package(Curses)
+ if (CURSES_FOUND)
+ add_subdirectory(src/curses_client)
+ set(EXTRA_LIBS ${EXTRA_LIBS} ${CURSES_LIBRARIES} cursesclient)
+ include_directories(${CURSES_INCLUDE_DIRS})
+ else()
+ message(WARNING "Cannot find any curses-type library")
+ set(CURSES_CLIENT OFF)
+ endif()
+endif()
configure_file("${PROJECT_SOURCE_DIR}/config-cmake.h.in"
"${PROJECT_BINARY_DIR}/config.h")
-add_executable(dopewars "${PROJECT_SOURCE_DIR}/src/*.c")
+add_executable(dopewars
+ "${PROJECT_SOURCE_DIR}/src/AIPlayer.c"
+ "${PROJECT_SOURCE_DIR}/src/error.c"
+ "${PROJECT_SOURCE_DIR}/src/sound.c"
+ "${PROJECT_SOURCE_DIR}/src/admin.c"
+ "${PROJECT_SOURCE_DIR}/src/log.c"
+ "${PROJECT_SOURCE_DIR}/src/tstring.c"
+ "${PROJECT_SOURCE_DIR}/src/configfile.c"
+ "${PROJECT_SOURCE_DIR}/src/message.c"
+ "${PROJECT_SOURCE_DIR}/src/util.c"
+ "${PROJECT_SOURCE_DIR}/src/convert.c"
+ "${PROJECT_SOURCE_DIR}/src/network.c"
+ "${PROJECT_SOURCE_DIR}/src/dopewars.c"
+ "${PROJECT_SOURCE_DIR}/src/serverside.c")
+
target_link_libraries(dopewars ${EXTRA_LIBS})
(DIR) diff --git a/cmake_modules/FindGLIB.cmake b/cmake_modules/FindGLIB.cmake
t@@ -0,0 +1,120 @@
+# - Try to find Glib and its components (gio, gobject etc)
+# Once done, this will define
+#
+# GLIB_FOUND - system has Glib
+# GLIB_INCLUDE_DIRS - the Glib include directories
+# GLIB_LIBRARIES - link these to use Glib
+#
+# Optionally, the COMPONENTS keyword can be passed to find_package()
+# and Glib components can be looked for. Currently, the following
+# components can be used, and they define the following variables if
+# found:
+#
+# gio: GLIB_GIO_LIBRARIES
+# gobject: GLIB_GOBJECT_LIBRARIES
+# gmodule: GLIB_GMODULE_LIBRARIES
+# gthread: GLIB_GTHREAD_LIBRARIES
+#
+# Note that the respective _INCLUDE_DIR variables are not set, since
+# all headers are in the same directory as GLIB_INCLUDE_DIRS.
+#
+# Copyright (C) 2012 Raphael Kubo da Costa <rakuco@webkit.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS CONTRIBUTORS ``AS
+# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+find_package(PkgConfig)
+pkg_check_modules(PC_GLIB QUIET glib-2.0)
+
+find_library(GLIB_LIBRARIES
+ NAMES glib-2.0
+ HINTS ${PC_GLIB_LIBDIR}
+ ${PC_GLIB_LIBRARY_DIRS}
+)
+
+# Files in glib's main include path may include glibconfig.h, which,
+# for some odd reason, is normally in $LIBDIR/glib-2.0/include.
+get_filename_component(_GLIB_LIBRARY_DIR ${GLIB_LIBRARIES} PATH)
+find_path(GLIBCONFIG_INCLUDE_DIR
+ NAMES glibconfig.h
+ HINTS ${PC_LIBDIR} ${PC_LIBRARY_DIRS} ${_GLIB_LIBRARY_DIR}
+ ${PC_GLIB_INCLUDEDIR} ${PC_GLIB_INCLUDE_DIRS}
+ PATH_SUFFIXES glib-2.0/include
+)
+
+find_path(GLIB_INCLUDE_DIR
+ NAMES glib.h
+ HINTS ${PC_GLIB_INCLUDEDIR}
+ ${PC_GLIB_INCLUDE_DIRS}
+ PATH_SUFFIXES glib-2.0
+)
+
+set(GLIB_INCLUDE_DIRS ${GLIB_INCLUDE_DIR} ${GLIBCONFIG_INCLUDE_DIR})
+
+# Version detection
+file(READ "${GLIBCONFIG_INCLUDE_DIR}/glibconfig.h" GLIBCONFIG_H_CONTENTS)
+string(REGEX MATCH "#define GLIB_MAJOR_VERSION ([0-9]+)" _dummy "${GLIBCONFIG_H_CONTENTS}")
+set(GLIB_VERSION_MAJOR "${CMAKE_MATCH_1}")
+string(REGEX MATCH "#define GLIB_MINOR_VERSION ([0-9]+)" _dummy "${GLIBCONFIG_H_CONTENTS}")
+set(GLIB_VERSION_MINOR "${CMAKE_MATCH_1}")
+string(REGEX MATCH "#define GLIB_MICRO_VERSION ([0-9]+)" _dummy "${GLIBCONFIG_H_CONTENTS}")
+set(GLIB_VERSION_MICRO "${CMAKE_MATCH_1}")
+set(GLIB_VERSION "${GLIB_VERSION_MAJOR}.${GLIB_VERSION_MINOR}.${GLIB_VERSION_MICRO}")
+
+# Additional Glib components. We only look for libraries, as not all of them
+# have corresponding headers and all headers are installed alongside the main
+# glib ones.
+foreach (_component ${GLIB_FIND_COMPONENTS})
+ if (${_component} STREQUAL "gio")
+ find_library(GLIB_GIO_LIBRARIES NAMES gio-2.0 HINTS ${_GLIB_LIBRARY_DIR})
+ set(ADDITIONAL_REQUIRED_VARS ${ADDITIONAL_REQUIRED_VARS} GLIB_GIO_LIBRARIES)
+ elseif (${_component} STREQUAL "gobject")
+ find_library(GLIB_GOBJECT_LIBRARIES NAMES gobject-2.0 HINTS ${_GLIB_LIBRARY_DIR})
+ set(ADDITIONAL_REQUIRED_VARS ${ADDITIONAL_REQUIRED_VARS} GLIB_GOBJECT_LIBRARIES)
+ elseif (${_component} STREQUAL "gmodule")
+ find_library(GLIB_GMODULE_LIBRARIES NAMES gmodule-2.0 HINTS ${_GLIB_LIBRARY_DIR})
+ set(ADDITIONAL_REQUIRED_VARS ${ADDITIONAL_REQUIRED_VARS} GLIB_GMODULE_LIBRARIES)
+ elseif (${_component} STREQUAL "gthread")
+ find_library(GLIB_GTHREAD_LIBRARIES NAMES gthread-2.0 HINTS ${_GLIB_LIBRARY_DIR})
+ set(ADDITIONAL_REQUIRED_VARS ${ADDITIONAL_REQUIRED_VARS} GLIB_GTHREAD_LIBRARIES)
+ elseif (${_component} STREQUAL "gio-unix")
+ # gio-unix is compiled as part of the gio library, but the include paths
+ # are separate from the shared glib ones. Since this is currently only used
+ # by WebKitGTK+ we don't go to extraordinary measures beyond pkg-config.
+ pkg_check_modules(GIO_UNIX QUIET gio-unix-2.0)
+ endif ()
+endforeach ()
+
+include(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLIB REQUIRED_VARS GLIB_INCLUDE_DIRS GLIB_LIBRARIES ${ADDITIONAL_REQUIRED_VARS}
+ VERSION_VAR GLIB_VERSION)
+
+mark_as_advanced(
+ GLIBCONFIG_INCLUDE_DIR
+ GLIB_GIO_LIBRARIES
+ GLIB_GIO_UNIX_LIBRARIES
+ GLIB_GMODULE_LIBRARIES
+ GLIB_GOBJECT_LIBRARIES
+ GLIB_GTHREAD_LIBRARIES
+ GLIB_INCLUDE_DIR
+ GLIB_INCLUDE_DIRS
+ GLIB_LIBRARIES
+)
(DIR) diff --git a/config-cmake.h.in b/config-cmake.h.in
t@@ -1,6 +1,21 @@
+/* Version number of package */
+#define VERSION "@VERSION@"
+
/* Use the (n)curses client? */
#cmakedefine CURSES_CLIENT
+/* true if curses.h is available */
+#cmakedefine CURSES_HAVE_CURSES_H
+
+/* true if ncurses.h is available */
+#cmakedefine CURSES_HAVE_NCURSES_H
+
+/* true if ncurses/ncurses.h is available */
+#cmakedefine CURSES_HAVE_NCURSES_NCURSES_H
+
+/* true if ncurses/curses.h is available */
+#cmakedefine CURSES_HAVE_NCURSES_CURSES_H
+
/* Define if building under the Cygwin environment */
#undef CYGWIN
t@@ -188,9 +203,6 @@
#endif
-/* Version number of package */
-#cmakedefine VERSION
-
/* Define to 1 if on MINIX. */
#undef _MINIX
(DIR) diff --git a/src/curses_client/CMakeLists.txt b/src/curses_client/CMakeLists.txt
t@@ -0,0 +1 @@
+add_library(cursesclient curses_client.c)
(DIR) diff --git a/src/cursesport/cursesport.h b/src/cursesport/cursesport.h
t@@ -92,10 +92,14 @@ void endwin(void);
#include <errno.h>
/* Include a suitable curses-type library */
-#if HAVE_LIBNCURSES
+#if HAVE_LIBNCURSES || defined(CURSES_HAVE_NCURSES_H)
#include <ncurses.h>
-#elif HAVE_LIBCURSES
+#elif HAVE_LIBCURSES || defined(CURSES_HAVE_CURSES_H)
#include <curses.h>
+#elif defined(CURSES_HAVE_NCURSES_NCURSES_H)
+#include <ncurses/ncurses.h>
+#elif defined(CURSES_HAVE_NCURSES_CURSES_H)
+#include <ncurses/curses.h>
#elif HAVE_LIBCUR_COLR
#include <curses_colr/curses.h>
#endif
(DIR) diff --git a/src/dopewars.h b/src/dopewars.h
t@@ -35,7 +35,7 @@
#include <sys/time.h>
#include <time.h>
#else
-#if HAVE_SYS_TIME_H
+#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#else
#include <time.h>
(DIR) diff --git a/src/network.h b/src/network.h
t@@ -38,7 +38,7 @@
#include <sys/time.h>
#include <time.h>
#else
-#if HAVE_SYS_TIME_H
+#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#else
#include <time.h>