Conversation
There was a problem hiding this comment.
You have modified or added at least one portfile where deprecated functions are used.
Details
If you feel able to do so, please consider migrating them to the new functions:
vcpkg_install_cmake -> vcpkg_cmake_install (from port vcpkg-cmake)
vcpkg_build_cmake -> vcpkg_cmake_build (from port vcpkg-cmake)
vcpkg_configure_cmake -> vcpkg_cmake_configure (Please remove the option PREFER_NINJA) (from port vcpkg-cmake)
vcpkg_fixup_cmake_targets -> vcpkg_cmake_config_fixup (from port vcpkg-cmake-config)
In the ports that use the new function, you have to add the corresponding dependencies:
{
"name": "vcpkg-cmake",
"host": true
},
{
"name": "vcpkg-cmake-config",
"host": true
}The following files are affected:
ports/openexr3/portfile.cmake
You have modified or added at least one vcpkg.json where you should check the license field.
Details
If you feel able to do so, please consider adding a "license" field to the following files:
ports/openexr3/vcpkg.json
Valid values for the license field can be found in the documentation
ports/openexr3/portfile.cmake
Outdated
There was a problem hiding this comment.
This usually needs to go to OPTIONS_DEBUG because it is unused in release builds.
There was a problem hiding this comment.
Setting CMAKE_DEBUG_POSTFIX is disallowed by maintainer guidelines unless upstream sets it themselves.
There was a problem hiding this comment.
Well, upstream sets CMAKE_DEBUG_POSTFIX=_d anyways. IIRC there was an issue why it make sense to keep it explicit (like use before set), but with the new version, this might be gone.
There was a problem hiding this comment.
Yes I kept that from the other port, I don't know if it is needed or not.
What I noticed was that the libs are exported with the version appended, i.e. like libOpenEXR-3_1, so I was imagining that there was some problem with maybe parsing the the "d" in that case and "_d" worked better. But it's just speculation.
There was a problem hiding this comment.
I'm the one that added the _d originally in OpenEXR's own cmake files ~ I couldn't find a consensus on Windows, and when it came down to d or _d, I followed the boost convention, sort of, by separating qualifiers with an underscore, rather than simply appending qualifiers.
ports/openexr3/portfile.cmake
Outdated
There was a problem hiding this comment.
I guess that both port openexr and port openexr3 would like to provide config for package OpenEXR. But only one can install the config to share/openexr. Given that CMake can deal with different versions for config, this could be solved but needs extra work.
There was a problem hiding this comment.
Oh yes sorry I haven't thought of that.
Maybe it will be better to export it in lib/cmake/${port}/ but I guess that CMake won't be able to recognize openexr3 as a valid name to find the config file...
|
This new approach makes sense to me, it'll unblock things nicely. Hopefully there's some way that projects depending on OpenEXR 3 (both within and outside of the vcpkg ecosystem) can discover openexr3 without needing to patch their own cmakefiles. If there's something that can be done on the OpenEXR side of the equation to make things easier, please feel free to suggest it. |
|
The CMake config problem might be resolved. |
|
I underestimated the complexity of having both versions available at the same time. if (EXISTS "${CURRENT_INSTALLED_DIR}/share/openexr")
message(FATAL_ERROR "OpenEXR 2 is installed, please uninstall and try again:\n vcpkg remove openexr")
endif()and, mutatis mutandis, the same in openexr 2. There are not so many ports that depend on openexr (although a big one, opencv), so hopefully they will soon manage to upgrade to openexr 3. What do you guys think? |
|
I vote for just going with the fatal error. In the wild, openexr 2 and 3 do coexist, but never in the same root ~ people often push one of them down, e.g. /my/local/include/openexr2/openexr, and add /my/local/include/openexr2 as needed as an additional system dir. I'm not proposing any action here, just making a note. The fatal error on installing both seems reasonable. |
This is used only as an execption in vcpkg. It excludes one version from CI, and every other port depending on the excluded version. And it may confuse users who pull both versions via transitive dependencies.
This could be a workaround if |
|
I think it would be better to add judgment to both portfile.cmake. |
NO. We certainly don't want to skip the new version. |
|
Do you mean skip openexr or make both ports work at the same time? |
Skip openexr, the old port. Which has nearly the same effect as simply upgrading openexr, and add the consumers which can't be upgraded to the fail list. Unless they can opt out of the openexr dependency. |
|
@simogasp Could you please modify this PR with following suggestion:
|
|
@Cheney-W I'll do that. Just to be sure thought, shall I do something like this in the ci.baseline.txt and keep the current fail cases of openexr even for openexr3 Is it so? Thanks! |
|
Yes |
* add openexr3 * made openexr 2 and 3 mutually exclusive * only openexr in the ci.baseline
There was a problem hiding this comment.
You have modified or added at least one portfile where deprecated functions are used.
Details
If you feel able to do so, please consider migrating them to the new functions:
vcpkg_install_cmake -> vcpkg_cmake_install (from port vcpkg-cmake)
vcpkg_build_cmake -> vcpkg_cmake_build (from port vcpkg-cmake)
vcpkg_configure_cmake -> vcpkg_cmake_configure (Please remove the option PREFER_NINJA) (from port vcpkg-cmake)
vcpkg_fixup_cmake_targets -> vcpkg_cmake_config_fixup (from port vcpkg-cmake-config)
In the ports that use the new function, you have to add the corresponding dependencies:
{
"name": "vcpkg-cmake",
"host": true
},
{
"name": "vcpkg-cmake-config",
"host": true
}The following files are affected:
ports/openexr/portfile.cmake
You have modified or added at least one vcpkg.json where you should check the license field.
Details
If you feel able to do so, please consider adding a "license" field to the following files:
ports/openexr/vcpkg.json
Valid values for the license field can be found in the documentation
|
the problem is that all the ports depending on openexr (most notably opencv) will now fail on CI. PS |
|
@simogasp The reason no one depends on openexr3 is because the projects that need to move to openexr3 are blocked due to the unavailability of openexr3 on vcpkg. Everyone depending on vcpkg supporting openexr3 and no longer being stuck on openexr 2 thanks you for your efforts and patience on this. Please don't skip openexr3! |
There was a problem hiding this comment.
You have modified or added at least one portfile where deprecated functions are used.
Details
If you feel able to do so, please consider migrating them to the new functions:
vcpkg_install_cmake -> vcpkg_cmake_install (from port vcpkg-cmake)
vcpkg_build_cmake -> vcpkg_cmake_build (from port vcpkg-cmake)
vcpkg_configure_cmake -> vcpkg_cmake_configure (Please remove the option PREFER_NINJA) (from port vcpkg-cmake)
vcpkg_fixup_cmake_targets -> vcpkg_cmake_config_fixup (from port vcpkg-cmake-config)
In the ports that use the new function, you have to add the corresponding dependencies:
{
"name": "vcpkg-cmake",
"host": true
},
{
"name": "vcpkg-cmake-config",
"host": true
}The following files are affected:
ports/openexr/portfile.cmake
You have modified or added at least one vcpkg.json where you should check the license field.
Details
If you feel able to do so, please consider adding a "license" field to the following files:
ports/openexr/vcpkg.json
Valid values for the license field can be found in the documentation
|
@simogasp Thanks for your PR!
|
I started 2) with just opencv4 because it's the big one. Still waiting for CI to finish but there is an early error on microsoft.vcpkg.pr (x64_windows) with this message Any clue? |
That is what I meant when I pointed to the effects of
I'm not aware of such a command. But there is: Studying the dependencies, But this is just the tip of the iceberg. These are 13 ports which directly depend on ... This is not meant to disccourage your effort. I would rather see it as an encouragement to gain more contributors. |
This would mean to keep the testing of legacy configurations (which are already known to work now) while blocking tests of PRs which migrate openexr consumers to openexr3 (which really need testing). This doesn't make sense to me. |
Extending my previous comment: You updated |
|
what a rabbit hole I put myself in! 😆 It seems impossible to update only a bunch of ports to openexr 3 without skipping all the others in the CI. This is the original list chausner made to which I added my attempts (OK/NOK notes)
|
|
@simogasp Could we convert this PR into draft first? |
|
design question: maybe it's better to move current openexr to openexr2, make openexr a metaport that just depends on openexr3 and that's it? so that an overlay just has to replace the dependency of openexr to openexr2 |
In a different way that's the original spirit of this PR. The problem is, even with your proposal, people would like to have openexr 3 in the CI, which is a problem because other ports require openexr 2 to build in CI and we cannot have both versions built at the same time |
|
if they cannot made be compatible to co-exist, then yes, every port should be made compatible with openexr3 before the upgrade. Same situation for ffmpeg5 |
|
Alternately, vcpkg should remove the ports that don't consistently update their dependencies. When they update, they ought to be re-added. |
|
I would like to see this moved forward, integration the patches to consuming ports from #20957.
I don't think this a viable option in general. It is close to feature development via patches.
Looking into the portfile, it turns out that openexr is only needed for two features, and these features are only built in
This is actually forwarding to opencv4 which is said to be OK. The dependency is behind an optional feature.
Not built in CI. The dependency is behind an optional feature.
If optional, it is not blocking vcpkg CI. So what is actually lost be moving forward, given that there are manifest mode and overlay ports for users that need an older configuration? |
|
I see that |
|
Ping @simogasp for response. Is work still being done for this PR? |
Not at the moment. I'm on vacation and without a proper PC. I'll try to have another go in 20 days or so. |
|
New direct update PR: #26862. |
|
replaced by #26862. |
Following the discussion in #20957 with @JackBoosY @chausner this PR introduces the openexr port for its version 3 as a separate port
openexr3.OpenEXR 3 introduced many changes in the way it is built, from adopting modern CMake to splitting out a library, Imath, for which a proper port already exists.
Some ports still rely on 2.x versions of openexr and they cannot be upgraded without introducing a lot of patchworks or changing the source code. On the other hand, other ports would upgrade to version 3.x and they are blocked
The rationale behind this PR is that like, e.g. opencv, is to separate the two incompatible versions and manage the two separately until version 2.x will be phased out at some point or all the ports will have upgraded their source code to version 3.
Which triplets are supported/not supported? Have you updated the CI baseline?
all triplets seem to work, the baseline has been updated
Does your PR follow the maintainer guide?
Yes
If you have added/updated a port: Have you run
./vcpkg x-add-version --alland committed the result?Yes
If you are still working on the PR, open it as a Draft: https://github.blog/2019-02-14-introducing-draft-pull-requests/