Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 74b8a16

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

File tree

4 files changed

+31
-5
lines changed

4 files changed

+31
-5
lines changed

.appveyor.yml

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

build_alllocal.cmd

Lines changed: 2 additions & 2 deletions
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%\libpng_static.lib lib\libpng.lib
2525

2626
:: Make the header files and the rest of the static libs available during the build
2727
:: CONDA_PREFIX is a env variable which is set to the currently active environment path
Lines changed: 19 additions & 0 deletions
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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1022,7 +1022,14 @@ def get_extension(self):
10221022
]
10231023
ext = make_extension('matplotlib._png', sources)
10241024
pkg_config.setup_extension(
1025-
ext, 'libpng', default_libraries=['png', 'z'],
1025+
ext, 'libpng',
1026+
default_libraries=(
1027+
['png', 'z'] if os.name == 'posix' else
1028+
# libpng upstream names their lib libpng16.lib, not png.lib.
1029+
# zlib upstream names their lib zlib.lib, not z.lib.
1030+
['libpng16', 'zlib'] if os.name == 'nt' else
1031+
[]
1032+
),
10261033
alt_exec='libpng-config --ldflags')
10271034
Numpy().add_flags(ext)
10281035
return ext

0 commit comments

Comments
 (0)