xref: /petsc/config/PETSc/options/languages.py (revision fc8a9adeb7fcdc98711d755fa2dc544ddccf0f3e)
1#!/usr/bin/env python
2from __future__ import generators
3import config.base
4
5class Configure(config.base.Configure):
6  def __init__(self, framework):
7    config.base.Configure.__init__(self, framework)
8    self.headerPrefix = ''
9    self.substPrefix  = ''
10    return
11
12  def __str1__(self):
13    if not hasattr(self, 'clanguage'):
14      return ''
15    return '  Clanguage: ' + self.clanguage +'\n'
16
17  def setupHelp(self, help):
18    import nargs
19    help.addArgument('PETSc', '-with-clanguage=<C or C++>', nargs.Arg(None, 'C', 'Specify C (recommended) or C++ to compile PETSc. You can use C++ in either case.'))
20    return
21
22  def setupDependencies(self, framework):
23    config.base.Configure.setupDependencies(self, framework)
24    self.compilers = framework.require('config.compilers', self)
25    return
26
27  def configureCLanguage(self):
28    '''Choose whether to compile the PETSc library using a C or C++ compiler'''
29    self.clanguage = self.framework.argDB['with-clanguage'].upper().replace('+','x').replace('X','x')
30    if not self.clanguage in ['C', 'Cxx']:
31      raise RuntimeError('Invalid C language specified: '+str(self.clanguage))
32    if self.clanguage == 'Cxx':
33      if not self.compilers.cxxCompileC:
34        raise RuntimeError('Unable to compile .c sources with C++ compiler. This is required to build PETSc with --with-clanguage=C++ option!')
35      self.logPrintBox('WARNING -with-clanguage=C++ is a developer feature and is *not* required for regular usage of PETSc either from C or C++')
36    self.logPrint('C language is '+str(self.clanguage))
37    self.addDefine('CLANGUAGE_'+self.clanguage.upper(),'1')
38    self.framework.require('config.setCompilers', None).mainLanguage = self.clanguage
39
40  def configure(self):
41    self.executeTest(self.configureCLanguage)
42    return
43