Commit 808898cf authored by Paweł Szostek's avatar Paweł Szostek

Add HDLMAKE_COREDIR env var handling

parent 94de4b49
......@@ -25,7 +25,6 @@ from connection import Connection
import global_mod
import msg as p
import optparse
from module import Module
from fetch import ModulePool
def main():
......@@ -103,15 +102,13 @@ use 0 for current version""", metavar="ISE")
p.vprint("LoadTopManifest");
pool = ModulePool()
m = Module(parent=None, url=os.getcwd(), source="local", fetchto=".", pool=pool )
pool.set_top_module(m)
pool.new_module(parent=None, url=os.getcwd(), source="local", fetchto=".")
if m.manifest == None:
if pool.get_top_module().manifest == None:
p.rawprint("No manifest found. At least an empty one is needed")
p.rawprint("To see some help, type hdlmake --help")
quit()
global_mod.top_module = m
global_mod.top_module.parse_manifest()
global_mod.top_module = pool.get_top_module()
global_mod.global_target = global_mod.top_module.target
......
......@@ -22,12 +22,12 @@
import os
import msg as p
import path
import global_mod
class ModulePool(list):
class ModuleFetcher:
def __init__(self):
pass
def fetch_single_module(self, module):
import global_mod
new_modules = []
......@@ -47,7 +47,7 @@ class ModulePool(list):
new_modules.extend(module.local)
new_modules.extend(module.svn)
new_modules.extend(module.git)
return new_modules
return new_modules
def __fetch_from_svn(self, module):
if not os.path.exists(module.fetchto):
......@@ -119,7 +119,8 @@ class ModulePool(list):
#end class ModuleFetcher
def __init__(self):
self.top_module = None
self.top_module = None
self.global_fetch = os.getenv("HDLMAKE_COREDIR")
def get_fetchable_modules(self):
return [m for m in self if m.source != "local"]
......@@ -132,21 +133,23 @@ class ModulePool(list):
if mod.url == module.url:
return True
return False
def set_top_module(self, module):
self.top_module = module
self.add(module)
def Module(self, parent, url, source, fetchto):
def new_module(self, parent, url, source, fetchto):
from module import Module
if url in [m.url for m in self]:
return [m for m in self if m.url == url][0]
else:
if self.global_fetch: # if there is global fetch parameter (HDLMAKE_COREDIR env variable)
fetchto = self.global_fetch # screw module's particular fetchto
new_module = Module(parent=parent, url=url, source=source, fetchto=fetchto, pool=self)
self.add(new_module)
self._add(new_module)
if not self.top_module:
global_mod.top_module = new_module
self.top_module = new_module
new_module.parse_manifest()
return new_module
def add(self, new_module):
def _add(self, new_module):
from module import Module
if not isinstance(new_module, Module):
raise RuntimeError("Expecting a Module instance")
......@@ -154,13 +157,13 @@ class ModulePool(list):
return False
if new_module.isfetched:
for mod in new_module.submodules():
self.add(mod)
self._add(mod)
self.append(new_module)
return True
def fetch_all(self, unfetched_only = False):
fetcher = self.ModuleFetcher()
fetch_queue = list(self)
fetch_queue = [m for m in self]
while len(fetch_queue) > 0:
cur_mod = fetch_queue.pop()
......
......@@ -283,7 +283,7 @@ class ModelsiminiReader(object):
try:
ini = open(self.path, "r")
except Exception, e:
except Exception:
return []
reading_libraries = False
......
......@@ -46,6 +46,7 @@ class Module(object):
else:
return path.url_basename(self.url)
#PLEASE don't use this constructor. Create all modules with ModulePool.new_module()
def __init__(self, parent, url, source, fetchto, pool):
import path
self.fetchto = fetchto
......@@ -197,7 +198,7 @@ class Module(object):
p.echo("(" + self.path + ")")
quit()
path = path_mod.rel2abs(path, self.path)
local_mods.append(self.pool.Module(parent=self, url=path, source="local", fetchto=fetchto))
local_mods.append(self.pool.new_module(parent=self, url=path, source="local", fetchto=fetchto))
self.local = local_mods
else:
self.local = []
......@@ -246,7 +247,7 @@ class Module(object):
opt_map["modules"]["svn"] = self.__make_list(opt_map["modules"]["svn"])
svn_mods = []
for url in opt_map["modules"]["svn"]:
svn_mods.append(self.pool.Module(parent=self, url=url, source="svn", fetchto=fetchto))
svn_mods.append(self.pool.new_module(parent=self, url=url, source="svn", fetchto=fetchto))
self.svn = svn_mods
else:
self.svn = []
......@@ -255,7 +256,7 @@ class Module(object):
opt_map["modules"]["git"] = self.__make_list(opt_map["modules"]["git"])
git_mods = []
for url in opt_map["modules"]["git"]:
git_mods.append(self.pool.Module(parent=self, url=url, source="git", fetchto=fetchto))
git_mods.append(self.pool.new_module(parent=self, url=url, source="git", fetchto=fetchto))
self.git = git_mods
else:
self.git = []
......
......@@ -55,13 +55,13 @@ def print_version():
rawprint("Hdlmake build "+global_mod.BUILD_ID)
def print_action_help():
p.rawprint("`Action' variable was not specified")
p.rawprint("Allowed values are: \"simulation\" or \"synthesis\"")
p.rawprint()
p.rawprint("This variable in a manifest file is necessary for Hdlmake " \
rawprint("`Action' variable was not specified")
rawprint("Allowed values are: \"simulation\" or \"synthesis\"")
rawprint()
rawprint("This variable in a manifest file is necessary for Hdlmake " \
"to be able to know what to do with the given modules' structure.")
basic()
def basic():
p.rawprint("For more help type `hdlmake --help' " \
rawprint("For more help type `hdlmake --help' " \
"or visit http://www.ohwr.org/projects/hdl-make")
\ No newline at end of file
......@@ -42,7 +42,6 @@ def url_parse(url):
"""
Check if link to a repo seems to be correct. Filter revision number and branch
"""
import re
"""url_pat = re.compile("[ \t]*([^ \t]+?)[ \t]*(::)?([^ \t@]+)?(@[ \t]*(.+))?[ \t]*")
url_match = re.match(url_pat, url)
if url_match == None:
......
......@@ -205,10 +205,10 @@ class VerilogFile(SourceFile):
self.vlog_opt = vlog_opt
def __create_deps(self):
self.dep_requires = self.__search_includes()
self.dep_requires = self.__get_includes()
self.dep_provides = self.name
def __search_includes(self):
def __get_includes(self):
import re
f = open(self.path, "r")
try:
......@@ -264,7 +264,7 @@ class WBGenFile(File):
class SourceFileSet(list):
def __init__(self):
self = [];
pass
def __str__(self):
return str([str(f) for f in self.files])
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment