1 | import PETSc.package
|
---|
2 |
|
---|
3 | class Configure(PETSc.package.NewPackage):
|
---|
4 | def __init__(self, framework):
|
---|
5 | PETSc.package.NewPackage.__init__(self, framework)
|
---|
6 | self.download = ['http://ftp.mcs.anl.gov/pub/petsc/externalpackages/c2html.tar.gz']
|
---|
7 | self.complex = 1
|
---|
8 | self.double = 0
|
---|
9 | self.requires32bitint = 0
|
---|
10 | self.worksonWindows = 1
|
---|
11 | self.downloadonWindows = 1
|
---|
12 |
|
---|
13 | def Install(self):
|
---|
14 | import os
|
---|
15 | if self.framework.argDB['with-batch']:
|
---|
16 | args = ['--prefix='+self.installDir]
|
---|
17 | else:
|
---|
18 | args = ['--prefix='+self.installDir, '--with-cc='+'"'+self.setCompilers.CC+'"']
|
---|
19 | args = ' '.join(args)
|
---|
20 | fd = file(os.path.join(self.packageDir,'c2html.args'), 'w')
|
---|
21 | fd.write(args)
|
---|
22 | fd.close()
|
---|
23 | if self.installNeeded('c2html.args'):
|
---|
24 | # check if flex or lex are in PATH
|
---|
25 | self.getExecutable('flex')
|
---|
26 | self.getExecutable('lex')
|
---|
27 | if not hasattr(self, 'flex') and not hasattr(self, 'lex'):
|
---|
28 | raise RuntimeError('Cannot build c2html. It requires either "flex" or "lex" in PATH. Please install flex and retry.\n\
|
---|
29 | Or disable c2html with --with-c2html=0')
|
---|
30 | try:
|
---|
31 | output,err,ret = PETSc.package.NewPackage.executeShellCommand('cd '+self.packageDir+' && ./configure '+args, timeout=900, log = self.framework.log)
|
---|
32 | except RuntimeError, e:
|
---|
33 | raise RuntimeError('Error running configure on c2html: '+str(e)+'.\n\
|
---|
34 | Try disable c2html with --with-c2html=0')
|
---|
35 | try:
|
---|
36 | output,err,ret = PETSc.package.NewPackage.executeShellCommand('cd '+self.packageDir+' && make && make install && make clean', timeout=2500, log = self.framework.log)
|
---|
37 | except RuntimeError, e:
|
---|
38 | raise RuntimeError('Error running make; make install on c2html: '+str(e)+'.\n\
|
---|
39 | Try disable c2html with --with-c2html=0')
|
---|
40 | output,err,ret = PETSc.package.NewPackage.executeShellCommand('cp -f '+os.path.join(self.packageDir,'c2html.args')+' '+self.confDir+'/c2html', timeout=5, log = self.framework.log)
|
---|
41 | self.framework.actions.addArgument('C2HTML', 'Install', 'Installed c2html into '+self.installDir)
|
---|
42 | self.binDir = os.path.join(self.installDir, 'bin')
|
---|
43 | self.c2html = os.path.join(self.binDir, 'c2html')
|
---|
44 | self.addMakeMacro('C2HTML',self.c2html)
|
---|
45 | return self.installDir
|
---|
46 |
|
---|
47 | def alternateConfigureLibrary(self):
|
---|
48 | self.checkDownload(1)
|
---|
49 |
|
---|
50 | def configure(self):
|
---|
51 | '''Determine whether the c2html exist or not'''
|
---|
52 |
|
---|
53 | if (self.framework.clArgDB.has_key('with-c2html') and not self.framework.argDB['with-c2html']) or \
|
---|
54 | (self.framework.clArgDB.has_key('download-c2html') and not self.framework.argDB['download-c2html']):
|
---|
55 | self.framework.logPrint("Not checking c2html on user request\n")
|
---|
56 | return
|
---|
57 |
|
---|
58 | if self.petscdir.isClone:
|
---|
59 | self.framework.logPrint('PETSc clone, checking for c2html\n')
|
---|
60 | self.getExecutable('c2html', getFullPath = 1)
|
---|
61 |
|
---|
62 | if hasattr(self, 'c2html'):
|
---|
63 | self.addMakeMacro('C2HTML ', self.c2html)
|
---|
64 | self.framework.logPrint('Found c2html, will not install c2html')
|
---|
65 | else:
|
---|
66 | self.framework.logPrint('Installing c2html')
|
---|
67 | if not self.framework.argDB.get('download-c2html'): self.framework.argDB['download-c2html'] = 1
|
---|
68 | PETSc.package.NewPackage.configure(self)
|
---|
69 | else:
|
---|
70 | self.framework.logPrint("Not a clone of PETSc, don't need c2html\n")
|
---|
71 | return
|
---|