patched to have shared libraries for Python regression tests and static

* Makefile.am configure.in: patched to have shared libraries
  for Python regression tests and static binaries for gdb debug
  in my development environment
* relaxng.c: more bugfixes
  found 373 test schemas: 296 success 77 failures
  found 529 test instances: 516 success 8 failures
* result/relaxng/*: updated the results
Daniel
diff --git a/relaxng.c b/relaxng.c
index 2fd70af..13beb42 100644
--- a/relaxng.c
+++ b/relaxng.c
@@ -2998,9 +2998,24 @@
 static xmlRelaxNGDefinePtr
 xmlRelaxNGParseNameClass(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node,
 	                 xmlRelaxNGDefinePtr def) {
-    xmlRelaxNGDefinePtr ret = def;
+    xmlRelaxNGDefinePtr ret, tmp;
     xmlChar *val;
 
+    ret = def;
+    if ((IS_RELAXNG(node, "name")) || (IS_RELAXNG(node, "anyName"))  ||
+        (IS_RELAXNG(node, "nsName"))) {
+	if ((def->type != XML_RELAXNG_ELEMENT) &&
+	    (def->type != XML_RELAXNG_ATTRIBUTE)) {
+	    ret = xmlRelaxNGNewDefine(ctxt, node);
+	    if (ret == NULL)
+		return(NULL);
+	    ret->parent = def;
+	    if (ctxt->flags & XML_RELAXNG_IN_ATTRIBUTE)
+		ret->type = XML_RELAXNG_ATTRIBUTE;
+	    else
+		ret->type = XML_RELAXNG_ELEMENT;
+	}
+    }
     if (IS_RELAXNG(node, "name")) {
 	val = xmlNodeGetContent(node);
 	xmlRelaxNGNormExtSpace(val);
@@ -3068,6 +3083,9 @@
 			       (def->type == XML_RELAXNG_ATTRIBUTE));
 	}
     } else if (IS_RELAXNG(node, "choice")) {
+	xmlNodePtr child;
+	xmlRelaxNGDefinePtr last = NULL;
+
 	ret = xmlRelaxNGNewDefine(ctxt, node);
 	if (ret == NULL)
 	    return(NULL);
@@ -3080,8 +3098,6 @@
 		    "Element choice is empty\n");
 	    ctxt->nbErrors++;
 	} else {
-	    xmlNodePtr child;
-	    xmlRelaxNGDefinePtr last = NULL, tmp;
 
 	    child = node->children;
 	    while (child != NULL) {
@@ -3105,6 +3121,17 @@
 	ctxt->nbErrors++;
 	return(NULL);
     }
+    if (ret != def) {
+	if (def->nameClass == NULL) {
+	    def->nameClass = ret;
+	} else {
+	    tmp = def->nameClass;
+	    while (tmp->next != NULL) {
+		tmp = tmp->next;
+	    }
+	    tmp->next = ret;
+	}
+    }
     return(ret);
 }
 
@@ -5134,6 +5161,8 @@
 	    ctxt->state->value = cur;
 
 	    while (list != NULL) {
+		if (ctxt->state->value == ctxt->state->endvalue)
+		    ctxt->state->value = NULL;
 		ret = xmlRelaxNGValidateValue(ctxt, list);
 		if (ret != 0) {
 #ifdef DEBUG_LIST
@@ -5148,6 +5177,7 @@
 #endif
 		list = list->next;
 	    }
+
 	    if ((ret == 0) && (ctxt->state->value != NULL) &&
 		(ctxt->state->value != ctxt->state->endvalue)) {
 		VALID_CTXT();
@@ -5852,11 +5882,33 @@
 	    }
 	    list = list->next;
 	}
+	ret = 1;
+	ctxt->flags = oldflags;
+    } else if (define->type == XML_RELAXNG_CHOICE) {
+	xmlRelaxNGDefinePtr list;
+	oldflags = ctxt->flags;
+	ctxt->flags |= FLAGS_IGNORABLE;
+
+	list = define->nameClass;
+	while (list != NULL) {
+	    ret = xmlRelaxNGElementMatch(ctxt, list, elem);
+	    if (ret == 1) {
+		ctxt->flags = oldflags;
+		return(1);
+	    }
+	    if (ret < 0) {
+		ctxt->flags = oldflags;
+		return(ret);
+	    }
+	    list = list->next;
+	}
+	ret = 0;
 	ctxt->flags = oldflags;
     } else {
 	TODO
+	ret = -1;
     }
-    return(1);
+    return(ret);
 }
 
 /**
@@ -6284,7 +6336,7 @@
 	    ctxt->state->endvalue = oldendvalue;
 	    if (ret == -1) {
 		VALID_CTXT();
-		VALID_ERROR("internal error validating list\n");
+		VALID_ERROR("error validating list\n");
 	    } else if ((ret == 0) && (node != NULL)) {
 		ctxt->state->seq = node->next;
 	    }