Add ezxml (#4362), thanks Raphael
authorFlorian Fainelli <florian@openwrt.org>
Wed, 17 Dec 2008 17:16:29 +0000 (17:16 +0000)
committerFlorian Fainelli <florian@openwrt.org>
Wed, 17 Dec 2008 17:16:29 +0000 (17:16 +0000)
SVN-Revision: 13678

libs/ezxml/Makefile [new file with mode: 0644]
libs/ezxml/patches/100-cross_compile.patch [new file with mode: 0644]
libs/ezxml/patches/101-build_shared.patch [new file with mode: 0644]
libs/ezxml/patches/200-ezxml_parse_str_d.patch [new file with mode: 0644]
libs/ezxml/patches/300-ezxml_int.patch [new file with mode: 0644]
libs/ezxml/patches/400-ezxml_child.patch [new file with mode: 0644]

diff --git a/libs/ezxml/Makefile b/libs/ezxml/Makefile
new file mode 100644 (file)
index 0000000..bde7662
--- /dev/null
@@ -0,0 +1,57 @@
+# 
+# Copyright (C) 2008 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+# $Id:
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=ezxml
+PKG_VERSION:=0.8.6
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=@SF/ezxml
+PKG_MD5SUM:=e22ae17a0bd82dfa2a66f9876f1a8fd7
+
+TAR_OPTIONS:=--transform='s,$(PKG_NAME),$(PKG_NAME)-$(PKG_VERSION),' -xvf -
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/ezxml/Default
+  TITLE:=ezXML
+  URL:=http://ezxml.sourceforge.net/
+endef
+
+define Package/libezxml
+  $(call Package/ezxml/Default)
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE+= (library)
+endef
+
+define Package/libezxml/description
+       ezXML is a fast and lightweight C library for parsing XML documents.
+endef
+
+TARGET_CFLAGS += -D_GNU_SOURCE
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/ezxml.h $(1)/usr/include/
+
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_BUILD_DIR)/libezxml.a $(1)/usr/lib/
+
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_BUILD_DIR)/libezxml.so $(1)/usr/lib/
+endef
+
+define Package/libezxml/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_BUILD_DIR)/libezxml.so $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,libezxml))
diff --git a/libs/ezxml/patches/100-cross_compile.patch b/libs/ezxml/patches/100-cross_compile.patch
new file mode 100644 (file)
index 0000000..28a8164
--- /dev/null
@@ -0,0 +1,17 @@
+diff -pruN ezxml-0.8.6.orig/GNUmakefile ezxml-0.8.6/GNUmakefile
+--- ezxml-0.8.6.orig/GNUmakefile       2007-08-30 17:38:55.000000000 +0200
++++ ezxml-0.8.6/GNUmakefile    2007-08-30 17:41:12.000000000 +0200
+@@ -21,10 +21,10 @@
+ # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+-CC = gcc
+-AR = ar
++#CC = gcc
++#AR = ar
+ RM = rm -f
+-CFLAGS = -Wall -O2
++#CFLAGS = -Wall -O2
+ DEBUG_CFLAGS = -O0 -g
+ OBJS = ezxml.o
+ LIB = libezxml.a
diff --git a/libs/ezxml/patches/101-build_shared.patch b/libs/ezxml/patches/101-build_shared.patch
new file mode 100644 (file)
index 0000000..9888686
--- /dev/null
@@ -0,0 +1,27 @@
+diff -pruN ezxml-0.8.6.orig/GNUmakefile ezxml-0.8.6/GNUmakefile
+--- ezxml-0.8.6.orig/GNUmakefile       2008-12-16 15:22:46.773434689 +0100
++++ ezxml-0.8.6/GNUmakefile    2008-12-16 15:22:27.337440224 +0100
+@@ -28,6 +28,7 @@ RM = rm -f
+ DEBUG_CFLAGS = -O0 -g
+ OBJS = ezxml.o
+ LIB = libezxml.a
++DYN = libezxml.so
+ TEST = ezxmltest
+ ifdef NOMMAP
+ CFLAGS += -D EZXML_NOMMAP
+@@ -36,11 +37,14 @@ ifdef DEBUG
+ CFLAGS += $(DEBUG_CFLAGS)
+ endif
+-all: $(LIB)
++all: $(LIB) $(DYN)
+ $(LIB): $(OBJS)
+       $(AR) rcs $(LIB) $(OBJS)
++$(DYN): $(OBJS)
++      $(CC) -shared -o $(DYN) $(OBJS)
++
+ nommap: CFLAGS += -D EZXML_NOMMAP
+ nommap: all
diff --git a/libs/ezxml/patches/200-ezxml_parse_str_d.patch b/libs/ezxml/patches/200-ezxml_parse_str_d.patch
new file mode 100644 (file)
index 0000000..17d5efa
--- /dev/null
@@ -0,0 +1,38 @@
+diff -pruN ezxml-0.8.6.orig/ezxml.c ezxml-0.8.6/ezxml.c
+--- ezxml-0.8.6.orig/ezxml.c   2006-06-08 04:33:38.000000000 +0200
++++ ezxml-0.8.6/ezxml.c        2008-02-15 14:35:17.000000000 +0100
+@@ -599,6 +599,19 @@ ezxml_t ezxml_parse_str(char *s, size_t 
+     else return ezxml_err(root, d, "unclosed tag <%s>", root->cur->name);
+ }
++// parse the given xml string and return an ezxml structure
++ezxml_t ezxml_parse_str_d(char const *_s, size_t len)
++{
++    ezxml_root_t root;
++    char *s;
++
++    if (! (s = strndup(_s, len))) return NULL;
++
++    root = (ezxml_root_t)ezxml_parse_str(s, strlen(s));
++    root->len = -1; // so we know to free s in ezxml_free()
++    return &root->xml;
++}
++
+ // Wrapper for ezxml_parse_str() that accepts a file stream. Reads the entire
+ // stream into memory and then parses it. For xml files, use ezxml_parse_file()
+ // or ezxml_parse_fd()
+diff -pruN ezxml-0.8.6.orig/ezxml.h ezxml-0.8.6/ezxml.h
+--- ezxml-0.8.6.orig/ezxml.h   2006-06-08 03:57:30.000000000 +0200
++++ ezxml-0.8.6/ezxml.h        2008-02-15 14:37:15.000000000 +0100
+@@ -59,6 +59,11 @@ struct ezxml {
+ // pass in the copy. Returns NULL on failure.
+ ezxml_t ezxml_parse_str(char *s, size_t len);
++// Given a string of xml data and its length, parses it and creates an ezxml
++// structure. that strdup()s s
++// Returns NULL on failure.
++ezxml_t ezxml_parse_str_d(char const *s, size_t len);
++
+ // A wrapper for ezxml_parse_str() that accepts a file descriptor. First
+ // attempts to mem map the file. Failing that, reads the file into memory.
+ // Returns NULL on failure.
diff --git a/libs/ezxml/patches/300-ezxml_int.patch b/libs/ezxml/patches/300-ezxml_int.patch
new file mode 100644 (file)
index 0000000..00a3d18
--- /dev/null
@@ -0,0 +1,125 @@
+diff -pruN ezxml-0.8.6.orig/ezxml.c ezxml-0.8.6/ezxml.c
+--- ezxml-0.8.6.orig/ezxml.c   2008-12-16 17:02:17.262312778 +0100
++++ ezxml-0.8.6/ezxml.c        2008-12-16 17:03:24.231073153 +0100
+@@ -25,6 +25,7 @@
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <stdarg.h>
++#include <errno.h>
+ #include <string.h>
+ #include <ctype.h>
+ #include <unistd.h>
+@@ -72,6 +73,19 @@ ezxml_t ezxml_idx(ezxml_t xml, int idx)
+     return xml;
+ }
++int ezxml_int(ezxml_t xml, int default_value)
++{
++      int ret;
++      
++      if(!xml)
++              return default_value;
++              
++      errno = 0;
++      ret = strtol(xml->txt, NULL, 10);
++
++      return (errno == 0 ? ret : default_value);
++}
++
+ // returns the value of the requested tag attribute or NULL if not found
+ const char *ezxml_attr(ezxml_t xml, const char *attr)
+ {
+@@ -89,6 +103,23 @@ const char *ezxml_attr(ezxml_t xml, cons
+     return (root->attr[i][j]) ? root->attr[i][j + 1] : NULL; // found default
+ }
++int ezxml_attr_int(ezxml_t xml, const char *attr, int default_value)
++{
++      int ret;
++      const char *val = NULL;
++      
++      if(!xml)
++              return default_value;
++              
++      if((val = ezxml_attr(xml, attr)) == NULL)
++              return default_value;
++      
++      errno = 0;
++      ret = strtol(val, NULL, 10);
++
++      return (errno == 0 ? ret : default_value);
++}
++
+ // same as ezxml_get but takes an already initialized va_list
+ ezxml_t ezxml_vget(ezxml_t xml, va_list ap)
+ {
+@@ -926,6 +957,16 @@ ezxml_t ezxml_set_txt(ezxml_t xml, const
+     return xml;
+ }
++ezxml_t ezxml_set_int(ezxml_t xml, int data)
++{
++      char *buf = NULL;
++      if (! xml) return NULL;
++      
++      asprintf(&buf, "%d", data);
++      
++      return ezxml_set_flag(ezxml_set_txt(xml, buf), EZXML_TXTM);
++}
++
+ // Sets the given tag attribute or adds a new attribute if not found. A value
+ // of NULL will remove the specified attribute. Returns the tag given.
+ ezxml_t ezxml_set_attr(ezxml_t xml, const char *name, const char *value)
+@@ -968,6 +1009,15 @@ ezxml_t ezxml_set_attr(ezxml_t xml, cons
+     return xml;
+ }
++ezxml_t ezxml_set_attr_int(ezxml_t xml, const char *name, int data)
++{
++      char *buf = NULL;
++      if (! xml) return NULL;
++      
++      asprintf(&buf, "%d", data);
++      return ezxml_set_attr(ezxml_set_flag(xml, EZXML_DUP), name, buf);
++}
++
+ // sets a flag for the given tag and returns the tag
+ ezxml_t ezxml_set_flag(ezxml_t xml, short flag)
+ {
+diff -pruN ezxml-0.8.6.orig/ezxml.h ezxml-0.8.6/ezxml.h
+--- ezxml-0.8.6.orig/ezxml.h   2008-12-16 17:02:17.262312778 +0100
++++ ezxml-0.8.6/ezxml.h        2008-12-16 17:03:44.189450448 +0100
+@@ -95,9 +95,13 @@ ezxml_t ezxml_idx(ezxml_t xml, int idx);
+ // returns the given tag's character content or empty string if none
+ #define ezxml_txt(xml) ((xml) ? xml->txt : "")
++int ezxml_int(ezxml_t xml, int default_value);
++
+ // returns the value of the requested tag attribute, or NULL if not found
+ const char *ezxml_attr(ezxml_t xml, const char *attr);
++int ezxml_attr_int(ezxml_t xml, const char *attr, int default_value);
++
+ // Traverses the ezxml sturcture to retrieve a specific subtag. Takes a
+ // variable length list of tag names and indexes. The argument list must be
+ // terminated by either an index of -1 or an empty string tag name. Example: 
+@@ -137,6 +141,9 @@ ezxml_t ezxml_add_child(ezxml_t xml, con
+ // sets the character content for the given tag and returns the tag
+ ezxml_t ezxml_set_txt(ezxml_t xml, const char *txt);
++// set int value
++ezxml_t ezxml_set_int(ezxml_t xml, int data);
++
+ // wrapper for ezxml_set_txt() that strdup()s txt
+ #define ezxml_set_txt_d(xml, txt) \
+     ezxml_set_flag(ezxml_set_txt(xml, strdup(txt)), EZXML_TXTM)
+@@ -144,6 +151,9 @@ ezxml_t ezxml_set_txt(ezxml_t xml, const
+ // Sets the given tag attribute or adds a new attribute if not found. A value
+ // of NULL will remove the specified attribute. Returns the tag given.
+ ezxml_t ezxml_set_attr(ezxml_t xml, const char *name, const char *value);
++      
++// set int value for an attr
++ezxml_t ezxml_set_attr_int(ezxml_t xml, const char *name, int data);
+ // Wrapper for ezxml_set_attr() that strdup()s name/value. Value cannot be NULL
+ #define ezxml_set_attr_d(xml, name, value) \
diff --git a/libs/ezxml/patches/400-ezxml_child.patch b/libs/ezxml/patches/400-ezxml_child.patch
new file mode 100644 (file)
index 0000000..46d2faa
--- /dev/null
@@ -0,0 +1,21 @@
+diff -pruN ezxml-0.8.6.orig/ezxml.h ezxml-0.8.6/ezxml.h
+--- ezxml-0.8.6.orig/ezxml.h   2008-12-16 17:07:47.585487234 +0100
++++ ezxml-0.8.6/ezxml.h        2008-12-16 17:08:29.037939949 +0100
+@@ -175,6 +175,17 @@ ezxml_t ezxml_insert(ezxml_t xml, ezxml_
+ // removes a tag along with all its subtags
+ #define ezxml_remove(xml) ezxml_free(ezxml_cut(xml))
++static inline char const * ezxml_child_txt( ezxml_t node, char const *child )
++{
++      return ezxml_txt( ezxml_child( node, child ) );
++}
++
++static inline ezxml_t ezxml_child_set_txt_d( ezxml_t node, char const *child,
++                                      char const *value )
++{
++      return ezxml_set_txt_d( ezxml_child( node, child ), value );
++}
++
+ #ifdef __cplusplus
+ }
+ #endif