-
Notifications
You must be signed in to change notification settings - Fork 970
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
"Case insensitive filesystem can't manage this" #1557
Comments
I have just tried a Is it possible that you had tried another package recipe, that was still in your local cache? It might happen that you installed some Did it fail at the very end? Can you please copy the output lines before that? What is the output of Try clearing your cache with |
Strange. I applied your suggestion and now I'm getting a quite different error:
|
Which conan are you running (installed with pip, the Win installer..)? Pip installer much recommended. In which python version? |
Any way the find the Conan version from cmd line ie. |
|
Sorry for the late reply. My python is version 3.5.3, conan is version 0.25.1 |
Ok, I see. It is a issue in the package recipe, which is not compatible with python3. I have proposed a fix as a PR to the original recipe in xmar/conan-opencv#1, but it is simple if you want to fork it and apply it yourself: libs_opencv_win = [n + self.opencv_version_suffix + debug_suffix for n in libs_opencv]
libs_3rdparty_win = [n + debug_suffix for n in libs_3rdparty] As this is not a conan issue, but a package recipe issue, I think we can close it here, and keep conversation in xmar/conan-opencv#1 if necessary. |
Thank you!
…On Tue, Aug 1, 2017 at 10:41 AM, James ***@***.***> wrote:
Ok, I see. It is a issue in the package recipe, which is not compatible
with python3. I have proposed a fix as a PR to the original recipe in
xmar/conan-opencv#1 <xmar/conan-opencv#1>, but it
is simple if you want to fork it and apply it yourself:
libs_opencv_win = [n + self.opencv_version_suffix + debug_suffix for n in libs_opencv]
libs_3rdparty_win = [n + debug_suffix for n in libs_3rdparty]
As this is not a conan issue, but a package recipe issue, I think we can
close it here, and keep conversation in xmar/conan-opencv#1
<xmar/conan-opencv#1> if necessary.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<#1557 (comment)>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AAwiiOnWL2bsI83rdhrLxhg79dPlxuidks5sTuSlgaJpZM4Ons0k>
.
|
Good, closing it now, thanks |
Not sure if it is appropriate to resurrect this issue, but I'm having the exact same error. We have a company internal package of openssl ("openssl/1.0.2m@user/channel") that I have in my local cache. Now i want to use "Qt/5.11@bincrafters/stable" with option openssl enabled. This adds a "ERROR: Requested 'OpenSSL/1.0.2l@conan/stable' but found case incompatible 'openssl' From a user perspective, this does not seem to be appropriate behavior, because I cannot really control the naming decisions of different package authors. Wouldn't it make sense to ignore the case on case insensitive filesystems? |
Hi @Blubbz0r The problem with ignoring the case in Windows, is that it would be a totally assimetric behavior than in other OSs. Other OS that are case sensitive (and conan package references are case sensitive too) will have a dependency graph with 2 different dependencies, one will be the "openssl/1.0..." package and the other the "OpenSSL/1.0...." package. They are different nodes in the graph, with different libraries, etc. For sure this can be problematic, is something that typically is not wanted. But still, for some extreme cases, it is possible. Personally, I think maybe it could have been better, but at the time it wasn't an issue, and now it can be changed without breaking. It is something we will consider to change for the next 2.0 release, but that will take some time. In the meantime, what conan does is to error in Windows, is the best that could be done. I would say that the best workaround right now would be to rename your local OpenSSL package to match the case. Thanks very much for the feedback! |
@memsharded, I just had a similar issue, but on macOS. I had the Catch2 package installed from How to reproduce:
Full output:
I initially reported the issue at catchorg/Catch2#1501 |
Having a similar issue with Boost:
When using uppercase I get this:
I'm on the following system:
As this seems to be a package issue I'll reference this to the corresponding package as well. Just added this here because it seems to be a reoccuring issue that perhaps needs to be solved (or at least handled) within conan directly. Perhaps it's possible to notify the package maintainer before uploading that cases are mixed... Update:
Update2: |
@memsharded are there any news on this topic? This is currently the number one paint point with using conan for us. We are working on Windows only (DEV workstations as well as CI). Some time ago we decided to start using packages from conan and bincrafters to avoid having to maintain our own packages (which was another big pain point back then). For example, we started using the Qt package from bincrafters. However, they changed the name of the package to all lowercase recently. For us this basically means that we cannot upgrade anymore if we want to a) keep working on different projects on DEV workstations and b) be able to build older versions. The only workarounds seem to be a) maintain projects on our own again or b) find ways to cleanly separate each project and their dependencies on all DEV and CI machines. None of these seem to be reasonable alternatives to force on each user. |
@memsharded We have the same problem with OpenCV + CMake. Recently we used our company internal modules only. Now we want to use packages from conan-center too but are unable to do so because of different uppercase/lowercase writings. Will this issue be fixed in the near future? Until then we are unable to use above mentioned packages from conan-center. |
I understood that this is an issue because of backwards compatibility. It's essentially a user problem to use mixed case and installations for others could be broken when Conan implements a fix that e.g. switches every package name to lower case internally. That being said: couldn't this be solved with an opt-in config value? Another idea: check if uppercase is used, if that's the case then convert the package name to lower and suffix it with |
I agree this is still an open pain, more challenging than it seems, but lets at least re-open it, and assign it to Conan 2.0 for further discussion of what could be done. |
There are some other points to think about. variation pointsAt first of all IMHO a Conan reference has enough variation points with "name", "version", "user" and "channel". Having an additional variation point by providing the ability to use different writings (upper, lower, camel case) is not really what a "normal" user expects and is very error prone. Additionally some other aspects contradicts it. ServerUsing the Conan Python server on Unix one can easily have different packages for upper, lower, camel case. On Windows it is not possible (not tested, but I assume it concerning the used conan cache layout) BUT: The user itself might not know on which OS the server is installed. CMakeBesides the server issues described above there is another more important point. All generated CMake files contains the package name in upper case. So it is completely impossible (even on Unix) to have different packages with the same name but different writing in one graph. integration of dependencies from different teamsTeam A uses "Boost/1.2.3@abc/stable" and Team B uses "boost/1.2.3@abc/stable" as requirements for their products. Team C has to integrate both products. This will end up in an error. Now two different situations may happen:
This can be easily detected by checksum of the binary package. So
conclusionInternal lower case handling of the references would solve the most of the above described problems. The migration of existing packages in cache (only required on Unix) might be easy by simply rename the directories. |
Thanks @Aalmann for the analysis. It is completely correct. We will be working on this to be fixed, the alternatives would be:
I am not sure if you are suggesting in your conclussion the first one or the second one, as in your |
@memsharded I think it is more the second one of your alternatives. |
In one computer
This would have to store in the conan cache, in the metadata somewhere, In another computer
Now, it will have For these reasons, right now I tend to balance towards the first one, keep it as simple as possible, forcing everything to lowercase. That is just a very preliminary position, might change when we actually consider all the implications and how to migrate towards such solution. |
Ok understand what you mean. Not sure if it is really a problem, because same confusing situation would happen if both users create a package with exact the same name. And if everything stays as is right now, they are getting another confusing error with no solution available to fix this problem (as described above). |
Well, yes, it is possible to introduce changes that could be considered non-breaking if we use configuration opt-ins, and then tell that as you opted-in, you agreed that something was changing. So, in my opinion, this is massively underestimating the development and maintenance effort of this feature. There are tons of things that can and will go wrong, overwhelming (even more, if that is possible) the maintainers in support, bug fixing, releasing new patches versions... Just to cite a few things that come to my mind:
Hyrum's law, all of these scenarios will inevitably happen. This is not counting the regressions and bugs that will be introduced while coding this feature. But another important problem with this huge effort is that it keeps perpetuating something that is not a safe behavior:
So the current proposal for Conan future is to make package names case insensitive, not to allow and manage different casing as different packages. And the most straightforward, robust and understandable way for the users, is to force all package names to be lowercase always. At the moment this is the only possibility I see that will keep the sanity of both users and maintainers. |
I agree with everything you said and would never agree to allow case sensitivity by default. However, by insisting on all packages to always be lower-case will make it impossible to upgrade lots of internal packages across various companies. For example, we have over 200 conan packages in PascalCase name and it's completely unfeasable for them to be renamed into snake_case or kebab-case. However, all those names are internal for the company and none of them clash with open source packages. The difference is only for internal packages of open-source software, like OpenCV, ZLib and OpenSSL, which were made before those ended up in conan-center. Those are the only that are problematic. So, one solution would be for conan to add the opt-in behaviour describe above, with a disclaimer that this is a very dangerous option and may break badly and that should only be used internally in companies during transition period to lowercase package naming. Open source software and packages that are submitted to conan-center must be validated to be lowercase only. Another solution would be for conan client to treat Also, to be completely sure, we can add second solution as opt-in/beta for conan v1.30 (or some other v1.x release) and ask users for feedback and if it works OK then turn that by default on in conan v2.0. What do you think about that? |
But that will be another, bigger problem. If companies cannot convert their packages to lowercase for Conan 2.0, how will they upgrade to Conan 2.0, that might require bigger changes in their recipes (to use Conan 2.0 is a great opportunity for cleaning the house, getting rid of technical debt and bad defaults. But if full backwards compatibility is required, then there is little we could do, let's continue doing incremental Conan 1.X releases, and lets keep adding debt and slowing development. If changing the package names to lowercase is "unfeasible", then is it really worth kicking off Conan 2.0, that will require bigger changes than that? To summarize:
This decision, as many times, is a trade-off. I believe that going all lowercase will indeed be very beneficial for users, despite the added migration inconvenience. Just my opinion, will probably ask for feedback in the Conan 2.0 Tribe. |
They won't unless there will be a possibility for co-existence of Conan v1.x and Conan v2.x projects. No company will migrate all their packages to lowercase and to other conan v2.0 features all at once. The transition will need to happen gradually, one project at a time, during a certain period. This requires a period where single conan cache has the support for both old and new packages (i.e. OpenCV and opencv, etc.).
I agree with that. But keep in mind that lot's of houses are "too big" to be cleaned at once. You need to start with one room, then move on to the next and so on... And during that period you will be in a state where some rooms are cleaned and others are not.
I wouldn't say that full backwards compatibility is required. Such a thing would definitely make Conan v2.0 pointless. However, co-existance of v1.x and v2.0 packages for different projects on the same machine is required. Without this, the transition to v2.0 would be "all or nothing", and most companies will choose the "nothing" option. Just remember what happened with pyhon 2 -> python3 upgrade - more than 10 years have passed and some projects are still locked to python 2. It would be shame to let happen the same to Conan. Let me clarify - I don't expect for conan v1.x project to be able to consume conan v2.0 packages or vice versa. I'm quite OK with breaking this. But, in order to migrate 200+ packages from conan v1 to conan v2 I'll have to start one package at the time, updating dependencies. Thus, the "incompatibility border line" will spread from a single package at first to the majority of the packages in the future. But during that, the developers on the most downstream packages should be able to work on them and make product releases, while having a separate development branch on their machine where they could work on migration to conan v2.0 and using v2.x-compatible dependencies. This means that, if I today rename my internal Of course, one possibility would be to maintain two local caches on each machine - but this looks to me like tool's job, not a developer's job (maybe conan v2.0 can use different default locations for cache than v1.0? That would immediately make v1 packages "invisible" to v2 projects and vice-versa).
I agree. But we need to find a trade-off to minimize the migration inconvenience, not create another pyhon2 -> python3 fiasco.
About that, has the mailing started? I didn't get any notification about any message. |
We need an option to enable case insensitivity in conan 1.x as we are hitting the wall on our heads right now with conan-center recent premature name changes. they should never have started doing that until this future of the platform was decided within conan. While I am sure anyone can postulate a thousand 'potential' issues with adding an option here and now about it the truth is the option is needed here and now. keep it simple and just lowercase all names until conan 2.0 arrives. please let's not let minutia details of hypothetical problems obscure common sense. |
Is it possible someone in the know please do whatever it takes to release this as a hot-fix from 1.30.1? please. pretty please even. i want to love conan, i really do, honestly |
I am afraid this is not possible. I would really love a "keep it simple" strategy, some hotfix that could be done, but this is a massive, structural issue, that cannot be solved that easily, without a huge breaking of users. The decentralization, including the fact that other third party servers beside Artifactory and conan_server implement the protocol makes it even harder, if possible at all. Just making all package names internally lowercase will not fix it, it would break every user that they have a "OpenCV/2.4" package in their server, for example. Unless I am missing something, but I have been thinking about this for a while, and I honestly see no way a hotfix can be implemented. I honestly think this would be the one of the most challenging things to implement right now in Conan, and delivering it robustly could take more than 6 months, in the best case scenario.
This is emotional blackmail :) :) :) I think the best we could do now is to propose some mitigation strategies:
Please let us know about which are the things that are biting you more regarding the different casing of packages, give more details about the broken bits, and we will try to prioritize that as much as possible. |
We have forked copies of older recipes etc internally but it seems even not using the newer package is causing conan errors for user of the older packages with the non lowercase names now that a package with lowercase has been put to our art factory. OpenSSL is the big breaker currently now that it is 'OpenSSL' and 'openssl'. our teams pull from our art factory across a bunch of remotes in it and lot of those other 3rd party packages these teams still use from before this was a thing and they have no interest in updating them all. |
maybe the right soultion is to go backwards with the conan-center strategy and rename all packages back to how they were until conan 2.0 is out? It seems their renaming is pre-mature change that is causing the systemic breakage across the board for us... ie they should wait for conan 2.0 to start using the new conventions. |
I was under the impression that as long as your project didn't use any package revisions with the mixed naming as dependencies it wouldn't cause a problem but it appears to error out in conan just trying to find the old package because of the newer named one is in the remote even when they aren't using the newer one. |
any settings can skip this error? |
I faced with a similar problem: macOS, Case insensitive FS
And it produces As result I managed to fix this with this macro Is there a better option to fix this problem? |
I can't beat this issue |
Can we perhaps address this issue in the opposite direction? With This is enough to get conan to install both e.g. The only catch, for now you have to create these 2 directories by hand side-by-side, as conan now incorrectly complains about the file system being case-insensitive while the relevant part no longer is. I don't know how this is accessible from Python, but via the |
Conan is case-sensitive, OpenSSL and openssl are completely different packages. They cannot override each other, only the exact same package name can be overriden. The possibilities are either stop using legacy packages (those with uppercase letters) or other packages using the legacy ones (typically from other repos other than ConanCenter), ConanCenter started to use lowercase only more than 1 year ago, or to do not upgrade and do not use newer packages from ConanCenter.
Not worth the specifics of dealing with Windows APIs, too much effort and is typically a fragile approach. In any case, the redesign of the cache for Conan 2.0 is already happening: #8796. Conan 2.0 will use lowercase package names only (with an opt-out, conan-io/tribe#17, and still different casing will mean completely different packages, but the new cache design will allow to store them for all OS without issues.) |
after lots of discussions, and submitting this to the Tribe 2.0 (conan-io/tribe#17) the final conclusion was:
This has been already implemented in develop2, will be released next 2.0.0-alpha2 (the alpha1 is already released), so I think this can be closed now. |
We managed to make it work like this: |
^^^ is interesting bandaid, thanks! Although hard to implement on shared build servers. For the record - I have to state that current approach to fix this by Conan2.0 is troubled. The acceptance of Conan 2.0 will be hard if not impossible in real life complex environments (agree with @DoDoENT here). I work in a place running 100s of projects with 100s of sw engineers with uncounted internal and external dependencies and lots of cross dependent subcomponents. It's a gridlock. All on different schedule cycles. All targeting multiple OSes, many with cross-compiling builds. I do not see how we could move to Conan 2.0. And if we ever tried it would be multi-month effort with all projects halted. I do not see it happening :-( Completely agree with @keysight-daryl here as well. A small mod to fix Windows cache (opt-in) proposed earlier would do a lot good in the mean time. We may end up forking conan for this to survive - but this would create a big maintenance problem. Alternatively, some form of declarative "name equivalence" that each conanfiles could state? Say "OpenSSL=openssl" hence considering these "equivalent" and thus not distinguishing these two as separate components for storage and version resolution purpose. This would also help in other cases where the component's name was changed but component is still the same (although that may have cmake implications). |
Ah! The name equivalence could be achieved with |
Unfortunately does not work on Windows 11, as fsutil now requires the directory to be empty when using |
@eclazi in any case, ConanCenter has been mandating all lowercase package names since years, and Conan 2.0 will also force lowercase for all packages. Start to convert your package names to lowercase to be ready. |
They are other reasons that make the .conan/data dir not sharable at all between different versions of a project/branch:
These points are enough to make the case-sensitivity problem just go away, as you just can't "share" the data dir anyway. |
Some hints following @johan-boule points:
This is fixed by 2.0, the cache there will be multi-revision
In 2.0, at the moment, it is still not thread-safe, but this is something that will be tried in the future |
I am fine to migrate all packages to lowercase, however the main problem for me is that when trying to build older versions it will need the mixed case packages (OpenSSL looking at you). I need to maintain the ability to build these older versions. |
Conan 2.0 will no longer be able to build legacy recipes that have not been modernized in 1.X to the new tools (https://docs.conan.io/en/latest/conan_v2.html). If the recipes need to be updated, fixing the name shouldn't be an issue anyway? |
Yeah, when Conan 2.0 is released and stable, I'm sure we will address that during if we decide to migrate. But for now we're using Conan 1.x |
We expect 2.0, hopefully, before EOY. Also, all necessary recipe upgrades have been backported and can already be implemented in 1.X, and that is the recommended approach anyway in 1.X, because the legacy tools will not longer be maintained. Changing the package names to lowercase can also be done (and should be done) in 1.X, not in 2.0, because the idea is that updated recipes will be compatible 1.X<->2.0. |
I tried to install OpenCV3 as a dependency and found
OpenCV/3.2.0@xmar/stable
, which I added to myrequires
section.There was no package available for my platform (Windows 10, Visual C++ 2015 32-bit), so I went with
--build missing
. The build seems to have run to completion, but right at the end, I got:(I tried other OpenCV packages, but they all had problems of one sort or another. I think this one is the most promising, if I can find a solution to the above problem.)
The text was updated successfully, but these errors were encountered: