Repository: spack/spack

Issue:
Z3Config.cmake not installed due to Makefile build
After running `spack install z3` the installed files did not include the file `Z3Config.cmake`

### Steps to reproduce the issue

```console
$ spack install z3
$ find <spack install dir> -type f | grep Z3Config.cmake
<no output>
```

### Error Message
When building a CMake project with a line `find_package(Z3 REQUIRED)` the following occurs:

```console
$ spack install z3
...
$ spack load z3
$ mkdir build
$ cd build
$ cmake ..
...
CMake Error at tools/dlcomp/CMakeLists.txt:1 (find_package):
  By not providing "FindZ3.cmake" in CMAKE_MODULE_PATH this project has asked
  CMake to find a package configuration file provided by "Z3", but CMake did
  not find one.

  Could not find a package configuration file provided by "Z3" with any of
  the following names:

    Z3Config.cmake
    z3-config.cmake

  Add the installation prefix of "Z3" to CMAKE_PREFIX_PATH or set "Z3_DIR" to
  a directory containing one of the above files.  If "Z3" provides a separate
  development package or SDK, be sure it has been installed.
...
```

### Information on your system

```
$ spack debug report
* **Spack:** 0.16.2-3131-ba65cc7
* **Python:** 3.6.8
* **Platform:** linux-centos7-sandybridge
* **Concretizer:** original
```

### Additional information

- [x] I have run `spack debug report` and reported the version of Spack/Python/Platform
- [x] I have searched the issues of this repo and believe this is not a duplicate
- [x] I have run the failing commands in debug mode and reported the output

The Z3 solver has two build modes: Makefile and CMake. The README.md in the Z3 project states the following regarding CMake: "It is recommended for most build tasks, except for building OCaml bindings."

The CMake implementation was made starting with v4.5.0 of the Z3 solver.

Package changes forthcoming.


Discussion:

Resolving patch:
diff --git a/var/spack/repos/builtin/packages/z3/package.py b/var/spack/repos/builtin/packages/z3/package.py
--- a/var/spack/repos/builtin/packages/z3/package.py
+++ b/var/spack/repos/builtin/packages/z3/package.py
@@ -7,7 +7,7 @@
 from spack import *
 
 
-class Z3(MakefilePackage):
+class Z3(CMakePackage):
     """Z3 is a theorem prover from Microsoft Research.
     It is licensed under the MIT license."""
 
@@ -18,37 +18,26 @@ class Z3(MakefilePackage):
     version('4.8.8', sha256='6962facdcdea287c5eeb1583debe33ee23043144d0e5308344e6a8ee4503bcff')
     version('4.8.7', sha256='8c1c49a1eccf5d8b952dadadba3552b0eac67482b8a29eaad62aa7343a0732c3')
     version('4.5.0', sha256='aeae1d239c5e06ac183be7dd853775b84698db1265cb2258e5918a28372d4a0c')
-    version('4.4.1', sha256='50967cca12c5c6e1612d0ccf8b6ebf5f99840a783d6cf5216336a2b59c37c0ce')
-    version('4.4.0', sha256='65b72f9eb0af50949e504b47080fb3fc95f11c435633041d9a534473f3142cba')
-
-    phases = ['bootstrap', 'build', 'install']
 
     variant('python', default=True, description='Enable python binding')
-    depends_on('python', type=('build', 'run'))
+    depends_on('python', type='build', when='~python')
+    depends_on('python', type=('build', 'run'), when='+python')
     depends_on('py-setuptools', type=('run'), when='+python')
     extends('python', when='+python')
 
+    variant('gmp', default=False, description='GNU multiple precision library support')
+    depends_on('cmake@3.4:', type='build')
+    depends_on('gmp', when='+gmp', type=('build', 'link'))
+
     # Referenced: https://github.com/Z3Prover/z3/issues/1016
-    patch('fix_1016_1.patch', when='@:4.4.1')
     patch('fix_1016_2.patch', when='@4.5.0')
 
     build_directory = 'build'
 
-    def configure_args(self):
-        spec = self.spec
-
-        args = []
-
-        if spec.satisfies('+python'):
-            args.append('--python')
-            args.append(
-                '--pypkgdir=%s' % join_path(
-                    prefix.lib,
-                    'python%s' % spec['python'].version.up_to(2),
-                    'site-packages'))
-
+    def cmake_args(self):
+        args = [
+            self.define_from_variant('Z3_USE_LIB_GMP', 'gmp'),
+            self.define_from_variant('Z3_BUILD_PYTHON_BINDINGS', 'python'),
+            self.define_from_variant('Z3_INSTALL_PYTHON_BINDINGS', 'python')
+        ]
         return args
-
-    def bootstrap(self, spec, prefix):
-        options = ['--prefix={0}'.format(prefix)] + self.configure_args()
-        spec['python'].command('scripts/mk_make.py', *options)


Test patch: