Updated and fixed the Scotch package.
- Fixed a bug that was causing shared library usage to fail when linking with another application. - Updated the repository URL to allow for more general version downloading. - Added installation support for version 5.1.10b. - Cleaned up the installation file to make it a bit easier to follow and modify.
This commit is contained in:
parent
ea408cc0d0
commit
7e6be184bc
@ -4,85 +4,90 @@
|
|||||||
class Scotch(Package):
|
class Scotch(Package):
|
||||||
"""Scotch is a software package for graph and mesh/hypergraph
|
"""Scotch is a software package for graph and mesh/hypergraph
|
||||||
partitioning, graph clustering, and sparse matrix ordering."""
|
partitioning, graph clustering, and sparse matrix ordering."""
|
||||||
|
|
||||||
homepage = "http://www.labri.fr/perso/pelegrin/scotch/"
|
homepage = "http://www.labri.fr/perso/pelegrin/scotch/"
|
||||||
url = "http://gforge.inria.fr/frs/download.php/file/34099/scotch_6.0.3.tar.gz"
|
url = "http://gforge.inria.fr/frs/download.php/latestfile/298/scotch_6.0.3.tar.gz"
|
||||||
list_url = "http://gforge.inria.fr/frs/?group_id=248"
|
list_url = "http://gforge.inria.fr/frs/?group_id=248"
|
||||||
|
|
||||||
version('6.0.3', '10b0cc0f184de2de99859eafaca83cfc')
|
version('6.0.3', '10b0cc0f184de2de99859eafaca83cfc')
|
||||||
|
version('5.1.10b', '9b8622b39c141ecaca4a46298486fd99')
|
||||||
|
|
||||||
variant('mpi', default=False, description='Activate the compilation of PT-Scotch')
|
variant('mpi', default=False, description='Activate the compilation of PT-Scotch')
|
||||||
variant('compression', default=True, description='Activate the posibility to use compressed files')
|
variant('compression', default=True, description='Activate the posibility to use compressed files')
|
||||||
variant('esmumps', default=False, description='Activate the compilation of the lib esmumps needed by mumps')
|
variant('esmumps', default=False, description='Activate the compilation of the lib esmumps needed by mumps')
|
||||||
variant('shared', default=True, description='Build shared libraries')
|
variant('shared', default=True, description='Build shared libraries')
|
||||||
|
|
||||||
depends_on('mpi', when='+mpi')
|
|
||||||
depends_on('zlib', when='+compression')
|
|
||||||
depends_on('flex')
|
depends_on('flex')
|
||||||
depends_on('bison')
|
depends_on('bison')
|
||||||
|
depends_on('mpi', when='+mpi')
|
||||||
|
depends_on('zlib', when='+compression')
|
||||||
|
|
||||||
def compiler_specifics(self, makefile_inc, defines):
|
def validate(self, spec):
|
||||||
if self.compiler.name == 'gcc':
|
# NOTE : Scotch v6.0.0 and older have separate tar files for their esmumps-
|
||||||
defines.append('-Drestrict=__restrict')
|
# compatible versions. In any normal circumstance, it would be better just
|
||||||
elif self.compiler.name == 'intel':
|
# to use these tar files since they're more comprehensive, but they
|
||||||
defines.append('-restrict')
|
# unfortunately have very strange URLs that are non-uniform. For the time
|
||||||
|
# being, I'm going to just use the '~esmumps' URLs that are uniform for
|
||||||
makefile_inc.append('CCS = $(CC)')
|
# the sake of simplicity.
|
||||||
|
if spec.satisfies('@:6.0.0') and '+esmumps' in spec:
|
||||||
if '+mpi' in self.spec:
|
raise RuntimeError('The "+esmumps" variant is only supported for Scotch v6.0.1+.')
|
||||||
makefile_inc.extend([
|
|
||||||
'CCP = %s' % os.path.join(self.spec['mpi'].prefix.bin, 'mpicc'),
|
|
||||||
'CCD = $(CCP)'
|
|
||||||
])
|
|
||||||
else:
|
|
||||||
makefile_inc.extend([
|
|
||||||
'CCP = mpicc', # It is set but not used
|
|
||||||
'CCD = $(CCS)'
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def library_build_type(self, makefile_inc, defines):
|
|
||||||
makefile_inc.extend([
|
|
||||||
'LIB = .a',
|
|
||||||
'CLIBFLAGS = ',
|
|
||||||
'RANLIB = ranlib',
|
|
||||||
'AR = ar',
|
|
||||||
'ARFLAGS = -ruv '
|
|
||||||
])
|
|
||||||
|
|
||||||
@when('+shared')
|
|
||||||
def library_build_type(self, makefile_inc, defines):
|
|
||||||
makefile_inc.extend([
|
|
||||||
'LIB = .so',
|
|
||||||
'CLIBFLAGS = -shared -fPIC',
|
|
||||||
'RANLIB = echo',
|
|
||||||
'AR = $(CC)',
|
|
||||||
'ARFLAGS = -shared $(LDFLAGS) -o'
|
|
||||||
])
|
|
||||||
|
|
||||||
def extra_features(self, makefile_inc, defines):
|
|
||||||
ldflags = []
|
|
||||||
|
|
||||||
if '+compression' in self.spec:
|
|
||||||
defines.append('-DCOMMON_FILE_COMPRESS_GZ')
|
|
||||||
ldflags.append('-L%s -lz' % (self.spec['zlib'].prefix.lib))
|
|
||||||
|
|
||||||
defines.append('-DCOMMON_PTHREAD')
|
|
||||||
ldflags.append('-lm -lrt -pthread')
|
|
||||||
|
|
||||||
makefile_inc.append('LDFLAGS = %s' % ' '.join(ldflags))
|
|
||||||
|
|
||||||
def patch(self):
|
def patch(self):
|
||||||
makefile_inc = []
|
makefile_inc = []
|
||||||
defines = [
|
cflags = [
|
||||||
|
'-O3',
|
||||||
'-DCOMMON_RANDOM_FIXED_SEED',
|
'-DCOMMON_RANDOM_FIXED_SEED',
|
||||||
'-DSCOTCH_DETERMINISTIC',
|
'-DSCOTCH_DETERMINISTIC',
|
||||||
'-DSCOTCH_RENAME',
|
'-DSCOTCH_RENAME',
|
||||||
'-DIDXSIZE64' ]
|
'-DIDXSIZE64'
|
||||||
|
]
|
||||||
|
|
||||||
self.library_build_type(makefile_inc, defines)
|
## Library Build Type ##
|
||||||
self.compiler_specifics(makefile_inc, defines)
|
|
||||||
self.extra_features(makefile_inc, defines)
|
if '+shared' in self.spec:
|
||||||
|
makefile_inc.extend([
|
||||||
|
'LIB = .so',
|
||||||
|
'CLIBFLAGS = -shared -fPIC',
|
||||||
|
'RANLIB = echo',
|
||||||
|
'AR = $(CC)',
|
||||||
|
'ARFLAGS = -shared $(LDFLAGS) -o'
|
||||||
|
])
|
||||||
|
cflags.append('-fPIC')
|
||||||
|
else:
|
||||||
|
makefile_inc.extend([
|
||||||
|
'LIB = .a',
|
||||||
|
'CLIBFLAGS = ',
|
||||||
|
'RANLIB = ranlib',
|
||||||
|
'AR = ar',
|
||||||
|
'ARFLAGS = -ruv '
|
||||||
|
])
|
||||||
|
|
||||||
|
## Compiler-Specific Options ##
|
||||||
|
|
||||||
|
if self.compiler.name == 'gcc':
|
||||||
|
cflags.append('-Drestrict=__restrict')
|
||||||
|
elif self.compiler.name == 'intel':
|
||||||
|
cflags.append('-restrict')
|
||||||
|
|
||||||
|
makefile_inc.append('CCS = $(CC)')
|
||||||
|
makefile_inc.append('CCP = %s' %
|
||||||
|
(os.path.join(self.spec['mpi'].prefix.bin, 'mpicc') if '+mpi' in self.spec else 'mpicc'))
|
||||||
|
makefile_inc.append('CCD = $(CCS)')
|
||||||
|
|
||||||
|
## Extra Features ##
|
||||||
|
|
||||||
|
ldflags = []
|
||||||
|
|
||||||
|
if '+compression' in self.spec:
|
||||||
|
cflags.append('-DCOMMON_FILE_COMPRESS_GZ')
|
||||||
|
ldflags.append('-L%s -lz' % (self.spec['zlib'].prefix.lib))
|
||||||
|
|
||||||
|
cflags.append('-DCOMMON_PTHREAD')
|
||||||
|
ldflags.append('-lm -lrt -pthread')
|
||||||
|
|
||||||
|
makefile_inc.append('LDFLAGS = %s' % ' '.join(ldflags))
|
||||||
|
|
||||||
|
## General Features ##
|
||||||
|
|
||||||
makefile_inc.extend([
|
makefile_inc.extend([
|
||||||
'EXE =',
|
'EXE =',
|
||||||
@ -93,18 +98,19 @@ def patch(self):
|
|||||||
'MKDIR = mkdir',
|
'MKDIR = mkdir',
|
||||||
'MV = mv',
|
'MV = mv',
|
||||||
'CP = cp',
|
'CP = cp',
|
||||||
'CFLAGS = -O3 %s' % (' '.join(defines)),
|
'CFLAGS = %s' % ' '.join(cflags),
|
||||||
'LEX = %s -Pscotchyy -olex.yy.c' % os.path.join(self.spec['flex'].prefix.bin , 'flex'),
|
'LEX = %s -Pscotchyy -olex.yy.c' % os.path.join(self.spec['flex'].prefix.bin , 'flex'),
|
||||||
'YACC = %s -pscotchyy -y -b y' % os.path.join(self.spec['bison'].prefix.bin, 'bison'),
|
'YACC = %s -pscotchyy -y -b y' % os.path.join(self.spec['bison'].prefix.bin, 'bison'),
|
||||||
'prefix = %s' % self.prefix,
|
'prefix = %s' % self.prefix
|
||||||
''
|
|
||||||
])
|
])
|
||||||
|
|
||||||
with working_dir('src'):
|
with working_dir('src'):
|
||||||
with open('Makefile.inc', 'w') as fh:
|
with open('Makefile.inc', 'w') as fh:
|
||||||
fh.write('\n'.join(makefile_inc))
|
fh.write('\n'.join(makefile_inc))
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
|
self.validate(spec)
|
||||||
|
|
||||||
targets = ['scotch']
|
targets = ['scotch']
|
||||||
if '+mpi' in self.spec:
|
if '+mpi' in self.spec:
|
||||||
targets.append('ptscotch')
|
targets.append('ptscotch')
|
||||||
@ -115,12 +121,10 @@ def install(self, spec, prefix):
|
|||||||
targets.append('ptesmumps')
|
targets.append('ptesmumps')
|
||||||
|
|
||||||
with working_dir('src'):
|
with working_dir('src'):
|
||||||
for app in targets:
|
for target in targets:
|
||||||
make(app, parallel=(not app=='ptesmumps'))
|
make(target, parallel=(target!='ptesmumps'))
|
||||||
|
|
||||||
|
|
||||||
install_tree('bin', prefix.bin)
|
install_tree('bin', prefix.bin)
|
||||||
install_tree('lib', prefix.lib)
|
install_tree('lib', prefix.lib)
|
||||||
install_tree('include', prefix.include)
|
install_tree('include', prefix.include)
|
||||||
install_tree('man/man1', prefix.share_man1)
|
install_tree('man/man1', prefix.share_man1)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user