aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnu-system.am1
-rw-r--r--gnu/packages/patches/tinyxml-use-stl.patch41
-rw-r--r--gnu/packages/xml.scm69
3 files changed, 111 insertions, 0 deletions
diff --git a/gnu-system.am b/gnu-system.am
index ada903e705..8865df5110 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -698,6 +698,7 @@ dist_patch_DATA = \
gnu/packages/patches/texi2html-document-encoding.patch \
gnu/packages/patches/texi2html-i18n.patch \
gnu/packages/patches/tidy-CVE-2015-5522+5523.patch \
+ gnu/packages/patches/tinyxml-use-stl.patch \
gnu/packages/patches/torsocks-dns-test.patch \
gnu/packages/patches/tvtime-gcc41.patch \
gnu/packages/patches/tvtime-pngoutput.patch \
diff --git a/gnu/packages/patches/tinyxml-use-stl.patch b/gnu/packages/patches/tinyxml-use-stl.patch
new file mode 100644
index 0000000000..5d8aa899a9
--- /dev/null
+++ b/gnu/packages/patches/tinyxml-use-stl.patch
@@ -0,0 +1,41 @@
+From a53b6ee4519a7657164610ac14a82c57b1273bf6 Mon Sep 17 00:00:00 2001
+From: David Thompson <dthompson2@worcester.edu>
+Date: Mon, 23 Nov 2015 06:54:36 -0500
+Subject: [PATCH] Use STL.
+
+Software that uses the shared library, such as Kodi, assume that TinyXML was
+compiled with STL activated.
+
+---
+ tinyxml.h | 2 ++
+ xmltest.cpp | 1 +
+ 2 files changed, 3 insertions(+)
+
+diff --git a/tinyxml.h b/tinyxml.h
+index a3589e5..6cbfc7d 100644
+--- a/tinyxml.h
++++ b/tinyxml.h
+@@ -43,6 +43,8 @@ distribution.
+ #define DEBUG
+ #endif
+
++#define TIXML_USE_STL 1
++
+ #ifdef TIXML_USE_STL
+ #include <string>
+ #include <iostream>
+diff --git a/xmltest.cpp b/xmltest.cpp
+index 663c157..057dbfe 100644
+--- a/xmltest.cpp
++++ b/xmltest.cpp
+@@ -2,6 +2,7 @@
+ Test program for TinyXML.
+ */
+
++#define TIXML_USE_STL 1
+
+ #ifdef TIXML_USE_STL
+ #include <iostream>
+--
+2.5.0
+
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index a296e0ac73..e28eddd5a8 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -511,3 +511,72 @@ Libxml2).")
UTF-8 and UTF-16 encoding.")
;; LGPL 2.0+ with additional exceptions for static linking
(license license:lgpl2.0+)))
+
+;; TinyXML is an unmaintained piece of software, so the patches and build
+;; system massaging have no upstream potential.
+(define-public tinyxml
+ (package
+ (name "tinyxml")
+ (version "2.6.2")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "mirror://sourceforge/tinyxml/tinyxml_"
+ (string-join (string-split version #\.) "_")
+ ".tar.gz"))
+ (sha256
+ (base32
+ "14smciid19lvkxqznfig77jxn5s4iq3jpb47vh5a6zcaqp7gvg8m"))
+ (patches (list (search-patch "tinyxml-use-stl.patch")))))
+ (build-system gnu-build-system)
+ ;; This library is missing *a lot* of the steps to make it usable, so we
+ ;; have to add them here, like every other distro must do.
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (delete 'configure)
+ (add-after 'build 'build-shared-library
+ (lambda _
+ (zero? (system* "g++" "-Wall" "-O2" "-shared" "-fpic"
+ "tinyxml.cpp" "tinyxmlerror.cpp"
+ "tinyxmlparser.cpp" "tinystr.cpp"
+ "-o" "libtinyxml.so"))))
+ (replace 'check
+ (lambda _ (zero? (system "./xmltest"))))
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (include (string-append out "/include"))
+ (lib (string-append out "/lib"))
+ (pkgconfig (string-append out "/lib/pkgconfig"))
+ (doc (string-append out "/share/doc")))
+ ;; Install libs and headers.
+ (install-file "libtinyxml.so" lib)
+ (install-file "tinystr.h" include)
+ (install-file "tinyxml.h" include)
+ ;; Generate and install pkg-config file.
+ (mkdir-p pkgconfig)
+ ;; Software such as Kodi expect this file to be present, but
+ ;; it's not provided in the source code.
+ (call-with-output-file (string-append pkgconfig "/tinyxml.pc")
+ (lambda (port)
+ (format port "prefix=~a
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+includedir=${prefix}/include
+
+Name: TinyXML
+Description: A simple, small, C++ XML parser
+Version: ~a
+Libs: -L${libdir} -ltinyxml
+Cflags: -I${includedir}
+"
+ out ,version)))
+ ;; Install docs.
+ (mkdir-p doc)
+ (copy-recursively "docs" (string-append doc "tinyxml"))
+ #t))))))
+ (synopsis "Small XML parser for C++")
+ (description "TinyXML is a small and simple XML parsing library for the
+C++ programming langauge.")
+ (home-page "http://www.grinninglizard.com/tinyxml/index.html")
+ (license license:zlib)))