1#! /usr/bin/env python 2# encoding: utf-8 3# harald at klimachs.de 4 5import re 6from waflib.Tools import fc, fc_config, fc_scan 7from waflib.Configure import conf 8 9from waflib.Tools.compiler_fc import fc_compiler 10fc_compiler['linux'].append('fc_pgfortran') 11 12@conf 13def find_pgfortran(conf): 14 """Find the PGI fortran compiler (will look in the environment variable 'FC')""" 15 fc = conf.find_program(['pgfortran', 'pgf95', 'pgf90'], var='FC') 16 conf.get_pgfortran_version(fc) 17 conf.env.FC_NAME = 'PGFC' 18 19@conf 20def pgfortran_flags(conf): 21 v = conf.env 22 v['FCFLAGS_fcshlib'] = ['-shared'] 23 v['FCFLAGS_DEBUG'] = ['-Minform=inform', '-Mstandard'] # why not 24 v['FCSTLIB_MARKER'] = '-Bstatic' 25 v['FCSHLIB_MARKER'] = '-Bdynamic' 26 v['SONAME_ST'] = '-soname %s' 27 28@conf 29def get_pgfortran_version(conf,fc): 30 version_re = re.compile(r"The Portland Group", re.I).search 31 cmd = fc + ['-V'] 32 out,err = fc_config.getoutput(conf, cmd, stdin=False) 33 if out: 34 match = version_re(out) 35 else: 36 match = version_re(err) 37 if not match: 38 conf.fatal('Could not verify PGI signature') 39 cmd = fc + ['-help=variable'] 40 out,err = fc_config.getoutput(conf, cmd, stdin=False) 41 if out.find('COMPVER')<0: 42 conf.fatal('Could not determine the compiler type') 43 k = {} 44 prevk = '' 45 out = out.splitlines() 46 for line in out: 47 lst = line.partition('=') 48 if lst[1] == '=': 49 key = lst[0].rstrip() 50 if key == '': 51 key = prevk 52 val = lst[2].rstrip() 53 k[key] = val 54 else: 55 prevk = line.partition(' ')[0] 56 def isD(var): 57 return var in k 58 def isT(var): 59 return var in k and k[var]!='0' 60 conf.env['FC_VERSION'] = (k['COMPVER'].split('.')) 61 62def configure(conf): 63 conf.find_pgfortran() 64 conf.find_ar() 65 conf.fc_flags() 66 conf.fc_add_flags() 67 conf.pgfortran_flags() 68 69