summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Neidhardt <mail@ambrevar.xyz>2021-07-22 13:03:26 +0200
committerPierre Neidhardt <mail@ambrevar.xyz>2021-07-22 13:03:52 +0200
commitd98fc80ffbda32e184f214f02b4d9b2d72c9c90a (patch)
treee62b8b29a9e02f0d6ddbcfbdf444e3b63dfaaef9
parentaa2686c368d66e3b10d9f4c6e462a271d5911d70 (diff)
gnu: Add cl-libxml2.
* gnu/packages/lisp-xyz.scm (cl-libxml2, ecl-cl-libxml2, sbcl-cl-libxml2): New variables.
-rw-r--r--gnu/packages/lisp-xyz.scm88
1 files changed, 88 insertions, 0 deletions
diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm
index c8e0f98421..f39611c7a6 100644
--- a/gnu/packages/lisp-xyz.scm
+++ b/gnu/packages/lisp-xyz.scm
@@ -91,6 +91,7 @@
#:use-module (gnu packages web)
#:use-module (gnu packages webkit)
#:use-module (gnu packages xdisorg)
+ #:use-module (gnu packages xml)
#:use-module (gnu packages xorg)
#:use-module (ice-9 match)
#:use-module (srfi srfi-1)
@@ -18557,3 +18558,90 @@ semantics in Lisp and Parenscript.
(define-public cl-spinneret
(sbcl-package->cl-source-package sbcl-spinneret))
+
+(define-public sbcl-cl-libxml2
+ (let ((commit "8d03110c532c1a3fe15503fdfefe82f60669e4bd"))
+ (package
+ (name "sbcl-cl-libxml2")
+ (version (git-version "0.3.4" "1" commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/archimag/cl-libxml2")
+ (commit commit)))
+ (file-name (git-file-name "cl-libxml2" version))
+ (sha256
+ (base32 "09049c13cfp5sc6x9lrw762jd7a9qkfq5jgngqgrzn4kn9qscarw"))))
+ (build-system asdf-build-system/sbcl)
+ (inputs
+ `(("alexandria" ,sbcl-alexandria)
+ ("cffi" ,sbcl-cffi)
+ ("flexi-streams" ,sbcl-flexi-streams)
+ ("garbage-pools" ,sbcl-garbage-pools)
+ ("iterate" ,sbcl-iterate)
+ ("metabang-bind" ,sbcl-metabang-bind)
+ ("puri" ,sbcl-puri)
+ ;; Non-Lisp inputs:
+ ("libxml2" ,libxml2)
+ ("libxslt" ,libxslt)))
+ (native-inputs
+ `(("gcc" ,sbcl-lift)
+ ("lift" ,sbcl-lift)))
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'fix-paths
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (substitute* "tree/xtree.lisp"
+ (("libxml2.so.2")
+ (string-append (assoc-ref inputs "libxml2") "/lib/libxml2.so")))
+ (let ((libxslt (assoc-ref inputs "libxslt")))
+ (substitute* "xslt/xslt.lisp"
+ (("libxslt.so.1")
+ (string-append libxslt "/lib/libxslt.so"))
+ (("libexslt.so.0")
+ (string-append libxslt "/lib/libexslt.so"))
+ (("cllibxml2.so")
+ (string-append (assoc-ref outputs "out") "/lib/cllibxml2.so"))))
+ #t))
+ (add-before 'build 'build-helper-library
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((prefix-dir (string-append (assoc-ref outputs "out"))))
+ (mkdir-p (string-append prefix-dir "/lib"))
+ (invoke "make" "-C" "foreign" "install"
+ "INSOPTS="
+ (string-append "PREFIX=" prefix-dir))
+ #t)))
+ (add-after 'unpack 'fix-tests
+ (lambda _
+ (substitute* '("cl-libxml2.asd" "cl-libxslt.asd" "xfactory.asd")
+ ((" :force t") ""))
+ #t)))))
+ (home-page "https://web.archive.org/web/20160121073421/http://cl-libxml2.googlecode.com/svn/doc/index.html")
+ (synopsis "High-level wrapper around libxml2 and libxslt libraries")
+ (description
+ "cl-libxml2 is high-level Common Lisp wrapper around the @code{libxml2}
+and @code{libxslt} libraries.
+
+@itemize
+@item Interfaces for tree manipulation (like @code{cxml-stp}).
+@item Interface for HTML 4.0 non-validating parsers.
+@item Specific APIs to process HTML trees, especially serialization.
+@item XPath API.
+@item XSLT API.
+@item Custom URL resolvers.
+@item XPath extension functions.
+@item XSLT extension elements.
+@item Translates @code{libxml2} and @code{libxslt} errors to Lisp conditions.
+@item Extends the Common Lisp @code{iterate} library with custom drivers for
+child nodes enumeration, etc.
+@item The @code{XFACTORY} system provides a simple and compact syntax for XML generation.
+@end itemize\n")
+ (license license:llgpl))))
+
+(define-public ecl-cl-libxml2
+ (sbcl-package->ecl-package sbcl-cl-libxml2))
+
+(define-public cl-libxml2
+ (sbcl-package->cl-source-package sbcl-cl-libxml2))