From 6568fd4166d536a497ce8693a2c60e875c7dd08c Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Mon, 22 Nov 2010 11:48:11 +0100 Subject: [PATCH] Added includes dependencies in irpf90.make Version:1.1.59 --- src/makefile.py | 2 +- src/module.py | 13 ++++++++++++- src/preprocessed_text.py | 1 + src/variable.py | 24 +++++++++++++++++++----- 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/makefile.py b/src/makefile.py index c93ea82..a89865d 100644 --- a/src/makefile.py +++ b/src/makefile.py @@ -103,7 +103,7 @@ def run(): for m in mod: filename = "%s%s.irp.o: %s%s.irp.module.o"%(irpdir,m.name[:-4],irpdir,m.name[:-4]) mds = map (lambda x: " %s%s.irp.module.o"%(irpdir,x[:-4]),m.needed_modules) - print >>file, filename+" ".join(mds) + print >>file, filename," ".join(mds)," ".join(m.includes) if not m.is_main: buffer += "\t - @echo '"+filename+" ".join(mds)+"' >> %sdist_Makefile\n"%(irpdir) print >>file, "%sirp_touches.irp.o:"%(irpdir), diff --git a/src/module.py b/src/module.py index c03deb4..01c945d 100644 --- a/src/module.py +++ b/src/module.py @@ -92,6 +92,15 @@ class Fmodule(object): return self._needed_vars needed_vars = property(needed_vars) + def includes(self): + if '_includes' not in self.__dict__: + buffer = [] + for v in self.needed_vars: + buffer += variables[v].includes + self._includes = make_single(buffer) + return self._includes + includes = property(includes) + def generated_text(self): if '_generated_text' not in self.__dict__: result = [] @@ -200,6 +209,7 @@ class Fmodule(object): return self._dec dec = property(dec) + def needed_modules(self): if '_needed_modules' not in self.__dict__: buffer = filter(lambda x: x.lstrip().startswith("use "), \ @@ -217,9 +227,10 @@ class Fmodule(object): if __name__ == '__main__': from parsed_text import parsed_text for filename, text in parsed_text: - if filename == 'random.irp.f': + if filename == 'vmc_step.irp.f': x = Fmodule(text,filename) break for line in x.head: print line + print x.includes diff --git a/src/preprocessed_text.py b/src/preprocessed_text.py index 59c0927..cff484f 100644 --- a/src/preprocessed_text.py +++ b/src/preprocessed_text.py @@ -642,6 +642,7 @@ def change_includes(text): try: file = open(filename,'r') file.close() + result.append(Include(line.i,"! include '%s'"%filename,filename)) result += create_preprocessed_text(filename) except IOError: result.append(Declaration(line.i,line.text,line.filename)) diff --git a/src/variable.py b/src/variable.py index 6c92584..0fc61b4 100644 --- a/src/variable.py +++ b/src/variable.py @@ -92,7 +92,8 @@ class Variable(object): '''Name is lowercase''' if '_name' not in self.__dict__: buffer = None - for line in self.text: + text = self.text + for line in text: if type(line) == Begin_provider: self._name = line.filename[1] break @@ -102,8 +103,8 @@ class Variable(object): ############################################################ def doc(self): if '_doc' not in self.__dict__: - def f(l): return - buffer = filter(lambda l:type(l) == Doc, self.text) + text = self.text + buffer = filter(lambda l:type(l) == Doc, text) self._doc = map(lambda l: l.text[1:], buffer) if buffer == []: error.warn(None,"Variable %s is not documented"%(self.name)) @@ -117,13 +118,25 @@ class Variable(object): return self._documented documented = property(documented) + ############################################################ + def includes(self): + if '_includes' not in self.__dict__: + self._includes = [] + text = self.text + for line in filter(lambda x: type(x) == Include,text): + self._includes.append(line.filename) + make_single(self._includes) + return self._includes + includes = property(includes) + ############################################################ def others(self): if '_others' not in self.__dict__: result = [] append = result.append f = lambda l: type(l) in [Begin_provider, Cont_provider] - lines = filter(f, self.text) + text = self.text + lines = filter(f, text) for line in lines: append(line.filename[1]) result.remove(self.name) @@ -200,7 +213,8 @@ class Variable(object): def line(self): if '_line' not in self.__dict__: f = lambda l: type(l) in [Begin_provider, Cont_provider] - lines = filter(f, self.text) + text = self.text + lines = filter(f, text) for line in lines: buffer = line.filename[1] if self._name == buffer: