Provide ZLIB::ZLIB as a CMake alias when shared libraries are disabled#1086
Provide ZLIB::ZLIB as a CMake alias when shared libraries are disabled#1086ccawley2011 wants to merge 1 commit into
Conversation
|
Point 1: Why do you checkif the target exists, if you could check for the option if the target should be created? Point 2: FindZLIB tries to provide something, but the point in the named targets is to know what you link against. If you you want a static linking, there's a target. Imagine you expect dynamic linking and want to install the dll in your script, but there is none, you would have to add additional checks. Yes, with your changes in the config you mimic the old behaviour, but if someone includes the sources Idmeand them to check if there are changes. Such situations happen with apis all the time, so it's not asked too much to check if all the targets are still correct (and if you link against ZLIB:::ZLIB and don't set any options you'll have no problems in this case), and instead of checking for existing dll's I consider it better to check for the version and just use the right targets in you build instead of hoping to get sommething. |
from: https://cmake.org/cmake/help/latest/module/FindZLIB.html So having |
You mean when you So in all 3 cases you can set ZLIB_BUILD_SHARED to OFF before doing this and alias this yourself. also if consumer require to know if it is a static or a shared lib (which also can be see as an integration implementation details) you could still use Because FindZLIB line 254 sets it to UNKNOWN and you'll never know? But if you mention genex as an point, what about |
|
@madler: Have you seen this PR? |
|
I usually don't comment such things, but there are some problems with this text:
|
|
There are several CMake-based packages out there that use zlib by CMake's FIND_PACKAGE(zlib) module, maybe setting ZLIB_USE_STATIC_LIBS and link target ZLIB::ZLIB (which refers to zlibstatic if ZLIB_USE_STATIC_LIBS is turned on). Looking at the changes in 1.3.2, this would break compatibility, as mentioned above, since as a static link target ZLIB::ZLIBSTATIC is introduced. Why not making this "symmetric" with respect to static/shared libraries and providing the following explicit link targets ZLIB::ZLIBSTATIC for the static library and ZLIB::ZLIB as a "convenience" alias pointing to the shared library (if ZLIB_USE_STATIC_LIBS is not set) and to the static library if ZLIB_USE_STATIC_LIBS is set? This would enable legacy packages to continue to compile while allowing them to migrate to the new targets ZLIB::ZLIBSTATIC and ZLIB::ZLIBSHARED. Currently with 1.3.2, changes would requiring breaking changes which are out of control for developers just using them in a development stack. |
ZLIB::ZLIB was intended to continue to work, so it doesn't change something for most Linux Distros where shared is default. Static is way too often used to stick to a version independet from system, often combined with a vendored copy so no adjustement for changes in newer releases is needed. So current design is encouraging to use shared libs.
Because we all know devs are lazy, if there is a way to keep it working without modification, the modification won't happen (also some just don't know about the changes or see them real late, as your late reply suggests. What do you mean with out of their control? If there are deps that are actively maintained, just open a report to let them know it's a problem for you (maybe with patch). If the deps are unmaintained legacy code noone cares about either replace the dep, or revive the project and help rescuing projects you rely on. |
This matches the behaviour of
FindZLIBfrom standard CMake installations.