From 236b34f3df38d0f44ada307ece354f92a96a6a91 Mon Sep 17 00:00:00 2001
From: "Nichols A. Romero" <naromero77@users.noreply.github.com>
Date: Fri, 9 Nov 2018 10:16:11 -0600
Subject: [PATCH] Introduce fftw-api virtual package for Intel-MKL and FFTW
 (#9618)

* Introduce FFTW2 and FFT3 providers for Intel-MKL and FFTW Spack packages.

* make fftw default package for fftw-api virtual package

* virtual package test assertion now provides location of default virtual packages.

* Change name of virtual package to fftw-api and used versioned interface.
---
 etc/spack/defaults/packages.yaml                      | 1 +
 lib/spack/spack/test/package_sanity.py                | 7 +++++--
 var/spack/repos/builtin/packages/fftw/package.py      | 3 +++
 var/spack/repos/builtin/packages/intel-mkl/package.py | 1 +
 4 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/etc/spack/defaults/packages.yaml b/etc/spack/defaults/packages.yaml
index 5c38ddb683..aaab12b3ef 100644
--- a/etc/spack/defaults/packages.yaml
+++ b/etc/spack/defaults/packages.yaml
@@ -22,6 +22,7 @@ packages:
       blas: [openblas]
       daal: [intel-daal]
       elf: [elfutils]
+      fftw-api: [fftw]
       gl: [mesa, opengl]
       glu: [mesa-glu, openglu]
       golang: [gcc]
diff --git a/lib/spack/spack/test/package_sanity.py b/lib/spack/spack/test/package_sanity.py
index f31209c702..a8c84bd70d 100644
--- a/lib/spack/spack/test/package_sanity.py
+++ b/lib/spack/spack/test/package_sanity.py
@@ -47,9 +47,12 @@ def test_all_virtual_packages_have_default_providers():
     defaults = spack.config.get('packages', scope='defaults')
     default_providers = defaults['all']['providers']
     providers = spack.repo.path.provider_index.providers
-
+    default_providers_filename = \
+        spack.config.config.scopes['defaults'].get_section_filename('packages')
     for provider in providers:
-        assert provider in default_providers
+        assert provider in default_providers, \
+            "all providers must have a default in %s" \
+            % default_providers_filename
 
 
 def test_package_version_consistency():
diff --git a/var/spack/repos/builtin/packages/fftw/package.py b/var/spack/repos/builtin/packages/fftw/package.py
index 0d424ce029..d3d8795fee 100644
--- a/var/spack/repos/builtin/packages/fftw/package.py
+++ b/var/spack/repos/builtin/packages/fftw/package.py
@@ -72,6 +72,9 @@ class Fftw(AutotoolsPackage):
     # https://github.com/FFTW/fftw3/commit/902d0982522cdf6f0acd60f01f59203824e8e6f3
     conflicts('%gcc@8:8.9999', when="@3.3.7")
 
+    provides('fftw-api@2', when='@2.1.5')
+    provides('fftw-api@3', when='@3:')
+
     @property
     def libs(self):
 
diff --git a/var/spack/repos/builtin/packages/intel-mkl/package.py b/var/spack/repos/builtin/packages/intel-mkl/package.py
index e11b4c8e47..4b04e97d34 100644
--- a/var/spack/repos/builtin/packages/intel-mkl/package.py
+++ b/var/spack/repos/builtin/packages/intel-mkl/package.py
@@ -53,6 +53,7 @@ class IntelMkl(IntelPackage):
     provides('lapack')
     provides('scalapack')
     provides('mkl')
+    provides('fftw-api@3', when='@2017:')
 
     if sys.platform == 'darwin':
         # there is no libmkl_gnu_thread on macOS
-- 
GitLab