(original) (raw)

changeset: 100320:db6c1308eb31 parent: 100317:91eb7ae951a1 parent: 100319:b0490b8af7aa user: Ned Deily nad@python.org date: Thu Feb 25 00:59:16 2016 +1100 files: Misc/NEWS setup.py description: Issue #25136: merge from 3.5 diff -r 91eb7ae951a1 -r db6c1308eb31 Lib/distutils/ccompiler.py --- a/Lib/distutils/ccompiler.py Wed Feb 24 08:50:59 2016 -0500 +++ b/Lib/distutils/ccompiler.py Thu Feb 25 00:59:16 2016 +1100 @@ -875,9 +875,9 @@ def library_filename(self, libname, lib_type='static', # or 'shared' strip_dir=0, output_dir=''): assert output_dir is not None - if lib_type not in ("static", "shared", "dylib"): + if lib_type not in ("static", "shared", "dylib", "xcode_stub"): raise ValueError( - "'lib_type' must be \"static\", \"shared\" or \"dylib\"") + "'lib_type' must be \"static\", \"shared\", \"dylib\", or \"xcode_stub\"") fmt = getattr(self, lib_type + "_lib_format") ext = getattr(self, lib_type + "_lib_extension") diff -r 91eb7ae951a1 -r db6c1308eb31 Lib/distutils/unixccompiler.py --- a/Lib/distutils/unixccompiler.py Wed Feb 24 08:50:59 2016 -0500 +++ b/Lib/distutils/unixccompiler.py Thu Feb 25 00:59:16 2016 +1100 @@ -76,7 +76,9 @@ static_lib_extension = ".a" shared_lib_extension = ".so" dylib_lib_extension = ".dylib" + xcode_stub_lib_extension = ".tbd" static_lib_format = shared_lib_format = dylib_lib_format = "lib%s%s" + xcode_stub_lib_format = dylib_lib_format if sys.platform == "cygwin": exe_extension = ".exe" @@ -255,12 +257,28 @@ def find_library_file(self, dirs, lib, debug=0): shared_f = self.library_filename(lib, lib_type='shared') dylib_f = self.library_filename(lib, lib_type='dylib') + xcode_stub_f = self.library_filename(lib, lib_type='xcode_stub') static_f = self.library_filename(lib, lib_type='static') if sys.platform == 'darwin': # On OSX users can specify an alternate SDK using # '-isysroot', calculate the SDK root if it is specified # (and use it further on) + # + # Note that, as of Xcode 7, Apple SDKs may contain textual stub + # libraries with .tbd extensions rather than the normal .dylib + # shared libraries installed in /. The Apple compiler tool + # chain handles this transparently but it can cause problems + # for programs that are being built with an SDK and searching + # for specific libraries. Callers of find_library_file need to + # keep in mind that the base filename of the returned SDK library + # file might have a different extension from that of the library + # file installed on the running system, for example: + # /Applications/Xcode.app/Contents/Developer/Platforms/ + # MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/ + # usr/lib/libedit.tbd + # vs + # /usr/lib/libedit.dylib cflags = sysconfig.get_config_var('CFLAGS') m = re.search(r'-isysroot\s+(\S+)', cflags) if m is None: @@ -274,6 +292,7 @@ shared = os.path.join(dir, shared_f) dylib = os.path.join(dir, dylib_f) static = os.path.join(dir, static_f) + xcode_stub = os.path.join(dir, xcode_stub_f) if sys.platform == 'darwin' and ( dir.startswith('/System/') or ( @@ -282,6 +301,7 @@ shared = os.path.join(sysroot, dir[1:], shared_f) dylib = os.path.join(sysroot, dir[1:], dylib_f) static = os.path.join(sysroot, dir[1:], static_f) + xcode_stub = os.path.join(sysroot, dir[1:], xcode_stub_f) # We're second-guessing the linker here, with not much hard # data to go on: GCC seems to prefer the shared library, so I'm @@ -289,6 +309,8 @@ # ignoring even GCC's "-static" option. So sue me. if os.path.exists(dylib): return dylib + elif os.path.exists(xcode_stub): + return xcode_stub elif os.path.exists(shared): return shared elif os.path.exists(static): diff -r 91eb7ae951a1 -r db6c1308eb31 Misc/NEWS --- a/Misc/NEWS Wed Feb 24 08:50:59 2016 -0500 +++ b/Misc/NEWS Thu Feb 25 00:59:16 2016 +1100 @@ -763,6 +763,7 @@ - Issue #26268: Update OS X 10.5 installer and Windows builds to use OpenSSL 1.0.2f. +- Issue #25136: Support Apple Xcode 7's new textual SDK stub libraries. Windows ------- diff -r 91eb7ae951a1 -r db6c1308eb31 setup.py --- a/setup.py Wed Feb 24 08:50:59 2016 -0500 +++ b/setup.py Thu Feb 25 00:59:16 2016 +1100 @@ -136,6 +136,22 @@ p = p.rstrip(os.sep) if host_platform == 'darwin' and is_macosx_sdk_path(p): + # Note that, as of Xcode 7, Apple SDKs may contain textual stub + # libraries with .tbd extensions rather than the normal .dylib + # shared libraries installed in /. The Apple compiler tool + # chain handles this transparently but it can cause problems + # for programs that are being built with an SDK and searching + # for specific libraries. Distutils find_library_file() now + # knows to also search for and return .tbd files. But callers + # of find_library_file need to keep in mind that the base filename + # of the returned SDK library file might have a different extension + # from that of the library file installed on the running system, + # for example: + # /Applications/Xcode.app/Contents/Developer/Platforms/ + # MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/ + # usr/lib/libedit.tbd + # vs + # /usr/lib/libedit.dylib if os.path.join(sysroot, p[1:]) == dirname: return [ ] /nad@python.org