Open bartlettroscoe opened 9 years ago
If I may comment on this from the perspective of a (distro) package maintainer:
Every piece of software has a bunch of dependencies, in former times only listed in a README, and more recently rigorously checked at configure time. Some projects ship third-party software (for example gmsh with the idea to make it easier for users to install the software. Unfortunately, in all cases I'm aware of, the bundled software is barely updated and doesn't encourage pushing changes upstream. This way, factual forks of the dependent libraries are created.
Constrasting this, PETSc does not bundle its dependencies, but has its (custom) build system download them for you from the appropriate source. From a package maintainer's point of view, it's not quite clear why the fetch-&-build of TPL should be part of the build system for the actual code. Because, in fact, what you're doing is the job of a distribution (dependency managment, installation etc.).
A cleaner and equally easy way helping the user install TPLs is to provide a separate script that installs all deps (e.g., install_trilinos_dependencies.sh
). This way, the lazy user can use this convenience script, or install the dependencies via the distribution (e.g., apt-get install libsuperlu-dev libnetcdf-dev [...]
). FEniCS goes that way.
The advantage that I see in this approach is a separation of concerns and consequently an easier-to-maintain codebase.
@bartlettroscoe Any progress? 😬
@bartlettroscoe Any progress? 😬
@sethrj, not in a couple of weeks. Need to get a few other things out of the way before getting back into this. Sorry for the delays.
Ross, I hate to keep bugging you, but is there any way of bumping the priority on this?
Ross, I hate to keep bugging you, but is there any way of bumping the priority on this?
@sethrj, I am working on getting some other deliverables pushed back so I can work on this sooner rather than later. Also, I may be getting some help with this trough ECP xSDK.
Relates to:
@bartlettroscoe I was asked about this at a meeting today. Is there any update or current estimate as to when this work will happen? I am just passing on a question I received. Thanks.
@bartlettroscoe I was asked about this at a meeting today. Is there any update or current estimate as to when this work will happen? I am just passing on a question I received. Thanks.
@jwillenbring I am wrapping up some work with SPARC ATDM Trilinos configuration over the next week or so (see ATDV-408) and then will will be working on this and #299 at a rate of 50% of my time until the basics are done.
With the merge commit 2566a2b00987d18a779c2e789edb886a12d81e50, the outstanding branch '63-merge-tpls-packages-1' is now on TriBITS 'master'. Note that there is now the beginnings of an appendix for a TriBITS System Maintainers Guide:
which includes a macro/function call graph for the generation of the package dependency data structures:
which includes file names and line numbers.
The notes that I took in the creation and merging of the branch are given below.
@keitat,
I posted https://github.com/trilinos/Trilinos/pull/9171 to merge the updated TriBITS 'master' to Trilinos 'develop' to get it tested to make sure this incremental refactoring does not break anything. Can you please approve that PR so it can merge?
I want to be merging these incremental refactorings as we go so we don't take any huge steps and then have huge debugging tasks in case something major breaks.
I did another round of refactoring to further clean up the code that creates the package dependency graph in PR #374. I merged that to 'master' and created the Trilinos PR https://github.com/trilinos/Trilinos/pull/9178 to get this tested and merged there.
I think this is enough of #63 and now I need to do some of #299 to simplify how targets are managed before moving forward.
We are finally getting to the finish line (at least for Use Case 3: Configure/build pointing to a subset of already installed TriBITS packages in same repo). A significant issue I realized is that the way that you are told to create <Package>Config.cmake
files will create unusable installations of packages by Spack (see CMake Issue #24378). I will create a TriBITS GitHub issue shortly that addresses this with TriBITS. (But other CMake-based Spack packages will need to do something likewise.)
Parent Issue:
367
Child Issues:
377
562
563
Blocked by:
299
Description
The current design of TriBITS has TriBITS Packages and TriBITS TPLs and distinct separate entities. TriBITS Packages are always built from source in the current TriBITS design while TriBITS TPLs are always pre-built and just pointed to at configure time. This has been a successful model for Trilinos, CASL VERA, and other related projects for several years. However, this model does not scale well to larger meta-projects and does not provide sufficient flexibility to handle more efficient alternative development workflows and other use cases.
The basic idea being proposed in this story is to extend TriBITS to allow some pre-built (and possibly installed) TriBITS packages to be treated as TPLs and then configure/build some downstream TriBITS packages from source. This would be accomplished through the usage of
<Package>Config.cmake
files to get the needed information. Likewise, this work would allow some TPLs could be built from inside of the TriBITS project like other TriBITS packages.The details of the of the plan, the motivating use cases, and the design implications are given in this Google Doc.
This refactoring should implement and respect this proposed standard for
<Package>Config.cmake
files.Remaining Tasks