ocarina/lib/Sconscript
Anna Schumaker 38f97fb85b lib: Improve dependency resolution
Rather than doing everything in tedious if blocks written in any order,
I instead resolve dependencies using a much simpler loop.  At the moment
each module only depends on a single other module, so this will have to
be extended if I ever need multiple-dependency resolution.

Signed-off-by: Anna Schumaker <schumaker.anna@gmail.com>
2014-04-06 19:56:54 -04:00

57 lines
1.1 KiB
Python

#!/usr/bin/python
Import("env", "CONFIG")
class Module:
def __init__(self, source = None, package = "", depends = ""):
self.depends = depends
self.package = package
self.source = source
modules = {
###########################
# #
# Define new modules here #
# #
###########################
"DATABASE" : Module("database.cpp", depends = "FILE"),
"FILE" : Module("file.cpp", package = "glib-2.0"),
"FILTER" : Module("filter.cpp", depends = "INDEX"),
"GROUP" : Module("group.cpp", depends = "INDEX"),
"IDLE" : Module("idle.cpp"),
"INDEX" : Module("index.cpp", depends = "FILE"),
###########################
###########################
}
build = []
enabled = []
def resolve(name):
CONFIG.__dict__[name] = True
mod = modules[name]
if mod.package != "":
CONFIG.package(mod.package)
res = [ env.Object(mod.source) ]
if CONFIG.__dict__.get(mod.depends) == False:
res += resolve(mod.depends)
return res
for key in modules.keys():
if CONFIG.__dict__[key] == True:
enabled += [key]
for mod in enabled:
build += resolve(mod)
Return("build")