From patchwork Mon Mar 4 11:04:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Danny Milosavljevic X-Patchwork-Id: 1282 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 3B9F116CF6; Mon, 4 Mar 2019 11:06:16 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTP id 7E27E16C43 for ; Mon, 4 Mar 2019 11:06:15 +0000 (GMT) Received: from localhost ([127.0.0.1]:51963 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0lQE-00005B-Vy for patchwork@mira.cbaines.net; Mon, 04 Mar 2019 06:06:15 -0500 Received: from eggs.gnu.org ([209.51.188.92]:33987) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0lQ9-00004r-6S for guix-patches@gnu.org; Mon, 04 Mar 2019 06:06:10 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h0lQ2-0006CT-Lz for guix-patches@gnu.org; Mon, 04 Mar 2019 06:06:09 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:45458) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1h0lQ2-0006C8-GP for guix-patches@gnu.org; Mon, 04 Mar 2019 06:06:02 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1h0lQ2-0005zj-AF for guix-patches@gnu.org; Mon, 04 Mar 2019 06:06:02 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#34729] [PATCH core-updates] gnu: libgit2: Avoid Python. Resent-From: Danny Milosavljevic Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Mon, 04 Mar 2019 11:06:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 34729 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 34729@debbugs.gnu.org X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.155169751022978 (code B ref -1); Mon, 04 Mar 2019 11:06:02 +0000 Received: (at submit) by debbugs.gnu.org; 4 Mar 2019 11:05:10 +0000 Received: from localhost ([127.0.0.1]:59002 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1h0lPB-0005yW-4L for submit@debbugs.gnu.org; Mon, 04 Mar 2019 06:05:09 -0500 Received: from eggs.gnu.org ([209.51.188.92]:47617) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1h0lP8-0005xw-4J for submit@debbugs.gnu.org; Mon, 04 Mar 2019 06:05:06 -0500 Received: from lists.gnu.org ([209.51.188.17]:39831) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h0lP2-000528-TA for submit@debbugs.gnu.org; Mon, 04 Mar 2019 06:05:00 -0500 Received: from eggs.gnu.org ([209.51.188.92]:33758) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h0lP1-0008Kt-1b for guix-patches@gnu.org; Mon, 04 Mar 2019 06:05:00 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h0lOz-0004wv-1H for guix-patches@gnu.org; Mon, 04 Mar 2019 06:04:58 -0500 Received: from dd26836.kasserver.com ([85.13.145.193]:40418) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h0lOy-0004os-Mv for guix-patches@gnu.org; Mon, 04 Mar 2019 06:04:56 -0500 Received: from dayas.3.home (178.112.142.216.wireless.dyn.drei.com [178.112.142.216]) by dd26836.kasserver.com (Postfix) with ESMTPSA id D04073360BC4; Mon, 4 Mar 2019 12:04:47 +0100 (CET) From: Danny Milosavljevic Date: Mon, 4 Mar 2019 12:04:42 +0100 Message-Id: <20190304110442.5876-1-dannym@scratchpost.org> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Tags: patch X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.51.188.43 X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * gnu/packages/patches/libgit2-avoid-python.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/version-control.scm (libgit2)[source]: Use it. [inputs]: Remove python. [native-inputs]: Add guile-2.2. --- gnu/local.mk | 1 + .../patches/libgit2-avoid-python.patch | 304 ++++++++++++++++++ gnu/packages/version-control.scm | 10 +- 3 files changed, 311 insertions(+), 4 deletions(-) create mode 100644 gnu/packages/patches/libgit2-avoid-python.patch diff --git a/gnu/local.mk b/gnu/local.mk index 52df157a9..6f7b207d7 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -969,6 +969,7 @@ dist_patch_DATA = \ %D%/packages/patches/libexif-CVE-2017-7544.patch \ %D%/packages/patches/libextractor-CVE-2018-20430.patch \ %D%/packages/patches/libextractor-CVE-2018-20431.patch \ + %D%/packages/patches/libgit2-avoid-python.patch \ %D%/packages/patches/libgit2-mtime-0.patch \ %D%/packages/patches/libgit2-oom-test.patch \ %D%/packages/patches/libgdata-fix-tests.patch \ diff --git a/gnu/packages/patches/libgit2-avoid-python.patch b/gnu/packages/patches/libgit2-avoid-python.patch new file mode 100644 index 000000000..e896d6d53 --- /dev/null +++ b/gnu/packages/patches/libgit2-avoid-python.patch @@ -0,0 +1,304 @@ +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 10:26:16.245331513 +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-03 11:39:32.769412420 +0100 +@@ -0,0 +1,277 @@ ++;; -*- geiser-scheme-implementation: guile -*- ++ ++;;; Implementation: Danny Milosavljevic ++;;; 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)) ++ (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) ++ (stringstring (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) diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm index baf49e64f..4278f9311 100644 --- a/gnu/packages/version-control.scm +++ b/gnu/packages/version-control.scm @@ -68,6 +68,7 @@ #:use-module (gnu packages gettext) #:use-module (gnu packages gl) #:use-module (gnu packages groff) + #:use-module (gnu packages guile) #:use-module (gnu packages haskell) #:use-module (gnu packages haskell-check) #:use-module (gnu packages haskell-crypto) @@ -536,7 +537,8 @@ everything from small to very large projects with speed and efficiency.") (base32 "0c95pbv7hwclwmn51nqnh1lb0cajpcdb24pbdzcir6vmhfj3am0s")) (patches (search-patches "libgit2-mtime-0.patch" - "libgit2-oom-test.patch")) + "libgit2-oom-test.patch" + "libgit2-avoid-python.patch")) ;; Remove bundled software. (snippet '(begin @@ -562,10 +564,10 @@ everything from small to very large projects with speed and efficiency.") (lambda _ (invoke "./libgit2_clar" "-v" "-Q")))))) (inputs `(("libssh2" ,libssh2) - ("http-parser" ,http-parser) - ("python" ,python-wrapper))) + ("http-parser" ,http-parser))) (native-inputs - `(("pkg-config" ,pkg-config))) + `(("guile" ,guile-2.2) + ("pkg-config" ,pkg-config))) (propagated-inputs ;; These two libraries are in 'Requires.private' in libgit2.pc. `(("openssl" ,openssl)