File xen.spec of Package xen

# norootforbuild
%define python_basename_xen   python3
%define python_basename_ovmf  python3
%define python_basename_qemuu python3
%define _lto_cflags %nil
%if ! %{defined _fillupdir}
  %define _fillupdir /var/adm/fillup-templates
%endif
Name:           xen
Version:        0
Release:        0
ExclusiveArch:  %ix86 x86_64 %arm aarch64
#
%define with_hypervisor 0
#
%define xen_install_suffix %nil
%ifarch x86_64
%define xen_install_suffix .gz
%endif
#
%ifarch x86_64
%define with_hypervisor 1
%else
%endif
#
%bcond_without fdupes
%bcond_without xen_docs
%bcond_without xen_qemu_trad
%bcond_without xen_ovmf
%bcond_without xen_stubdom
%bcond_without xen_systemd
Requires(pre): %fillup_prereq
%if %{without xen_systemd}
Requires(pre): %insserv_prereq
%else
%systemd_requires
%endif
#
BuildRequires: xen-buildreq-qemu-xen
BuildRequires: xen-buildreq-tools-4.18
%if %{with xen_docs}
BuildRequires: xen-buildreq-docs
%endif
%if %{with xen_ovmf}
BuildRequires: xen-buildreq-ovmf
%endif
%if %{with xen_stubdom}
BuildRequires: xen-buildreq-stubdom
%endif
%if %{with xen_qemu_trad}
BuildRequires: xen-buildreq-qemu-xen-trad
%endif

License:        GPL-2.0+
Group:          System/Kernel
Summary:        Xen Hypervisor
Source1000:     stubdom.tar.xz
##
Url:            https://www.xenproject.org/
%define xen_revision_full 077419f04a3125c58dcf9724c954f98d1e927392
%define xen_revision_short 077419f04a
%define xen_date_unix 1754320848
%define xen_date_commit 2025-08-04 17:20:48 +0200

%define qemu_xen_trad_revision_full 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764
%define qemu_xen_trad_revision_short 3d273dd0
%define qemu_xen_trad_date_unix 1597762479
%define qemu_xen_trad_date_commit 2020-08-18 15:54:39 +0100

%define qemu_xen_revision_full bdf719c4c535cf14ec4fe8e9cb7a798a5a73fb23
%define qemu_xen_revision_short bdf719c4c5
%define qemu_xen_date_unix 1728466812
%define qemu_xen_date_commit 2024-10-09 11:40:12 +0200

%define keycodemapdb_revision_full f5772a62ec52591ff6870b7e8ef32482371f22c6
%define keycodemapdb_revision_short f5772a6
%define keycodemapdb_date_unix 1677604609
%define keycodemapdb_date_commit 2023-02-28 18:16:49 +0100

%define btestfloat3_revision_full 40619cbb3bf32872df8c53cc457039229428a263
%define btestfloat3_revision_short 40619cb
%define btestfloat3_date_unix 1676629741
%define btestfloat3_date_commit 2023-02-17 10:29:01 +0000

%define seabios_revision_full a6ed6b701f0a57db0569ab98b0661c12a6ec3ff8
%define seabios_revision_short a6ed6b70
%define seabios_date_unix 1699879799
%define seabios_date_commit 2023-11-13 13:49:59 +0100

%define minios_revision_full a400dd51706867565ed1382b23d3475bb30668c2
%define minios_revision_short a400dd5
%define minios_date_unix 1730203644
%define minios_date_commit 2024-10-29 12:07:24 +0000

%define ovmf_revision_full ba91d0292e593df8528b66f99c1b0b14fadc8e16
%define ovmf_revision_short ba91d0292e
%define ovmf_date_unix 1684933194
%define ovmf_date_commit 2023-05-24 12:59:54 +0000

%define ipxe_revision_full 4262328c13a3ec085eac7c6c58fbed27d2466a0d
%define ipxe_revision_short 4262328c
%define ipxe_date_unix 1750952038
%define ipxe_date_commit 2025-06-26 16:33:58 +0100

%if %suse_version > 1110
BuildRequires: python(abi) > 3.0
%endif
%define qemu_xen_trad_version 3d273dd05e51e5a1ffba3d98c7437ee84e8f8764
%define qemu_xen_version bdf719c4c535cf14ec4fe8e9cb7a798a5a73fb23
%define keycodemapdb_version f5772a62ec52591ff6870b7e8ef32482371f22c6
%define btestfloat3_version 40619cbb3bf32872df8c53cc457039229428a263
%define bsoftfloat3_version b64af41c3276f97f0e181920400ee056b9c88037
%define meson_version 3a9b285a55b91b53b2acda987192274352ecb5be
%define seabios_version a6ed6b701f0a57db0569ab98b0661c12a6ec3ff8
%define minios_version a400dd51706867565ed1382b23d3475bb30668c2
Patch1737362431: ovmf.e063f8b8a53861043b9872cc35b08a3dc03b0942.patch
Patch1617269159: ovmf.Disable-brotli.patch
Patch1687260117: ovmf.OVMF_PYTHON_COMMAND.patch
Patch1687262739: ovmf.MemoryStateToGhcbOp.patch
Patch1687263779: ovmf.ShellCommandRunDisconnect.patch
Patch1687284143: ovmf.SetOrClearSharedBit.patch
Patch1687286330: ovmf.AmdSevDxeEntryPoint.patch
Patch1687289375: ovmf.CoreOpenProtocol.patch
%define ovmf_version ba91d0292e593df8528b66f99c1b0b14fadc8e16
%define openssl_version 830bf8e1e4749ad65c51b6a1d0d769ae689404ba
Patch1484818598: ipxe.stable-build-id.patch
%define ipxe_version 4262328c13a3ec085eac7c6c58fbed27d2466a0d
BuildRoot:      %_tmppath/%name-%version-build

%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)

%package libs
Summary:        Xen Virtualization: Libraries
Group:          System/Kernel
%if 0%{with_hypervisor}
Requires:       %name = %version-%release
%endif

%description libs

%package tools
Summary:        Xen Virtualization: Control tools for domain 0
Group:          System/Kernel
Requires:       %name-libs = %version-%release
Requires:       iproute2
Provides:       xen-doc-html = %version-%release
Obsoletes:      xen-doc-html

%description tools

%ifarch  %ix86 x86_64
%package tools-domU
Summary:        Xen Virtualization: Control tools for domain U
Group:          System/Kernel
Requires:       %name-libs = %version-%release
Conflicts:      %name-tools

%description tools-domU
%endif

%package devel
Summary:        Xen Virtualization: Headers and libraries for development
Group:          System/Kernel
Requires:       %name-libs = %version-%release
Requires:       pkgconfig(uuid)

%description devel

%prep
rm -rf %_builddir/%name-%version
mv %_sourcedir/%name-%version %_builddir/%name-%version
%setup -c -T -D
pushd '.'
popd

rm -rf './tools/qemu-xen-traditional-dir-remote'
mkdir -vp './tools'
mv -v '%_sourcedir/qemu_xen_trad-%qemu_xen_trad_version' './tools/qemu-xen-traditional-dir-remote'

rm -rf './tools/qemu-xen-dir-remote'
mkdir -vp './tools'
mv -v '%_sourcedir/qemu_xen-%qemu_xen_version' './tools/qemu-xen-dir-remote'

rm -rf './tools/qemu-xen-dir-remote/ui/keycodemapdb'
mkdir -vp './tools/qemu-xen-dir-remote/ui'
mv -v '%_sourcedir/keycodemapdb-%keycodemapdb_version' './tools/qemu-xen-dir-remote/ui/keycodemapdb'

rm -rf './tools/qemu-xen-dir-remote/tests/fp/berkeley-testfloat-3'
mkdir -vp './tools/qemu-xen-dir-remote/tests/fp'
mv -v '%_sourcedir/btestfloat3-%btestfloat3_version' './tools/qemu-xen-dir-remote/tests/fp/berkeley-testfloat-3'

rm -rf './tools/qemu-xen-dir-remote/tests/fp/berkeley-softfloat-3'
mkdir -vp './tools/qemu-xen-dir-remote/tests/fp'
mv -v '%_sourcedir/bsoftfloat3-%bsoftfloat3_version' './tools/qemu-xen-dir-remote/tests/fp/berkeley-softfloat-3'

rm -rf './tools/qemu-xen-dir-remote/meson'
mkdir -vp './tools/qemu-xen-dir-remote'
mv -v '%_sourcedir/meson-%meson_version' './tools/qemu-xen-dir-remote/meson'

rm -rf './tools/firmware/seabios-dir-remote'
mkdir -vp './tools/firmware'
mv -v '%_sourcedir/seabios-%seabios_version' './tools/firmware/seabios-dir-remote'
pushd './tools/firmware/seabios-dir-remote'
popd

rm -rf './extras/mini-os-remote'
mkdir -vp './extras'
mv -v '%_sourcedir/minios-%minios_version' './extras/mini-os-remote'

rm -rf './tools/firmware/ovmf-dir-remote'
mkdir -vp './tools/firmware'
mv -v '%_sourcedir/ovmf-%ovmf_version' './tools/firmware/ovmf-dir-remote'
pushd './tools/firmware/ovmf-dir-remote'
%patch -P 1737362431 -p1
%patch -P 1617269159 -p1
%patch -P 1687260117 -p1
%patch -P 1687262739 -p1
%patch -P 1687263779 -p1
%patch -P 1687284143 -p1
%patch -P 1687286330 -p1
%patch -P 1687289375 -p1
popd

rm -rf './tools/firmware/ovmf-dir-remote/CryptoPkg/Library/OpensslLib/openssl'
mkdir -vp './tools/firmware/ovmf-dir-remote/CryptoPkg/Library/OpensslLib'
mv -v '%_sourcedir/openssl-%openssl_version' './tools/firmware/ovmf-dir-remote/CryptoPkg/Library/OpensslLib/openssl'

rm -rf './tools/firmware/etherboot/ipxe'
mkdir -vp './tools/firmware/etherboot'
mv -v '%_sourcedir/ipxe-%ipxe_version' './tools/firmware/etherboot/ipxe'
pushd './tools/firmware/etherboot/ipxe'
%patch -P 1484818598 -p1
popd

find . -path '*/subprojects/packagefiles' | while read
do
  if pushd "${REPLY}" 2>/dev/null
  then
    for prj in *
    do
      if pushd "${prj}" > /dev/null
      then
        for f in *
        do
          test -f "${f}" || continue
          test -d "../../${prj}/" || continue
          ln -vft "../../${prj}/" *
          break
        done
        popd > /dev/null
      fi
    done
    popd > /dev/null
  fi
done

%build
pushd './tools/firmware/ovmf-dir-remote'
mkdir -vp MdePkg/Library/MipiSysTLib/mipisyst/library/include
popd
python_basename_xen='%{python_basename_xen}'
python_basename_ovmf='%{python_basename_ovmf}'
python_basename_qemuu='%{python_basename_qemuu}'
%include %_datadir/xen-buildreq/build.txt

%install
%include %_datadir/xen-buildreq/install.txt

%clean
: %buildroot preserved

%if 0%{with_hypervisor}
%files -f xen.files.txt
%defattr(-,root,root)
/boot/*
%endif

%files libs
%defattr(-,root,root)
%_libdir/xenfsimage/
%_libdir/*.so.*

%files tools -f xen-tools.python.files.txt
%defattr(-,root,root)
%if %{with xen_docs}
%{_defaultdocdir}/%name/html
%endif
/usr/bin/xen[!-]*
/usr/bin/vchan-socket-proxy
%ifarch  %ix86 x86_64
/usr/bin/xen-cpuid
%endif
/usr/sbin/*
%_libexecdir/xen
%if %{with xen_docs}
%_mandir/man*/*.gz
%endif
%_fillupdir/*
%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 %attr(700,root,root) /etc/xen
%config /etc/xen/*
%dir /var/log/xen
%if %{with xen_systemd}
%config %_unitdir/*
%else
%if %{?with_rc_d}0
%config /etc/rc.d
%endif
%config %{_initddir}/*
%endif
%dir %{_defaultdocdir}/%name
%{_defaultdocdir}/%name/misc
%dir %_libdir/python*/site-packages/xen
%dir %_libdir/python*/site-packages/grub
%if %{with xen_qemu_trad}
%ifarch  %ix86 x86_64
%_datadir/xen
%endif
%endif
%_datadir/bash-completion
%_datadir/qemu-xen
%_libdir/python*/site-packages/*.so

%ifarch  %ix86 x86_64
%files tools-domU
%defattr(-,root,root)
/usr/bin/xen-detect
%endif

%files devel
%defattr(-,root,root)
%_libdir/*.a
%_libdir/*.so
/usr/include/*
%_libdir/pkgconfig/*

%include %_datadir/xen-buildreq/scriptlets.txt
openSUSE Build Service is sponsored by