19317151 libxml2 needs Python 3 module
authorJohn Beck <John.Beck@Oracle.COM>
Wed, 30 Jul 2014 16:12:03 -0700
changeset 2032 916ced318d1e
parent 2031 5b9a9cd91149
child 2033 fe424cca0a17
19317151 libxml2 needs Python 3 module
components/libxml2/Makefile
components/libxml2/libxml2-34.p5m
components/libxml2/patches/python-dictionary.patch
components/libxml2/patches/python34.patch
components/libxml2/resolve.deps
make-rules/shared-macros.mk
--- a/components/libxml2/Makefile	Wed Aug 06 10:27:03 2014 -0600
+++ b/components/libxml2/Makefile	Wed Jul 30 16:12:03 2014 -0700
@@ -63,27 +63,49 @@
 
 COMPONENT_PREP_ACTION += (cd $(@D) ; cp ../mapfile libxml2.syms ; autoreconf -if)
 
-# After we have configured, make a copy of the python bits so we
-# can build and test separate python 2.7 support.
-COMPONENT_POST_CONFIGURE_ACTION = (cd $(@D) ; cp -rp python python2.7 ; \
-    $(GSED) -i -e 's/2[.]6/2.7/g' `find python2.7 -name Makefile`)
+# After we have configured, make a copy of the python bits so we can build and
+# test separate python 2.7 and 3.4 support.  Note for 3.4: .py files need to
+# go in .../vendor-packages (whether building 32-bit or 64-bit) whereas .so
+# files need to go in .../vendor-packages for 32-bit but .../vendor-packages/64
+# for 64-bit.  For 2.6 and 2.7, Python is built 32- and 64-bit, so .py files
+# end up in both places even though only the 32-bit location is needed, but the
+# superfluous files in the proto area are harmless; meanwhile, the .so files
+# end up in their proper 32- and 64-bit locations.  But Python 3.4 is built
+# 64-bit only, so we have an extra sed edit below to force the .py files into
+# the 32-bit location and we manually specify the 32-bit path in the manifest
+# to correct for the .so file being installed there instead of the 64-bit path
+# where it belongs.
+COMPONENT_POST_CONFIGURE_ACTION = \
+    (cd $(@D) ; cp -rp python python2.7 ; \
+    $(GSED) -i -e 's/2[.]6/2.7/g' `find python2.7 -name Makefile` ; \
+     cd $(@D) ; cp -rp python python3.4 ; \
+    $(GSED) -i -e 's/2[.]6/3.4/g' -e 's|vendor-packages/64|vendor-packages|' \
+     `find python3.4 -name Makefile` ; \
+)
 
 # After we have built/installed libxml2, build/install the python
-# support for python 2.7
+# support for python 2.7 and 3.4
 COMPONENT_POST_INSTALL_ACTION = \
-    (cd $(@D)/python2.7 ; $(GMAKE) $(COMPONENT_INSTALL_ARGS) install)
+    (cd $(@D)/python2.7 ; $(GMAKE) $(COMPONENT_INSTALL_ARGS) install ; \
+     [ $(BITS) -eq 64 ] && cd $(@D)/python3.4 ; \
+     $(GMAKE) $(COMPONENT_INSTALL_ARGS) install)
 
-# It's nice to test also python 2.7 module.
+# It's nice to test also python 2.7 and 3.4 modules.
 COMPONENT_POST_TEST_ACTION = \
-    (cd $(@D)/python2.7 ; $(GMAKE) $(COMPONENT_TEST_ARGS) test)
+    (cd $(@D)/python2.7 ; $(GMAKE) $(COMPONENT_TEST_ARGS) test ; \
+     [ $(BITS) -eq 64 ] && cd $(@D)/python3.4 ; \
+     $(GMAKE) $(COMPONENT_TEST_ARGS) test)
 
 # We have patched our 64 bit python so it will search for modules only in
 # '64/' directories. Now we need to provide one. Otherwise python will
 # end up using libxml2mod.so installed on system.
 $(BUILD_DIR)/$(MACH64)/.tested: COMPONENT_PRE_TEST_ACTION = ( \
-    $(MKDIR) $(@D)/python/.libs/64 $(@D)/python2.7/.libs/64; \
+    $(MKDIR) $(@D)/python/.libs/64 \
+             $(@D)/python2.7/.libs/64 \
+             $(@D)/python3.4/.libs/64; \
     $(SYMLINK) ../libxml2mod.so $(@D)/python/.libs/64/libxml2mod.so; \
-    $(SYMLINK) ../libxml2mod.so $(@D)/python2.7/.libs/64/libxml2mod.so);
+    $(SYMLINK) ../libxml2mod.so $(@D)/python2.7/.libs/64/libxml2mod.so; \
+    $(SYMLINK) ../libxml2mod.so $(@D)/python3.4/.libs/64/libxml2mod.so);
 
 COMPONENT_PRE_TEST_ACTION += \
     (cd $(@D) ; gtar xf $(COMPONENT_DIR)/$(COMPONENT_ARCHIVE_1));
@@ -94,6 +116,7 @@
 install:	$(INSTALL_32_and_64)
 	$(PYTHON.2.6.32) -m compileall $(PROTO_DIR)/usr/lib/python2.6/vendor-packages
 	$(PYTHON.2.7.32) -m compileall $(PROTO_DIR)/usr/lib/python2.7/vendor-packages
+	$(PYTHON.3.4.64) -m compileall $(PROTO_DIR)/usr/lib/python3.4/vendor-packages
 
 test:		$(TEST_32_and_64)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/libxml2/libxml2-34.p5m	Wed Jul 30 16:12:03 2014 -0700
@@ -0,0 +1,39 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/libxml2-34@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="The XML library - Python 3.4 bindings"
+set name=com.oracle.info.description value="Python 3.4 bindings for the XML library"
+set name=com.oracle.info.tpno value=$(TPNO)
+set name=info.classification \
+    value=org.opensolaris.category.2008:Development/Python
+set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=org.opensolaris.arc-caseid \
+    value=PSARC/2009/630
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+file usr/lib/python3.4/vendor-packages/libxml2mod.so path=usr/lib/python3.4/vendor-packages/64/libxml2mod.so
+file path=usr/lib/python3.4/vendor-packages/drv_libxml2.py
+file path=usr/lib/python3.4/vendor-packages/libxml2.py
+license libxml2.license license="libxml license"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/libxml2/patches/python-dictionary.patch	Wed Jul 30 16:12:03 2014 -0700
@@ -0,0 +1,86 @@
+# This patch has been submitted upstream but not yet accepted:
+# https://bugzilla.gnome.org/show_bug.cgi?id=734017
+
+--- libxml2-2.9.1/python/tests/sync.py~	2013-03-30 07:34:34.000000000 -0700
++++ libxml2-2.9.1/python/tests/sync.py	2014-07-30 14:27:54.057901481 -0700
+@@ -51,7 +51,7 @@
+ reference = "startDocument:startElement foo None:startElement bar2 None:endElement bar2:"
+ if log != reference:
+     print("Error got: %s" % log)
+-    print("Exprected: %s" % reference)
++    print("Expected: %s" % reference)
+     sys.exit(1)
+ 
+ log=""
+@@ -63,7 +63,7 @@
+ reference = "startDocument:startElement foo None:startElement bar2 None:endElement bar2:"
+ if log != reference:
+     print("Error got: %s" % log)
+-    print("Exprected: %s" % reference)
++    print("Expected: %s" % reference)
+     sys.exit(1)
+ 
+ log=""
+@@ -75,7 +75,7 @@
+ reference = "startDocument:startElement foo None:startElement bar2 None:"
+ if log != reference:
+     print("Error got: %s" % log)
+-    print("Exprected: %s" % reference)
++    print("Expected: %s" % reference)
+     sys.exit(1)
+ 
+ log=""
+@@ -84,10 +84,11 @@
+ ctxt.parseChunk(chunk, len(chunk), 0)
+ ctxt=None
+ 
+-reference = "startDocument:startElement foo None:startElement bar2 {'a': '1', 'b': '2'}:endElement bar2:"
+-if log != reference:
++reference1 = "startDocument:startElement foo None:startElement bar2 {'a': '1', 'b': '2'}:endElement bar2:"
++reference2 = "startDocument:startElement foo None:startElement bar2 {'b': '2', 'a': '1'}:endElement bar2:"
++if log not in (reference1, reference2):
+     print("Error got: %s" % log)
+-    print("Exprected: %s" % reference)
++    print("Expected: %s" % reference)
+     sys.exit(1)
+ 
+ log=""
+@@ -96,10 +97,11 @@
+ ctxt.parseChunk(chunk, len(chunk), 0)
+ ctxt=None
+ 
+-reference = "startDocument:startElement foo None:startElement bar2 {'a': '1', 'b': '2'}:"
+-if log != reference:
++reference1 = "startDocument:startElement foo None:startElement bar2 {'a': '1', 'b': '2'}:"
++reference2 = "startDocument:startElement foo None:startElement bar2 {'b': '2', 'a': '1'}:"
++if log not in (reference1, reference2):
+     print("Error got: %s" % log)
+-    print("Exprected: %s" % reference)
++    print("Expected: %s" % reference)
+     sys.exit(1)
+ 
+ log=""
+@@ -108,10 +110,11 @@
+ ctxt.parseChunk(chunk, len(chunk), 0)
+ ctxt=None
+ 
+-reference = "startDocument:startElement foo None:startElement bar2 {'a': '1', 'b': '2'}:endElement bar2:"
+-if log != reference:
++reference1 = "startDocument:startElement foo None:startElement bar2 {'a': '1', 'b': '2'}:endElement bar2:"
++reference2 = "startDocument:startElement foo None:startElement bar2 {'b': '2', 'a': '1'}:endElement bar2:"
++if log not in (reference1, reference2):
+     print("Error got: %s" % log)
+-    print("Exprected: %s" % reference)
++    print("Expected: %s" % reference)
+     sys.exit(1)
+ 
+ log=""
+@@ -123,7 +126,7 @@
+ reference = "startDocument:startElement foo None:"
+ if log != reference:
+     print("Error got: %s" % log)
+-    print("Exprected: %s" % reference)
++    print("Expected: %s" % reference)
+     sys.exit(1)
+ 
+ # Memory debug specific
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/libxml2/patches/python34.patch	Wed Jul 30 16:12:03 2014 -0700
@@ -0,0 +1,28 @@
+# This patch has been submitted upstream but not yet accepted:
+# https://bugzilla.gnome.org/show_bug.cgi?id=734005
+
+--- libxml2-2.9.1/python/drv_libxml2.py.~1~	2009-07-30 08:24:34.000000000 -0700
++++ libxml2-2.9.1/python/drv_libxml2.py	2014-07-30 10:43:36.655237802 -0700
+@@ -38,8 +38,11 @@
+ __version__ = "0.3"
+ 
+ import codecs
+-from types import StringType, UnicodeType
+-StringTypes = (StringType,UnicodeType)
++try:
++    from types import StringType, UnicodeType
++    StringTypes = (StringType,UnicodeType)
++except:
++    StringTypes = (bytes,str)
+ 
+ from xml.sax._exceptions import *
+ from xml.sax import xmlreader, saxutils
+@@ -65,7 +68,7 @@
+ 
+ try:
+     import libxml2
+-except ImportError, e:
++except ImportError as e:
+     raise SAXReaderNotAvailable("libxml2 not available: " \
+                                 "import error was: %s" % e)
+ 
--- a/components/libxml2/resolve.deps	Wed Aug 06 10:27:03 2014 -0600
+++ b/components/libxml2/resolve.deps	Wed Jul 30 16:12:03 2014 -0700
@@ -2,6 +2,7 @@
 library/zlib
 runtime/python-26
 runtime/python-27
+runtime/python-34
 shell/ksh93
 system/library
 system/library/math
--- a/make-rules/shared-macros.mk	Wed Aug 06 10:27:03 2014 -0600
+++ b/make-rules/shared-macros.mk	Wed Jul 30 16:12:03 2014 -0700
@@ -204,6 +204,7 @@
 
 CONFIGURE_32 =		$(BUILD_DIR_32)/.configured
 CONFIGURE_64 =		$(BUILD_DIR_64)/.configured
+CONFIGURE_32_and_64 =	$(CONFIGURE_32) $(CONFIGURE_64)
 
 BUILD_DIR_32 =		$(BUILD_DIR)/$(MACH32)
 BUILD_DIR_64 =		$(BUILD_DIR)/$(MACH64)