xref: /petsc/config/BuildSystem/config/utilities/fortranCommandLine.py (revision 0fdf79fb08699bf9be0aa4d8ba0185e387a216c8)
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    # These are for when the routines are called from C
40    # We should unify the naming conventions of these.
41    self.pushLanguage('C')
42    self.libraries.saveLog()
43    self.functions.saveLog()
44    if self.libraries.check('','getarg', otherLibs = self.compilers.flibs, fortranMangle = 1):
45      self.logWrite(self.functions.restoreLog())
46      self.logWrite(self.libraries.restoreLog())
47      self.popLanguage()
48      self.addDefine('HAVE_GETARG',1)
49      return
50
51    self.pushLanguage('C')
52    self.libraries.saveLog()
53    self.functions.saveLog()
54    if self.functions.check('ipxfargc_', libraries = self.compilers.flibs):
55      self.logWrite(self.functions.restoreLog())
56      self.logWrite(self.libraries.restoreLog())
57      self.popLanguage()
58      self.addDefine('HAVE_PXFGETARG_NEW',1)
59      return
60
61    self.pushLanguage('C')
62    self.libraries.saveLog()
63    self.functions.saveLog()
64    if self.functions.check('f90_unix_MP_iargc', libraries = self.compilers.flibs):
65      self.logWrite(self.functions.restoreLog())
66      self.logWrite(self.libraries.restoreLog())
67      self.popLanguage()
68      self.addDefine('HAVE_NAGF90',1)
69      return
70
71    self.pushLanguage('C')
72    self.libraries.saveLog()
73    self.functions.saveLog()
74    if self.functions.check('PXFGETARG', libraries = self.compilers.flibs):
75      self.logWrite(self.functions.restoreLog())
76      self.logWrite(self.libraries.restoreLog())
77      self.popLanguage()
78      self.addDefine('HAVE_PXFGETARG',1)
79      return
80
81    self.pushLanguage('C')
82    self.libraries.saveLog()
83    self.functions.saveLog()
84    if self.functions.check('iargc_', libraries = self.compilers.flibs):
85      self.logWrite(self.functions.restoreLog())
86      self.logWrite(self.libraries.restoreLog())
87      self.popLanguage()
88      self.addDefine('HAVE_BGL_IARGC',1)
89      return
90
91    self.pushLanguage('C')
92    self.libraries.saveLog()
93    self.functions.saveLog()
94    if self.functions.check('GETARG@16', libraries = self.compilers.flibs):
95      self.logWrite(self.functions.restoreLog())
96      self.logWrite(self.libraries.restoreLog())
97      self.popLanguage()
98      self.addDefine('USE_NARGS',1)
99      self.addDefine('HAVE_IARG_COUNT_PROGNAME',1)
100      return
101
102    self.pushLanguage('C')
103    self.libraries.saveLog()
104    self.functions.saveLog()
105    self.functions.check('_gfortran_iargc', libraries = self.compilers.flibs)
106    self.logWrite(self.functions.restoreLog())
107    self.logWrite(self.libraries.restoreLog())
108    self.popLanguage()
109    return
110
111  def configure(self):
112    if hasattr(self.setCompilers, 'FC'):
113      self.executeTest(self.configureFortranCommandLine)
114    return
115