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