# Initializes a git submodule if it hasn't been initialized before find_package(Git QUIET) # We want the library to build even if git is missing if ((Git_FOUND) AND (SIMDJSON_IS_UNDER_GIT)) message(STATUS "Git is available.") # Does NOT attempt to update or otherwise modify git submodules that are already initialized. function(initialize_submodule DIRECTORY) if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${DIRECTORY}/.git) message(STATUS "${CMAKE_CURRENT_SOURCE_DIR}/${DIRECTORY}/.git does not exist. Initializing ${DIRECTORY} submodule ...") execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init ${CMAKE_CURRENT_SOURCE_DIR}/${DIRECTORY} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} RESULT_VARIABLE GIT_EXIT_CODE) if(NOT GIT_EXIT_CODE EQUAL "0") message(FATAL_ERROR "${GIT_EXECUTABLE} submodule update --init dependencies/${DIRECTORY} failed with exit code ${GIT_EXIT_CODE}, please checkout submodules") endif() endif() endfunction(initialize_submodule) if (SIMDJSON_GOOGLE_BENCHMARKS) option(BENCHMARK_ENABLE_TESTING OFF) set(BENCHMARK_ENABLE_TESTING OFF) option(BENCHMARK_ENABLE_INSTALL OFF) set(BENCHMARK_ENABLE_INSTALL OFF) initialize_submodule(benchmark) add_subdirectory(benchmark) endif() if (SIMDJSON_COMPETITION) initialize_submodule(cJSON) add_library(competition-cJSON INTERFACE) target_include_directories(competition-cJSON INTERFACE cJSON) initialize_submodule(fastjson) add_library(competition-fastjson INTERFACE) target_include_directories(competition-fastjson INTERFACE fastjson/src fastjson/include) initialize_submodule(gason) add_library(competition-gason INTERFACE) target_include_directories(competition-gason INTERFACE gason/src) initialize_submodule(jsmn) add_library(competition-jsmn INTERFACE) target_include_directories(competition-jsmn INTERFACE jsmn) initialize_submodule(json) add_library(competition-json INTERFACE) target_include_directories(competition-json INTERFACE json/single_include) initialize_submodule(json11) add_library(competition-json11 INTERFACE) target_include_directories(competition-json11 INTERFACE json11) add_library(competition-jsoncppdist INTERFACE) target_include_directories(competition-jsoncppdist INTERFACE jsoncppdist) initialize_submodule(rapidjson) add_library(competition-rapidjson INTERFACE) target_include_directories(competition-rapidjson INTERFACE rapidjson/include) initialize_submodule(sajson) add_library(competition-sajson INTERFACE) target_include_directories(competition-sajson INTERFACE sajson/include) initialize_submodule(ujson4c) add_library(competition-ujson4c ujson4c/src/ujdecode.c) target_include_directories(competition-ujson4c PUBLIC ujson4c/3rdparty ujson4c/src) add_library(competition-core INTERFACE) target_link_libraries(competition-core INTERFACE competition-json competition-rapidjson competition-sajson competition-cJSON competition-jsmn) add_library(competition-all INTERFACE) target_link_libraries(competition-all INTERFACE competition-core competition-jsoncppdist competition-json11 competition-fastjson competition-gason competition-ujson4c) endif() initialize_submodule(cxxopts) message(STATUS "We acquired cxxopts and we are adding it as a library and target.") add_library(cxxopts INTERFACE) target_include_directories(cxxopts INTERFACE cxxopts/include) else() message(STATUS "Git is unavailable.") endif()