libxml2 r3746 - in trunk: . python



Author: veillard
Date: Tue Jun  3 16:08:54 2008
New Revision: 3746
URL: http://svn.gnome.org/viewvc/libxml2?rev=3746&view=rev

Log:
* python/generator.py python/setup.py: apply patch from Martin fixing
  python whitespaces
* NEWS: following previous commit rebuilt now in UTF-8
Daniel


Added:
   trunk/python/setup.py   (contents, props changed)
Modified:
   trunk/ChangeLog
   trunk/NEWS
   trunk/python/generator.py

Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS	(original)
+++ trunk/NEWS	Tue Jun  3 16:08:54 2008
@@ -95,9 +95,9 @@
       flag fix (Richard Jones), regexp interpretation of \,
       htmlCreateDocParserCtxt (Jean-Daniel Dupas), configure.in
       typo (Bjorn Reese), entity content failure, xmlListAppend() fix
-      (Georges-Andréilber), XPath number serialization (William Brack),
+      (Georges-Andrà Silber), XPath number serialization (William Brack),
       nanohttp gzipped stream fix (William Brack and Alex Cornejo),
-      xmlCharEncFirstLine typo (Mark Rowe), uri bug (Françs Delyon),
+      xmlCharEncFirstLine typo (Mark Rowe), uri bug (FranÃois Delyon),
       XPath string value of PI nodes (William Brack), XPath node set
       sorting bugs (William Brack), avoid outputting namespace decl
       dups in the writer (Rob Richards), xmlCtxtReset bug, UTF-8 encoding
@@ -105,7 +105,7 @@
       workaround wrong file: URIs, htmlNodeDumpFormatOutput on attributes,
       invalid character in attribute detection bug, big comments before 
       internal subset streaming bug, HTML parsing of attributes with : in
-      the name, IDness of name in HTML (Dagfinn I. Mannsår) 
+      the name, IDness of name in HTML (Dagfinn I. MannsÃker) 
    - Improvement: keep URI query parts in raw form (Richard Jones),
       embed tag support in HTML (Michael Day) 
 
@@ -120,7 +120,7 @@
       (Steven Rainwater), user data propagation in XInclude (Michael Day),
       standalone and XML decl detection (Michael Day), Python id ouptut
       for some id, fix the big python string memory leak, URI parsing fixes
-      (Stéane Bidoul and William), long comments parsing bug (William),
+      (StÃphane Bidoul and William), long comments parsing bug (William),
       concurrent threads initialization (Ted Phelps), invalid char
       in text XInclude (William), XPath memory leak (William), tab in
       python problems (Andreas Hanke), XPath node comparison error
@@ -130,7 +130,7 @@
       min occurs of 0 (William), HTML script/style parsing (Mike Day)
    - Improvement: make xmlTextReaderSetup() public
    - Compilation and postability: fix a missing include problem (William),
-      __ss_familly on AIX again (BjöWiberg), compilation without zlib
+      __ss_familly on AIX again (BjÃrn Wiberg), compilation without zlib
       (Michael Day), catalog patch for Win32 (Christian Ehrlicher),
       Windows CE fixes (Andreas Stricke)
    - Various CVS to SVN infrastructure changes
@@ -277,7 +277,7 @@
 
 
 2.6.22: Sep 12 2005:
-   - build fixes: compile without schematron (Stéane Bidoul)
+   - build fixes: compile without schematron (StÃphane Bidoul)
    - bug fixes: xmlDebugDumpNode on namespace node (Oleg Paraschenko)i,
     CDATA push parser bug, xmlElemDump problem with XHTML1 doc,
     XML_FEATURE_xxx clash with expat headers renamed XML_WITH_xxx, fix some
@@ -550,7 +550,7 @@
     streaming problem (Steve Ball), DTD serialization problem (William),
     libxml.m4 fixes (Mike Hommey), do not provide destructors as methods on
     Python classes, xmlReader buffer bug, Python bindings memory interfaces
-    improvement (with Stéane Bidoul), Fixed the push parser to be back to
+    improvement (with StÃphane Bidoul), Fixed the push parser to be back to
     synchronous behaviour.
    - improvement: custom per-thread I/O enhancement (Rob Richards), register
     namespace in debug shell (Stefano Debenedetti), Python based regression
@@ -676,8 +676,8 @@
     callbacks order for XPath callbacks (Frederic Peters)
    - Documentation: python scripts (William Brack), xslt stylesheets (John
     Fleck), doc (Sven Zimmerman), I/O example.
-   - Python bindings: fixes (William), enum support (Stéane Bidoul),
-    structured error reporting (Stéane Bidoul)
+   - Python bindings: fixes (William), enum support (StÃphane Bidoul),
+    structured error reporting (StÃphane Bidoul)
    - XInclude: various fixes for conformance, problem related to dictionnary
     references (William & me), recursion (William)
    - xmlWriter: indentation (Lucas Brasilino), memory leaks (Alfred
@@ -807,7 +807,7 @@
     and charset information if available.
    - Relax-NG: bug fixes including the one reported by Martijn Faassen and
     zeroOrMore, better error reporting.
-   - Python bindings (Stéane Bidoul), never use stdout for errors
+   - Python bindings (StÃphane Bidoul), never use stdout for errors
   output
    - Portability: all the headers have macros for export and calling
     convention definitions (Igor Zlatkovic), VMS update (Craig A. Berry),
@@ -888,11 +888,11 @@
    - portability: DJGPP (MsDos) , OpenVMS (Craig A. Berry)
    - William Brack fixed multithreading lock problems
    - IPv6 patch for FTP and HTTP accesses (Archana Shah/Wipro)
-   - Windows fixes (Igor Zlatkovic,  Eric Zurcher), threading (Stéane
+   - Windows fixes (Igor Zlatkovic,  Eric Zurcher), threading (StÃphane
     Bidoul)
    - A few W3C Schemas Structure improvements
    - W3C Schemas Datatype improvements (Charlie Bozeman)
-   - Python bindings for thread globals (Stéane Bidoul), and method/class
+   - Python bindings for thread globals (StÃphane Bidoul), and method/class
     generator
    - added --nonet option to xmllint
    - documentation improvements (John Fleck)
@@ -968,7 +968,7 @@
    - First implementation of RelaxNG, added --relaxng flag to xmllint
    - Schemas support now compiled in by default.
    - Bug fixes: DTD validation, namespace checking, XInclude and entities,
-    delegateURI in XML Catalogs, HTML parser, XML reader (Stéane Bidoul),
+    delegateURI in XML Catalogs, HTML parser, XML reader (StÃphane Bidoul),
     XPath parser and evaluation,  UTF8ToUTF8 serialization, XML reader memory
     consumption, HTML parser, HTML serialization in the presence of
   namespaces
@@ -977,7 +977,7 @@
     patches (Stefan Kost)
    - Portability fixes: NetBSD (Julio Merino), Windows (Igor Zlatkovic)
    - Added python bindings for XPointer, contextual error reporting
-    (Stéane Bidoul)
+    (StÃphane Bidoul)
    - URI/file escaping problems (Stefano Zacchiroli)
 
 
@@ -989,11 +989,11 @@
 
 2.5.0: Jan 6 2003:
    - New XmltextReader interface based on C#
-    API (with help of Stéane Bidoul)
+    API (with help of StÃphane Bidoul)
    - Windows: more exports, including the new API (Igor)
    - XInclude fallback fix
-   - Python: bindings for the new API, packaging (Stéane Bidoul),
-    drv_libxml2.py Python xml.sax driver (Stéane Bidoul), fixes, speedup
+   - Python: bindings for the new API, packaging (StÃphane Bidoul),
+    drv_libxml2.py Python xml.sax driver (StÃphane Bidoul), fixes, speedup
     and iterators for Python-2.2 (Hannu Krosing)
    - Tutorial fixes (john Fleck and Niraj Tolia) xmllint man update
   (John)
@@ -1013,7 +1013,7 @@
 
 2.4.29: Dec 11 2002:
    - Windows fixes (Igor): Windows CE port, pthread linking, python bindings
-    (Stéane Bidoul), Mingw (Magnus Henoch), and export list updates
+    (StÃphane Bidoul), Mingw (Magnus Henoch), and export list updates
    - Fix for prev in python bindings (ERDI Gergo)
    - Fix for entities handling (Marcus Clarke)
    - Refactored the XML and HTML dumps to a single code path, fixed XHTML1
@@ -1360,7 +1360,7 @@
 
 
 2.3.9: May 19 2001:
-Lots of bugfixes, and added a basic SGML catalog support:   - HTML push bugfix #54891 and another patch from Jonas BorgströLots of bugfixes, and added a basic SGML catalog support:   - HTML push bugfix #54891 and another patch from Jonas BorgstrÃm
    - some serious speed optimization again
    - some documentation cleanups
    - trying to get better linking on Solaris (-R)

Modified: trunk/python/generator.py
==============================================================================
--- trunk/python/generator.py	(original)
+++ trunk/python/generator.py	Tue Jun  3 16:08:54 2008
@@ -409,10 +409,10 @@
     if skip_function(name) == 1:
         return 0
     if name in skip_impl:
-	# Don't delete the function entry in the caller.
-	return 1
+        # Don't delete the function entry in the caller.
+        return 1
 
-    c_call = "";
+    c_call = ""
     format=""
     format_args=""
     c_args=""
@@ -426,8 +426,8 @@
         c_args = c_args + "    %s %s;\n" % (arg[1], arg[0])
         if py_types.has_key(arg[1]):
             (f, t, n, c) = py_types[arg[1]]
-	    if (f == 'z') and (name in foreign_encoding_args) and (num_bufs == 0):
-	        f = 't#'
+            if (f == 'z') and (name in foreign_encoding_args) and (num_bufs == 0):
+                f = 't#'
             if f != None:
                 format = format + f
             if t != None:
@@ -435,15 +435,15 @@
                 c_args = c_args + "    PyObject *pyobj_%s;\n" % (arg[0])
                 c_convert = c_convert + \
                    "    %s = (%s) Py%s_Get(pyobj_%s);\n" % (arg[0],
-                   arg[1], t, arg[0]);
+                   arg[1], t, arg[0])
             else:
                 format_args = format_args + ", &%s" % (arg[0])
-	    if f == 't#':
-	        format_args = format_args + ", &py_buffsize%d" % num_bufs
-	        c_args = c_args + "    int py_buffsize%d;\n" % num_bufs
-		num_bufs = num_bufs + 1
+            if f == 't#':
+                format_args = format_args + ", &py_buffsize%d" % num_bufs
+                c_args = c_args + "    int py_buffsize%d;\n" % num_bufs
+                num_bufs = num_bufs + 1
             if c_call != "":
-                c_call = c_call + ", ";
+                c_call = c_call + ", "
             c_call = c_call + "%s" % (arg[0])
         else:
             if skipped_types.has_key(arg[1]):
@@ -459,16 +459,16 @@
 
     if ret[0] == 'void':
         if file == "python_accessor":
-	    if args[1][1] == "char *" or args[1][1] == "xmlChar *":
-		c_call = "\n    if (%s->%s != NULL) xmlFree(%s->%s);\n" % (
-		                 args[0][0], args[1][0], args[0][0], args[1][0])
-		c_call = c_call + "    %s->%s = (%s)xmlStrdup((const xmlChar *)%s);\n" % (args[0][0],
-		                 args[1][0], args[1][1], args[1][0])
-	    else:
-		c_call = "\n    %s->%s = %s;\n" % (args[0][0], args[1][0],
-						   args[1][0])
+            if args[1][1] == "char *" or args[1][1] == "xmlChar *":
+                c_call = "\n    if (%s->%s != NULL) xmlFree(%s->%s);\n" % (
+                                 args[0][0], args[1][0], args[0][0], args[1][0])
+                c_call = c_call + "    %s->%s = (%s)xmlStrdup((const xmlChar *)%s);\n" % (args[0][0],
+                                 args[1][0], args[1][1], args[1][0])
+            else:
+                c_call = "\n    %s->%s = %s;\n" % (args[0][0], args[1][0],
+                                                   args[1][0])
         else:
-            c_call = "\n    %s(%s);\n" % (name, c_call);
+            c_call = "\n    %s(%s);\n" % (name, c_call)
         ret_convert = "    Py_INCREF(Py_None);\n    return(Py_None);\n"
     elif py_types.has_key(ret[0]):
         (f, t, n, c) = py_types[ret[0]]
@@ -476,13 +476,13 @@
         if file == "python_accessor" and ret[2] != None:
             c_call = "\n    c_retval = %s->%s;\n" % (args[0][0], ret[2])
         else:
-            c_call = "\n    c_retval = %s(%s);\n" % (name, c_call);
+            c_call = "\n    c_retval = %s(%s);\n" % (name, c_call)
         ret_convert = "    py_retval = libxml_%sWrap((%s) c_retval);\n" % (n,c)
         ret_convert = ret_convert + "    return(py_retval);\n"
     elif py_return_types.has_key(ret[0]):
         (f, t, n, c) = py_return_types[ret[0]]
         c_return = "    %s c_retval;\n" % (ret[0])
-        c_call = "\n    c_retval = %s(%s);\n" % (name, c_call);
+        c_call = "\n    c_retval = %s(%s);\n" % (name, c_call)
         ret_convert = "    py_retval = libxml_%sWrap((%s) c_retval);\n" % (n,c)
         ret_convert = ret_convert + "    return(py_retval);\n"
     else:
@@ -501,31 +501,31 @@
         output.write("#if %s\n" % cond)
 
     include.write("PyObject * ")
-    include.write("libxml_%s(PyObject *self, PyObject *args);\n" % (name));
+    include.write("libxml_%s(PyObject *self, PyObject *args);\n" % (name))
 
     export.write("    { (char *)\"%s\", libxml_%s, METH_VARARGS, NULL },\n" %
                  (name, name))
 
     if file == "python":
         # Those have been manually generated
-	if cond != None and cond != "":
-	    include.write("#endif\n");
-	    export.write("#endif\n");
-	    output.write("#endif\n");
+        if cond != None and cond != "":
+            include.write("#endif\n")
+            export.write("#endif\n")
+            output.write("#endif\n")
         return 1
     if file == "python_accessor" and ret[0] != "void" and ret[2] is None:
         # Those have been manually generated
-	if cond != None and cond != "":
-	    include.write("#endif\n");
-	    export.write("#endif\n");
-	    output.write("#endif\n");
+        if cond != None and cond != "":
+            include.write("#endif\n")
+            export.write("#endif\n")
+            output.write("#endif\n")
         return 1
 
     output.write("PyObject *\n")
     output.write("libxml_%s(PyObject *self ATTRIBUTE_UNUSED," % (name))
     output.write(" PyObject *args")
     if format == "":
-	output.write(" ATTRIBUTE_UNUSED")
+        output.write(" ATTRIBUTE_UNUSED")
     output.write(") {\n")
     if ret[0] != 'void':
         output.write("    PyObject *py_retval;\n")
@@ -555,38 +555,38 @@
     global unknown_types
 
     try:
-	f = open(os.path.join(srcPref,"libxml2-api.xml"))
-	data = f.read()
-	(parser, target)  = getparser()
-	parser.feed(data)
-	parser.close()
+        f = open(os.path.join(srcPref,"libxml2-api.xml"))
+        data = f.read()
+        (parser, target)  = getparser()
+        parser.feed(data)
+        parser.close()
     except IOError, msg:
-	try:
-	    f = open(os.path.join(srcPref,"..","doc","libxml2-api.xml"))
-	    data = f.read()
-	    (parser, target)  = getparser()
-	    parser.feed(data)
-	    parser.close()
-	except IOError, msg:
-	    print file, ":", msg
-	    sys.exit(1)
+        try:
+            f = open(os.path.join(srcPref,"..","doc","libxml2-api.xml"))
+            data = f.read()
+            (parser, target)  = getparser()
+            parser.feed(data)
+            parser.close()
+        except IOError, msg:
+            print file, ":", msg
+            sys.exit(1)
 
     n = len(functions.keys())
     print "Found %d functions in libxml2-api.xml" % (n)
 
     py_types['pythonObject'] = ('O', "pythonObject", "pythonObject", "pythonObject")
     try:
-	f = open(os.path.join(srcPref,"libxml2-python-api.xml"))
-	data = f.read()
-	(parser, target)  = getparser()
-	parser.feed(data)
-	parser.close()
+        f = open(os.path.join(srcPref,"libxml2-python-api.xml"))
+        data = f.read()
+        (parser, target)  = getparser()
+        parser.feed(data)
+        parser.close()
     except IOError, msg:
-	print file, ":", msg
+        print file, ":", msg
 
 
     print "Found %d functions in libxml2-python-api.xml" % (
-	  len(functions.keys()) - n)
+          len(functions.keys()) - n)
     nb_wrap = 0
     failed = 0
     skipped = 0
@@ -604,24 +604,24 @@
     wrapper.write("#include \"libxml_wrap.h\"\n")
     wrapper.write("#include \"libxml2-py.h\"\n\n")
     for function in functions.keys():
-	ret = print_function_wrapper(function, wrapper, export, include)
-	if ret < 0:
-	    failed = failed + 1
-	    del functions[function]
-	if ret == 0:
-	    skipped = skipped + 1
-	    del functions[function]
-	if ret == 1:
-	    nb_wrap = nb_wrap + 1
+        ret = print_function_wrapper(function, wrapper, export, include)
+        if ret < 0:
+            failed = failed + 1
+            del functions[function]
+        if ret == 0:
+            skipped = skipped + 1
+            del functions[function]
+        if ret == 1:
+            nb_wrap = nb_wrap + 1
     include.close()
     export.close()
     wrapper.close()
 
     print "Generated %d wrapper functions, %d failed, %d skipped\n" % (nb_wrap,
-							      failed, skipped);
+                                                              failed, skipped)
     print "Missing type converters: "
     for type in unknown_types.keys():
-	print "%s:%d " % (type, len(unknown_types[type])),
+        print "%s:%d " % (type, len(unknown_types[type])),
     print
 
 #######################################################################
@@ -713,9 +713,9 @@
     "relaxNgSchema": "xmlRelaxNGFree",
     "relaxNgParserCtxt": "xmlRelaxNGFreeParserCtxt",
     "relaxNgValidCtxt": "xmlRelaxNGFreeValidCtxt",
-	"Schema": "xmlSchemaFree",
-	"SchemaParserCtxt": "xmlSchemaFreeParserCtxt",
-	"SchemaValidCtxt": "xmlSchemaFreeValidCtxt",
+        "Schema": "xmlSchemaFree",
+        "SchemaParserCtxt": "xmlSchemaFreeParserCtxt",
+        "SchemaValidCtxt": "xmlSchemaFreeValidCtxt",
         "ValidCtxt": "xmlFreeValidCtxt",
 }
 
@@ -730,7 +730,7 @@
 reference_keepers = {
     "xmlTextReader": [('inputBuffer', 'input')],
     "relaxNgValidCtxt": [('relaxNgSchema', 'schema')],
-	"SchemaValidCtxt": [('Schema', 'schema')],
+        "SchemaValidCtxt": [('Schema', 'schema')],
 }
 
 function_classes = {}
@@ -845,23 +845,23 @@
      if functions[name][0] is None or functions[name][0] == "":
          return
      val = functions[name][0]
-     val = string.replace(val, "NULL", "None");
+     val = string.replace(val, "NULL", "None")
      output.write(indent)
      output.write('"""')
      while len(val) > 60:
          if val[0] == " ":
-	     val = val[1:]
-	     continue
+             val = val[1:]
+             continue
          str = val[0:60]
-         i = string.rfind(str, " ");
+         i = string.rfind(str, " ")
          if i < 0:
              i = 60
          str = val[0:i]
          val = val[i:]
          output.write(str)
-         output.write('\n  ');
+         output.write('\n  ')
          output.write(indent)
-     output.write(val);
+     output.write(val)
      output.write(' """\n')
 
 def buildWrappers():
@@ -884,7 +884,7 @@
     global functions_noexcept
 
     for type in classes_type.keys():
-	function_classes[classes_type[type][2]] = []
+        function_classes[classes_type[type][2]] = []
 
     #
     # Build the list of C types to look for ordered to start
@@ -895,63 +895,63 @@
     ctypes_processed = {}
     classes_processed = {}
     for classe in primary_classes:
-	classes_list.append(classe)
-	classes_processed[classe] = ()
-	for type in classes_type.keys():
-	    tinfo = classes_type[type]
-	    if tinfo[2] == classe:
-		ctypes.append(type)
-		ctypes_processed[type] = ()
+        classes_list.append(classe)
+        classes_processed[classe] = ()
+        for type in classes_type.keys():
+            tinfo = classes_type[type]
+            if tinfo[2] == classe:
+                ctypes.append(type)
+                ctypes_processed[type] = ()
     for type in classes_type.keys():
-	if ctypes_processed.has_key(type):
-	    continue
-	tinfo = classes_type[type]
-	if not classes_processed.has_key(tinfo[2]):
-	    classes_list.append(tinfo[2])
-	    classes_processed[tinfo[2]] = ()
-	    
-	ctypes.append(type)
-	ctypes_processed[type] = ()
+        if ctypes_processed.has_key(type):
+            continue
+        tinfo = classes_type[type]
+        if not classes_processed.has_key(tinfo[2]):
+            classes_list.append(tinfo[2])
+            classes_processed[tinfo[2]] = ()
+            
+        ctypes.append(type)
+        ctypes_processed[type] = ()
 
     for name in functions.keys():
-	found = 0;
-	(desc, ret, args, file, cond) = functions[name]
-	for type in ctypes:
-	    classe = classes_type[type][2]
-
-	    if name[0:3] == "xml" and len(args) >= 1 and args[0][1] == type:
-		found = 1
-		func = nameFixup(name, classe, type, file)
-		info = (0, func, name, ret, args, file)
-		function_classes[classe].append(info)
-	    elif name[0:3] == "xml" and len(args) >= 2 and args[1][1] == type \
-	        and file != "python_accessor":
-		found = 1
-		func = nameFixup(name, classe, type, file)
-		info = (1, func, name, ret, args, file)
-		function_classes[classe].append(info)
-	    elif name[0:4] == "html" and len(args) >= 1 and args[0][1] == type:
-		found = 1
-		func = nameFixup(name, classe, type, file)
-		info = (0, func, name, ret, args, file)
-		function_classes[classe].append(info)
-	    elif name[0:4] == "html" and len(args) >= 2 and args[1][1] == type \
-	        and file != "python_accessor":
-		found = 1
-		func = nameFixup(name, classe, type, file)
-		info = (1, func, name, ret, args, file)
-		function_classes[classe].append(info)
-	if found == 1:
-	    continue
-	if name[0:8] == "xmlXPath":
-	    continue
-	if name[0:6] == "xmlStr":
-	    continue
-	if name[0:10] == "xmlCharStr":
-	    continue
-	func = nameFixup(name, "None", file, file)
-	info = (0, func, name, ret, args, file)
-	function_classes['None'].append(info)
+        found = 0
+        (desc, ret, args, file, cond) = functions[name]
+        for type in ctypes:
+            classe = classes_type[type][2]
+
+            if name[0:3] == "xml" and len(args) >= 1 and args[0][1] == type:
+                found = 1
+                func = nameFixup(name, classe, type, file)
+                info = (0, func, name, ret, args, file)
+                function_classes[classe].append(info)
+            elif name[0:3] == "xml" and len(args) >= 2 and args[1][1] == type \
+                and file != "python_accessor":
+                found = 1
+                func = nameFixup(name, classe, type, file)
+                info = (1, func, name, ret, args, file)
+                function_classes[classe].append(info)
+            elif name[0:4] == "html" and len(args) >= 1 and args[0][1] == type:
+                found = 1
+                func = nameFixup(name, classe, type, file)
+                info = (0, func, name, ret, args, file)
+                function_classes[classe].append(info)
+            elif name[0:4] == "html" and len(args) >= 2 and args[1][1] == type \
+                and file != "python_accessor":
+                found = 1
+                func = nameFixup(name, classe, type, file)
+                info = (1, func, name, ret, args, file)
+                function_classes[classe].append(info)
+        if found == 1:
+            continue
+        if name[0:8] == "xmlXPath":
+            continue
+        if name[0:6] == "xmlStr":
+            continue
+        if name[0:10] == "xmlCharStr":
+            continue
+        func = nameFixup(name, "None", file, file)
+        info = (0, func, name, ret, args, file)
+        function_classes['None'].append(info)
    
     classes = open("libxml2class.py", "w")
     txt = open("libxml2class.txt", "w")
@@ -959,261 +959,261 @@
 
     txt.write("#\n# Global functions of the module\n#\n\n")
     if function_classes.has_key("None"):
-	flist = function_classes["None"]
-	flist.sort(functionCompare)
-	oldfile = ""
-	for info in flist:
-	    (index, func, name, ret, args, file) = info
-	    if file != oldfile:
-		classes.write("#\n# Functions from module %s\n#\n\n" % file)
-		txt.write("\n# functions from module %s\n" % file)
-		oldfile = file
-	    classes.write("def %s(" % func)
-	    txt.write("%s()\n" % func);
-	    n = 0
-	    for arg in args:
-		if n != 0:
-		    classes.write(", ")
-		classes.write("%s" % arg[0])
-		n = n + 1
-	    classes.write("):\n")
-	    writeDoc(name, args, '    ', classes);
-
-	    for arg in args:
-		if classes_type.has_key(arg[1]):
-		    classes.write("    if %s is None: %s__o = None\n" %
-				  (arg[0], arg[0]))
-		    classes.write("    else: %s__o = %s%s\n" %
-				  (arg[0], arg[0], classes_type[arg[1]][0]))
-	    if ret[0] != "void":
-		classes.write("    ret = ");
-	    else:
-		classes.write("    ");
-	    classes.write("libxml2mod.%s(" % name)
-	    n = 0
-	    for arg in args:
-		if n != 0:
-		    classes.write(", ");
-		classes.write("%s" % arg[0])
-		if classes_type.has_key(arg[1]):
-		    classes.write("__o");
-		n = n + 1
-	    classes.write(")\n");
-	    if ret[0] != "void":
-		if classes_type.has_key(ret[0]):
-		    #
-		    # Raise an exception
-		    #
-		    if functions_noexcept.has_key(name):
-		        classes.write("    if ret is None:return None\n");
-		    elif string.find(name, "URI") >= 0:
-			classes.write(
-			"    if ret is None:raise uriError('%s() failed')\n"
-			              % (name))
-		    elif string.find(name, "XPath") >= 0:
-			classes.write(
-			"    if ret is None:raise xpathError('%s() failed')\n"
-			              % (name))
-		    elif string.find(name, "Parse") >= 0:
-			classes.write(
-			"    if ret is None:raise parserError('%s() failed')\n"
-			              % (name))
-		    else:
-			classes.write(
-			"    if ret is None:raise treeError('%s() failed')\n"
-			              % (name))
-		    classes.write("    return ");
-		    classes.write(classes_type[ret[0]][1] % ("ret"));
-		    classes.write("\n");
-		else:
-		    classes.write("    return ret\n");
-	    classes.write("\n");
+        flist = function_classes["None"]
+        flist.sort(functionCompare)
+        oldfile = ""
+        for info in flist:
+            (index, func, name, ret, args, file) = info
+            if file != oldfile:
+                classes.write("#\n# Functions from module %s\n#\n\n" % file)
+                txt.write("\n# functions from module %s\n" % file)
+                oldfile = file
+            classes.write("def %s(" % func)
+            txt.write("%s()\n" % func)
+            n = 0
+            for arg in args:
+                if n != 0:
+                    classes.write(", ")
+                classes.write("%s" % arg[0])
+                n = n + 1
+            classes.write("):\n")
+            writeDoc(name, args, '    ', classes)
+
+            for arg in args:
+                if classes_type.has_key(arg[1]):
+                    classes.write("    if %s is None: %s__o = None\n" %
+                                  (arg[0], arg[0]))
+                    classes.write("    else: %s__o = %s%s\n" %
+                                  (arg[0], arg[0], classes_type[arg[1]][0]))
+            if ret[0] != "void":
+                classes.write("    ret = ")
+            else:
+                classes.write("    ")
+            classes.write("libxml2mod.%s(" % name)
+            n = 0
+            for arg in args:
+                if n != 0:
+                    classes.write(", ")
+                classes.write("%s" % arg[0])
+                if classes_type.has_key(arg[1]):
+                    classes.write("__o")
+                n = n + 1
+            classes.write(")\n")
+            if ret[0] != "void":
+                if classes_type.has_key(ret[0]):
+                    #
+                    # Raise an exception
+                    #
+                    if functions_noexcept.has_key(name):
+                        classes.write("    if ret is None:return None\n")
+                    elif string.find(name, "URI") >= 0:
+                        classes.write(
+                        "    if ret is None:raise uriError('%s() failed')\n"
+                                      % (name))
+                    elif string.find(name, "XPath") >= 0:
+                        classes.write(
+                        "    if ret is None:raise xpathError('%s() failed')\n"
+                                      % (name))
+                    elif string.find(name, "Parse") >= 0:
+                        classes.write(
+                        "    if ret is None:raise parserError('%s() failed')\n"
+                                      % (name))
+                    else:
+                        classes.write(
+                        "    if ret is None:raise treeError('%s() failed')\n"
+                                      % (name))
+                    classes.write("    return ")
+                    classes.write(classes_type[ret[0]][1] % ("ret"))
+                    classes.write("\n")
+                else:
+                    classes.write("    return ret\n")
+            classes.write("\n")
 
     txt.write("\n\n#\n# Set of classes of the module\n#\n\n")
     for classname in classes_list:
-	if classname == "None":
-	    pass
-	else:
-	    if classes_ancestor.has_key(classname):
-		txt.write("\n\nClass %s(%s)\n" % (classname,
-			  classes_ancestor[classname]))
-		classes.write("class %s(%s):\n" % (classname,
-			      classes_ancestor[classname]))
-		classes.write("    def __init__(self, _obj=None):\n")
-		if classes_ancestor[classname] == "xmlCore" or \
-		   classes_ancestor[classname] == "xmlNode":
-		    classes.write("        if type(_obj).__name__ != ")
-		    classes.write("'PyCObject':\n")
-		    classes.write("            raise TypeError, ")
-		    classes.write("'%s needs a PyCObject argument'\n" % \
-		                classname)
-		if reference_keepers.has_key(classname):
-		    rlist = reference_keepers[classname]
-		    for ref in rlist:
-		        classes.write("        self.%s = None\n" % ref[1])
-		classes.write("        self._o = _obj\n")
-		classes.write("        %s.__init__(self, _obj=_obj)\n\n" % (
-			      classes_ancestor[classname]))
-		if classes_ancestor[classname] == "xmlCore" or \
-		   classes_ancestor[classname] == "xmlNode":
-		    classes.write("    def __repr__(self):\n")
-		    format = "<%s (%%s) object at 0x%%x>" % (classname)
-		    classes.write("        return \"%s\" %% (self.name, long(pos_id (self)))\n\n" % (
-				  format))
-	    else:
-		txt.write("Class %s()\n" % (classname))
-		classes.write("class %s:\n" % (classname))
-		classes.write("    def __init__(self, _obj=None):\n")
-		if reference_keepers.has_key(classname):
-		    list = reference_keepers[classname]
-		    for ref in list:
-		        classes.write("        self.%s = None\n" % ref[1])
-		classes.write("        if _obj != None:self._o = _obj;return\n")
-		classes.write("        self._o = None\n\n");
-	    destruct=None
-	    if classes_destructors.has_key(classname):
-		classes.write("    def __del__(self):\n")
-		classes.write("        if self._o != None:\n")
-		classes.write("            libxml2mod.%s(self._o)\n" %
-			      classes_destructors[classname]);
-		classes.write("        self._o = None\n\n");
-		destruct=classes_destructors[classname]
-	    flist = function_classes[classname]
-	    flist.sort(functionCompare)
-	    oldfile = ""
-	    for info in flist:
-		(index, func, name, ret, args, file) = info
-		#
-		# Do not provide as method the destructors for the class
-		# to avoid double free
-		#
-		if name == destruct:
-		    continue;
-		if file != oldfile:
-		    if file == "python_accessor":
-			classes.write("    # accessors for %s\n" % (classname))
-			txt.write("    # accessors\n")
-		    else:
-			classes.write("    #\n")
-			classes.write("    # %s functions from module %s\n" % (
-				      classname, file))
-			txt.write("\n    # functions from module %s\n" % file)
-			classes.write("    #\n\n")
-		oldfile = file
-		classes.write("    def %s(self" % func)
-		txt.write("    %s()\n" % func);
-		n = 0
-		for arg in args:
-		    if n != index:
-			classes.write(", %s" % arg[0])
-		    n = n + 1
-		classes.write("):\n")
-		writeDoc(name, args, '        ', classes);
-		n = 0
-		for arg in args:
-		    if classes_type.has_key(arg[1]):
-			if n != index:
-			    classes.write("        if %s is None: %s__o = None\n" %
-					  (arg[0], arg[0]))
-			    classes.write("        else: %s__o = %s%s\n" %
-					  (arg[0], arg[0], classes_type[arg[1]][0]))
-		    n = n + 1
-		if ret[0] != "void":
-		    classes.write("        ret = ");
-		else:
-		    classes.write("        ");
-		classes.write("libxml2mod.%s(" % name)
-		n = 0
-		for arg in args:
-		    if n != 0:
-			classes.write(", ");
-		    if n != index:
-			classes.write("%s" % arg[0])
-			if classes_type.has_key(arg[1]):
-			    classes.write("__o");
-		    else:
-			classes.write("self");
-			if classes_type.has_key(arg[1]):
-			    classes.write(classes_type[arg[1]][0])
-		    n = n + 1
-		classes.write(")\n");
-		if ret[0] != "void":
-		    if classes_type.has_key(ret[0]):
-			#
-			# Raise an exception
-			#
-			if functions_noexcept.has_key(name):
-			    classes.write(
-			        "        if ret is None:return None\n");
-			elif string.find(name, "URI") >= 0:
-			    classes.write(
-		    "        if ret is None:raise uriError('%s() failed')\n"
-					  % (name))
-			elif string.find(name, "XPath") >= 0:
-			    classes.write(
-		    "        if ret is None:raise xpathError('%s() failed')\n"
-					  % (name))
-			elif string.find(name, "Parse") >= 0:
-			    classes.write(
-		    "        if ret is None:raise parserError('%s() failed')\n"
-					  % (name))
-			else:
-			    classes.write(
-		    "        if ret is None:raise treeError('%s() failed')\n"
-					  % (name))
-
-			#
-			# generate the returned class wrapper for the object
-			#
-			classes.write("        __tmp = ");
-			classes.write(classes_type[ret[0]][1] % ("ret"));
-			classes.write("\n");
+        if classname == "None":
+            pass
+        else:
+            if classes_ancestor.has_key(classname):
+                txt.write("\n\nClass %s(%s)\n" % (classname,
+                          classes_ancestor[classname]))
+                classes.write("class %s(%s):\n" % (classname,
+                              classes_ancestor[classname]))
+                classes.write("    def __init__(self, _obj=None):\n")
+                if classes_ancestor[classname] == "xmlCore" or \
+                   classes_ancestor[classname] == "xmlNode":
+                    classes.write("        if type(_obj).__name__ != ")
+                    classes.write("'PyCObject':\n")
+                    classes.write("            raise TypeError, ")
+                    classes.write("'%s needs a PyCObject argument'\n" % \
+                                classname)
+                if reference_keepers.has_key(classname):
+                    rlist = reference_keepers[classname]
+                    for ref in rlist:
+                        classes.write("        self.%s = None\n" % ref[1])
+                classes.write("        self._o = _obj\n")
+                classes.write("        %s.__init__(self, _obj=_obj)\n\n" % (
+                              classes_ancestor[classname]))
+                if classes_ancestor[classname] == "xmlCore" or \
+                   classes_ancestor[classname] == "xmlNode":
+                    classes.write("    def __repr__(self):\n")
+                    format = "<%s (%%s) object at 0x%%x>" % (classname)
+                    classes.write("        return \"%s\" %% (self.name, long(pos_id (self)))\n\n" % (
+                                  format))
+            else:
+                txt.write("Class %s()\n" % (classname))
+                classes.write("class %s:\n" % (classname))
+                classes.write("    def __init__(self, _obj=None):\n")
+                if reference_keepers.has_key(classname):
+                    list = reference_keepers[classname]
+                    for ref in list:
+                        classes.write("        self.%s = None\n" % ref[1])
+                classes.write("        if _obj != None:self._o = _obj;return\n")
+                classes.write("        self._o = None\n\n")
+            destruct=None
+            if classes_destructors.has_key(classname):
+                classes.write("    def __del__(self):\n")
+                classes.write("        if self._o != None:\n")
+                classes.write("            libxml2mod.%s(self._o)\n" %
+                              classes_destructors[classname])
+                classes.write("        self._o = None\n\n")
+                destruct=classes_destructors[classname]
+            flist = function_classes[classname]
+            flist.sort(functionCompare)
+            oldfile = ""
+            for info in flist:
+                (index, func, name, ret, args, file) = info
+                #
+                # Do not provide as method the destructors for the class
+                # to avoid double free
+                #
+                if name == destruct:
+                    continue
+                if file != oldfile:
+                    if file == "python_accessor":
+                        classes.write("    # accessors for %s\n" % (classname))
+                        txt.write("    # accessors\n")
+                    else:
+                        classes.write("    #\n")
+                        classes.write("    # %s functions from module %s\n" % (
+                                      classname, file))
+                        txt.write("\n    # functions from module %s\n" % file)
+                        classes.write("    #\n\n")
+                oldfile = file
+                classes.write("    def %s(self" % func)
+                txt.write("    %s()\n" % func)
+                n = 0
+                for arg in args:
+                    if n != index:
+                        classes.write(", %s" % arg[0])
+                    n = n + 1
+                classes.write("):\n")
+                writeDoc(name, args, '        ', classes)
+                n = 0
+                for arg in args:
+                    if classes_type.has_key(arg[1]):
+                        if n != index:
+                            classes.write("        if %s is None: %s__o = None\n" %
+                                          (arg[0], arg[0]))
+                            classes.write("        else: %s__o = %s%s\n" %
+                                          (arg[0], arg[0], classes_type[arg[1]][0]))
+                    n = n + 1
+                if ret[0] != "void":
+                    classes.write("        ret = ")
+                else:
+                    classes.write("        ")
+                classes.write("libxml2mod.%s(" % name)
+                n = 0
+                for arg in args:
+                    if n != 0:
+                        classes.write(", ")
+                    if n != index:
+                        classes.write("%s" % arg[0])
+                        if classes_type.has_key(arg[1]):
+                            classes.write("__o")
+                    else:
+                        classes.write("self")
+                        if classes_type.has_key(arg[1]):
+                            classes.write(classes_type[arg[1]][0])
+                    n = n + 1
+                classes.write(")\n")
+                if ret[0] != "void":
+                    if classes_type.has_key(ret[0]):
+                        #
+                        # Raise an exception
+                        #
+                        if functions_noexcept.has_key(name):
+                            classes.write(
+                                "        if ret is None:return None\n")
+                        elif string.find(name, "URI") >= 0:
+                            classes.write(
+                    "        if ret is None:raise uriError('%s() failed')\n"
+                                          % (name))
+                        elif string.find(name, "XPath") >= 0:
+                            classes.write(
+                    "        if ret is None:raise xpathError('%s() failed')\n"
+                                          % (name))
+                        elif string.find(name, "Parse") >= 0:
+                            classes.write(
+                    "        if ret is None:raise parserError('%s() failed')\n"
+                                          % (name))
+                        else:
+                            classes.write(
+                    "        if ret is None:raise treeError('%s() failed')\n"
+                                          % (name))
 
                         #
-			# Sometime one need to keep references of the source
-			# class in the returned class object.
-			# See reference_keepers for the list
-			#
-			tclass = classes_type[ret[0]][2]
-			if reference_keepers.has_key(tclass):
-			    list = reference_keepers[tclass]
-			    for pref in list:
-				if pref[0] == classname:
-				    classes.write("        __tmp.%s = self\n" %
-						  pref[1])
-			#
-			# return the class
-			#
-			classes.write("        return __tmp\n");
-		    elif converter_type.has_key(ret[0]):
-			#
-			# Raise an exception
-			#
-			if functions_noexcept.has_key(name):
-			    classes.write(
-			        "        if ret is None:return None");
-			elif string.find(name, "URI") >= 0:
-			    classes.write(
-		    "        if ret is None:raise uriError('%s() failed')\n"
-					  % (name))
-			elif string.find(name, "XPath") >= 0:
-			    classes.write(
-		    "        if ret is None:raise xpathError('%s() failed')\n"
-					  % (name))
-			elif string.find(name, "Parse") >= 0:
-			    classes.write(
-		    "        if ret is None:raise parserError('%s() failed')\n"
-					  % (name))
-			else:
-			    classes.write(
-		    "        if ret is None:raise treeError('%s() failed')\n"
-					  % (name))
-			classes.write("        return ");
-			classes.write(converter_type[ret[0]] % ("ret"));
-			classes.write("\n");
-		    else:
-			classes.write("        return ret\n");
-		classes.write("\n");
+                        # generate the returned class wrapper for the object
+                        #
+                        classes.write("        __tmp = ")
+                        classes.write(classes_type[ret[0]][1] % ("ret"))
+                        classes.write("\n")
+
+                        #
+                        # Sometime one need to keep references of the source
+                        # class in the returned class object.
+                        # See reference_keepers for the list
+                        #
+                        tclass = classes_type[ret[0]][2]
+                        if reference_keepers.has_key(tclass):
+                            list = reference_keepers[tclass]
+                            for pref in list:
+                                if pref[0] == classname:
+                                    classes.write("        __tmp.%s = self\n" %
+                                                  pref[1])
+                        #
+                        # return the class
+                        #
+                        classes.write("        return __tmp\n")
+                    elif converter_type.has_key(ret[0]):
+                        #
+                        # Raise an exception
+                        #
+                        if functions_noexcept.has_key(name):
+                            classes.write(
+                                "        if ret is None:return None")
+                        elif string.find(name, "URI") >= 0:
+                            classes.write(
+                    "        if ret is None:raise uriError('%s() failed')\n"
+                                          % (name))
+                        elif string.find(name, "XPath") >= 0:
+                            classes.write(
+                    "        if ret is None:raise xpathError('%s() failed')\n"
+                                          % (name))
+                        elif string.find(name, "Parse") >= 0:
+                            classes.write(
+                    "        if ret is None:raise parserError('%s() failed')\n"
+                                          % (name))
+                        else:
+                            classes.write(
+                    "        if ret is None:raise treeError('%s() failed')\n"
+                                          % (name))
+                        classes.write("        return ")
+                        classes.write(converter_type[ret[0]] % ("ret"))
+                        classes.write("\n")
+                    else:
+                        classes.write("        return ret\n")
+                classes.write("\n")
 
     #
     # Generate enum constants
@@ -1224,7 +1224,7 @@
         items.sort(lambda i1,i2: cmp(long(i1[1]),long(i2[1])))
         for name,value in items:
             classes.write("%s = %s\n" % (name,value))
-        classes.write("\n");
+        classes.write("\n")
 
     txt.close()
     classes.close()

Added: trunk/python/setup.py
==============================================================================
--- (empty file)
+++ trunk/python/setup.py	Tue Jun  3 16:08:54 2008
@@ -0,0 +1,242 @@
+#!/usr/bin/python -u
+#
+# Setup script for libxml2 and libxslt if found
+#
+import sys, os
+from distutils.core import setup, Extension
+
+# Below ROOT, we expect to find include, include/libxml2, lib and bin.
+# On *nix, it is not needed (but should not harm), 
+# on Windows, it is set by configure.js.
+ROOT = r'/usr' 
+
+# Thread-enabled libxml2
+with_threads = 1
+
+# If this flag is set (windows only), 
+# a private copy of the dlls are included in the package.
+# If this flag is not set, the libxml2 and libxslt
+# dlls must be found somewhere in the PATH at runtime.
+WITHDLLS = 1 and sys.platform.startswith('win')
+
+def missing(file):
+    if os.access(file, os.R_OK) == 0:
+        return 1
+    return 0
+
+try:
+    HOME = os.environ['HOME']
+except:
+    HOME="C:"
+
+if WITHDLLS:
+    # libxml dlls (expected in ROOT/bin)
+    dlls = [ 'iconv.dll','libxml2.dll','libxslt.dll','libexslt.dll' ]
+    dlls = map(lambda dll: os.path.join(ROOT,'bin',dll),dlls)
+
+    # create __init__.py for the libxmlmods package
+    if not os.path.exists("libxmlmods"):
+        os.mkdir("libxmlmods")
+        open("libxmlmods/__init__.py","w").close()
+
+    def altImport(s):
+        s = s.replace("import libxml2mod","from libxmlmods import libxml2mod")
+        s = s.replace("import libxsltmod","from libxmlmods import libxsltmod")
+        return s
+
+if sys.platform.startswith('win'):
+    libraryPrefix = 'lib'
+    platformLibs = []
+else:
+    libraryPrefix = ''
+    platformLibs = ["m","z"]
+
+# those are examined to find 
+# - libxml2/libxml/tree.h
+# - iconv.h 
+# - libxslt/xsltconfig.h
+includes_dir = [
+"/usr/include",
+"/usr/local/include",
+"/opt/include",
+os.path.join(ROOT,'include'),
+HOME
+]
+
+xml_includes=""
+for dir in includes_dir:
+    if not missing(dir + "/libxml2/libxml/tree.h"):
+        xml_includes=dir + "/libxml2"
+        break
+
+if xml_includes == "":
+    print "failed to find headers for libxml2: update includes_dir"
+    sys.exit(1)
+
+iconv_includes=""
+for dir in includes_dir:
+    if not missing(dir + "/iconv.h"):
+        iconv_includes=dir
+        break
+
+if iconv_includes == "":
+    print "failed to find headers for libiconv: update includes_dir"
+    sys.exit(1)
+
+# those are added in the linker search path for libraries
+libdirs = [
+os.path.join(ROOT,'lib'),
+]
+
+xml_files = ["libxml2-api.xml", "libxml2-python-api.xml",
+             "libxml.c", "libxml.py", "libxml_wrap.h", "types.c",
+             "xmlgenerator.py", "README", "TODO", "drv_libxml2.py"]
+
+xslt_files = ["libxslt-api.xml", "libxslt-python-api.xml",
+             "libxslt.c", "libxsl.py", "libxslt_wrap.h",
+             "xsltgenerator.py"]
+
+if missing("libxml2-py.c") or missing("libxml2.py"):
+    try:
+        try:
+            import xmlgenerator
+        except:
+            import generator
+    except:
+        print "failed to find and generate stubs for libxml2, aborting ..."
+        print sys.exc_type, sys.exc_value
+        sys.exit(1)
+
+    head = open("libxml.py", "r")
+    generated = open("libxml2class.py", "r")
+    result = open("libxml2.py", "w")
+    for line in head.readlines():
+        if WITHDLLS:
+            result.write(altImport(line))
+        else:
+            result.write(line)
+    for line in generated.readlines():
+        result.write(line)
+    head.close()
+    generated.close()
+    result.close()
+
+with_xslt=0
+if missing("libxslt-py.c") or missing("libxslt.py"):
+    if missing("xsltgenerator.py") or missing("libxslt-api.xml"):
+        print "libxslt stub generator not found, libxslt not built"
+    else:
+        try:
+            import xsltgenerator
+        except:
+            print "failed to generate stubs for libxslt, aborting ..."
+            print sys.exc_type, sys.exc_value
+        else:
+            head = open("libxsl.py", "r")
+            generated = open("libxsltclass.py", "r")
+            result = open("libxslt.py", "w")
+            for line in head.readlines():
+                if WITHDLLS:
+                    result.write(altImport(line))
+                else:
+                    result.write(line)
+            for line in generated.readlines():
+                result.write(line)
+            head.close()
+            generated.close()
+            result.close()
+            with_xslt=1
+else:
+    with_xslt=1
+
+if with_xslt == 1:
+    xslt_includes=""
+    for dir in includes_dir:
+        if not missing(dir + "/libxslt/xsltconfig.h"):
+            xslt_includes=dir + "/libxslt"
+            break
+
+    if xslt_includes == "":
+        print "failed to find headers for libxslt: update includes_dir"
+        with_xslt = 0
+
+
+descr = "libxml2 package"
+modules = [ 'libxml2', 'drv_libxml2' ]
+if WITHDLLS:
+    modules.append('libxmlmods.__init__')
+c_files = ['libxml2-py.c', 'libxml.c', 'types.c' ]
+includes= [xml_includes, iconv_includes]
+libs    = [libraryPrefix + "xml2"] + platformLibs
+macros  = []
+if with_threads:
+    macros.append(('_REENTRANT','1'))
+if with_xslt == 1:
+    descr = "libxml2 and libxslt package"
+    if not sys.platform.startswith('win'):
+        #
+        # We are gonna build 2 identical shared libs with merge initializing
+        # both libxml2mod and libxsltmod
+        #
+        c_files = c_files + ['libxslt-py.c', 'libxslt.c']
+        xslt_c_files = c_files
+        macros.append(('MERGED_MODULES', '1'))
+    else:
+        #
+        # On windows the MERGED_MODULE option is not needed
+        # (and does not work)
+        #
+        xslt_c_files = ['libxslt-py.c', 'libxslt.c', 'types.c']
+    libs.insert(0, libraryPrefix + 'exslt')
+    libs.insert(0, libraryPrefix + 'xslt')
+    includes.append(xslt_includes)
+    modules.append('libxslt')
+
+
+extens=[Extension('libxml2mod', c_files, include_dirs=includes,
+                  library_dirs=libdirs, 
+                  libraries=libs, define_macros=macros)] 
+if with_xslt == 1:
+    extens.append(Extension('libxsltmod', xslt_c_files, include_dirs=includes,
+                            library_dirs=libdirs, 
+                            libraries=libs, define_macros=macros))
+
+if missing("MANIFEST"):
+
+    manifest = open("MANIFEST", "w")
+    manifest.write("setup.py\n")
+    for file in xml_files:
+        manifest.write(file + "\n")
+    if with_xslt == 1:
+        for file in xslt_files:
+            manifest.write(file + "\n")
+    manifest.close()
+
+if WITHDLLS:
+    ext_package = "libxmlmods"
+    if sys.version >= "2.2":
+        base = "lib/site-packages/"
+    else:
+        base = ""
+    data_files = [(base+"libxmlmods",dlls)]
+else:
+    ext_package = None
+    data_files = []
+
+setup (name = "libxml2-python",
+       # On *nix, the version number is created from setup.py.in
+       # On windows, it is set by configure.js
+       version = "2.6.32",
+       description = descr,
+       author = "Daniel Veillard",
+       author_email = "veillard redhat com",
+       url = "http://xmlsoft.org/python.html";,
+       licence="MIT Licence",
+       py_modules=modules,
+       ext_modules=extens,
+       ext_package=ext_package,
+       data_files=data_files,
+       )
+
+sys.exit(0)
+



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]