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