summaryrefslogtreecommitdiff
path: root/baserockimport/package.py
diff options
context:
space:
mode:
Diffstat (limited to 'baserockimport/package.py')
-rw-r--r--baserockimport/package.py52
1 files changed, 52 insertions, 0 deletions
diff --git a/baserockimport/package.py b/baserockimport/package.py
index 8df011b..ddeaa51 100644
--- a/baserockimport/package.py
+++ b/baserockimport/package.py
@@ -26,6 +26,7 @@ class Package(object):
self._kind = kind
self._name = name
self._version = version
+ self._build_system = None
self.required_by = []
self.morphology = None
self.repo_url = None
@@ -77,3 +78,54 @@ class Package(object):
@property
def parent(self):
return self.required_by[0] if len(self.required_by) > 0 else None
+
+ @property
+ def build_system(self):
+ return self._build_system
+
+ def detect_build_system(self, file_iter):
+ '''Automatically detect the build system, if possible.
+
+ If the build system cannot be detected automatically, return None.
+ '''
+
+ build_systems = {
+ 'autotools': [
+ 'autogen',
+ 'autogen.sh',
+ 'configure',
+ 'configure.ac',
+ 'configure.in',
+ 'configure.in.in',
+ ],
+ 'python-distutils': [
+ 'setup.py'
+ ],
+ 'cpan': [
+ 'Makefile.PL'
+ ],
+ 'module-build': [
+ 'Build.PL'
+ ],
+ 'cmake': [
+ 'CMakeLists.txt',
+ ],
+ 'qmake': [
+ '.pro'
+ ]
+ }
+
+ # Aside from ensuring generated definitions are stable,
+ # an explicit ordering allows us to favour one build system
+ # over another in the case that a single repo supports more
+ # than one build system.
+ order = ['autotools', 'python-distutils', 'cpan', 'module-build',
+ 'cmake', 'qmake']
+
+ files = set(file_iter)
+ for bs in order:
+ indicators = set(build_systems[bs])
+
+ if not files.isdisjoint(indicators):
+ self._build_system = bs
+ return