-
-
Notifications
You must be signed in to change notification settings - Fork 5k
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
Add PCMSolver #22286
Add PCMSolver #22286
Conversation
Hi! This is the friendly automated conda-forge-linting service. I wanted to let you know that I linted all conda-recipes in your PR ( Here's what I've got... For recipes/pcmsolver:
For recipes/pcmsolver:
Documentation on acceptable licenses can be found here. |
Hi! This is the friendly automated conda-forge-linting service. I wanted to let you know that I linted all conda-recipes in your PR ( Here's what I've got... For recipes/pcmsolver:
For recipes/pcmsolver:
Documentation on acceptable licenses can be found here. |
Hi! This is the friendly automated conda-forge-linting service. I wanted to let you know that I linted all conda-recipes in your PR ( Here's what I've got... For recipes/pcmsolver:
|
Hi! This is the friendly automated conda-forge-linting service. I just wanted to let you know that I linted all conda-recipes in your PR ( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It looks like your python module is pure python. If so, Could you please separate the python module into a noarch: python
output so that it is built once instead of for each python version?
An example recipe of this is tomopy.
I'm not exactly sure of the dependency relationship between your various outputs, but you would have two or three outputs: pcmsolver, libpcm, pcmsolver-python(?).
recipes/pcmsolver/meta.yaml
Outdated
doc_source_url: https://github.com/PCMSolver/pcmsolver/tree/master/doc | ||
license: LGPL-3.0-only | ||
license_url: https://opensource.org/license/lgpl-3-0/ | ||
license_file: LICENSE |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You need to list the license files of the projects in /external, they are not all LGPL.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good catch, I never noticed libtaylor
was brought in as a header-only library.
- Catch -- only used in tests so never becomes part of the project, so I didn't add its license
- eigen -- I switched to forcing it to detect the conda pkg, so the external/ copy no longer used
- boost -- same situation as eigen
- libtaylor -- MIT
Then I started hunting through the source a little more and found 10 in total, so I added a THIRD-PARTY-LICENSE file to the upstream repo to cover them all.
recipes/pcmsolver/meta.yaml
Outdated
dev_url: https://github.com/PCMSolver/pcmsolver | ||
doc_url: https://pcmsolver.readthedocs.io/en/stable/ | ||
doc_source_url: https://github.com/PCMSolver/pcmsolver/tree/master/doc | ||
license: LGPL-3.0-only |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use "AND" to include the license types of the projects in /external
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGPL3 + MIT + MIT-0 should cover it.
Ordinarily I'm all for multiple outputs so the user can choose the base library or the language bindings. This project's an odd case where the python files are parsing helpers for the standard input mode of the compiled library (https://pcmsolver.readthedocs.io/en/stable/users/input.html#input-description). So, by my understanding, the full library plus py helpers are the only package that's useful to users. I could still split them up with a dummy (=user never directly installs) py package, but I think that's going to be hard to bring about cleanly and still do the main ctest testing in build.sh/bld.bat that itself needs Python (https://github.com/PCMSolver/pcmsolver/blob/master/tests/input/input_cpcm.cpp#L42-L48). I understand the CI time minimization motivation, but this project is in maintenance mode (last release in 2020 https://github.com/PCMSolver/pcmsolver/tags), so it's not going to be eating up resources. I don't like to push back on such a reasonable request, but I don't think this is a great candidate for a split-output recipe. What do you think? |
Hi! This is the friendly automated conda-forge-linting service. I wanted to let you know that I linted all conda-recipes in your PR ( Here's what I've got... For recipes/pcmsolver:
For recipes/pcmsolver:
|
Looks like the python scripts are pre-processors/parsers for the We can also ask conda to do the splitting if the build system isn't set up to break the installation into multiple steps. I've added a commit which demonstrates this kind of syntax. You will need to move some of the existence tests around and add platform selectors so that libpcm is correctly split on Windows. You'll also need to use the canonical repository for the source download not your personal one. Conda recipes can apply git patches if needed. |
It's actually the run_pcm binary that's optional, and the python scripts are the parsers for the library-without-binary. As far as I know, one uses the API for the overall commands and the Python for the options parsing. I suspect this came about so the project could service multiple downstream packages that were in different languages and very set in their ways. But I shouldn't be troubling you with all that. I'll fix it up so it looks more canonical.
Will do. Your proposal is certainly the more canonical packaging arrangement.
Ok, I'll drop it all into a patch. I think the upstream dev / co-recipe-maintainer will mint a v1.2.4 once the buildsystem changes settle down. Thanks for all your comments! |
Hi! This is the friendly automated conda-forge-linting service. I just wanted to let you know that I linted all conda-recipes in your PR ( |
I think your concerns are addressed, @carterbox, and this is ready for consideration again. No particular urgency on this PR. I'm curious to see how a noarch generates here, as each arch has a different build string for the py package. |
@conda-forge/help-c-cpp, please review |
In case you, too, are worried about selectors in a noarch like https://github.com/conda-forge/staged-recipes/pull/22286/files#diff-793925cb8d7cb1c1f77b1a259178a638e058b7f01abf7a1b60d91127c8994b1eR41-R54 (the windows tests don't work without them), I can see a few strategies:
I'm glad to do however you advise, @carterbox . Sorry this package is so peculiar. |
Because the recipe has arch-specific outputs (libpcm), the noarch: python package (pcmsolver) will be built on all platforms. If the package hashes collide, then there will be only pcmssolver variant available for download. This is fine if the noarch packages are being built correctly because they will be valid installs on all platforms. We can download the artifacts from the builds on azure to check if this is the case. If the packages are different, then we go with Option 1 (one pcmsolver for each platform shared between many python versions). |
The contents of the noarch package generated by Linux seems correct. Let's just check that the package hashes are the same for all platforms from the logs. |
@loriab, I'm pretty sure one noarch package will work for all platforms. If you have problems, revert to Option 1 by removing the custom build string and adding
To the run requirements. |
Sorry I missed your recent messages, @carterbox. Thanks for sharing the info on noarch strategies. I'll test pcmsolver with psi4 to confirm the unified py build string is acting as it ought and, if not, switch to the |
PCMSolver is a quantum chemistry library with parts in C++, Fortran, and Python. Pretty much this recipe is RTG, but a few things I need to address before requesting review.
Checklist
Source is from official source.(Yes, approximately. It's the latest in the last release series plus some Windows, syntax, and cmake modernizations cmake modernization to 1.2.x PCMSolver/pcmsolver#203)If static libraries are linked in, the license of the static library is packaged.(Static libs are purged)url
) rather than a repo (e.g.git_url
) is used in your recipe (see here for more details).