~ruther/guix-local

33ae9107d8b60c8c418bc0b7c6ee17af99c85e2f — David Thompson 10 years ago 968ae90
gnu: Add tinyxml.

* gnu/packages/xml.scm (tinyxml): New variable.
* gnu/packages/patches/tinyxml-use-stl.patch: New file.
* gnu-system.am (dist_patch_DATA): Add it.
3 files changed, 111 insertions(+), 0 deletions(-)

M gnu-system.am
A gnu/packages/patches/tinyxml-use-stl.patch
M gnu/packages/xml.scm
M gnu-system.am => gnu-system.am +1 -0
@@ 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			\

A gnu/packages/patches/tinyxml-use-stl.patch => gnu/packages/patches/tinyxml-use-stl.patch +41 -0
@@ 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


M gnu/packages/xml.scm => gnu/packages/xml.scm +69 -0
@@ 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)))