From patchwork Sat May 15 12:53:36 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: david larsson X-Patchwork-Id: 29321 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 F399827BC81; Sat, 15 May 2021 13:54:10 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS, T_DKIM_INVALID,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 2E2B427BC78 for ; Sat, 15 May 2021 13:54:10 +0100 (BST) Received: from localhost ([::1]:51694 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lhto1-0005y0-89 for patchwork@mira.cbaines.net; Sat, 15 May 2021 08:54:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60894) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lhtnu-0005xp-Pu for guix-patches@gnu.org; Sat, 15 May 2021 08:54:02 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:36296) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lhtnu-00031h-H3 for guix-patches@gnu.org; Sat, 15 May 2021 08:54:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1lhtnu-00086D-Co for guix-patches@gnu.org; Sat, 15 May 2021 08:54:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#47898] [PATCH] [core-updates] Add option --xpath0 to xmllint from libxml2 Resent-From: david larsson Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sat, 15 May 2021 12:54:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 47898 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 47898@debbugs.gnu.org Received: via spool by 47898-submit@debbugs.gnu.org id=B47898.162108323331118 (code B ref 47898); Sat, 15 May 2021 12:54:02 +0000 Received: (at 47898) by debbugs.gnu.org; 15 May 2021 12:53:53 +0000 Received: from localhost ([127.0.0.1]:47841 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lhtnl-00085o-0u for submit@debbugs.gnu.org; Sat, 15 May 2021 08:53:53 -0400 Received: from server0.selfhosted.xyz ([217.64.149.7]:45362) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lhtni-00085P-Mh for 47898@debbugs.gnu.org; Sat, 15 May 2021 08:53:52 -0400 Received: from server0.selfhosted.xyz (localhost [127.0.0.1]) by server0.selfhosted.xyz (Postfix) with ESMTP id 39A6E1DDB530 for <47898@debbugs.gnu.org>; Sat, 15 May 2021 14:53:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=selfhosted.xyz; s=dkim; t=1621083222; bh=EWB93ekZmlrCx9ySoW1IYLF5M7Lb9NjDtgzTzVOKTZ0=; h=Date:From:To:Subject:In-Reply-To:References; b=iaY/hxeamArhbaCg2pfEhZ52vbaWzd/7WdrTTuKTLrJ7lv71K/pyh2Z9R6id94D5b e1wAwKXt+dACz2gHFNn6qjvvgTWEopfVoFqqFzCaTs6V3LMcsxJL3P9yjyaVTpRZeT HFSVM0YQoqwV+W2wTGpwWxikENs4G5wk5jO8ezxuIeIN7GBBRhuL7g/zgHsM95yHWh VoDYs7VgsJ+c1TQzgLQcF0sm0l6HcATWAJH/mUP4cWqX1liR4s+XjaX25IFwpw7yND SEUx+iTJNJMucrdB0QnpDnrAm6fSMF5L3CTdOXLCOP44XW6Ra3KaUqLSXL33gbYjMS 8Z3DL1Q5pjGHw== X-Fuglu-Suspect: 76aa56e7800746918889000e13c0592a X-Fuglu-Spamstatus: NO Received: from webmail.selfhosted.xyz (office.selfhosted.xyz [192.168.1.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: mail@selfhosted.xyz) by server0.selfhosted.xyz (Postfix) with ESMTPSA for <47898@debbugs.gnu.org>; Sat, 15 May 2021 14:53:36 +0200 (CEST) MIME-Version: 1.0 Date: Sat, 15 May 2021 14:53:36 +0200 From: david larsson In-Reply-To: <80bc8f6c73d5aa423cf906d59bbcd43e@selfhosted.xyz> References: <20aec8da67d18b52e5a166f45cab40b2@selfhosted.xyz> <87eeeaiz5h.fsf@gnu.org> <48c1517d3239d55826324aa8f2bc9d4d@selfhosted.xyz> <87bl9eiwx5.fsf@gnu.org> <80bc8f6c73d5aa423cf906d59bbcd43e@selfhosted.xyz> Message-ID: X-Sender: david.larsson@selfhosted.xyz X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list 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 > libxml2-xpath0 is probably better indeed, I don't have a strong > opinion. > Can you send an updated patch? :-) > > Thanks, > Marius Updated patch attached! Best regards, David From f3f3ff5e1553363a3c46335d418eed314646d38e Mon Sep 17 00:00:00 2001 From: David Larsson Date: Sat, 15 May 2021 11:35:11 +0200 Subject: [PATCH] gnu: libxml2-xpath0: New package with patch for xpath0 option to xmllint. gnu/packages/patches/libxml2-Add-option-xpath0.patch: New file... gnu/packages/xml.scm (libxml2-xpath0) [source]: ...apply it. --- .../patches/libxml2-Add-option-xpath0.patch | 139 ++++++++++++++++++ gnu/packages/xml.scm | 52 +++++++ 2 files changed, 191 insertions(+) create mode 100644 gnu/packages/patches/libxml2-Add-option-xpath0.patch diff --git a/gnu/packages/patches/libxml2-Add-option-xpath0.patch b/gnu/packages/patches/libxml2-Add-option-xpath0.patch new file mode 100644 index 0000000000..3337374a8c --- /dev/null +++ b/gnu/packages/patches/libxml2-Add-option-xpath0.patch @@ -0,0 +1,139 @@ +From e1df743329bdfd94fbfdea18303c5c6c6fe13403 Mon Sep 17 00:00:00 2001 +From: methuselah-0 +Date: Thu, 1 Apr 2021 08:33:56 +0200 +Subject: [PATCH] Add option --xpath0 + +--- + doc/xmllint.xml | 16 ++++++++++++++++ + xmllint.c | 32 +++++++++++++++++++++++--------- + 2 files changed, 39 insertions(+), 9 deletions(-) + +diff --git a/doc/xmllint.xml b/doc/xmllint.xml +index 1008179b..fcdc237e 100644 +--- a/doc/xmllint.xml ++++ b/doc/xmllint.xml +@@ -70,6 +70,7 @@ + + + ++ + + + +@@ -537,6 +538,21 @@ + node set is serialized in full in the output. In case + of an empty node set the "XPath set is empty" result + will be shown and an error exit code will be returned. ++ Results are separated by the newline character. ++ ++ ++ ++ ++ ++ ++ ++ ++ Run an XPath expression given as argument and print the ++ result. In case of a nodeset result, each node in the ++ node set is serialized in full in the output. In case ++ of an empty node set the "XPath set is empty" result ++ will be shown and an error exit code will be returned. ++ Results are separated by the null character. + + + +diff --git a/xmllint.c b/xmllint.c +index 6ca1bf54..a60e1f4f 100644 +--- a/xmllint.c ++++ b/xmllint.c +@@ -194,6 +194,7 @@ static int sax1 = 0; + #endif /* LIBXML_SAX1_ENABLED */ + #ifdef LIBXML_XPATH_ENABLED + static const char *xpathquery = NULL; ++static const char *xpathsep = "\n"; + #endif + static int options = XML_PARSE_COMPACT | XML_PARSE_BIG_LINES; + static int sax = 0; +@@ -2095,7 +2096,7 @@ static void doXPathDump(xmlXPathObjectPtr cur) { + for (i = 0;i < cur->nodesetval->nodeNr;i++) { + node = cur->nodesetval->nodeTab[i]; + xmlNodeDumpOutput(buf, NULL, node, 0, 0, NULL); +- xmlOutputBufferWrite(buf, 1, "\n"); ++ xmlOutputBufferWrite(buf, 1, xpathsep); + } + xmlOutputBufferClose(buf); + #else +@@ -2104,27 +2105,27 @@ static void doXPathDump(xmlXPathObjectPtr cur) { + break; + } + case XPATH_BOOLEAN: +- if (cur->boolval) printf("true\n"); +- else printf("false\n"); ++ if (cur->boolval) printf("true%s", xpathsep); ++ else printf("false%s", xpathsep); + break; + case XPATH_NUMBER: + switch (xmlXPathIsInf(cur->floatval)) { + case 1: +- printf("Infinity\n"); ++ printf("Infinity%s", xpathsep); + break; + case -1: +- printf("-Infinity\n"); ++ printf("-Infinity%s", xpathsep); + break; + default: + if (xmlXPathIsNaN(cur->floatval)) { +- printf("NaN\n"); ++ printf("NaN%s", xpathsep); + } else { +- printf("%0g\n", cur->floatval); ++ printf("%0g%s", cur->floatval, xpathsep); + } + } + break; + case XPATH_STRING: +- printf("%s\n", (const char *) cur->stringval); ++ printf("%s%s", (const char *) cur->stringval, xpathsep); + break; + case XPATH_UNDEFINED: + fprintf(stderr, "XPath Object is uninitialized\n"); +@@ -3098,7 +3099,8 @@ static void usage(FILE *f, const char *name) { + fprintf(f, "\t--sax: do not build a tree but work just at the SAX level\n"); + fprintf(f, "\t--oldxml10: use XML-1.0 parsing rules before the 5th edition\n"); + #ifdef LIBXML_XPATH_ENABLED +- fprintf(f, "\t--xpath expr: evaluate the XPath expression, imply --noout\n"); ++ fprintf(f, "\t--xpath expr: evaluate the XPath expression, results are separated by \\n, imply --noout\n"); ++ fprintf(f, "\t--xpath0 expr: evaluate the XPath expression, results are separated by \\0, imply --noout\n"); + #endif + + fprintf(f, "\nLibxml project home page: http://xmlsoft.org/\n"); +@@ -3480,6 +3482,13 @@ main(int argc, char **argv) { + i++; + noout++; + xpathquery = argv[i]; ++ xpathsep = "\n"; ++ } else if ((!strcmp(argv[i], "-xpath0")) || ++ (!strcmp(argv[i], "--xpath0"))) { ++ i++; ++ noout++; ++ xpathquery = argv[i]; ++ xpathsep = "\0"; + #endif + } else if ((!strcmp(argv[i], "-oldxml10")) || + (!strcmp(argv[i], "--oldxml10"))) { +@@ -3712,6 +3721,11 @@ main(int argc, char **argv) { + i++; + continue; + } ++ if ((!strcmp(argv[i], "-xpath0")) || ++ (!strcmp(argv[i], "--xpath0"))) { ++ i++; ++ continue; ++ } + #endif + if ((timing) && (repeat)) + startTimer(); +-- +2.30.2 + diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm index 931698a575..12cad65154 100644 --- a/gnu/packages/xml.scm +++ b/gnu/packages/xml.scm @@ -167,6 +167,58 @@ binary extension of XML for the purpose of storing and manipulating data in a hierarchical form with variable field lengths.") (license license:lgpl2.1))) +(define-public libxml2-xpath0 + (package + (name "libxml2-xpath0") + (version "2.9.10") + (source (origin + (method url-fetch) + (uri (string-append "ftp://xmlsoft.org/libxml2/libxml2-" + version ".tar.gz")) + (sha256 + (base32 + "07xynh8hcxb2yb1fs051xrgszjvj37wnxvxgsj10rzmqzy9y3zma")) + (patches (list (search-patch "libxml2-Add-option-xpath0.patch"))))) + (build-system gnu-build-system) + (outputs '("out" "static")) + (arguments + `(#:phases (modify-phases %standard-phases + (add-after 'install 'move-static-libs + (lambda* (#:key outputs #:allow-other-keys) + (let ((src (string-append (assoc-ref outputs "out") "/lib")) + (dst (string-append (assoc-ref outputs "static") + "/lib"))) + (mkdir-p dst) + (for-each (lambda (ar) + (rename-file ar (string-append dst "/" + (basename ar)))) + (find-files src "\\.a$")) + + ;; Remove reference to the static library from the .la + ;; file such that Libtool does the right thing when both + ;; the shared and static variants are available. + (substitute* (string-append src "/libxml2.la") + (("^old_library='libxml2.a'") "old_library=''")) + #t)))))) + (home-page "http://www.xmlsoft.org/") + (synopsis "C parser for XML") + (inputs `(("xz" ,xz))) + (propagated-inputs `(("zlib" ,zlib))) ; libxml2.la says '-lz'. + (native-inputs `(("perl" ,perl))) + ;; $XML_CATALOG_FILES lists 'catalog.xml' files found in under the 'xml' + ;; sub-directory of any given package. + (native-search-paths (list (search-path-specification + (variable "XML_CATALOG_FILES") + (separator " ") + (files '("xml")) + (file-pattern "^catalog\\.xml$") + (file-type 'regular)))) + (search-paths native-search-paths) + (description + "Libxml2 is the XML C parser and toolkit developed for the Gnome +project (but it is usable outside of the Gnome platform).") + (license license:x11))) + (define-public libxml2 (package (name "libxml2") -- 2.31.0