From d090433ef12e67230364df8c3f3dfaeab9510113 Mon Sep 17 00:00:00 2001 From: Edward Thomson Date: Sat, 19 Oct 2024 13:18:04 +0100 Subject: [PATCH 1/4] cmake: use CMAKE_C_STANDARD and CMAKE_C_EXTENSIONS cmake already provides a standard way for callers to override the C_STANDARD and C_EXTENSIONS properties. Support and document those. --- CMakeLists.txt | 3 ++- README.md | 4 ++-- cmake/SetCStandard.cmake | 24 ------------------------ deps/ntlmclient/CMakeLists.txt | 1 - examples/CMakeLists.txt | 1 - fuzzers/CMakeLists.txt | 1 - src/cli/CMakeLists.txt | 1 - src/libgit2/CMakeLists.txt | 1 - src/util/CMakeLists.txt | 1 - tests/headertest/CMakeLists.txt | 1 - tests/libgit2/CMakeLists.txt | 1 - tests/util/CMakeLists.txt | 1 - 12 files changed, 4 insertions(+), 36 deletions(-) delete mode 100644 cmake/SetCStandard.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index daa893e64..e260bdbb5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,6 +53,8 @@ option(SONAME "Set the (SO)VERSION of the target" option(DEPRECATE_HARD "Do not include deprecated functions in the library" OFF) # Compilation options + set(CMAKE_C_STANDARD "90" CACHE STRING "The C standard to compile against") +option(CMAKE_C_EXTENSIONS "Whether compiler extensions are supported" OFF) option(ENABLE_WERROR "Enable compilation with -Werror" OFF) if(UNIX) @@ -91,7 +93,6 @@ endif() # Modules include(FeatureSummary) -include(SetCStandard) include(CheckLibraryExists) include(CheckFunctionExists) include(CheckSymbolExists) diff --git a/README.md b/README.md index bfca5c888..55b3c536c 100644 --- a/README.md +++ b/README.md @@ -378,8 +378,8 @@ linker. These flags may be useful for cross-compilation or specialized setups. - `CMAKE_C_FLAGS`: Set your own compiler flags -- `C_STANDARD`: the C standard to compile against; defaults to `C90` -- `C_EXTENSIONS`: whether compiler extensions are supported; defaults to `OFF` +- `CMAKE_C_STANDARD`: the C standard to compile against; defaults to `C90` +- `CMAKE_C_EXTENSIONS`: whether compiler extensions are supported; defaults to `OFF` - `CMAKE_FIND_ROOT_PATH`: Override the search path for libraries - `ZLIB_LIBRARY`, `OPENSSL_SSL_LIBRARY` AND `OPENSSL_CRYPTO_LIBRARY`: Tell CMake where to find those specific libraries diff --git a/cmake/SetCStandard.cmake b/cmake/SetCStandard.cmake deleted file mode 100644 index f4fde658a..000000000 --- a/cmake/SetCStandard.cmake +++ /dev/null @@ -1,24 +0,0 @@ -if("${C_STANDARD}" STREQUAL "") - set(C_STANDARD "90") -endif() -if("${C_EXTENSIONS}" STREQUAL "") - set(C_EXTENSIONS OFF) -endif() - -if(${C_STANDARD} MATCHES "^[Cc].*") - string(REGEX REPLACE "^[Cc]" "" C_STANDARD ${C_STANDARD}) -endif() - -if(${C_STANDARD} MATCHES ".*-strict$") - string(REGEX REPLACE "-strict$" "" C_STANDARD ${C_STANDARD}) - set(C_EXTENSIONS OFF) - - add_feature_info("C Standard" ON "C${C_STANDARD} (strict)") -else() - add_feature_info("C Standard" ON "C${C_STANDARD}") -endif() - -function(set_c_standard project) - set_target_properties(${project} PROPERTIES C_STANDARD ${C_STANDARD}) - set_target_properties(${project} PROPERTIES C_EXTENSIONS ${C_EXTENSIONS}) -endfunction() diff --git a/deps/ntlmclient/CMakeLists.txt b/deps/ntlmclient/CMakeLists.txt index 420d1006c..f1f5de162 100644 --- a/deps/ntlmclient/CMakeLists.txt +++ b/deps/ntlmclient/CMakeLists.txt @@ -37,4 +37,3 @@ else() endif() add_library(ntlmclient OBJECT ${SRC_NTLMCLIENT} ${SRC_NTLMCLIENT_UNICODE} ${SRC_NTLMCLIENT_CRYPTO}) -set_target_properties(ntlmclient PROPERTIES C_STANDARD 90) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index e84724247..986daae59 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -3,7 +3,6 @@ file(GLOB SRC_EXAMPLES *.c *.h) add_executable(lg2 ${SRC_EXAMPLES}) -set_c_standard(lg2) # Ensure that we do not use deprecated functions internally add_definitions(-DGIT_DEPRECATE_HARD) diff --git a/fuzzers/CMakeLists.txt b/fuzzers/CMakeLists.txt index 32b91e446..4063def33 100644 --- a/fuzzers/CMakeLists.txt +++ b/fuzzers/CMakeLists.txt @@ -20,7 +20,6 @@ foreach(fuzz_target_src ${SRC_FUZZERS}) endif() add_executable(${fuzz_target_name} ${${fuzz_target_name}_SOURCES}) - set_c_standard(${fuzz_target_name}) target_include_directories(${fuzz_target_name} PRIVATE ${LIBGIT2_INCLUDES} ${LIBGIT2_DEPENDENCY_INCLUDES}) target_include_directories(${fuzz_target_name} SYSTEM PRIVATE ${LIBGIT2_SYSTEM_INCLUDES}) diff --git a/src/cli/CMakeLists.txt b/src/cli/CMakeLists.txt index 855445142..d121c588a 100644 --- a/src/cli/CMakeLists.txt +++ b/src/cli/CMakeLists.txt @@ -40,7 +40,6 @@ add_executable(git2_cli ${CLI_SRC_C} ${CLI_SRC_OS} ${CLI_OBJECTS} ${LIBGIT2_DEPENDENCY_OBJECTS}) target_link_libraries(git2_cli ${CLI_LIBGIT2_LIBRARY} ${LIBGIT2_SYSTEM_LIBS}) -set_c_standard(git2_cli) set_target_properties(git2_cli PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR}) set_target_properties(git2_cli PROPERTIES OUTPUT_NAME ${LIBGIT2_FILENAME}) diff --git a/src/libgit2/CMakeLists.txt b/src/libgit2/CMakeLists.txt index 66b8394a3..1480dda0b 100644 --- a/src/libgit2/CMakeLists.txt +++ b/src/libgit2/CMakeLists.txt @@ -2,7 +2,6 @@ # git library functionality. add_library(libgit2 OBJECT) -set_c_standard(libgit2) include(PkgBuildConfig) diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt index c0ee74472..dce8dee95 100644 --- a/src/util/CMakeLists.txt +++ b/src/util/CMakeLists.txt @@ -1,7 +1,6 @@ # util: a shared library for common utility functions for libgit2 projects add_library(util OBJECT) -set_c_standard(util) configure_file(git2_features.h.in git2_features.h) diff --git a/tests/headertest/CMakeLists.txt b/tests/headertest/CMakeLists.txt index db294b7da..b352458d5 100644 --- a/tests/headertest/CMakeLists.txt +++ b/tests/headertest/CMakeLists.txt @@ -3,7 +3,6 @@ # even when they have aggressive C90 warnings enabled. add_executable(headertest headertest.c) -set_c_standard(headertest) target_include_directories(headertest PRIVATE ${LIBGIT2_INCLUDES}) diff --git a/tests/libgit2/CMakeLists.txt b/tests/libgit2/CMakeLists.txt index 1eb109fb5..a660259b8 100644 --- a/tests/libgit2/CMakeLists.txt +++ b/tests/libgit2/CMakeLists.txt @@ -39,7 +39,6 @@ set_source_files_properties( PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/clar.suite) add_executable(libgit2_tests ${SRC_CLAR} ${SRC_TEST} ${LIBGIT2_OBJECTS}) -set_c_standard(libgit2_tests) set_target_properties(libgit2_tests PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}) target_include_directories(libgit2_tests PRIVATE ${TEST_INCLUDES} ${LIBGIT2_INCLUDES} ${LIBGIT2_DEPENDENCY_INCLUDES}) diff --git a/tests/util/CMakeLists.txt b/tests/util/CMakeLists.txt index 1b5799495..aab429ab1 100644 --- a/tests/util/CMakeLists.txt +++ b/tests/util/CMakeLists.txt @@ -38,7 +38,6 @@ set_source_files_properties( PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/clar.suite) add_executable(util_tests ${SRC_CLAR} ${SRC_TEST} ${LIBGIT2_OBJECTS}) -set_c_standard(util_tests) set_target_properties(util_tests PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR}) From 821d41a907ea27f74af47ee5df21c6fbc4ff2878 Mon Sep 17 00:00:00 2001 From: Edward Thomson Date: Sat, 19 Oct 2024 13:19:12 +0100 Subject: [PATCH 2/4] ci: set CMAKE_C_EXTENSIONS for msan builds The memory sanitizer builds require c90 with extension _on_; enable that. --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 46dfe602f..cb362eaf1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -132,7 +132,7 @@ jobs: env: CC: clang CFLAGS: -fsanitize=memory -fsanitize-memory-track-origins=2 -fsanitize-blacklist=/home/libgit2/source/script/sanitizers.supp -fno-optimize-sibling-calls -fno-omit-frame-pointer - CMAKE_OPTIONS: -DC_EXTENSIONS=ON -DCMAKE_PREFIX_PATH=/usr/local/msan -DUSE_HTTPS=mbedTLS -DUSE_SHA1=HTTPS -DREGEX_BACKEND=pcre -DDEPRECATE_HARD=ON -DUSE_BUNDLED_ZLIB=ON -DUSE_SSH=ON + CMAKE_OPTIONS: -DCMAKE_C_EXTENSIONS=ON -DCMAKE_PREFIX_PATH=/usr/local/msan -DUSE_HTTPS=mbedTLS -DUSE_SHA1=HTTPS -DREGEX_BACKEND=pcre -DDEPRECATE_HARD=ON -DUSE_BUNDLED_ZLIB=ON -DUSE_SSH=ON CMAKE_GENERATOR: Ninja SKIP_SSH_TESTS: true SKIP_NEGOTIATE_TESTS: true From 7db332022b234dbb40ff03528e9b75eaacf6bd0c Mon Sep 17 00:00:00 2001 From: Edward Thomson Date: Sat, 19 Oct 2024 14:29:57 +0100 Subject: [PATCH 3/4] llhttp: use c-style comments --- deps/llhttp/api.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/llhttp/api.c b/deps/llhttp/api.c index 8c2ce3dc5..eddb47831 100644 --- a/deps/llhttp/api.c +++ b/deps/llhttp/api.c @@ -93,7 +93,7 @@ void llhttp_free(llhttp_t* parser) { free(parser); } -#endif // defined(__wasm__) +#endif /* defined(__wasm__) */ /* Some getters required to get stuff from the parser */ From 0013a6f9b2e5426e57b49bd53a85775dda78aa26 Mon Sep 17 00:00:00 2001 From: Edward Thomson Date: Sat, 19 Oct 2024 18:19:38 +0100 Subject: [PATCH 4/4] cmake: default to c99 on android --- CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index e260bdbb5..f99a69c43 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,7 +53,12 @@ option(SONAME "Set the (SO)VERSION of the target" option(DEPRECATE_HARD "Do not include deprecated functions in the library" OFF) # Compilation options +# Default to c99 on Android Studio for compatibility; c90 everywhere else +if("${CMAKE_SYSTEM_NAME}" STREQUAL "Android") + set(CMAKE_C_STANDARD "99" CACHE STRING "The C standard to compile against") +else() set(CMAKE_C_STANDARD "90" CACHE STRING "The C standard to compile against") +endif() option(CMAKE_C_EXTENSIONS "Whether compiler extensions are supported" OFF) option(ENABLE_WERROR "Enable compilation with -Werror" OFF)