# 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'

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

    # lcitool variables -f json ubuntu-2204 qemu | jq -r '.pkgs[]' | xargs -n 1 echo "-"
    - name: Install basic packages to build QEMU on Ubuntu 22.04
      package:
        name:
          - bash
          - bc
          - bison
          - bsdextrautils
          - bzip2
          - ca-certificates
          - ccache
          - clang
          - dbus
          - debianutils
          - diffutils
          - exuberant-ctags
          - findutils
          - flex
          - g++
          - gcc
          - gcovr
          - genisoimage
          - gettext
          - git
          - hostname
          - libaio-dev
          - libasan5
          - libasound2-dev
          - libattr1-dev
          - libbpf-dev
          - libbrlapi-dev
          - libbz2-dev
          - libc6-dev
          - libcacard-dev
          - libcap-ng-dev
          - libcapstone-dev
          - libcmocka-dev
          - libcurl4-gnutls-dev
          - libdaxctl-dev
          - libdrm-dev
          - libepoxy-dev
          - libfdt-dev
          - libffi-dev
          - libgbm-dev
          - libgcrypt20-dev
          - libglib2.0-dev
          - libglusterfs-dev
          - libgnutls28-dev
          - libgtk-3-dev
          - libibumad-dev
          - libibverbs-dev
          - libiscsi-dev
          - libjemalloc-dev
          - libjpeg-turbo8-dev
          - libjson-c-dev
          - liblttng-ust-dev
          - liblzo2-dev
          - libncursesw5-dev
          - libnfs-dev
          - libnuma-dev
          - libpam0g-dev
          - libpcre2-dev
          - libpixman-1-dev
          - libpng-dev
          - libpulse-dev
          - librbd-dev
          - librdmacm-dev
          - libsasl2-dev
          - libsdl2-dev
          - libsdl2-image-dev
          - libseccomp-dev
          - libslirp-dev
          - libsnappy-dev
          - libspice-protocol-dev
          - libssh-dev
          - libsystemd-dev
          - libtasn1-6-dev
          - libubsan1
          - libudev-dev
          - liburing-dev
          - libusb-1.0-0-dev
          - libusbredirhost-dev
          - libvdeplug-dev
          - libvirglrenderer-dev
          - libvte-2.91-dev
          - libxml2-dev
          - libzstd-dev
          - llvm
          - locales
          - make
          - meson
          - multipath-tools
          - ncat
          - nettle-dev
          - ninja-build
          - openssh-client
          - pkgconf
          - python3
          - python3-numpy
          - python3-opencv
          - python3-pillow
          - python3-pip
          - python3-sphinx
          - python3-sphinx-rtd-theme
          - python3-venv
          - python3-yaml
          - rpm2cpio
          - sed
          - sparse
          - systemtap-sdt-dev
          - tar
          - tesseract-ocr
          - tesseract-ocr-eng
          - texinfo
          - xfslibs-dev
          - zlib1g-dev
        state: present
      when:
        - ansible_facts['distribution'] == 'Ubuntu'
        - ansible_facts['distribution_version'] == '22.04'

    # not all packages are available for all architectures
    - name: Install additional packages to build QEMU on Ubuntu 22.04
      package:
        name:
          - libpmem-dev
          - libspice-server-dev
          - libxen-dev
        state: present
      when:
        - ansible_facts['distribution'] == 'Ubuntu'
        - ansible_facts['distribution_version'] == '22.04'
        - ansible_facts['architecture'] == 'aarch64' or ansible_facts['architecture'] == 'x86_64'

    - name: Install armhf cross-compile packages to build QEMU on AArch64 Ubuntu 22.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'] == '22.04'
        - ansible_facts['architecture'] == 'aarch64'

    - name: Enable EPEL repo on EL8
      dnf:
        name:
          - epel-release
        state: present
      when:
        - ansible_facts['distribution_file_variety'] in ['RedHat', 'CentOS']
        - ansible_facts['distribution_major_version'] == '8'

    - name: Enable PowerTools repo on CentOS 8
      ini_file:
        path: /etc/yum.repos.d/CentOS-Stream-PowerTools.repo
        section: powertools
        option: enabled
        value: "1"
      when:
        - ansible_facts['distribution_file_variety'] == 'CentOS'
        - ansible_facts['distribution_major_version'] == '8'

    - 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
          - capstone-devel
          - dbus-daemon
          - device-mapper-multipath-devel
          - diffutils
          - gcc
          - gcc-c++
          - genisoimage
          - gettext
          - git
          - glib2-devel
          - glusterfs-api-devel
          - gnutls-devel
          - libaio-devel
          - libcap-ng-devel
          - libcurl-devel
          - libepoxy-devel
          - libfdt-devel
          - libgcrypt-devel
          - libiscsi-devel
          - libpmem-devel
          - librados-devel
          - librbd-devel
          - libseccomp-devel
          - libssh-devel
          - libxkbcommon-devel
          - lzo-devel
          - make
          - mesa-libEGL-devel
          - nettle-devel
          - ninja-build
          - nmap-ncat
          - numactl-devel
          - pixman-devel
          - python38
          - python3-sphinx
          - rdma-core-devel
          - redhat-rpm-config
          - snappy-devel
          - spice-glib-devel
          - systemd-devel
          - systemtap-sdt-devel
          - tar
          - zlib-devel
        state: present
      when:
        - ansible_facts['distribution_file_variety'] in ['RedHat', 'CentOS']
        - ansible_facts['distribution_version'] == '8'

    - name: Install packages only available on x86 and aarch64
      dnf:
        # Spice server not available in ppc64le
        name:
          - spice-server
          - spice-server-devel
        state: present
      when:
        - ansible_facts['distribution_file_variety'] in ['RedHat', 'CentOS']
        - ansible_facts['distribution_version'] == '8'
        - ansible_facts['architecture'] == 'aarch64' or ansible_facts['architecture'] == 'x86_64'

    - name: Check whether the Python runtime version is managed by alternatives
      stat:
        path: /etc/alternatives/python3
      register: python3

    - name: Set default Python runtime to 3.8 on EL8
      command: alternatives --set python3 /usr/bin/python3.8
      when:
        - ansible_facts['distribution_file_variety'] in ['RedHat', 'CentOS']
        - ansible_facts['distribution_version'] == '8'
        - python3.stat.islnk and python3.stat.lnk_target != '/usr/bin/python3.8'
