diff options
author | cookedm <cookedm@localhost> | 2006-07-06 16:57:20 +0000 |
---|---|---|
committer | cookedm <cookedm@localhost> | 2006-07-06 16:57:20 +0000 |
commit | 6782a92fd1a7625ee48f6b2946a7d7149ab28a77 (patch) | |
tree | 177a92f0673655b58b247e663477af06ac1192b6 /fcompiler/ibm.py | |
parent | 216f071ab060a6f08c22666aea33f7095f079d1e (diff) | |
download | numpy-6782a92fd1a7625ee48f6b2946a7d7149ab28a77.tar.gz |
Branch numpy.distutils to distutils-revamp
Diffstat (limited to 'fcompiler/ibm.py')
-rw-r--r-- | fcompiler/ibm.py | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/fcompiler/ibm.py b/fcompiler/ibm.py new file mode 100644 index 000000000..b9babaab7 --- /dev/null +++ b/fcompiler/ibm.py @@ -0,0 +1,81 @@ +import os +import re +import sys + +from numpy.distutils.fcompiler import FCompiler +from distutils import log + +class IbmFCompiler(FCompiler): + + compiler_type = 'ibm' + version_pattern = r'xlf\(1\)\s*IBM XL Fortran (Advanced Edition |)Version (?P<version>[^\s*]*)' + + executables = { + 'version_cmd' : ["xlf"], + 'compiler_f77' : ["xlf"], + 'compiler_fix' : ["xlf90", "-qfixed"], + 'compiler_f90' : ["xlf90"], + 'linker_so' : ["xlf95"], + 'archiver' : ["ar", "-cr"], + 'ranlib' : ["ranlib"] + } + + def get_version(self,*args,**kwds): + version = FCompiler.get_version(self,*args,**kwds) + xlf_dir = '/etc/opt/ibmcmp/xlf' + if version is None and os.path.isdir(xlf_dir): + # If the output of xlf does not contain version info + # (that's the case with xlf 8.1, for instance) then + # let's try another method: + l = os.listdir(xlf_dir) + l.sort() + l.reverse() + l = [d for d in l if os.path.isfile(os.path.join(xlf_dir,d,'xlf.cfg'))] + if l: + from distutils.version import LooseVersion + self.version = version = LooseVersion(l[0]) + return version + + def get_flags(self): + return ['-qextname'] + + def get_flags_debug(self): + return ['-g'] + + def get_flags_linker_so(self): + opt = [] + if sys.platform=='darwin': + opt.append('-Wl,-bundle,-flat_namespace,-undefined,suppress') + else: + opt.append('-bshared') + version = self.get_version(ok_status=[0,40]) + if version is not None: + import tempfile + xlf_cfg = '/etc/opt/ibmcmp/xlf/%s/xlf.cfg' % version + new_cfg = tempfile.mktemp()+'_xlf.cfg' + log.info('Creating '+new_cfg) + fi = open(xlf_cfg,'r') + fo = open(new_cfg,'w') + crt1_match = re.compile(r'\s*crt\s*[=]\s*(?P<path>.*)/crt1.o').match + for line in fi.readlines(): + m = crt1_match(line) + if m: + fo.write('crt = %s/bundle1.o\n' % (m.group('path'))) + else: + fo.write(line) + fi.close() + fo.close() + opt.append('-F'+new_cfg) + return opt + + def get_flags_opt(self): + return ['-O5'] + +if __name__ == '__main__': + from distutils import log + log.set_verbosity(2) + from numpy.distutils.fcompiler import new_fcompiler + #compiler = new_fcompiler(compiler='ibm') + compiler = IbmFCompiler() + compiler.customize() + print compiler.get_version() |