unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
From: david larsson <david.larsson@selfhosted.xyz>
To: 47898@debbugs.gnu.org
Subject: [bug#47898] [PATCH] [core-updates] Add option --xpath0 to xmllint from libxml2
Date: Sat, 15 May 2021 14:53:36 +0200	[thread overview]
Message-ID: <dd8d7dea34d4305f27637802f836ef8a@selfhosted.xyz> (raw)
In-Reply-To: <80bc8f6c73d5aa423cf906d59bbcd43e@selfhosted.xyz>

[-- Attachment #1: Type: text/plain, Size: 183 bytes --]

> 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

[-- Attachment #2: 0001-gnu-libxml2-xpath0-New-package-with-patch-for-xpath0.patch --]
[-- Type: text/x-diff, Size: 8998 bytes --]

From f3f3ff5e1553363a3c46335d418eed314646d38e Mon Sep 17 00:00:00 2001
From: David Larsson <david.larsson@selfhosted.xyz>
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 <david.larsson@selfhosted.xyz>
+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 @@
+ 			<arg choice="plain"><option>--debug</option></arg>
+ 			<arg choice="plain"><option>--shell</option></arg>
+ 			<arg choice="plain"><option>--xpath "<replaceable class="option">XPath_expression</replaceable>"</option></arg>
++			<arg choice="plain"><option>--xpath0 "<replaceable class="option">XPath_expression</replaceable>"</option></arg>
+ 			<arg choice="plain"><option>--debugent</option></arg>
+ 			<arg choice="plain"><option>--copy</option></arg>
+ 			<arg choice="plain"><option>--recover</option></arg>
+@@ -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.
++		</para>
++	</listitem>
++		</varlistentry>
++
++		<varlistentry>
++	<term><option>--xpath0 "<replaceable class="option">XPath_expression</replaceable>"</option></term>
++	<listitem>
++		<para>
++			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.
+ 		</para>
+ 	</listitem>
+ 		</varlistentry>
+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


  parent reply	other threads:[~2021-05-15 12:54 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-19 18:48 [bug#47898] [PATCH] [core-updates] Add option --xpath0 to xmllint from libxml2 david larsson
2021-05-13 12:41 ` Marius Bakke
2021-05-13 13:21   ` david larsson
2021-05-13 13:29     ` Marius Bakke
     [not found]       ` <80bc8f6c73d5aa423cf906d59bbcd43e@selfhosted.xyz>
2021-05-15 12:53         ` david larsson [this message]
2021-05-15 16:12           ` Marius Bakke
2021-05-15 17:12             ` david larsson
2021-05-15 19:21             ` david larsson
2021-05-18 20:25               ` bug#47898: " Marius Bakke

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=dd8d7dea34d4305f27637802f836ef8a@selfhosted.xyz \
    --to=david.larsson@selfhosted.xyz \
    --cc=47898@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).