xref: /petsc/config/PETSc/options/arch.py (revision 1a8e9eaeada5479bbf00c338b1bf269d2fd58d36)
19d310bb7SBarry Smithimport config.base
29d310bb7SBarry Smithimport os
39d310bb7SBarry Smithimport re
49d310bb7SBarry Smith
59d310bb7SBarry Smithclass Configure(config.base.Configure):
69d310bb7SBarry Smith  def __init__(self, framework):
79d310bb7SBarry Smith    config.base.Configure.__init__(self, framework)
89d310bb7SBarry Smith    self.headerPrefix = 'PETSC'
99d310bb7SBarry Smith    self.substPrefix  = 'PETSC'
109d310bb7SBarry Smith    return
119d310bb7SBarry Smith
129d310bb7SBarry Smith  def __str1__(self):
139d310bb7SBarry Smith    if not hasattr(self, 'arch'):
149d310bb7SBarry Smith      return ''
159d310bb7SBarry Smith    desc = ['PETSc:']
169d310bb7SBarry Smith    desc.append('  PETSC_ARCH: '+str(self.arch))
179d310bb7SBarry Smith    return '\n'.join(desc)+'\n'
189d310bb7SBarry Smith
199d310bb7SBarry Smith  def setupHelp(self, help):
209d310bb7SBarry Smith    import nargs
219d310bb7SBarry Smith    help.addArgument('PETSc', '-PETSC_ARCH=<string>',     nargs.Arg(None, None, 'The configuration name'))
229d310bb7SBarry Smith    help.addArgument('PETSc', '-with-petsc-arch=<string>',nargs.Arg(None, None, 'The configuration name'))
239d310bb7SBarry Smith    return
249d310bb7SBarry Smith
25*1a8e9eaeSSatish Balay  def setNativeArchitecture(self):
2670211a5bSSatish Balay    import sys
2770211a5bSSatish Balay    arch = 'arch-' + sys.platform.replace('cygwin','mswin')
2870211a5bSSatish Balay    # use opt/debug, c/c++ tags.s
2970211a5bSSatish Balay    arch+= '-'+self.framework.argDB['with-clanguage'].lower().replace('+','x')
3070211a5bSSatish Balay    if self.framework.argDB['with-debugging']:
3170211a5bSSatish Balay      arch += '-debug'
3270211a5bSSatish Balay    else:
3370211a5bSSatish Balay      arch += '-opt'
34*1a8e9eaeSSatish Balay    self.nativeArch = arch
35*1a8e9eaeSSatish Balay    return
3670211a5bSSatish Balay
379d310bb7SBarry Smith  def configureArchitecture(self):
389d310bb7SBarry Smith    '''Checks PETSC_ARCH and sets if not set'''
399d310bb7SBarry Smith    # Warn if PETSC_ARCH doesnt match env variable
409d310bb7SBarry Smith    if 'PETSC_ARCH' in self.framework.argDB and 'PETSC_ARCH' in os.environ and self.framework.argDB['PETSC_ARCH'] != os.environ['PETSC_ARCH']:
419d310bb7SBarry Smith      self.logPrintBox('''\
429d310bb7SBarry SmithWarning: PETSC_ARCH from environment does not match command-line or name of script.
439d310bb7SBarry SmithWarning: Using from command-line or name of script: %s, ignoring environment: %s''' % (str(self.framework.argDB['PETSC_ARCH']), str(os.environ['PETSC_ARCH'])))
4457ea55fdSJed Brown      os.environ['PETSC_ARCH'] = self.framework.argDB['PETSC_ARCH']
459d310bb7SBarry Smith    if 'with-petsc-arch' in self.framework.argDB:
469d310bb7SBarry Smith      self.arch = self.framework.argDB['with-petsc-arch']
4770211a5bSSatish Balay      msg = 'option -with-petsc-arch='+str(self.arch)
489d310bb7SBarry Smith    elif 'PETSC_ARCH' in self.framework.argDB:
499d310bb7SBarry Smith      self.arch = self.framework.argDB['PETSC_ARCH']
5070211a5bSSatish Balay      msg = 'option PETSC_ARCH='+str(self.arch)
5170211a5bSSatish Balay    elif 'PETSC_ARCH' in os.environ:
529d310bb7SBarry Smith      self.arch = os.environ['PETSC_ARCH']
5370211a5bSSatish Balay      msg = 'environment variable PETSC_ARCH='+str(self.arch)
549d310bb7SBarry Smith    else:
55*1a8e9eaeSSatish Balay      self.arch = self.nativeArch
569d310bb7SBarry Smith    if self.arch.find('/') >= 0 or self.arch.find('\\') >= 0:
5770211a5bSSatish Balay      raise RuntimeError('PETSC_ARCH should not contain path characters, but you have specified with '+msg)
58002ae2c9SLisandro Dalcin    if self.arch.startswith('-'):
5970211a5bSSatish Balay      raise RuntimeError('PETSC_ARCH should not start with "-", but you have specified with '+msg)
6070211a5bSSatish Balay    if self.arch.startswith('.'):
6170211a5bSSatish Balay      raise RuntimeError('PETSC_ARCH should not start with ".", but you have specified with '+msg)
6270211a5bSSatish Balay    if not len(self.arch):
6370211a5bSSatish Balay      raise RuntimeError('PETSC_ARCH cannot be empty string. Use a valid string or do not set one. Currently set with '+msg)
649d310bb7SBarry Smith    self.archBase = re.sub(r'^(\w+)[-_]?.*$', r'\1', self.arch)
659d310bb7SBarry Smith    return
669d310bb7SBarry Smith
679d310bb7SBarry Smith  def configure(self):
68*1a8e9eaeSSatish Balay    self.executeTest(self.setNativeArchitecture)
699d310bb7SBarry Smith    self.executeTest(self.configureArchitecture)
709d310bb7SBarry Smith    # required by top-level configure.py
719d310bb7SBarry Smith    self.framework.arch = self.arch
729d310bb7SBarry Smith    return
73