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