diff --git a/libs/ezxml/Makefile b/libs/ezxml/Makefile new file mode 100644 index 000000000..bde766261 --- /dev/null +++ b/libs/ezxml/Makefile @@ -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 index 000000000..28a8164c6 --- /dev/null +++ b/libs/ezxml/patches/100-cross_compile.patch @@ -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 index 000000000..988868686 --- /dev/null +++ b/libs/ezxml/patches/101-build_shared.patch @@ -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 index 000000000..17d5efaef --- /dev/null +++ b/libs/ezxml/patches/200-ezxml_parse_str_d.patch @@ -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 index 000000000..00a3d18cc --- /dev/null +++ b/libs/ezxml/patches/300-ezxml_int.patch @@ -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 + #include + #include ++#include + #include + #include + #include +@@ -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 index 000000000..46d2faa08 --- /dev/null +++ b/libs/ezxml/patches/400-ezxml_child.patch @@ -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