From 0722248e9d5d4f3d2f0d401fe06fa26c519e158e Mon Sep 17 00:00:00 2001
From: Lukas Bulwahn <lukas.bulwahn@bmw-carit.de>
Date: Fri, 4 Jan 2013 15:30:08 +0100
Subject: [PATCH] adding recipe libtinyxml for ros-groovy; announcing
 redistribution of recipe; tuned README

---
 README                                        |  5 +-
 .../libtinyxml/enforce-use-stl.patch          | 20 ++++++
 .../libtinyxml/entity-encoding.patch          | 62 +++++++++++++++++++
 .../libtinyxml/libtinyxml_2.6.2.bb            | 43 +++++++++++++
 4 files changed, 129 insertions(+), 1 deletion(-)
 create mode 100644 recipes-support/libtinyxml/libtinyxml/enforce-use-stl.patch
 create mode 100644 recipes-support/libtinyxml/libtinyxml/entity-encoding.patch
 create mode 100644 recipes-support/libtinyxml/libtinyxml_2.6.2.bb

diff --git a/README b/README
index 0079017..1a907b6 100644
--- a/README
+++ b/README
@@ -155,8 +155,11 @@ The log4cxx recipe originated from the recipe in the OpenEmbedded (Classic) Deve
 The core-image-ros recipe originated from the core-image-minimal recipe in OpenEmbedded Core
   (cf. http://cgit.openembedded.org/openembedded-core/tree/meta/recipes-core/images/core-image-minimal.bb)
   licensed with the MIT License.
-The distutils class originated the distutils class in OpenEmbedded Core
+The distutils class originated from the distutils class in OpenEmbedded Core
   (cf. http://cgit.openembedded.org/openembedded-core/tree/meta/classes/distutils.bbclass)
   licensed with the MIT License.
+The libtinyxml recipe originated from the recipe in the OpenEmbedded meta layer
+  (cf. http://cgit.openembedded.org/meta-openembedded/tree/meta-oe/recipes-support/libtinyxml)
+  licensed with the MIT License.
 
 The modified files are redistributed here under the same MIT License.
diff --git a/recipes-support/libtinyxml/libtinyxml/enforce-use-stl.patch b/recipes-support/libtinyxml/libtinyxml/enforce-use-stl.patch
new file mode 100644
index 0000000..88c962b
--- /dev/null
+++ b/recipes-support/libtinyxml/libtinyxml/enforce-use-stl.patch
@@ -0,0 +1,20 @@
+Description: TinyXml is built with TIXML_USE_STL, so we have to
+ enforce it when the library is used.
+Author: Felix Geyer <debfx-pkg@fobos.de>
+
+Upstream-Status: Pending
+
+diff -Nur tinyxml-2.5.3/tinyxml.h tinyxml-2.5.3.patch/tinyxml.h
+--- tinyxml-2.5.3/tinyxml.h	2007-05-07 00:41:23.000000000 +0200
++++ tinyxml-2.5.3.patch/tinyxml.h	2009-07-08 22:32:03.000000000 +0200
+@@ -26,6 +26,10 @@
+ #ifndef TINYXML_INCLUDED
+ #define TINYXML_INCLUDED
+ 
++#ifndef TIXML_USE_STL
++	#define TIXML_USE_STL
++#endif
++
+ #ifdef _MSC_VER
+ #pragma warning( push )
+ #pragma warning( disable : 4530 )
diff --git a/recipes-support/libtinyxml/libtinyxml/entity-encoding.patch b/recipes-support/libtinyxml/libtinyxml/entity-encoding.patch
new file mode 100644
index 0000000..b801506
--- /dev/null
+++ b/recipes-support/libtinyxml/libtinyxml/entity-encoding.patch
@@ -0,0 +1,62 @@
+Description: TinyXML incorrectly encodes text element containing
+ an ampersand followed by either x or #.
+
+Origin: http://sourceforge.net/tracker/index.php?func=detail&aid=3031828&group_id=13559&atid=313559
+
+Upstream-Status: Pending
+
+diff -u -r1.105 tinyxml.cpp
+--- a/tinyxml.cpp
++++ b/tinyxml.cpp
+@@ -57,30 +57,7 @@
+ 	{
+ 		unsigned char c = (unsigned char) str[i];
+ 
+-		if (    c == '&' 
+-		     && i < ( (int)str.length() - 2 )
+-			 && str[i+1] == '#'
+-			 && str[i+2] == 'x' )
+-		{
+-			// Hexadecimal character reference.
+-			// Pass through unchanged.
+-			// &#xA9;	-- copyright symbol, for example.
+-			//
+-			// The -1 is a bug fix from Rob Laveaux. It keeps
+-			// an overflow from happening if there is no ';'.
+-			// There are actually 2 ways to exit this loop -
+-			// while fails (error case) and break (semicolon found).
+-			// However, there is no mechanism (currently) for
+-			// this function to return an error.
+-			while ( i<(int)str.length()-1 )
+-			{
+-				outString->append( str.c_str() + i, 1 );
+-				++i;
+-				if ( str[i] == ';' )
+-					break;
+-			}
+-		}
+-		else if ( c == '&' )
++		if ( c == '&' )
+ 		{
+ 			outString->append( entity[0].str, entity[0].strLength );
+ 			++i;
+diff -u -r1.89 xmltest.cpp
+--- a/xmltest.cpp
++++ b/xmltest.cpp
+@@ -1340,6 +1340,16 @@
+ 		}*/
+ 	}
+ 
++	#ifdef TIXML_USE_STL
++	{
++		TiXmlDocument xml;
++		xml.Parse("<foo>foo&amp;#xa+bar</foo>");
++		std::string str;
++		str << xml;
++		XmlTest( "Entity escaping", "<foo>foo&amp;#xa+bar</foo>", str.c_str() );
++	}
++	#endif
++
+ 	/*  1417717 experiment
+ 	{
+ 		TiXmlDocument xml;
diff --git a/recipes-support/libtinyxml/libtinyxml_2.6.2.bb b/recipes-support/libtinyxml/libtinyxml_2.6.2.bb
new file mode 100644
index 0000000..fdadebd
--- /dev/null
+++ b/recipes-support/libtinyxml/libtinyxml_2.6.2.bb
@@ -0,0 +1,43 @@
+# (c) Copyright 2012  Hewlett-Packard Development Company, L.P. 
+
+DESCRIPTION = "a simple, small, minimal, C++ XML parser"
+HOMEPAGE = "http://www.sourceforge.net/projects/tinyxml"
+LICENSE = "Zlib"
+LIC_FILES_CHKSUM = "file://readme.txt;md5=f8f366f3370dda889f60faa7db162cf4"
+SECTION = "libs"
+
+PR = "r5"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/tinyxml/tinyxml_${@'${PV}'.replace('.', '_')}.tar.gz \
+           file://enforce-use-stl.patch \
+           file://entity-encoding.patch"
+SRC_URI[md5sum] = "c1b864c96804a10526540c664ade67f0"
+SRC_URI[sha256sum] = "15bdfdcec58a7da30adc87ac2b078e4417dbe5392f3afb719f9ba6d062645593"
+
+S = "${WORKDIR}/tinyxml"
+
+CXXFLAGS += "-fPIC"
+
+do_compile() {
+    ${CXX} ${CXXFLAGS} -I${S} -c -o ${S}/tinyxml.o ${S}/tinyxml.cpp
+    ${CXX} ${CXXFLAGS} -I${S} -c -o ${S}/tinyxmlerror.o ${S}/tinyxmlerror.cpp
+    ${CXX} ${CXXFLAGS} -I${S} -c -o ${S}/tinyxmlparser.o ${S}/tinyxmlparser.cpp
+    ${CXX} ${CXXFLAGS} \
+            -shared \
+            -Wl,-soname,libtinyxml.so.${PV} \
+            -o ${S}/libtinyxml.so.${PV} \
+            ${LDFLAGS} \
+            ${S}/tinyxml.o \
+            ${S}/tinyxmlparser.o \
+            ${S}/tinyxmlerror.o
+}
+
+do_install() {
+    install -d ${D}${libdir}
+    install -m 0755 ${S}/libtinyxml.so.${PV} ${D}${libdir}
+    ln -sf libtinyxml.so.${PV} ${D}${libdir}/libtinyxml.so
+
+    install -d ${D}${includedir}
+    install -m 0644 ${S}/tinyxml.h ${D}${includedir}
+}
+
-- 
GitLab