From 98961cb380a78ac76a58dc61ee1aa881f730180e Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Fri, 30 Mar 2012 14:29:39 +0100 Subject: Add looking up of build systems by name --- morphlib/buildsystem.py | 28 ++++++++++++++++++++++++---- morphlib/buildsystem_tests.py | 13 +++++++++++++ 2 files changed, 37 insertions(+), 4 deletions(-) (limited to 'morphlib') diff --git a/morphlib/buildsystem.py b/morphlib/buildsystem.py index 0ac27387..9ee62d03 100644 --- a/morphlib/buildsystem.py +++ b/morphlib/buildsystem.py @@ -45,6 +45,8 @@ class BuildSystem(object): class ManualBuildSystem(BuildSystem): '''A manual build system where the morphology must specify all commands.''' + + name = 'manual' def used_by_project(self, srcdir): return False @@ -53,6 +55,8 @@ class ManualBuildSystem(BuildSystem): class AutotoolsBuildSystem(BuildSystem): '''The automake/autoconf/libtool holy trinity.''' + + name = 'autotools' def used_by_project(self, srcdir): indicators = [ @@ -66,6 +70,12 @@ class AutotoolsBuildSystem(BuildSystem): for x in indicators) +build_systems = [ + ManualBuildSystem(), + AutotoolsBuildSystem(), +] + + def detect_build_system(srcdir): '''Automatically detect the build system, if possible. @@ -74,12 +84,22 @@ def detect_build_system(srcdir): ''' - build_systems = [ - AutotoolsBuildSystem(), - ] - for bs in build_systems: if bs.used_by_project(srcdir): return bs return ManualBuildSystem() + + +def lookup_build_system(name): + '''Return build system that corresponds to the name. + + If the name does not match any build system, raise ``KeyError``. + + ''' + + for bs in build_systems: + if bs.name == name: + return bs + raise KeyError(name) + diff --git a/morphlib/buildsystem_tests.py b/morphlib/buildsystem_tests.py index c8e9058f..362b85dd 100644 --- a/morphlib/buildsystem_tests.py +++ b/morphlib/buildsystem_tests.py @@ -90,3 +90,16 @@ class DetectBuildSystemTests(unittest.TestCase): bs = morphlib.buildsystem.detect_build_system(self.tempdir) self.assertEqual(type(bs), morphlib.buildsystem.AutotoolsBuildSystem) + +class LookupBuildSystemTests(unittest.TestCase): + + def lookup(self, name): + return morphlib.buildsystem.lookup_build_system(name) + + def test_raises_keyerror_for_unknown_name(self): + self.assertRaises(KeyError, self.lookup, 'unkonwn') + + def test_looks_up_manual(self): + self.assertEqual(type(self.lookup('manual')), + morphlib.buildsystem.ManualBuildSystem) + -- cgit v1.2.1