xref: /petsc/config/BuildSystem/config/utilities/fortranCommandLine.py (revision e66e6034addb69ed78763a9959635ebb267bdbde)
1from __future__ import generators
2import config.base
3
4class Configure(config.base.Configure):
5  def __init__(self, framework):
6    config.base.Configure.__init__(self, framework)
7    self.headerPrefix = ''
8    self.substPrefix  = ''
9    return
10
11  def __str__(self):
12    return ''
13
14  def setupHelp(self, help):
15    import nargs
16    return
17
18  def setupDependencies(self, framework):
19    config.base.Configure.setupDependencies(self, framework)
20    self.compilers    = self.framework.require('config.compilers', self)
21    self.setCompilers = self.framework.require('config.setCompilers', self)
22    self.functions    = self.framework.require('config.functions', self)
23    self.libraries    = framework.require('config.libraries',  self)
24    return
25
26  def configureFortranCommandLine(self):
27    '''Check for the mechanism to retrieve command line arguments in Fortran'''
28
29    # These are for when the routines are called from Fortran
30
31    self.libraries.pushLanguage('FC')
32    self.libraries.saveLog()
33    if self.libraries.check('','', call = '      integer i\n      character*(80) arg\n       i = command_argument_count()\n       call get_command_argument(i,arg)'):
34      self.logWrite(self.libraries.restoreLog())
35      self.libraries.popLanguage()
36      self.addDefine('HAVE_FORTRAN_GET_COMMAND_ARGUMENT',1)
37      return
38
39    self.libraries.pushLanguage('FC')
40    self.libraries.saveLog()
41    if self.libraries.check('','', call = '      integer i\n      character*(80) arg\n       call getarg(i,arg)'):
42      self.logWrite(self.libraries.restoreLog())
43      self.libraries.popLanguage()
44      self.addDefine('HAVE_FORTRAN_GETARG',1)
45      return
46
47    # These are for when the routines are called from C
48    # We should unify the naming conventions of these.
49    self.pushLanguage('C')
50    self.libraries.saveLog()
51    self.functions.saveLog()
52    if self.libraries.check('','getarg', otherLibs = self.compilers.flibs, fortranMangle = 1):
53      self.logWrite(self.functions.restoreLog())
54      self.logWrite(self.libraries.restoreLog())
55      self.popLanguage()
56      self.addDefine('HAVE_GETARG',1)
57      return
58
59    self.pushLanguage('C')
60    self.libraries.saveLog()
61    self.functions.saveLog()
62    if self.functions.check('ipxfargc_', libraries = self.compilers.flibs):
63      self.logWrite(self.functions.restoreLog())
64      self.logWrite(self.libraries.restoreLog())
65      self.popLanguage()
66      self.addDefine('HAVE_PXFGETARG_NEW',1)
67      return
68
69    self.pushLanguage('C')
70    self.libraries.saveLog()
71    self.functions.saveLog()
72    if self.functions.check('f90_unix_MP_iargc', libraries = self.compilers.flibs):
73      self.logWrite(self.functions.restoreLog())
74      self.logWrite(self.libraries.restoreLog())
75      self.popLanguage()
76      self.addDefine('HAVE_NAGF90',1)
77      return
78
79    self.pushLanguage('C')
80    self.libraries.saveLog()
81    self.functions.saveLog()
82    if self.functions.check('PXFGETARG', libraries = self.compilers.flibs):
83      self.logWrite(self.functions.restoreLog())
84      self.logWrite(self.libraries.restoreLog())
85      self.popLanguage()
86      self.addDefine('HAVE_PXFGETARG',1)
87      return
88
89    self.pushLanguage('C')
90    self.libraries.saveLog()
91    self.functions.saveLog()
92    if self.functions.check('iargc_', libraries = self.compilers.flibs):
93      self.logWrite(self.functions.restoreLog())
94      self.logWrite(self.libraries.restoreLog())
95      self.popLanguage()
96      self.addDefine('HAVE_BGL_IARGC',1)
97      return
98
99    self.pushLanguage('C')
100    self.libraries.saveLog()
101    self.functions.saveLog()
102    if self.functions.check('GETARG@16', libraries = self.compilers.flibs):
103      self.logWrite(self.functions.restoreLog())
104      self.logWrite(self.libraries.restoreLog())
105      self.popLanguage()
106      self.addDefine('USE_NARGS',1)
107      self.addDefine('HAVE_IARG_COUNT_PROGNAME',1)
108      return
109
110    self.pushLanguage('C')
111    self.libraries.saveLog()
112    self.functions.saveLog()
113    self.functions.check('_gfortran_iargc', libraries = self.compilers.flibs)
114    self.logWrite(self.functions.restoreLog())
115    self.logWrite(self.libraries.restoreLog())
116    self.popLanguage()
117    return
118
119  def configure(self):
120    if hasattr(self.setCompilers, 'FC'):
121      self.executeTest(self.configureFortranCommandLine)
122    return
123