Browse Source

Preparing for the use of CJSON instead of the current parser for maps.

Maps will be converted from the current format to JSON.
Other part could be expected to use JSON instead of hand made parser.

Signed-off-by: Godzil <godzil@godzil.net>
Godzil 6 years ago
parent
commit
2813fb26cf
4 changed files with 96 additions and 3 deletions
  1. 59 0
      cmake/CJSON.cmake
  2. 32 0
      cmake/FindCJSON.cmake
  3. 1 1
      cmake/GetGitRevisionDescription.cmake
  4. 4 2
      server/CMakeLists.txt

+ 59 - 0
cmake/CJSON.cmake

@@ -0,0 +1,59 @@
+cmake_minimum_required(VERSION 2.8)
+
+find_package(CJSON REQUIRED) # to have CJSON_PREFIX and CJSON_INSTALL_DIR
+
+include(ExternalProject)
+
+set(CJSON_RELEASE 1.4.0)
+set(CJSON_COMMIT 030d0c14cc5e411758aaa4680e11ba82ebf61bc0)
+set(CJSON_GIT https://github.com/DaveGamble/cJSON.git)
+#set(CJSON_INSTALL_DIR ${CMAKE_BINARY_DIR}/downloads/install)
+set(CJSON_CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${CJSON_INSTALL_DIR})
+set(CJSON_CMAKE_ARGS ${CJSON_CMAKE_ARGS} -DBUILD_SHARED_LIBS=OFF -DENABLE_CJSON_TEST=OFF)
+set(CJSON_PATCH_COMMAND "")
+set(CJSON_CMAKE_CACHE_ARGS "")
+
+# Pass toolchain
+if(NOT "${CMAKE_TOOLCHAIN_FILE}" STREQUAL "")
+    set(CJSON_CMAKE_CACHE_ARGS ${CJSON_CMAKE_CACHE_ARGS} -DCMAKE_TOOLCHAIN_FILE:STRING=${CMAKE_TOOLCHAIN_FILE})
+    set(CJSON_CMAKE_CACHE_ARGS ${CJSON_CMAKE_CACHE_ARGS} -DCMAKE_TOOLCHAIN_FILE:STRING=${CMAKE_TOOLCHAIN_FILE})
+endif()
+
+# Need to set the build type
+set(CJSON_CMAKE_CACHE_ARGS ${CJSON_CMAKE_CACHE_ARGS} -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE})
+
+# Pass any non default configuration
+if(CMAKE_CONFIGURATION_TYPES)
+    foreach(CONFIG_NAME ${CMAKE_CONFIGURATION_TYPES})
+        if(NOT "${CONFIG_NAME}" STREQUAL "Debug" AND
+                NOT "${CONFIG_NAME}" STREQUAL "Release" AND
+                NOT "${CONFIG_NAME}" STREQUAL "MinSizeRel" AND
+                NOT "${CONFIG_NAME}" STREQUAL "RelWithDebInfo")
+
+            string(TOUPPER ${CONFIG_NAME} CONFIG_NAME)
+            #Set the flags for this configuration
+            foreach(FLAGS_NAME CXX_FLAGS C_FLAGS) #Compiler flags
+                set(CJSON_CMAKE_CACHE_ARGS ${CJSON_CMAKE_CACHE_ARGS} -DCMAKE_${FLAGS_NAME}_${CONFIG_NAME}:STRING=${CMAKE_${FLAGS_NAME}_${CONFIG_NAME}})
+            endforeach()
+
+            foreach(FLAGS_NAME EXE_LINKER_FLAGS MODULE_LINKER_FLAGS SHARED_LINKER_FLAGS) #Linker flags
+                set(CJSON_CMAKE_CACHE_ARGS ${CJSON_CMAKE_CACHE_ARGS} -DCMAKE_${FLAGS_NAME}_${CONFIG_NAME}:STRING=${CMAKE_${FLAGS_NAME}_${CONFIG_NAME}})
+            endforeach()
+        endif()
+    endforeach()
+
+    set(CJSON_CMAKE_CACHE_ARGS ${CJSON_CMAKE_CACHE_ARGS} -DCMAKE_CONFIGURATION_TYPES:STRING=${CMAKE_CONFIGURATION_TYPES})
+endif()
+
+
+ExternalProject_Add(
+        ${CJSON_NAME}
+        GIT_REPOSITORY ${CJSON_GIT}
+        GIT_TAG ${CJSON_COMMIT}
+        DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/libraries/cjson/download
+        SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/libraries/cjson/source
+        BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/libraries/cjson
+        INSTALL_DIR ${CJSON_INSTALL_DIR}
+        CMAKE_ARGS ${CJSON_CMAKE_ARGS}
+        CMAKE_CACHE_ARGS ${CJSON_CMAKE_CACHE_ARGS}
+)

+ 32 - 0
cmake/FindCJSON.cmake

@@ -0,0 +1,32 @@
+# Locate and configure the downloaded CJSON library
+#
+# Defines the following variables:
+#
+#   CJSON_FOUND
+#   CJSON_INCLUDE_DIRS - The directories needed on the include paths
+#   CJSON_LIBRARIES - The libraries to link to
+
+# set CJSON_PREFIX to directory where the current file file is located
+get_filename_component(CJSON_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
+if (NOT DEFINED CJSON_INSTALL_DIR)
+    set(CJSON_INSTALL_DIR ${CMAKE_BINARY_DIR}/downloads/install/cjson)
+endif()
+set(CJSON_NAME cjson-external)
+
+set(CJSON_FOUND TRUE)
+set(CJSON_INCLUDE_DIRS ${CJSON_INSTALL_DIR}/include ${CJSON_INSTALL_DIR})
+set(CJSON_INCLUDE_DIR ${CJSON_INCLUDE_DIRS})
+
+if(WIN32)
+    if(MINGW)
+        set(CJSON_LIBRARIES ${CJSON_INSTALL_DIR}/lib/libcjson.a)
+    else()
+        set(CJSON_LIBRARIES optimized ${CJSON_INSTALL_DIR}/lib/libcjson.lib)
+    endif()
+else()
+    set(CJSON_LIBRARIES ${CJSON_INSTALL_DIR}/lib/libcjson.a)
+endif()
+
+set(CJSON_LIBRARY ${CJSON_LIBRARIES})
+
+mark_as_advanced(CJSON_INCLUDE_DIRS CJSON_INCLUDE_DIR CJSON_LIBRARIES CJSON_LIBRARY)

+ 1 - 1
cmake/GetGitRevisionDescription.cmake

@@ -108,7 +108,7 @@ function(git_describe _var)
     #	message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
     #endif()
 
-    message(STATUS "Arguments to execute_process: ${ARGN}")
+    #message(STATUS "Arguments to execute_process: ${ARGN}")
 
     execute_process(COMMAND
             "${GIT_EXECUTABLE}"

+ 4 - 2
server/CMakeLists.txt

@@ -2,6 +2,8 @@ cmake_minimum_required(VERSION 3.0)
 
 project(PulsarServer)
 
+find_package(CJSON REQUIRED)
+
 set(TARGET server)
 
 set(TARGET_HEADER_FILES include/action.h include/client.h include/conf.h include/erreur.h include/exec.h include/game.h
@@ -11,7 +13,7 @@ set(TARGET_HEADER_FILES include/action.h include/client.h include/conf.h include
 add_executable(${TARGET} main.c init.c player.c exec.c ipc.c client.c message.c parser.c map.c map_parser.c bouvier.c
         game.c time.c pulse.c objects.c network.c network_connect.c ${TARGET_HEADER_FILES} conf.c)
 
-target_include_directories(${TARGET} PRIVATE include)
+target_include_directories(${TARGET} PRIVATE ${CJSON_INCLUDE_DIRS} include)
 
 if (ENABLE_PASCAL)
     target_compile_definitions(${TARGET} PRIVATE -DENABLE_GPC)
@@ -19,6 +21,6 @@ if (ENABLE_PASCAL)
 endif()
 
 target_compile_options(${TARGET} PRIVATE -rdynamic)
-target_link_libraries(${TARGET} pulsarnet)
+target_link_libraries(${TARGET} ${CJSON_LIBRARY} pulsarnet)
 
 install(TARGETS ${TARGET} RUNTIME DESTINATION "bin")