2011-09-10 11:13:51 +02:00
|
|
|
#! /usr/bin/env python
|
|
|
|
# encoding: utf-8
|
|
|
|
# harald at klimachs.de
|
|
|
|
|
|
|
|
import re
|
|
|
|
from waflib.Tools import fc, fc_config, fc_scan
|
|
|
|
from waflib.Configure import conf
|
|
|
|
|
|
|
|
from waflib.Tools.compiler_fc import fc_compiler
|
|
|
|
fc_compiler['linux'].append('fc_pgfortran')
|
|
|
|
|
|
|
|
@conf
|
|
|
|
def find_pgfortran(conf):
|
|
|
|
"""Find the PGI fortran compiler (will look in the environment variable 'FC')"""
|
|
|
|
fc = conf.find_program(['pgfortran', 'pgf95', 'pgf90'], var='FC')
|
|
|
|
conf.get_pgfortran_version(fc)
|
|
|
|
conf.env.FC_NAME = 'PGFC'
|
|
|
|
|
|
|
|
@conf
|
|
|
|
def pgfortran_flags(conf):
|
|
|
|
v = conf.env
|
|
|
|
v['FCFLAGS_fcshlib'] = ['-shared']
|
|
|
|
v['FCFLAGS_DEBUG'] = ['-Minform=inform', '-Mstandard'] # why not
|
|
|
|
v['FCSTLIB_MARKER'] = '-Bstatic'
|
|
|
|
v['FCSHLIB_MARKER'] = '-Bdynamic'
|
|
|
|
v['SONAME_ST'] = '-soname %s'
|
|
|
|
|
|
|
|
@conf
|
|
|
|
def get_pgfortran_version(conf,fc):
|
|
|
|
version_re = re.compile(r"The Portland Group", re.I).search
|
|
|
|
cmd = fc + ['-V']
|
|
|
|
out,err = fc_config.getoutput(conf, cmd, stdin=False)
|
2017-04-17 12:26:47 +02:00
|
|
|
if out:
|
|
|
|
match = version_re(out)
|
|
|
|
else:
|
|
|
|
match = version_re(err)
|
2011-09-10 11:13:51 +02:00
|
|
|
if not match:
|
|
|
|
conf.fatal('Could not verify PGI signature')
|
|
|
|
cmd = fc + ['-help=variable']
|
|
|
|
out,err = fc_config.getoutput(conf, cmd, stdin=False)
|
|
|
|
if out.find('COMPVER')<0:
|
|
|
|
conf.fatal('Could not determine the compiler type')
|
|
|
|
k = {}
|
|
|
|
prevk = ''
|
2015-03-03 12:19:25 +01:00
|
|
|
out = out.splitlines()
|
2011-09-10 11:13:51 +02:00
|
|
|
for line in out:
|
|
|
|
lst = line.partition('=')
|
|
|
|
if lst[1] == '=':
|
|
|
|
key = lst[0].rstrip()
|
2017-04-17 12:26:47 +02:00
|
|
|
if key == '':
|
|
|
|
key = prevk
|
2011-09-10 11:13:51 +02:00
|
|
|
val = lst[2].rstrip()
|
|
|
|
k[key] = val
|
2017-04-17 12:26:47 +02:00
|
|
|
else:
|
|
|
|
prevk = line.partition(' ')[0]
|
2011-09-10 11:13:51 +02:00
|
|
|
def isD(var):
|
|
|
|
return var in k
|
|
|
|
def isT(var):
|
|
|
|
return var in k and k[var]!='0'
|
|
|
|
conf.env['FC_VERSION'] = (k['COMPVER'].split('.'))
|
|
|
|
|
|
|
|
def configure(conf):
|
|
|
|
conf.find_pgfortran()
|
|
|
|
conf.find_ar()
|
|
|
|
conf.fc_flags()
|
2012-05-09 06:55:43 +02:00
|
|
|
conf.fc_add_flags()
|
2011-09-10 11:13:51 +02:00
|
|
|
conf.pgfortran_flags()
|
|
|
|
|