_realname=qemu pkgbase=mingw-w64-${_realname} pkgname=( "${MINGW_PACKAGE_PREFIX}-qemu" "${MINGW_PACKAGE_PREFIX}-qemu-common" "${MINGW_PACKAGE_PREFIX}-qemu-guest-agent" "${MINGW_PACKAGE_PREFIX}-qemu-image-util" ) _base_ver="9.2.3" # QEMU Versioning of RC-SourcePackage and RC-Version differs # e.g. qemu-6.1.0-rc0.tar.xz contains 6.0.90, qemu-6.1.0-rc1.tar.xz contains 6.0.91 # Unset _rc_no to create Release-Build #_rc_no="3" _rc_base_ver="9.1.9${_rc_no}" _rc_file_ver="rc${_rc_no}" _tarname=$( [ -z "${_rc_no}" ] && echo ${_realname}-${_base_ver} || echo ${_realname}-${_base_ver}-${_rc_file_ver} ) pkgver=$( [ -z "${_rc_no}" ] && echo ${_base_ver} || echo ${_rc_base_ver} ) pkgrel=1 pkgdesc="QEMU - a generic and open source machine emulator and virtualizer (mingw-w64)" arch=('any') mingw_arch=('mingw64' 'ucrt64' 'clang64' 'clangarm64') license=('spdx:GPL-2.0-or-later AND LGPL-2.1-or-later AND BSD-2-Clause AND BSD-3-Clause AND MIT') url="https://qemu.org/" msys2_repository_url="https://gitlab.com/qemu-project/qemu" msys2_references=( 'archlinux: qemu' 'cpe: cpe:/a:qemu:qemu' ) makedepends=( "${MINGW_PACKAGE_PREFIX}-cc" "${MINGW_PACKAGE_PREFIX}-meson" "${MINGW_PACKAGE_PREFIX}-autotools" "${MINGW_PACKAGE_PREFIX}-ninja" "${MINGW_PACKAGE_PREFIX}-python" "${MINGW_PACKAGE_PREFIX}-python-sphinx" "${MINGW_PACKAGE_PREFIX}-python-sphinx_rtd_theme" "${MINGW_PACKAGE_PREFIX}-tools-git") case ${MSYSTEM} in CLANG*) # work around lack of windmc in llvm makedepends+=("binutils") ;; esac depends=( "${MINGW_PACKAGE_PREFIX}-angleproject" "${MINGW_PACKAGE_PREFIX}-capstone" "${MINGW_PACKAGE_PREFIX}-curl" "${MINGW_PACKAGE_PREFIX}-cyrus-sasl" "${MINGW_PACKAGE_PREFIX}-dtc" "${MINGW_PACKAGE_PREFIX}-expat" "${MINGW_PACKAGE_PREFIX}-fontconfig" "${MINGW_PACKAGE_PREFIX}-freetype" "${MINGW_PACKAGE_PREFIX}-fribidi" "${MINGW_PACKAGE_PREFIX}-gcc-libs" "${MINGW_PACKAGE_PREFIX}-gdk-pixbuf2" "${MINGW_PACKAGE_PREFIX}-gettext" "${MINGW_PACKAGE_PREFIX}-glib2" "${MINGW_PACKAGE_PREFIX}-gmp" "${MINGW_PACKAGE_PREFIX}-gnutls" "${MINGW_PACKAGE_PREFIX}-graphite2" "${MINGW_PACKAGE_PREFIX}-gst-plugins-base" "${MINGW_PACKAGE_PREFIX}-gstreamer" "${MINGW_PACKAGE_PREFIX}-gtk3" "${MINGW_PACKAGE_PREFIX}-harfbuzz" "${MINGW_PACKAGE_PREFIX}-jbigkit" "${MINGW_PACKAGE_PREFIX}-lerc" "${MINGW_PACKAGE_PREFIX}-libc++" "${MINGW_PACKAGE_PREFIX}-libdatrie" "${MINGW_PACKAGE_PREFIX}-libdeflate" "${MINGW_PACKAGE_PREFIX}-libepoxy" "${MINGW_PACKAGE_PREFIX}-libffi" "${MINGW_PACKAGE_PREFIX}-libiconv" "${MINGW_PACKAGE_PREFIX}-libidn2" "${MINGW_PACKAGE_PREFIX}-libjpeg-turbo" "${MINGW_PACKAGE_PREFIX}-libnfs" "${MINGW_PACKAGE_PREFIX}-libpng" "${MINGW_PACKAGE_PREFIX}-libpsl" "${MINGW_PACKAGE_PREFIX}-libslirp" "${MINGW_PACKAGE_PREFIX}-libssh" "${MINGW_PACKAGE_PREFIX}-libssh2" "${MINGW_PACKAGE_PREFIX}-libtasn1" "${MINGW_PACKAGE_PREFIX}-libthai" "${MINGW_PACKAGE_PREFIX}-libtiff" "${MINGW_PACKAGE_PREFIX}-libunistring" "${MINGW_PACKAGE_PREFIX}-libunwind" "${MINGW_PACKAGE_PREFIX}-libusb" "${MINGW_PACKAGE_PREFIX}-libwebp" "${MINGW_PACKAGE_PREFIX}-libwinpthread-git" "${MINGW_PACKAGE_PREFIX}-lz4" "${MINGW_PACKAGE_PREFIX}-lzo2" "${MINGW_PACKAGE_PREFIX}-nettle" "${MINGW_PACKAGE_PREFIX}-openssl" "${MINGW_PACKAGE_PREFIX}-opus" "${MINGW_PACKAGE_PREFIX}-orc" "${MINGW_PACKAGE_PREFIX}-p11-kit" "${MINGW_PACKAGE_PREFIX}-pango" "${MINGW_PACKAGE_PREFIX}-pixman" "${MINGW_PACKAGE_PREFIX}-SDL2" "${MINGW_PACKAGE_PREFIX}-SDL2_image" "${MINGW_PACKAGE_PREFIX}-snappy" "${MINGW_PACKAGE_PREFIX}-spice" "${MINGW_PACKAGE_PREFIX}-usbredir" $([[ ${MINGW_PACKAGE_PREFIX} == *-clang-* ]] || echo "${MINGW_PACKAGE_PREFIX}-virglrenderer") "${MINGW_PACKAGE_PREFIX}-xz" "${MINGW_PACKAGE_PREFIX}-zlib" "${MINGW_PACKAGE_PREFIX}-zstd" ) options=('!emptydirs') source=( "https://download.qemu.org/${_tarname}.tar.xz"{,.sig} 01-win32-remove-usage-of-attribute-gcc_struct.patch::https://gitlab.com/qemu-project/qemu/-/commit/8f5a4cfc7ed9e06e07fdd8e8fdf50ef3ea783f63.patch 02-plugins-enable-linking-with-clang-lld.patch::https://gitlab.com/qemu-project/qemu/-/commit/923710b6d5b21d9b3fcecc7e6719cfa5a53de268.patch msys2.readme.txt msys2.qemu-guest-agent.txt msys2.examples.tests.sh ) sha256sums=( 'baed494270c361bf69816acc84512e3efed71c7a23f76691642b80bc3de7693e' 'SKIP' '16056f047d838245bc8cc327dc2a73ab9b9ee851ffee7a62f7a16530ba21c0f3' '385f3fae53afa29b5d344bb6565f24833d22cf0a6d407a1efbd2cfb0e94c407e' '51625fd83c0a63729942d3dfc6d48be3491a700fe0f7cb8e88935b46081c9016' 'f2f9eeb31023d002f54637a9941ea0d8fae3c6f0a66c05c033857b305bd1470d' '1478e41f27a4646e14c2abca764d9fd2fd158a4a4cd6421e077fba101d4a74ea' ) validpgpkeys=('CEACC9E15534EBABB82D3FA03353C9CEF108B584') # Michael Roth <flukshun@gmail.com> # tar cannot create links, to keep build running, manual extraction is required noextract=(${_tarname}.tar.xz) apply_patch_with_msg() { for _patch in "$@" do msg2 "Applying ${_patch}" patch -Nbp1 -i "${srcdir}/${_patch}" done } prepare() { [[ -d "${srcdir}"/${_tarname} ]] && rm -rf "${srcdir}"/${_tarname} # tar cannot create links here, therefore hide the failure tar -xf "${srcdir}"/${_tarname}.tar.xz -C "${srcdir}" || true cd "${srcdir}"/${_realname}-${pkgver} apply_patch_with_msg \ ./01-win32-remove-usage-of-attribute-gcc_struct.patch \ ./02-plugins-enable-linking-with-clang-lld.patch } build() { mkdir -pv "${srcdir}"/build-${MSYSTEM} && cd "${srcdir}"/build-${MSYSTEM} # configure fails to create links, which can be ignored # qemu enables all features if possible, so keep it simple # For faster testing: #CONFIGURE_OPTS="--target-list=x86_64-softmmu" ../${_tarname}/configure $CONFIGURE_OPTS \ --prefix=${MINGW_PREFIX} \ --bindir=bin \ --datadir=share/qemu \ --localedir=share/locale \ --mandir=share/man \ --docdir=share/doc/qemu # Finally build make # TODO Remove widl-cmd as soon as qga-vss.tlb is generated by make cd qga/vss-win32 widl -I${MINGW_PREFIX}/include -L${MINGW_PREFIX}/include \ -t "${srcdir}"/${_tarname}/qga/vss-win32/qga-vss.idl -o qga-vss.tlb } check() { cd "${srcdir}"/build-${MSYSTEM} # Tests are not performed in CI # For local testing: perform, but do not fail make test || true } makeinstall() { cd "${srcdir}"/build-${MSYSTEM} # Install to "${pkgdir}" make DESTDIR="${pkgdir}" install # ${MINGW_PREFIX} was installed somewhere below "${pkgdir}", determine ... local P_INSTALL=$(find "${pkgdir}" -name "$(basename ${MINGW_PREFIX})" -type d) # Move directly to "${pkgdir}", if not already there [ -d "${pkgdir}"/${MINGW_PREFIX} ] || mv -v "$P_INSTALL" "${pkgdir}"/ # To enable usage relative paths for next operations cd "${pkgdir}"/${MINGW_PREFIX} # Move content to standard dirs in share/ mkdir -pv share/qemu/icons mv -v share/qemu/icons share/ mkdir -pv share/qemu/applications mv -v share/qemu/applications share/ } makeinstallpkg() { local _pkg=$1 makeinstall echo echo "Split installation into partitions" cd "${pkgdir}" # Start with all content in qemu partition local _qemu=qemu/${MINGW_PREFIX} mkdir -pv qemu mv -v ./${MINGW_PREFIX} qemu/ # Move to qemu-guest-agent partition local _qemu_ga=qemu-guest-agent/${MINGW_PREFIX} mkdir -pv ${_qemu_ga}/bin ${_qemu_ga}/share/man/man7 ${_qemu_ga}/share/man/man8 mv -v ${_qemu}/bin/qemu-ga.exe ${_qemu_ga}/bin/ mv -v ${_qemu}/share/man/man8/qemu-ga.8 ${_qemu_ga}/share/man/man8/ mv -v ${_qemu}/share/man/man7/qemu-ga-ref.7 ${_qemu_ga}/share/man/man7/ # Move to qemu-image-util partition local _qemu_img=qemu-image-util/${MINGW_PREFIX} mkdir -pv ${_qemu_img}/bin ${_qemu_img}/share/man/man1 mv -v ${_qemu}/bin/qemu-img.exe ${_qemu_img}/bin/ mv -v ${_qemu}/share/man/man1/qemu-img.1 ${_qemu_img}/share/man/man1/ # Move to qemu-common partition local _qemu_com=qemu-common/${MINGW_PREFIX} mkdir -pv ${_qemu_com}/share/doc mv -v ${_qemu}/share/doc/qemu ${_qemu_com}/share/doc/ # Select requested partition and remove other partitions echo echo "Select partition ${_pkg} for packaging" mv -v ${_pkg}/${MINGW_PREFIX} ./ rm -rf ${_qemu} ${_qemu_ga} ${_qemu_img} ${_qemu_com} cd ./${MINGW_PREFIX} } package_qemu() { # Split package depends depends+=( "${MINGW_PACKAGE_PREFIX}-qemu-common" "${MINGW_PACKAGE_PREFIX}-qemu-guest-agent" "${MINGW_PACKAGE_PREFIX}-qemu-image-util" ) optdepends=( "${MINGW_PACKAGE_PREFIX}-gtk-vnc: Contains gvncviewer. For connections to Qemu VNC server" "${MINGW_PACKAGE_PREFIX}-spice-gtk: Contains spicy. For connections to Qemu SPICE server" "${MINGW_PACKAGE_PREFIX}-virt-viewer: Contains remote-viewer. For connections to Qemu SPICE or VNC server" ) makeinstallpkg qemu # Fix firmware descriptors # see https://bugzilla.redhat.com/show_bug.cgi?id=1728652#c7 mkdir -pv share/qemu/firmware find share/qemu/firmware -type f -exec \ sed -i "s%\(\"filename\"\s*:\s*\"\).*edk2%\1${MINGW_PREFIX}/share/qemu/edk2%" {} \; # Install tcg plugins to lib/qemu/plugins mkdir -pv lib/qemu/plugins/test lib/qemu/plugins/contrib install -t lib/qemu/plugins/test "${srcdir}"/build-${MSYSTEM}/tests/tcg/plugins/*.dll install -t lib/qemu/plugins/contrib "${srcdir}"/build-${MSYSTEM}/contrib/plugins/*.dll } package_qemu-common() { depends=() makeinstallpkg qemu-common # Add all licenses found in qemu sources to share/licences/qemu/ mkdir -pv share/licenses/qemu tar -C "${srcdir}"/${_tarname} -c $( cd "${srcdir}"/${_tarname} && find -iname "*COPYING*" -or -iname "*LICENSE*" | grep -v "\s" | egrep -v "meson.(test|msi|doc)" | egrep -v "(license.c|relicense.pl|license.doctree|LicenseCheck)" ) | tar -C share/licenses/qemu -xv # Add msys2 docs install -v -Dm644 -t share/doc/qemu/ "${srcdir}"/msys2.readme.txt install -v -Dm644 -t share/doc/qemu/ "${srcdir}"/msys2.qemu-guest-agent.txt install -v -Dm755 -t share/doc/qemu/ "${srcdir}"/msys2.examples.tests.sh } package_qemu-guest-agent() { depends=( "${MINGW_PACKAGE_PREFIX}-gettext" "${MINGW_PACKAGE_PREFIX}-gcc-libs" "${MINGW_PACKAGE_PREFIX}-glib2" "${MINGW_PACKAGE_PREFIX}-libc++" "${MINGW_PACKAGE_PREFIX}-libiconv" "${MINGW_PACKAGE_PREFIX}-libunwind" "${MINGW_PACKAGE_PREFIX}-libwinpthread" ) # Split package depends depends+=( "${MINGW_PACKAGE_PREFIX}-qemu-common" ) makeinstallpkg qemu-guest-agent # Upstream doesn't install, but creates qga.msi which contains these install -v -Dm644 -t bin/ "${srcdir}"/build-${MSYSTEM}/qga/vss-win32/qga-vss.dll install -v -Dm644 -t bin/ "${srcdir}"/build-${MSYSTEM}/qga/vss-win32/qga-vss.tlb } package_qemu-image-util() { depends=( "${MINGW_PACKAGE_PREFIX}-brotli" "${MINGW_PACKAGE_PREFIX}-bzip2" "${MINGW_PACKAGE_PREFIX}-curl" "${MINGW_PACKAGE_PREFIX}-gcc-libs" "${MINGW_PACKAGE_PREFIX}-gettext" "${MINGW_PACKAGE_PREFIX}-glib2" "${MINGW_PACKAGE_PREFIX}-gmp" "${MINGW_PACKAGE_PREFIX}-gnutls" "${MINGW_PACKAGE_PREFIX}-libiconv" "${MINGW_PACKAGE_PREFIX}-libidn2" "${MINGW_PACKAGE_PREFIX}-libffi" "${MINGW_PACKAGE_PREFIX}-libnfs" "${MINGW_PACKAGE_PREFIX}-libpsl" "${MINGW_PACKAGE_PREFIX}-libssh" "${MINGW_PACKAGE_PREFIX}-libssh2" "${MINGW_PACKAGE_PREFIX}-libunistring" "${MINGW_PACKAGE_PREFIX}-libtasn1" "${MINGW_PACKAGE_PREFIX}-libwinpthread" "${MINGW_PACKAGE_PREFIX}-nettle" "${MINGW_PACKAGE_PREFIX}-nghttp2" "${MINGW_PACKAGE_PREFIX}-openssl" "${MINGW_PACKAGE_PREFIX}-p11-kit" "${MINGW_PACKAGE_PREFIX}-zlib" "${MINGW_PACKAGE_PREFIX}-zstd" ) # Split package depends depends+=( "${MINGW_PACKAGE_PREFIX}-qemu-common" ) makeinstallpkg qemu-image-util } # template start; name=mingw-w64-splitpkg-wrappers; version=1.0; # vim: set ft=bash : # generate wrappers for _name in "${pkgname[@]}"; do _short="package_${_name#${MINGW_PACKAGE_PREFIX}-}" _func="$(declare -f "${_short}")" eval "${_func/#${_short}/package_${_name}}" done # template end;