Provide build_type variant for Metis. (#6808)
* Provide build_type variant for Metis. + Ideally, we would make Metis a CMakePackage, but `metis@:5` doesn't use CMake. + For now, provide a `build_type=` variant similar what is found in CMakePackage. + There is a potential for duplicate specification of `CMAKE_BUILD_TYPE` if both variants `+debug` and `build_type=` are specified. I am looking for advice on how this can be resolved. * Update metis recipe in response to flake8 and user comments. + Wrap comment lines that used more than 80 columns. + Change `+debug` variant to avoid potential for multiple `-DCMAKE_BUID_TYPE=` arguments provided to cmake. Specifying this variant no longer appends this configure option. However, if `+debug` is specified, require `build_type=Debug` to maintain expected behavior. * For metis, remove +debug variant; use build_type= instead. + Update recipe for metis@4 to extract `build_type=` values and set `OPTFLAGS` accordingly. + For metis@5:, the behavior from the previously supported variant `+debug` can be obtained with the options `+gdb build_type=Debug` * Conflicts added for metis@4 when build_type != Release|Debug. * Use spack function conflicts instead of 'raise InstallError'.
This commit is contained in:
parent
d4e4755ec9
commit
322b016230
@ -45,12 +45,25 @@ class Metis(Package):
|
|||||||
version('4.0.3', 'd3848b454532ef18dc83e4fb160d1e10')
|
version('4.0.3', 'd3848b454532ef18dc83e4fb160d1e10')
|
||||||
|
|
||||||
variant('shared', default=True, description='Enables the build of shared libraries.')
|
variant('shared', default=True, description='Enables the build of shared libraries.')
|
||||||
variant('debug', default=False, description='Builds the library in debug mode.')
|
variant('gdb', default=False, description='Enables gdb support (version 5+).')
|
||||||
variant('gdb', default=False, description='Enables gdb support.')
|
|
||||||
|
|
||||||
variant('int64', default=False, description='Sets the bit width of METIS\'s index type to 64.')
|
variant('int64', default=False, description='Sets the bit width of METIS\'s index type to 64.')
|
||||||
variant('real64', default=False, description='Sets the bit width of METIS\'s real type to 64.')
|
variant('real64', default=False, description='Sets the bit width of METIS\'s real type to 64.')
|
||||||
|
|
||||||
|
# For Metis version 5:, the build system is CMake, provide the
|
||||||
|
# `build_type` variant.
|
||||||
|
variant('build_type', default='Release',
|
||||||
|
description='The build type for the installation (only Debug or'
|
||||||
|
' Release allowed for version 4).',
|
||||||
|
values=('Debug', 'Release', 'RelWithDebInfo', 'MinSizeRel'))
|
||||||
|
|
||||||
|
# Prior to version 5, the (non-cmake) build system only knows about
|
||||||
|
# 'build_type=Debug|Release'.
|
||||||
|
conflicts('@:4.999', when='build_type=RelWithDebInfo')
|
||||||
|
conflicts('@:4.999', when='build_type=MinSizeRel')
|
||||||
|
conflicts('@:4.999', when='+gdb')
|
||||||
|
conflicts('@:4.999', when='+int64')
|
||||||
|
conflicts('@:4.999', when='+real64')
|
||||||
|
|
||||||
depends_on('cmake@2.8:', when='@5:', type='build')
|
depends_on('cmake@2.8:', when='@5:', type='build')
|
||||||
|
|
||||||
patch('install_gklib_defs_rename.patch', when='@5:')
|
patch('install_gklib_defs_rename.patch', when='@5:')
|
||||||
@ -87,12 +100,8 @@ def patch(self):
|
|||||||
@when('@:4')
|
@when('@:4')
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
# Process library spec and options
|
# Process library spec and options
|
||||||
if any('+{0}'.format(v) in spec for v in ['gdb', 'int64', 'real64']):
|
|
||||||
raise InstallError('METIS@:4 does not support the following '
|
|
||||||
'variants: gdb, int64, real64.')
|
|
||||||
|
|
||||||
options = ['COPTIONS={0}'.format(self.compiler.pic_flag)]
|
options = ['COPTIONS={0}'.format(self.compiler.pic_flag)]
|
||||||
if '+debug' in spec:
|
if spec.variants['build_type'].value == 'Debug':
|
||||||
options.append('OPTFLAGS=-g -O0')
|
options.append('OPTFLAGS=-g -O0')
|
||||||
make(*options)
|
make(*options)
|
||||||
|
|
||||||
@ -185,6 +194,11 @@ def install(self, spec, prefix):
|
|||||||
options.append('-DGKLIB_PATH:PATH=%s/GKlib' % source_directory)
|
options.append('-DGKLIB_PATH:PATH=%s/GKlib' % source_directory)
|
||||||
options.append('-DCMAKE_INSTALL_NAME_DIR:PATH=%s/lib' % prefix)
|
options.append('-DCMAKE_INSTALL_NAME_DIR:PATH=%s/lib' % prefix)
|
||||||
|
|
||||||
|
# Normally this is available via the 'CMakePackage' object, but metis
|
||||||
|
# IS-A 'Package' (not a 'CMakePackage') to support non-cmake metis@:5.
|
||||||
|
build_type = spec.variants['build_type'].value
|
||||||
|
options.extend(['-DCMAKE_BUILD_TYPE:STRING={0}'.format(build_type)])
|
||||||
|
|
||||||
if '+shared' in spec:
|
if '+shared' in spec:
|
||||||
options.append('-DSHARED:BOOL=ON')
|
options.append('-DSHARED:BOOL=ON')
|
||||||
else:
|
else:
|
||||||
@ -196,9 +210,6 @@ def install(self, spec, prefix):
|
|||||||
rpath_options.append(o)
|
rpath_options.append(o)
|
||||||
for o in rpath_options:
|
for o in rpath_options:
|
||||||
options.remove(o)
|
options.remove(o)
|
||||||
if '+debug' in spec:
|
|
||||||
options.extend(['-DDEBUG:BOOL=ON',
|
|
||||||
'-DCMAKE_BUILD_TYPE:STRING=Debug'])
|
|
||||||
if '+gdb' in spec:
|
if '+gdb' in spec:
|
||||||
options.append('-DGDB:BOOL=ON')
|
options.append('-DGDB:BOOL=ON')
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user