diff -ur misc/Python-2.7.18/setup.py misc/build/Python-2.7.18/setup.py
--- misc/Python-2.7.18/setup.py	2016-06-25 16:49:32.000000000 -0500
+++ misc/build/Python-2.7.18/setup.py	2016-09-02 17:09:20.687419000 -0500
@@ -126,39 +126,41 @@
         # system, but with only header files and libraries.
         sysroot = macosx_sdk_root()
 
-    # Check the standard locations
-    for dir in std_dirs:
+    # Check the standard directories
+    for dir in paths:
         f = os.path.join(dir, filename)
 
         if host_platform == 'darwin' and is_macosx_sdk_path(dir):
             f = os.path.join(sysroot, dir[1:], filename)
 
-        if os.path.exists(f): return []
+        if os.path.exists(f):
+	    return [dir]
 
-    # Check the additional directories
-    for dir in paths:
+    # Check the standard locations
+    for dir in std_dirs:
         f = os.path.join(dir, filename)
 
         if host_platform == 'darwin' and is_macosx_sdk_path(dir):
             f = os.path.join(sysroot, dir[1:], filename)
 
         if os.path.exists(f):
-            return [dir]
+            return []
 
     # Not found anywhere
     return None
 
 def find_library_file(compiler, libname, std_dirs, paths):
-    result = compiler.find_library_file(std_dirs + paths, libname)
+    result = compiler.find_library_file(paths+std_dirs, libname)
     if result is None:
         return None
 
     if host_platform == 'darwin':
         sysroot = macosx_sdk_root()
 
-    # Check whether the found file is in one of the standard directories
     dirname = os.path.dirname(result)
-    for p in std_dirs:
+    # Otherwise, it must have been in one of the additional directories,
+    # so we have to figure out which one.
+    for p in paths:
         # Ensure path doesn't end with path separator
         p = p.rstrip(os.sep)
 
@@ -180,23 +180,22 @@
             # vs
             #   /usr/lib/libedit.dylib
             if os.path.join(sysroot, p[1:]) == dirname:
-                return [ ]
+                return [ p ]
 
         if p == dirname:
-            return [ ]
+            return [ p ]
 
-    # Otherwise, it must have been in one of the additional directories,
-    # so we have to figure out which one.
-    for p in paths:
+    # Check whether the found file is in one of the standard directories
+    for p in std_dirs:
         # Ensure path doesn't end with path separator
         p = p.rstrip(os.sep)
 
         if host_platform == 'darwin' and is_macosx_sdk_path(p):
             if os.path.join(sysroot, p[1:]) == dirname:
-                return [ p ]
+                return [ ]
 
         if p == dirname:
-            return [p]
+            return [ ]
     else:
         assert False, "Internal error: Path not found in std_dirs or paths"
 
@@ -891,6 +892,7 @@
             exts.append( Extension('_ssl', ['_ssl.c'],
                                    include_dirs = ssl_incs,
                                    library_dirs = ssl_libs,
+                                   extra_link_args = ['-Wl,--exclude-libs,ALL'],
                                    libraries = ['ssl', 'crypto'],
                                    depends = ['socketmodule.h']), )
         else:
@@ -930,6 +931,7 @@
                 exts.append( Extension('_hashlib', ['_hashopenssl.c'],
                                        include_dirs = ssl_incs,
                                        library_dirs = ssl_libs,
+                                       extra_link_args = ['-Wl,--exclude-libs,ALL'],
                                        libraries = ['ssl', 'crypto']) )
             else:
                 print ("warning: openssl 0x%08x is too old for _hashlib" %
