@@ -297,20 +297,42 @@ def sort_dependencies(self):
297
297
self .pfile_dep_all .sort (key = operator .attrgetter ('order' ), reverse = True )
298
298
return
299
299
300
- def parse (self , inc , preprocessor = 'cpp' ):
300
+ def parse (self , inc , preprocessor = 'cpp' , preproc = '' ):
301
301
"""
302
302
Parse the file creating its the dependencies list and the list of modules names that self eventually contains.
303
303
304
304
Parameters
305
305
----------
306
306
inc : list
307
307
list of extensions of included files
308
+ preprocessor : str
309
+ preprocessor name
310
+ preproc : str
311
+ preprocessor flags
308
312
"""
309
313
self .module_names = []
310
314
self .submodule_names = []
311
315
self .dependencies = []
312
- ffile = openReader (self .name )
313
- for line in ffile :
316
+
317
+ if self .extension in ['.INC' , '.F' , '.FOR' , '.FPP' , '.F77' , '.F90' , '.F95' , '.F03' , '.F08' ]:
318
+ preprocessor_exist = False
319
+ for path in os .environ ["PATH" ].split (os .pathsep ):
320
+ preprocessor_exist = os .path .exists (os .path .join (path , preprocessor ))
321
+ if preprocessor_exist :
322
+ break
323
+ if preprocessor_exist :
324
+ if preprocessor == 'cpp' :
325
+ preprocessor += ' -C -w '
326
+ elif preprocessor == 'fpp' :
327
+ preprocessor += ' -w '
328
+ source = str (check_output (preprocessor + ' ' + preproc + ' ' + self .name , shell = True , stderr = STDOUT , encoding = 'UTF-8' ))
329
+ source = source .replace ('\\ n' , '\n ' )
330
+ else :
331
+ source = str (openReader (self .name ).read ())
332
+ else :
333
+ source = str (openReader (self .name ).read ())
334
+
335
+ for line in source .split ('\n ' ):
314
336
matching = re .match (__regex_program__ , line )
315
337
if matching :
316
338
self .program = True
@@ -335,30 +357,9 @@ def parse(self, inc, preprocessor='cpp'):
335
357
if not re .match (__regex_mpifh__ , line ):
336
358
dep = Dependency (dtype = "include" , name = matching .group ('name' ))
337
359
self .dependencies .append (dep )
338
- ffile .close ()
339
360
340
361
if self .module :
341
362
self .doctest = Doctest ()
342
-
343
- if self .extension in ['.INC' , '.F' , '.FOR' , '.FPP' , '.F77' , '.F90' , '.F95' , '.F03' , '.F08' ]:
344
- preprocessor_exist = False
345
- for path in os .environ ["PATH" ].split (os .pathsep ):
346
- preprocessor_exist = os .path .exists (os .path .join (path , preprocessor ))
347
- if preprocessor_exist :
348
- break
349
- if preprocessor_exist :
350
- if preprocessor == 'cpp' :
351
- preprocessor += ' -C -w '
352
- elif preprocessor == 'fpp' :
353
- preprocessor += ' -w '
354
- source = str (check_output (preprocessor + self .name , shell = True , stderr = STDOUT , encoding = 'UTF-8' ))
355
- source = source .replace ('\\ n' , '\n ' )
356
- else :
357
- source = str (openReader (self .name ).read ())
358
-
359
- else :
360
- source = str (openReader (self .name ).read ())
361
-
362
363
self .doctest .parse (source = source )
363
364
self .doctest .make_volatile_programs ()
364
365
0 commit comments