summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNadeem Vawda <nadeem.vawda@gmail.com>2011-09-11 22:04:13 (GMT)
committerNadeem Vawda <nadeem.vawda@gmail.com>2011-09-11 22:04:13 (GMT)
commit64d25ddb9c31b94aadfc8c9f220b0a5759e20265 (patch)
tree442b3e50e070948f246c58618d9d6d75c809cb56
parent249ab5e8d1452ab7bc43b0f1e1221e0065d2e52d (diff)
downloadcpython-64d25ddb9c31b94aadfc8c9f220b0a5759e20265.zip
cpython-64d25ddb9c31b94aadfc8c9f220b0a5759e20265.tar.gz
cpython-64d25ddb9c31b94aadfc8c9f220b0a5759e20265.tar.bz2
Issue #12306: Add ZLIB_RUNTIME_VERSION to the zlib module.
While we're at it, also document ZLIB_VERSION. Patch by Torsten Landschoff.
-rw-r--r--Doc/library/zlib.rst21
-rw-r--r--Lib/test/test_zlib.py12
-rw-r--r--Misc/NEWS3
-rw-r--r--Modules/zlibmodule.c4
4 files changed, 40 insertions, 0 deletions
diff --git a/Doc/library/zlib.rst b/Doc/library/zlib.rst
index 54835e7..aab9ec7 100644
--- a/Doc/library/zlib.rst
+++ b/Doc/library/zlib.rst
@@ -122,6 +122,7 @@ The available exception and functions in this module are:
won't fit into memory at once. The *wbits* parameter controls the size of the
window buffer.
+
Compression objects support the following methods:
@@ -217,6 +218,26 @@ Decompression objects support the following methods and attributes:
seeks into the stream at a future point.
+Information about the version of the zlib library in use is available through
+the following constants:
+
+
+.. data:: ZLIB_VERSION
+
+ The version string of the zlib library that was used for building the module.
+ This may be different from the zlib library actually used at runtime, which
+ is available as :const:`ZLIB_RUNTIME_VERSION`.
+
+ .. versionadded:: 3.3
+
+
+.. data:: ZLIB_RUNTIME_VERSION
+
+ The version string of the zlib library actually loaded by the interpreter.
+
+ .. versionadded:: 3.3
+
+
.. seealso::
Module :mod:`gzip`
diff --git a/Lib/test/test_zlib.py b/Lib/test/test_zlib.py
index dddde47..8d137ac 100644
--- a/Lib/test/test_zlib.py
+++ b/Lib/test/test_zlib.py
@@ -13,6 +13,17 @@ except ImportError:
mmap = None
+class VersionTestCase(unittest.TestCase):
+
+ def test_library_version(self):
+ # On the build system, ZLIB_RUNTIME_VERSION should match ZLIB_VERSION.
+ # ZLIB_RUNTIME_VERSION is the actual library version while ZLIB_VERSION
+ # is the version from the header file. On the build system, the headers
+ # should match with the library exactly. At runtime, only the first
+ # digit is required to match.
+ self.assertEqual(zlib.ZLIB_RUNTIME_VERSION, zlib.ZLIB_VERSION)
+
+
class ChecksumTestCase(unittest.TestCase):
# checksum test cases
def test_crc32start(self):
@@ -647,6 +658,7 @@ LAERTES
def test_main():
support.run_unittest(
+ VersionTestCase,
ChecksumTestCase,
ChecksumBigBufferTestCase,
ExceptionTestCase,
diff --git a/Misc/NEWS b/Misc/NEWS
index d94f33c..96e9ff5 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -274,6 +274,9 @@ Core and Builtins
Library
-------
+- Issue #12306: Expose the runtime version of the zlib C library as a constant,
+ ZLIB_RUNTIME_VERSION, in the zlib module. Patch by Torsten Landschoff.
+
- Issue #12959: Add collections.ChainMap to collections.__all__.
- Issue #12567: Add curses.unget_wch() function. Push a character so the next
diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c
index f1f84e3..a6da056 100644
--- a/Modules/zlibmodule.c
+++ b/Modules/zlibmodule.c
@@ -1169,6 +1169,10 @@ PyInit_zlib(void)
if (ver != NULL)
PyModule_AddObject(m, "ZLIB_VERSION", ver);
+ ver = PyUnicode_FromString(zlibVersion());
+ if (ver != NULL)
+ PyModule_AddObject(m, "ZLIB_RUNTIME_VERSION", ver);
+
PyModule_AddStringConstant(m, "__version__", "1.0");
return m;