From 871914ea909c38ff9105af7fbbd88bd13bb17a02 Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Thu, 27 Feb 2014 09:51:05 -0500 Subject: [PATCH] Clean up the build system I'm taking a break from gui code to clean up the build system and update my unit tests. This patch updates how code is built, and reworks my "print" test to test version number instead. Signed-off-by: Anna Schumaker --- .gitignore | 3 +- config | 52 +++------------ gui/Sconscript | 4 +- include/Sconscript | 11 ++- lib/Sconscript | 64 ++---------------- tests/Sconscript | 74 ++------------------- tests/print/.gitignore | 1 - tests/print/Sconscript | 13 ---- tests/run_test | 13 ++++ tests/src/Sconscript | 8 +++ tests/src/version | Bin 0 -> 14213 bytes tests/{print/print.cpp => src/version.cpp} | 3 +- tests/test | 10 +++ tests/tests/version | 17 +++++ 14 files changed, 78 insertions(+), 195 deletions(-) delete mode 100644 tests/print/.gitignore delete mode 100644 tests/print/Sconscript create mode 100755 tests/run_test create mode 100644 tests/src/Sconscript create mode 100755 tests/src/version rename tests/{print/print.cpp => src/version.cpp} (62%) create mode 100755 tests/test create mode 100755 tests/tests/version diff --git a/.gitignore b/.gitignore index 24214ff0..678692e5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,8 @@ *.o *.sw* -#*.pyc *.run *.test *.glade~ gui/#* -gui/ocarina +bin/ .sconsign.dblite diff --git a/config b/config index ae05fb0c..c75a177a 100644 --- a/config +++ b/config @@ -4,7 +4,6 @@ import os # Configuration variables CONFIG_VERSION = 6.0 CONFIG_DEBUG = True -#CONFIG_TESTING = False # Set up default environment @@ -18,51 +17,18 @@ env.Append(CXXCOMSTR = "C++ $TARGET") env.Append(LINKCOMSTR = "Linking $TARGET") -# Class to store configuration data -class Config: - # Set up reasonable defaults - def __init__(self): - self.VERSION = CONFIG_VERSION - self.DEBUG = CONFIG_DEBUG - self.CCFLAGS = CONFIG_CCFLAGS - self.reset(); +def use_package(name): + env.ParseConfig("pkg-config --cflags --libs %s" % name) - def package(self, name): - env.ParseConfig("pkg-config --cflags --libs %s" % name) - - def reconfigure(self): - env.Replace( CCFLAGS = self.CCFLAGS ) - if self.TEST == True: - env.Append( CCFLAGS = [ "-DCONFIG_TEST" ]) - - def reset(self, TEST = False, ALL = False): - self.AUDIO = ALL - self.CALLBACK = ALL - self.DATABASE = ALL - self.DECK = ALL - self.FILE = ALL - self.FILTER = ALL - self.IDLE = ALL - self.LIBRARY = ALL - self.PLAYLIST = ALL - self.PLAYQUEUE = ALL - self.TEST = TEST - self.reconfigure() - -CONFIG = Config() -Export("env", "CONFIG") +Export("env", "use_package", "CONFIG_DEBUG", "CONFIG_VERSION") -# Import SConscript files include = SConscript("include/Sconscript") -design = SConscript("design/Sconscript") - -#gui = SConscript("gui/Sconscript") - -#Default("gui") -#if CONFIG_TESTING == True: -# tests = SConscript("tests/Sconscript") -# Depends(gui, tests) +lib = SConscript("lib/Sconscript") tests = SConscript("tests/Sconscript") -Default("tests") + +gui = SConscript("gui/Sconscript") + +ocarina = env.Program("bin/ocarina", lib + gui) +Default(ocarina) diff --git a/gui/Sconscript b/gui/Sconscript index f7253909..268611ad 100644 --- a/gui/Sconscript +++ b/gui/Sconscript @@ -1,7 +1,7 @@ #!/usr/bin/python -Import("env", "CONFIG") +Import("use_package") -CONFIG.package("gtkmm-3.0") +use_package("gtkmm-3.0") res = Glob("*.cpp") Return("res") diff --git a/include/Sconscript b/include/Sconscript index c67ea6a0..6ea804e1 100644 --- a/include/Sconscript +++ b/include/Sconscript @@ -1,9 +1,8 @@ #!/usr/bin/python -Import("CONFIG") +Import("env", "CONFIG_DEBUG", "CONFIG_VERSION") -if CONFIG.DEBUG: - CONFIG.CCFLAGS += [ "-DCONFIG_VERSION='\"%s-debug\"'" % CONFIG.VERSION ] -else: - CONFIG.CCFLAGS += [ "-DCONFIG_VERSION='\"%s\"'" % CONFIG.VERSION ] +version = str(CONFIG_VERSION) +if CONFIG_DEBUG == True: + version += "-debug" -CONFIG.reconfigure() +env.Append( CCFLAGS = [ "-DCONFIG_VERSION='\"%s\"'" % version ] ) diff --git a/lib/Sconscript b/lib/Sconscript index 28b4f2d5..9bc77cf7 100644 --- a/lib/Sconscript +++ b/lib/Sconscript @@ -1,62 +1,8 @@ #!/usr/bin/python -Import("env", "CONFIG") +Import("use_package") -class Module: - def __init__(self, source = None, package = "", depends = []): - self.depends = depends - self.package = package - self.source = source +use_package("gstreamer-1.0") +use_package("taglib") - -modules = { -########################### -# # -# Define new modules here # -# # -########################### - - "AUDIO" : Module("audio.cpp", package = "gstreamer-1.0", depends = [ "DECK" ]), - "CALLBACK" : Module("callback.cpp"), - "DATABASE" : Module("database.cpp", depends = [ "FILE" ]), - "DECK" : Module("deck.cpp", depends = [ "PLAYQUEUE" ]), - "FILE" : Module("file.cpp", package = "glib-2.0"), - "FILTER" : Module("filter.cpp", depends = [ "DATABASE" ]), - "IDLE" : Module("idle.cpp"), - "LIBRARY" : Module("library.cpp", package = "taglib", depends = [ "CALLBACK", "DATABASE", "FILTER", "IDLE" ]), - "PLAYLIST" : Module("playlist.cpp", depends = [ "DATABASE" ]), - "PLAYQUEUE" : Module("playqueue.cpp", depends = [ "LIBRARY" ]), - -########################### -########################### -} - - -build = [] -enabled = [] - -def resolve(name): - CONFIG.__dict__[name] = True - mod = modules[name] - - if mod.package != "": - CONFIG.package(mod.package) - - res = [ env.Object(mod.source) ] - - for dep in mod.depends: - if CONFIG.__dict__.get(dep) == False: - res += resolve(dep) - - return res - - - -for key in modules.keys(): - if CONFIG.__dict__[key] == True: - enabled += [key] - -for mod in enabled: - build += resolve(mod) - - -Return("build") +res = Glob("*.cpp") +Return("res") diff --git a/tests/Sconscript b/tests/Sconscript index d1bb1128..f0a20aec 100644 --- a/tests/Sconscript +++ b/tests/Sconscript @@ -1,71 +1,11 @@ #!/usr/bin/python -import os, subprocess, shutil -import xdg.BaseDirectory -Import("env", "CONFIG") +Import("env") +src = SConscript("src/Sconscript") +test = Command("tests.out", [], "./tests/test") -GOOD = "%s.good" +AlwaysBuild(test) +Depends(test, src) -def run_test(target, source, env): - res = str(target[0]) - out = open(res, 'w') - ret = subprocess.call("%s" % source[0], stdout = out, stderr = out) - out.close() - - if ret != 0: - print "Test returns: ", ret - - if (len(source) == 2): - good = str(source[1]) - if (subprocess.call("diff -u %s %s" % (good, res), shell = True) != 0): - print - Exit(1) - else: - for line in open( str(target[0]) ): - print line.rstrip() - print - - if ret != 0: - Exit(1) - -def Test(group, src, gui = False): - name, extension = src.rsplit(".", 1) - mods = [ src ] - - mods += SConscript("../../lib/Sconscript") - if gui == True: - mods += SConscript("../../gui/Sconscript") - prog = env.Program("%s.test" % name, mods) - - src_files = [ "%s.test" % name ] - if os.path.exists(GOOD % name): - src_files += [ GOOD % name ] - test = Command("%s.run" % name, src_files, run_test) - - Depends(test, prog) - AlwaysBuild(test) - - Alias("tests", [ prog, test ]) - Alias("tests/%s" % group, [ prog, test ]) - Alias("tests/%s/%s" % (group, name), [ prog, test ]) - -Export("Test") - -# -# Clean up leftover test data -# -def rm_test_dir(dir): - dir = os.path.join(dir, "ocarina-test") - if os.path.exists(dir): - shutil.rmtree(dir) -rm_test_dir(xdg.BaseDirectory.xdg_config_home); -rm_test_dir(xdg.BaseDirectory.xdg_data_home); - -# -# Read SConscript files -# -scripts = [ "print", "file", "database", "index", "filter", "idle", "playlist", - "library", "playqueue", "deck", "audio", "gui" ] -for s in scripts: - CONFIG.reset(TEST = True) - SConscript("%s/Sconscript" % s) +#scripts = [ "print", "file", "database", "index", "filter", "idle", "playlist", +# "library", "playqueue", "deck", "audio", "gui" ] diff --git a/tests/print/.gitignore b/tests/print/.gitignore deleted file mode 100644 index 9c29f432..00000000 --- a/tests/print/.gitignore +++ /dev/null @@ -1 +0,0 @@ -print.good diff --git a/tests/print/Sconscript b/tests/print/Sconscript deleted file mode 100644 index 11915ac2..00000000 --- a/tests/print/Sconscript +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/python -Import("Test", "CONFIG") - -out = open("print.good", 'w') -if CONFIG.DEBUG == True: - out.write("%s-debug\n" % CONFIG.VERSION) - out.write("%s-debug\n" % CONFIG.VERSION) -else: - out.write("%s\n" % CONFIG.VERSION) - out.write("%s\n" % CONFIG.VERSION) -out.close() - -Test("basic", "print.cpp") diff --git a/tests/run_test b/tests/run_test new file mode 100755 index 00000000..7a7b19b4 --- /dev/null +++ b/tests/run_test @@ -0,0 +1,13 @@ +#!/bin/bash +# Copyright (c) Anna Schumaker. + +VERSION=$(cat ../config | grep ^CONFIG_VERSION | awk -F= '{print $2}' | tr -d ' ') +DEBUG=$(cat ../config | grep ^CONFIG_DEBUG | awk -F= '{print $2}' | tr -d ' ') + +function utility +{ + echo src/$1 +} + +echo -n "Running test '$1' ... " +. tests/$1 diff --git a/tests/src/Sconscript b/tests/src/Sconscript new file mode 100644 index 00000000..7779c018 --- /dev/null +++ b/tests/src/Sconscript @@ -0,0 +1,8 @@ +#!/usr/bin/python +Import("env") + +def compile_utility(name): + return env.Program(name, "%s.cpp" % name) + +build = compile_utility("version") +Return("build") diff --git a/tests/src/version b/tests/src/version new file mode 100755 index 0000000000000000000000000000000000000000..bede8ee86977a87aa8a8151ab5c1d6c939a35ea8 GIT binary patch literal 14213 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 literal 0 HcmV?d00001 diff --git a/tests/print/print.cpp b/tests/src/version.cpp similarity index 62% rename from tests/print/print.cpp rename to tests/src/version.cpp index aa8a5a13..faa6d393 100644 --- a/tests/print/print.cpp +++ b/tests/src/version.cpp @@ -1,6 +1,6 @@ /* * Copyright 2013 (c) Anna Schumaker. - * Prints version info to the screen when compiled in debug mode + * Prints out version info */ #include #include @@ -8,6 +8,5 @@ int main(int argc, char **argv) { print("%s\n", get_version()); - dprint("%s\n", get_version()); return 0; } diff --git a/tests/test b/tests/test new file mode 100755 index 00000000..616dd660 --- /dev/null +++ b/tests/test @@ -0,0 +1,10 @@ +#!/bin/bash +# Copyright 2014 (c) Anna Schumaker. + +cd $(dirname $0) + +[ $? == 0 ] && tests=$(ls tests/) || tests="$*" + +for t in $tests; do + ./run_test $t +done diff --git a/tests/tests/version b/tests/tests/version new file mode 100755 index 00000000..34a2dc2c --- /dev/null +++ b/tests/tests/version @@ -0,0 +1,17 @@ +#!/bin/bash +# Copyright 2014 (c) Anna Schumaker. + +expected=$VERSION +[ $DEBUG == "True" ] && expected="$expected-debug" + +cmd=$(utility version) +actual=$($cmd) + +if [ $expected == $actual ]; then + echo "Success!" + exit 0 +fi + +echo "FAILED =(" +echo "Expected output: $expected" +echo "Actual output: $actual"