Skip to content

Commit d6aeade

Browse files
committed
When linking against libpng/zlib on Windows, use upstream lib names.
See changelog for details.
1 parent 146de7f commit d6aeade

File tree

4 files changed

+30
-5
lines changed

4 files changed

+30
-5
lines changed

.appveyor.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ install:
7777
# Let the install prefer the static builds of the libs
7878
- set LIBRARY_LIB=%CONDA_PREFIX%\Library\lib
7979
- mkdir lib || cmd /c "exit /b 0"
80-
- copy /y %LIBRARY_LIB%\zlibstatic.lib lib\z.lib
81-
- copy /y %LIBRARY_LIB%\libpng_static.lib lib\png.lib
80+
- copy /y %LIBRARY_LIB%\zlibstatic.lib lib\zlib.lib
81+
- copy /y %LIBRARY_LIB%\libpng16_static.lib lib\libpng16.lib
8282
# These z.lib / png.lib are not static versions but files which end up as
8383
# dependencies to the dll file. This is fine for the conda build, but not here
8484
# and for the wheels

build_alllocal.cmd

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ IF NOT DEFINED CONDA_PREFIX (
2020
:: copy the libs which have "wrong" names
2121
set LIBRARY_LIB=%CONDA_PREFIX%\Library\lib
2222
mkdir lib || cmd /c "exit /b 0"
23-
copy %LIBRARY_LIB%\zlibstatic.lib lib\z.lib
24-
copy %LIBRARY_LIB%\libpng_static.lib lib\png.lib
23+
copy %LIBRARY_LIB%\zlibstatic.lib lib\zlib.lib
24+
copy %LIBRARY_LIB%\libpng16_static.lib lib\libpng16.lib
2525

2626
:: build the target
2727
python setup.py %TARGET%
+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
Changes to the Windows build
2+
````````````````````````````
3+
4+
Previously, when building the :mod:`matplotlib._png` extension, the build
5+
script would add "png" and "z" to the extensions ``.libraries`` attribute (if
6+
pkg-config information is not available, which is in particular the case on
7+
Windows).
8+
9+
In particular, this implies that the Windows build would look up files named
10+
``png.lib`` and ``z.lib``; but neither libpng upstream nor zlib upstream
11+
provides these files by default. (On Linux, this would look up ``libpng.so``
12+
and ``libz.so``, which are indeed standard names.)
13+
14+
Instead, on Windows, we now look up ``libpng16.lib`` and ``zlib.lib``, which
15+
*are* the upstream names for the shared libraries (as of libpng 1.6.x).
16+
17+
For a statically-linked build, the upstream names are ``libpng16_static.lib``
18+
and ``zlibstatic.lib``; one still needs to manually rename them if such a build
19+
is desired.

setupext.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -645,7 +645,13 @@ def get_extension(self):
645645
ext, 'libpng',
646646
atleast_version='1.2',
647647
alt_exec=['libpng-config', '--ldflags'],
648-
default_libraries=['png', 'z'])
648+
default_libraries=(
649+
['png', 'z'] if os.name == 'posix' else
650+
# libpng upstream names their lib libpng16.lib, not png.lib.
651+
# zlib upstream names their lib zlib.lib, not z.lib.
652+
['libpng16', 'zlib'] if os.name == 'nt' else
653+
[]
654+
))
649655
add_numpy_flags(ext)
650656
return ext
651657

0 commit comments

Comments
 (0)