# 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
          - libpmem-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
          - libspice-server-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
          - libxen-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'

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