23206271 Upgrade cffi to 1.5.2 s11u3-sru
authorRonald Jordan <ron.jordan@oracle.com>
Tue, 11 Oct 2016 11:55:12 -0700
branchs11u3-sru
changeset 7085 cad8ee01213d
parent 7076 332c44bd55bf
child 7088 ad1364987701
23206271 Upgrade cffi to 1.5.2 22871503 Upgrade cryptography to version 1.2.3 22520335 Integrate idna into Userland 22520346 Integrate ipaddress into Userland
components/python/cffi/Makefile
components/python/cffi/cffi-PYVER.p5m
components/python/cffi/cffi.license
components/python/cffi/patches/alloca.patch
components/python/cffi/patches/anonymous.patch
components/python/cffi/patches/barrier.patch
components/python/cffi/patches/s11.patch
components/python/cffi/patches/test.patch
components/python/cryptography/Makefile
components/python/cryptography/cryptography-PYVER.p5m
components/python/cryptography/depend.mk
components/python/cryptography/patches/01-deprecation-fix.patch
components/python/idna/Makefile
components/python/idna/idna-PYVER.p5m
components/python/idna/idna.license
components/python/idna/test/results-2.7-64.master
components/python/idna/test/results-3.4-64.master
components/python/idna/test/results-3.5-64.master
components/python/ipaddress/Makefile
components/python/ipaddress/ipaddress-PYVER.p5m
components/python/ipaddress/ipaddress.license
components/python/ipaddress/test/results-all.master
transforms/standard-python-libraries
--- a/components/python/cffi/Makefile	Fri Oct 07 15:08:18 2016 -0700
+++ b/components/python/cffi/Makefile	Tue Oct 11 11:55:12 2016 -0700
@@ -20,29 +20,35 @@
 #
 
 #
-# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
 #
 
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		cffi
-COMPONENT_VERSION=	0.8.2
+COMPONENT_VERSION=	1.5.2
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:8192393640f7bc304ce82669b35eb90592566a30abbb4924456f52079afc18e2
+    sha256:da9bde99872e46f7bb5cff40a9b1cc08406765efafb583c704de108b6cb821dd
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	http://cffi.readthedocs.org/
 COMPONENT_BUGDB=	python-mod/cffi
 
-TPNO=			16913
+TPNO=			29371
 
 include $(WS_MAKE_RULES)/prep.mk
 include $(WS_MAKE_RULES)/setup.py.mk
 include $(WS_MAKE_RULES)/ips.mk
 
+# SolarisStudio12.4 is needed for mbarrier.h
+SPRO_VROOT = $(SPRO_ROOT)/solarisstudio12.4
+
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
+LDSHARED=      $(CC) -G
+PYTHON_ENV +=  LDSHARED="$(LDSHARED)"
+
 COMPONENT_TEST_DIR =	$(@D)/tests
 COMPONENT_TEST_ENV =	$(PYTHON_ENV)
 COMPONENT_TEST_ENV +=	PYTHONPATH=$(PROTO_DIR)/$(PYTHON_LIB)
@@ -52,22 +58,17 @@
 COMPONENT_TEST_ARGS +=	-p no:codechecker
 COMPONENT_TEST_ARGS +=	$(TEST_SKIPS)
 COMPONENT_TEST_ARGS +=	c testing
-# The following tests cause core dumps on SPARC (bus error, illegal hardware
-# instruction).  We don't skip test_install_and_reload_module{,_package}, which
-# fail on both 64-bit platforms, since those don't cause the interpreter to
-# crash.
-$(BUILD_DIR)/sparcv7-%/.tested: TEST_SKIPS = -k "not test_callback_return_type and not test_struct_packed and not test_opaque_integer_as_function_result"
-$(BUILD_DIR)/sparcv9-%/.tested: TEST_SKIPS = -k "not test_callback and not test_a_lot_of_callbacks and not test_struct_packed and not test_opaque_integer_as_function_result and not test_wchar"
 
 # Copy the tests and a few of the source files they read into a scratch
 # directory so running the tests don't leave turds in the source directory.
 COMPONENT_PRE_TEST_ACTION = \
 	$(MKDIR) $(@D)/tests/doc/source; \
-	$(CP) -r $(SOURCE_DIR)/c $(SOURCE_DIR)/testing $(@D)/tests; \
+	$(CP) -r $(SOURCE_DIR)/c $(SOURCE_DIR)/testing $(SOURCE_DIR)/cffi $(@D)/tests; \
 	$(CP) $(SOURCE_DIR)/setup.py $(@D)/tests; \
 	$(CP) \
 	    $(SOURCE_DIR)/doc/source/conf.py \
 	    $(SOURCE_DIR)/doc/source/index.rst \
+	    $(SOURCE_DIR)/doc/source/installation.rst \
 	    $(@D)/tests/doc/source
 
 # common targets
@@ -77,6 +78,11 @@
 
 test:		$(TEST_32_and_64)
 
+system-test:    $(SYSTEM_TESTS_NOT_IMPLEMENTED)
+
 
 REQUIRED_PACKAGES += library/libffi
+REQUIRED_PACKAGES += library/python/pycparser-27
+REQUIRED_PACKAGES += library/python/pycparser-34
+REQUIRED_PACKAGES += library/python/pycparser-35
 REQUIRED_PACKAGES += system/library
--- a/components/python/cffi/cffi-PYVER.p5m	Fri Oct 07 15:08:18 2016 -0700
+++ b/components/python/cffi/cffi-PYVER.p5m	Tue Oct 11 11:55:12 2016 -0700
@@ -20,7 +20,7 @@
 #
 
 #
-# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -44,23 +44,30 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cffi-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
 file path=usr/lib/python$(PYVER)/vendor-packages/cffi-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/cffi-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/cffi-$(COMPONENT_VERSION)-py$(PYVER).egg-info/entry_points.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/cffi-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
 file path=usr/lib/python$(PYVER)/vendor-packages/cffi-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/cffi-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/cffi/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cffi/_cffi_include.h
+file path=usr/lib/python$(PYVER)/vendor-packages/cffi/_embedding.h
 file path=usr/lib/python$(PYVER)/vendor-packages/cffi/api.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cffi/backend_ctypes.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cffi/cffi_opcode.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cffi/commontypes.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cffi/cparser.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cffi/ffiplatform.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cffi/gc_weakref.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cffi/lock.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cffi/model.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cffi/parse_c_type.h
+file path=usr/lib/python$(PYVER)/vendor-packages/cffi/recompiler.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cffi/setuptools_ext.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cffi/vengine_cpy.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cffi/vengine_gen.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cffi/verifier.py
 #
-license LICENSE license=MIT
+license cffi.license license=MIT
 #
 # force a dependency on the Python runtime
 depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/cffi/cffi.license	Tue Oct 11 11:55:12 2016 -0700
@@ -0,0 +1,33 @@
+Except when otherwise stated (look for LICENSE files in directories or
+information at the beginning of each file) all software and
+documentation is licensed as follows: 
+
+    The MIT License
+
+    Copyright (c) 1996-2003  Red Hat, Inc.
+    Copyright (c) 2001  John Beniton
+    Copyright (c) 2002  Bo Thorsen
+    Copyright (c) 2002  Ranjit Mathew
+    Copyright (c) 2002  Roger Sayle
+
+    Permission is hereby granted, free of charge, to any person 
+    obtaining a copy of this software and associated documentation 
+    files (the "Software"), to deal in the Software without 
+    restriction, including without limitation the rights to use, 
+    copy, modify, merge, publish, distribute, sublicense, and/or 
+    sell copies of the Software, and to permit persons to whom the 
+    Software is furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included 
+    in all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 
+    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 
+    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
+    DEALINGS IN THE SOFTWARE.
+
+
+
--- a/components/python/cffi/patches/alloca.patch	Fri Oct 07 15:08:18 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-Need to include alloca.h when using alloca().  This is filed upstream as:
-
-    https://bitbucket.org/cffi/cffi/issue/144/fix-for-issue-128-is-incomplete
-
-and fixed in
-
-    https://bitbucket.org/cffi/cffi/commits/41b3ef920695
-
-diff --git a/cffi/vengine_cpy.py b/cffi/vengine_cpy.py
---- a/cffi/vengine_cpy.py
-+++ b/cffi/vengine_cpy.py
-@@ -771,6 +771,10 @@
- typedef unsigned __int32 uint32_t;
- typedef unsigned __int64 uint64_t;
- typedef unsigned char _Bool;
-+#else
-+#if (defined (__SVR4) && defined (__sun)) || defined(_AIX)
-+#  include <alloca.h>
-+#endif
- #endif
- 
- #if PY_MAJOR_VERSION < 3
--- a/components/python/cffi/patches/anonymous.patch	Fri Oct 07 15:08:18 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-# HG changeset patch
-# User Armin Rigo <[email protected]>
-# Date 1396624834 -7200
-# Node ID facaf5de29c9e8cdaa148112ece17a4205cf2d84
-# Parent  0457fbb2d45243a93cb8ed242646d7487bd36dc4
-Issue #142: don't generate C files that use '$' in identifiers.
-
-diff --git a/cffi/vengine_cpy.py b/cffi/vengine_cpy.py
---- a/cffi/vengine_cpy.py
-+++ b/cffi/vengine_cpy.py
-@@ -632,13 +632,18 @@
-     # ----------
-     # enums
- 
-+    def _enum_funcname(self, prefix, name):
-+        # "$enum_$1" => "___D_enum____D_1"
-+        name = name.replace('$', '___D_')
-+        return '_cffi_e_%s_%s' % (prefix, name)
-+
-     def _generate_cpy_enum_decl(self, tp, name, prefix='enum'):
-         if tp.partial:
-             for enumerator in tp.enumerators:
-                 self._generate_cpy_const(True, enumerator, delayed=False)
-             return
-         #
--        funcname = '_cffi_e_%s_%s' % (prefix, name)
-+        funcname = self._enum_funcname(prefix, name)
-         prnt = self._prnt
-         prnt('static int %s(PyObject *lib)' % funcname)
-         prnt('{')
-diff --git a/cffi/vengine_gen.py b/cffi/vengine_gen.py
---- a/cffi/vengine_gen.py
-+++ b/cffi/vengine_gen.py
-@@ -410,13 +410,18 @@
-     # ----------
-     # enums
- 
-+    def _enum_funcname(self, prefix, name):
-+        # "$enum_$1" => "___D_enum____D_1"
-+        name = name.replace('$', '___D_')
-+        return '_cffi_e_%s_%s' % (prefix, name)
-+
-     def _generate_gen_enum_decl(self, tp, name, prefix='enum'):
-         if tp.partial:
-             for enumerator in tp.enumerators:
-                 self._generate_gen_const(True, enumerator)
-             return
-         #
--        funcname = '_cffi_e_%s_%s' % (prefix, name)
-+        funcname = self._enum_funcname(prefix, name)
-         self.export_symbols.append(funcname)
-         prnt = self._prnt
-         prnt('int %s(char *out_error)' % funcname)
-@@ -453,7 +458,7 @@
-         else:
-             BType = self.ffi._typeof_locked("char[]")[0]
-             BFunc = self.ffi._typeof_locked("int(*)(char*)")[0]
--            funcname = '_cffi_e_%s_%s' % (prefix, name)
-+            funcname = self._enum_funcname(prefix, name)
-             function = module.load_function(BFunc, funcname)
-             p = self.ffi.new(BType, 256)
-             if function(p) < 0:
-diff --git a/testing/test_verify.py b/testing/test_verify.py
---- a/testing/test_verify.py
-+++ b/testing/test_verify.py
-@@ -1,4 +1,4 @@
--import py
-+import py, re
- import sys, os, math, weakref
- from cffi import FFI, VerificationError, VerificationMissing, model
- from testing.support import *
-@@ -29,6 +29,24 @@
- def setup_module():
-     import cffi.verifier
-     cffi.verifier.cleanup_tmpdir()
-+    #
-+    # check that no $ sign is produced in the C file; it used to be the
-+    # case that anonymous enums would produce '$enum_$1', which was
-+    # used as part of a function name.  GCC accepts such names, but it's
-+    # apparently non-standard.
-+    _r_comment = re.compile(r"/\*.*?\*/|//.*?$", re.DOTALL | re.MULTILINE)
-+    _r_string = re.compile(r'\".*?\"')
-+    def _write_source_and_check(self, file=None):
-+        base_write_source(self, file)
-+        if file is None:
-+            f = open(self.sourcefilename)
-+            data = f.read()
-+            f.close()
-+            data = _r_comment.sub(' ', data)
-+            data = _r_string.sub('"skipped"', data)
-+            assert '$' not in data
-+    base_write_source = cffi.verifier.Verifier._write_source
-+    cffi.verifier.Verifier._write_source = _write_source_and_check
- 
- 
- def test_module_type():
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/cffi/patches/barrier.patch	Tue Oct 11 11:55:12 2016 -0700
@@ -0,0 +1,36 @@
+In-house (for now) patch to allow cffi 1.5.2 to compile with both
+Studio and on SPARC.
+
+--- cffi-1.5.2/c/call_python.c.~1~	2016-02-13 07:33:29.000000000 -0800
++++ cffi-1.5.2/c/call_python.c	2016-05-18 10:10:49.505449785 -0700
+@@ -150,7 +150,8 @@ static int _update_cache_to_call_python(
+ #if (defined(WITH_THREAD) && !defined(_MSC_VER) &&   \
+      !defined(__amd64__) && !defined(__x86_64__) &&   \
+      !defined(__i386__) && !defined(__i386))
+-# define read_barrier()  __sync_synchronize()
++# include <mbarrier.h>
++# define read_barrier()  __compiler_barrier()
+ #else
+ # define read_barrier()  (void)0
+ #endif
+--- cffi-1.5.2/cffi/_embedding.h.~1~	2016-02-13 07:33:29.000000000 -0800
++++ cffi-1.5.2/cffi/_embedding.h	2016-05-18 10:15:53.285798295 -0700
+@@ -32,12 +32,14 @@ static _cffi_call_python_fnptr _cffi_cal
+ 
+ 
+ #ifndef _MSC_VER
+-   /* --- Assuming a GCC not infinitely old --- */
+-# define cffi_compare_and_swap(l,o,n)  __sync_bool_compare_and_swap(l,o,n)
+-# define cffi_write_barrier()          __sync_synchronize()
++# include <atomic.h>
++# include <mbarrier.h>
++# define cffi_compare_and_swap(l,o,n) \
++                               (atomic_cas_ptr((l), (o), (n)), *(l) == (n))
++# define cffi_write_barrier()          __compiler_barrier()
+ # if !defined(__amd64__) && !defined(__x86_64__) &&   \
+      !defined(__i386__) && !defined(__i386)
+-#   define cffi_read_barrier()         __sync_synchronize()
++#   define cffi_read_barrier()         __compiler_barrier()
+ # else
+ #   define cffi_read_barrier()         (void)0
+ # endif
--- a/components/python/cffi/patches/s11.patch	Fri Oct 07 15:08:18 2016 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-This patch contains some workarounds specially needed for Solaris 11.
-
-Due to
-
-    18617452 SIZEOF_WCHAR_T undefined in pyconfig.h on 11.2
-
-SIZEOF_WCHAR_T isn't ever defined, leading to poor support of wchar_t and
-unicode.  Defining that constant prior to including wchar_helper.h helps
-work around most of the resulting test failures.
-
-In Solaris 12, libnsl has been turned into a filter library for libc, and
-symbols like inet_ntoa are available directly from libc.  But this has not
-happened in Solaris 11, so opening libnsl is required in order to find that
-particular symbol.
-
---- cffi-0.8.2/c/_cffi_backend.c	2014-03-06 22:51:56.000000000 -0800
-+++ cffi-0.8.2/c/_cffi_backend.c	2014-04-17 15:46:17.277512131 -0700
-@@ -219,6 +219,7 @@ static void init_errno(void) { }
- # include "file_emulator.h"
- #endif
- 
-+#define SIZEOF_WCHAR_T 4
- #ifdef HAVE_WCHAR_H
- # include "wchar_helper.h"
- #endif
---- cffi-0.8.2/testing/test_function.py	2014-03-06 22:51:56.000000000 -0800
-+++ cffi-0.8.2/testing/test_function.py	2014-04-17 13:37:51.091873904 -0700
-@@ -286,7 +286,7 @@ class TestFunction(object):
-             struct in_addr { unsigned int s_addr; };
-             char *inet_ntoa(struct in_addr in);
-         """)
--        ffi.C = ffi.dlopen(None)
-+        ffi.C = ffi.dlopen("nsl")
-         ina = ffi.new("struct in_addr *", [0x04040404])
-         a = ffi.C.inet_ntoa(ina[0])
-         assert ffi.string(a) == b'4.4.4.4'
--- a/components/python/cffi/patches/test.patch	Fri Oct 07 15:08:18 2016 -0700
+++ b/components/python/cffi/patches/test.patch	Tue Oct 11 11:55:12 2016 -0700
@@ -1,52 +1,33 @@
+
 The testsuite makes some incorrect assumptions:
 
-  - we need to not assume "a standard gcc", so replace the -Werror flag
-    with -errwarn to turn on the warnings are expected to cause compilation
-    to fail.
-
-  - don't use the -pthread flag for compilation; as Studio doesn't have any
+  - Don't use the -pthread flag for compilation; as Studio doesn't have any
     clue what to do with it, and we don't need it on Solaris, anyway.
 
-  - don't force the use of gcc when compiling a test shared object; get
-    that passed in from the makefile.
-
-  - don't assume that stdin/stdout/stderr are changeable:
-
-        https://bitbucket.org/cffi/cffi/issue/145/solaris-stdout-and-stderr-not-in-libc-not
-
-    fixed in
-
-        https://bitbucket.org/cffi/cffi/commits/237031079adc
+  - We need to not assume "a standard gcc", so replace the -Werror flag
+    with -errwarn to turn on the warnings are expected to cause compilation
+    to fail. Also, there is no equivalent for -Wconversion in Studio, so turn
+    off testing for conversion errors.
 
   - don't assume that enums can be unsigned or are the same size as long:
 
     https://bitbucket.org/cffi/cffi/issue/143/test_enum_size-makes-invalid-assumptions
 
-Also fix a problem with some assignments to void*:
-
-    https://bitbucket.org/cffi/cffi/issue/146/incorrect-type-for-c_callback-variable
-
-fixed in
-
-    https://bitbucket.org/cffi/cffi/commits/51d87933eb4b
+  - There is one test helper in test_recompiler where we suddenly try to do C++
+    but without changing the compiler executable. This works in gcc but not with
+    Studio.
 
---- cffi-0.8.2/testing/test_verify.py	Thu Mar  6 22:51:56 2014
-+++ cffi-0.8.2/testing/test_verify.py	Thu Mar 20 18:39:01 2014
-@@ -18,8 +18,10 @@
-         extra_compile_args = [
-             '-Werror', '-Qunused-arguments', '-Wno-error=shorten-64-to-32']
-     else:
--        # assume a standard gcc
--        extra_compile_args = ['-Werror']
-+        extra_compile_args = [
-+          '-errtags=yes',
-+          '-errwarn=E_ASSIGNMENT_TYPE_MISMATCH,E_RETURN_VALUE_TYPE_MISMATCH'
-+        ]
- 
-     class FFI(FFI):
-         def verify(self, *args, **kwds):
---- cffi-0.8.2/testing/callback_in_thread.py	Fri Mar 21 15:58:21 2014
-+++ cffi-0.8.2/testing/callback_in_thread.py	Fri Mar 21 15:58:30 2014
+  - test_recompiler has some test cases work in gcc or clang but not with Studio:
+    test_some_float_type and test_some_float_invalid_3 raise an error "non-constant
+    initializer involving a cast".
+    test_restrict_fields uses the __restrict keyword, which seems to require gcc.
+
+  - Don't force the use of gcc when compiling a test shared object; get
+    that passed in from the makefile.
+
+
+--- cffi-1.1.2/testing/cffi0/callback_in_thread.py	2015-06-09 03:04:07.000000000 -0700
++++ cffi-1.1.2/testing/cffi0/callback_in_thread.py	2015-08-11 10:56:22.822161292 -0700
 @@ -22,7 +22,7 @@
              pthread_create(&thread, NULL, my_wait_function, (void*)mycb);
              return 0;
@@ -56,68 +37,31 @@
      seen = []
      @ffi.callback('int(*)(int,int)')
      def mycallback(x, y):
---- cffi-0.8.2/testing/test_ownlib.py	Tue Oct  9 02:10:04 2012
-+++ cffi-0.8.2/testing/test_ownlib.py	Tue Mar 25 15:39:35 2014
-@@ -1,4 +1,4 @@
--import py, sys
-+import os, py, sys
- import subprocess, weakref
- from cffi import FFI
- from cffi.backend_ctypes import CTypesBackend
-@@ -28,7 +28,7 @@
-         from testing.udir import udir
-         udir.join('testownlib.c').write(SOURCE)
-         subprocess.check_call(
--            'gcc testownlib.c -shared -fPIC -o testownlib.so',
-+            os.getenv('TESTOWNLIB_CC') % ('testownlib.c', 'testownlib.so'),
-             cwd=str(udir), shell=True)
-         cls.module = str(udir.join('testownlib.so'))
- 
---- cffi-0.8.2/c/test_c.py	Thu Mar  6 22:51:56 2014
-+++ cffi-0.8.2/c/test_c.py	Mon Mar 24 14:53:27 2014
-@@ -1102,7 +1102,7 @@
- def test_read_variable():
-     ## FIXME: this test assumes glibc specific behavior, it's not compliant with C standard
-     ## https://bugs.pypy.org/issue1643
--    if sys.platform == 'win32' or sys.platform == 'darwin' or sys.platform.startswith('freebsd'):
-+    if not sys.platform.startswith("linux"):
-         py.test.skip("untested")
-     BVoidP = new_pointer_type(new_void_type())
-     ll = find_and_load_library('c')
-@@ -1112,7 +1112,7 @@
- def test_read_variable_as_unknown_length_array():
-     ## FIXME: this test assumes glibc specific behavior, it's not compliant with C standard
-     ## https://bugs.pypy.org/issue1643
--    if sys.platform == 'win32' or sys.platform == 'darwin' or sys.platform.startswith('freebsd'):
-+    if not sys.platform.startswith("linux"):
-         py.test.skip("untested")
-     BCharP = new_pointer_type(new_primitive_type("char"))
-     BArray = new_array_type(BCharP, None)
-@@ -1124,7 +1124,7 @@
- def test_write_variable():
-     ## FIXME: this test assumes glibc specific behavior, it's not compliant with C standard
-     ## https://bugs.pypy.org/issue1643
--    if sys.platform == 'win32' or sys.platform == 'darwin' or sys.platform.startswith('freebsd'):
-+    if not sys.platform.startswith("linux"):
-         py.test.skip("untested")
-     BVoidP = new_pointer_type(new_void_type())
-     ll = find_and_load_library('c')
---- cffi-0.8.2/testing/test_verify.py	Thu Mar  6 22:51:56 2014
-+++ cffi-0.8.2/testing/test_verify.py	Mon Mar 24 15:03:49 2014
-@@ -1472,8 +1474,8 @@
-     assert func() == 42
- 
- def test_FILE_stored_in_stdout():
--    if sys.platform == 'win32':
--        py.test.skip("MSVC: cannot assign to stdout")
-+    if not sys.platform.startswith("linux"):
-+        py.test.skip("likely, we cannot assign to stdout")
+--- cffi-1.1.2/testing/cffi0/test_verify.py	2015-06-09 03:04:07.000000000 -0700
++++ cffi-1.1.2/testing/cffi0/test_verify.py	2015-08-12 14:17:18.300215250 -0700
+@@ -18,6 +18,9 @@
+         extra_compile_args = ['-Werror', '-Wall', '-Wextra', '-Wconversion']
+         # special things for clang
+         extra_compile_args.append('-Qunused-arguments')
++    elif (sys.platform == 'sunos5'):
++        extra_compile_args = ["-errtags=yes",
++            "-errwarn=E_ASSIGNMENT_TYPE_MISMATCH,E_RETURN_VALUE_TYPE_MISMATCH"]
+     else:
+         # assume a standard gcc
+         extra_compile_args = ['-Werror', '-Wall', '-Wextra', '-Wconversion']
+@@ -95,6 +98,11 @@
+         py.test.skip("needs GCC or Clang")
      ffi = FFI()
-     ffi.cdef("int printf(const char *, ...); FILE *setstdout(FILE *);")
-     lib = ffi.verify("""
---- cffi-0.8.2/testing/test_verify.py	Thu Mar  6 22:51:56 2014
-+++ cffi-0.8.2/testing/test_verify.py	Mon Mar 24 15:06:23 2014
-@@ -1598,13 +1598,13 @@
+     ffi.cdef(cdef)
++
++    if sys.platform == 'sunos5':
++        lib = ffi.verify(source, **kargs)
++        return lib
++
+     py.test.raises(VerificationError, ffi.verify, source, **kargs)
+     extra_compile_args_orig = extra_compile_args[:]
+     extra_compile_args.remove('-Wconversion')
+@@ -1737,13 +1745,13 @@
               ('-123',          4, -1),
               ('-2147483647-1', 4, -1),
               ]
@@ -133,7 +77,7 @@
              continue   # skipped on Windows
          ffi = FFI()
          ffi.cdef("enum foo_e { AA, BB, ... };")
-@@ -1629,7 +1627,7 @@
+@@ -1768,7 +1776,7 @@
                          (maxulong, -1, ''),
                          (-1, 0xffffffff, 'U'),
                          (-1, maxulong, 'UL')]:
@@ -142,16 +86,159 @@
              continue     # enums may always be signed with MSVC
          ffi = FFI()
          ffi.cdef("enum foo_e { AA=%s };" % c1)
---- a/testing/test_verify.py
-+++ b/testing/test_verify.py
-@@ -1656,8 +1656,8 @@
+--- cffi-1.1.2/testing/cffi1/test_new_ffi_1.py	2015-06-09 03:04:07.000000000 -0700
++++ cffi-1.1.2/testing/cffi1/test_new_ffi_1.py	2015-08-12 15:18:12.105387245 -0700
+@@ -81,6 +81,10 @@
+         DEFS = DEFS.replace('data[0]', 'data[1]')   # not supported
+         CCODE = (DEFS + "\n#pragma pack(push,1)\n" + DEFS_PACKED +
+                  "\n#pragma pack(pop)\n")
++    elif sys.platform == "sunos5":
++        DEFS = DEFS.replace('data[0]', 'data[1]')   # not supported
++        CCODE = (DEFS +
++                 DEFS_PACKED.replace('/*here*/', '__attribute__((packed))'))
+     else:
+         CCODE = (DEFS +
+                  DEFS_PACKED.replace('/*here*/', '__attribute__((packed))'))
+@@ -893,9 +897,9 @@
+         assert ffi.cast("enum foq", 0) != ffi.cast("enum bar", 0)
+         assert ffi.cast("enum bar", 0) != ffi.cast("int", 0)
+         assert repr(ffi.cast("enum bar", -1)) == "<cdata 'enum bar' -1: CC1>"
+-        assert repr(ffi.cast("enum foq", -1)) == (  # enums are unsigned, if
+-            "<cdata 'enum foq' 4294967295>") or (   # they contain no neg value
+-                sys.platform == "win32")            # (but not on msvc)
++        assert repr(ffi.cast("enum foq", -1)) == (   # enums are unsigned, if
++            "<cdata 'enum foq' 4294967295>") or (    # they contain no neg value
++                sys.platform in ("win32", "sunos5")) # (but not on msvc or SS)
+         # enum baz { A2=0x1000, B2=0x2000 };
+         assert ffi.string(ffi.cast("enum baz", 0x1000)) == "A2"
+         assert ffi.string(ffi.cast("enum baz", 0x2000)) == "B2"
+@@ -1011,7 +1015,7 @@
+     def test_bitfield_enum(self):
+         # typedef enum { AA1, BB1, CC1 } foo_e_t;
+         # typedef struct { foo_e_t f:2; } bfenum_t;
+-        if sys.platform == "win32":
++        if sys.platform in ("win32", "sunos5"):
+             py.test.skip("enums are not unsigned")
+         s = ffi.new("bfenum_t *")
+         s.f = 2
+@@ -1211,7 +1215,7 @@
+         assert repr(p.a).startswith("<cdata 'int[2]' 0x")
+ 
+     def test_struct_containing_array_varsize_workaround(self):
+-        if sys.platform == "win32":
++        if sys.platform in ("win32", "sunos5"):
+             py.test.skip("array of length 0 not supported")
+         # struct array0 { int len; short data[0]; };
+         p = ffi.new("char[]", ffi.sizeof("struct array0") + 7 * SIZE_OF_SHORT)
+--- cffi-1.1.2/testing/cffi1/test_recompiler.py	2015-06-09 03:04:10.000000000 -0700
++++ cffi-1.1.2/testing/cffi1/test_recompiler.py	2015-08-11 11:08:16.757848317 -0700
+@@ -22,10 +22,14 @@
+     kwds.setdefault('undef_macros', ['NDEBUG'])
+     module_name = '_CFFI_' + module_name
+     ffi.set_source(module_name, source)
+-    if not os.environ.get('NO_CPP'):     # test the .cpp mode too
++    if sys.platform == 'sunos5':
++        kwds['extra_compile_args'] = (kwds.get('extra_compile_args', []) +
++            ["-errtags=yes", "-errwarn=E_ASSIGNMENT_TYPE_MISMATCH,"
++            "E_RETURN_VALUE_TYPE_MISMATCH"])
++    elif not os.environ.get('NO_CPP'):     # test the .cpp mode too
+         kwds.setdefault('source_extension', '.cpp')
+         source = 'extern "C" {\n%s\n}' % (source,)
+     else:
+         kwds['extra_compile_args'] = (kwds.get('extra_compile_args', []) +
+                                       ['-Werror'])
+     return recompiler._verify(ffi, module_name, source, *args, **kwds)
+@@ -1076,2 +1076,3 @@
+ def test_some_float_type():
++    py.test.skip("needs GCC or Clang")
+     ffi = FFI()
+@@ -1111,2 +1111,3 @@
+ def test_some_float_invalid_3():
++    py.test.skip("needs GCC or Clang")
+     ffi = FFI()
+@@ -1225,2 +1225,3 @@
+ def test_restrict_fields():
++    py.test.skip("needs GCC or Clang")
      ffi = FFI()
-     ffi.cdef("""
-         int (*python_callback)(int how_many, int *values);
--        void *const c_callback;   /* pass this ptr to C routines */
--        int some_c_function(void *cb);
-+        int (*const c_callback)(int,...);   /* pass this ptr to C routines */
-+        int some_c_function(int(*cb)(int,...));
-     """)
-     lib = ffi.verify("""
-         #include <stdarg.h>
+--- cffi-1.1.2/testing/cffi1/test_verify1.py	2015-06-09 03:04:07.000000000 -0700
++++ cffi-1.1.2/testing/cffi1/test_verify1.py	2015-08-12 15:02:07.774160223 -0700
+@@ -18,6 +18,9 @@
+         extra_compile_args = ['-Werror', '-Wall', '-Wextra', '-Wconversion']
+         # special things for clang
+         extra_compile_args.append('-Qunused-arguments')
++    elif (sys.platform == 'sunos5'):
++        extra_compile_args = ["-errtags=yes",
++            "-errwarn=E_ASSIGNMENT_TYPE_MISMATCH,E_RETURN_VALUE_TYPE_MISMATCH"]
+     else:
+         # assume a standard gcc
+         extra_compile_args = ['-Werror', '-Wall', '-Wextra', '-Wconversion']
+@@ -75,6 +77,10 @@
+         py.test.skip("needs GCC or Clang")
+     ffi = FFI()
+     ffi.cdef(cdef)
++    if sys.platform == 'sunos5':
++        lib = ffi.verify(source, **kargs)
++        return lib
++
+     py.test.raises(VerificationError, ffi.verify, source, **kargs)
+     extra_compile_args_orig = extra_compile_args[:]
+     extra_compile_args.remove('-Wconversion')
+@@ -1726,13 +1732,13 @@
+              ('-123',          4, -1),
+              ('-2147483647-1', 4, -1),
+              ]
+-    if FFI().sizeof("long") == 8:
++    if FFI().sizeof("long") == 8 and sys.platform != 'sunos5':
+         cases += [('4294967296L',        8, 2**64-1),
+                   ('%dUL' % (2**64-1),   8, 2**64-1),
+                   ('-2147483649L',       8, -1),
+                   ('%dL-1L' % (1-2**63), 8, -1)]
+     for hidden_value, expected_size, expected_minus1 in cases:
+-        if sys.platform == 'win32' and 'U' in hidden_value:
++        if sys.platform in ('win32', 'sunos5') and 'U' in hidden_value:
+             continue   # skipped on Windows
+         ffi = FFI()
+         ffi.cdef("enum foo_e { AA, BB, ... };")
+@@ -1740,7 +1746,7 @@
+         assert lib.AA == 0
+         assert lib.BB == eval(hidden_value.replace('U', '').replace('L', ''))
+         assert ffi.sizeof("enum foo_e") == expected_size
+-        if sys.platform != 'win32':
++        if sys.platform not in  ('win32', 'sunos5'):
+             assert int(ffi.cast("enum foo_e", -1)) == expected_minus1
+     # test with the large value hidden:
+     # disabled so far, doesn't work
+@@ -1759,7 +1765,7 @@
+                     (0xffffffff, 'U'),
+                     (maxulong, 'UL'),
+                     (-int(maxulong / 3), 'L')]:
+-        if c2c and sys.platform == 'win32':
++        if c2c and sys.platform in ('win32', 'sunos5'):
+             continue     # enums may always be signed with MSVC
+         ffi = FFI()
+         ffi.cdef("enum foo_e { AA };")
+--- cffi-1.1.2/testing/cffi0/test_ownlib.py	2015-06-09 03:04:07.000000000 -0700
++++ cffi-1.1.2/testing/cffi0/test_ownlib.py	2015-08-12 13:55:21.239982926 -0700
+@@ -1,4 +1,4 @@
+-import py, sys
++import os, py, sys
+ import subprocess, weakref
+ from cffi import FFI
+ from cffi.backend_ctypes import CTypesBackend
+@@ -102,7 +102,6 @@
+         from testing.udir import udir
+         udir.join('testownlib.c').write(SOURCE)
+         if sys.platform == 'win32':
+-            import os
+             # did we already build it?
+             if os.path.exists(str(udir.join('testownlib.dll'))):
+                 cls.module = str(udir.join('testownlib.dll'))
+@@ -129,7 +128,7 @@
+                 cls.module = str(udir.join('testownlib.dll'))
+         else:
+             subprocess.check_call(
+-                'gcc testownlib.c -shared -fPIC -o testownlib.so',
++                os.getenv('TESTOWNLIB_CC') % ('testownlib.c', 'testownlib.so'),
+                 cwd=str(udir), shell=True)
+             cls.module = str(udir.join('testownlib.so'))
+
--- a/components/python/cryptography/Makefile	Fri Oct 07 15:08:18 2016 -0700
+++ b/components/python/cryptography/Makefile	Tue Oct 11 11:55:12 2016 -0700
@@ -20,22 +20,22 @@
 #
 
 #
-# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
 #
 
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		cryptography
-COMPONENT_VERSION=	0.8.2
+COMPONENT_VERSION=	1.2.3
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:1c9a022ab3decaf152093e2ef2d5ee4258c72c7d429446c86bd68ff8c0929db6
+    sha256:8eb11c77dd8e73f48df6b2f7a7e16173fe0fe8fdfe266232832e88477e08454e
 COMPONENT_ARCHIVE_URL=	$(call pypi_url)
 COMPONENT_PROJECT_URL=	https://cryptography.io/
 COMPONENT_BUGDB=	python-mod/cryptography
 
-TPNO=			22524
+TPNO=			27254
 
 include $(WS_MAKE_RULES)/prep.mk
 include $(WS_MAKE_RULES)/setup.py.mk
@@ -43,26 +43,12 @@
 
 ASLR_MODE = $(ASLR_NOT_APPLICABLE)
 
-#
-# Until enum is available in the build environment, it needs to be built
-# in order for setuptools to work here.
-#
-ENUM=	$(WS_COMPONENTS)/python/enum/build/prototype/$(MACH)/$(PYTHON_LIB)
-
-$(ENUM):
-	(cd ../enum ; $(MAKE) install)
+# Use the CFFI version in the gate because if the CFFI version changes
+# everything using CFFI will break.
+CFFI = $(WS_COMPONENTS)/python/cffi/build/prototype/$(MACH)/$(PYTHON_LIB)
 
-COMPONENT_BUILD_ENV +=		PYTHONPATH=$(ENUM)
-
-COMPONENT_INSTALL_ENV +=	PYTHONPATH=$(ENUM)
-
-$(BUILD_32_and_64):		$(ENUM)
-
-clean::
-	(cd ../enum ; $(MAKE) clean)
-
-clobber::
-	(cd ../enum ; $(MAKE) clobber)
+COMPONENT_BUILD_ENV +=		PYTHONPATH=$(CFFI)
+COMPONENT_INSTALL_ENV +=	PYTHONPATH=$(CFFI)
 
 # common targets
 build:		$(BUILD_32_and_64)
@@ -70,11 +56,17 @@
 install:	$(INSTALL_32_and_64)
 
 #
-# tests require cryptography_vectors, iso8601, pretend, pytest, and six,
-# some of which have not yet integrated.
+# tests require cryptography_vectors, iso8601, pretend, pytest>= 2.8.7,
+# hypothesis>=1.11.4 and pyasn1_modules, some of which have not yet integrated.
+# On a i386 kernel zone with the test dependencies installed, test results are:
+# Python2.7: 74000 passed, 6136 skipped
+# Python3.4: 74000 passed, 6136 skipped
+# Python3.5: 74000 passed, 6136 skipped
 #
 test:		$(NO_TESTS)
 
+system-test:    $(SYSTEM_TESTS_NOT_IMPLEMENTED)
 
+REQUIRED_PACKAGES += library/python/cffi
 REQUIRED_PACKAGES += library/security/openssl
 REQUIRED_PACKAGES += system/library
--- a/components/python/cryptography/cryptography-PYVER.p5m	Fri Oct 07 15:08:18 2016 -0700
+++ b/components/python/cryptography/cryptography-PYVER.p5m	Tue Oct 11 11:55:12 2016 -0700
@@ -20,7 +20,7 @@
 #
 
 #
-# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
 #
 
 set name=pkg.fmri \
@@ -47,21 +47,6 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography-$(COMPONENT_VERSION)-py$(PYVER).egg-info/not-zip-safe
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography-$(COMPONENT_VERSION)-py$(PYVER).egg-info/requires.txt
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
-$(PYTHON_2.7_ONLY)file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/64/_Cryptography_cffi_26cb75b8x62b488b1.so
-$(PYTHON_2.6_ONLY)file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/64/_Cryptography_cffi_353274b2xffc7b1ce.so
-$(PYTHON_2.6_ONLY)file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/64/_Cryptography_cffi_383020b0x62b488b1.so
-$(PYTHON_2.7_ONLY)file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/64/_Cryptography_cffi_590da19fxffc7b1ce.so
-$(PYTHON_2.6_ONLY)file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/64/_Cryptography_cffi_93dac7cbx399b1113.so
-$(PYTHON_3.4_ONLY)file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/64/_Cryptography_cffi_a8febd48xffc7b1ce.so
-$(PYTHON_3.4_ONLY)file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/64/_Cryptography_cffi_b03f9c7x62b488b1.so
-$(PYTHON_3.4_ONLY)file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/64/_Cryptography_cffi_e9178e86x399b1113.so
-$(PYTHON_2.7_ONLY)file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/64/_Cryptography_cffi_f3e4673fx399b1113.so
-$(PYTHON_2.7_ONLY)file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/_Cryptography_cffi_26cb75b8x62b488b1.so
-$(PYTHON_2.6_ONLY)file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/_Cryptography_cffi_353274b2xffc7b1ce.so
-$(PYTHON_2.6_ONLY)file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/_Cryptography_cffi_383020b0x62b488b1.so
-$(PYTHON_2.7_ONLY)file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/_Cryptography_cffi_590da19fxffc7b1ce.so
-$(PYTHON_2.6_ONLY)file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/_Cryptography_cffi_93dac7cbx399b1113.so
-$(PYTHON_2.7_ONLY)file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/_Cryptography_cffi_f3e4673fx399b1113.so
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/__about__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/exceptions.py
@@ -86,53 +71,18 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/backends/openssl/rsa.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/backends/openssl/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/backends/openssl/x509.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/64/_constant_time.so
+file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/64/_openssl.so
+file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/64/_padding.so
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/_constant_time.so
+file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/_openssl.so
+file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/_padding.so
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/commoncrypto/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/commoncrypto/binding.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/commoncrypto/cf.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/commoncrypto/common_cryptor.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/commoncrypto/common_digest.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/commoncrypto/common_hmac.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/commoncrypto/common_key_derivation.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/commoncrypto/secimport.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/commoncrypto/secitem.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/commoncrypto/seckey.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/commoncrypto/seckeychain.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/commoncrypto/sectransform.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/__init__.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/aes.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/asn1.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/bignum.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/_conditional.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/binding.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/bio.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/cmac.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/cms.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/conf.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/crypto.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/dh.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/dsa.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/ec.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/ecdh.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/ecdsa.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/engine.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/err.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/evp.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/hmac.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/nid.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/objects.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/opensslv.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/osrandom_engine.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/pem.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/pkcs12.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/pkcs7.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/rand.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/rsa.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/ssl.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/x509.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/x509_vfy.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/x509name.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/openssl/x509v3.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/bindings/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/primitives/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/primitives/asymmetric/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/primitives/asymmetric/dh.py
@@ -151,28 +101,29 @@
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/primitives/hmac.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/primitives/interfaces/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/primitives/kdf/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/primitives/kdf/concatkdf.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/primitives/kdf/hkdf.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/primitives/kdf/pbkdf2.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/primitives/kdf/x963kdf.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/primitives/keywrap.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/primitives/padding.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/primitives/serialization.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/primitives/src/constant_time.c
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/primitives/src/constant_time.h
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/primitives/src/padding.c
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/primitives/src/padding.h
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/primitives/twofactor/__init__.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/primitives/twofactor/hotp.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/primitives/twofactor/totp.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/hazmat/primitives/twofactor/utils.py
 file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/utils.py
-file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/x509.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/x509/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/x509/base.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/x509/extensions.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/x509/general_name.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/x509/name.py
+file path=usr/lib/python$(PYVER)/vendor-packages/cryptography/x509/oid.py
 #
-license LICENSE license="Apache 2.0"
+license LICENSE.BSD license=BSD-like
 
 # Dependencies on cffi must be incorporated.
-depend type=incorporate fmri=library/python/cffi-$(PYV)@0.8.2
-
-# force a dependency on the Python runtime
-depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
-    pkg.debug.depend.path=usr/bin
+depend type=incorporate fmri=library/python/cffi-$(PYV)@1.5.2
 
 # force a dependency on cffi; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/cffi-$(PYV)
@@ -184,6 +135,12 @@
 # force a dependency on enum; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/enum-$(PYV)
 
+# force a dependency on idna; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/idna-$(PYV)
+
+# force a dependency on ipaddress; pkgdepend work is needed to flush this out.
+depend type=require fmri=library/python/ipaddress-$(PYV)
+
 # force a dependency on pyasn1; pkgdepend work is needed to flush this out.
 depend type=require fmri=library/python/pyasn1-$(PYV)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/cryptography/depend.mk	Tue Oct 11 11:55:12 2016 -0700
@@ -0,0 +1,1 @@
+python/cryptography:	python/cffi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/cryptography/patches/01-deprecation-fix.patch	Tue Oct 11 11:55:12 2016 -0700
@@ -0,0 +1,47 @@
+Upstream patch that addresses
+
+	https://github.com/pyca/cryptography/issues/2710
+
+which is already fixed in cryptography 1.3 and above.
+
+commit 0639db99c916e61ac8ee2687c4a9d37c7c67ba76
+Author: Alex Gaynor <[email protected]>
+Date:   Sat Feb 6 13:39:16 2016 -0500
+
+    Fixes #2710 -- silence a deprecation warning.
+    
+    Use the new name and alias to the old one
+
+diff --git a/src/cryptography/x509/__init__.py b/src/cryptography/x509/__init__.py
+index a1deb7f..787f1a6 100644
+--- a/src/cryptography/x509/__init__.py
++++ b/src/cryptography/x509/__init__.py
+@@ -4,6 +4,7 @@
+ 
+ from __future__ import absolute_import, division, print_function
+ 
++from cryptography import utils
+ from cryptography.x509.base import (
+     Certificate, CertificateBuilder, CertificateRevocationList,
+     CertificateRevocationListBuilder,
+@@ -30,12 +31,19 @@ from cryptography.x509.general_name import (
+ )
+ from cryptography.x509.name import Name, NameAttribute
+ from cryptography.x509.oid import (
+-    AuthorityInformationAccessOID, CRLEntryExtensionOID, CRLExtensionOID,
++    AuthorityInformationAccessOID, CRLEntryExtensionOID,
+     CertificatePoliciesOID, ExtendedKeyUsageOID, ExtensionOID, NameOID,
+     ObjectIdentifier, SignatureAlgorithmOID, _SIG_OIDS_TO_HASH
+ )
+ 
+ 
++CRLExtensionOID = utils.deprecated(
++    CRLEntryExtensionOID,
++    __name__,
++    "CRLExtensionOID has been renamed to CRLEntryExtensionOID",
++    utils.DeprecatedIn12
++)
++
+ OID_AUTHORITY_INFORMATION_ACCESS = ExtensionOID.AUTHORITY_INFORMATION_ACCESS
+ OID_AUTHORITY_KEY_IDENTIFIER = ExtensionOID.AUTHORITY_KEY_IDENTIFIER
+ OID_BASIC_CONSTRAINTS = ExtensionOID.BASIC_CONSTRAINTS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/idna/Makefile	Tue Oct 11 11:55:12 2016 -0700
@@ -0,0 +1,67 @@
+#
+# 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) 2016, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		idna
+COMPONENT_VERSION=	2.0
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:16199aad938b290f5be1057c0e1efc6546229391c23cea61ca940c115f7d3d3b
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=	https://github.com/kjd/idna
+COMPONENT_BUGDB=	python-mod/idna
+
+TPNO=			25771
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+COMPONENT_TEST_DIR = $(SOURCE_DIR)/tests
+COMPONENT_TEST_ARGS = -m unittest discover --pattern=*.py
+
+# The test output contains arbitrary output. Use nawk to extract just the
+# sections that summarizes the test result.
+# Most of the test cases skipped in Python 2.7 because 'Test requires Python 
+# wide Unicode support'.
+COMPONENT_TEST_TRANSFORMER = $(NAWK)
+COMPONENT_TEST_TRANSFORMS = "'/^Ran .+ / { sub(\" tests in .+s\", \" tests in\"); print }; /!NF/ { print }; /^OK/ { print };'"
+
+# common targets
+build:		$(BUILD_64)
+
+install:	$(INSTALL_64)
+
+# Note: test will fail to run for 2.6 because the 'discover' unit test module
+# is not available for 2.6.  This will short-circuit the run for 2.7.  To run
+# tests manually for 2.7, cd to idna-2.0/tests and run:
+#   /usr/bin/python2.7 -m unittest discover --pattern=*.py
+test:		$(TEST_64)
+
+system-test:    $(SYSTEM_TESTS_NOT_IMPLEMENTED)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/idna/idna-PYVER.p5m	Tue Oct 11 11:55:12 2016 -0700
@@ -0,0 +1,58 @@
+#
+# 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) 2016, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/idna-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Internationalized Domain Names in Applications"
+set name=pkg.description \
+    value="A library to support the Internationalised Domain Names in Applications (IDNA) protocol as specified in RFC 5891. The library is also intended to act as a suitable drop-in replacement for the encodings.idna module that comes with the Python standard library but currently only supports the older 2003 specification."
+set name=com.oracle.info.description value="the idna Python module"
+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 value="Kim Davies <[email protected]>"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=org.opensolaris.arc-caseid value=PSARC/2015/489
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+file path=usr/lib/python$(PYVER)/vendor-packages/idna-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/idna-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/idna-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/idna-$(COMPONENT_VERSION)-py$(PYVER).egg-info/pbr.json
+file path=usr/lib/python$(PYVER)/vendor-packages/idna-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/idna/__init__.py
+file path=usr/lib/python$(PYVER)/vendor-packages/idna/codec.py
+file path=usr/lib/python$(PYVER)/vendor-packages/idna/compat.py
+file path=usr/lib/python$(PYVER)/vendor-packages/idna/core.py
+file path=usr/lib/python$(PYVER)/vendor-packages/idna/idnadata.py
+file path=usr/lib/python$(PYVER)/vendor-packages/idna/uts46data.py
+license idna.license license=BSD-like
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on the idna package
+depend type=require \
+    fmri=library/python/idna@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/idna/idna.license	Tue Oct 11 11:55:12 2016 -0700
@@ -0,0 +1,78 @@
+Copyright (c) 2013-2015, Kim Davies. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+#. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+#. Redistributions in binary form must reproduce the above
+   copyright notice, this list of conditions and the following
+   disclaimer in the documentation and/or other materials provided with
+   the distribution.
+
+#. Neither the name of the copyright holder nor the names of the 
+   contributors may be used to endorse or promote products derived 
+   from this software without specific prior written permission.
+
+#. THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS "AS IS" AND ANY
+   EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+   PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR 
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+   USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+   DAMAGE.
+
+Portions of the codec implementation and unit tests are derived from the
+Python standard library, which carries the `Python Software Foundation
+License <https://docs.python.org/2/license.html>`_:
+
+   Copyright (c) 2001-2014 Python Software Foundation; All Rights Reserved
+
+Portions of the unit tests are derived from the Unicode standard, which 
+is subject to the Unicode, Inc. License Agreement:
+
+   Copyright (c) 1991-2014 Unicode, Inc. All rights reserved.
+   Distributed under the Terms of Use in 
+   <http://www.unicode.org/copyright.html>.
+
+   Permission is hereby granted, free of charge, to any person obtaining
+   a copy of the Unicode data files and any associated documentation
+   (the "Data Files") or Unicode software and any associated documentation
+   (the "Software") to deal in the Data Files or Software
+   without restriction, including without limitation the rights to use,
+   copy, modify, merge, publish, distribute, and/or sell copies of
+   the Data Files or Software, and to permit persons to whom the Data Files
+   or Software are furnished to do so, provided that
+   
+   (a) this copyright and permission notice appear with all copies 
+   of the Data Files or Software,
+
+   (b) this copyright and permission notice appear in associated 
+   documentation, and
+
+   (c) there is clear notice in each modified Data File or in the Software
+   as well as in the documentation associated with the Data File(s) or
+   Software that the data or software has been modified.
+
+   THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+   ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+   WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+   NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+   IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+   NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+   DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+   DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+   TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+   PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+
+   Except as contained in this notice, the name of a copyright holder
+   shall not be used in advertising or otherwise to promote the sale,
+   use or other dealings in these Data Files or Software without prior
+   written authorization of the copyright holder.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/idna/test/results-2.7-64.master	Tue Oct 11 11:55:12 2016 -0700
@@ -0,0 +1,2 @@
+Ran 5054 tests in
+OK (skipped=5038)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/idna/test/results-3.4-64.master	Tue Oct 11 11:55:12 2016 -0700
@@ -0,0 +1,2 @@
+Ran 5054 tests in
+OK
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/idna/test/results-3.5-64.master	Tue Oct 11 11:55:12 2016 -0700
@@ -0,0 +1,2 @@
+Ran 5054 tests in
+OK
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/ipaddress/Makefile	Tue Oct 11 11:55:12 2016 -0700
@@ -0,0 +1,63 @@
+#
+# 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) 2016, Oracle and/or its affiliates. All rights reserved.
+#
+
+include ../../../make-rules/shared-macros.mk
+
+COMPONENT_NAME=		ipaddress
+COMPONENT_VERSION=	1.0.16
+COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
+COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
+COMPONENT_ARCHIVE_HASH=	\
+    sha256:5a3182b322a706525c46282ca6f064d27a02cffbd449f9f47416f1dc96aa71b0
+COMPONENT_ARCHIVE_URL=	$(call pypi_url)
+COMPONENT_PROJECT_URL=  https://github.com/phihag/ipaddress
+COMPONENT_BUGDB=	python-mod/ipaddress
+
+TPNO=			27996
+
+# ipaddress is superfluous in Python 3.4
+PYTHON_VERSIONS =	$(PYTHON2_VERSIONS)
+
+include $(WS_MAKE_RULES)/prep.mk
+include $(WS_MAKE_RULES)/setup.py.mk
+include $(WS_MAKE_RULES)/ips.mk
+
+ASLR_MODE = $(ASLR_NOT_APPLICABLE)
+
+COMPONENT_TEST_DIR = $(SOURCE_DIR)
+COMPONENT_TEST_ARGS = test_ipaddress.py
+COMPONENT_TEST_MASTER = $(COMPONENT_TEST_RESULTS_DIR)/results-all.master
+
+COMPONENT_TEST_TRANSFORMS += \
+	'-e "s|\(^Ran [0-9]\+ tests in\).*|\1|" '
+
+# common targets
+build:		$(BUILD_NO_ARCH)
+
+install:	$(INSTALL_NO_ARCH)
+
+test:		$(TEST_NO_ARCH)
+
+system-test:    $(SYSTEM_TESTS_NOT_IMPLEMENTED)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/ipaddress/ipaddress-PYVER.p5m	Tue Oct 11 11:55:12 2016 -0700
@@ -0,0 +1,55 @@
+#
+# 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) 2016, Oracle and/or its affiliates. All rights reserved.
+#
+
+set name=pkg.fmri \
+    value=pkg:/library/python/ipaddress-$(PYV)@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
+set name=pkg.summary value="Python IPv4/IPv6 manipulation library"
+set name=pkg.description \
+    value="This library is a fast, lightweight IPv4/IPv6 manipulation library in Python. It is used to create/poke/manipulate IPv4/IPv6 addresses and networks. This is a port of 3.3+ ipaddress module to 2.7."
+set name=com.oracle.info.description value="the ipaddress Python module"
+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 value="Philipp Hagemeister <[email protected]>"
+set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
+set name=org.opensolaris.arc-caseid value=PSARC/2015/490
+set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
+#
+file path=usr/lib/python$(PYVER)/vendor-packages/ipaddress-$(COMPONENT_VERSION)-py$(PYVER).egg-info/PKG-INFO
+file path=usr/lib/python$(PYVER)/vendor-packages/ipaddress-$(COMPONENT_VERSION)-py$(PYVER).egg-info/SOURCES.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/ipaddress-$(COMPONENT_VERSION)-py$(PYVER).egg-info/dependency_links.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/ipaddress-$(COMPONENT_VERSION)-py$(PYVER).egg-info/top_level.txt
+file path=usr/lib/python$(PYVER)/vendor-packages/ipaddress.py
+#
+license ipaddress.license license="PSF v2"
+
+# force a dependency on the Python runtime
+depend type=require fmri=__TBD pkg.debug.depend.file=python$(PYVER) \
+    pkg.debug.depend.path=usr/bin
+
+# force a dependency on the ipaddress package
+depend type=require \
+    fmri=library/python/ipaddress@$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/ipaddress/ipaddress.license	Tue Oct 11 11:55:12 2016 -0700
@@ -0,0 +1,38 @@
+PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
+--------------------------------------------
+
+1. This LICENSE AGREEMENT is between the Python Software Foundation
+("PSF"), and the Individual or Organization ("Licensee") accessing and
+otherwise using this software ("Python") in source or binary form and its associated documentation.
+2. Subject to the terms and conditions of this License Agreement, PSF hereby
+grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
+analyze, test, perform and/or display publicly, prepare derivative works,
+distribute, and otherwise use Python alone or in any derivative version,
+provided, however, that PSF's License Agreement and PSF's notice of copyright,
+i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+2011, 2012, 2013, 2014 Python Software Foundation; All Rights Reserved" are retained in Python alone or in any derivative version prepared by Licensee.
+
+3. In the event Licensee prepares a derivative work that is based on
+or incorporates Python or any part thereof, and wants to make
+the derivative work available to others as provided herein, then
+Licensee hereby agrees to include in any such work a brief summary of the changes made to Python.
+4. PSF is making Python available to Licensee on an "AS IS"
+basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
+IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
+DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
+FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
+INFRINGE ANY THIRD PARTY RIGHTS. 
+5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
+A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
+OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+6. This License Agreement will automatically terminate upon a material
+breach of its terms and conditions.
+7. Nothing in this License Agreement shall be deemed to create any
+relationship of agency, partnership, or joint venture between PSF and
+Licensee. This License Agreement does not grant permission to use PSF
+trademarks or trade name in a trademark sense to endorse or promote
+products or services of Licensee, or any third party.
+
+8. By copying, installing or otherwise using Python, Licensee agrees to be bound by the terms and conditions of this License
+Agreement.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/python/ipaddress/test/results-all.master	Tue Oct 11 11:55:12 2016 -0700
@@ -0,0 +1,5 @@
+...........................................................................................................................................................................................
+----------------------------------------------------------------------
+Ran 187 tests in
+
+OK
--- a/transforms/standard-python-libraries	Fri Oct 07 15:08:18 2016 -0700
+++ b/transforms/standard-python-libraries	Tue Oct 11 11:55:12 2016 -0700
@@ -8,6 +8,7 @@
 <transform depend fmri=library/python/futures-34 -> drop>
 <transform depend fmri=library/python/importlib-27 -> drop>
 <transform depend fmri=library/python/importlib-34 -> drop>
+<transform depend fmri=library/python/ipaddress-34 -> drop>
 <transform depend fmri=library/python/ordereddict-27 -> drop>
 <transform depend fmri=library/python/ordereddict-34 -> drop>
 <transform depend fmri=library/python/singledispatch-34 -> drop>