| 808 |
dsic.upv.es!antodo |
1 |
#!/usr/bin/env python
|
| 1377 |
slepc |
2 |
#
|
|
|
3 |
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
| 1672 |
slepc |
4 |
# SLEPc - Scalable Library for Eigenvalue Problem Computations
|
| 2575 |
eromero |
5 |
# Copyright (c) 2002-2011, Universitat Politecnica de Valencia, Spain
|
| 1377 |
slepc |
6 |
#
|
| 1672 |
slepc |
7 |
# This file is part of SLEPc.
|
|
|
8 |
#
|
|
|
9 |
# SLEPc is free software: you can redistribute it and/or modify it under the
|
|
|
10 |
# terms of version 3 of the GNU Lesser General Public License as published by
|
|
|
11 |
# the Free Software Foundation.
|
|
|
12 |
#
|
|
|
13 |
# SLEPc is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
|
14 |
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
|
15 |
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
|
|
|
16 |
# more details.
|
|
|
17 |
#
|
|
|
18 |
# You should have received a copy of the GNU Lesser General Public License
|
|
|
19 |
# along with SLEPc. If not, see <http://www.gnu.org/licenses/>.
|
| 1377 |
slepc |
20 |
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
21 |
#
|
| 808 |
dsic.upv.es!antodo |
22 |
|
|
|
23 |
import os
|
|
|
24 |
import sys
|
| 939 |
dsic.upv.es!jroman |
25 |
import time
|
| 2269 |
jroman |
26 |
import commands
|
| 2478 |
jroman |
27 |
import tempfile
|
|
|
28 |
import shutil
|
| 808 |
dsic.upv.es!antodo |
29 |
|
| 2467 |
jroman |
30 |
# Use en_US as language so that compiler messages are in English
|
| 2282 |
jroman |
31 |
if 'LC_LOCAL' in os.environ and os.environ['LC_LOCAL'] != '' and os.environ['LC_LOCAL'] != 'en_US' and os.environ['LC_LOCAL']!= 'en_US.UTF-8': os.environ['LC_LOCAL'] = 'en_US.UTF-8'
|
|
|
32 |
if 'LANG' in os.environ and os.environ['LANG'] != '' and os.environ['LANG'] != 'en_US' and os.environ['LANG'] != 'en_US.UTF-8': os.environ['LANG'] = 'en_US.UTF-8'
|
|
|
33 |
|
| 2211 |
jroman |
34 |
# should be run from the toplevel
|
|
|
35 |
configDir = os.path.abspath('config')
|
|
|
36 |
if not os.path.isdir(configDir):
|
|
|
37 |
raise RuntimeError('Run configure from $SLEPC_DIR, not '+os.path.abspath('.'))
|
|
|
38 |
sys.path.insert(0, configDir)
|
|
|
39 |
|
| 1527 |
slepc |
40 |
import petscversion
|
| 912 |
dsic.upv.es!antodo |
41 |
import petscconf
|
| 923 |
dsic.upv.es!antodo |
42 |
import log
|
| 912 |
dsic.upv.es!antodo |
43 |
import check
|
|
|
44 |
import arpack
|
|
|
45 |
import blzpack
|
|
|
46 |
import trlan
|
|
|
47 |
import lapack
|
| 1187 |
slepc |
48 |
import primme
|
| 2423 |
jroman |
49 |
import blopex
|
| 1714 |
jroman |
50 |
import slepc4py
|
| 808 |
dsic.upv.es!antodo |
51 |
|
| 2698 |
jroman |
52 |
if not hasattr(sys, 'version_info') or not sys.version_info[0] == 2 or not sys.version_info[1] >= 4:
|
|
|
53 |
print '***** You must have Python2 version 2.4 or higher to run ./configure.py ******'
|
| 861 |
dsic.upv.es!antodo |
54 |
print '* Python is easy to install for end users or sys-admin. *'
|
|
|
55 |
print '* http://www.python.org/download/ *'
|
|
|
56 |
print '* *'
|
| 912 |
dsic.upv.es!antodo |
57 |
print '* You CANNOT configure SLEPc without Python *'
|
| 861 |
dsic.upv.es!antodo |
58 |
print '*********************************************************************************'
|
|
|
59 |
sys.exit(4)
|
|
|
60 |
|
| 808 |
dsic.upv.es!antodo |
61 |
# support a few standard configure option types
|
|
|
62 |
for l in range(1,len(sys.argv)):
|
|
|
63 |
name = sys.argv[l]
|
|
|
64 |
if name.startswith('--enable'):
|
|
|
65 |
sys.argv[l] = name.replace('--enable','--with')
|
|
|
66 |
if name.find('=') == -1: sys.argv[l] += '=1'
|
|
|
67 |
if name.startswith('--disable'):
|
|
|
68 |
sys.argv[l] = name.replace('--disable','--with')
|
|
|
69 |
if name.find('=') == -1: sys.argv[l] += '=0'
|
|
|
70 |
elif name.endswith('=1'): sys.argv[l].replace('=1','=0')
|
|
|
71 |
if name.startswith('--without'):
|
|
|
72 |
sys.argv[l] = name.replace('--without','--with')
|
|
|
73 |
if name.find('=') == -1: sys.argv[l] += '=0'
|
|
|
74 |
elif name.endswith('=1'): sys.argv[l].replace('=1','=0')
|
|
|
75 |
|
|
|
76 |
# Check configure parameters
|
|
|
77 |
havearpack = 0
|
|
|
78 |
arpackdir = ''
|
|
|
79 |
arpacklibs = []
|
|
|
80 |
haveblzpack = 0
|
|
|
81 |
blzpackdir = ''
|
|
|
82 |
blzpacklibs = []
|
|
|
83 |
havetrlan = 0
|
|
|
84 |
trlandir = ''
|
|
|
85 |
trlanlibs = []
|
| 1187 |
slepc |
86 |
haveprimme = 0
|
|
|
87 |
primmedir = ''
|
| 1189 |
slepc |
88 |
primmelibs = []
|
| 2423 |
jroman |
89 |
getblopex = 0
|
|
|
90 |
haveblopex = 0
|
|
|
91 |
blopexurl = ''
|
| 1714 |
jroman |
92 |
getslepc4py = 0
|
| 1366 |
slepc |
93 |
prefixdir = ''
|
| 808 |
dsic.upv.es!antodo |
94 |
|
|
|
95 |
for i in sys.argv[1:]:
|
|
|
96 |
if i.startswith('--with-arpack-dir='):
|
|
|
97 |
arpackdir = i.split('=')[1]
|
|
|
98 |
havearpack = 1
|
| 912 |
dsic.upv.es!antodo |
99 |
elif i.startswith('--with-arpack-flags='):
|
| 808 |
dsic.upv.es!antodo |
100 |
arpacklibs = i.split('=')[1].split(',')
|
|
|
101 |
havearpack = 1
|
|
|
102 |
elif i.startswith('--with-arpack'):
|
|
|
103 |
havearpack = not i.endswith('=0')
|
|
|
104 |
elif i.startswith('--with-blzpack-dir='):
|
|
|
105 |
blzpackdir = i.split('=')[1]
|
|
|
106 |
haveblzpack = 1
|
| 912 |
dsic.upv.es!antodo |
107 |
elif i.startswith('--with-blzpack-flags='):
|
| 808 |
dsic.upv.es!antodo |
108 |
blzpacklibs = i.split('=')[1].split(',')
|
|
|
109 |
haveblzpack = 1
|
|
|
110 |
elif i.startswith('--with-blzpack'):
|
|
|
111 |
haveblzpack = not i.endswith('=0')
|
|
|
112 |
elif i.startswith('--with-trlan-dir='):
|
|
|
113 |
trlandir = i.split('=')[1]
|
|
|
114 |
havetrlan = 1
|
| 912 |
dsic.upv.es!antodo |
115 |
elif i.startswith('--with-trlan-flags='):
|
| 808 |
dsic.upv.es!antodo |
116 |
trlanlibs = i.split('=')[1].split(',')
|
|
|
117 |
havetrlan = 1
|
|
|
118 |
elif i.startswith('--with-trlan'):
|
|
|
119 |
havetrlan = not i.endswith('=0')
|
| 1187 |
slepc |
120 |
elif i.startswith('--with-primme-dir'):
|
|
|
121 |
primmedir = i.split('=')[1]
|
|
|
122 |
haveprimme = 1
|
| 1189 |
slepc |
123 |
elif i.startswith('--with-primme-flags='):
|
|
|
124 |
primmelibs = i.split('=')[1].split(',')
|
|
|
125 |
haveprimme = 1
|
| 1239 |
slepc |
126 |
elif i.startswith('--with-primme'):
|
|
|
127 |
haveprimme = not i.endswith('=0')
|
| 2423 |
jroman |
128 |
elif i.startswith('--download-blopex'):
|
|
|
129 |
getblopex = not i.endswith('=0')
|
|
|
130 |
try: blopexurl = i.split('=')[1]
|
|
|
131 |
except IndexError: pass
|
| 1714 |
jroman |
132 |
elif i.startswith('--download-slepc4py'):
|
|
|
133 |
getslepc4py = not i.endswith('=0')
|
| 1366 |
slepc |
134 |
elif i.startswith('--prefix='):
|
|
|
135 |
prefixdir = i.split('=')[1]
|
| 912 |
dsic.upv.es!antodo |
136 |
elif i.startswith('--h') or i.startswith('-h') or i.startswith('-?'):
|
| 939 |
dsic.upv.es!jroman |
137 |
print 'SLEPc Configure Help'
|
|
|
138 |
print '-'*80
|
| 2478 |
jroman |
139 |
print ' --prefix=<dir> : Specify location to install SLEPc (e.g., /usr/local)'
|
| 939 |
dsic.upv.es!jroman |
140 |
print 'ARPACK:'
|
|
|
141 |
print ' --with-arpack : Indicate if you wish to test for ARPACK (PARPACK)'
|
|
|
142 |
print ' --with-arpack-dir=<dir> : Indicate the directory for ARPACK libraries'
|
|
|
143 |
print ' --with-arpack-flags=<flags> : Indicate comma-separated flags for linking ARPACK'
|
|
|
144 |
print 'BLZPACK:'
|
|
|
145 |
print ' --with-blzpack : Indicate if you wish to test for BLZPACK'
|
|
|
146 |
print ' --with-blzpack-dir=<dir> : Indicate the directory for BLZPACK libraries'
|
|
|
147 |
print ' --with-blzpack-flags=<flags> : Indicate comma-separated flags for linking BLZPACK'
|
|
|
148 |
print 'TRLAN:'
|
|
|
149 |
print ' --with-trlan : Indicate if you wish to test for TRLAN'
|
|
|
150 |
print ' --with-trlan-dir=<dir> : Indicate the directory for TRLAN libraries'
|
|
|
151 |
print ' --with-trlan-flags=<flags> : Indicate comma-separated flags for linking TRLAN'
|
| 1187 |
slepc |
152 |
print 'PRIMME:'
|
| 1188 |
slepc |
153 |
print ' --with-primme : Indicate if you wish to test for PRIMME'
|
| 1187 |
slepc |
154 |
print ' --with-primme-dir=<dir> : Indicate the directory for PRIMME libraries'
|
| 1189 |
slepc |
155 |
print ' --with-primme-flags=<flags> : Indicate comma-separated flags for linking PRIMME'
|
| 2423 |
jroman |
156 |
print 'BLOPEX:'
|
|
|
157 |
print ' --download-blopex : Download and install BLOPEX in SLEPc directory'
|
| 1714 |
jroman |
158 |
print 'slepc4py:'
|
|
|
159 |
print ' --download-slepc4py : Download and install slepc4py in SLEPc directory'
|
| 912 |
dsic.upv.es!antodo |
160 |
sys.exit(0)
|
| 861 |
dsic.upv.es!antodo |
161 |
else:
|
| 2157 |
jroman |
162 |
sys.exit('ERROR: Invalid argument ' + i +'. Use -h for help')
|
| 808 |
dsic.upv.es!antodo |
163 |
|
| 1871 |
antodo |
164 |
prefixinstall = not prefixdir==''
|
|
|
165 |
|
| 912 |
dsic.upv.es!antodo |
166 |
# Check if enviroment is ok
|
|
|
167 |
print 'Checking environment...'
|
| 1871 |
antodo |
168 |
if 'SLEPC_DIR' in os.environ:
|
|
|
169 |
slepcdir = os.environ['SLEPC_DIR']
|
|
|
170 |
if not os.path.exists(slepcdir) or not os.path.exists(os.sep.join([slepcdir,'config'])):
|
|
|
171 |
sys.exit('ERROR: SLEPC_DIR enviroment variable is not valid')
|
|
|
172 |
if os.path.realpath(os.getcwd()) != os.path.realpath(slepcdir):
|
|
|
173 |
sys.exit('ERROR: SLEPC_DIR is not the current directory')
|
|
|
174 |
else:
|
|
|
175 |
slepcdir = os.getcwd();
|
|
|
176 |
if not os.path.exists(os.sep.join([slepcdir,'config'])):
|
|
|
177 |
sys.exit('ERROR: Current directory is not valid')
|
| 1659 |
slepc |
178 |
|
| 1871 |
antodo |
179 |
if 'PETSC_DIR' in os.environ:
|
|
|
180 |
petscdir = os.environ['PETSC_DIR']
|
|
|
181 |
if not os.path.exists(petscdir):
|
|
|
182 |
sys.exit('ERROR: PETSC_DIR enviroment variable is not valid')
|
|
|
183 |
else:
|
|
|
184 |
if prefixdir:
|
|
|
185 |
petscdir = prefixdir
|
|
|
186 |
os.environ['PETSC_DIR'] = petscdir
|
|
|
187 |
else:
|
|
|
188 |
sys.exit('ERROR: PETSC_DIR enviroment variable is not set')
|
| 912 |
dsic.upv.es!antodo |
189 |
|
| 1527 |
slepc |
190 |
# Check PETSc version
|
|
|
191 |
petscversion.Load(petscdir)
|
| 2491 |
jroman |
192 |
if petscversion.VERSION < '3.2':
|
| 1527 |
slepc |
193 |
sys.exit('ERROR: This SLEPc version is not compatible with PETSc version '+petscversion.VERSION)
|
|
|
194 |
|
| 1105 |
slepc |
195 |
# Check some information about PETSc configuration
|
| 912 |
dsic.upv.es!antodo |
196 |
petscconf.Load(petscdir)
|
| 2393 |
jroman |
197 |
if not petscconf.PRECISION in ['double','single','__float128']:
|
| 1105 |
slepc |
198 |
sys.exit('ERROR: This SLEPc version does not work with '+petscconf.PRECISION+' precision')
|
| 2157 |
jroman |
199 |
if prefixinstall and not petscconf.ISINSTALL:
|
| 1528 |
slepc |
200 |
sys.exit('ERROR: SLEPc cannot be configured for non-source installation if PETSc is not configured in the same way.')
|
| 912 |
dsic.upv.es!antodo |
201 |
|
| 2269 |
jroman |
202 |
# Check whether this is a working copy of the Subversion repository
|
|
|
203 |
subversion = 0
|
| 2290 |
jroman |
204 |
if os.path.exists(os.sep.join([slepcdir,'src','docs'])) and os.path.exists(os.sep.join([slepcdir,'.svn'])):
|
| 2269 |
jroman |
205 |
(result, output) = commands.getstatusoutput('svn info')
|
|
|
206 |
if result:
|
|
|
207 |
print 'WARNING: SLEPC_DIR appears to be a subversion working copy, but svn is not found in PATH'
|
|
|
208 |
else:
|
|
|
209 |
subversion = 1
|
| 2467 |
jroman |
210 |
svnrev = '-1'
|
|
|
211 |
svndate = '-1'
|
| 2269 |
jroman |
212 |
for line in output.split('\n'):
|
|
|
213 |
if line.startswith('Last Changed Rev: '):
|
|
|
214 |
svnrev = line.split('Rev: ')[-1]
|
|
|
215 |
if line.startswith('Last Changed Date: '):
|
|
|
216 |
svndate = line.split('Date: ')[-1]
|
|
|
217 |
|
| 1714 |
jroman |
218 |
# Create architecture directory and configuration files
|
| 1523 |
slepc |
219 |
archdir = os.sep.join([slepcdir,petscconf.ARCH])
|
| 1105 |
slepc |
220 |
if not os.path.exists(archdir):
|
|
|
221 |
try:
|
|
|
222 |
os.mkdir(archdir)
|
|
|
223 |
except:
|
|
|
224 |
sys.exit('ERROR: cannot create architecture directory ' + archdir)
|
| 1523 |
slepc |
225 |
confdir = os.sep.join([archdir,'conf'])
|
|
|
226 |
if not os.path.exists(confdir):
|
|
|
227 |
try:
|
|
|
228 |
os.mkdir(confdir)
|
|
|
229 |
except:
|
|
|
230 |
sys.exit('ERROR: cannot create configuration directory ' + confdir)
|
| 1553 |
slepc |
231 |
incdir = os.sep.join([archdir,'include'])
|
|
|
232 |
if not os.path.exists(incdir):
|
|
|
233 |
try:
|
|
|
234 |
os.mkdir(incdir)
|
|
|
235 |
except:
|
|
|
236 |
sys.exit('ERROR: cannot create include directory ' + incdir)
|
| 2424 |
jroman |
237 |
libdir = os.sep.join([archdir,'lib'])
|
|
|
238 |
if not os.path.exists(libdir):
|
|
|
239 |
try:
|
|
|
240 |
os.mkdir(libdir)
|
|
|
241 |
except:
|
|
|
242 |
sys.exit('ERROR: cannot create lib directory ' + libdir)
|
| 1105 |
slepc |
243 |
try:
|
| 2265 |
jroman |
244 |
slepcvars = open(os.sep.join([confdir,'slepcvariables']),'w')
|
| 1366 |
slepc |
245 |
if not prefixdir:
|
| 1527 |
slepc |
246 |
prefixdir = archdir
|
| 2358 |
jroman |
247 |
slepcvars.write('SLEPC_DESTDIR = ' + prefixdir +'\n')
|
| 2360 |
jroman |
248 |
testruns = set(petscconf.TEST_RUNS.split())
|
| 2537 |
jroman |
249 |
testruns = testruns.intersection(set(['C','F90','Fortran','C_NoComplex','Fortran_NoComplex']))
|
| 2358 |
jroman |
250 |
slepcvars.write('TEST_RUNS = ' + ' '.join(testruns) +'\n')
|
| 1105 |
slepc |
251 |
except:
|
| 1523 |
slepc |
252 |
sys.exit('ERROR: cannot create configuration file in ' + confdir)
|
| 1714 |
jroman |
253 |
try:
|
|
|
254 |
slepcrules = open(os.sep.join([confdir,'slepcrules']),'w')
|
|
|
255 |
except:
|
|
|
256 |
sys.exit('ERROR: cannot create rules file in ' + confdir)
|
| 2250 |
jroman |
257 |
try:
|
| 2265 |
jroman |
258 |
slepcconf = open(os.sep.join([incdir,'slepcconf.h']),'w')
|
|
|
259 |
slepcconf.write('#if !defined(__SLEPCCONF_H)\n')
|
| 2269 |
jroman |
260 |
slepcconf.write('#define __SLEPCCONF_H\n\n')
|
|
|
261 |
if subversion:
|
|
|
262 |
slepcconf.write('#ifndef SLEPC_VERSION_SVN\n#define SLEPC_VERSION_SVN ' + svnrev + '\n#endif\n\n')
|
|
|
263 |
slepcconf.write('#ifndef SLEPC_VERSION_DATE_SVN\n#define SLEPC_VERSION_DATE_SVN "' + svndate + '"\n#endif\n\n')
|
| 2282 |
jroman |
264 |
slepcconf.write('#ifndef SLEPC_LIB_DIR\n#define SLEPC_LIB_DIR "' + prefixdir + '/lib"\n#endif\n\n')
|
| 2265 |
jroman |
265 |
except:
|
| 2282 |
jroman |
266 |
sys.exit('ERROR: cannot create configuration header in ' + confdir)
|
| 2265 |
jroman |
267 |
try:
|
| 2250 |
jroman |
268 |
cmake = open(os.sep.join([confdir,'SLEPcConfig.cmake']),'w')
|
|
|
269 |
except:
|
|
|
270 |
sys.exit('ERROR: cannot create CMake configuration file in ' + confdir)
|
| 2159 |
jroman |
271 |
if prefixinstall and os.path.isfile(os.sep.join([prefixdir,'include','slepc.h'])):
|
| 1955 |
jroman |
272 |
sys.exit('ERROR: prefix directory ' + prefixdir + ' contains files from a previous installation')
|
| 923 |
dsic.upv.es!antodo |
273 |
|
| 2478 |
jroman |
274 |
# Create temporary directory and makefile for running tests
|
|
|
275 |
try:
|
|
|
276 |
tmpdir = tempfile.mkdtemp(prefix='slepc-')
|
|
|
277 |
if not os.path.isdir(tmpdir): os.mkdir(tmpdir)
|
|
|
278 |
except:
|
|
|
279 |
sys.exit('ERROR: cannot create temporary directory')
|
|
|
280 |
try:
|
|
|
281 |
makefile = open(os.sep.join([tmpdir,'makefile']),'w')
|
|
|
282 |
makefile.write('checklink: checklink.o chkopts\n')
|
|
|
283 |
makefile.write('\t${CLINKER} -o checklink checklink.o ${TESTFLAGS} ${PETSC_KSP_LIB}\n')
|
|
|
284 |
makefile.write('\t@${RM} -f checklink checklink.o\n')
|
|
|
285 |
makefile.write('LOCDIR = ./\n')
|
| 2679 |
jroman |
286 |
makefile.write('include ${PETSC_DIR}/conf/variables\n')
|
|
|
287 |
makefile.write('include ${PETSC_DIR}/conf/rules\n')
|
| 2478 |
jroman |
288 |
makefile.close()
|
|
|
289 |
except:
|
|
|
290 |
sys.exit('ERROR: cannot create makefile in temporary directory')
|
|
|
291 |
|
| 1105 |
slepc |
292 |
# Open log file
|
| 1523 |
slepc |
293 |
log.Open(os.sep.join([confdir,'configure.log']))
|
| 2257 |
jroman |
294 |
log.write('='*80)
|
|
|
295 |
log.write('Starting Configure Run at '+time.ctime(time.time()))
|
|
|
296 |
log.write('Configure Options: '+str.join(' ',sys.argv))
|
|
|
297 |
log.write('Working directory: '+os.getcwd())
|
|
|
298 |
log.write('Python version:\n' + sys.version)
|
|
|
299 |
log.write('make: ' + petscconf.MAKE)
|
|
|
300 |
log.write('PETSc source directory: ' + petscdir)
|
|
|
301 |
log.write('PETSc install directory: ' + petscconf.DESTDIR)
|
|
|
302 |
log.write('PETSc version: ' + petscversion.VERSION)
|
|
|
303 |
log.write('PETSc architecture: ' + petscconf.ARCH)
|
|
|
304 |
log.write('SLEPc source directory: ' + slepcdir)
|
|
|
305 |
log.write('SLEPc install directory: ' + prefixdir)
|
|
|
306 |
log.write('='*80)
|
| 939 |
dsic.upv.es!jroman |
307 |
|
| 912 |
dsic.upv.es!antodo |
308 |
# Check if PETSc is working
|
| 1043 |
slepc |
309 |
log.Println('Checking PETSc installation...')
|
| 2491 |
jroman |
310 |
if petscversion.VERSION > '3.2':
|
| 1527 |
slepc |
311 |
log.Println('WARNING: PETSc version '+petscversion.VERSION+' is newer than SLEPc version')
|
|
|
312 |
if petscversion.RELEASE != '1':
|
| 1070 |
slepc |
313 |
log.Println('WARNING: using PETSc development version')
|
| 1527 |
slepc |
314 |
if petscconf.ISINSTALL:
|
| 2217 |
jroman |
315 |
if os.path.realpath(petscconf.DESTDIR) != os.path.realpath(petscdir):
|
| 1527 |
slepc |
316 |
log.Println('WARNING: PETSC_DIR does not point to PETSc installation path')
|
| 2478 |
jroman |
317 |
if not check.Link(tmpdir,[],[],[]):
|
| 1105 |
slepc |
318 |
log.Exit('ERROR: Unable to link with PETSc')
|
| 912 |
dsic.upv.es!antodo |
319 |
|
| 808 |
dsic.upv.es!antodo |
320 |
# Check for external packages
|
|
|
321 |
if havearpack:
|
| 2478 |
jroman |
322 |
arpacklibs = arpack.Check(slepcconf,slepcvars,cmake,tmpdir,arpackdir,arpacklibs)
|
| 808 |
dsic.upv.es!antodo |
323 |
if haveblzpack:
|
| 2478 |
jroman |
324 |
blzpacklibs = blzpack.Check(slepcconf,slepcvars,cmake,tmpdir,blzpackdir,blzpacklibs)
|
| 808 |
dsic.upv.es!antodo |
325 |
if havetrlan:
|
| 2478 |
jroman |
326 |
trlanlibs = trlan.Check(slepcconf,slepcvars,cmake,tmpdir,trlandir,trlanlibs)
|
| 1187 |
slepc |
327 |
if haveprimme:
|
| 2478 |
jroman |
328 |
primmelibs = primme.Check(slepcconf,slepcvars,cmake,tmpdir,primmedir,primmelibs)
|
| 2423 |
jroman |
329 |
if getblopex:
|
| 2478 |
jroman |
330 |
blopexlibs = blopex.Install(slepcconf,slepcvars,cmake,tmpdir,blopexurl,archdir)
|
| 2423 |
jroman |
331 |
haveblopex = 1
|
| 808 |
dsic.upv.es!antodo |
332 |
|
| 1530 |
slepc |
333 |
# Check for missing LAPACK functions
|
| 2478 |
jroman |
334 |
missing = lapack.Check(slepcconf,slepcvars,cmake,tmpdir)
|
| 1530 |
slepc |
335 |
|
| 1714 |
jroman |
336 |
# Download and install slepc4py
|
|
|
337 |
if getslepc4py:
|
|
|
338 |
slepc4py.Install()
|
| 1717 |
jroman |
339 |
slepc4py.addMakeRule(slepcrules,prefixdir,prefixinstall,getslepc4py)
|
| 1714 |
jroman |
340 |
|
| 2285 |
jroman |
341 |
# Make Fortran stubs if necessary
|
| 2571 |
jroman |
342 |
if subversion and hasattr(petscconf,'FC'):
|
|
|
343 |
try:
|
|
|
344 |
import generatefortranstubs
|
|
|
345 |
generatefortranstubs.main(petscconf.BFORT)
|
|
|
346 |
except AttributeError:
|
|
|
347 |
sys.exit('ERROR: cannot generate Fortran stubs; try configuring PETSc with --download-sowing or use a mercurial version of PETSc')
|
| 2285 |
jroman |
348 |
|
| 2257 |
jroman |
349 |
# CMake stuff
|
| 2753 |
jroman |
350 |
cmake.write('set (SLEPC_PACKAGE_LIBS "${ARPACK_LIB}" "${BLZPACK_LIB}" "${TRLAN_LIB}" "${PRIMME_LIB}" "${BLOPEX_LIB}" )\n')
|
| 2475 |
jroman |
351 |
cmake.write('set (SLEPC_PACKAGE_INCLUDES "${PRIMME_INCLUDE}")\n')
|
|
|
352 |
cmake.write('find_library (PETSC_LIB petsc HINTS ${PETSc_BINARY_DIR}/lib )\n')
|
| 2728 |
jroman |
353 |
cmake.write('''
|
|
|
354 |
if (NOT PETSC_LIB) # Interpret missing libpetsc to mean that PETSc was built --with-single-library=0
|
|
|
355 |
set (PETSC_LIB "")
|
|
|
356 |
foreach (pkg sys vec mat dm ksp snes ts)
|
|
|
357 |
string (TOUPPER ${pkg} PKG)
|
|
|
358 |
find_library(PETSC${PKG}_LIB "petsc${pkg}" HINTS ${PETSc_BINARY_DIR}/lib)
|
|
|
359 |
list (APPEND PETSC_LIB "${PETSC${PKG}_LIB}")
|
|
|
360 |
endforeach ()
|
|
|
361 |
endif ()
|
|
|
362 |
''')
|
| 2475 |
jroman |
363 |
cmake.close()
|
|
|
364 |
cmakeok = False
|
|
|
365 |
if sys.version_info >= (2,5) and not petscconf.ISINSTALL and petscconf.BUILD_USING_CMAKE:
|
| 2281 |
jroman |
366 |
import cmakegen
|
|
|
367 |
try:
|
|
|
368 |
cmakegen.main(slepcdir,petscdir,petscarch=petscconf.ARCH)
|
|
|
369 |
except (OSError), e:
|
|
|
370 |
log.Exit('ERROR: Generating CMakeLists.txt failed:\n' + str(e))
|
| 2277 |
jroman |
371 |
import cmakeboot
|
|
|
372 |
try:
|
| 2378 |
jroman |
373 |
cmakeok = cmakeboot.main(slepcdir,petscdir,petscarch=petscconf.ARCH,log=log)
|
| 2277 |
jroman |
374 |
except (OSError), e:
|
|
|
375 |
log.Exit('ERROR: Booting CMake in PETSC_ARCH failed:\n' + str(e))
|
|
|
376 |
except (ImportError, KeyError), e:
|
|
|
377 |
log.Exit('ERROR: Importing cmakeboot failed:\n' + str(e))
|
| 2411 |
jroman |
378 |
# remove files created by PETSc's script
|
|
|
379 |
for f in ['build.log','build.log.bkp','RDict.log']:
|
|
|
380 |
try: os.remove(f)
|
|
|
381 |
except OSError: pass
|
| 2475 |
jroman |
382 |
if cmakeok:
|
|
|
383 |
slepcvars.write('SLEPC_BUILD_USING_CMAKE = 1\n')
|
| 2257 |
jroman |
384 |
|
| 2475 |
jroman |
385 |
# Finish with configuration files
|
|
|
386 |
slepcvars.close()
|
|
|
387 |
slepcrules.close()
|
|
|
388 |
slepcconf.write('#endif\n')
|
|
|
389 |
slepcconf.close()
|
| 2478 |
jroman |
390 |
shutil.rmtree(tmpdir)
|
| 2475 |
jroman |
391 |
|
| 2250 |
jroman |
392 |
# Print summary
|
| 923 |
dsic.upv.es!antodo |
393 |
log.Println('')
|
| 2378 |
jroman |
394 |
log.Println('='*79)
|
| 923 |
dsic.upv.es!antodo |
395 |
log.Println('SLEPc Configuration')
|
| 2378 |
jroman |
396 |
log.Println('='*79)
|
| 923 |
dsic.upv.es!antodo |
397 |
log.Println('')
|
| 2217 |
jroman |
398 |
log.Println('SLEPc directory:')
|
| 923 |
dsic.upv.es!antodo |
399 |
log.Println(' '+slepcdir)
|
| 2217 |
jroman |
400 |
if archdir != prefixdir:
|
|
|
401 |
log.Println('SLEPc prefix directory:')
|
|
|
402 |
log.Println(' '+prefixdir)
|
| 1375 |
slepc |
403 |
log.Println('PETSc directory:')
|
| 923 |
dsic.upv.es!antodo |
404 |
log.Println(' '+petscdir)
|
|
|
405 |
log.Println('Architecture "'+petscconf.ARCH+'" with '+petscconf.PRECISION+' precision '+petscconf.SCALAR+' numbers')
|
| 808 |
dsic.upv.es!antodo |
406 |
if havearpack:
|
| 923 |
dsic.upv.es!antodo |
407 |
log.Println('ARPACK library flags:')
|
|
|
408 |
log.Println(' '+str.join(' ',arpacklibs))
|
| 808 |
dsic.upv.es!antodo |
409 |
if haveblzpack:
|
| 923 |
dsic.upv.es!antodo |
410 |
log.Println('BLZPACK library flags:')
|
|
|
411 |
log.Println(' '+str.join(' ',blzpacklibs))
|
| 970 |
slepc |
412 |
if havetrlan:
|
|
|
413 |
log.Println('TRLAN library flags:')
|
|
|
414 |
log.Println(' '+str.join(' ',trlanlibs))
|
| 1187 |
slepc |
415 |
if haveprimme:
|
|
|
416 |
log.Println('PRIMME library flags:')
|
|
|
417 |
log.Println(' '+str.join(' ',primmelibs))
|
| 2423 |
jroman |
418 |
if haveblopex:
|
|
|
419 |
log.Println('BLOPEX library flags:')
|
|
|
420 |
log.Println(' '+str.join(' ',blopexlibs))
|
| 808 |
dsic.upv.es!antodo |
421 |
if missing:
|
| 1043 |
slepc |
422 |
log.Println('LAPACK missing functions:')
|
| 923 |
dsic.upv.es!antodo |
423 |
log.Print(' ')
|
|
|
424 |
for i in missing: log.Print(i)
|
|
|
425 |
log.Println('')
|
|
|
426 |
log.Println('')
|
| 939 |
dsic.upv.es!jroman |
427 |
log.Println('WARNING: Some SLEPc functionality will not be available')
|
| 923 |
dsic.upv.es!antodo |
428 |
log.Println('PLEASE reconfigure and recompile PETSc with a full LAPACK implementation')
|
| 912 |
dsic.upv.es!antodo |
429 |
print
|
| 2378 |
jroman |
430 |
print 'xxx'+'='*73+'xxx'
|
| 2475 |
jroman |
431 |
if cmakeok: buildtype = 'cmake'
|
|
|
432 |
else: buildtype = 'legacy'
|
|
|
433 |
print ' Configure stage complete. Now build the SLEPc library with ('+buildtype+' build):'
|
| 2378 |
jroman |
434 |
print ' make SLEPC_DIR=$PWD PETSC_DIR='+petscdir+' PETSC_ARCH='+petscconf.ARCH
|
|
|
435 |
print 'xxx'+'='*73+'xxx'
|
|
|
436 |
print
|