blob: e6d80cc8dc1c25480063d03b37a6e739ac731f14 [file] [log] [blame]
Brad Bishopc342db32019-05-15 21:57:59 -04001#
Brad Bishop6e60e8b2018-02-01 10:27:11 -05002# Copyright (C) 2013-2016 Intel Corporation
3#
Brad Bishopc342db32019-05-15 21:57:59 -04004# SPDX-License-Identifier: MIT
5#
Brad Bishop6e60e8b2018-02-01 10:27:11 -05006
7# Provides a class for automating build tests for projects
8
9import os
10import re
11import subprocess
12import shutil
13import tempfile
14
15from abc import ABCMeta, abstractmethod
16
17class BuildProject(metaclass=ABCMeta):
18 def __init__(self, uri, foldername=None, tmpdir=None, dl_dir=None):
19 self.uri = uri
20 self.archive = os.path.basename(uri)
21 if not tmpdir:
Brad Bishopf86d0552018-12-04 14:18:15 -080022 self.tempdirobj = tempfile.TemporaryDirectory(prefix='buildproject-')
23 tmpdir = self.tempdirobj.name
Brad Bishop6e60e8b2018-02-01 10:27:11 -050024 self.localarchive = os.path.join(tmpdir, self.archive)
25 self.dl_dir = dl_dir
26 if foldername:
27 self.fname = foldername
28 else:
29 self.fname = re.sub(r'\.tar\.bz2$|\.tar\.gz$|\.tar\.xz$', '', self.archive)
Brad Bishop977dc1a2019-02-06 16:01:43 -050030 self.needclean = False
Brad Bishop6e60e8b2018-02-01 10:27:11 -050031
32 # Download self.archive to self.localarchive
33 def _download_archive(self):
Brad Bishop977dc1a2019-02-06 16:01:43 -050034
35 self.needclean = True
Brad Bishop6e60e8b2018-02-01 10:27:11 -050036 if self.dl_dir and os.path.exists(os.path.join(self.dl_dir, self.archive)):
37 shutil.copyfile(os.path.join(self.dl_dir, self.archive), self.localarchive)
38 return
39
40 cmd = "wget -O %s %s" % (self.localarchive, self.uri)
41 subprocess.check_output(cmd, shell=True)
42
43 # This method should provide a way to run a command in the desired environment.
44 @abstractmethod
45 def _run(self, cmd):
46 pass
47
48 # The timeout parameter of target.run is set to 0 to make the ssh command
49 # run with no timeout.
50 def run_configure(self, configure_args='', extra_cmds=''):
51 return self._run('cd %s; gnu-configize; %s ./configure %s' % (self.targetdir, extra_cmds, configure_args))
52
53 def run_make(self, make_args=''):
54 return self._run('cd %s; make %s' % (self.targetdir, make_args))
55
56 def run_install(self, install_args=''):
57 return self._run('cd %s; make install %s' % (self.targetdir, install_args))
58
59 def clean(self):
Brad Bishop977dc1a2019-02-06 16:01:43 -050060 if not self.needclean:
61 return
Brad Bishop6e60e8b2018-02-01 10:27:11 -050062 self._run('rm -rf %s' % self.targetdir)
Brad Bishopd7bf8c12018-02-25 22:55:05 -050063 subprocess.check_call('rm -f %s' % self.localarchive, shell=True)