Skip to content

Commit 552be3a

Browse files
committedMar 11, 2024··
fix bug on preprocessing, add missin include
1 parent e779ab7 commit 552be3a

7 files changed

+24
-8
lines changed
 

‎src/main/python/fobis/ParsedFile.py

+20-4
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@ def apply_styles(graph):
116116
__str_kw_ieee_exceptions__ = r"[Ii][Ee][Ee][Ee]_[Ee][Xx][Cc][Ee][Pp][Tt][Ii][Oo][Nn][Ss]"
117117
__str_kw_ieee_arithmetic__ = r"[Ii][Ee][Ee][Ee]_[Aa][Rr][Ii][Tt][Hh][Mm][Ee][Tt][Ii][Cc]"
118118
__str_kw_ieee_features__ = r"[Ii][Ee][Ee][Ee]_[Ff][Ee][Aa][Tt][Uu][Rr][Ee][Ss]"
119+
__str_kw_openacc__ = r"[Oo][Pp][Ee][Nn][Aa][Cc][Cc]"
120+
__str_kw_omp_lib__ = r"[Oo][Mm][Pp]_[Ll][Ii][Bb]"
119121
__str_kw_module__ = r"[Mm][Oo][Dd][Uu][Ll][Ee]"
120122
__str_kw_submodule__ = r"[Ss][Uu][Bb][Mm][Oo][Dd][Uu][Ll][Ee]"
121123
__str_kw_program__ = r"[Pp][Rr][Oo][Gg][Rr][Aa][Mm]"
@@ -157,6 +159,14 @@ def apply_styles(graph):
157159
__str_kw_use__ + # keyword "use"
158160
r"\s+" + __str_kw_ieee_features__ + # keyword intrinsic module ieee_features
159161
r"(?P<mod_eol>(.*))")
162+
__str_use_mod_openacc__ = (r"^(\s*)" + # eventual initial white spaces
163+
__str_kw_use__ + # keyword "use"
164+
r"\s+" + r"(.*)" + __str_kw_openacc__ + r".*" + # keyword intrinsic module openacc
165+
r"(?P<mod_eol>(.*))")
166+
__str_use_mod_omp_lib__ = (r"^(\s*)" + # eventual initial white spaces
167+
__str_kw_use__ + # keyword "use"
168+
r"\s+" + r"(.*)" + __str_kw_omp_lib__ + r".*" + # keyword intrinsic module omp_lib
169+
r"(?P<mod_eol>(.*))")
160170
__str_include__ = (r"^(\s*|\#)" + # eventual initial white spaces or "#" character
161171
__str_kw_include__ + # keyword "include"
162172
r"(\s+)" + # 1 or more white spaces
@@ -196,12 +206,16 @@ def apply_styles(graph):
196206
__regex_use_mod_ieee_exceptions__ = re.compile(__str_use_mod_ieee_exceptions__)
197207
__regex_use_mod_ieee_arithmetic__ = re.compile(__str_use_mod_ieee_arithmetic__)
198208
__regex_use_mod_ieee_features__ = re.compile(__str_use_mod_ieee_features__)
209+
__regex_use_mod_openacc__ = re.compile(__str_use_mod_openacc__)
210+
__regex_use_mod_omp_lib__ = re.compile(__str_use_mod_omp_lib__)
199211
__regex_use_intrinsic_modules__ = [__regex_use_mod_intrinsic__,
200212
__regex_use_mod_iso_fortran_env__,
201213
__regex_use_mod_iso_c_binding__,
202214
__regex_use_mod_ieee_exceptions__,
203215
__regex_use_mod_ieee_arithmetic__,
204-
__regex_use_mod_ieee_features__]
216+
__regex_use_mod_ieee_features__,
217+
__regex_use_mod_openacc__,
218+
__regex_use_mod_omp_lib__]
205219
__regex_mpifh__ = re.compile(__str_mpifh__)
206220

207221
# alternative "open and read"... it should avoid encoding issues with python 2.X vs 3.X
@@ -297,7 +311,7 @@ def sort_dependencies(self):
297311
self.pfile_dep_all.sort(key=operator.attrgetter('order'), reverse=True)
298312
return
299313

300-
def parse(self, inc, preprocessor='cpp', preproc=''):
314+
def parse(self, inc=['.INC', '.F', '.FOR', '.FPP', '.F77', '.F90', '.F95', '.F03', '.F08'], preprocessor='cpp', preproc='', include=''):
301315
"""
302316
Parse the file creating its the dependencies list and the list of modules names that self eventually contains.
303317
@@ -309,12 +323,14 @@ def parse(self, inc, preprocessor='cpp', preproc=''):
309323
preprocessor name
310324
preproc : str
311325
preprocessor flags
326+
include : list
327+
include directories
312328
"""
313329
self.module_names = []
314330
self.submodule_names = []
315331
self.dependencies = []
316332

317-
if self.extension in ['.INC', '.F', '.FOR', '.FPP', '.F77', '.F90', '.F95', '.F03', '.F08']:
333+
if self.extension in inc:
318334
preprocessor_exist = False
319335
for path in os.environ["PATH"].split(os.pathsep):
320336
preprocessor_exist = os.path.exists(os.path.join(path, preprocessor))
@@ -325,7 +341,7 @@ def parse(self, inc, preprocessor='cpp', preproc=''):
325341
preprocessor += ' -C -w '
326342
elif preprocessor == 'fpp':
327343
preprocessor += ' -w '
328-
source = str(check_output(preprocessor + ' ' + preproc + ' ' + self.name, shell=True, stderr=STDOUT, encoding='UTF-8'))
344+
source = str(check_output(preprocessor + ' ' + preproc + ' ' + '-I'.join(include) + ' ' + self.name, shell=True, stderr=STDOUT, encoding='UTF-8'))
329345
source = source.replace('\\n', '\n')
330346
else:
331347
source = str(openReader(self.name).read())
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

‎src/main/python/fobis/fobis.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -258,9 +258,9 @@ def parse_files(configuration, src_dir=None, is_doctest=False):
258258
all(exc not in os.path.dirname(filename) for exc in configuration.cliargs.exclude_dirs)):
259259
pfile = ParsedFile(name=os.path.join(src_dir, filename), is_doctest=is_doctest)
260260
if is_doctest:
261-
pfile.parse(inc=configuration.cliargs.inc, preprocessor=configuration.cliargs.doctests_preprocessor, preproc=configuration.cliargs.preproc)
261+
pfile.parse(inc=configuration.cliargs.inc, preprocessor=configuration.cliargs.doctests_preprocessor, preproc=configuration.cliargs.preproc, include=configuration.cliargs.include)
262262
else:
263-
pfile.parse(inc=configuration.cliargs.inc, preproc=configuration.cliargs.preproc)
263+
pfile.parse(inc=configuration.cliargs.inc, preproc=configuration.cliargs.preproc, include=configuration.cliargs.include)
264264
pfiles.append(pfile)
265265
else:
266266
for root, _, files in os.walk(src_dir):
@@ -271,9 +271,9 @@ def parse_files(configuration, src_dir=None, is_doctest=False):
271271
filen = os.path.join(root, filename)
272272
pfile = ParsedFile(name=filen, is_doctest=is_doctest)
273273
if is_doctest:
274-
pfile.parse(inc=configuration.cliargs.inc, preprocessor=configuration.cliargs.doctests_preprocessor, preproc=configuration.cliargs.preproc)
274+
pfile.parse(inc=configuration.cliargs.inc, preprocessor=configuration.cliargs.doctests_preprocessor, preproc=configuration.cliargs.preproc, include=configuration.cliargs.include)
275275
else:
276-
pfile.parse(inc=configuration.cliargs.inc, preproc=configuration.cliargs.preproc)
276+
pfile.parse(inc=configuration.cliargs.inc, preproc=configuration.cliargs.preproc, include=configuration.cliargs.include)
277277
pfiles.append(pfile)
278278
return pfiles
279279

0 commit comments

Comments
 (0)
Please sign in to comment.