xref: /petsc/config/PETSc/options/arch.py (revision 9d310bb76ceaf4434dd2e79465b7666f9cb0876a)
1*9d310bb7SBarry Smithimport config.base
2*9d310bb7SBarry Smithimport os
3*9d310bb7SBarry Smithimport re
4*9d310bb7SBarry Smith
5*9d310bb7SBarry Smithclass Configure(config.base.Configure):
6*9d310bb7SBarry Smith  def __init__(self, framework):
7*9d310bb7SBarry Smith    config.base.Configure.__init__(self, framework)
8*9d310bb7SBarry Smith    self.headerPrefix = 'PETSC'
9*9d310bb7SBarry Smith    self.substPrefix  = 'PETSC'
10*9d310bb7SBarry Smith    return
11*9d310bb7SBarry Smith
12*9d310bb7SBarry Smith  def __str1__(self):
13*9d310bb7SBarry Smith    if not hasattr(self, 'arch'):
14*9d310bb7SBarry Smith      return ''
15*9d310bb7SBarry Smith    desc = ['PETSc:']
16*9d310bb7SBarry Smith    desc.append('  PETSC_ARCH: '+str(self.arch))
17*9d310bb7SBarry Smith    return '\n'.join(desc)+'\n'
18*9d310bb7SBarry Smith
19*9d310bb7SBarry Smith  def setupHelp(self, help):
20*9d310bb7SBarry Smith    import nargs
21*9d310bb7SBarry Smith    help.addArgument('PETSc', '-PETSC_ARCH=<string>',     nargs.Arg(None, None, 'The configuration name'))
22*9d310bb7SBarry Smith    help.addArgument('PETSc', '-with-petsc-arch=<string>',nargs.Arg(None, None, 'The configuration name'))
23*9d310bb7SBarry Smith    return
24*9d310bb7SBarry Smith
25*9d310bb7SBarry Smith  def configureArchitecture(self):
26*9d310bb7SBarry Smith    '''Checks PETSC_ARCH and sets if not set'''
27*9d310bb7SBarry Smith
28*9d310bb7SBarry Smith
29*9d310bb7SBarry Smith    # Warn if PETSC_ARCH doesnt match env variable
30*9d310bb7SBarry Smith    if 'PETSC_ARCH' in self.framework.argDB and 'PETSC_ARCH' in os.environ and self.framework.argDB['PETSC_ARCH'] != os.environ['PETSC_ARCH']:
31*9d310bb7SBarry Smith      self.logPrintBox('''\
32*9d310bb7SBarry SmithWarning: PETSC_ARCH from environment does not match command-line or name of script.
33*9d310bb7SBarry SmithWarning: Using from command-line or name of script: %s, ignoring environment: %s''' % (str(self.framework.argDB['PETSC_ARCH']), str(os.environ['PETSC_ARCH'])))
34*9d310bb7SBarry Smith    if 'with-petsc-arch' in self.framework.argDB:
35*9d310bb7SBarry Smith      self.arch = self.framework.argDB['with-petsc-arch']
36*9d310bb7SBarry Smith    elif 'PETSC_ARCH' in self.framework.argDB:
37*9d310bb7SBarry Smith      self.arch = self.framework.argDB['PETSC_ARCH']
38*9d310bb7SBarry Smith    else:
39*9d310bb7SBarry Smith      if 'PETSC_ARCH' in os.environ:
40*9d310bb7SBarry Smith        if not len(os.environ['PETSC_ARCH']):
41*9d310bb7SBarry Smith          raise RuntimeError('PETSC_ARCH is the empty string in your environment. It must either be a valid string, or not be defined in the environment at all.')
42*9d310bb7SBarry Smith        self.arch = os.environ['PETSC_ARCH']
43*9d310bb7SBarry Smith      else:
44*9d310bb7SBarry Smith        import sys
45*9d310bb7SBarry Smith        self.arch = 'arch-' + sys.platform.replace('cygwin','mswin')
46*9d310bb7SBarry Smith        # use opt/debug, c/c++ tags.s
47*9d310bb7SBarry Smith        self.arch+= '-'+self.framework.argDB['with-clanguage'].lower().replace('+','x')
48*9d310bb7SBarry Smith        if self.framework.argDB['with-debugging']:
49*9d310bb7SBarry Smith          self.arch += '-debug'
50*9d310bb7SBarry Smith        else:
51*9d310bb7SBarry Smith          self.arch += '-opt'
52*9d310bb7SBarry Smith    if self.arch.find('/') >= 0 or self.arch.find('\\') >= 0:
53*9d310bb7SBarry Smith      raise RuntimeError('PETSC_ARCH should not contain path characters, but you have specified: '+str(self.arch))
54*9d310bb7SBarry Smith    self.archBase = re.sub(r'^(\w+)[-_]?.*$', r'\1', self.arch)
55*9d310bb7SBarry Smith    self.addDefine('ARCH', '"'+self.arch+'"')
56*9d310bb7SBarry Smith    return
57*9d310bb7SBarry Smith
58*9d310bb7SBarry Smith  def configure(self):
59*9d310bb7SBarry Smith    self.executeTest(self.configureArchitecture)
60*9d310bb7SBarry Smith    # required by top-level configure.py
61*9d310bb7SBarry Smith    self.framework.arch = self.arch
62*9d310bb7SBarry Smith    return
63