summaryrefslogtreecommitdiff
path: root/morphlib/buildsystem.py
diff options
context:
space:
mode:
authorLars Wirzenius <lars.wirzenius@codethink.co.uk>2012-03-30 14:18:59 +0100
committerLars Wirzenius <lars.wirzenius@codethink.co.uk>2012-03-30 14:18:59 +0100
commit9579486fadb5af77ecfc8df9dd1e9e814d958bef (patch)
treed36fd4b393f225dcb4a3b6dd64f7fbc44a89b945 /morphlib/buildsystem.py
parent907ced8460dee3763c5890a69f9d5e126621041e (diff)
downloadmorph-9579486fadb5af77ecfc8df9dd1e9e814d958bef.tar.gz
Add autodetection for autotools, and a factory function
Diffstat (limited to 'morphlib/buildsystem.py')
-rw-r--r--morphlib/buildsystem.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/morphlib/buildsystem.py b/morphlib/buildsystem.py
index 7ac56cf4..3969bddc 100644
--- a/morphlib/buildsystem.py
+++ b/morphlib/buildsystem.py
@@ -14,6 +14,9 @@
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+import os
+
+
class BuildSystem(object):
'''An abstraction of an upstream build system.
@@ -40,7 +43,37 @@ class ManualBuildSystem(BuildSystem):
def used_by_project(self, srcdir):
return False
+
class AutotoolsBuildSystem(BuildSystem):
'''The automake/autoconf/libtool holy trinity.'''
+
+ def used_by_project(self, srcdir):
+ indicators = [
+ 'autogen.sh',
+ 'configure.ac',
+ 'configure.in',
+ 'configure.in.in',
+ ]
+
+ return any(os.path.exists(os.path.join(srcdir, x))
+ for x in indicators)
+
+
+def detect_build_system(srcdir):
+ '''Automatically detect the build system, if possible.
+
+ If the build system cannot be detected automatically, then the manual
+ build system is used instead.
+
+ '''
+
+ build_systems = [
+ AutotoolsBuildSystem(),
+ ]
+
+ for bs in build_systems:
+ if bs.used_by_project(srcdir):
+ return bs
+ return ManualBuildSystem()