From 4bf66921df55c092d180bfeacf4f28c7327ec819 Mon Sep 17 00:00:00 2001 From: Bryan Schumaker Date: Thu, 13 Sep 2012 19:58:28 -0400 Subject: [PATCH] Improve build scripts The build system hadn't been touched in a while, so it needed some cleaning up. I moved ocarina-specific files into the ocarina/ directory and use the ocarina/Sconscript to set up build commands. Signed-off-by: Bryan Schumaker --- Sconstruct | 44 ++++++--------------- config.py | 11 +++++- images/Sconscript | 21 ---------- include/Sconscript | 2 + ocarina/Sconscript | 22 ++++++++--- {images => ocarina/images}/dice.png | Bin {images => ocarina/images}/ocarina.png | Bin {images => ocarina/images}/ocarina512.png | Bin {images => ocarina/images}/random.png | Bin {images => ocarina/images}/thumbs_down.png | Bin {images => ocarina/images}/thumbs_up.png | Bin {xml => ocarina}/ocarina.xml | 0 xml/Sconscript | 17 -------- 13 files changed, 39 insertions(+), 78 deletions(-) delete mode 100644 images/Sconscript rename {images => ocarina/images}/dice.png (100%) rename {images => ocarina/images}/ocarina.png (100%) rename {images => ocarina/images}/ocarina512.png (100%) rename {images => ocarina/images}/random.png (100%) rename {images => ocarina/images}/thumbs_down.png (100%) rename {images => ocarina/images}/thumbs_up.png (100%) rename {xml => ocarina}/ocarina.xml (100%) delete mode 100644 xml/Sconscript diff --git a/Sconstruct b/Sconstruct index 4139c588..3168abe2 100644 --- a/Sconstruct +++ b/Sconstruct @@ -7,13 +7,10 @@ if config.DEBUG == True: FLAGS = ["-Wall", "-Werror", "-g", "-DDEBUG"] POSTFIX = "-debug" -env = Environment(CCFLAGS = FLAGS) +config.env = Environment(CCFLAGS = FLAGS) if ARGUMENTS.get('VERBOSE') != "1": - env.Append(CXXCOMSTR = "C++ $TARGET") - env.Append(LINKCOMSTR = "Linking $TARGET") -env.Append(CPPPATH = "include") - -config.env = env + config.env.Append(CXXCOMSTR = "C++ $TARGET") + config.env.Append(LINKCOMSTR = "Linking $TARGET") # Make sure these directories exist before doing anything if not os.path.exists("bin"): @@ -21,30 +18,11 @@ if not os.path.exists("bin"): if not os.path.exists("lib"): os.mkdir("lib") -def directory(dirs): - objs = [] - for dir in dirs: - files = SConscript("%s/Sconscript" % dir) - if files: - objs.append(files) - return objs +config.include = SConscript("include/Sconscript") +config.libsaria = SConscript("libsaria/Sconscript") -def app_directory(app, dirs): - name = config.application - config.application = app - ret = directory(dirs) - config.application = name - return ret - -def symlink(target, source, env): - os.symlink(str(source[0]), str(target[0])) - -SConscript(['include/Sconscript']) -ocarina = env.Program('bin/ocarina-player', directory(["libsaria", "ocarina"])) -oc_link = env.Command("ocarina.bin", "bin/ocarina-player", symlink) -oc_other = app_directory("ocarina", ["scripts", "images", "xml"]) -Default([ocarina, oc_link, oc_other]) -env.Alias("ocarina", [ocarina, oc_link, oc_other]) +ocarina = SConscript("ocarina/Sconscript") +Default(ocarina) # Install bin/ and lib/ def install_dirs(dirs): @@ -53,13 +31,13 @@ def install_dirs(dirs): target = os.path.join(config.PREFIX, dir) for file in os.listdir(dir): source = os.path.join(dir, file) - env.Install(target, source) + config.env.Install(target, source) res += [target] return res dirs = install_dirs(["bin/", "lib/"]) -env.Alias("install", dirs) -env.Command("uninstall", None, Delete(FindInstalledFiles())) +config.env.Alias("install", dirs) +config.env.Command("uninstall", None, Delete(FindInstalledFiles())) # Clean up the build directory clean = Clean(ocarina, ["include/version.h", "bin/", "lib/"]) @@ -87,4 +65,4 @@ def prepare_release(target, source, env): f.write(line) f.close() -env.Command("release", None, [prepare_release]) +config.env.Command("release", None, [prepare_release]) diff --git a/config.py b/config.py index 602ee761..290aceee 100644 --- a/config.py +++ b/config.py @@ -1,5 +1,5 @@ #!/usr/bin/python -import os +import os, shutil MAJOR = 5 MINOR = 11 @@ -21,8 +21,15 @@ PREFIX = "/usr" env = None -application = "libsaria" +include = [] +libsaria = [] def get_cpp_files(): dirs = [x[0] for x in os.walk(".")] return [env.Glob(dir + "/*.cpp") for dir in dirs] + +def copy(target, source, env): + shutil.copy(str(source[0]), str(target[0])) + +def symlink(target, source, env): + os.symlink(str(source[0]), str(target[0])) diff --git a/images/Sconscript b/images/Sconscript deleted file mode 100644 index 15eb3557..00000000 --- a/images/Sconscript +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/python -import shutil -from config import * - -lib = "../lib/" + application + "/%s" - -def copy_image(target, source, env): - dst = str(target[0].rfile()) - src = str(source[0].rfile()) - shutil.copy(src, dst) - -images = [] -if application == "ocarina": - images = ["ocarina.png", "ocarina512.png"] - -files = [] -for image in images: - dst = lib % image - files.append(env.Command(dst, image, copy_image)) - -Return('files') diff --git a/include/Sconscript b/include/Sconscript index 5d094ee2..db4534a1 100644 --- a/include/Sconscript +++ b/include/Sconscript @@ -10,3 +10,5 @@ for line in open("version.tmpl", "r"): line = line.replace("__VERSION__", str(version)) f.write(line) f.close() + +env.Append(CPPPATH = os.path.join(os.getcwd())) diff --git a/ocarina/Sconscript b/ocarina/Sconscript index 61e21950..cfac87a9 100644 --- a/ocarina/Sconscript +++ b/ocarina/Sconscript @@ -1,8 +1,20 @@ #!/usr/bin/python -import config +from config import * -config.env.ParseConfig('pkg-config --cflags --libs gtk+-2.0') -config.env.ParseConfig('pkg-config --cflags --libs gmodule-export-2.0') +env.ParseConfig('pkg-config --cflags --libs gtk+-2.0') +env.ParseConfig('pkg-config --cflags --libs gmodule-export-2.0') -files = config.get_cpp_files() -Return('files') +files = get_cpp_files() + +extra_files = [ + ("../bin/ocarina-player", "../ocarina.bin", symlink), + ("ocarina.xml", "../lib/ocarina/ocarina.xml", copy), + ("images/ocarina.png", "../lib/ocarina/ocarina.png", copy), +] + +build = [env.Program("../bin/ocarina-player", libsaria + files)] +for (src, dst, func) in extra_files: + build.append(env.Command(dst, src, func)) + +env.Alias("ocarina", build) +Return('build') diff --git a/images/dice.png b/ocarina/images/dice.png similarity index 100% rename from images/dice.png rename to ocarina/images/dice.png diff --git a/images/ocarina.png b/ocarina/images/ocarina.png similarity index 100% rename from images/ocarina.png rename to ocarina/images/ocarina.png diff --git a/images/ocarina512.png b/ocarina/images/ocarina512.png similarity index 100% rename from images/ocarina512.png rename to ocarina/images/ocarina512.png diff --git a/images/random.png b/ocarina/images/random.png similarity index 100% rename from images/random.png rename to ocarina/images/random.png diff --git a/images/thumbs_down.png b/ocarina/images/thumbs_down.png similarity index 100% rename from images/thumbs_down.png rename to ocarina/images/thumbs_down.png diff --git a/images/thumbs_up.png b/ocarina/images/thumbs_up.png similarity index 100% rename from images/thumbs_up.png rename to ocarina/images/thumbs_up.png diff --git a/xml/ocarina.xml b/ocarina/ocarina.xml similarity index 100% rename from xml/ocarina.xml rename to ocarina/ocarina.xml diff --git a/xml/Sconscript b/xml/Sconscript deleted file mode 100644 index 9266a099..00000000 --- a/xml/Sconscript +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/python -import shutil -from config import * - -lib = "../lib/" + application + "/%s" - -def copy_xml(target, source, env): - dst = str(target[0].rfile()) - src = str(source[0].rfile()) - shutil.copy(src, dst) - -files = [] -if application == "ocarina": - dst = lib % "ocarina.xml" - files.append(AlwaysBuild(env.Command(dst, "ocarina.xml", copy_xml))) - -Return('files')