mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2025-01-11 13:49:23 -05:00
gnu: libgit2: Update to 0.99.0.
* gnu/packages/patches/libgit2-avoid-python.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Adjust accordingly. * gnu/packages/version-control.scm (libgit2): Update to 0.99.0. [source](patches): Remove 'libgit2-avoid-python.patch'. [source](snippet): Preserve bundled copy of http-parser. [arguments]: Remove "-DUSE_SHA1DC" from #:configure-flags, which is no longer optional and enabled by default. Add "-DUSE_NTLMCLIENT=OFF" and "-DREGEX_BACKEND=pcre2". Add phase 'fix-pcre2-reference'. [inputs]: Remove HTTP-PARSER. [propagated-inputs]: Add PCRE2. [native-inputs]: Remove GUILE-2.2. Add PYTHON.
This commit is contained in:
parent
2f894cbc6a
commit
0a7aa6922b
3 changed files with 30 additions and 337 deletions
|
@ -1096,7 +1096,6 @@ dist_patch_DATA = \
|
|||
%D%/packages/patches/libexif-CVE-2018-20030.patch \
|
||||
%D%/packages/patches/libextractor-exiv2.patch \
|
||||
%D%/packages/patches/libgeotiff-adapt-test-script-for-proj-6.2.patch \
|
||||
%D%/packages/patches/libgit2-avoid-python.patch \
|
||||
%D%/packages/patches/libgit2-mtime-0.patch \
|
||||
%D%/packages/patches/libgnome-encoding.patch \
|
||||
%D%/packages/patches/libgnomeui-utf8.patch \
|
||||
|
|
|
@ -1,322 +0,0 @@
|
|||
This provides a Guile reimplementation of clar's "generate.py".
|
||||
It makes it possible for us to remove Python from libgit2's build-time
|
||||
dependencies.
|
||||
libgit2 is used in order to fetch a lot of sources for guix packages.
|
||||
Both Python2 and Python3 builds acted up in the past.
|
||||
Hence this patch which makes the number of libgit2 dependencies very
|
||||
small.
|
||||
The reimplementation tries to keep as close as possible to the original
|
||||
in both structure and runtime effect. Some things are thus overly
|
||||
convoluted just to make them the same as in the original.
|
||||
|
||||
Both implementations basically do:
|
||||
|
||||
grep -r 'test_.*__.*' . > clar.suite
|
||||
|
||||
It is important that the directory traversal order of the original and
|
||||
the reimplementation stay the same.
|
||||
|
||||
diff -ruN orig/libgit2-0.27.7/tests/CMakeLists.txt libgit2-0.27.7/tests/CMakeLists.txt
|
||||
--- orig/libgit2-0.27.7/tests/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ libgit2-0.27.7/tests/CMakeLists.txt 2019-03-04 11:13:06.640118979 +0100
|
||||
@@ -1,10 +1,3 @@
|
||||
-FIND_PACKAGE(PythonInterp)
|
||||
-
|
||||
-IF(NOT PYTHONINTERP_FOUND)
|
||||
- MESSAGE(FATAL_ERROR "Could not find a python interpeter, which is needed to build the tests. "
|
||||
- "Make sure python is available, or pass -DBUILD_CLAR=OFF to skip building the tests")
|
||||
-ENDIF()
|
||||
-
|
||||
SET(CLAR_FIXTURES "${CMAKE_CURRENT_SOURCE_DIR}/resources/")
|
||||
SET(CLAR_PATH "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
ADD_DEFINITIONS(-DCLAR_FIXTURE_PATH=\"${CLAR_FIXTURES}\")
|
||||
@@ -21,7 +14,7 @@
|
||||
|
||||
ADD_CUSTOM_COMMAND(
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/clar.suite
|
||||
- COMMAND ${PYTHON_EXECUTABLE} generate.py -o "${CMAKE_CURRENT_BINARY_DIR}" -f -xonline -xstress -xperf .
|
||||
+ COMMAND guile generate.scm -o "${CMAKE_CURRENT_BINARY_DIR}" -f -x online -x stress -x perf .
|
||||
DEPENDS ${SRC_TEST}
|
||||
WORKING_DIRECTORY ${CLAR_PATH}
|
||||
)
|
||||
diff -ruN orig/libgit2-0.27.7/tests/generate.scm libgit2-0.27.7/tests/generate.scm
|
||||
--- orig/libgit2-0.27.7/tests/generate.scm 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ libgit2-0.27.7/tests/generate.scm 2019-03-04 12:18:00.688040975 +0100
|
||||
@@ -0,0 +1,277 @@
|
||||
+;; -*- geiser-scheme-implementation: guile -*-
|
||||
+
|
||||
+;;; Implementation: Danny Milosavljevic <dannym@scratchpost.org>
|
||||
+;;; Based on: Implementation in Python by Vicent Marti.
|
||||
+;;; License: ISC, like the original generate.py in clar.
|
||||
+
|
||||
+(use-modules (ice-9 ftw))
|
||||
+(use-modules (ice-9 regex))
|
||||
+(use-modules (ice-9 getopt-long))
|
||||
+(use-modules (ice-9 rdelim))
|
||||
+(use-modules (ice-9 match))
|
||||
+(use-modules (ice-9 textual-ports))
|
||||
+(use-modules (srfi srfi-1))
|
||||
+
|
||||
+(define (render-callback cb)
|
||||
+ (if cb
|
||||
+ (string-append " { \"" (assoc-ref cb "short-name") "\", &"
|
||||
+ (assoc-ref cb "symbol") " }")
|
||||
+ " { NULL, NULL }"))
|
||||
+
|
||||
+(define (replace needle replacement haystack)
|
||||
+ "Replace all occurences of NEEDLE in HAYSTACK by REPLACEMENT.
|
||||
+NEEDLE is a regular expression."
|
||||
+ (regexp-substitute/global #f needle haystack 'pre replacement 'post))
|
||||
+
|
||||
+(define (skip-comments* text)
|
||||
+ (call-with-input-string
|
||||
+ text
|
||||
+ (lambda (port)
|
||||
+ (let loop ((result '())
|
||||
+ (section #f))
|
||||
+ (define (consume-char)
|
||||
+ (cons (read-char port) result))
|
||||
+ (define (skip-char)
|
||||
+ (read-char port)
|
||||
+ result)
|
||||
+ (match section
|
||||
+ (#f
|
||||
+ (match (peek-char port)
|
||||
+ (#\/ (loop (consume-char) 'almost-in-block-comment))
|
||||
+ (#\" (loop (consume-char) 'in-string-literal))
|
||||
+ (#\' (loop (consume-char) 'in-character-literal))
|
||||
+ ((? eof-object?) result)
|
||||
+ (_ (loop (consume-char) section))))
|
||||
+ ('almost-in-block-comment
|
||||
+ (match (peek-char port)
|
||||
+ (#\* (loop (consume-char) 'in-block-comment))
|
||||
+ (#\/ (loop (consume-char) 'in-line-comment))
|
||||
+ ((? eof-object?) result)
|
||||
+ (_ (loop (consume-char) #f))))
|
||||
+ ('in-line-comment
|
||||
+ (match (peek-char port)
|
||||
+ (#\newline (loop (consume-char) #f))
|
||||
+ ((? eof-object?) result)
|
||||
+ (_ (loop (skip-char) section))))
|
||||
+ ('in-block-comment
|
||||
+ (match (peek-char port)
|
||||
+ (#\* (loop (skip-char) 'almost-out-of-block-comment))
|
||||
+ ((? eof-object?) result)
|
||||
+ (_ (loop (skip-char) section))))
|
||||
+ ('almost-out-of-block-comment
|
||||
+ (match (peek-char port)
|
||||
+ (#\/ (loop (cons (read-char port) (cons #\* result)) #f))
|
||||
+ (#\* (loop (skip-char) 'almost-out-of-block-comment))
|
||||
+ ((? eof-object?) result)
|
||||
+ (_ (loop (skip-char) 'in-block-comment))))
|
||||
+ ('in-string-literal
|
||||
+ (match (peek-char port)
|
||||
+ (#\\ (loop (consume-char) 'in-string-literal-escape))
|
||||
+ (#\" (loop (consume-char) #f))
|
||||
+ ((? eof-object?) result)
|
||||
+ (_ (loop (consume-char) section))))
|
||||
+ ('in-string-literal-escape
|
||||
+ (match (peek-char port)
|
||||
+ ((? eof-object?) result)
|
||||
+ (_ (loop (consume-char) 'in-string-literal))))
|
||||
+ ('in-character-literal
|
||||
+ (match (peek-char port)
|
||||
+ (#\\ (loop (consume-char) 'in-character-literal-escape))
|
||||
+ (#\' (loop (consume-char) #f))
|
||||
+ ((? eof-object?) result)
|
||||
+ (_ (loop (consume-char) section))))
|
||||
+ ('in-character-literal-escape
|
||||
+ (match (peek-char port)
|
||||
+ ((? eof-object?) result)
|
||||
+ (_ (loop (consume-char) 'in-character-literal)))))))))
|
||||
+
|
||||
+(define (skip-comments text)
|
||||
+ (list->string (reverse (skip-comments* text))))
|
||||
+
|
||||
+(define (maybe-only items)
|
||||
+ (match items
|
||||
+ ((a) a)
|
||||
+ (_ #f)))
|
||||
+
|
||||
+(define (Module name path excludes)
|
||||
+ (let* ((clean-name (replace "_" "::" name))
|
||||
+ (enabled (not (any (lambda (exclude)
|
||||
+ (string-prefix? exclude clean-name))
|
||||
+ excludes))))
|
||||
+ (define (parse contents)
|
||||
+ (define (cons-match match prev)
|
||||
+ (cons
|
||||
+ `(("declaration" . ,(match:substring match 1))
|
||||
+ ("symbol" . ,(match:substring match 2))
|
||||
+ ("short-name" . ,(match:substring match 3)))
|
||||
+ prev))
|
||||
+ (let* ((contents (skip-comments contents))
|
||||
+ (entries (fold-matches (make-regexp
|
||||
+ (string-append "^(void\\s+(test_"
|
||||
+ name
|
||||
+ "__(\\w+))\\s*\\(\\s*void\\s*\\))\\s*\\{")
|
||||
+ regexp/newline)
|
||||
+ contents
|
||||
+ '()
|
||||
+ cons-match))
|
||||
+ (entries (reverse entries))
|
||||
+ (callbacks (filter (lambda (entry)
|
||||
+ (match (assoc-ref entry "short-name")
|
||||
+ ("initialize" #f)
|
||||
+ ("cleanup" #f)
|
||||
+ (_ #t)))
|
||||
+ entries)))
|
||||
+ (if (> (length callbacks) 0)
|
||||
+ `(("name" . ,name)
|
||||
+ ("enabled" . ,(if enabled "1" "0"))
|
||||
+ ("clean-name" . ,clean-name)
|
||||
+ ("initialize" . ,(maybe-only (filter-map (lambda (entry)
|
||||
+ (match (assoc-ref entry "short-name")
|
||||
+ ("initialize" entry)
|
||||
+ (_ #f)))
|
||||
+ entries)))
|
||||
+ ("cleanup" . ,(maybe-only (filter-map (lambda (entry)
|
||||
+ (match (assoc-ref entry "short-name")
|
||||
+ ("cleanup" entry)
|
||||
+ (_ #f)))
|
||||
+ entries)))
|
||||
+ ("callbacks" . ,callbacks))
|
||||
+ #f)))
|
||||
+
|
||||
+ (define (refresh path)
|
||||
+ (and (file-exists? path)
|
||||
+ (parse (call-with-input-file path get-string-all))))
|
||||
+ (refresh path)))
|
||||
+
|
||||
+(define (generate-TestSuite path output excludes)
|
||||
+ (define (load)
|
||||
+ (define enter? (const #t))
|
||||
+ (define (leaf file stat result)
|
||||
+ (let* ((module-root (string-drop (dirname file)
|
||||
+ (string-length path)))
|
||||
+ (module-root (filter-map (match-lambda
|
||||
+ ("" #f)
|
||||
+ (a a))
|
||||
+ (string-split module-root #\/))))
|
||||
+ (define (make-module path)
|
||||
+ (let* ((name (string-join (append module-root (list (string-drop-right (basename path) (string-length ".c")))) "_"))
|
||||
+ (name (replace "-" "_" name)))
|
||||
+ (Module name path excludes)))
|
||||
+ (if (string-suffix? ".c" file)
|
||||
+ (let ((module (make-module file)))
|
||||
+ (if module
|
||||
+ (cons module result)
|
||||
+ result))
|
||||
+ result)))
|
||||
+ (define (down dir stat result)
|
||||
+ result)
|
||||
+ (define (up file state result)
|
||||
+ result)
|
||||
+ (define skip (const #f))
|
||||
+ (file-system-fold enter? leaf down up skip error '() path))
|
||||
+
|
||||
+ (define (CallbacksTemplate module)
|
||||
+ (string-append "static const struct clar_func _clar_cb_"
|
||||
+ (assoc-ref module "name") "[] = {\n"
|
||||
+ (string-join (map render-callback
|
||||
+ (assoc-ref module "callbacks"))
|
||||
+ ",\n")
|
||||
+ "\n};\n"))
|
||||
+
|
||||
+ (define (DeclarationTemplate module)
|
||||
+ (string-append (string-join (map (lambda (cb)
|
||||
+ (string-append "extern "
|
||||
+ (assoc-ref cb "declaration")
|
||||
+ ";"))
|
||||
+ (assoc-ref module "callbacks"))
|
||||
+ "\n")
|
||||
+ "\n"
|
||||
+ (if (assoc-ref module "initialize")
|
||||
+ (string-append "extern " (assoc-ref (assoc-ref module "initialize") "declaration") ";\n")
|
||||
+ "")
|
||||
+ (if (assoc-ref module "cleanup")
|
||||
+ (string-append "extern " (assoc-ref (assoc-ref module "cleanup") "declaration") ";\n")
|
||||
+ "")))
|
||||
+
|
||||
+ (define (InfoTemplate module)
|
||||
+ (string-append "
|
||||
+ {
|
||||
+ \"" (assoc-ref module "clean-name") "\",
|
||||
+ " (render-callback (assoc-ref module "initialize")) ",
|
||||
+ " (render-callback (assoc-ref module "cleanup")) ",
|
||||
+ _clar_cb_" (assoc-ref module "name") ", "
|
||||
+ (number->string (length (assoc-ref module "callbacks")))
|
||||
+ ", " (assoc-ref module "enabled") "
|
||||
+ }"))
|
||||
+
|
||||
+ (define (Write data)
|
||||
+ (define (name< module-a module-b)
|
||||
+ (string<? (assoc-ref module-a "name")
|
||||
+ (assoc-ref module-b "name")))
|
||||
+ (define modules (sort (load) name<))
|
||||
+
|
||||
+ (define (suite-count)
|
||||
+ (length modules))
|
||||
+
|
||||
+ (define (callback-count)
|
||||
+ (fold + 0 (map (lambda (entry)
|
||||
+ (length (assoc-ref entry "callbacks")))
|
||||
+ modules)))
|
||||
+
|
||||
+ (define (display-x value)
|
||||
+ (display value data))
|
||||
+
|
||||
+ (for-each (compose display-x DeclarationTemplate) modules)
|
||||
+ (for-each (compose display-x CallbacksTemplate) modules)
|
||||
+
|
||||
+ (display-x "static struct clar_suite _clar_suites[] = {")
|
||||
+ (display-x (string-join (map InfoTemplate modules) ","))
|
||||
+ (display-x "\n};\n")
|
||||
+
|
||||
+ (let ((suite-count-str (number->string (suite-count)))
|
||||
+ (callback-count-str (number->string (callback-count))))
|
||||
+ (display-x "static const size_t _clar_suite_count = ")
|
||||
+ (display-x suite-count-str)
|
||||
+ (display-x ";\n")
|
||||
+
|
||||
+ (display-x "static const size_t _clar_callback_count = ")
|
||||
+ (display-x callback-count-str)
|
||||
+ (display-x ";\n")
|
||||
+
|
||||
+ (display (string-append "Written `clar.suite` ("
|
||||
+ callback-count-str
|
||||
+ " tests in "
|
||||
+ suite-count-str
|
||||
+ " suites)"))
|
||||
+ (newline))
|
||||
+ #t)
|
||||
+
|
||||
+ (call-with-output-file (string-append output "/clar.suite") Write))
|
||||
+
|
||||
+;;; main
|
||||
+
|
||||
+(define (main)
|
||||
+ (define option-spec
|
||||
+ '((force (single-char #\f) (value #f))
|
||||
+ (exclude (single-char #\x) (value #t))
|
||||
+ (output (single-char #\o) (value #t))
|
||||
+ (help (single-char #\h) (value #f))))
|
||||
+
|
||||
+ (define options (getopt-long (command-line) option-spec #:stop-at-first-non-option #t))
|
||||
+ (define args (reverse (option-ref options '() '())))
|
||||
+ (when (> (length args) 1)
|
||||
+ (display "More than one path given\n")
|
||||
+ (exit 1))
|
||||
+
|
||||
+ (if (< (length args) 1)
|
||||
+ (set! args '(".")))
|
||||
+
|
||||
+ (let* ((path (car args))
|
||||
+ (output (option-ref options 'output path))
|
||||
+ (excluded (filter-map (match-lambda
|
||||
+ (('exclude . value) value)
|
||||
+ (_ #f))
|
||||
+ options)))
|
||||
+ (generate-TestSuite path output excluded)))
|
||||
+
|
||||
+(main)
|
|
@ -15,7 +15,7 @@
|
|||
;;; Copyright © 2017 Vasile Dumitrascu <va511e@yahoo.com>
|
||||
;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
|
||||
;;; Copyright © 2017 André <eu@euandre.org>
|
||||
;;; Copyright © 2017, 2018 Marius Bakke <mbakke@fastmail.com>
|
||||
;;; Copyright © 2017, 2018, 2020 Marius Bakke <mbakke@fastmail.com>
|
||||
;;; Copyright © 2017 Stefan Reichör <stefan@xsteve.at>
|
||||
;;; Copyright © 2017 Oleg Pykhalov <go.wigust@gmail.com>
|
||||
;;; Copyright © 2018 Sou Bunnbu <iyzsong@member.fsf.org>
|
||||
|
@ -534,7 +534,7 @@ (define-public git-minimal
|
|||
(define-public libgit2
|
||||
(package
|
||||
(name "libgit2")
|
||||
(version "0.28.4")
|
||||
(version "0.99.0")
|
||||
(source (origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
|
@ -543,21 +543,37 @@ (define-public libgit2
|
|||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"171b25aym4q88bidc4c76y4l6jmdwifm3q9zjqsll0wjhlkycfy1"))
|
||||
(patches (search-patches "libgit2-avoid-python.patch"
|
||||
"libgit2-mtime-0.patch"))
|
||||
"0qxzv49ip378g1n7hrbifb9c6pys2kj1hnxcafmbb94gj3pgd9kg"))
|
||||
(patches (search-patches "libgit2-mtime-0.patch"))
|
||||
|
||||
;; Remove bundled software.
|
||||
;; Remove bundled software. Keep "http-parser" because it
|
||||
;; contains patches that are not available in the system version.
|
||||
(snippet '(begin
|
||||
(delete-file-recursively "deps")
|
||||
(with-directory-excursion "deps"
|
||||
(for-each (lambda (dir)
|
||||
(delete-file-recursively dir))
|
||||
(lset-difference equal?
|
||||
(scandir ".")
|
||||
'("." ".." "http-parser"))))
|
||||
#t))
|
||||
(modules '((guix build utils)))))
|
||||
(modules '((guix build utils)
|
||||
(srfi srfi-1)
|
||||
(ice-9 ftw)))))
|
||||
(build-system cmake-build-system)
|
||||
(outputs '("out" "debug"))
|
||||
(arguments
|
||||
`(#:configure-flags '("-DUSE_SHA1DC=ON") ; SHA-1 collision detection
|
||||
`(#:configure-flags '("-DUSE_NTLMCLIENT=OFF" ;TODO: package this
|
||||
"-DREGEX_BACKEND=pcre2")
|
||||
#:phases
|
||||
(modify-phases %standard-phases
|
||||
(add-after 'unpack 'fix-pcre2-reference
|
||||
(lambda _
|
||||
;; Use PCRE2 with 8-bit character support, as there is no "libpcre2.pc".
|
||||
;; See <https://github.com/libgit2/libgit2/issues/5438>.
|
||||
(substitute* "src/CMakeLists.txt"
|
||||
(("\"libpcre2\"")
|
||||
"\"libpcre2-8\""))
|
||||
#t))
|
||||
(add-after 'unpack 'fix-hardcoded-paths
|
||||
(lambda _
|
||||
(substitute* "tests/repo/init.c"
|
||||
|
@ -574,14 +590,14 @@ (define-public libgit2
|
|||
(replace 'check
|
||||
(lambda _ (invoke "./libgit2_clar" "-v" "-Q"))))))
|
||||
(inputs
|
||||
`(("libssh2" ,libssh2)
|
||||
("http-parser" ,http-parser)))
|
||||
`(("libssh2" ,libssh2)))
|
||||
(native-inputs
|
||||
`(("guile" ,guile-2.2)
|
||||
("pkg-config" ,pkg-config)))
|
||||
`(("pkg-config" ,pkg-config)
|
||||
("python" ,python)))
|
||||
(propagated-inputs
|
||||
;; These two libraries are in 'Requires.private' in libgit2.pc.
|
||||
;; These libraries are in 'Requires.private' in libgit2.pc.
|
||||
`(("openssl" ,openssl)
|
||||
("pcre2" ,pcre2)
|
||||
("zlib" ,zlib)))
|
||||
(home-page "https://libgit2.github.com/")
|
||||
(synopsis "Library providing Git core methods")
|
||||
|
|
Loading…
Reference in a new issue