#!/usr/bin/env python
#
# OpenBSD VM image
#
# Copyright 2017 Red Hat Inc.
#
# Authors:
#  Fam Zheng <famz@redhat.com>
#
# This code is licensed under the GPL version 2 or later.  See
# the COPYING file in the top-level directory.
#

import os
import sys
import subprocess
import basevm

class OpenBSDVM(basevm.BaseVM):
    name = "openbsd"
    BUILD_SCRIPT = """
        set -e;
        cd $(mktemp -d /var/tmp/qemu-test.XXXXXX);
        tar -xf /dev/rsd1c;
        ./configure --cc=x86_64-unknown-openbsd6.1-gcc-4.9.4 --python=python2.7 {configure_opts};
        gmake -j{jobs};
        # XXX: "gmake check" seems to always hang or fail
        #gmake check;
    """

    def build_image(self, img):
        cimg = self._download_with_cache("http://download.patchew.org/openbsd-6.1-amd64.img.xz",
                sha256sum='8c6cedc483e602cfee5e04f0406c64eb99138495e8ca580bc0293bcf0640c1bf')
        img_tmp_xz = img + ".tmp.xz"
        img_tmp = img + ".tmp"
        subprocess.check_call(["cp", "-f", cimg, img_tmp_xz])
        subprocess.check_call(["xz", "-df", img_tmp_xz])
        if os.path.exists(img):
            os.remove(img)
        os.rename(img_tmp, img)

if __name__ == "__main__":
    sys.exit(basevm.main(OpenBSDVM))
