xref: /petsc/config/BuildSystem/config/utilities/fortranCommandLine.py (revision 35cb6cd333087cc89d8d5031932d4f38af02614d)
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.functions.check('ipxfargc_', libraries = self.compilers.flibs):
53      self.logWrite(self.functions.restoreLog())
54      self.logWrite(self.libraries.restoreLog())
55      self.popLanguage()
56      self.addDefine('HAVE_PXFGETARG_NEW',1)
57      return
58
59    self.pushLanguage('C')
60    self.libraries.saveLog()
61    self.functions.saveLog()
62    if self.functions.check('f90_unix_MP_iargc', libraries = self.compilers.flibs):
63      self.logWrite(self.functions.restoreLog())
64      self.logWrite(self.libraries.restoreLog())
65      self.popLanguage()
66      self.addDefine('HAVE_NAGF90',1)
67      return
68
69    self.pushLanguage('C')
70    self.libraries.saveLog()
71    self.functions.saveLog()
72    if self.functions.check('PXFGETARG', libraries = self.compilers.flibs):
73      self.logWrite(self.functions.restoreLog())
74      self.logWrite(self.libraries.restoreLog())
75      self.popLanguage()
76      self.addDefine('HAVE_PXFGETARG',1)
77      return
78
79    self.pushLanguage('C')
80    self.libraries.saveLog()
81    self.functions.saveLog()
82    if self.functions.check('iargc_', libraries = self.compilers.flibs):
83      self.logWrite(self.functions.restoreLog())
84      self.logWrite(self.libraries.restoreLog())
85      self.popLanguage()
86      self.addDefine('HAVE_BGL_IARGC',1)
87      return
88
89    self.pushLanguage('C')
90    self.libraries.saveLog()
91    self.functions.saveLog()
92    if self.functions.check('GETARG@16', libraries = self.compilers.flibs):
93      self.logWrite(self.functions.restoreLog())
94      self.logWrite(self.libraries.restoreLog())
95      self.popLanguage()
96      self.addDefine('USE_NARGS',1)
97      self.addDefine('HAVE_IARG_COUNT_PROGNAME',1)
98      return
99
100    self.pushLanguage('C')
101    self.libraries.saveLog()
102    self.functions.saveLog()
103    self.functions.check('_gfortran_iargc', libraries = self.compilers.flibs)
104    self.logWrite(self.functions.restoreLog())
105    self.logWrite(self.libraries.restoreLog())
106    self.popLanguage()
107    return
108
109  def configure(self):
110    if hasattr(self.setCompilers, 'FC'):
111      self.executeTest(self.configureFortranCommandLine)
112    return
113