File xen.spec of Package xen.7314

#
# spec file for package xen
#
# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via http://bugs.opensuse.org/
#


# needssslcertforbuild

Name:           xen
ExclusiveArch:  %ix86 x86_64 %arm aarch64
%define changeset 31594
%define xen_build_dir xen-4.7.5-testing
#
%define with_kmp 0
%define with_gdbsx 0
%define with_dom0_support 0
%define with_qemu_traditional 0
%bcond_with    xen_oxenstored
%ifarch x86_64
%bcond_without xen_debug
%bcond_without xen_stubdom
%else
%bcond_with    xen_debug
%bcond_with    xen_stubdom
%endif
#
%ifarch x86_64
%define with_kmp 0
%define with_gdbsx 1
%define with_dom0_support 1
%define with_qemu_traditional 1
%endif
#
%ifarch %arm aarch64
%define with_dom0_support 1
%endif
#
%define xen_install_suffix %{nil}
%ifarch x86_64
%define xen_install_suffix .gz
%endif
# EFI requires gcc 4.6 or newer
# gcc46 is available in 12.1 or sles11sp2
# gcc47 is available in sles11sp3
# gcc48 is available in sles11sp4
# 12.2+ have gcc 4.7 as default compiler
%define with_gcc47 0
%define with_gcc48 0
%if %suse_version == 1110
%define with_gcc48 1
%endif
%define _fwdefdir /etc/sysconfig/SuSEfirewall2.d/services
%define with_systemd 0
%if %suse_version > 1220
%define with_systemd 1
%define include_systemd_preset 0
%if %suse_version <= 1320
%define include_systemd_preset 1
%endif
%systemd_requires
BuildRequires:  systemd-devel
%define with_systemd_modules_load %{_prefix}/lib/modules-load.d
%else
PreReq:         %insserv_prereq
%endif
PreReq:         %fillup_prereq
%ifarch %arm aarch64
BuildRequires:  libfdt1-devel
%endif
%ifarch %ix86 x86_64
BuildRequires:  dev86
%endif
#!BuildIgnore:  gcc-PIE
# JWF: Until Anthony's series to load BIOS via toolstack is merged,
# autoconf is needed by autogen.sh.
# http://lists.xenproject.org/archives/html/xen-devel/2016-03/msg01626.html
BuildRequires:  autoconf >= 2.67
BuildRequires:  bison
BuildRequires:  fdupes
BuildRequires:  figlet
BuildRequires:  flex
BuildRequires:  glib2-devel
BuildRequires:  libaio-devel
BuildRequires:  libbz2-devel
BuildRequires:  libpixman-1-0-devel
BuildRequires:  libuuid-devel
BuildRequires:  libxml2-devel
BuildRequires:  libyajl-devel
%if %{?with_qemu_traditional}0
BuildRequires:  SDL-devel
BuildRequires:  pciutils-devel
%endif
%if %{with xen_stubdom}
%if 0%{?suse_version} < 1230
BuildRequires:  texinfo
%else
BuildRequires:  makeinfo
%endif
%endif
BuildRequires:  ncurses-devel
%if %{?with_dom0_support}0
%if %{with xen_oxenstored}
BuildRequires:  ocaml
BuildRequires:  ocaml-compiler-libs
BuildRequires:  ocaml-findlib
BuildRequires:  ocaml-ocamldoc
BuildRequires:  ocaml-runtime
%endif
%endif
BuildRequires:  openssl-devel
BuildRequires:  python-devel
%if %{?with_systemd}0
BuildRequires:  systemd
%endif
%if %suse_version >= 1120
BuildRequires:  xz-devel
%endif
%if %suse_version <= 1110
BuildRequires:  pmtools
%else
%ifarch %ix86 x86_64
BuildRequires:  acpica
%endif
%endif
%ifarch x86_64
%if %{?with_gcc47}0
BuildRequires:  gcc47
%endif
%if %{?with_gcc48}0
BuildRequires:  gcc48
%endif
BuildRequires:  glibc-32bit
BuildRequires:  glibc-devel-32bit
%endif
%ifarch x86_64
BuildRequires:  pesign-obs-integration
%endif
%if %{?with_kmp}0
BuildRequires:  kernel-source
BuildRequires:  kernel-syms
BuildRequires:  module-init-tools
%if %suse_version >= 1230
BuildRequires:  lndir
%else
BuildRequires:  xorg-x11-util-devel
%endif
%endif

Version:        4.7.5_02
Release:        0
Summary:        Xen Virtualization: Hypervisor (aka VMM aka Microkernel)
License:        GPL-2.0
Group:          System/Kernel
Source0:        xen-4.7.5-testing-src.tar.bz2
Source1:        stubdom.tar.bz2
Source2:        qemu-xen-traditional-dir-remote.tar.bz2
Source5:        ipxe.tar.bz2
Source6:        mini-os.tar.bz2
Source9:        xen.changes
Source10:       README.SUSE
Source11:       boot.xen
Source12:       boot.local.xenU
Source15:       logrotate.conf
Source21:       block-npiv-common.sh
Source22:       block-npiv
Source23:       block-npiv-vport
Source26:       init.xen_loop
%if %{?with_kmp}0
Source28:       kmp_filelist
%endif
Source29:       block-dmmd
# Xen API remote authentication sources
Source30:       etc_pam.d_xen-api
Source31:       xenapiusers
# Init script and sysconf file for pciback
Source34:       init.pciback
Source35:       sysconfig.pciback
Source36:       xnloader.py
Source37:       xen2libvirt.py
# Systemd service files
Source41:       xencommons.service
Source42:       xen-dom0-modules.service
Source57:       xen-utils-0.1.tar.bz2
# For xen-libs
Source99:       baselibs.conf
# Upstream patches
Patch1:         57580bbd-kexec-allow-relaxed-placement-via-cmdline.patch
Patch2:         576001df-x86-time-use-local-stamp-in-TSC-calibration-fast-path.patch
Patch3:         5769106e-x86-generate-assembler-equates-for-synthesized.patch
Patch4:         57a1e603-x86-time-adjust-local-system-time-initialization.patch
Patch5:         57a1e64c-x86-time-introduce-and-use-rdtsc_ordered.patch
Patch6:         57a2f6ac-x86-time-calibrate-TSC-against-platform-timer.patch
Patch7:         57a30261-x86-support-newer-Intel-CPU-models.patch
Patch8:         583816f4-x86-vmx-Don-t-deliver-MC-with-an-error-code.patch
Patch9:         5842eaf7-stubdom-remove-EXTRA_CFLAGS-meant-for-building-tools.patch
Patch10:        58cf9277-x86-time-dont-use-vTSC-if-host-guest-freqs-match.patch
Patch11:        58d25ea2-xenstore-add-missing-checks-for-allocation-failure.patch
Patch12:        591efb76-hvmloader-dont-clobber-memory-with-tests.patch
Patch13:        594a718b-xen-detect-try-sysfs-node-for-obtaining-guest-type.patch
Patch14:        594d2ef8-xen-detect-handle-asprintf-error.patch
Patch15:        59a98d3e-libxc-increase-maximum-migration-stream-record-length.patch
Patch16:        59f31268-libxc-remove-stale-error-check-for-domain-size.patch
Patch17:        5a33a12f-domctl-improve-locking-during-domain-destruction.patch
Patch18:        5a79d7ed-libxc-packed-initrd-dont-fail-domain-creation.patch
Patch258:       xsa258.patch
Patch259:       xsa259.patch
Patch26001:     xsa260-1.patch
Patch26002:     xsa260-2.patch
Patch26003:     xsa260-3.patch
Patch26004:     xsa260-4.patch
Patch261:       xsa261.patch
Patch262:       xsa262.patch
# Upstream qemu-traditional patches
Patch350:       VNC-Support-for-ExtendedKeyEvent-client-message.patch
Patch351:       0001-net-move-the-tap-buffer-into-TAPState.patch
Patch352:       0002-net-increase-tap-buffer-size.patch
Patch353:       0003-e1000-fix-access-4-bytes-beyond-buffer-end.patch
Patch354:       0004-e1000-secrc-support.patch
Patch355:       0005-e1000-multi-buffer-packet-support.patch
Patch356:       0006-e1000-clear-EOP-for-multi-buffer-descriptors.patch
Patch357:       0007-e1000-verify-we-have-buffers-upfront.patch
Patch358:       0008-e1000-check-buffer-availability.patch
Patch359:       CVE-2013-4533-qemut-pxa2xx-buffer-overrun-on-incoming-migration.patch
Patch360:       CVE-2013-4534-qemut-openpic-buffer-overrun-on-incoming-migration.patch
Patch361:       CVE-2013-4537-qemut-ssi-sd-fix-buffer-overrun-on-invalid-state-load.patch
Patch362:       CVE-2013-4538-qemut-ssd0323-fix-buffer-overun-on-invalid-state.patch
Patch363:       CVE-2013-4539-qemut-tsc210x-fix-buffer-overrun-on-invalid-state-load.patch
Patch364:       CVE-2014-0222-qemut-qcow1-validate-l2-table-size.patch
Patch365:       CVE-2014-3640-qemut-slirp-NULL-pointer-deref-in-sosendto.patch
Patch366:       CVE-2015-4037-qemut-smb-config-dir-name.patch
Patch367:       CVE-2015-5154-qemut-fix-START-STOP-UNIT-command-completion.patch
Patch368:       CVE-2015-5278-qemut-Infinite-loop-in-ne2000_receive-function.patch
Patch369:       CVE-2015-6815-qemut-e1000-fix-infinite-loop.patch
Patch370:       CVE-2015-7512-qemut-net-pcnet-buffer-overflow-in-non-loopback-mode.patch
Patch371:       CVE-2015-8345-qemut-eepro100-infinite-loop-fix.patch
Patch372:       CVE-2015-8504-qemut-vnc-avoid-floating-point-exception.patch
Patch373:       CVE-2016-1714-qemut-fw_cfg-add-check-to-validate-current-entry-value.patch
Patch374:       CVE-2016-1981-qemut-e1000-eliminate-infinite-loops-on-out-of-bounds-transfer.patch
Patch375:       CVE-2016-2391-qemut-usb-null-pointer-dereference-in-ohci-module.patch
Patch376:       CVE-2016-2841-qemut-ne2000-infinite-loop-in-ne2000_receive.patch
Patch377:       CVE-2016-4439-qemut-scsi-esp-OOB-write-while-writing-to-cmdbuf-in-esp_reg_write.patch
Patch378:       CVE-2016-4441-qemut-scsi-esp-OOB-write-while-writing-to-cmdbuf-in-get_cmd.patch
Patch379:       CVE-2016-5238-qemut-scsi-esp-OOB-write-when-using-non-DMA-mode-in-get_cmd.patch
Patch380:       CVE-2016-5338-qemut-scsi-esp-OOB-rw-access-while-processing-ESP_FIFO.patch
Patch381:       CVE-2016-6351-qemut-scsi-esp-make-cmdbuf-big-enough-for-maximum-CDB-size.patch
Patch382:       CVE-2016-7908-qemut-net-Infinite-loop-in-mcf_fec_do_tx.patch
Patch383:       CVE-2016-7909-qemut-net-pcnet-infinite-loop-in-pcnet_rdra_addr.patch
Patch384:       CVE-2016-8667-qemut-dma-rc4030-divide-by-zero-error-in-set_next_tick.patch
Patch385:       CVE-2016-8669-qemut-char-divide-by-zero-error-in-serial_update_parameters.patch
Patch386:       CVE-2016-8910-qemut-net-rtl8139-infinite-loop-while-transmit-in-Cplus-mode.patch
Patch387:       CVE-2016-9921-qemut-display-cirrus_vga-divide-by-zero-in-cirrus_do_copy.patch
Patch388:       CVE-2017-6505-qemut-usb-an-infinite-loop-issue-in-ohci_service_ed_list.patch
Patch389:       CVE-2017-7718-qemut-display-cirrus-OOB-read-access-issue.patch
Patch390:       CVE-2017-8309-qemut-audio-host-memory-leakage-via-capture-buffer.patch
Patch391:       CVE-2017-9330-qemut-usb-ohci-infinite-loop-due-to-incorrect-return-value.patch
Patch392:       CVE-2017-10664-qemut-nbd-ignore-sigpipe.patch
Patch393:       CVE-2017-11434-qemut-slirp-out-of-bounds-read-while-parsing-dhcp-options.patch
Patch394:       CVE-2017-5526-qemut-audio-memory-leakage-in-es1370-device.patch
Patch395:       CVE-2017-15289-qemut-cirrus-OOB-access-issue-in-mode4and5-write-functions.patch
Patch396:       qemut-add-support-for-cpuid-MSR_IA32_SPEC_CTRL.patch
Patch397:       CVE-2018-5683-qemut-out-of-bounds-read-in-vga_draw_text-routine.patch
Patch398:       CVE-2017-18030-qemut-out-of-bounds-access-in-cirrus_invalidate_region-routine.patch
# qemu-traditional patches that are not upstream
Patch450:       blktap.patch
Patch451:       cdrom-removable.patch
Patch453:       xen-qemu-iscsi-fix.patch
Patch454:       qemu-security-etch1.patch
Patch455:       xen-disable-qemu-monitor.patch
Patch456:       xen-hvm-default-bridge.patch
Patch457:       qemu-ifup-set-mtu.patch
Patch458:       ioemu-vnc-resize.patch
Patch459:       capslock_enable.patch
Patch460:       altgr_2.patch
Patch461:       log-guest-console.patch
Patch470:       bdrv_open2_fix_flags.patch
Patch471:       bdrv_open2_flags_2.patch
Patch472:       ioemu-7615-qcow2-fix-alloc_cluster_link_l2.patch
Patch473:       qemu-dm-segfault.patch
Patch474:       bdrv_default_rwflag.patch
Patch475:       kernel-boot-hvm.patch
Patch476:       ioemu-watchdog-support.patch
Patch477:       ioemu-watchdog-linkage.patch
Patch478:       ioemu-watchdog-ib700-timer.patch
Patch479:       ioemu-hvm-pv-support.patch
Patch480:       pvdrv_emulation_control.patch
Patch481:       ioemu-disable-scsi.patch
Patch482:       ioemu-disable-emulated-ide-if-pv.patch
Patch483:       xenpaging.qemu.flush-cache.patch
# Our platform specific patches
Patch500:       xen-destdir.patch
Patch501:       vif-bridge-no-iptables.patch
Patch502:       vif-bridge-tap-fix.patch
Patch503:       xl-conf-default-bridge.patch
Patch504:       xen-arch-kconfig-nr_cpus.patch
Patch505:       suse-xendomains-service.patch
# Needs to go upstream
Patch520:       suspend_evtchn_lock.patch
Patch521:       xenpaging.doc.patch
Patch522:       stubdom-have-iovec.patch
Patch523:       vif-route.patch
# Other bug fixes or features
Patch601:       xenconsole-no-multiple-connections.patch
Patch602:       hibernate.patch
Patch603:       stdvga-cache.patch
Patch604:       ipxe-enable-nics.patch
Patch605:       pygrub-netware-xnloader.patch
Patch606:       pygrub-boot-legacy-sles.patch
Patch607:       pygrub-handle-one-line-menu-entries.patch
Patch608:       aarch64-rename-PSR_MODE_ELxx-to-match-linux-headers.patch
Patch609:       CVE-2014-0222-blktap-qcow1-validate-l2-table-size.patch
Patch610:       libxl.pvscsi.patch
Patch611:       xen.libxl.dmmd.patch
Patch612:       libxl.add-option-to-disable-disk-cache-flushes-in-qdisk.patch
Patch613:       blktap2-no-uninit.patch
Patch614:       libxl.set-migration-constraints-from-cmdline.patch
Patch616:       libxc.sr.superpage.patch
# Xenstored
Patch651:       xs-01-temporary-context.patch
Patch652:       xs-02-get_parent-context.patch
Patch653:       xs-03-read_node-context.patch
Patch654:       xs-04-get_node-context.patch
Patch655:       xs-05-watch-firing-context.patch
Patch656:       xs-06-talloc-report.patch
Patch657:       xs-07-do_mkdir-error.patch
Patch658:       xs-08-add_change_node-fix.patch
Patch659:       xs-09-add_change_node-params.patch
Patch660:       xs-10-call-add_change_node.patch
Patch661:       xs-11-tdb-record-header.patch
Patch662:       xs-12-node-gen-count.patch
Patch663:       xs-13-read-directory-part-support.patch
Patch664:       xs-14-command-array.patch
Patch665:       xs-15-command-return-val.patch
Patch666:       xs-16-function-static.patch
Patch667:       xs-17-arg-parsing.patch
Patch668:       xs-18-default-buffer.patch
Patch669:       xs-19-handle-alloc-failures.patch
Patch670:       xs-20-tdb-version.patch
Patch671:       xs-21-empty-tdb-database.patch
Patch672:       xs-22-reopen_log-fix.patch
Patch673:       xs-23-XS_DEBUG-rename.patch
Patch674:       xs-24-xenstored_control.patch
Patch675:       xs-25-control-enhance.patch
Patch676:       xs-26-log-control.patch
Patch677:       xs-27-memory-report.patch
Patch678:       xs-28-remove-talloc-report.patch
Patch679:       xs-29-define-off_t.patch
Patch680:       0001-xenstore-let-write_node-and-some-callers-return-errn.patch
Patch681:       0002-xenstore-undo-function-rename.patch
Patch682:       0003-xenstore-rework-of-transaction-handling.patch
Patch683:       libxl.LIBXL_DESTROY_TIMEOUT.patch
# Hypervisor and PV driver Patches
Patch701:       x86-ioapic-ack-default.patch
Patch702:       x86-cpufreq-report.patch
Patch720:       xen_pvonhvm.xen_emul_unplug.patch
Patch721:       supported_module.patch
Patch751:       xen.build-compare.doc_html.patch
Patch752:       xen.build-compare.man.patch
Patch753:       ipxe-no-error-logical-not-parentheses.patch
Patch754:       ipxe-use-rpm-opt-flags.patch
Patch755:       x86-Spectre-CPUID.patch
Patch756:       x86emul-fix-5a856a2b-x86-emul-fix-64bit-decoding-of-segment-overrides.patch
# Anthony's "load BIOS via toolstack" patches
# http://lists.xenproject.org/archives/html/xen-devel/2016-03/msg01626.html
Patch800:       0001-libxc-Rework-extra-module-initialisation.patch
Patch801:       0002-libxc-Prepare-a-start-info-structure-for-hvmloader.patch
Patch802:       0003-configure-define-SEABIOS_PATH-and-OVMF_PATH.patch
Patch803:       0004-firmware-makefile-install-BIOS-blob.patch
Patch804:       0005-libxl-Load-guest-BIOS-from-file.patch
Patch805:       0006-xen-Move-the-hvm_start_info-C-representation-from-li.patch
Patch806:       0007-hvmloader-Grab-the-hvm_start_info-pointer.patch
Patch807:       0008-hvmloader-Locate-the-BIOS-blob.patch
Patch809:       0010-hvmloader-Load-SeaBIOS-from-hvm_start_info-modules.patch
Patch810:       0011-hvmloader-Load-OVMF-from-modules.patch
Patch811:       0012-hvmloader-Specific-bios_load-function-required.patch
Patch812:       0013-hvmloader-Always-build-in-SeaBIOS-and-OVMF-loader.patch
Patch813:       0014-configure-do-not-depend-on-SEABIOS_PATH-or-OVMF_PATH.patch
# Build patches
Patch99996:     xen.stubdom.newlib.patch
Patch99998:     tmp_build.patch
Url:            http://www.cl.cam.ac.uk/Research/SRG/netos/xen/
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
%define pyver %(python -c "import sys; print sys.version[:3]")
%if %{?with_kmp}0
%suse_kernel_module_package -n xen um pv xen -f kmp_filelist
%endif

%description
Xen is a virtual machine monitor for x86 that supports execution of
multiple guest operating systems with unprecedented levels of
performance and resource isolation.

This package contains the Xen Hypervisor. (tm)

Modern computers are sufficiently powerful to use virtualization to
present the illusion of many smaller virtual machines (VMs), each
running a separate operating system instance. Successful partitioning
of a machine to support the concurrent execution of multiple operating
systems poses several challenges. Firstly, virtual machines must be
isolated from one another: It is not acceptable for the execution of
one to adversely affect the performance of another. This is
particularly true when virtual machines are owned by mutually
untrusting users. Secondly, it is necessary to support a variety of
different operating systems to accommodate the heterogeneity of popular
applications. Thirdly, the performance overhead introduced by
virtualization should be small.

Xen uses a technique called paravirtualization: The guest OS is
modified, mainly to enhance performance.

The Xen hypervisor (microkernel) does not provide device drivers for
your hardware (except for CPU and memory). This job is left to the
kernel that's running in domain 0. Thus the domain 0 kernel is
privileged; it has full hardware access. It's started immediately after
Xen starts up. Other domains have no access to the hardware; instead
they use virtual interfaces that are provided by Xen (with the help of
the domain 0 kernel).

In addition to this package you need to install the kernel-xen, xen-libs
and xen-tools packages to use Xen. Xen version 3 and newer also supports
running unmodified guests using full virtualization, if appropriate hardware
is present.

[Hypervisor is a trademark of IBM]



Authors:
--------
    Ian Pratt <ian.pratt@cl.cam.ac.uk>
    Keir Fraser <Keir.Fraser@cl.cam.ac.uk>
    Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
    Mark Williamson <mark.williamson@cl.cam.ac.uk>
    Ewan Mellor <ewan@xensource.com>
    ...

%package libs
Summary:        Xen Virtualization: Libraries
Group:          System/Kernel

%description libs
Xen is a virtual machine monitor for x86 that supports execution of
multiple guest operating systems with unprecedented levels of
performance and resource isolation.

This package contains the libraries used to interact with the Xen
virtual machine monitor.

In addition to this package you need to install kernel-xen, xen and
xen-tools to use Xen.


Authors:
--------
    Ian Pratt <ian.pratt@cl.cam.ac.uk>


%if %{?with_dom0_support}0

%package tools
Summary:        Xen Virtualization: Control tools for domain 0
Group:          System/Kernel
Requires:       bridge-utils
%ifarch x86_64
%if %suse_version >= 1315
Requires:       grub2-x86_64-xen
%endif
# Uncomment when ovmf is supported
#Requires:       qemu-ovmf-x86_64
Requires:       qemu-x86
%endif
%ifarch %arm aarch64
Requires:       qemu-arm
%endif
Requires:       multipath-tools
Requires:       python
Requires:       python-curses
Requires:       python-lxml
Requires:       python-openssl
Requires:       python-pam
Requires:       python-xml
Requires:       qemu-seabios
Requires:       xen-libs = %{version}-%{release}
# subpackage existed in 10.3
Provides:       xen-tools-ioemu = %{version}
Obsoletes:      xen-tools-ioemu < %{version}
Conflicts:      libvirt < 1.0.5

%description tools
Xen is a virtual machine monitor for x86 that supports execution of
multiple guest operating systems with unprecedented levels of
performance and resource isolation.

This package contains the control tools that allow you to start, stop,
migrate, and manage virtual machines.

In addition to this package you need to install kernel-xen, xen and
xen-libs to use Xen.


Authors:
--------
    Ian Pratt <ian.pratt@cl.cam.ac.uk>


%endif

%package tools-domU
Summary:        Xen Virtualization: Control tools for domain U
Group:          System/Kernel
Conflicts:      xen-tools
Requires:       xen-libs = %{version}-%{release}

%description tools-domU
Xen is a virtual machine monitor for x86 that supports execution of
multiple guest operating systems with unprecedented levels of
performance and resource isolation.

This package contains tools that allow unprivileged domains to query
the virtualized environment.



Authors:
--------
    Ian Pratt <ian.pratt@cl.cam.ac.uk>

%package devel
Summary:        Xen Virtualization: Headers and libraries for development
Group:          System/Kernel
Requires:       libuuid-devel
Requires:       xen-libs = %{version}

%description devel
Xen is a virtual machine monitor for x86 that supports execution of
multiple guest operating systems with unprecedented levels of
performance and resource isolation.

This package contains the libraries and header files needed to create
tools to control virtual machines.



Authors:
--------
    Ian Pratt <ian.pratt@cl.cam.ac.uk>

%if %{?with_kmp}0

%package KMP
Summary:        Xen para-virtual device drivers for fully virtualized guests
Group:          System/Kernel
Conflicts:      xen
%if %suse_version >= 1230
Requires:       pesign-obs-integration
%endif

%description KMP
Xen is a virtual machine monitor for x86 that supports execution of
multiple guest operating systems with unprecedented levels of
performance and resource isolation.

This package contains the Xen para-virtual device drivers for fully
virtualized guests.

%endif

%if %{?with_dom0_support}0

%package doc-html
Summary:        Xen Virtualization: HTML documentation
Group:          Documentation/HTML

%description doc-html
Xen is a virtual machine monitor for x86 that supports execution of
multiple guest operating systems with unprecedented levels of
performance and resource isolation.

xen-doc-html contains the online documentation in HTML format. Point
your browser at file:/usr/share/doc/packages/xen/html/



Authors:
--------
    Ian Pratt <ian.pratt@cl.cam.ac.uk>
%endif

%prep
%setup -q -n %xen_build_dir -a 1 -a 2 -a 5 -a 6 -a 57
# Upstream patches
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1
%patch8 -p1
%patch9 -p1
%patch10 -p1
%patch11 -p1
%patch12 -p1
%patch13 -p1
%patch14 -p1
%patch15 -p1
%patch16 -p1
%patch17 -p1
%patch18 -p1
%patch258 -p1
%patch259 -p1
%patch26001 -p1
%patch26002 -p1
%patch26003 -p1
%patch26004 -p1
%patch261 -p1
%patch262 -p1
# Upstream qemu patches
%patch350 -p1
%patch351 -p1
%patch352 -p1
%patch353 -p1
%patch354 -p1
%patch355 -p1
%patch356 -p1
%patch357 -p1
%patch358 -p1
%patch359 -p1
%patch360 -p1
%patch361 -p1
%patch362 -p1
%patch363 -p1
%patch364 -p1
%patch365 -p1
%patch366 -p1
%patch367 -p1
%patch368 -p1
%patch369 -p1
%patch370 -p1
%patch371 -p1
%patch372 -p1
%patch373 -p1
%patch374 -p1
%patch375 -p1
%patch376 -p1
%patch377 -p1
%patch378 -p1
%patch379 -p1
%patch380 -p1
%patch381 -p1
%patch382 -p1
%patch383 -p1
%patch384 -p1
%patch385 -p1
%patch386 -p1
%patch387 -p1
%patch388 -p1
%patch389 -p1
%patch390 -p1
%patch391 -p1
%patch392 -p1
%patch393 -p1
%patch394 -p1
%patch395 -p1
%patch396 -p1
%patch397 -p1
%patch398 -p1
# Qemu traditional
%patch450 -p1
%patch451 -p1
%patch453 -p1
%patch454 -p1
%patch455 -p1
%patch456 -p1
%patch457 -p1
%patch458 -p1
%patch459 -p1
%patch460 -p1
%patch461 -p1
%patch470 -p1
%patch471 -p1
%patch472 -p1
%patch473 -p1
%patch474 -p1
%patch475 -p1
%patch476 -p1
%patch477 -p1
%patch478 -p1
%patch479 -p1
%patch480 -p1
%patch481 -p1
%patch482 -p1
%patch483 -p1
# Our platform specific patches
%patch500 -p1
%patch501 -p1
%patch502 -p1
%patch503 -p1
%patch504 -p1
%patch505 -p1
# Needs to go upstream
%patch520 -p1
%patch521 -p1
%patch522 -p1
%patch523 -p1
# Other bug fixes or features
%patch601 -p1
%patch602 -p1
%patch603 -p1
%patch604 -p1
%patch605 -p1
%patch606 -p1
%patch607 -p1
%patch608 -p1
%patch609 -p1
%patch610 -p1
%patch611 -p1
%patch612 -p1
%patch613 -p1
%patch614 -p1
%patch616 -p1
# Xenstored
%patch651 -p1
%patch652 -p1
%patch653 -p1
%patch654 -p1
%patch655 -p1
%patch656 -p1
%patch657 -p1
%patch658 -p1
%patch659 -p1
%patch660 -p1
%patch661 -p1
%patch662 -p1
%patch663 -p1
%patch664 -p1
%patch665 -p1
%patch666 -p1
%patch667 -p1
%patch668 -p1
%patch669 -p1
%patch670 -p1
%patch671 -p1
%patch672 -p1
%patch673 -p1
%patch674 -p1
%patch675 -p1
%patch676 -p1
%patch677 -p1
%patch678 -p1
%patch679 -p1
%patch680 -p1
%patch681 -p1
%patch682 -p1
%patch683 -p1
# Hypervisor and PV driver Patches
%patch701 -p1
%patch702 -p1
%patch720 -p1
%patch721 -p1
%patch751 -p1
%patch752 -p1
%patch753 -p1
%patch754 -p1
%patch755 -p1
%patch756 -p1
# Anthony's "load BIOS via toolstack" patches
# http://lists.xenproject.org/archives/html/xen-devel/2016-03/msg01626.html
%patch800 -p1
%patch801 -p1
%patch802 -p1
%patch803 -p1
%patch804 -p1
%patch805 -p1
%patch806 -p1
%patch807 -p1
%patch809 -p1
%patch810 -p1
%patch811 -p1
%patch812 -p1
%patch813 -p1
# Build patches
%patch99996 -p1
%patch99998 -p1

%build
# JWF: Anthony's series to load BIOS from toolstack requires autogen.sh.
# http://lists.xenproject.org/archives/html/xen-devel/2016-03/msg01626.html
./autogen.sh

# we control the version info of this package
# to gain control of filename of xen.gz
XEN_VERSION=%{version}
XEN_VERSION=${XEN_VERSION%%%%.*}
XEN_SUBVERSION=%{version}
XEN_SUBVERSION=${XEN_SUBVERSION#*.}
XEN_SUBVERSION=${XEN_SUBVERSION%%%%.*}
XEN_EXTRAVERSION="%version-%release"
XEN_EXTRAVERSION="${XEN_EXTRAVERSION#*.}"
XEN_EXTRAVERSION="${XEN_EXTRAVERSION#*.}"
# remove trailing B_CNT to reduce build-compare noise
XEN_EXTRAVERSION="${XEN_EXTRAVERSION%%.*}"
XEN_FULLVERSION="$XEN_VERSION.$XEN_SUBVERSION.$XEN_EXTRAVERSION"
XEN_BUILD_DATE="`date -u -d '1970-01-01'`"
XEN_BUILD_TIME="`date -u -d '1970-01-01' +%%T`"
SMBIOS_DATE="`date -u -d '1970-01-01' +%%m/%%d/%%Y`"
RELDATE="`date -u -d '1970-01-01' '+%%d %%b %%Y'`"
if test -r %{S:9}
then
	XEN_BUILD_DATE="` date -u -d \"$(sed -n '/@/{s/ - .*$//p;q}' %{S:9})\" `"
	XEN_BUILD_TIME="` date -u -d \"$(sed -n '/@/{s/ - .*$//p;q}' %{S:9})\" +%%T`"
	SMBIOS_DATE="` date -u -d \"$(sed -n '/@/{s/ - .*$//p;q}' %{S:9})\" +%%m/%%d/%%Y`"
	RELDATE="` date -u -d \"$(sed -n '/@/{s/ - .*$//p;q}' %{S:9})\" '+%%d %%b %%Y'`"
fi
cat > .our_xenversion <<_EOV_
export WGET=$(type -P false)
export FTP=$(type -P false)
export GIT=$(type -P false)
export EXTRA_CFLAGS_XEN_TOOLS="$RPM_OPT_FLAGS"
export EXTRA_CFLAGS_QEMU_TRADITIONAL="$RPM_OPT_FLAGS"
export SMBIOS_DATE="$SMBIOS_DATE"
export RELDATE="$RELDATE"
XEN_VERSION=$XEN_VERSION
XEN_SUBVERSION=$XEN_SUBVERSION
XEN_EXTRAVERSION=$XEN_EXTRAVERSION
XEN_FULLVERSION=$XEN_FULLVERSION
_EOV_
source ./.our_xenversion
echo "%{changeset}" > xen/.scmversion
sed -i~ "
s/XEN_VERSION[[:blank:]]*=.*/XEN_VERSION = $XEN_VERSION/
s/XEN_SUBVERSION[[:blank:]]*=.*/XEN_SUBVERSION = $XEN_SUBVERSION/
s/XEN_EXTRAVERSION[[:blank:]]*?=.*/XEN_EXTRAVERSION = .$XEN_EXTRAVERSION/
s/XEN_FULLVERSION[[:blank:]]*=.*/XEN_FULLVERSION = $XEN_FULLVERSION/
s/XEN_BUILD_DATE[[:blank:]]*?=.*/XEN_BUILD_DATE = $XEN_BUILD_DATE/
s/XEN_BUILD_TIME[[:blank:]]*?=.*/XEN_BUILD_TIME = $XEN_BUILD_TIME/
s/XEN_BUILD_HOST[[:blank:]]*?=.*/XEN_BUILD_HOST = buildhost/
s/XEN_DOMAIN[[:blank:]]*?=.*/XEN_DOMAIN = suse.de/
" xen/Makefile
if diff -u xen/Makefile~ xen/Makefile
then
	: no changes?
fi
configure_flags=
%if %{with xen_stubdom}
configure_flags=--enable-stubdom
%else
configure_flags=--disable-stubdom
%endif
%if %{?with_qemu_traditional}0
configure_flags="${configure_flags} --enable-qemu-traditional"
%else
configure_flags="${configure_flags} --disable-qemu-traditional"
%endif
./configure \
        --disable-xen \
        --enable-tools \
        --enable-docs \
        --prefix=/usr \
        --exec_prefix=/usr \
        --bindir=%{_bindir} \
        --sbindir=%{_sbindir} \
        --libdir=%{_libdir} \
        --libexecdir=%{_libexecdir} \
        --datadir=%{_datadir} \
        --mandir=%{_mandir} \
        --includedir=%{_includedir} \
        --docdir=%{_defaultdocdir}/xen \
	--with-initddir=%{_initddir} \
%if %{?with_dom0_support}0
%if %{with xen_oxenstored}
	--with-xenstored=oxenstored \
%endif
%endif
%if %{?with_systemd}0
	--enable-systemd \
	--with-systemd=%{_unitdir} \
	--with-systemd-modules-load=%{with_systemd_modules_load} \
%else
	--disable-systemd \
%endif
	--with-system-ovmf=%{_datadir}/qemu/ovmf-x86_64-ms.bin \
	--with-system-seabios=%{_datadir}/qemu/bios-256k.bin \
	--with-system-qemu=%{_bindir}/qemu-system-i386 \
        ${configure_flags}
make -C tools/include/xen-foreign %{?_smp_mflags}
make %{?_smp_mflags}
%if %{?with_dom0_support}0
make -C tools/xen-utils-0.1 XEN_INTREE_BUILD=yes XEN_ROOT=$PWD
%endif
#
%if %{?with_kmp}0
# PV driver modules
export XL=/usr/src/linux
export XEN=/usr/src/linux/include/xen
mkdir -p obj
for flavor in %flavors_to_build; do
    rm -rf obj/$flavor
    cp -r unmodified_drivers/linux-2.6 obj/$flavor
    cd obj/$flavor
    ./mkbuildtree
    make -C /usr/src/linux-obj/%_target_cpu/$flavor modules \
	%{?_smp_mflags} \
        M=$PWD
    cd ../..
done
%endif

%install
source ./.our_xenversion
# tools
make \
	DESTDIR=$RPM_BUILD_ROOT \
	SYSCONFIG_DIR=/var/adm/fillup-templates \
	%{?_smp_mflags} \
	install
find $RPM_BUILD_ROOT -ls
for i in $RPM_BUILD_ROOT/var/adm/fillup-templates/*
do
	mv -v $i ${i%/*}/sysconfig.${i##*/}
done

%if %{?with_systemd}0
udev_rulesdir=$RPM_BUILD_ROOT%{_udevrulesdir}
tools_domU_dir=$RPM_BUILD_ROOT%{_libexecdir}/%{name}-tools-domU
mkdir -p ${udev_rulesdir}
mkdir -p ${tools_domU_dir}
#
tee ${udev_rulesdir}/80-%{name}-tools-domU.rules <<'_EOR_'
# XenSource, Inc. Xen Platform Device
SUBSYSTEM=="pci", ATTR{modalias}=="pci:v00005853d00000001sv00005853sd00000001bcFFsc80i00", TAG+="systemd", ENV{SYSTEMD_WANTS}+="%{name}-vcpu-watch.service"
_EOR_
#
tee $RPM_BUILD_ROOT%{_unitdir}/%{name}-vcpu-watch.service <<'_EOS_'
[Unit]
Description=Listen to CPU online/offline events from dom0 toolstack

[Service]
Type=simple
ExecStart=%{_libexecdir}/%{name}-tools-domU/%{name}-vcpu-watch.sh
Restart=always
RestartSec=2
_EOS_
#
tee $RPM_BUILD_ROOT%{_libexecdir}/%{name}-tools-domU/%{name}-vcpu-watch.sh <<'_EOS_'
#!/bin/bash
unset LANG
unset ${!LC_*}
echo "$0 starting" >&2
xenstore-watch cpu | while read
do
  : xenstore event: ${REPLY}
  case "${REPLY}" in
    cpu)
      : just started
      ;;
    cpu/[0-9]/availability|cpu/[0-9][0-9]/availability)
      vcpu="${REPLY%/*}"
      vcpu="${vcpu#*/}"
      sysfs="/sys/devices/system/cpu/cpu${vcpu}/online"
      if test -f "${sysfs}"
      then
        availability="`xenstore-read \"${REPLY}\"`"
        case "${availability}" in
          online|offline)
            if test "${availability}" = "online"
            then
              new_sysfs_state=1
            else
              new_sysfs_state=0
            fi
            read cur_sysfs_state rest < "${sysfs}"
            if test "${cur_sysfs_state}" = "${new_sysfs_state}"
            then
              : the vcpu "${vcpu}" already has state "${availability}" via "${sysfs}"
            else
              : setting vcpu "${vcpu}" to "${availability}" via "${sysfs}"
              echo "setting vcpu ${vcpu} to ${availability}" >&2
              echo "${new_sysfs_state}" > "${sysfs}"
            fi
          ;;
        esac
      fi
    ;;
    *)
      : unhandled
    ;;
  esac
done
exit 1
_EOS_
chmod 755 $RPM_BUILD_ROOT%{_libexecdir}/%{name}-tools-domU/%{name}-vcpu-watch.sh
#
tee ${udev_rulesdir}/60-persistent-xvd.rules <<'_EOR_'
ACTION=="remove", GOTO="xvd_aliases_end"
SUBSYSTEM!="block", GOTO="xvd_aliases_end"
KERNEL=="xvd*[!0-9]", IMPORT{program}=="%{name}-tools-domU.sh --devpath %%p --devtype $env{DEVTYPE}"
KERNEL=="xvd*[0-9]",  IMPORT{program}=="%{name}-tools-domU.sh --devpath %%p --devtype $env{DEVTYPE}"
KERNEL=="xvd*[!0-9]", ENV{VBD_HD_SYMLINK}=="hd[a-d]", SYMLINK+="$env{VBD_HD_SYMLINK}"
KERNEL=="xvd*[0-9]",  ENV{VBD_HD_SYMLINK}=="hd[a-d]", SYMLINK+="$env{VBD_HD_SYMLINK}%%n"
LABEL="xvd_aliases_end"
_EOR_
#
dracut_moduledir=$RPM_BUILD_ROOT/usr/lib/dracut/modules.d/50%{name}-tools-domU
mkdir -p ${dracut_moduledir}
tee ${dracut_moduledir}/module-setup.sh <<'_EOS_'
#!/bin/bash
check() {
  require_binaries xenstore-read || return 1
  return 0
}

depends() {
  return 0
}
install() {
  inst_multiple xenstore-read
  inst_multiple ${udevdir}/%{name}-tools-domU.sh
  inst_rules 60-persistent-xvd.rules
}
_EOS_
#
udev_programdir=$RPM_BUILD_ROOT/usr/lib/udev
mkdir -p ${udev_programdir}
tee ${udev_programdir}/%{name}-tools-domU.sh <<'_EOS_'
#!/bin/bash
set -e
devpath=
devtype=
dev=
while test "$#" -gt 0
do
  : "$1"
  case "$1" in
    --devpath) devpath=$2 ; shift ;;
    --devtype) devtype=$2 ; shift ;;
    *) echo "$0: Unknown option $1" >&2 ; exit 1 ;;
  esac
  shift
done
test -n "${devpath}" || exit 1
test -n "${devtype}" || exit 1
cd "/sys/${devpath}"
case "${devtype}" in
  partition) cd .. ;;
esac
cd -P device
d="${PWD##*/}"
d="${d/-/\/}"
backend="`xenstore-read device/${d}/backend`"
dev="`xenstore-read \"${backend}\"/dev`"
test -n "${dev}" && echo "VBD_HD_SYMLINK=${dev}"
_EOS_
chmod 755 ${udev_programdir}/*.sh
%endif

# EFI
%if %{?with_dom0_support}0
install_xen()
{
    local ext=""
    find $RPM_BUILD_ROOT/boot -ls
    if [ -n "$1" ]; then
        ext="-$1"
        mv $RPM_BUILD_ROOT/boot/xen-syms-${XEN_FULLVERSION} \
           $RPM_BUILD_ROOT/boot/xen-syms${ext}-${XEN_FULLVERSION}
        mv $RPM_BUILD_ROOT/boot/xen-${XEN_FULLVERSION}%{xen_install_suffix} \
           $RPM_BUILD_ROOT/boot/xen${ext}-${XEN_FULLVERSION}%{xen_install_suffix}
        if test -d $RPM_BUILD_ROOT%{_libdir}/efi; then
            mv $RPM_BUILD_ROOT%{_libdir}/efi/xen-${XEN_FULLVERSION}.efi $RPM_BUILD_ROOT%{_libdir}/efi/xen${ext}-${XEN_FULLVERSION}.efi
            ln -sf xen${ext}-${XEN_FULLVERSION}.efi $RPM_BUILD_ROOT%{_libdir}/efi/xen${ext}-$XEN_VERSION.$XEN_SUBVERSION.efi
            ln -sf xen${ext}-${XEN_FULLVERSION}.efi $RPM_BUILD_ROOT%{_libdir}/efi/xen${ext}-$XEN_VERSION.efi
            ln -sf xen${ext}-${XEN_FULLVERSION}.efi $RPM_BUILD_ROOT%{_libdir}/efi/xen${ext}.efi
        fi
    fi
    rm $RPM_BUILD_ROOT/boot/xen-$XEN_VERSION.$XEN_SUBVERSION%{xen_install_suffix}
    rm $RPM_BUILD_ROOT/boot/xen-$XEN_VERSION%{xen_install_suffix}
    rm $RPM_BUILD_ROOT/boot/xen%{xen_install_suffix}
    # Do not link to links; grub cannot follow.
    ln -s xen${ext}-${XEN_FULLVERSION}%{xen_install_suffix} $RPM_BUILD_ROOT/boot/xen${ext}-$XEN_VERSION.$XEN_SUBVERSION%{xen_install_suffix}
    ln -s xen${ext}-${XEN_FULLVERSION}%{xen_install_suffix} $RPM_BUILD_ROOT/boot/xen${ext}-$XEN_VERSION%{xen_install_suffix}
    ln -s xen${ext}-${XEN_FULLVERSION}%{xen_install_suffix} $RPM_BUILD_ROOT/boot/xen${ext}%{xen_install_suffix}
    if [ ! $ext ]; then
       ln -sf xen-syms${ext}-${XEN_FULLVERSION} $RPM_BUILD_ROOT/boot/xen-syms${ext}
    fi
    find $RPM_BUILD_ROOT/boot -ls
}
CC=gcc
%if %{?with_gcc47}0
CC=gcc-4.7
%endif
%if %{?with_gcc48}0
CC=gcc-4.8
%endif
export BRP_PESIGN_FILES="*.ko *.efi /lib/firmware"
%if %{with xen_debug}
make -C xen install debug=y crash_debug=y DEBUG_DIR=/boot DESTDIR=$RPM_BUILD_ROOT CC=$CC %{?_smp_mflags}
install_xen dbg
make -C xen clean
%endif
make -C xen install debug=n crash_debug=n DEBUG_DIR=/boot DESTDIR=$RPM_BUILD_ROOT CC=$CC %{?_smp_mflags}
install_xen
make -C xen clean
echo > xen.files.txt
# EFI depends on gcc47
if test -d $RPM_BUILD_ROOT%{_libdir}/efi
then
	echo %{_libdir}/efi >> xen.files.txt
fi
%endif

# PV driver modules
%if %{?with_kmp}0
export INSTALL_MOD_PATH=$RPM_BUILD_ROOT
export INSTALL_MOD_DIR=updates
for flavor in %flavors_to_build; do
    make -C /usr/src/linux-obj/%_target_cpu/$flavor modules_install \
        M=$PWD/obj/$flavor
done
%endif

# On x86_64, qemu-xen was installed as /usr/lib/xen/bin/qemu-system-i386
# and advertised as the <emulator> in libvirt capabilities. Tool such as
# virt-install include <emulator> in domXML they produce, so we need to
# preserve the path. For x86_64, create a simple wrapper that invokes
# /usr/bin/qemu-system-i386
# Using qemu-system-x86_64 will result in an incompatible VM
%ifarch x86_64
cat > $RPM_BUILD_ROOT/usr/lib/xen/bin/qemu-system-i386 << 'EOF'
#!/bin/sh

exec %{_bindir}/qemu-system-i386 "$@"
EOF
chmod 0755 $RPM_BUILD_ROOT/usr/lib/xen/bin/qemu-system-i386
%endif

# Stubdom
%if %{?with_dom0_support}0
# Docs
mkdir -p $RPM_BUILD_ROOT/%{_defaultdocdir}/xen/misc
for name in COPYING %SOURCE10 %SOURCE11 %SOURCE12; do
    install -m 644 $name $RPM_BUILD_ROOT/%{_defaultdocdir}/xen/
done
for name in vtpm.txt crashdb.txt \
    xenpaging.txt xl-disk-configuration.txt pci-device-reservations.txt \
    xl-network-configuration.markdown xl-numa-placement.markdown \
    xen-command-line.markdown xenstore-paths.markdown; do
    install -m 644 docs/misc/$name $RPM_BUILD_ROOT/%{_defaultdocdir}/xen/misc/
done

mkdir -p $RPM_BUILD_ROOT/etc/modprobe.d
install -m644 %SOURCE26 $RPM_BUILD_ROOT/etc/modprobe.d/xen_loop.conf

# xen-utils
make -C tools/xen-utils-0.1 install DESTDIR=$RPM_BUILD_ROOT XEN_INTREE_BUILD=yes XEN_ROOT=$PWD
install -m755 %SOURCE37 $RPM_BUILD_ROOT/usr/sbin/xen2libvirt

# Example config
mkdir -p $RPM_BUILD_ROOT/etc/xen/{vm,examples,scripts}
mv $RPM_BUILD_ROOT/etc/xen/xlexample* $RPM_BUILD_ROOT/etc/xen/examples
rm -f $RPM_BUILD_ROOT/etc/xen/examples/*nbd
install -m644 tools/xentrace/formats $RPM_BUILD_ROOT/etc/xen/examples/xentrace_formats.txt

# Scripts
rm -f $RPM_BUILD_ROOT/etc/xen/scripts/block-*nbd
install -m755 %SOURCE21 %SOURCE22 %SOURCE23 %SOURCE29 $RPM_BUILD_ROOT/etc/xen/scripts/

# Xen API remote authentication files
install -d $RPM_BUILD_ROOT/etc/pam.d
install -m644 %SOURCE30 $RPM_BUILD_ROOT/etc/pam.d/xen-api
install -m644 %SOURCE31 $RPM_BUILD_ROOT/etc/xen/

# Logrotate
install -m644 -D %SOURCE15 $RPM_BUILD_ROOT/etc/logrotate.d/xen

# Directories
mkdir -p $RPM_BUILD_ROOT/var/lib/xenstored
mkdir -p $RPM_BUILD_ROOT/var/lib/xen/images
mkdir -p $RPM_BUILD_ROOT/var/lib/xen/jobs
mkdir -p $RPM_BUILD_ROOT/var/lib/xen/save
mkdir -p $RPM_BUILD_ROOT/var/lib/xen/dump
mkdir -p $RPM_BUILD_ROOT/var/log/xen
mkdir -p $RPM_BUILD_ROOT/var/log/xen/console
ln -s /var/lib/xen/images $RPM_BUILD_ROOT/etc/xen/images

# Bootloader
install -m755 %SOURCE36 $RPM_BUILD_ROOT/%{_libdir}/python%{pyver}/site-packages

# Systemd
%if %{?with_systemd}0
%if %{?include_systemd_preset}0
mkdir -vp $RPM_BUILD_ROOT%_presetdir
cat > $RPM_BUILD_ROOT%_presetdir/00-%{name}.preset <<EOF
enable xencommons.service
EOF
%endif
cp -bavL %{S:41} $RPM_BUILD_ROOT%{_unitdir}
bn=`basename %{S:42}`
cp -bavL %{S:42} $RPM_BUILD_ROOT%{_unitdir}/${bn}
mods="`
for conf in $(ls $RPM_BUILD_ROOT%{with_systemd_modules_load}/*.conf)
do
	grep -v ^# $conf
	echo -n > $conf
done
`"
for mod in $mods
do
	echo "ExecStart=-/usr/bin/env modprobe $mod" >> $RPM_BUILD_ROOT%{_unitdir}/${bn}
done
rm -rfv $RPM_BUILD_ROOT%{_initddir}
%else
# Init scripts
mkdir -p $RPM_BUILD_ROOT%{_initddir}
install %SOURCE34 $RPM_BUILD_ROOT%{_initddir}/pciback
ln -s %{_initddir}/pciback $RPM_BUILD_ROOT/usr/sbin/rcpciback
ln -s %{_initddir}/xendomains $RPM_BUILD_ROOT/usr/sbin/rcxendomains
%endif
install %SOURCE35 $RPM_BUILD_ROOT/var/adm/fillup-templates/sysconfig.pciback

# Clean up unpackaged files
find $RPM_BUILD_ROOT \( \
	-name .deps -o \
	-name README.blktap -o \
	-name README.xenmon -o \
	-name target-x86_64.conf -o \
	-name xen-mfndump -o \
	-name qcow-create -o \
	-name img2qcow -o \
	-name qcow2raw -o \
	-name qemu-bridge-helper -o \
	-name qemu-img-xen -o \
	-name qemu-nbd-xen -o \
	-name palcode-clipper -o \
	-name "*.dtb" -o \
	-name "openbios-*" -o \
	-name "petalogix*" -o \
	-name "ppc*" -o \
	-name "s390*" -o \
	-name "slof*" -o \
	-name "spapr*" -o \
	-name "*.egg-info" \) \
	-print -delete
# Wipe empty directories
if find $RPM_BUILD_ROOT/usr -type d -print0 | xargs -0n1 rmdir -p 2>/dev/null
then
	:
fi

# Create symlinks for keymaps
%fdupes -s $RPM_BUILD_ROOT/%{_datadir}

%else
# !with_dom0_support

# 32 bit hypervisor no longer supported.  Remove dom0 tools.
rm -rf $RPM_BUILD_ROOT/%{_datadir}/doc
rm -rf $RPM_BUILD_ROOT/%{_datadir}/man
rm -rf $RPM_BUILD_ROOT/%{_libdir}/xen
rm -rf $RPM_BUILD_ROOT/%{_libdir}/python*
rm -rf $RPM_BUILD_ROOT/%{_libdir}/ocaml*
rm -rf $RPM_BUILD_ROOT%{_unitdir}
rm -rf $RPM_BUILD_ROOT%{with_systemd_modules_load}
rm -rf $RPM_BUILD_ROOT/usr/sbin
rm -rf $RPM_BUILD_ROOT/etc/xen
rm -rf $RPM_BUILD_ROOT/var
rm -f  $RPM_BUILD_ROOT/%{_sysconfdir}/bash_completion.d/xl.sh
rm -f  $RPM_BUILD_ROOT/%{_sysconfdir}/init.d/xen*
rm -f  $RPM_BUILD_ROOT/%{_bindir}/*store*
rm -f  $RPM_BUILD_ROOT/%{_bindir}/*trace*
rm -f  $RPM_BUILD_ROOT/%{_bindir}/xenalyze*
rm -f  $RPM_BUILD_ROOT/%{_bindir}/xenco*
rm -f  $RPM_BUILD_ROOT/%{_bindir}/xen-cpuid
rm -f  $RPM_BUILD_ROOT/%{_bindir}/pygrub
rm -f  $RPM_BUILD_ROOT/%{_bindir}/remus
rm -f  $RPM_BUILD_ROOT/usr/etc/qemu/target-x86_64.conf
rm -f  $RPM_BUILD_ROOT/usr/libexec/qemu-bridge-helper
%endif

%if %{?with_dom0_support}0

%files -f xen.files.txt
%defattr(-,root,root)
/boot/*

%endif

%files libs
%defattr(-,root,root)
%{_libdir}/fs/
%{_libdir}/*.so.*

%if %{?with_dom0_support}0

%files tools
%defattr(-,root,root)
%ifarch %ix86 x86_64
/usr/bin/xenalyze
%endif
/usr/bin/xencons
/usr/bin/xenstore*
/usr/bin/pygrub
#%if %{?with_qemu_traditional}0
#/usr/bin/tapdisk-ioemu
#%endif
/usr/bin/xencov_split
/usr/bin/xentrace_format
%ifarch x86_64
/usr/bin/xen-cpuid
%endif
/usr/sbin/tap*
/usr/sbin/xenbaked
/usr/sbin/xenconsoled
/usr/sbin/xencov
/usr/sbin/xenlockprof
/usr/sbin/xenmon.py
/usr/sbin/xenperf
/usr/sbin/xenpm
/usr/sbin/xenpmd
/usr/sbin/xen-ringwatch
/usr/sbin/xenstored
/usr/sbin/xen-tmem-list-parse
/usr/sbin/xentop
/usr/sbin/xentrace
/usr/sbin/xentrace_setsize
/usr/sbin/xentrace_setmask
/usr/sbin/xenwatchdogd
/usr/sbin/gtracestat
/usr/sbin/gtraceview
/usr/sbin/lock-util
/usr/sbin/td-util
/usr/sbin/vhd-update
/usr/sbin/vhd-util
/usr/sbin/flask-get-bool
/usr/sbin/flask-getenforce
/usr/sbin/flask-label-pci
/usr/sbin/flask-loadpolicy
/usr/sbin/flask-set-bool
/usr/sbin/flask-setenforce
%if %{?with_gdbsx}0
/usr/sbin/gdbsx
%endif
/usr/sbin/xl
/usr/sbin/xen2libvirt
%ifarch %ix86 x86_64
/usr/sbin/xen-hptool
/usr/sbin/xen-hvmcrash
/usr/sbin/xen-hvmctx
/usr/sbin/xen-lowmemd
/usr/sbin/kdd
%endif
/usr/sbin/xen-list
/usr/sbin/xen-destroy
/usr/sbin/xen-bugtool
/usr/sbin/xen-livepatch
%dir %attr(700,root,root) /etc/xen
%dir /etc/xen/scripts
%if %{?with_qemu_traditional}0
#/usr/sbin/blktapctrl
#/etc/xen/scripts/blktap
/etc/xen/scripts/qemu-ifup
%endif
/etc/xen/scripts/block*
/etc/xen/scripts/external-device-migrate
/etc/xen/scripts/hotplugpath.sh
/etc/xen/scripts/locking.sh
/etc/xen/scripts/logging.sh
/etc/xen/scripts/vif2
/etc/xen/scripts/vif-*
/etc/xen/scripts/vscsi
/etc/xen/scripts/xen-hotplug-*
/etc/xen/scripts/xen-network-common.sh
/etc/xen/scripts/xen-script-common.sh
/etc/xen/scripts/colo-proxy-setup
%{_libexecdir}/xen
%exclude %{_libexecdir}/%{name}-tools-domU
/var/adm/fillup-templates/sysconfig.pciback
/var/adm/fillup-templates/sysconfig.xencommons
/var/adm/fillup-templates/sysconfig.xendomains
%dir /var/lib/xen
%dir %attr(700,root,root) /var/lib/xen/images
%dir %attr(700,root,root) /var/lib/xen/save
%dir %attr(700,root,root) /var/lib/xen/dump
%ifarch %ix86 x86_64
%dir %attr(700,root,root) /var/lib/xen/xenpaging
%endif
%dir /var/lib/xenstored
%dir /var/log/xen
%dir /var/log/xen/console
%config /etc/logrotate.d/xen
/etc/xen/auto
%config /etc/xen/examples
/etc/xen/images
%config /etc/xen/cpupool
/etc/xen/README*
%config /etc/xen/vm
%config(noreplace) /etc/xen/xenapiusers
%config(noreplace) /etc/xen/xl.conf
%config /etc/pam.d/xen-api
%config /etc/modprobe.d/xen_loop.conf
%if %{?with_systemd}0
%config %{_unitdir}
%exclude %{_unitdir}/%{name}-vcpu-watch.service
%config %{with_systemd_modules_load}
%if %{?include_systemd_preset}0
%config %_presetdir
%endif
%else
/usr/sbin/rcpciback
/usr/sbin/rcxendomains
%config %{_initddir}/*
%endif
%dir /etc/modprobe.d
/etc/bash_completion.d/xl.sh
%if %{?with_qemu_traditional}0
%dir %{_datadir}/xen
%dir %{_datadir}/xen/qemu
%{_datadir}/xen/qemu/*
%endif
%dir %{_libdir}/python%{pyver}/site-packages/grub
%dir %{_libdir}/python%{pyver}/site-packages/xen
%dir %{_libdir}/python%{pyver}/site-packages/xen/lowlevel
%dir %{_libdir}/python%{pyver}/site-packages/xen/migration
%{_libdir}/python%{pyver}/site-packages/grub/*
%{_libdir}/python%{pyver}/site-packages/xen/__init__*
%{_libdir}/python%{pyver}/site-packages/xen/lowlevel/*
%{_libdir}/python%{pyver}/site-packages/xen/migration/*
%{_libdir}/python%{pyver}/site-packages/fsimage.so
%{_libdir}/python%{pyver}/site-packages/xnloader.py
%dir %{_defaultdocdir}/xen
%{_defaultdocdir}/xen/COPYING
%{_defaultdocdir}/xen/README.SUSE
%{_defaultdocdir}/xen/boot.local.xenU
%{_defaultdocdir}/xen/boot.xen
%{_defaultdocdir}/xen/misc
%exclude %{_defaultdocdir}/xen/misc/xenpaging.txt
%exclude %{_defaultdocdir}/xen/misc/crashdb.txt
%exclude %{_defaultdocdir}/xen/misc/xl-disk-configuration.txt
%exclude %{_defaultdocdir}/xen/misc/pci-device-reservations.txt
%exclude %{_defaultdocdir}/xen/misc/vtpm.txt
%{_mandir}/man1/xentop.1.gz
%{_mandir}/man1/xentrace_format.1.gz
%{_mandir}/man1/xl.1.gz
%{_mandir}/man1/xenstore-chmod.1.gz
%{_mandir}/man1/xenstore-ls.1.gz
%{_mandir}/man1/xenstore.1.gz
%{_mandir}/man5/xl.cfg.5.gz
%{_mandir}/man5/xl.conf.5.gz
%{_mandir}/man5/xlcpupool.cfg.5.gz
%{_mandir}/man8/*.8.gz
%{_mandir}/man1/xen-list.1.gz

%if %{with xen_oxenstored}
/usr/sbin/oxenstored
/etc/xen/oxenstored.conf
%dir %{_libdir}/ocaml
%dir %{_libdir}/ocaml/xenbus
%dir %{_libdir}/ocaml/xenctrl
%dir %{_libdir}/ocaml/xeneventchn
%dir %{_libdir}/ocaml/xenlight
%dir %{_libdir}/ocaml/xenmmap
%dir %{_libdir}/ocaml/xenstore
%dir %{_libdir}/ocaml/xentoollog
%{_libdir}/ocaml/xenbus/META
%{_libdir}/ocaml/xenbus/*.so
%{_libdir}/ocaml/xenbus/*.cma
%{_libdir}/ocaml/xenbus/*.cmi
%{_libdir}/ocaml/xenbus/*.cmo
%{_libdir}/ocaml/xenctrl/META
%{_libdir}/ocaml/xenctrl/*.so
%{_libdir}/ocaml/xenctrl/*.cma
%{_libdir}/ocaml/xenctrl/*.cmi
%{_libdir}/ocaml/xeneventchn/META
%{_libdir}/ocaml/xeneventchn/*.so
%{_libdir}/ocaml/xeneventchn/*.cma
%{_libdir}/ocaml/xeneventchn/*.cmi
%{_libdir}/ocaml/xenlight/META
%{_libdir}/ocaml/xenlight/*.so
%{_libdir}/ocaml/xenlight/*.cma
%{_libdir}/ocaml/xenlight/*.cmi
%{_libdir}/ocaml/xenmmap/META
%{_libdir}/ocaml/xenmmap/*.so
%{_libdir}/ocaml/xenmmap/*.cma
%{_libdir}/ocaml/xenmmap/*.cmi
%{_libdir}/ocaml/xenstore/META
%{_libdir}/ocaml/xenstore/*.cma
%{_libdir}/ocaml/xenstore/*.cmi
%{_libdir}/ocaml/xenstore/*.cmo
%{_libdir}/ocaml/xentoollog/META
%{_libdir}/ocaml/xentoollog/*.so
%{_libdir}/ocaml/xentoollog/*.cma
%{_libdir}/ocaml/xentoollog/*.cmi
%endif

# with_dom0_support
%endif

%files tools-domU
%defattr(-,root,root)
%ifarch %ix86 x86_64
/usr/bin/xen-detect
%endif
/bin/domu-xenstore
/bin/xenstore-*
%if %{?with_systemd}0
%if %{?with_dom0_support}0
%config %{_unitdir}/%{name}-vcpu-watch.service
%endif
%{_libexecdir}/%{name}-tools-domU
/usr/lib/udev
/usr/lib/dracut
%endif

%files devel
%defattr(-,root,root)
%{_libdir}/*.a
%{_libdir}/*.so
%if %{?with_dom0_support}0
%if %{with xen_oxenstored}
%{_libdir}/ocaml/xenbus/*.a
%{_libdir}/ocaml/xenbus/*.cmx*
%{_libdir}/ocaml/xenctrl/*.a
%{_libdir}/ocaml/xenctrl/*.cmx*
%{_libdir}/ocaml/xeneventchn/*.a
%{_libdir}/ocaml/xeneventchn/*.cmx*
%{_libdir}/ocaml/xenlight/*.a
%{_libdir}/ocaml/xenlight/*.cmx*
%{_libdir}/ocaml/xenmmap/*.a
%{_libdir}/ocaml/xenmmap/*.cmx*
%{_libdir}/ocaml/xenstore/*.a
%{_libdir}/ocaml/xenstore/*.cmx*
%{_libdir}/ocaml/xentoollog/*.a
%{_libdir}/ocaml/xentoollog/*.cmx*
%endif
%endif
/usr/include/*
%{_datadir}/pkgconfig/xenlight.pc
%{_datadir}/pkgconfig/xlutil.pc

%if %{?with_dom0_support}0

%files doc-html
%defattr(-,root,root)
%dir %{_defaultdocdir}/xen
%{_defaultdocdir}/xen/html
%{_defaultdocdir}/xen/misc/xenpaging.txt
%{_defaultdocdir}/xen/misc/crashdb.txt
%{_defaultdocdir}/xen/misc/xl-disk-configuration.txt
%{_defaultdocdir}/xen/misc/pci-device-reservations.txt
%{_defaultdocdir}/xen/misc/vtpm.txt

%post
if [ -x /sbin/update-bootloader ]; then
    /sbin/update-bootloader --refresh; exit 0
fi

%pre tools
%if %{?with_systemd}0
%service_add_pre xencommons.service
%service_add_pre xendomains.service
%endif

%post tools
xen_tools_first_arg=$1
%if %{?with_systemd}0
%{fillup_only -n xencommons xencommons}
%{fillup_only -n xendomains xendomains}
%service_add_post xencommons.service
%service_add_post xendomains.service
%else
%{fillup_only -n pciback}
%{fillup_and_insserv -y -n xencommons xencommons}
%{fillup_and_insserv -i -y -n xendomains xendomains}
%endif

if [ -f /usr/bin/qemu-img ]; then
    if [ -f /usr/bin/qemu-img-xen ]; then
        rm /usr/bin/qemu-img-xen
    fi
    rm -f %{_libexecdir}/xen/bin/qemu-img-xen
    ln -s /usr/bin/qemu-img %{_libexecdir}/xen/bin/qemu-img-xen
fi
if [ -f /usr/bin/qemu-nbd ]; then
    if [ -f /usr/bin/qemu-nbd-xen ]; then
        rm /usr/bin/qemu-nbd-xen
    fi
    rm -f %{_libexecdir}/xen/bin/qemu-nbd-xen
    ln -s /usr/bin/qemu-nbd %{_libexecdir}/xen/bin/qemu-nbd-xen
fi
if [ -f /usr/bin/qemu-io ]; then
    rm -f %{_libexecdir}/xen/bin/qemu-io-xen
    ln -s /usr/bin/qemu-io %{_libexecdir}/xen/bin/qemu-io-xen
fi
if [ -f /etc/default/grub ] && ! (/usr/bin/grep GRUB_CMDLINE_XEN /etc/default/grub >/dev/null); then
    echo '# Xen boot parameters for all Xen boots' >> /etc/default/grub
    echo 'GRUB_CMDLINE_XEN=""' >> /etc/default/grub
    echo '# Xen boot parameters for non-recovery Xen boots (in addition to GRUB_CMDLINE_XEN)' >> /etc/default/grub
    echo 'GRUB_CMDLINE_XEN_DEFAULT=""' >> /etc/default/grub
fi

%preun tools
%if %{?with_systemd}0
%service_del_preun xencommons.service
%service_del_preun xendomains.service
%else
%{stop_on_removal xendomains xencommons}
%endif

%postun tools
export DISABLE_RESTART_ON_UPDATE=yes
%if %{?with_systemd}0
%service_del_postun xencommons.service
%service_del_postun xendomains.service
%else
%{insserv_cleanup}
%endif

%endif

%post libs -p /sbin/ldconfig

%postun libs -p /sbin/ldconfig

%changelog
openSUSE Build Service is sponsored by