# Copyright (c) 2021 Red Hat, Inc.
#
# Author:
#  Cleber Rosa <crosa@redhat.com>
#
# This work is licensed under the terms of the GNU GPL, version 2 or
# later.  See the COPYING file in the top-level directory.
#
# This is an ansible playbook file.  Run it to set up systems with the
# environment needed to build QEMU.
---
- name: Installation of basic packages to build QEMU
  hosts: all
  tasks:
    - name: Check for suitable ansible version
      delegate_to: localhost
      assert:
        that:
          - '((ansible_version.major == 2) and (ansible_version.minor >= 8)) or (ansible_version.major >= 3)'
        msg: "Unsuitable ansible version, please use version 2.8.0 or later"

    - name: Add armhf foreign architecture to aarch64 hosts
      command: dpkg --add-architecture armhf
      when:
        - ansible_facts['distribution'] == 'Ubuntu'
        - ansible_facts['architecture'] == 'aarch64'
        - ansible_facts['distribution_version'] == '20.04'

    - name: Update apt cache / upgrade packages via apt
      apt:
        update_cache: yes
        upgrade: yes
      when:
        - ansible_facts['distribution'] == 'Ubuntu'

    - name: Install basic packages to build QEMU on Ubuntu 18.04/20.04
      package:
        name:
        # Originally from tests/docker/dockerfiles/ubuntu1804.docker
          - ccache
          - gcc
          - gettext
          - git
          - glusterfs-common
          - libaio-dev
          - libattr1-dev
          - libbrlapi-dev
          - libbz2-dev
          - libcacard-dev
          - libcap-ng-dev
          - libcurl4-gnutls-dev
          - libdrm-dev
          - libepoxy-dev
          - libfdt-dev
          - libgbm-dev
          - libgtk-3-dev
          - libibverbs-dev
          - libiscsi-dev
          - libjemalloc-dev
          - libjpeg-turbo8-dev
          - liblzo2-dev
          - libncurses5-dev
          - libncursesw5-dev
          - libnfs-dev
          - libnss3-dev
          - libnuma-dev
          - libpixman-1-dev
          - librados-dev
          - librbd-dev
          - librdmacm-dev
          - libsasl2-dev
          - libsdl2-dev
          - libseccomp-dev
          - libsnappy-dev
          - libspice-protocol-dev
          - libssh-dev
          - libusb-1.0-0-dev
          - libusbredirhost-dev
          - libvdeplug-dev
          - libvte-2.91-dev
          - libzstd-dev
          - make
          - python3-yaml
          - python3-sphinx
          - python3-sphinx-rtd-theme
          - ninja-build
          - sparse
          - xfslibs-dev
        state: present
      when:
        - ansible_facts['distribution'] == 'Ubuntu'

    - name: Install packages to build QEMU on Ubuntu 18.04/20.04 on non-s390x
      package:
        name:
          - libspice-server-dev
          - libxen-dev
        state: present
      when:
        - ansible_facts['distribution'] == 'Ubuntu'
        - ansible_facts['architecture'] != 's390x'

    - name: Install basic packages to build QEMU on Ubuntu 18.04
      package:
        name:
        # Originally from tests/docker/dockerfiles/ubuntu1804.docker
          - clang
      when:
        - ansible_facts['distribution'] == 'Ubuntu'
        - ansible_facts['distribution_version'] == '18.04'

    - name: Install basic packages to build QEMU on Ubuntu 20.04
      package:
        name:
        # Originally from tests/docker/dockerfiles/ubuntu2004.docker
          - clang-10
          - genisoimage
          - liblttng-ust-dev
          - libslirp-dev
          - netcat-openbsd
      when:
        - ansible_facts['distribution'] == 'Ubuntu'
        - ansible_facts['distribution_version'] == '20.04'

    - name: Install armhf cross-compile packages to build QEMU on AArch64 Ubuntu 20.04
      package:
        name:
          - binutils-arm-linux-gnueabihf
          - gcc-arm-linux-gnueabihf
          - libblkid-dev:armhf
          - libc6-dev:armhf
          - libffi-dev:armhf
          - libglib2.0-dev:armhf
          - libmount-dev:armhf
          - libpcre2-dev:armhf
          - libpixman-1-dev:armhf
          - zlib1g-dev:armhf
      when:
        - ansible_facts['distribution'] == 'Ubuntu'
        - ansible_facts['distribution_version'] == '20.04'
        - ansible_facts['architecture'] == 'aarch64'

    - name: Install basic packages to build QEMU on EL8
      dnf:
        # This list of packages start with tests/docker/dockerfiles/centos8.docker
        # but only include files that are common to all distro variants and present
        # in the standard repos (no add-ons)
        name:
          - bzip2
          - bzip2-devel
          - dbus-daemon
          - diffutils
          - gcc
          - gcc-c++
          - genisoimage
          - gettext
          - git
          - glib2-devel
          - libaio-devel
          - libepoxy-devel
          - libgcrypt-devel
          - lzo-devel
          - make
          - mesa-libEGL-devel
          - nettle-devel
          - nmap-ncat
          - perl-Test-Harness
          - pixman-devel
          - python36
          - rdma-core-devel
          - spice-glib-devel
          - spice-server
          - systemtap-sdt-devel
          - tar
          - zlib-devel
        state: present
      when:
        - ansible_facts['distribution_file_variety'] == 'RedHat'
        - ansible_facts['distribution_version'] == '8'
