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