From 9f52423b8bedfca58bf586157542edd096013e8e Mon Sep 17 00:00:00 2001 From: Mathijs Bernson Date: Mon, 18 Dec 2023 20:52:27 +0100 Subject: [PATCH 1/6] Add Swift Package Manager support This adds a SPM manifest that is compatible with the new libgit2 that uses CMake. It does not require any source changes to libgit2 besides adding the `Package.swift` file. --- .gitignore | 2 + Package.swift | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 Package.swift diff --git a/.gitignore b/.gitignore index 1b482f038af..32639af9f52 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,5 @@ CMakeSettings.json .vs .idea +.build +.swiftpm diff --git a/Package.swift b/Package.swift new file mode 100644 index 00000000000..3b6b7310a41 --- /dev/null +++ b/Package.swift @@ -0,0 +1,116 @@ +// swift-tools-version:5.9 +import PackageDescription + +let package = Package( + name: "libgit2", + products: [ + .library(name: "libgit2", targets: ["libgit2"]), + ], + targets: [ + .target( + name: "libgit2", + path: ".", + exclude: [ + "deps/http-parser/CMakeLists.txt", + "deps/http-parser/COPYING", + "deps/pcre/CMakeLists.txt", + "deps/pcre/COPYING", + "deps/pcre/LICENCE", + "deps/pcre/cmake", + "deps/pcre/config.h.in", + "deps/xdiff/CMakeLists.txt", + "deps/zlib/CMakeLists.txt", + "deps/zlib/COPYING", + "src/libgit2/CMakeLists.txt", + "src/libgit2/experimental.h.in", + "src/libgit2/git2.rc", + "src/util/CMakeLists.txt", + "src/util/git2_features.h.in", + "src/util/hash/builtin.c", + "src/util/hash/builtin.h", + "src/util/hash/collisiondetect.c", + "src/util/hash/collisiondetect.h", + "src/util/hash/openssl.c", + "src/util/hash/openssl.h", + "src/util/hash/win32.c", + "src/util/hash/win32.h", + "src/util/win32", + ], + sources: [ + "deps/http-parser", + "deps/pcre", + "deps/xdiff", + "deps/zlib", + "src/libgit2", + "src/util", + ], + publicHeadersPath: "include", + cSettings: [ + .unsafeFlags([ + // Disable -fmodules flag. Clang finds (struct entry) in different file (`search.h`). + "-fno-modules", + // Disable warning: "implicit conversion loses integer precision" + "-Wno-single-bit-bitfield-constant-conversion", + // Disable warning: "a function definition without a prototype is deprecated" + "-Wno-deprecated-non-prototype", + ]), + + .headerSearchPath("deps/http-parser"), + .headerSearchPath("deps/pcre"), + .headerSearchPath("deps/xdiff"), + .headerSearchPath("deps/zlib"), + .headerSearchPath("src/libgit2"), + .headerSearchPath("src/util"), + + .define("LIBGIT2_NO_FEATURES_H"), + + .define("GIT_THREADS", to: "0"), + + .define("GIT_ARCH_64", to: "1"), + + .define("GIT_REGEX_BUILTIN", to: "1"), + .define("PCRE_LINK_SIZE", to: "2"), + + .define("SUPPORT_PCRE8", to: "1"), + .define("LINK_SIZE", to: "2"), + .define("PARENS_NEST_LIMIT", to: "250"), + .define("MATCH_LIMIT", to: "10000000"), + .define("MATCH_LIMIT_RECURSION", to: "10000000"), + .define("NEWLINE", to: "10"), // LF + .define("NO_RECURSE", to: "1"), + .define("POSIX_MALLOC_THRESHOLD", to: "10"), + .define("BSR_ANYCRLF", to: "0"), + .define("MAX_NAME_SIZE", to: "32"), + .define("MAX_NAME_COUNT", to: "10000"), + + .define("GIT_QSORT_BSD"), + + .define("GIT_SSH", to: "1"), + // .define("GIT_SSH_EXEC", to: "0"), + // .define("GIT_SSH_LIBSSH2", to: "0"), + // .define("GIT_SSH_LIBSSH2_MEMORY_CREDENTIALS", to: "0"), + + // .define("GIT_NTLM", to: "0"), + // .define("GIT_GSSAPI", to: "0"), + // .define("GIT_GSSFRAMEWORK", to: "0"), + + .define("GIT_HTTPS", to: "1"), + // .define("GIT_OPENSSL", to: "0"), + // .define("GIT_OPENSSL_DYNAMIC", to: "0"), + // .define("GIT_SECURE_TRANSPORT", to: "0"), + // .define("GIT_MBEDTLS", to: "0"), + // .define("GIT_SCHANNEL", to: "0"), + + .define("GIT_SHA1_COMMON_CRYPTO", to: "1"), + .define("GIT_SHA256_COMMON_CRYPTO", to: "1"), + + // .define("GIT_RAND_GETENTROPY", to: "0"), + // .define("GIT_RAND_GETLOADAVG", to: "0"), + + .define("GIT_IO_POLL", to: "1"), + // .define("GIT_IO_WSAPOLL", to: "0"), + // .define("GIT_IO_SELECT", to: "0"), + ] + ), + ] +) From cfee783d712b8ee68cfd32f16dace87b9feacc32 Mon Sep 17 00:00:00 2001 From: Mathijs Bernson Date: Mon, 18 Dec 2023 21:35:39 +0100 Subject: [PATCH 2/6] Disable threads --- Package.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index 3b6b7310a41..cf33ec18afc 100644 --- a/Package.swift +++ b/Package.swift @@ -64,7 +64,7 @@ let package = Package( .define("LIBGIT2_NO_FEATURES_H"), - .define("GIT_THREADS", to: "0"), + // .define("GIT_THREADS", to: "0"), .define("GIT_ARCH_64", to: "1"), From 647c6aae400c8d02d051ccff62b7645fe6e721bc Mon Sep 17 00:00:00 2001 From: Mathijs Bernson Date: Sun, 31 Dec 2023 17:56:44 +0100 Subject: [PATCH 3/6] Configure libgit2 for Apple platforms Use the built-in SecureTransport and CommonCrypto. Use SSH exec. --- Package.swift | 37 ++++++++++--------------------------- 1 file changed, 10 insertions(+), 27 deletions(-) diff --git a/Package.swift b/Package.swift index cf33ec18afc..1acc035e0fd 100644 --- a/Package.swift +++ b/Package.swift @@ -63,14 +63,13 @@ let package = Package( .headerSearchPath("src/util"), .define("LIBGIT2_NO_FEATURES_H"), - - // .define("GIT_THREADS", to: "0"), - .define("GIT_ARCH_64", to: "1"), + .define("GIT_QSORT_BSD", to: "1"), + .define("GIT_IO_POLL", to: "1"), + // Git regex configuration .define("GIT_REGEX_BUILTIN", to: "1"), .define("PCRE_LINK_SIZE", to: "2"), - .define("SUPPORT_PCRE8", to: "1"), .define("LINK_SIZE", to: "2"), .define("PARENS_NEST_LIMIT", to: "250"), @@ -83,33 +82,17 @@ let package = Package( .define("MAX_NAME_SIZE", to: "32"), .define("MAX_NAME_COUNT", to: "10000"), - .define("GIT_QSORT_BSD"), - - .define("GIT_SSH", to: "1"), - // .define("GIT_SSH_EXEC", to: "0"), - // .define("GIT_SSH_LIBSSH2", to: "0"), - // .define("GIT_SSH_LIBSSH2_MEMORY_CREDENTIALS", to: "0"), + // Git SSH transport configuration + .define("GIT_SSH", to: "1"), + .define("GIT_SSH_EXEC", to: "1"), - // .define("GIT_NTLM", to: "0"), - // .define("GIT_GSSAPI", to: "0"), - // .define("GIT_GSSFRAMEWORK", to: "0"), - - .define("GIT_HTTPS", to: "1"), - // .define("GIT_OPENSSL", to: "0"), - // .define("GIT_OPENSSL_DYNAMIC", to: "0"), - // .define("GIT_SECURE_TRANSPORT", to: "0"), - // .define("GIT_MBEDTLS", to: "0"), - // .define("GIT_SCHANNEL", to: "0"), + // Git HTTPS transport configuration + .define("GIT_HTTPS", to: "1"), + .define("GIT_SECURE_TRANSPORT", to: "1"), + // Git cryptography configuration .define("GIT_SHA1_COMMON_CRYPTO", to: "1"), .define("GIT_SHA256_COMMON_CRYPTO", to: "1"), - - // .define("GIT_RAND_GETENTROPY", to: "0"), - // .define("GIT_RAND_GETLOADAVG", to: "0"), - - .define("GIT_IO_POLL", to: "1"), - // .define("GIT_IO_WSAPOLL", to: "0"), - // .define("GIT_IO_SELECT", to: "0"), ] ), ] From 49ca535fab6b45f04fcfea72a296d15f7c4c4b29 Mon Sep 17 00:00:00 2001 From: Mathijs Bernson Date: Sat, 6 Jan 2024 18:43:25 +0100 Subject: [PATCH 4/6] Update zlib license path --- Package.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index 1acc035e0fd..aaf899a843c 100644 --- a/Package.swift +++ b/Package.swift @@ -20,7 +20,7 @@ let package = Package( "deps/pcre/config.h.in", "deps/xdiff/CMakeLists.txt", "deps/zlib/CMakeLists.txt", - "deps/zlib/COPYING", + "deps/zlib/LICENSE", "src/libgit2/CMakeLists.txt", "src/libgit2/experimental.h.in", "src/libgit2/git2.rc", From dcfcda4317a38553438b1d875ca1a462f56a4c2d Mon Sep 17 00:00:00 2001 From: Mathijs Bernson Date: Thu, 29 Feb 2024 10:10:04 +0100 Subject: [PATCH 5/6] Update comment --- Package.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Package.swift b/Package.swift index aaf899a843c..b7a0d856776 100644 --- a/Package.swift +++ b/Package.swift @@ -47,7 +47,7 @@ let package = Package( publicHeadersPath: "include", cSettings: [ .unsafeFlags([ - // Disable -fmodules flag. Clang finds (struct entry) in different file (`search.h`). + // Disable -fmodules flag. Clang finds (`struct entry`) in a different file (`search.h`). "-fno-modules", // Disable warning: "implicit conversion loses integer precision" "-Wno-single-bit-bitfield-constant-conversion", From 160ab4b0b213679c3188d97536534446bf189737 Mon Sep 17 00:00:00 2001 From: Mathijs Bernson Date: Tue, 28 May 2024 15:16:49 +0200 Subject: [PATCH 6/6] Update Package.swift --- Package.swift | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Package.swift b/Package.swift index b7a0d856776..86122bc0867 100644 --- a/Package.swift +++ b/Package.swift @@ -11,8 +11,8 @@ let package = Package( name: "libgit2", path: ".", exclude: [ - "deps/http-parser/CMakeLists.txt", - "deps/http-parser/COPYING", + "deps/llhttp/CMakeLists.txt", + "deps/llhttp/LICENSE-MIT", "deps/pcre/CMakeLists.txt", "deps/pcre/COPYING", "deps/pcre/LICENCE", @@ -37,7 +37,7 @@ let package = Package( "src/util/win32", ], sources: [ - "deps/http-parser", + "deps/llhttp", "deps/pcre", "deps/xdiff", "deps/zlib", @@ -55,7 +55,7 @@ let package = Package( "-Wno-deprecated-non-prototype", ]), - .headerSearchPath("deps/http-parser"), + .headerSearchPath("deps/llhttp"), .headerSearchPath("deps/pcre"), .headerSearchPath("deps/xdiff"), .headerSearchPath("deps/zlib"), @@ -88,6 +88,7 @@ let package = Package( // Git HTTPS transport configuration .define("GIT_HTTPS", to: "1"), + .define("GIT_HTTPPARSER_BUILTIN", to: "1"), .define("GIT_SECURE_TRANSPORT", to: "1"), // Git cryptography configuration