From 7d9f2bf4ed89823b4f6c515b7f4e2994bf58c3a9 Mon Sep 17 00:00:00 2001 From: "Adam J. Stewart" Date: Thu, 3 Sep 2020 17:31:00 -0500 Subject: depends_on cannot handle ^ sigil (#18220) * depends_on cannot handle ^ sigil * cardioid+mfem+cuda requires hypre+cuda * Document this limitation * Move warning message to Known Issues docs * Better handling of parmetis dep --- lib/spack/docs/known_issues.rst | 29 +++++++++++++++++++++- .../repos/builtin/packages/cardioid/package.py | 4 +-- .../repos/builtin/packages/parmetis/package.py | 3 +++ var/spack/repos/builtin/packages/phist/package.py | 4 +-- var/spack/repos/builtin/packages/warpx/package.py | 2 +- 5 files changed, 36 insertions(+), 6 deletions(-) diff --git a/lib/spack/docs/known_issues.rst b/lib/spack/docs/known_issues.rst index 531b3bcc5a..accec2422b 100644 --- a/lib/spack/docs/known_issues.rst +++ b/lib/spack/docs/known_issues.rst @@ -14,7 +14,7 @@ problems if you encounter them. Variants are not properly forwarded to dependencies --------------------------------------------------- -**Status:** Expected to be fixed in the next release +**Status:** Expected to be fixed by Spack's new concretizer Sometimes, a variant of a package can also affect how its dependencies are built. For example, in order to build MPI support for a package, it may @@ -48,3 +48,30 @@ A workaround is to explicitly activate the variants of dependencies as well: See https://github.com/spack/spack/issues/267 and https://github.com/spack/spack/issues/2546 for further details. + +----------------------------------------------- +depends_on cannot handle recursive dependencies +----------------------------------------------- + +**Status:** Not yet a work in progress + +Although ``depends_on`` can handle any aspect of Spack's spec syntax, +it currently cannot handle recursive dependencies. If the ``^`` sigil +appears in a ``depends_on`` statement, the concretizer will hang. +For example, something like: + +.. code-block:: python + + depends_on('mfem+cuda ^hypre+cuda', when='+cuda') + + +should be rewritten as: + +.. code-block:: python + + depends_on('mfem+cuda', when='+cuda') + depends_on('hypre+cuda', when='+cuda') + + +See https://github.com/spack/spack/issues/17660 and +https://github.com/spack/spack/issues/11160 for more details. diff --git a/var/spack/repos/builtin/packages/cardioid/package.py b/var/spack/repos/builtin/packages/cardioid/package.py index 6395620d6e..b3effc28e4 100644 --- a/var/spack/repos/builtin/packages/cardioid/package.py +++ b/var/spack/repos/builtin/packages/cardioid/package.py @@ -25,8 +25,8 @@ class Cardioid(CMakePackage): depends_on('lapack') depends_on('mpi') depends_on('cuda', when="+cuda") - depends_on('mfem+mpi+superlu-dist+lapack', when="+mfem~cuda") - depends_on('mfem+mpi+superlu-dist+lapack^hypre+cuda', when="+mfem+cuda") + depends_on('mfem+mpi+superlu-dist+lapack', when="+mfem") + depends_on('hypre+cuda', when="+mfem+cuda") depends_on('cmake@3.1:', type='build') depends_on('perl', type='build') diff --git a/var/spack/repos/builtin/packages/parmetis/package.py b/var/spack/repos/builtin/packages/parmetis/package.py index 076e447877..d1f9c434af 100644 --- a/var/spack/repos/builtin/packages/parmetis/package.py +++ b/var/spack/repos/builtin/packages/parmetis/package.py @@ -22,10 +22,13 @@ class Parmetis(CMakePackage): variant('shared', default=True, description='Enables the build of shared libraries.') variant('gdb', default=False, description='Enables gdb support.') + variant('int64', default=False, description='Sets the bit width of METIS\'s index type to 64.') depends_on('cmake@2.8:', type='build') depends_on('mpi') depends_on('metis@5:') + depends_on('metis+int64', when='+int64') + depends_on('metis~int64', when='~int64') patch('enable_external_metis.patch') # bug fixes from PETSc developers diff --git a/var/spack/repos/builtin/packages/phist/package.py b/var/spack/repos/builtin/packages/phist/package.py index cdbd84ed7f..79af4d4cbe 100644 --- a/var/spack/repos/builtin/packages/phist/package.py +++ b/var/spack/repos/builtin/packages/phist/package.py @@ -118,8 +118,8 @@ class Phist(CMakePackage): depends_on('ghost', when='kernel_lib=ghost') depends_on('trilinos+anasazi+belos+teuchos', when='+trilinos') - depends_on('parmetis ^metis+int64', when='+parmetis +int64') - depends_on('parmetis ^metis~int64', when='+parmetis ~int64') + depends_on('parmetis+int64', when='+parmetis+int64') + depends_on('parmetis~int64', when='+parmetis~int64') # Fortran 2003 bindings were included in version 1.7, previously they # required a separate package diff --git a/var/spack/repos/builtin/packages/warpx/package.py b/var/spack/repos/builtin/packages/warpx/package.py index b29733cf56..9cabbc4d73 100644 --- a/var/spack/repos/builtin/packages/warpx/package.py +++ b/var/spack/repos/builtin/packages/warpx/package.py @@ -51,7 +51,7 @@ class Warpx(MakefilePackage): depends_on('openpmd-api +mpi', when='+openpmd +mpi') depends_on('ascent', when='+ascent') depends_on('ascent +cuda', when='+ascent backend=cuda') - depends_on('ascent +mpi ^conduit~hdf5', when='+ascent +mpi') + depends_on('ascent +mpi', when='+ascent +mpi') resource(name='amrex', git='https://github.com/AMReX-Codes/amrex.git', -- cgit v1.2.3-60-g2f50