xref: /petsc/config/BuildSystem/config/utilities/fortranCommandLine.py (revision f5476a2b443e0eedb22d31cb1b2d85b9b918f73f)
1#!/usr/bin/env python
2from __future__ import generators
3import user
4import config.base
5
6class Configure(config.base.Configure):
7  def __init__(self, framework):
8    config.base.Configure.__init__(self, framework)
9    self.headerPrefix = ''
10    self.substPrefix  = ''
11    return
12
13  def __str__(self):
14    return ''
15
16  def setupHelp(self, help):
17    import nargs
18    return
19
20  def setupDependencies(self, framework):
21    config.base.Configure.setupDependencies(self, framework)
22    self.compilers = self.framework.require('config.compilers', self)
23    self.functions = self.framework.require('config.functions', self)
24    self.libraries     = framework.require('config.libraries',  self)
25    return
26
27  def configureFortranCommandLine(self):
28    '''Check for the mechanism to retrieve command line arguments in Fortran'''
29
30    # These are for when the routines are called from Fortran
31    if hasattr(self.compilers, 'FC'):
32      self.libraries.pushLanguage('FC')
33      if self.libraries.check('','', call = '      integer i\n      character*(80) arg\n       call get_command_argument(i,arg)'):
34        self.addDefine('HAVE_FORTRAN_GET_COMMAND_ARGUMENT',1)
35      elif self.libraries.check('','', call = '      integer i\n      character*(80) arg\n       call getarg(i,arg)'):
36        self.addDefine('HAVE_FORTRAN_GETARG',1)
37      self.libraries.popLanguage()
38
39    # These are for when the routines are called fraom C
40    # We should unify the naming conventions of these.
41    self.pushLanguage('C')
42    # This one is not currently used in PETSc source code
43    if self.libraries.check('','get_command_argument', otherLibs = self.compilers.flibs, fortranMangle = 1):
44      self.addDefine('HAVE_GET_COMMAND_ARGUMENT',1)
45    if self.libraries.check('','getarg', otherLibs = self.compilers.flibs, fortranMangle = 1):
46      self.addDefine('HAVE_GETARG',1)
47    if self.functions.check('ipxfargc_', libraries = self.compilers.flibs):
48      self.addDefine('HAVE_PXFGETARG_NEW',1)
49    elif self.functions.check('f90_unix_MP_iargc', libraries = self.compilers.flibs):
50      self.addDefine('HAVE_NAGF90',1)
51    elif self.functions.check('PXFGETARG', libraries = self.compilers.flibs):
52      self.addDefine('HAVE_PXFGETARG',1)
53    elif self.functions.check('iargc_', libraries = self.compilers.flibs):
54      self.addDefine('HAVE_BGL_IARGC',1)
55    elif self.functions.check('GETARG@16', libraries = self.compilers.flibs):
56      self.addDefine('USE_NARGS',1)
57      self.addDefine('HAVE_IARG_COUNT_PROGNAME',1)
58    elif self.functions.check('_gfortran_iargc', libraries = self.compilers.flibs):
59      self.addDefine('HAVE_GFORTRAN_IARGC',1)
60    self.popLanguage()
61    return
62
63  def configure(self):
64    self.executeTest(self.configureFortranCommandLine)
65    return
66