On Sun, Jun 26, 2011 at 4:55 PM, Alon Levy <alevy@xxxxxxxxxx> wrote: > Will allow adding further git repositories more easily later. > --- > client/virt/kvm_installer.py | 163 ++++++++++++++++++----------------------- > 1 files changed, 72 insertions(+), 91 deletions(-) > > diff --git a/client/virt/kvm_installer.py b/client/virt/kvm_installer.py > index 54829f4..df47fc0 100644 > --- a/client/virt/kvm_installer.py > +++ b/client/virt/kvm_installer.py > @@ -598,6 +598,38 @@ class SourceDirInstaller(BaseInstaller): > if self.save_results: > virt_installer.save_build(self.srcdir, self.results_dir) > > +class GitRepo(object): > + def __init__(self, installer, prefix, > + srcdir, build_steps=[], repo_param=None): > + params = installer.params > + self.installer = installer > + self.repo = params.get(repo_param or (prefix + '_repo')) > + self.branch = params.get(prefix + '_branch', 'master') > + self.lbranch = params.get(prefix + '_lbranch', 'master') > + self.commit = params.get(prefix + '_commit', None) > + self.patches = params.get(prefix + '_patches', []) ^ Here as the config system gives us strings rather than python data types, we have to eval the string that comes from it. Fixed on the version that went upstream. > + self.build_steps = build_steps > + self.srcdir = os.path.join(self.installer.srcdir, srcdir) > + > + > + def fetch_and_patch(self): > + if not self.repo: > + return > + virt_utils.get_git_branch(self.repo, self.branch, self.srcdir, > + self.commit, self.lbranch) > + os.chdir(self.srcdir) > + for patch in self.patches: > + utils.get_file(patch, os.path.join(self.srcdir, > + os.path.basename(patch))) > + utils.system('patch -p1 < %s' % os.path.basename(patch)) > + > + > + def build(self): > + os.chdir(self.srcdir) > + for step in self.build_steps: > + logging.info(step) > + utils.run(step) > + > > class GitInstaller(SourceDirInstaller): > def _pull_code(self): > @@ -605,120 +637,69 @@ class GitInstaller(SourceDirInstaller): > Retrieves code from git repositories. > """ > params = self.params > + make_jobs = utils.count_cpus() > + cfg = 'PKG_CONFIG_PATH="%s/lib/pkgconfig:%s/share/pkgconfig" ./configure' % ( > + self.prefix, self.prefix) > > - kernel_repo = params.get("git_repo") > - user_repo = params.get("user_git_repo") > - kmod_repo = params.get("kmod_repo") > + self.kernel = GitRepo(installer=self, prefix='kernel', > + repo_param='git_repo', srcdir='kvm') > + self.kmod = GitRepo(installer=self, prefix='kmod', srcdir="kvm_kmod") > + if params.get('kernel_git_repo'): > + cfg += ' --kerneldir=%s' % self.host_kernel_srcdir > + self.kernel.build_steps = [cfg, > + 'make clean', > + 'make -C kernel LINUX=%s sync' % self.kernel.srcdir] > + self.kmod.build_steps=[cfg, > + 'make clean', > + 'make sync LINUX=%s' % self.kernel.srcdir, > + 'make'] > > - kernel_branch = params.get("kernel_branch", "master") > - user_branch = params.get("user_branch", "master") > - kmod_branch = params.get("kmod_branch", "master") > + self.userspace = GitRepo(installer=self, prefix='user', > + repo_param='user_git_repo', srcdir='kvm_userspace') > > - kernel_lbranch = params.get("kernel_lbranch", "master") > - user_lbranch = params.get("user_lbranch", "master") > - kmod_lbranch = params.get("kmod_lbranch", "master") > + p = os.path.join(self.userspace.srcdir, 'configure') > + self.configure_options = virt_installer.check_configure_options(p) > > - kernel_commit = params.get("kernel_commit", None) > - user_commit = params.get("user_commit", None) > - kmod_commit = params.get("kmod_commit", None) > + cfg = cfg + ' --prefix=%s' % self.prefix > + if "--disable-strip" in self.configure_options: > + cfg += ' --disable-strip' > + if self.extra_configure_options: > + cfg += ' %s' % self.extra_configure_options > > - kernel_patches = eval(params.get("kernel_patches", "[]")) > - user_patches = eval(params.get("user_patches", "[]")) > - kmod_patches = eval(params.get("user_patches", "[]")) > + self.userspace.build_steps=[cfg, 'make clean', 'make -j %s' % make_jobs] > > - if not user_repo: > + if not self.userspace.repo: > message = "KVM user git repository path not specified" > logging.error(message) > raise error.TestError(message) > > - userspace_srcdir = os.path.join(self.srcdir, "kvm_userspace") > - virt_utils.get_git_branch(user_repo, user_branch, userspace_srcdir, > - user_commit, user_lbranch) > - self.userspace_srcdir = userspace_srcdir > - > - if user_patches: > - os.chdir(self.userspace_srcdir) > - for patch in user_patches: > - utils.get_file(patch, os.path.join(self.userspace_srcdir, > - os.path.basename(patch))) > - utils.system('patch -p1 < %s' % os.path.basename(patch)) > - > - if kernel_repo: > - kernel_srcdir = os.path.join(self.srcdir, "kvm") > - virt_utils.get_git_branch(kernel_repo, kernel_branch, kernel_srcdir, > - kernel_commit, kernel_lbranch) > - self.kernel_srcdir = kernel_srcdir > - if kernel_patches: > - os.chdir(self.kernel_srcdir) > - for patch in kernel_patches: > - utils.get_file(patch, os.path.join(self.userspace_srcdir, > - os.path.basename(patch))) > - utils.system('patch -p1 < %s' % os.path.basename(patch)) > - else: > - self.kernel_srcdir = None > - > - if kmod_repo: > - kmod_srcdir = os.path.join (self.srcdir, "kvm_kmod") > - virt_utils.get_git_branch(kmod_repo, kmod_branch, kmod_srcdir, > - kmod_commit, kmod_lbranch) > - self.kmod_srcdir = kmod_srcdir > - if kmod_patches: > - os.chdir(self.kmod_srcdir) > - for patch in kmod_patches: > - utils.get_file(patch, os.path.join(self.userspace_srcdir, > - os.path.basename(patch))) > - utils.system('patch -p1 < %s' % os.path.basename(patch)) > - else: > - self.kmod_srcdir = None > - > - p = os.path.join(self.userspace_srcdir, 'configure') > - self.configure_options = virt_installer.check_configure_options(p) > - > + for repo in [self.userspace, self.kernel, self.kmod]: > + if not repo.repo: > + continue > + repo.fetch_and_patch() > > def _build(self): > - make_jobs = utils.count_cpus() > - cfg = './configure' > - if self.kmod_srcdir: > + if self.kmod.repo: > logging.info('Building KVM modules') > - os.chdir(self.kmod_srcdir) > - module_build_steps = [cfg, > - 'make clean', > - 'make sync LINUX=%s' % self.kernel_srcdir, > - 'make'] > - elif self.kernel_srcdir: > + self.kmod.build() > + elif self.kernel.repo: > logging.info('Building KVM modules') > - os.chdir(self.userspace_srcdir) > - cfg += ' --kerneldir=%s' % self.host_kernel_srcdir > - module_build_steps = [cfg, > - 'make clean', > - 'make -C kernel LINUX=%s sync' % self.kernel_srcdir] > - else: > - module_build_steps = [] > + self.kernel.build() > > - for step in module_build_steps: > - utils.run(step) > > logging.info('Building KVM userspace code') > - os.chdir(self.userspace_srcdir) > - cfg += ' --prefix=%s' % self.prefix > - if "--disable-strip" in self.configure_options: > - cfg += ' --disable-strip' > - if self.extra_configure_options: > - cfg += ' %s' % self.extra_configure_options > - utils.system(cfg) > - utils.system('make clean') > - utils.system('make -j %s' % make_jobs) > + self.userspace.build() > > > def _install(self): > - if self.kernel_srcdir: > - os.chdir(self.userspace_srcdir) > + if self.kernel: > + os.chdir(self.userspace.srcdir) > # the kernel module install with --prefix doesn't work, and DESTDIR > # wouldn't work for the userspace stuff, so we clear WANT_MODULE: > utils.system('make install WANT_MODULE=') > # and install the old-style-kmod modules manually: > - self._install_kmods_old_userspace(self.userspace_srcdir) > - elif self.kmod_srcdir: > + self._install_kmods_old_userspace(self.userspace.srcdir) > + elif self.kmod: > # if we have a kmod repository, it is easier: > # 1) install userspace: > os.chdir(self.userspace_srcdir) > @@ -728,7 +709,7 @@ class GitInstaller(SourceDirInstaller): > else: > # if we don't have kmod sources, we just install > # userspace: > - os.chdir(self.userspace_srcdir) > + os.chdir(self.userspace.srcdir) > utils.system('make install') > > if self.path_to_roms: > -- > 1.7.5.4 > > -- > To unsubscribe from this list: send the line "unsubscribe kvm" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- Lucas -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html