mirror of
https://git.yoctoproject.org/poky
synced 2026-02-12 19:53:03 +01:00
If we need to create a temporary directory in targetbuild or buildproject use tempfile.TemporaryDirectory so that when the test case is finished, the directory is deleted. Also synchronise the logic and don't possibly store the temporary directory in self.tmpdir as nothing uses that. (From OE-Core rev: db0e658097130d146752785d0d45f46a3e0bad71) Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
62 lines
2.1 KiB
Python
62 lines
2.1 KiB
Python
# Copyright (C) 2013-2016 Intel Corporation
|
|
#
|
|
# Released under the MIT license (see COPYING.MIT)
|
|
|
|
# Provides a class for automating build tests for projects
|
|
|
|
import os
|
|
import re
|
|
import subprocess
|
|
import shutil
|
|
import tempfile
|
|
|
|
from abc import ABCMeta, abstractmethod
|
|
|
|
class BuildProject(metaclass=ABCMeta):
|
|
def __init__(self, uri, foldername=None, tmpdir=None, dl_dir=None):
|
|
self.uri = uri
|
|
self.archive = os.path.basename(uri)
|
|
if not tmpdir:
|
|
self.tempdirobj = tempfile.TemporaryDirectory(prefix='buildproject-')
|
|
tmpdir = self.tempdirobj.name
|
|
self.localarchive = os.path.join(tmpdir, self.archive)
|
|
self.dl_dir = dl_dir
|
|
if foldername:
|
|
self.fname = foldername
|
|
else:
|
|
self.fname = re.sub(r'\.tar\.bz2$|\.tar\.gz$|\.tar\.xz$', '', self.archive)
|
|
self.needclean = False
|
|
|
|
# Download self.archive to self.localarchive
|
|
def _download_archive(self):
|
|
|
|
self.needclean = True
|
|
if self.dl_dir and os.path.exists(os.path.join(self.dl_dir, self.archive)):
|
|
shutil.copyfile(os.path.join(self.dl_dir, self.archive), self.localarchive)
|
|
return
|
|
|
|
cmd = "wget -O %s %s" % (self.localarchive, self.uri)
|
|
subprocess.check_output(cmd, shell=True)
|
|
|
|
# This method should provide a way to run a command in the desired environment.
|
|
@abstractmethod
|
|
def _run(self, cmd):
|
|
pass
|
|
|
|
# The timeout parameter of target.run is set to 0 to make the ssh command
|
|
# run with no timeout.
|
|
def run_configure(self, configure_args='', extra_cmds=''):
|
|
return self._run('cd %s; gnu-configize; %s ./configure %s' % (self.targetdir, extra_cmds, configure_args))
|
|
|
|
def run_make(self, make_args=''):
|
|
return self._run('cd %s; make %s' % (self.targetdir, make_args))
|
|
|
|
def run_install(self, install_args=''):
|
|
return self._run('cd %s; make install %s' % (self.targetdir, install_args))
|
|
|
|
def clean(self):
|
|
if not self.needclean:
|
|
return
|
|
self._run('rm -rf %s' % self.targetdir)
|
|
subprocess.check_call('rm -f %s' % self.localarchive, shell=True)
|