From 462dbe21d0edc3817d53900702e68d666c303600 Mon Sep 17 00:00:00 2001 From: Edward Thomson Date: Wed, 15 Feb 2023 10:26:50 +0000 Subject: [PATCH] xdiff: move xdiff to 'deps' xdiff is a dependency (from git core) and more properly belongs in the 'deps' directory. Move it there, and add a stub for cmake to resolve xdiff from the system location in the future. (At present, bundled xdiff remains hardcoded.) --- CMakeLists.txt | 1 + cmake/SelectXdiff.cmake | 9 ++++++++ deps/xdiff/CMakeLists.txt | 28 ++++++++++++++++++++++++ {src/libgit2 => deps}/xdiff/git-xdiff.h | 0 {src/libgit2 => deps}/xdiff/xdiff.h | 0 {src/libgit2 => deps}/xdiff/xdiffi.c | 0 {src/libgit2 => deps}/xdiff/xdiffi.h | 0 {src/libgit2 => deps}/xdiff/xemit.c | 0 {src/libgit2 => deps}/xdiff/xemit.h | 0 {src/libgit2 => deps}/xdiff/xhistogram.c | 0 {src/libgit2 => deps}/xdiff/xinclude.h | 0 {src/libgit2 => deps}/xdiff/xmacros.h | 0 {src/libgit2 => deps}/xdiff/xmerge.c | 0 {src/libgit2 => deps}/xdiff/xpatience.c | 0 {src/libgit2 => deps}/xdiff/xprepare.c | 0 {src/libgit2 => deps}/xdiff/xprepare.h | 0 {src/libgit2 => deps}/xdiff/xtypes.h | 0 {src/libgit2 => deps}/xdiff/xutils.c | 0 {src/libgit2 => deps}/xdiff/xutils.h | 0 src/CMakeLists.txt | 1 + src/libgit2/CMakeLists.txt | 20 +---------------- src/libgit2/blame_git.c | 1 - src/libgit2/diff_xdiff.h | 2 +- src/libgit2/merge_file.c | 2 -- 24 files changed, 41 insertions(+), 23 deletions(-) create mode 100644 cmake/SelectXdiff.cmake create mode 100644 deps/xdiff/CMakeLists.txt rename {src/libgit2 => deps}/xdiff/git-xdiff.h (100%) rename {src/libgit2 => deps}/xdiff/xdiff.h (100%) rename {src/libgit2 => deps}/xdiff/xdiffi.c (100%) rename {src/libgit2 => deps}/xdiff/xdiffi.h (100%) rename {src/libgit2 => deps}/xdiff/xemit.c (100%) rename {src/libgit2 => deps}/xdiff/xemit.h (100%) rename {src/libgit2 => deps}/xdiff/xhistogram.c (100%) rename {src/libgit2 => deps}/xdiff/xinclude.h (100%) rename {src/libgit2 => deps}/xdiff/xmacros.h (100%) rename {src/libgit2 => deps}/xdiff/xmerge.c (100%) rename {src/libgit2 => deps}/xdiff/xpatience.c (100%) rename {src/libgit2 => deps}/xdiff/xprepare.c (100%) rename {src/libgit2 => deps}/xdiff/xprepare.h (100%) rename {src/libgit2 => deps}/xdiff/xtypes.h (100%) rename {src/libgit2 => deps}/xdiff/xutils.c (100%) rename {src/libgit2 => deps}/xdiff/xutils.h (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 710915da1..fc31faeca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,6 +36,7 @@ option(USE_SHA1 "Enable SHA1. Can be set to CollisionDetection(ON option(USE_SHA256 "Enable SHA256. Can be set to HTTPS/Builtin" ON) option(USE_GSSAPI "Link with libgssapi for SPNEGO auth" OFF) set(USE_HTTP_PARSER "" CACHE STRING "Specifies the HTTP Parser implementation; either system or builtin.") +# set(USE_XDIFF "" CACHE STRING "Specifies the xdiff implementation; either system or builtin.") set(REGEX_BACKEND "" CACHE STRING "Regular expression implementation. One of regcomp_l, pcre2, pcre, regcomp, or builtin.") option(USE_BUNDLED_ZLIB "Use the bundled version of zlib. Can be set to one of Bundled(ON)/Chromium. The Chromium option requires a x86_64 processor with SSE4.2 and CLMUL" OFF) diff --git a/cmake/SelectXdiff.cmake b/cmake/SelectXdiff.cmake new file mode 100644 index 000000000..9ab9f3f4f --- /dev/null +++ b/cmake/SelectXdiff.cmake @@ -0,0 +1,9 @@ +# Optional external dependency: xdiff +if(USE_XDIFF STREQUAL "system") + message(FATAL_ERROR "external/system xdiff is not yet supported") +else() + add_subdirectory("${PROJECT_SOURCE_DIR}/deps/xdiff" "${PROJECT_BINARY_DIR}/deps/xdiff") + list(APPEND LIBGIT2_DEPENDENCY_INCLUDES "${PROJECT_SOURCE_DIR}/deps/xdiff") + list(APPEND LIBGIT2_DEPENDENCY_OBJECTS "$") + add_feature_info(xdiff ON "xdiff support (bundled)") +endif() diff --git a/deps/xdiff/CMakeLists.txt b/deps/xdiff/CMakeLists.txt new file mode 100644 index 000000000..743ac636f --- /dev/null +++ b/deps/xdiff/CMakeLists.txt @@ -0,0 +1,28 @@ + +file(GLOB SRC_XDIFF "*.c" "*.h") +list(SORT SRC_XDIFF) + +add_library(xdiff OBJECT ${SRC_XDIFF}) +target_include_directories(xdiff SYSTEM PRIVATE + "${PROJECT_SOURCE_DIR}/include" + "${PROJECT_SOURCE_DIR}/src/util" + "${PROJECT_BINARY_DIR}/src/util" + ${LIBGIT2_SYSTEM_INCLUDES} + ${LIBGIT2_DEPENDENCY_INCLUDES}) + +# the xdiff dependency is not (yet) warning-free, disable warnings +# as errors for the xdiff sources until we've sorted them out +if(MSVC) + set_source_files_properties(xdiffi.c PROPERTIES COMPILE_FLAGS -WX-) + set_source_files_properties(xemit.c PROPERTIES COMPILE_FLAGS -WX-) + set_source_files_properties(xhistogram.c PROPERTIES COMPILE_FLAGS -WX-) + set_source_files_properties(xmerge.c PROPERTIES COMPILE_FLAGS -WX-) + set_source_files_properties(xutils.c PROPERTIES COMPILE_FLAGS -WX-) + set_source_files_properties(xpatience.c PROPERTIES COMPILE_FLAGS -WX-) +else() + set_source_files_properties(xdiffi.c PROPERTIES COMPILE_FLAGS "-Wno-sign-compare -Wno-unused-parameter") + set_source_files_properties(xemit.c PROPERTIES COMPILE_FLAGS "-Wno-sign-compare -Wno-unused-parameter") + set_source_files_properties(xhistogram.c PROPERTIES COMPILE_FLAGS "-Wno-sign-compare") + set_source_files_properties(xutils.c PROPERTIES COMPILE_FLAGS "-Wno-sign-compare") + set_source_files_properties(xpatience.c PROPERTIES COMPILE_FLAGS "-Wno-sign-compare") +endif() diff --git a/src/libgit2/xdiff/git-xdiff.h b/deps/xdiff/git-xdiff.h similarity index 100% rename from src/libgit2/xdiff/git-xdiff.h rename to deps/xdiff/git-xdiff.h diff --git a/src/libgit2/xdiff/xdiff.h b/deps/xdiff/xdiff.h similarity index 100% rename from src/libgit2/xdiff/xdiff.h rename to deps/xdiff/xdiff.h diff --git a/src/libgit2/xdiff/xdiffi.c b/deps/xdiff/xdiffi.c similarity index 100% rename from src/libgit2/xdiff/xdiffi.c rename to deps/xdiff/xdiffi.c diff --git a/src/libgit2/xdiff/xdiffi.h b/deps/xdiff/xdiffi.h similarity index 100% rename from src/libgit2/xdiff/xdiffi.h rename to deps/xdiff/xdiffi.h diff --git a/src/libgit2/xdiff/xemit.c b/deps/xdiff/xemit.c similarity index 100% rename from src/libgit2/xdiff/xemit.c rename to deps/xdiff/xemit.c diff --git a/src/libgit2/xdiff/xemit.h b/deps/xdiff/xemit.h similarity index 100% rename from src/libgit2/xdiff/xemit.h rename to deps/xdiff/xemit.h diff --git a/src/libgit2/xdiff/xhistogram.c b/deps/xdiff/xhistogram.c similarity index 100% rename from src/libgit2/xdiff/xhistogram.c rename to deps/xdiff/xhistogram.c diff --git a/src/libgit2/xdiff/xinclude.h b/deps/xdiff/xinclude.h similarity index 100% rename from src/libgit2/xdiff/xinclude.h rename to deps/xdiff/xinclude.h diff --git a/src/libgit2/xdiff/xmacros.h b/deps/xdiff/xmacros.h similarity index 100% rename from src/libgit2/xdiff/xmacros.h rename to deps/xdiff/xmacros.h diff --git a/src/libgit2/xdiff/xmerge.c b/deps/xdiff/xmerge.c similarity index 100% rename from src/libgit2/xdiff/xmerge.c rename to deps/xdiff/xmerge.c diff --git a/src/libgit2/xdiff/xpatience.c b/deps/xdiff/xpatience.c similarity index 100% rename from src/libgit2/xdiff/xpatience.c rename to deps/xdiff/xpatience.c diff --git a/src/libgit2/xdiff/xprepare.c b/deps/xdiff/xprepare.c similarity index 100% rename from src/libgit2/xdiff/xprepare.c rename to deps/xdiff/xprepare.c diff --git a/src/libgit2/xdiff/xprepare.h b/deps/xdiff/xprepare.h similarity index 100% rename from src/libgit2/xdiff/xprepare.h rename to deps/xdiff/xprepare.h diff --git a/src/libgit2/xdiff/xtypes.h b/deps/xdiff/xtypes.h similarity index 100% rename from src/libgit2/xdiff/xtypes.h rename to deps/xdiff/xtypes.h diff --git a/src/libgit2/xdiff/xutils.c b/deps/xdiff/xutils.c similarity index 100% rename from src/libgit2/xdiff/xutils.c rename to deps/xdiff/xutils.c diff --git a/src/libgit2/xdiff/xutils.h b/deps/xdiff/xutils.h similarity index 100% rename from src/libgit2/xdiff/xutils.h rename to deps/xdiff/xutils.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e108b2e79..e14bd36c2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -41,6 +41,7 @@ include(SelectHTTPSBackend) include(SelectHashes) include(SelectHTTPParser) include(SelectRegex) +include(SelectXdiff) include(SelectSSH) include(SelectWinHTTP) include(SelectZlib) diff --git a/src/libgit2/CMakeLists.txt b/src/libgit2/CMakeLists.txt index 03b571212..5c453aab9 100644 --- a/src/libgit2/CMakeLists.txt +++ b/src/libgit2/CMakeLists.txt @@ -25,8 +25,7 @@ target_sources(libgit2 PRIVATE ${SRC_H}) file(GLOB SRC_GIT2 *.c *.h streams/*.c streams/*.h - transports/*.c transports/*.h - xdiff/*.c xdiff/*.h) + transports/*.c transports/*.h) list(SORT SRC_GIT2) target_sources(libgit2 PRIVATE ${SRC_GIT2}) @@ -40,23 +39,6 @@ if(APPLE) set_source_files_properties(streams/stransport.c PROPERTIES COMPILE_FLAGS -Wno-deprecated) endif() -# the xdiff dependency is not (yet) warning-free, disable warnings -# as errors for the xdiff sources until we've sorted them out -if(MSVC) - set_source_files_properties(xdiff/xdiffi.c PROPERTIES COMPILE_FLAGS -WX-) - set_source_files_properties(xdiff/xemit.c PROPERTIES COMPILE_FLAGS -WX-) - set_source_files_properties(xdiff/xhistogram.c PROPERTIES COMPILE_FLAGS -WX-) - set_source_files_properties(xdiff/xmerge.c PROPERTIES COMPILE_FLAGS -WX-) - set_source_files_properties(xdiff/xutils.c PROPERTIES COMPILE_FLAGS -WX-) - set_source_files_properties(xdiff/xpatience.c PROPERTIES COMPILE_FLAGS -WX-) -else() - set_source_files_properties(xdiff/xdiffi.c PROPERTIES COMPILE_FLAGS "-Wno-sign-compare -Wno-unused-parameter") - set_source_files_properties(xdiff/xemit.c PROPERTIES COMPILE_FLAGS "-Wno-sign-compare -Wno-unused-parameter") - set_source_files_properties(xdiff/xhistogram.c PROPERTIES COMPILE_FLAGS "-Wno-sign-compare") - set_source_files_properties(xdiff/xutils.c PROPERTIES COMPILE_FLAGS "-Wno-sign-compare") - set_source_files_properties(xdiff/xpatience.c PROPERTIES COMPILE_FLAGS "-Wno-sign-compare") -endif() - ide_split_sources(libgit2) list(APPEND LIBGIT2_OBJECTS $ $ ${LIBGIT2_DEPENDENCY_OBJECTS}) list(APPEND LIBGIT2_INCLUDES ${LIBGIT2_DEPENDENCY_INCLUDES}) diff --git a/src/libgit2/blame_git.c b/src/libgit2/blame_git.c index 2504b338a..69897b386 100644 --- a/src/libgit2/blame_git.c +++ b/src/libgit2/blame_git.c @@ -9,7 +9,6 @@ #include "commit.h" #include "blob.h" -#include "xdiff/xinclude.h" #include "diff_xdiff.h" /* diff --git a/src/libgit2/diff_xdiff.h b/src/libgit2/diff_xdiff.h index 9b303e9dc..327dc7c4a 100644 --- a/src/libgit2/diff_xdiff.h +++ b/src/libgit2/diff_xdiff.h @@ -10,7 +10,7 @@ #include "common.h" #include "diff.h" -#include "xdiff/xdiff.h" +#include "xdiff.h" #include "patch_generate.h" /* xdiff cannot cope with large files. these files should not be passed to diff --git a/src/libgit2/merge_file.c b/src/libgit2/merge_file.c index 732a047b1..ffe83cf2a 100644 --- a/src/libgit2/merge_file.c +++ b/src/libgit2/merge_file.c @@ -19,8 +19,6 @@ #include "git2/index.h" #include "git2/merge.h" -#include "xdiff/xdiff.h" - /* only examine the first 8000 bytes for binaryness. * https://github.com/git/git/blob/77bd3ea9f54f1584147b594abc04c26ca516d987/xdiff-interface.c#L197 */