19492342 Python 3.4 should be built --with-pymalloc
authorJohn Beck <John.Beck@Oracle.COM>
Wed, 27 Aug 2014 09:04:47 -0700
changeset 2060 a9ad5cd0ec29
parent 2059 da41cc055371
child 2061 e020c1221cec
19492342 Python 3.4 should be built --with-pymalloc
components/libxml2/Makefile
components/python/pep8/pep8-PYVER.p5m
components/python/prettytable/prettytable-PYVER.p5m
components/python/pytest/pytest-PYVER.p5m
components/python/python34/Makefile
components/python/python34/patches/06-solaris-64-bit.patch
components/python/python34/patches/12-py_db.patch
components/python/python34/patches/18-pymalloc.patch
components/python/python34/patches/19-SOABI.patch
components/python/python34/python-34.p5m
components/python/python34/tkinter-34.p5m
components/python/websockify/websockify-PYVER.p5m
components/python/xattr/xattr-PYVER.p5m
make-rules/ips.mk
make-rules/shared-macros.mk
transforms/python-3-soabi
--- a/components/libxml2/Makefile	Wed Aug 27 02:02:25 2014 -0700
+++ b/components/libxml2/Makefile	Wed Aug 27 09:04:47 2014 -0700
@@ -74,12 +74,16 @@
 # 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.
+# where it belongs.  Further, Python 3.4 needs an extra 'm' on the link and
+# include paths, plus a tweak to the binary path; see PEP 3149 for details.
 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|' \
+    $(GSED) -i -e 's|-lpython2[.]6|-lpython3.4m|' \
+     -e 's|usr/bin/$(MACH64)/python2[.]6|usr/bin/python3.4m|' \
+     -e 's|usr/include/python2[.]6|usr/include/python3.4m|' \
+     -e 's/2[.]6/3.4/g' -e 's|vendor-packages/64|vendor-packages|' \
      `find python3.4 -name Makefile` ; \
 )
 
--- a/components/python/pep8/pep8-PYVER.p5m	Wed Aug 27 02:02:25 2014 -0700
+++ b/components/python/pep8/pep8-PYVER.p5m	Wed Aug 27 09:04:47 2014 -0700
@@ -47,9 +47,12 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/pep8-$(COMPONENT_VERSION)-py$(PYVER).egg-info/namespace_packages.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/pep8-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
 file path=usr/lib/python$(PYVER)/vendor-packages/pep8-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+# The bypass for time is temporary until pkgdepend learns about PEP 3149,
+# new in Python 3.x; see 19510349.
 file path=usr/lib/python$(PYVER)/vendor-packages/pep8.py \
     pkg.depend.bypass-generate=.*/[Cc]onfig[Pp]arser.* \
-    pkg.depend.bypass-generate=.*/testsuite.*
+    pkg.depend.bypass-generate=.*/testsuite.* \
+    pkg.depend.bypass-generate=.*/time.*
 file usr/share/man/man1/pep8.1 path=usr/share/man/man1/pep8-$(PYVER).1
 link path=usr/share/man/man1/pep8.1 target=pep8-$(PYVER).1 mediator=python \
     mediator-version=$(PYVER)
--- a/components/python/prettytable/prettytable-PYVER.p5m	Wed Aug 27 02:02:25 2014 -0700
+++ b/components/python/prettytable/prettytable-PYVER.p5m	Wed Aug 27 09:04:47 2014 -0700
@@ -42,8 +42,11 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/prettytable-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 # Python 2.x & 3.x, import "html" modules with slightly different syntax:
 # 2.x uses lower-case; 3.x uses upper-case; hence the expression below.
+# The bypass for unicodedata is temporary until pkgdepend learns about PEP
+# 3149, new in Python 3.x; see 19510349.
 file path=usr/lib/python$(PYVER)/vendor-packages/prettytable.py \
-    pkg.depend.bypass-generate=.*[Hh][Tt][Mm][Ll].*
+    pkg.depend.bypass-generate=.*[Hh][Tt][Mm][Ll].* \
+    pkg.depend.bypass-generate=.*unicodedata.*
 license prettytable.license license=BSD
 
 # force the rename with an optional dependency on the old name
--- a/components/python/pytest/pytest-PYVER.p5m	Wed Aug 27 02:02:25 2014 -0700
+++ b/components/python/pytest/pytest-PYVER.p5m	Wed Aug 27 09:04:47 2014 -0700
@@ -68,8 +68,11 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/_pytest/skipping.py
 # Python 3 has pickle instead of cPickle. The code is written properly, but
 # pkgdepend is not (yet) smart enough to grok the difference; see 18697587.
+# The bypass for zlib is temporary until pkgdepend learns about PEP 3149,
+# new in Python 3.x; see 19510349.
 file path=usr/lib/python$(PYVER)/vendor-packages/_pytest/standalonetemplate.py \
-    pkg.depend.bypass-generate=.*cPickle.*
+    pkg.depend.bypass-generate=.*cPickle.* \
+    pkg.depend.bypass-generate=.*zlib.*
 file path=usr/lib/python$(PYVER)/vendor-packages/_pytest/terminal.py
 file path=usr/lib/python$(PYVER)/vendor-packages/_pytest/tmpdir.py
 file path=usr/lib/python$(PYVER)/vendor-packages/_pytest/unittest.py
--- a/components/python/python34/Makefile	Wed Aug 27 02:02:25 2014 -0700
+++ b/components/python/python34/Makefile	Wed Aug 27 09:04:47 2014 -0700
@@ -101,9 +101,6 @@
 CONFIGURE_OPTIONS  +=		--with-system-expat
 CONFIGURE_OPTIONS  +=		--with-system-ffi
 CONFIGURE_OPTIONS  +=		--without-gcc
-# Building with pymalloc is the default, but that causes core dumps;
-# see http://bugs.python.org/issue21412 for details.
-CONFIGURE_OPTIONS  +=		--without-pymalloc
 CONFIGURE_OPTIONS  +=		--without-ensurepip
 CONFIGURE_OPTIONS  +=		--enable-ipv6
 CONFIGURE_OPTIONS  +=		CPPFLAGS="$(CPPFLAGS)"
--- a/components/python/python34/patches/06-solaris-64-bit.patch	Wed Aug 27 02:02:25 2014 -0700
+++ b/components/python/python34/patches/06-solaris-64-bit.patch	Wed Aug 27 09:04:47 2014 -0700
@@ -125,15 +125,15 @@
                           sysconfig.get_config_var('CC'))
  
 --- Python-3.4.1/Lib/importlib/_bootstrap.py.~1~	2014-05-18 22:19:38.000000000 -0700
-+++ Python-3.4.1/Lib/importlib/_bootstrap.py	2014-08-06 08:37:18.145242823 -0700
++++ Python-3.4.1/Lib/importlib/_bootstrap.py	2014-08-27 08:46:00.145242823 -0700
 @@ -2046,6 +2046,15 @@
                  is_namespace = _path_isdir(base_path)
          # Check for a file w/ a proper suffix exists.
          for suffix, loader_class in self._loaders:
 +            message = 'checking {!r}: {!r}'.format(self.path, suffix)
 +            _verbose_message(message, verbosity=2)
-+            # If in 64-bit mode, append /64 to the path.
-+            if suffix == '.so' and sys.maxsize != 2 ** 31 - 1:
++            # If in 64-bit mode, append /64 to the path for .so files.
++            if suffix.endswith('.so') and sys.maxsize != 2 ** 31 - 1:
 +                full_path = _path_join(self.path, '64', tail_module + suffix)
 +                _verbose_message('trying {}'.format(full_path), verbosity=2)
 +                if _path_isfile(full_path):
--- a/components/python/python34/patches/12-py_db.patch	Wed Aug 27 02:02:25 2014 -0700
+++ b/components/python/python34/patches/12-py_db.patch	Wed Aug 27 09:04:47 2014 -0700
@@ -18,16 +18,16 @@
  
 +SHLIB_FLAGS = -shared -fpic
 +
-+libpython3.4_db.so.1.0:        $(srcdir)/py_db/libpython34_db.c
++libpython$(LDVERSION)_db.so.1.0:        $(srcdir)/py_db/libpython34_db.c
 +	$(CC) -o [email protected] $(CFLAGS) $(PY_CPPFLAGS) $(CPPFLAGS) $(SHLIB_FLAGS) $<
 +
 +check_offset:  $(srcdir)/py_db/check_offsets.c
 +	$(CC) -o [email protected] $(CFLAGS) $(PY_CPPFLAGS) $(CPPFLAGS) $<
 +
-+build-py_db:   libpython3.4_db.so.1.0 check_offset
++build-py_db:   libpython$(LDVERSION)_db.so.1.0 check_offset
 +
-+install-py_db: libpython3.4_db.so.1.0 check_offset
-+	$(INSTALL_SHARED) libpython3.4_db.so.1.0 $(DESTDIR)$(LIBDIR)
++install-py_db: libpython$(LDVERSION)_db.so.1.0 check_offset
++	$(INSTALL_SHARED) libpython$(LDVERSION)_db.so.1.0 $(DESTDIR)$(LIBDIR)
 +	$(INSTALL_PROGRAM) check_offset $(DESTDIR)$(BINDIR)
  
  Modules/Setup: $(srcdir)/Modules/Setup.dist
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python34/patches/18-pymalloc.patch	Wed Aug 27 09:04:47 2014 -0700
@@ -0,0 +1,45 @@
+This patch comes from upstream; it will likely no longer be needed whenever
+Python 3.4.2 becomes available.
+
+# HG changeset patch
+# Parent 7fafbb7e1a8fbcb8875e25d8cd07273069127556
+Issue #21166: Prevent possible segfaults and other random failures of
+python --generate-posix-vars in pybuilddir.txt build target by ensuring
+that pybuilddir.txt is always regenerated when configure is run and
+that the newly built skeleton python does not inadvertently import
+modules from previously installed instances.
+
+--- Python-3.4.1/Makefile.pre.in	Mon Aug 11 15:01:28 2014 -0500
++++ Python-3.4.1/Makefile.pre.in	Mon Aug 11 18:16:56 2014 -0700
[email protected]@ -557,8 +557,18 @@
+ # Create build directory and generate the sysconfig build-time data there.
+ # pybuilddir.txt contains the name of the build dir and is used for
+ # sys.path fixup -- see Modules/getpath.c.
++# Since this step runs before shared modules are built, try to avoid bootstrap
++# problems by creating a dummy pybuildstr.txt just to allow interpreter
++# initialization to succeed.  It will be overwritten by generate-posix-vars
++# or removed in case of failure.
+ pybuilddir.txt: $(BUILDPYTHON)
+-	$(RUNSHARED) $(PYTHON_FOR_BUILD) -S -m sysconfig --generate-posix-vars
++	@echo "none" > ./pybuilddir.txt
++	$(RUNSHARED) $(PYTHON_FOR_BUILD) -S -m sysconfig --generate-posix-vars ;\
++	if test $$? -ne 0 ; then \
++		echo "generate-posix-vars failed" ; \
++		rm -f ./pybuilddir.txt ; \
++		exit 1 ; \
++	fi
+ 
+ # Build the shared modules
+ # Under GNU make, MAKEFLAGS are sorted and normalized; the 's' for
+--- Python-3.4.1/configure.ac	Mon Aug 11 15:01:28 2014 -0500
++++ Python-3.4.1/configure.ac	Mon Aug 11 18:16:56 2014 -0700
[email protected]@ -53,6 +53,9 @@
+ AC_SUBST(build)
+ AC_SUBST(host)
+ 
++# pybuilddir.txt will be created by --generate-posix-vars in the Makefile
++rm -f pybuilddir.txt
++
+ if test "$cross_compiling" = yes; then
+     AC_MSG_CHECKING([for python interpreter for cross build])
+     if test -z "$PYTHON_FOR_BUILD"; then
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/python34/patches/19-SOABI.patch	Wed Aug 27 09:04:47 2014 -0700
@@ -0,0 +1,14 @@
+This patch was developed in-house.  We have not yet decided whether to offer
+it upstream or not.
+
+--- Python-3.4.1/configure.ac.~4~	2014-08-19 14:56:06.370409509 -0700
++++ Python-3.4.1/configure.ac	2014-08-19 14:56:45.423571774 -0700
[email protected]@ -4129,7 +4129,7 @@
+ 
+ AC_SUBST(EXT_SUFFIX)
+ case $ac_sys_system in
+-    Linux*|GNU*)
++    Linux*|GNU*|SunOS)
+ 	EXT_SUFFIX=.${SOABI}${SHLIB_SUFFIX};;
+     *)
+ 	EXT_SUFFIX=${SHLIB_SUFFIX};;
--- a/components/python/python34/python-34.p5m	Wed Aug 27 02:02:25 2014 -0700
+++ b/components/python/python34/python-34.p5m	Wed Aug 27 09:04:47 2014 -0700
@@ -46,133 +46,123 @@
     value=PSARC/2009/529 value=PSARC/2013/235 value=PSARC/2014/151
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
 #
-link path=usr/bin/$(MACH64)/2to3 target=2to3-3.4 mediator=python \
-    mediator-version=3.4
-file path=usr/bin/$(MACH64)/2to3-3.4
-link path=usr/bin/$(MACH64)/idle3 target=idle3.4 mediator=python \
-    mediator-version=3.4
-file path=usr/bin/$(MACH64)/idle3.4
-link path=usr/bin/$(MACH64)/pydoc3 target=pydoc3.4 mediator=python \
-    mediator-version=3.4
-file path=usr/bin/$(MACH64)/pydoc3.4
-link path=usr/bin/$(MACH64)/python3-config target=python3.4-config \
-    mediator=python mediator-version=3.4
-file path=usr/bin/$(MACH64)/python3.4
-file path=usr/bin/$(MACH64)/python3.4-config
-link path=usr/bin/$(MACH64)/pyvenv target=pyvenv-3.4 mediator=python \
-    mediator-version=3.4
-file path=usr/bin/$(MACH64)/pyvenv-3.4
 link path=usr/bin/2to3 target=2to3-3.4 mediator=python mediator-version=3.4
-link path=usr/bin/2to3-3.4 target=$(MACH64)/2to3-3.4
-link path=usr/bin/idle3 target=idle3.4 mediator=python mediator-version=3.4
-link path=usr/bin/idle3.4 target=$(MACH64)/idle3.4
-link path=usr/bin/pydoc3 target=pydoc3.4 mediator=python mediator-version=3.4
-link path=usr/bin/pydoc3.4 target=$(MACH64)/pydoc3.4
-link path=usr/bin/python3-config target=python3.4-config mediator=python \
+file usr/bin/$(MACH64)/2to3-3.4 path=usr/bin/2to3-3.4
+link path=usr/bin/idle target=idle3.4 mediator=python mediator-version=3.4
+file usr/bin/$(MACH64)/idle3.4 path=usr/bin/idle3.4
+link path=usr/bin/pydoc target=pydoc3.4 mediator=python mediator-version=3.4
+file usr/bin/$(MACH64)/pydoc3.4 path=usr/bin/pydoc3.4
+link path=usr/bin/python target=python3.4 mediator=python mediator-version=3.4
+link path=usr/bin/python-config target=python3.4-config mediator=python \
     mediator-version=3.4
-link path=usr/bin/python3.4 target=$(MACH64)/python3.4
-link path=usr/bin/python3.4-config target=$(MACH64)/python3.4-config
-link path=usr/bin/pyvenv target=pyvenv-3.4 mediator=python mediator-version=3.4
-link path=usr/bin/pyvenv-3.4 target=$(MACH64)/pyvenv-3.4
-file path=usr/include/python3.4/Python-ast.h
-file path=usr/include/python3.4/Python.h
-file path=usr/include/python3.4/abstract.h
-file path=usr/include/python3.4/accu.h
-file path=usr/include/python3.4/asdl.h
-file path=usr/include/python3.4/ast.h
-file path=usr/include/python3.4/bitset.h
-file path=usr/include/python3.4/bltinmodule.h
-file path=usr/include/python3.4/boolobject.h
-file path=usr/include/python3.4/bytearrayobject.h
-file path=usr/include/python3.4/bytes_methods.h
-file path=usr/include/python3.4/bytesobject.h
-file path=usr/include/python3.4/cellobject.h
-file path=usr/include/python3.4/ceval.h
-file path=usr/include/python3.4/classobject.h
-file path=usr/include/python3.4/code.h
-file path=usr/include/python3.4/codecs.h
-file path=usr/include/python3.4/compile.h
-file path=usr/include/python3.4/complexobject.h
-file path=usr/include/python3.4/datetime.h
-file path=usr/include/python3.4/descrobject.h
-file path=usr/include/python3.4/dictobject.h
-file path=usr/include/python3.4/dtoa.h
-file path=usr/include/python3.4/dynamic_annotations.h
-file path=usr/include/python3.4/enumobject.h
-file path=usr/include/python3.4/errcode.h
-file path=usr/include/python3.4/eval.h
-file path=usr/include/python3.4/fileobject.h
-file path=usr/include/python3.4/fileutils.h
-file path=usr/include/python3.4/floatobject.h
-file path=usr/include/python3.4/frameobject.h
-file path=usr/include/python3.4/funcobject.h
-file path=usr/include/python3.4/genobject.h
-file path=usr/include/python3.4/graminit.h
-file path=usr/include/python3.4/grammar.h
-file path=usr/include/python3.4/import.h
-file path=usr/include/python3.4/intrcheck.h
-file path=usr/include/python3.4/iterobject.h
-file path=usr/include/python3.4/listobject.h
-file path=usr/include/python3.4/longintrepr.h
-file path=usr/include/python3.4/longobject.h
-file path=usr/include/python3.4/marshal.h
-file path=usr/include/python3.4/memoryobject.h
-file path=usr/include/python3.4/metagrammar.h
-file path=usr/include/python3.4/methodobject.h
-file path=usr/include/python3.4/modsupport.h
-file path=usr/include/python3.4/moduleobject.h
-file path=usr/include/python3.4/namespaceobject.h
-file path=usr/include/python3.4/node.h
-file path=usr/include/python3.4/object.h
-file path=usr/include/python3.4/objimpl.h
-file path=usr/include/python3.4/opcode.h
-file path=usr/include/python3.4/osdefs.h
-file path=usr/include/python3.4/parsetok.h
-file path=usr/include/python3.4/patchlevel.h
-file path=usr/include/python3.4/pgen.h
-file path=usr/include/python3.4/pgenheaders.h
-file path=usr/include/python3.4/py_curses.h
-file path=usr/include/python3.4/pyarena.h
-file path=usr/include/python3.4/pyatomic.h
-file path=usr/include/python3.4/pycapsule.h
-file path=usr/include/python3.4/pyconfig.h
-file path=usr/include/python3.4/pyctype.h
-file path=usr/include/python3.4/pydebug.h
-file path=usr/include/python3.4/pyerrors.h
-file path=usr/include/python3.4/pyexpat.h
-file path=usr/include/python3.4/pyfpe.h
-file path=usr/include/python3.4/pygetopt.h
-file path=usr/include/python3.4/pyhash.h
-file path=usr/include/python3.4/pymacconfig.h
-file path=usr/include/python3.4/pymacro.h
-file path=usr/include/python3.4/pymath.h
-file path=usr/include/python3.4/pymem.h
-file path=usr/include/python3.4/pyport.h
-file path=usr/include/python3.4/pystate.h
-file path=usr/include/python3.4/pystrcmp.h
-file path=usr/include/python3.4/pystrtod.h
-file path=usr/include/python3.4/pythonrun.h
-file path=usr/include/python3.4/pythread.h
-file path=usr/include/python3.4/pytime.h
-file path=usr/include/python3.4/rangeobject.h
-file path=usr/include/python3.4/setobject.h
-file path=usr/include/python3.4/sliceobject.h
-file path=usr/include/python3.4/structmember.h
-file path=usr/include/python3.4/structseq.h
-file path=usr/include/python3.4/symtable.h
-file path=usr/include/python3.4/sysmodule.h
-file path=usr/include/python3.4/token.h
-file path=usr/include/python3.4/traceback.h
-file path=usr/include/python3.4/tupleobject.h
-file path=usr/include/python3.4/typeslots.h
-file path=usr/include/python3.4/ucnhash.h
-file path=usr/include/python3.4/unicodeobject.h
-file path=usr/include/python3.4/warnings.h
-file path=usr/include/python3.4/weakrefobject.h
-link path=usr/lib/$(MACH64)/libpython3.4.so target=libpython3.4.so.1.0
-file path=usr/lib/$(MACH64)/libpython3.4.so.1.0
-link path=usr/lib/$(MACH64)/libpython3.4_db.so target=libpython3.4_db.so.1.0
-file path=usr/lib/$(MACH64)/libpython3.4_db.so.1.0
+hardlink path=usr/bin/python3.4 target=python3.4m
+file usr/bin/$(MACH64)/python3.4m path=usr/bin/python3.4m
+link path=usr/bin/python3.4-config target=python3.4m-config
+file usr/bin/$(MACH64)/python3.4m-config path=usr/bin/python3.4m-config
+# pyvenv is new in 3.x, so no need for a mediator now, but one will be needed
+# when we add 3.5 .
+link path=usr/bin/pyvenv target=pyvenv-3.4
+file usr/bin/$(MACH64)/pyvenv-3.4 path=usr/bin/pyvenv-3.4
+#
+file path=usr/include/python3.4m/Python-ast.h
+file path=usr/include/python3.4m/Python.h
+file path=usr/include/python3.4m/abstract.h
+file path=usr/include/python3.4m/accu.h
+file path=usr/include/python3.4m/asdl.h
+file path=usr/include/python3.4m/ast.h
+file path=usr/include/python3.4m/bitset.h
+file path=usr/include/python3.4m/bltinmodule.h
+file path=usr/include/python3.4m/boolobject.h
+file path=usr/include/python3.4m/bytearrayobject.h
+file path=usr/include/python3.4m/bytes_methods.h
+file path=usr/include/python3.4m/bytesobject.h
+file path=usr/include/python3.4m/cellobject.h
+file path=usr/include/python3.4m/ceval.h
+file path=usr/include/python3.4m/classobject.h
+file path=usr/include/python3.4m/code.h
+file path=usr/include/python3.4m/codecs.h
+file path=usr/include/python3.4m/compile.h
+file path=usr/include/python3.4m/complexobject.h
+file path=usr/include/python3.4m/datetime.h
+file path=usr/include/python3.4m/descrobject.h
+file path=usr/include/python3.4m/dictobject.h
+file path=usr/include/python3.4m/dtoa.h
+file path=usr/include/python3.4m/dynamic_annotations.h
+file path=usr/include/python3.4m/enumobject.h
+file path=usr/include/python3.4m/errcode.h
+file path=usr/include/python3.4m/eval.h
+file path=usr/include/python3.4m/fileobject.h
+file path=usr/include/python3.4m/fileutils.h
+file path=usr/include/python3.4m/floatobject.h
+file path=usr/include/python3.4m/frameobject.h
+file path=usr/include/python3.4m/funcobject.h
+file path=usr/include/python3.4m/genobject.h
+file path=usr/include/python3.4m/graminit.h
+file path=usr/include/python3.4m/grammar.h
+file path=usr/include/python3.4m/import.h
+file path=usr/include/python3.4m/intrcheck.h
+file path=usr/include/python3.4m/iterobject.h
+file path=usr/include/python3.4m/listobject.h
+file path=usr/include/python3.4m/longintrepr.h
+file path=usr/include/python3.4m/longobject.h
+file path=usr/include/python3.4m/marshal.h
+file path=usr/include/python3.4m/memoryobject.h
+file path=usr/include/python3.4m/metagrammar.h
+file path=usr/include/python3.4m/methodobject.h
+file path=usr/include/python3.4m/modsupport.h
+file path=usr/include/python3.4m/moduleobject.h
+file path=usr/include/python3.4m/namespaceobject.h
+file path=usr/include/python3.4m/node.h
+file path=usr/include/python3.4m/object.h
+file path=usr/include/python3.4m/objimpl.h
+file path=usr/include/python3.4m/opcode.h
+file path=usr/include/python3.4m/osdefs.h
+file path=usr/include/python3.4m/parsetok.h
+file path=usr/include/python3.4m/patchlevel.h
+file path=usr/include/python3.4m/pgen.h
+file path=usr/include/python3.4m/pgenheaders.h
+file path=usr/include/python3.4m/py_curses.h
+file path=usr/include/python3.4m/pyarena.h
+file path=usr/include/python3.4m/pyatomic.h
+file path=usr/include/python3.4m/pycapsule.h
+file path=usr/include/python3.4m/pyconfig.h
+file path=usr/include/python3.4m/pyctype.h
+file path=usr/include/python3.4m/pydebug.h
+file path=usr/include/python3.4m/pyerrors.h
+file path=usr/include/python3.4m/pyexpat.h
+file path=usr/include/python3.4m/pyfpe.h
+file path=usr/include/python3.4m/pygetopt.h
+file path=usr/include/python3.4m/pyhash.h
+file path=usr/include/python3.4m/pymacconfig.h
+file path=usr/include/python3.4m/pymacro.h
+file path=usr/include/python3.4m/pymath.h
+file path=usr/include/python3.4m/pymem.h
+file path=usr/include/python3.4m/pyport.h
+file path=usr/include/python3.4m/pystate.h
+file path=usr/include/python3.4m/pystrcmp.h
+file path=usr/include/python3.4m/pystrtod.h
+file path=usr/include/python3.4m/pythonrun.h
+file path=usr/include/python3.4m/pythread.h
+file path=usr/include/python3.4m/pytime.h
+file path=usr/include/python3.4m/rangeobject.h
+file path=usr/include/python3.4m/setobject.h
+file path=usr/include/python3.4m/sliceobject.h
+file path=usr/include/python3.4m/structmember.h
+file path=usr/include/python3.4m/structseq.h
+file path=usr/include/python3.4m/symtable.h
+file path=usr/include/python3.4m/sysmodule.h
+file path=usr/include/python3.4m/token.h
+file path=usr/include/python3.4m/traceback.h
+file path=usr/include/python3.4m/tupleobject.h
+file path=usr/include/python3.4m/typeslots.h
+file path=usr/include/python3.4m/ucnhash.h
+file path=usr/include/python3.4m/unicodeobject.h
+file path=usr/include/python3.4m/warnings.h
+file path=usr/include/python3.4m/weakrefobject.h
+link path=usr/lib/$(MACH64)/libpython3.4m.so target=libpython3.4m.so.1.0
+file path=usr/lib/$(MACH64)/libpython3.4m.so.1.0
+link path=usr/lib/$(MACH64)/libpython3.4m_db.so target=libpython3.4m_db.so.1.0
+file path=usr/lib/$(MACH64)/libpython3.4m_db.so.1.0
 file path=usr/lib/$(MACH64)/libpython3.so
 file path=usr/lib/$(MACH64)/pkgconfig/python-3.4.pc
 link path=usr/lib/$(MACH64)/pkgconfig/python3.pc target=python-3.4.pc \
@@ -246,17 +236,17 @@
 file path=usr/lib/python3.4/concurrent/futures/_base.py
 file path=usr/lib/python3.4/concurrent/futures/process.py
 file path=usr/lib/python3.4/concurrent/futures/thread.py
-file usr/lib/python3.4/config-3.4/python.o \
-    path=usr/lib/python3.4/config-3.4/64/python.o
-file path=usr/lib/python3.4/config-3.4/Makefile
-file path=usr/lib/python3.4/config-3.4/Setup
-file path=usr/lib/python3.4/config-3.4/Setup.config
-file path=usr/lib/python3.4/config-3.4/Setup.local
-file path=usr/lib/python3.4/config-3.4/config.c
-file path=usr/lib/python3.4/config-3.4/config.c.in
-file path=usr/lib/python3.4/config-3.4/install-sh
-file path=usr/lib/python3.4/config-3.4/libpython3.4.a
-file path=usr/lib/python3.4/config-3.4/makesetup
+file usr/lib/python3.4/config-3.4m/python.o \
+    path=usr/lib/python3.4/config-3.4m/64/python.o
+file path=usr/lib/python3.4/config-3.4m/Makefile
+file path=usr/lib/python3.4/config-3.4m/Setup
+file path=usr/lib/python3.4/config-3.4m/Setup.config
+file path=usr/lib/python3.4/config-3.4m/Setup.local
+file path=usr/lib/python3.4/config-3.4m/config.c
+file path=usr/lib/python3.4/config-3.4m/config.c.in
+file path=usr/lib/python3.4/config-3.4m/install-sh
+file path=usr/lib/python3.4/config-3.4m/libpython3.4m.a
+file path=usr/lib/python3.4/config-3.4m/makesetup
 file path=usr/lib/python3.4/configparser.py
 file path=usr/lib/python3.4/contextlib.py
 file path=usr/lib/python3.4/copy.py
@@ -752,74 +742,74 @@
 file path=usr/lib/python3.4/json/scanner.py
 file path=usr/lib/python3.4/json/tool.py
 file path=usr/lib/python3.4/keyword.py
-file path=usr/lib/python3.4/lib-dynload/64/_bisect.so
-file path=usr/lib/python3.4/lib-dynload/64/_bz2.so
-file path=usr/lib/python3.4/lib-dynload/64/_codecs_cn.so
-file path=usr/lib/python3.4/lib-dynload/64/_codecs_hk.so
-file path=usr/lib/python3.4/lib-dynload/64/_codecs_iso2022.so
-file path=usr/lib/python3.4/lib-dynload/64/_codecs_jp.so
-file path=usr/lib/python3.4/lib-dynload/64/_codecs_kr.so
-file path=usr/lib/python3.4/lib-dynload/64/_codecs_tw.so
-file path=usr/lib/python3.4/lib-dynload/64/_crypt.so
-file path=usr/lib/python3.4/lib-dynload/64/_csv.so
-file path=usr/lib/python3.4/lib-dynload/64/_ctypes.so
-file path=usr/lib/python3.4/lib-dynload/64/_ctypes_test.so
-file path=usr/lib/python3.4/lib-dynload/64/_curses.so
-file path=usr/lib/python3.4/lib-dynload/64/_curses_panel.so
-file path=usr/lib/python3.4/lib-dynload/64/_datetime.so
-file path=usr/lib/python3.4/lib-dynload/64/_dbm.so
-file path=usr/lib/python3.4/lib-dynload/64/_decimal.so
-file path=usr/lib/python3.4/lib-dynload/64/_elementtree.so
-file path=usr/lib/python3.4/lib-dynload/64/_gdbm.so
-file path=usr/lib/python3.4/lib-dynload/64/_hashlib.so
-file path=usr/lib/python3.4/lib-dynload/64/_heapq.so
-file path=usr/lib/python3.4/lib-dynload/64/_json.so
-file path=usr/lib/python3.4/lib-dynload/64/_lsprof.so
-file path=usr/lib/python3.4/lib-dynload/64/_lzma.so
-file path=usr/lib/python3.4/lib-dynload/64/_md5.so
-file path=usr/lib/python3.4/lib-dynload/64/_multibytecodec.so
-file path=usr/lib/python3.4/lib-dynload/64/_multiprocessing.so
-file path=usr/lib/python3.4/lib-dynload/64/_opcode.so
-file path=usr/lib/python3.4/lib-dynload/64/_pickle.so
-file path=usr/lib/python3.4/lib-dynload/64/_posixsubprocess.so
-file path=usr/lib/python3.4/lib-dynload/64/_random.so
-file path=usr/lib/python3.4/lib-dynload/64/_sha1.so
-file path=usr/lib/python3.4/lib-dynload/64/_sha256.so
-file path=usr/lib/python3.4/lib-dynload/64/_sha512.so
-file path=usr/lib/python3.4/lib-dynload/64/_socket.so
-file path=usr/lib/python3.4/lib-dynload/64/_sqlite3.so
-file path=usr/lib/python3.4/lib-dynload/64/_ssl.so
-file path=usr/lib/python3.4/lib-dynload/64/_struct.so
+file path=usr/lib/python3.4/lib-dynload/64/_bisect.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_bz2.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_codecs_cn.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_codecs_hk.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_codecs_iso2022.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_codecs_jp.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_codecs_kr.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_codecs_tw.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_crypt.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_csv.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_ctypes.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_ctypes_test.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_curses.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_curses_panel.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_datetime.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_dbm.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_decimal.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_elementtree.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_gdbm.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_hashlib.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_heapq.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_json.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_lsprof.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_lzma.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_md5.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_multibytecodec.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_multiprocessing.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_opcode.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_pickle.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_posixsubprocess.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_random.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_sha1.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_sha256.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_sha512.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_socket.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_sqlite3.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_ssl.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_struct.cpython-34m.so
 file path=usr/lib/python3.4/lib-dynload/64/_sysconfigdata.py
-file path=usr/lib/python3.4/lib-dynload/64/_testbuffer.so
-file path=usr/lib/python3.4/lib-dynload/64/_testcapi.so
-file path=usr/lib/python3.4/lib-dynload/64/_testimportmultiple.so
-file path=usr/lib/python3.4/lib-dynload/64/array.so
-file path=usr/lib/python3.4/lib-dynload/64/audioop.so
-file path=usr/lib/python3.4/lib-dynload/64/binascii.so
-file path=usr/lib/python3.4/lib-dynload/64/cmath.so
-file path=usr/lib/python3.4/lib-dynload/64/dlpi.so
-file path=usr/lib/python3.4/lib-dynload/64/fcntl.so
-file path=usr/lib/python3.4/lib-dynload/64/grp.so
-file path=usr/lib/python3.4/lib-dynload/64/math.so
-file path=usr/lib/python3.4/lib-dynload/64/mmap.so
-file path=usr/lib/python3.4/lib-dynload/64/nis.so
-file path=usr/lib/python3.4/lib-dynload/64/ossaudiodev.so
-file path=usr/lib/python3.4/lib-dynload/64/parser.so
-file path=usr/lib/python3.4/lib-dynload/64/privileges.so
-file path=usr/lib/python3.4/lib-dynload/64/pyexpat.so
-file path=usr/lib/python3.4/lib-dynload/64/rbac.so
-file path=usr/lib/python3.4/lib-dynload/64/readline.so
-file path=usr/lib/python3.4/lib-dynload/64/resource.so
-file path=usr/lib/python3.4/lib-dynload/64/select.so
-file path=usr/lib/python3.4/lib-dynload/64/spwd.so
-file path=usr/lib/python3.4/lib-dynload/64/syslog.so
-file path=usr/lib/python3.4/lib-dynload/64/termios.so
-file path=usr/lib/python3.4/lib-dynload/64/time.so
-file path=usr/lib/python3.4/lib-dynload/64/ucred.so
-file path=usr/lib/python3.4/lib-dynload/64/unicodedata.so
-file path=usr/lib/python3.4/lib-dynload/64/xxlimited.so
-file path=usr/lib/python3.4/lib-dynload/64/zlib.so
+file path=usr/lib/python3.4/lib-dynload/64/_testbuffer.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_testcapi.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/_testimportmultiple.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/array.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/audioop.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/binascii.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/cmath.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/dlpi.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/fcntl.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/grp.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/math.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/mmap.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/nis.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/ossaudiodev.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/parser.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/privileges.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/pyexpat.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/rbac.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/readline.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/resource.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/select.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/spwd.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/syslog.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/termios.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/time.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/ucred.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/unicodedata.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/xxlimited.cpython-34m.so
+file path=usr/lib/python3.4/lib-dynload/64/zlib.cpython-34m.so
 file path=usr/lib/python3.4/lib2to3/Grammar$(COMPONENT_VERSION).final.0.pickle
 file path=usr/lib/python3.4/lib2to3/Grammar.txt
 file path=usr/lib/python3.4/lib2to3/PatternGrammar$(COMPONENT_VERSION).final.0.pickle
--- a/components/python/python34/tkinter-34.p5m	Wed Aug 27 02:02:25 2014 -0700
+++ b/components/python/python34/tkinter-34.p5m	Wed Aug 27 09:04:47 2014 -0700
@@ -43,7 +43,7 @@
     value=PSARC/2009/529 value=PSARC/2013/235 value=PSARC/2014/151
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
 #
-file path=usr/lib/python3.4/lib-dynload/64/_tkinter.so
+file path=usr/lib/python3.4/lib-dynload/64/_tkinter.cpython-34m.so
 file path=usr/lib/python3.4/tkinter/__init__.py
 file path=usr/lib/python3.4/tkinter/__main__.py
 file path=usr/lib/python3.4/tkinter/_fix.py
--- a/components/python/websockify/websockify-PYVER.p5m	Wed Aug 27 02:02:25 2014 -0700
+++ b/components/python/websockify/websockify-PYVER.p5m	Wed Aug 27 09:04:47 2014 -0700
@@ -51,14 +51,21 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/websockify-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/websockify-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/websockify/__init__.py
+# The bypasses for array, select & time are temporary until pkgdepend learns
+# about PEP 3149, new in Python 3.x; see 19510349.
 file path=usr/lib/python$(PYVER)/vendor-packages/websockify/websocket.py \
     pkg.depend.bypass-generate=.*/SimpleHTTPServer.* \
     pkg.depend.bypass-generate=.*/cStringIO.* \
     pkg.depend.bypass-generate=.*/http.* pkg.depend.bypass-generate=.*/md5.* \
-    pkg.depend.bypass-generate=.*/sha.*
+    pkg.depend.bypass-generate=.*/sha.* \
+    pkg.depend.bypass-generate=.*/array.* \
+    pkg.depend.bypass-generate=.*/select.* \
+    pkg.depend.bypass-generate=.*/time.*
 file path=usr/lib/python$(PYVER)/vendor-packages/websockify/websocketproxy.py \
     pkg.depend.bypass-generate=.*/urllib.* \
-    pkg.depend.bypass-generate=.*/urlparse.*
+    pkg.depend.bypass-generate=.*/urlparse.* \
+    pkg.depend.bypass-generate=.*/select.* \
+    pkg.depend.bypass-generate=.*/time.*
 #
 license websockify.license license="LGPL3, BSD, MIT"
 
--- a/components/python/xattr/xattr-PYVER.p5m	Wed Aug 27 02:02:25 2014 -0700
+++ b/components/python/xattr/xattr-PYVER.p5m	Wed Aug 27 09:04:47 2014 -0700
@@ -53,7 +53,10 @@
 $(PYTHON_2.6_ONLY)file path=usr/lib/python$(PYVER)/vendor-packages/xattr/_cffi__x65092e53xe621c3cb.so
 $(PYTHON_2.7_ONLY)file path=usr/lib/python$(PYVER)/vendor-packages/xattr/_cffi__x93e1032axe621c3cb.so
 file path=usr/lib/python$(PYVER)/vendor-packages/xattr/lib.py
-file path=usr/lib/python$(PYVER)/vendor-packages/xattr/tool.py
+# The bypass for zlib is temporary until pkgdepend learns about PEP 3149,
+# new in Python 3.x; see 19510349.
+file path=usr/lib/python$(PYVER)/vendor-packages/xattr/tool.py \
+    pkg.depend.bypass-generate=.*zlib.*
 #
 license LICENSE.txt license=MIT
 
--- a/make-rules/ips.mk	Wed Aug 27 02:02:25 2014 -0700
+++ b/make-rules/ips.mk	Wed Aug 27 09:04:47 2014 -0700
@@ -74,6 +74,7 @@
 PUBLISH_TRANSFORMS +=	$(WS_TOP)/transforms/standard-libraries-past-py2.6
 PUBLISH_TRANSFORMS +=	$(WS_TOP)/transforms/python-rename
 PUBLISH_TRANSFORMS +=	$(WS_TOP)/transforms/python-3-groups
+PUBLISH_TRANSFORMS +=	$(WS_TOP)/transforms/python-3-soabi
 PUBLISH_TRANSFORMS +=	$(PKGMOGRIFY_TRANSFORMS)
 PUBLISH_TRANSFORMS +=	$(WS_TOP)/transforms/publish-cleanup
 
--- a/make-rules/shared-macros.mk	Wed Aug 27 02:02:25 2014 -0700
+++ b/make-rules/shared-macros.mk	Wed Aug 27 09:04:47 2014 -0700
@@ -337,9 +337,11 @@
 PYTHON.2.7 =	$(USRBIN)/python2.7
 
 # Although we build Python 3 64-bit only, the BUILD_NO_ARCH macro is written
-# in such a way that we still need the .32 macro below.
+# in such a way that we still need the .32 macro below.  And since we build
+# 64-bit only, we stick it directly in usr/bin (i.e., the 32-bit path) rather
+# than the 64-bit path.
 PYTHON.3.4.32 =	$(USRBIN.32)/python3.4
-PYTHON.3.4.64 =	$(USRBIN.64)/python3.4
+PYTHON.3.4.64 =	$(USRBIN.32)/python3.4
 PYTHON.3.4 =	$(USRBIN)/python3.4
 
 PYTHON.32 =	$(PYTHON.$(PYTHON_VERSION).32)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/transforms/python-3-soabi	Wed Aug 27 09:04:47 2014 -0700
@@ -0,0 +1,8 @@
+# Python 2's ABI for .so files is to simply append ".so".  But for Python
+# 3, it appends ".cpython-3#[d][m][u].so", where # is the minor version,
+# "d" is added if built --with-pydebug (we don't), "m" is added if built
+# --with-pymalloc (we do) and "u" is added if built --with-wide-unicode
+# (we don't).  See http://legacy.python.org/dev/peps/pep-3149/ for details.
+<transform file -> edit path \
+    (usr/lib/python3.)([0-9])(/vendor-packages/(.*/)?64/.*)\.so \
+    \\1\\2\\3.cpython-3\\2m.so >