1- # Init submodules so they can be used
2- find_package ( Git QUIET )
3- if (GIT_FOUND )
4- option ( SIMDJSON_GIT_SUBMODULE "Check submodules during build" ON )
5- if (SIMDJSON_GIT_SUBMODULE )
6- message (STATUS "Updating submodules " )
7- execute_process (COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive
1+ # Initializes a git submodule if it hasn't been initialized before
2+ # Does NOT attempt to update or otherwise modify git submodules that are already initialized.
3+ function ( initialize_submodule DIRECTORY )
4+ if ( NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR} / ${DIRECTORY} /.git )
5+ find_package ( Git QUIET REQUIRED )
6+ message (STATUS "${CMAKE_CURRENT_SOURCE_DIR} / ${DIRECTORY} /.git does not exist. Initializing ${DIRECTORY} submodule ... " )
7+ execute_process (COMMAND ${GIT_EXECUTABLE} submodule update --init ${DIRECTORY}
88 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
99 RESULT_VARIABLE GIT_EXIT_CODE )
1010 if (NOT GIT_EXIT_CODE EQUAL "0" )
11- message (FATAL_ERROR "git submodule update --init failed with ${GIT_SUBMOD_RESULT } , please checkout submodules" )
11+ message (FATAL_ERROR "${GIT_EXECUTABLE} submodule update --init dependencies/ ${DIRECTORY} failed with exit code ${GIT_EXIT_CODE } , please checkout submodules" )
1212 endif ()
1313 endif ()
14- endif ( )
14+ endfunction ( initialize_submodule )
1515
1616if (SIMDJSON_GOOGLE_BENCHMARKS)
1717 option (BENCHMARK_ENABLE_TESTING OFF )
1818 set (BENCHMARK_ENABLE_TESTING OFF )
1919 option (BENCHMARK_ENABLE_INSTALL OFF )
2020 set (BENCHMARK_ENABLE_INSTALL OFF )
21+ initialize_submodule (benchmark )
2122 add_subdirectory (benchmark )
2223endif ()
2324
24- add_library (competition-cJSON INTERFACE )
25- target_include_directories (competition-cJSON INTERFACE cJSON )
25+ if (SIMDJSON_COMPETITION)
26+ initialize_submodule (cJSON )
27+ add_library (competition-cJSON INTERFACE )
28+ target_include_directories (competition-cJSON INTERFACE cJSON )
2629
27- add_library (competition-fastjson INTERFACE )
28- target_include_directories (competition-fastjson INTERFACE fastjson/src fastjson/include )
30+ initialize_submodule (fastjson )
31+ add_library (competition-fastjson INTERFACE )
32+ target_include_directories (competition-fastjson INTERFACE fastjson/src fastjson/include )
2933
30- add_library (competition-gason INTERFACE )
31- target_include_directories (competition-gason INTERFACE gason/src )
34+ initialize_submodule (gason )
35+ add_library (competition-gason INTERFACE )
36+ target_include_directories (competition-gason INTERFACE gason/src )
3237
33- add_library (competition-jsmn INTERFACE )
34- target_include_directories (competition-jsmn INTERFACE jsmn )
38+ initialize_submodule (jsmn )
39+ add_library (competition-jsmn INTERFACE )
40+ target_include_directories (competition-jsmn INTERFACE jsmn )
3541
36- add_library (competition-json INTERFACE )
37- target_include_directories (competition-json INTERFACE json/single_include )
42+ initialize_submodule (json )
43+ add_library (competition-json INTERFACE )
44+ target_include_directories (competition-json INTERFACE json/single_include )
3845
39- add_library (competition-json11 INTERFACE )
40- target_include_directories (competition-json11 INTERFACE json11 )
46+ initialize_submodule (json11 )
47+ add_library (competition-json11 INTERFACE )
48+ target_include_directories (competition-json11 INTERFACE json11 )
4149
42- add_library (competition-jsoncppdist INTERFACE )
43- target_include_directories (competition-jsoncppdist INTERFACE jsoncppdist )
50+ add_library (competition-jsoncppdist INTERFACE )
51+ target_include_directories (competition-jsoncppdist INTERFACE jsoncppdist )
4452
45- add_library (competition-rapidjson INTERFACE )
46- target_include_directories (competition-rapidjson INTERFACE rapidjson/include )
53+ initialize_submodule (rapidjson )
54+ add_library (competition-rapidjson INTERFACE )
55+ target_include_directories (competition-rapidjson INTERFACE rapidjson/include )
4756
48- add_library (competition-sajson INTERFACE )
49- target_include_directories (competition-sajson INTERFACE sajson/include )
57+ initialize_submodule (sajson )
58+ add_library (competition-sajson INTERFACE )
59+ target_include_directories (competition-sajson INTERFACE sajson/include )
5060
51- add_library (competition-ujson4c ujson4c/src/ujdecode.c )
52- target_include_directories (competition-ujson4c PUBLIC ujson4c/3rdparty ujson4c/src )
61+ initialize_submodule (ujson4c )
62+ add_library (competition-ujson4c ujson4c/src/ujdecode.c )
63+ target_include_directories (competition-ujson4c PUBLIC ujson4c/3rdparty ujson4c/src )
5364
54- add_library (competition-core INTERFACE )
55- target_link_libraries (competition-core INTERFACE competition-json competition-rapidjson competition-sajson competition-cJSON competition-jsmn )
65+ add_library (competition-core INTERFACE )
66+ target_link_libraries (competition-core INTERFACE competition-json competition-rapidjson competition-sajson competition-cJSON competition-jsmn )
5667
57- add_library (competition-all INTERFACE )
58- target_link_libraries (competition-all INTERFACE competition-core competition-jsoncppdist competition-json11 competition-fastjson competition-gason competition-ujson4c )
68+ add_library (competition-all INTERFACE )
69+ target_link_libraries (competition-all INTERFACE competition-core competition-jsoncppdist competition-json11 competition-fastjson competition-gason competition-ujson4c )
70+ endif ()
0 commit comments