[petsc-dev] preprocessor for Fortran?
Balay, Satish
balay at mcs.anl.gov
Mon Aug 12 10:37:37 CDT 2019
On Sun, 11 Aug 2019, Satish Balay wrote:
> On Sun, 11 Aug 2019, Smith, Barry F. via petsc-dev wrote:
>
> > Matt and Satish,
> >
> > Years ago we had to sometimes use the C preprocessor for preprocessor Fortran code. Isn't that no longer needed?
>
> Don't remember when we removed this. Previously we needed this only for xlf - because it didn't support -D
> But then - we stopped using -D flags as part of the build. And when needed this for externalpackages - we
> use checkFortranDefineCompilerOption() to set the flag correctly for either ['-D', '-WF,-D']
>
> >
> > In FC.py there is
> >
> > class Preprocessor(config.compile.C.Preprocessor):
> > '''The Fortran preprocessor, which now is just the C preprocessor'''
> > def __init__(self, argDB):
> > config.compile.C.Preprocessor.__init__(self, argDB)
> > self.language = 'FC'
> > self.targetExtension = '.F90'
> > self.includeDirectories = sets.Set()
> > return
> >
> > class Compiler(config.compile.processor.Processor):
> > '''The Fortran compiler'''
> >
> >
> > which implies that C preprocessor is still handing around the Fortran. Now when all the Fortran compiler flags are generated with getFlags() it seems to include those from CPPFLAGS?
> >
> > Is this correct now? I don't think it should be? Should there be a separate FCCPPFLAGS? Bad things happen in the current situation when I set CPPFLAGS needed for clang but not for gfortran when MPICH is configured the CPPFLAGS are passed to the FCFLAGS which breaks things.
>
> I think things CPP was a bit central - and used with both Fortran and Cxx.
>
> But at some point CXXPP and CXXPPFLAGS were added [but I'm not sure if it was correctly used.]
>
> >
> > I cannot find the exact line of code when the FFLAGS and CPPFLAGS are merged together for Fortran but I assume it is
>
> I see its in getPreprocessorFlagsName() in config/BuildSystem/config/base.py
>
> >
> > def getFlags(self):
> > '''Returns a string with the flags specified for running this processor.'''
> > if not hasattr(self, '_flags'):
> > flagsName = self.flagsName[:]
> > if self.name == self.compiler.name:
> > flagsName.extend(self.compiler.flagsName)
> > if hasattr(self, 'configCompilers'):
> > flags = ' '.join([getattr(self.configCompilers, name) for name in flagsName])
> > else:
> > flags = ' '.join([self.argDB[name] for name in flagsName])
> > return flags
> > return self._flags
> > flags = property(getFlags, config.compile.processor.Processor.setFlags, doc = 'The flags for the executable')
> >
> >
> > How can this be fixed?
>
> I pushed some changes to balay/add-FPPFLAGS branch. This appears to
> work for me. But its likely that I don't understand all the
> inter-dependencies between these options - so it might still be
> buggy..
Now these changes are at:
https://bitbucket.org/petsc/petsc/pull-requests/1962/configure-add-fppflags-and-not-use/diff
Satish
More information about the petsc-dev
mailing list