mirror of
https://github.com/libgit2/libgit2.git
synced 2026-06-22 06:26:26 +00:00
cmake: make C_STANDARD and C_EXTENSIONS configurable
Users can now set up cmake with -DC_STANDARD=... or -DC_EXTENSIONS=... We default to C90 with C_EXTENSIONS=OFF, but callers can override if they desire.
This commit is contained in:
@@ -90,6 +90,8 @@ endif()
|
||||
|
||||
# Modules
|
||||
|
||||
include(FeatureSummary)
|
||||
include(SetCStandard)
|
||||
include(CheckLibraryExists)
|
||||
include(CheckFunctionExists)
|
||||
include(CheckSymbolExists)
|
||||
@@ -102,7 +104,6 @@ include(FindStatNsec)
|
||||
include(Findfutimens)
|
||||
include(GNUInstallDirs)
|
||||
include(IdeSplitSources)
|
||||
include(FeatureSummary)
|
||||
include(EnableWarnings)
|
||||
include(DefaultCFlags)
|
||||
include(ExperimentalFeatures)
|
||||
|
||||
24
cmake/SetCStandard.cmake
Normal file
24
cmake/SetCStandard.cmake
Normal file
@@ -0,0 +1,24 @@
|
||||
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()
|
||||
@@ -3,8 +3,7 @@
|
||||
file(GLOB SRC_EXAMPLES *.c *.h)
|
||||
|
||||
add_executable(lg2 ${SRC_EXAMPLES})
|
||||
set_target_properties(lg2 PROPERTIES C_STANDARD 90)
|
||||
set_target_properties(lg2 PROPERTIES C_EXTENSIONS OFF)
|
||||
set_c_standard(lg2)
|
||||
|
||||
# Ensure that we do not use deprecated functions internally
|
||||
add_definitions(-DGIT_DEPRECATE_HARD)
|
||||
|
||||
@@ -20,8 +20,7 @@ foreach(fuzz_target_src ${SRC_FUZZERS})
|
||||
endif()
|
||||
|
||||
add_executable(${fuzz_target_name} ${${fuzz_target_name}_SOURCES})
|
||||
set_target_properties(${fuzz_target_name} PROPERTIES C_STANDARD 90)
|
||||
set_target_properties(${fuzz_target_name} PROPERTIES C_EXTENSIONS OFF)
|
||||
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})
|
||||
|
||||
|
||||
@@ -40,8 +40,7 @@ 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_target_properties(git2_cli PROPERTIES C_STANDARD 90)
|
||||
set_target_properties(git2_cli PROPERTIES C_EXTENSIONS OFF)
|
||||
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})
|
||||
|
||||
|
||||
@@ -2,8 +2,7 @@
|
||||
# git library functionality.
|
||||
|
||||
add_library(libgit2 OBJECT)
|
||||
set_target_properties(libgit2 PROPERTIES C_STANDARD 90)
|
||||
set_target_properties(libgit2 PROPERTIES C_EXTENSIONS OFF)
|
||||
set_c_standard(libgit2)
|
||||
|
||||
include(PkgBuildConfig)
|
||||
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
# util: a shared library for common utility functions for libgit2 projects
|
||||
|
||||
add_library(util OBJECT)
|
||||
set_target_properties(util PROPERTIES C_STANDARD 90)
|
||||
set_target_properties(util PROPERTIES C_EXTENSIONS OFF)
|
||||
set_c_standard(util)
|
||||
|
||||
configure_file(git2_features.h.in git2_features.h)
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
# even when they have aggressive C90 warnings enabled.
|
||||
|
||||
add_executable(headertest headertest.c)
|
||||
set_target_properties(headertest PROPERTIES C_STANDARD 90)
|
||||
set_target_properties(headertest PROPERTIES C_EXTENSIONS OFF)
|
||||
set_c_standard(headertest)
|
||||
|
||||
target_include_directories(headertest PRIVATE ${LIBGIT2_INCLUDES})
|
||||
|
||||
if (MSVC)
|
||||
|
||||
@@ -39,9 +39,8 @@ 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 C_STANDARD 90)
|
||||
set_target_properties(libgit2_tests PROPERTIES C_EXTENSIONS OFF)
|
||||
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})
|
||||
target_include_directories(libgit2_tests SYSTEM PRIVATE ${LIBGIT2_SYSTEM_INCLUDES})
|
||||
|
||||
@@ -38,9 +38,8 @@ 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 C_STANDARD 90)
|
||||
set_target_properties(util_tests PROPERTIES C_EXTENSIONS OFF)
|
||||
set_target_properties(util_tests PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${libgit2_BINARY_DIR})
|
||||
|
||||
target_include_directories(util_tests PRIVATE ${TEST_INCLUDES} ${LIBGIT2_INCLUDES} ${LIBGIT2_DEPENDENCY_INCLUDES})
|
||||
|
||||
Reference in New Issue
Block a user