Build
-----
-- The Windows build now includes OpenSSL 1.0.1g
++- Issue #16537: Check whether self.extensions is empty in setup.py. Patch by
++ Jonathan Hosmer.
+
-- Issue #21285: Refactor and fix curses configure check to always search
- in a ncursesw directory.
+- Issue #22359: Remove incorrect uses of recursive make. Patch by Jonas
+ Wagner.
+
+- Issue #21958: Define HAVE_ROUND when building with Visual Studio 2013 and
+ above. Patch by Zachary Turner.
+
+- Issue #18093: the programs that embed the CPython runtime are now in a
+ separate "Programs" directory, rather than being kept in the Modules
+ directory.
+
+- Issue #15759: "make suspicious", "make linkcheck" and "make doctest" in Doc/
+ now display special message when and only when there are failures.
+
+- Issue #21141: The Windows build process no longer attempts to find Perl,
+ instead relying on OpenSSL source being configured and ready to build. The
+ ``PCbuild\build_ssl.py`` script has been re-written and re-named to
+ ``PCbuild\prepare_ssl.py``, and takes care of configuring OpenSSL source
+ for both 32 and 64 bit platforms. OpenSSL sources obtained from
+ svn.python.org will always be pre-configured and ready to build.
+
+- Issue #21037: Add a build option to enable AddressSanitizer support.
+
+- Issue #19962: The Windows build process now creates "python.bat" in the
+ root of the source tree, which passes all arguments through to the most
+ recently built interpreter.
+
+- Issue #21285: Refactor and fix curses configure check to always search
+ in a ncursesw directory.
- Issue #15234: For BerkelyDB and Sqlite, only add the found library and
include directories if they aren't already being searched. This avoids
build_ext.build_extensions(self)
- longest = max([len(e.name) for e in self.extensions])
+ for ext in self.extensions:
+ self.check_extension_import(ext)
+
- if self.failed:
- longest = max(longest, max([len(name) for name in self.failed]))
+ longest = 0
+ if self.extensions:
+ longest = max([len(e.name) for e in self.extensions])
+ if self.failed or self.failed_on_import:
+ all_failed = self.failed + self.failed_on_import
+ longest = max(longest, max([len(name) for name in all_failed]))
def print_three_column(lst):
lst.sort(key=str.lower)