diff options
Diffstat (limited to 'baserockimport/package.py')
-rw-r--r-- | baserockimport/package.py | 52 |
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 |