Blob Blame History Raw
# Build time setting
%global SLOF_gittagdate 20140630

%global have_usbredir 1
%global have_spice    1
%global have_fdt      0
%global have_gluster  1

%ifarch %{ix86} x86_64
    %global have_seccomp 1
%else
    %global have_usbredir 0
    %global have_seccomp 0
%endif

%ifnarch s390 s390x
    %global have_librdma 1
%endif

%ifarch %{ix86}
    %global kvm_target    i386
%endif
%ifarch x86_64
    %global kvm_target    x86_64
%else
    %global have_spice   0
    %global have_gluster 0
%endif
%ifarch %{power64}
    %global kvm_target    ppc64
    %global have_fdt     1
%endif
%ifarch s390
    %global kvm_target    s390
%endif
%ifarch s390x
    %global kvm_target    s390x
%endif
%ifarch ppc
    %global kvm_target    ppc
    %global have_fdt     1
%endif
%ifarch aarch64
    %global kvm_target    aarch64
    %global have_fdt     1
%endif

#Versions of various parts:

%define pkgname qemu-kvm

Summary: QEMU guest agent
Name: qemu-guest-agent
Version: 2.1.0
Release: 4%{?dist}
# Epoch because we pushed a qemu-1.0 package. AIUI this can't ever be dropped
Epoch: 10
License: GPLv2+ and LGPLv2+ and BSD
Group: System Environment/Daemons
URL: http://www.qemu.org/
Requires(post): systemd-units
Requires(preun): systemd-units
Requires(postun): systemd-units

# OOM killer breaks builds with parallel make on s390(x)
%ifarch s390 s390x
    %define _smp_mflags %{nil}
%endif

Source0: http://wiki.qemu.org/download/qemu-%{version}.tar.bz2

Source1: qemu-guest-agent.service
Source2: 99-qemu-guest-agent.rules
Source3: qemu-ga.sysconfig


Patch1005: kvm-misc-Disable-unsupported-usb-devices.patch
Patch1006: kvm-misc-Disable-unsupported-emulated-SCSI-devices.patch
Patch1008: kvm-misc-Disable-various-unsupported-devices.patch
Patch1009: kvm-misc-Disable-unsupported-audio-devices.patch
Patch1010: kvm-misc-Disable-unsupported-emulated-network-devices.patch
Patch1011: kvm-misc-Use-kvm-by-default.patch
Patch1014: kvm-misc-Disable-HPET-device.patch
Patch1016: kvm-misc-Rename-man-page-qemu-1-to-qemu-kvm-1.patch
Patch1017: kvm-misc-Change-qemu-to-qemu-kvm.patch
Patch1032: kvm-pc-Replace-upstream-machine-types-by-RHEL-7-types.patch
Patch1036: kvm-qemu-kvm-Fix-migration-from-older-version-due-to-i8254-changes.patch
Patch1037: kvm-pc-Add-machine-type-rhel6-0-0.patch
Patch1038: kvm-pc-Drop-superfluous-RHEL-6-compat_props.patch
Patch1039: kvm-vga-Default-vram_size_mb-to-16-like-prior-versions-of-RHEL.patch
Patch1040: kvm-pc-Drop-RHEL-6-USB-device-compat_prop-full-path.patch
Patch1041: kvm-pc-Drop-RHEL-6-compat_props-virtio-serial-pci-max_ports-vectors.patch
Patch1042: kvm-pc-Drop-RHEL-6-compat_props-apic-kvm-apic-vapic.patch
Patch1043: kvm-qxl-set-revision-to-1-for-rhel6-0-0.patch
Patch1044: kvm-pc-Give-rhel6-0-0-a-kvmclock.patch
Patch1045: kvm-pc-Add-machine-type-rhel6-1-0.patch
Patch1046: kvm-pc-Add-machine-type-rhel6-2-0.patch
Patch1047: kvm-pc-Add-machine-type-rhel6-3-0.patch
Patch1048: kvm-pc-Add-machine-type-rhel6-4-0.patch
Patch1049: kvm-pc-Add-machine-type-rhel6-5-0.patch
Patch1050: kvm-e1000-Keep-capabilities-list-bit-on-for-older-RHEL-machine-types.patch
Patch1051: kvm-misc-disable-s3-s4-by-default.patch
Patch1052: kvm-pc-rhel6-compat-enable-S3-S4-for-6-1-and-lower-machine-types.patch
Patch1058: kvm-misc-Disable-EFI-enabled-roms.patch
Patch1059: kvm-pc-set-compat-pmu-property-for-rhel6-x-machine-types.patch
Patch1063: kvm-misc-qga-fsfreeze-main-hook-adapt-to-RHEL-7-RH-only.patch
Patch1065: kvm-misc-add-qxl_screendump-monitor-command.patch
Patch1066: kvm-pc_piix-disable-CPUID_SEP-for-6-4-0-machine-types-and-below.patch
Patch1067: kvm-pc-set-level-xlevel-correctly-on-486-qemu32-CPU-models-for-rhel6-x.patch
Patch1068: kvm-pc-Remove-incorrect-rhel6-x-compat-model-value-for.patch
Patch1069: kvm-pc-rhel6-x-has-x2apic-present-on-Conroe-Penryn-Nehalem-CPU-models.patch
Patch1070: kvm-pc-set-compat-CPUID-0x80000001-EDX-bits-on-Westmere-for-rhel6-x.patch
Patch1071: kvm-pc-Remove-PCLMULQDQ-from-Westmere-on-rhel6-x-machine-types.patch
Patch1072: kvm-pc-SandyBridge-rhel6-x-compat-fixes.patch
Patch1073: kvm-pc-Haswell-doesn-t-have-rdtscp-on-rhel6-x.patch
Patch1076: kvm-qemu-iotests-Remove-lsi53c895a-tests-from-051.patch
Patch1077: kvm-misc-Remove-i82550-network-card-emulation.patch
Patch1078: kvm-misc-Remove-usb-wacom-tablet.patch
Patch1079: kvm-misc-Disable-usb-uas.patch
Patch1081: kvm-misc-Remove-no-hpet-option.patch
Patch1082: kvm-misc-Disable-isa-parallel.patch
Patch1083: kvm-misc-rhel6-compat-usb-serial-numbers.patch
Patch1084: kvm-qga-move-logfiles-to-new-directory-for-easier-SELinux-labeling-RHEL.patch
Patch1085: kvm-target-i386-add-cpu64-rhel6-CPU-model.patch
Patch1090: kvm-pc-rhel6-doesn-t-have-APIC-on-pentium-CPU-models.patch
Patch1091: kvm-pc-RHEL-6-had-x2apic-set-on-Opteron_G-123.patch
Patch1092: kvm-pc-RHEL-6-don-t-have-RDTSCP.patch
Patch1093: kvm-pc_piix-disable-mixer-for-6-4-0-machine-types-and-below.patch
Patch1098: kvm-acpi-piix4-Enable-qemu-kvm-compatibility-mode.patch
Patch1099: kvm-target-i386-support-loading-of-cpu-xsave-subsection.patch
Patch1101: kvm-rbd-link-and-load-librbd-dynamically.patch
Patch1102: kvm-rbd-Only-look-for-qemu-specific-copy-of-librbd-so-1.patch
Patch1104: kvm-misc-seabios-paravirt-allow-more-than-1TB-in-x86-guest.patch
Patch1106: kvm-rhel-Drop-ivshmem-device.patch
Patch1109: kvm-misc-Fix-migration-from-rhel6-5-to-rhel7-with-ipxe.patch
Patch1110: kvm-rhel-Revert-downstream-changes-to-unused-default-configs-mak.patch
Patch1111: kvm-rhel-Drop-cfi-pflash01-and-isa-ide-device.patch
Patch1112: kvm-rhel-Drop-isa-vga-device.patch
Patch1113: kvm-rhel-Make-isa-cirrus-vga-device-unavailable.patch
Patch1114: kvm-rhel-Make-ccid-card-emulated-device-unavailable.patch
Patch1115: kvm-misc-Partially-revert-rhel-Drop-cfi-pflash01-and-isa-ide-device.patch
Patch1116: kvm-misc-Partial-commit-of-87123eabfa1ee7cef51066fd7fd8e7d5ecd0419f-block.patch
Patch1118: kvm-migration-disable-live-block-migration-b-i-for-rhel-and-rhev.patch
Patch1119: kvm-misc-Build-ceph-rbd-only-for-rhev.patch
Patch1121: kvm-rhel-Make-pci-serial-2x-and-pci-serial-4x-device-unavailable.patch
Patch1122: kvm-monitor-Remove-pci_add-command-for-Red-Hat-Enterprise-Linux.patch
Patch1123: kvm-monitor-Remove-pci_del-command-for-Red-Hat-Enterprise-Linux.patch
Patch1124: kvm-monitor-Remove-usb_add-del-commands-for-Red-Hat-Enterprise-Linux.patch
Patch1125: kvm-monitor-Remove-host_net_add-remove-for-Red-Hat-Enterprise-Linux.patch
Patch1131: kvm-misc-don-t-disable-ctrl_mac_addr-feature-for-6-5-machine-RHEL-only.patch
Patch1136: kvm-pc-drop-virtio-balloon-pci-event_idx-compat-property.patch
Patch1137: kvm-misc-introduce-RFQDN_REDHAT-RHEL-6-7-fwd.patch
Patch1142: kvm-misc-fix-intel-hda-live-migration.patch
Patch1145: kvm-pci-assign-cap-number-of-devices-that-can-be-assigned.patch
Patch1146: kvm-vfio-cap-number-of-devices-that-can-be-assigned.patch
Patch1148: kvm-QMP-Forward-port-__com-redhat_drive_del-from-RHEL-6.patch
Patch1149: kvm-QMP-Forward-port-__com-redhat_drive_add-from-RHEL-6.patch
Patch1150: kvm-HMP-Forward-port-__com-redhat_drive_add-from-RHEL-6.patch
Patch1151: kvm-QMP-Document-throttling-parameters-of-__com-redhat_drive_add.patch
Patch1152: kvm-misc-Add-support-statement-to-help-output.patch
Patch1153: kvm-__com-redhat_qxl_screendump-add-docs.patch
Patch1154: kvm-vl-Round-memory-sizes-below-2MiB-up-to-2MiB.patch
Patch1158: kvm-misc-enable-pvticketlocks-by-default.patch
Patch1159: kvm-pc-Fix-rhel6-3dnow-3dnowext-compat-bits.patch
Patch1160: kvm-misc-switch-rhel7-machine-types-to-big-bios.patch
Patch1162: kvm-misc-Add-back-no-hpet-but-ignore-it.patch
Patch1163: kvm-misc-use-recommended-max-vcpu-count.patch
Patch1164: kvm-pc-Create-pc_compat_rhel-functions.patch
Patch1165: kvm-pc-Enable-x2apic-by-default-on-more-recent-CPU-models-v2.patch
Patch1169: kvm-pc-Disable-RDTSCP-unconditionally-on-rhel6-machine-types.patch
Patch1170: kvm-pc-Disable-RDTSCP-on-AMD-CPU-models.patch
Patch1171: kvm-usb-add-microsoft-os-descriptors-compat-property.patch
Patch1172: kvm-configure-add-option-to-disable-fstack-protect.patch
Patch1175: kvm-misc-fix-guest-physical-bits-to-match-host-to-go-beyond-1TB-guests.patch
Patch1176: kvm-QMP-Relax-__com-redhat_drive_add-parameter-checking.patch
Patch1178: kvm-pc-Add-RHEL6-e1000-gPXE-image.patch
Patch1180: kvm-configure-Fix-bugs-preventing-Ceph-inclusion.patch
Patch1181: kvm-pc-Use-cpu64-rhel6-CPU-model-by-default-on-rhel6-machine-types.patch
Patch1182: kvm-target-i386-Copy-cpu64-rhel6-definition-into-qemu64.patch
Patch1186: kvm-pc-add-hot_add_cpu-callback-to-all-machine-types.patch
Patch1188: kvm-misc-Remove-CONFIG_NE2000_ISA-from-all-config-files.patch
Patch1191: kvm-misc-RHEL7-RHEV7-1-2-0-migration-compatibility.patch
Patch1192: kvm-misc-remove-superfluous-hot_add_cpu-and-max_cpus-initializers-RHEV-7-1.patch
Patch1193: kvm-misc-set-model-in-PC_RHEL6_5_COMPAT-for-qemu32-VCPU-RHEV-7-1-only.patch
Patch1194: kvm-misc-Undo-Enable-x2apic-by-default-for-compatibility.patch
Patch1195: kvm-qemu_loadvm_state-shadow-SeaBIOS-for-VM-incoming-from-RHEL-6-host.patch
Patch1198: kvm-rhel-SMBIOS-type-1-branding.patch
Patch1199: kvm-misc-Use-legacy-SMBIOS-for-rhel-machine-types.patch
Patch1201: kvm-misc-Disable-new-devices-in-qemu-2-1.patch
Patch1202: kvm-scripts-qapi-event-py-support-vendor-extension.patch
Patch1203: kvm-qmp-add-error-reason-to-the-BLOCK_IO_ERROR-event.patch
Patch1204: kvm-qmp-improve-debuggability-of-BLOCK_IO_ERROR-event.patch
Patch1205: kvm-uhci-UNfix-irq-routing-for-RHEL-6-machtypes-RHEL-only.patch
Patch1208: kvm-misc-Include-OHCI-device-for-ppc64.patch
Patch1211: kvm-arm64-64K-pages-and-1024MB-guest.patch
# For bz#1076326 - qemu-kvm does not quit when booting guest w/ 161 vcpus and "-no-kvm"
# For bz#1118665 - Migration: rhel7.0->rhev7.1
Patch1212: ga-exit-when-no-kvm-and-vcpu-count-160.patch
# For bz#1118665 - Migration: rhel7.0->rhev7.1
Patch1213: ga-Revert-Use-legacy-SMBIOS-for-rhel-machine-types.patch
# For bz#1118665 - Migration: rhel7.0->rhev7.1
Patch1214: ga-rhel-Use-SMBIOS-legacy-mode-for-machine-types-7.0.patch
# For bz#1118665 - Migration: rhel7.0->rhev7.1
Patch1215: ga-rhel-Suppress-hotplug-memory-address-space-for-machi.patch
# For bz#1118665 - Migration: rhel7.0->rhev7.1
Patch1216: ga-rhel-Fix-ACPI-table-size-for-machine-types-7.0.patch
# For bz#1118665 - Migration: rhel7.0->rhev7.1
Patch1217: ga-rhel-Fix-missing-pc-q35-rhel7.0.0-compatibility-prop.patch
# For bz#1118665 - Migration: rhel7.0->rhev7.1
Patch1218: ga-rhel-virtio-scsi-pci.any_layout-off-for-machine-type.patch
# For bz#1118665 - Migration: rhel7.0->rhev7.1
Patch1219: ga-rhel-PIIX4_PM.memory-hotplug-support-off-for-machine.patch
# For bz#1118665 - Migration: rhel7.0->rhev7.1
Patch1220: ga-rhel-apic.version-0x11-for-machine-types-7.0.patch
# For bz#1118665 - Migration: rhel7.0->rhev7.1
Patch1221: ga-rhel-nec-usb-xhci.superspeed-ports-first-off-for-mac.patch
# For bz#1118665 - Migration: rhel7.0->rhev7.1
Patch1222: ga-rhel-pci-serial.prog_if-0-for-machine-types-7.0.patch
# For bz#1118665 - Migration: rhel7.0->rhev7.1
Patch1223: ga-rhel-virtio-net-pci.guest_announce-off-for-machine-t.patch
# For bz#1118665 - Migration: rhel7.0->rhev7.1
Patch1224: ga-rhel-ICH9-LPC.memory-hotplug-support-off-for-machine.patch
# For bz#1118665 - Migration: rhel7.0->rhev7.1
Patch1225: ga-rhel-.power_controller_present-off-for-machine-types.patch
# For bz#1118665 - Migration: rhel7.0->rhev7.1
Patch1226: ga-rhel-virtio-net-pci.ctrl_guest_offloads-off-for-mach.patch
# For bz#1118665 - Migration: rhel7.0->rhev7.1
Patch1227: ga-pc-q35-rhel7.0.0-Disable-x2apic-default.patch
# For bz#1003432 - qemu-kvm should not allow different virtio serial port use the same name
Patch1228: ga-virtio-serial-create-a-linked-list-of-all-active-dev.patch
# For bz#1003432 - qemu-kvm should not allow different virtio serial port use the same name
Patch1229: ga-virtio-serial-search-for-duplicate-port-names-before.patch
# For bz#1111351 - RHEL-6.6 migration compatibility: CPU models
Patch1230: ga-pc-RHEL-6-CPUID-compat-code-for-Broadwell-CPU-model.patch
# For bz#1129259 - Add traces to virtio-rng device
Patch1231: kvm-virtio-rng-add-some-trace-events.patch
# For bz#1126976 - VHDX image format does not work on PPC64 (Endian issues)
Patch1232: kvm-block-vhdx-add-error-check.patch
# For bz#1126976 - VHDX image format does not work on PPC64 (Endian issues)
Patch1233: kvm-block-VHDX-endian-fixes.patch
# For bz#1133736 - qemu should provide iothread and x-data-plane properties for /usr/libexec/qemu-kvm -device virtio-blk-pci,?
Patch1234: kvm-qdev-monitor-include-QOM-properties-in-device-FOO-he.patch
# For bz#1136752 - virtio-blk dataplane support for block_resize and hot unplug
Patch1235: kvm-block-acquire-AioContext-in-qmp_block_resize.patch
# For bz#1136752 - virtio-blk dataplane support for block_resize and hot unplug
Patch1236: kvm-virtio-blk-allow-block_resize-with-dataplane.patch
# For bz#1136752 - virtio-blk dataplane support for block_resize and hot unplug
Patch1237: kvm-block-acquire-AioContext-in-do_drive_del.patch
# For bz#1136752 - virtio-blk dataplane support for block_resize and hot unplug
Patch1238: kvm-virtio-blk-allow-drive_del-with-dataplane.patch
# For bz#1093023 - provide RHEL-specific machine types in QEMU
Patch1239: kvm-rhel-Add-rhel7.1.0-machine-types.patch
# For bz#1136512 - rhel7.0.0 machtype compat after CVE-2014-5263 vmstate_xhci_event: fix unterminated field list
Patch1240: kvm-vmstate_xhci_event-bug-compat-for-rhel7.0.0-machine-.patch
# For bz#1139706 - pflash (UEFI varstore) migration shortcut for libvirt [RHEV]
Patch1241: kvm-pflash_cfi01-fixup-stale-DPRINTF-calls.patch
# For bz#1139706 - pflash (UEFI varstore) migration shortcut for libvirt [RHEV]
Patch1242: kvm-pflash_cfi01-write-flash-contents-to-bdrv-on-incomin.patch
# For bz#1140145 - qemu-kvm crashed when doing iofuzz testing
Patch1243: kvm-ide-Fix-segfault-when-flushing-a-device-that-doesn-t.patch
# For bz#1138579 - Migration failed with nec-usb-xhci from RHEL7. 0 to RHEL7.1
Patch1244: kvm-xhci-PCIe-endpoint-migration-compatibility-fix.patch
# For bz#1138579 - Migration failed with nec-usb-xhci from RHEL7. 0 to RHEL7.1
Patch1245: kvm-rh-machine-types-xhci-PCIe-endpoint-migration-compat.patch
# For bz#1055532 - QEMU should abort when invalid CPU flag name is used
Patch1246: kvm-target-i386-Reject-invalid-CPU-feature-names-on-the-.patch
# For bz#1113998 - RHEL Power/KVM (qemu-kvm-rhev)
Patch1247: kvm-target-ppc-virtex-ml507-machine-type-should-depend-o.patch
# For bz#1113998 - RHEL Power/KVM (qemu-kvm-rhev)
Patch1248: kvm-RHEL-only-Disable-tests-that-don-t-work-with-RHEL-bu.patch
# For bz#1113998 - RHEL Power/KVM (qemu-kvm-rhev)
Patch1249: kvm-RHEL-onlyy-Disable-unused-ppc-machine-types.patch
Patch1250: kvm-RHEL-only-Remove-unneeded-devices-from-ppc64-qemu-kv.patch
Patch1251: kvm-RHEL-only-Replace-upstream-pseries-machine-types-wit.patch
# For bz#1123349 - [FJ7.0 Bug] SCSI command issued from KVM guest doesn't reach target device
Patch1252: kvm-scsi-bus-prepare-scsi_req_new-for-introduction-of-pa.patch
# For bz#1123349 - [FJ7.0 Bug] SCSI command issued from KVM guest doesn't reach target device
Patch1253: kvm-scsi-bus-introduce-parse_cdb-in-SCSIDeviceClass-and-.patch
# For bz#1123349 - [FJ7.0 Bug] SCSI command issued from KVM guest doesn't reach target device
Patch1254: kvm-scsi-block-extract-scsi_block_is_passthrough.patch
# For bz#1123349 - [FJ7.0 Bug] SCSI command issued from KVM guest doesn't reach target device
Patch1255: kvm-scsi-block-scsi-generic-implement-parse_cdb.patch
# For bz#1123349 - [FJ7.0 Bug] SCSI command issued from KVM guest doesn't reach target device
Patch1256: kvm-virtio-scsi-implement-parse_cdb.patch
# For bz#1135893 - qemu-kvm should report an error message when host's freehugepage memory < domain's memory
Patch1257: kvm-exec-file_ram_alloc-print-error-when-prealloc-fails.patch
# For bz#1144089 - [HP 7.1 FEAT] Increase qemu-kvm-rhev's VCPU limit to 240
Patch1258: kvm-pc-increase-maximal-VCPU-count-to-240.patch

BuildRequires: zlib-devel
BuildRequires: SDL-devel
BuildRequires: which
BuildRequires: texi2html
BuildRequires: gnutls-devel
BuildRequires: cyrus-sasl-devel
BuildRequires: libtool
BuildRequires: libaio-devel
BuildRequires: rsync
BuildRequires: python
BuildRequires: pciutils-devel
BuildRequires: pulseaudio-libs-devel
BuildRequires: libiscsi-devel
BuildRequires: ncurses-devel
BuildRequires: libattr-devel
BuildRequires: libusbx-devel
%if 0%{have_usbredir}
BuildRequires: usbredir-devel >= 0.6
%endif
BuildRequires: texinfo
%if 0%{have_spice}
BuildRequires: spice-protocol >= 0.12.2
BuildRequires: spice-server-devel >= 0.12.0
%endif
%if 0%{have_seccomp}
BuildRequires: libseccomp-devel >= 1.0.0
%endif
# For network block driver
BuildRequires: libcurl-devel
BuildRequires: libssh2-devel
%if 0%{have_gluster}
# For gluster block driver
BuildRequires: glusterfs-api-devel
BuildRequires: glusterfs-devel
%endif
# We need both because the 'stap' binary is probed for by configure
BuildRequires: systemtap
BuildRequires: systemtap-sdt-devel
# For smartcard NSS support
BuildRequires: nss-devel
# For XFS discard support in raw-posix.c
# For VNC JPEG support
BuildRequires: libjpeg-devel
# For VNC PNG support
BuildRequires: libpng-devel
# For uuid generation
BuildRequires: libuuid-devel
# For BlueZ device support
BuildRequires: bluez-libs-devel
# For Braille device support
BuildRequires: brlapi-devel
# For test suite
BuildRequires: check-devel
# For virtfs
BuildRequires: libcap-devel
# Hard requirement for version >= 1.3
BuildRequires: pixman-devel
# Documentation requirement
BuildRequires: perl-podlators
BuildRequires: texinfo
# For rdma
%if 0%{?have_librdma:1}
BuildRequires: librdmacm-devel
%endif
# iasl and cpp for acpi generation (not a hard requirement as we can use
# pre-compiled files, but it's better to use this)
%ifarch %{ix86} x86_64
BuildRequires: iasl
BuildRequires: cpp
%endif


%define qemudocdir %{_docdir}/%{pkgname}

%description
qemu-kvm is an open source virtualizer that provides hardware emulation for
the KVM hypervisor. 

This package provides an agent to run inside guests, which communicates
with the host over a virtio-serial channel named "org.qemu.guest_agent.0"

This package does not need to be installed on the host OS.

%post
%systemd_post qemu-guest-agent.service

%preun
%systemd_preun qemu-guest-agent.service

%postun
%systemd_postun_with_restart qemu-guest-agent.service

%prep
%setup -q -n qemu-%{version}

# if patch fuzzy patch applying will be forbidden
%define with_fuzzy_patches 0
%if %{with_fuzzy_patches}
    patch_command='patch -p1 -s'
%else
    patch_command='patch -p1 -F1 -s'
%endif

ApplyPatch()
{
  local patch=$1
  shift
  if [ ! -f $RPM_SOURCE_DIR/$patch ]; then
    exit 1
  fi
  case "$patch" in
  *.bz2) bunzip2 < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;;
  *.gz) gunzip < "$RPM_SOURCE_DIR/$patch" | $patch_command ${1+"$@"} ;;
  *) $patch_command ${1+"$@"} < "$RPM_SOURCE_DIR/$patch" ;;
  esac
}

# don't apply patch if it's empty or does not exist
ApplyOptionalPatch()
{
  local patch=$1
  shift
  if [ ! -f $RPM_SOURCE_DIR/$patch ]; then
    return 0
  fi
  local C=$(wc -l $RPM_SOURCE_DIR/$patch | awk '{print $1}')
  if [ "$C" -gt 9 ]; then
    ApplyPatch $patch ${1+"$@"}
  fi
}


%patch1005 -p1
%patch1006 -p1
%patch1008 -p1
%patch1009 -p1
%patch1010 -p1
%patch1011 -p1
%patch1014 -p1
%patch1016 -p1
%patch1017 -p1
%patch1032 -p1
%patch1036 -p1
%patch1037 -p1
%patch1038 -p1
%patch1039 -p1
%patch1040 -p1
%patch1041 -p1
%patch1042 -p1
%patch1043 -p1
%patch1044 -p1
%patch1045 -p1
%patch1046 -p1
%patch1047 -p1
%patch1048 -p1
%patch1049 -p1
%patch1050 -p1
%patch1051 -p1
%patch1052 -p1
%patch1058 -p1
%patch1059 -p1
%patch1063 -p1
%patch1065 -p1
%patch1066 -p1
%patch1067 -p1
%patch1068 -p1
%patch1069 -p1
%patch1070 -p1
%patch1071 -p1
%patch1072 -p1
%patch1073 -p1
%patch1076 -p1
%patch1077 -p1
%patch1078 -p1
%patch1079 -p1
%patch1081 -p1
%patch1082 -p1
%patch1083 -p1
%patch1084 -p1
%patch1085 -p1
%patch1090 -p1
%patch1091 -p1
%patch1092 -p1
%patch1093 -p1
%patch1098 -p1
%patch1099 -p1
%patch1101 -p1
%patch1102 -p1
%patch1104 -p1
%patch1106 -p1
%patch1109 -p1
%patch1110 -p1
%patch1111 -p1
%patch1112 -p1
%patch1113 -p1
%patch1114 -p1
%patch1115 -p1
%patch1116 -p1
%patch1118 -p1
%patch1119 -p1
%patch1121 -p1
%patch1122 -p1
%patch1123 -p1
%patch1124 -p1
%patch1125 -p1
%patch1131 -p1
%patch1136 -p1
%patch1137 -p1
%patch1142 -p1
%patch1145 -p1
%patch1146 -p1
%patch1148 -p1
%patch1149 -p1
%patch1150 -p1
%patch1151 -p1
%patch1152 -p1
%patch1153 -p1
%patch1154 -p1
%patch1158 -p1
%patch1159 -p1
%patch1160 -p1
%patch1162 -p1
%patch1163 -p1
%patch1164 -p1
%patch1165 -p1
%patch1169 -p1
%patch1170 -p1
%patch1171 -p1
%patch1172 -p1
%patch1175 -p1
%patch1176 -p1
%patch1178 -p1
%patch1180 -p1
%patch1181 -p1
%patch1182 -p1
%patch1186 -p1
%patch1188 -p1
%patch1191 -p1
%patch1192 -p1
%patch1193 -p1
%patch1194 -p1
%patch1195 -p1
%patch1198 -p1
%patch1199 -p1
%patch1201 -p1
%patch1202 -p1
%patch1203 -p1
%patch1204 -p1
%patch1205 -p1
%patch1208 -p1
%patch1211 -p1
%patch1212 -p1
%patch1213 -p1
%patch1214 -p1
%patch1215 -p1
%patch1216 -p1
%patch1217 -p1
%patch1218 -p1
%patch1219 -p1
%patch1220 -p1
%patch1221 -p1
%patch1222 -p1
%patch1223 -p1
%patch1224 -p1
%patch1225 -p1
%patch1226 -p1
%patch1227 -p1
%patch1228 -p1
%patch1229 -p1
%patch1230 -p1
%patch1231 -p1
%patch1232 -p1
%patch1233 -p1
%patch1234 -p1
%patch1235 -p1
%patch1236 -p1
%patch1237 -p1
%patch1238 -p1
%patch1239 -p1
%patch1240 -p1
%patch1241 -p1
%patch1242 -p1
%patch1243 -p1
%patch1244 -p1
%patch1245 -p1
%patch1246 -p1
%patch1247 -p1
%patch1248 -p1
%patch1249 -p1
%patch1250 -p1
%patch1251 -p1
%patch1252 -p1
%patch1253 -p1
%patch1254 -p1
%patch1255 -p1
%patch1256 -p1
%patch1257 -p1
%patch1258 -p1

ApplyOptionalPatch qemu-kvm-test.patch

%build
buildarch="%{kvm_target}-softmmu"

# --build-id option is used for giving info to the debug packages.
extraldflags="-Wl,--build-id";
buildldflags="VL_LDFLAGS=-Wl,--build-id"

%ifarch s390
    # drop -g flag to prevent memory exhaustion by linker
    %global optflags %(echo %{optflags} | sed 's/-g//')
    sed -i.debug 's/"-g $CFLAGS"/"$CFLAGS"/g' configure
%endif

./configure \
        --prefix=%{_prefix} \
        --libdir=%{_libdir} \
        --sysconfdir=%{_sysconfdir} \
        --interp-prefix=%{_prefix}/qemu-%%M \
        --audio-drv-list=pa,alsa \
        --with-confsuffix=/%{pkgname} \
        --localstatedir=%{_localstatedir} \
        --libexecdir=%{_libexecdir} \
        --with-pkgversion=%{pkgname}-%{version}-%{release} \
        --disable-strip \
        --disable-qom-cast-debug \
        --extra-ldflags="$extraldflags -pie -Wl,-z,relro -Wl,-z,now" \
        --extra-cflags="%{optflags} -fPIE -DPIE" \
        --enable-trace-backend=dtrace \
        --enable-werror \
        --disable-xen \
        --disable-virtfs \
        --enable-kvm \
        --enable-libusb \
%if 0%{have_spice}
        --enable-spice \
%else
        --disable-spice \
%endif
%if 0%{have_seccomp}
        --enable-seccomp \
%else
        --disable-seccomp \
%endif
%if 0%{have_fdt}
        --enable-fdt \
%else
        --disable-fdt \
%endif
        --enable-docs \
        --disable-sdl \
        --disable-debug-tcg \
        --disable-sparse \
        --disable-brlapi \
        --disable-bluez \
        --disable-vde \
        --disable-curses \
        --disable-curl \
        --enable-vnc-tls \
        --enable-vnc-sasl \
        --enable-linux-aio \
        --enable-smartcard-nss \
%if 0%{have_usbredir}
        --enable-usb-redir \
%else
        --disable-usb-redir \
%endif
        --enable-vnc-png \
        --disable-vnc-jpeg \
        --enable-vnc-ws \
        --enable-uuid \
        --disable-vhost-scsi \
        --enable-guest-agent \
        --disable-tpm \
        --enable-live-block-ops \
        --enable-ceph-support \
        --disable-live-block-migration \
%if 0%{have_gluster}
        --enable-glusterfs \
        --block-drv-rw-whitelist=qcow2,raw,file,host_device,nbd,iscsi,gluster,rbd \
%else
        --disable-glusterfs \
        --block-drv-rw-whitelist=qcow2,raw,file,host_device,nbd,iscsi,rbd \
%endif
        --block-drv-ro-whitelist=vmdk,vhdx,vpc,ssh \
	--target-list= \
        --cpu=%{kvm_target} \
        "$@"

echo "config-host.mak contents:"
echo "==="
cat config-host.mak
echo "==="

make qemu-ga %{?_smp_mflags} $buildldflags

%install
%define _udevdir %(pkg-config --variable=udevdir udev)/rules.d


# For the qemu-guest-agent subpackage, install:
# - the systemd service file and the udev rules:
mkdir -p $RPM_BUILD_ROOT%{_unitdir}
mkdir -p $RPM_BUILD_ROOT%{_udevdir}
install -m 0644 %{SOURCE1} $RPM_BUILD_ROOT%{_unitdir}
install -m 0644 %{SOURCE2} $RPM_BUILD_ROOT%{_udevdir}

# - the environment file for the systemd service:
install -D -p -m 0644 %{SOURCE3} \
 $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/qemu-ga

# - the fsfreeze hook script:
install -D --preserve-timestamps \
  scripts/qemu-guest-agent/fsfreeze-hook \
  $RPM_BUILD_ROOT%{_sysconfdir}/qemu-ga/fsfreeze-hook

# - the directory for user scripts:
mkdir $RPM_BUILD_ROOT%{_sysconfdir}/qemu-ga/fsfreeze-hook.d

# - and the fsfreeze script samples:
mkdir --parents $RPM_BUILD_ROOT%{_datadir}/%{pkgname}/qemu-ga/fsfreeze-hook.d/
install --preserve-timestamps --mode=0644 \
  scripts/qemu-guest-agent/fsfreeze-hook.d/*.sample \
  $RPM_BUILD_ROOT%{_datadir}/%{pkgname}/qemu-ga/fsfreeze-hook.d/

# - Install dedicated log directory:
mkdir -p -v $RPM_BUILD_ROOT%{_localstatedir}/log/qemu-ga/

mkdir -p $RPM_BUILD_ROOT%{_bindir}
install -c -m 0755  qemu-ga ${RPM_BUILD_ROOT}%{_bindir}/qemu-ga

%files
    %defattr(-,root,root,-)
    %doc COPYING README
    %{_bindir}/qemu-ga
    %{_unitdir}/qemu-guest-agent.service
    %{_udevdir}/99-qemu-guest-agent.rules
    %config(noreplace) %{_sysconfdir}/sysconfig/qemu-ga
    %{_sysconfdir}/qemu-ga
    %{_datadir}/%{pkgname}/qemu-ga
    %dir %{_localstatedir}/log/qemu-ga


%changelog
* Tue Oct 21 2014 Miroslav Rezanina <mrezanin@redhat.com> - 2.1.0-4.el7
- kvm-Mark-etc-sysconfig-qemu-ga-as-config-noreplace.patch [bz#1150924]
- Resolves: bz#1150924
  (/etc/sysconfig/qemu-ga is replaced when updated)

* Thu Aug 28 2014 Miroslav Rezanina <mrezanin@redhat.com> - 2.1.0-3.el7
- Allow building qemu-guest-agent on ppc64le
- Synchronize with qemu-kvm-rhev-2.1.0-3.el7
- Resolves: bz#1132718
  (qemu-guest-agent fails to build for ppc64le)

* Sat Aug 02 2014 Miroslav Rezanina <mrezanin@redhat.com> - 2.1.0-2.el7
- Create separate qemu-guest-agent package based on qemu-kvm-rhev-2.1.0-1.el7 [bz#1117096]
- Resolves: #bz1117096

* Sat Aug 02 2014 Miroslav Rezanina <mrezanin@redhat.com> - 2.1.0-1.el7
- Rebase to 2.1.0 [bz#1121609]
- Resolves: bz#1121609
 (Rebase qemu-kvm-rhev to qemu 2.1)