| _realname=qemu |
| pkgbase=mingw-w64-${_realname} |
| pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}" |
| _base_ver=6.0.0 |
| _rc= |
| pkgver=${_base_ver}${_rc//-/.} |
| pkgrel=3 |
| pkgdesc="QEMU - a generic and open source machine emulator and virtualizer (mingw-w64)" |
| arch=('any') |
| mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64') |
| license=('GPL2' 'LGPL2') |
| url="https://qemu.org/" |
| options=('!emptydirs') |
| # optional features which introduce many dependencies should be added to makedepends |
| # for activation and optdepends for information |
| makedepends=( |
| "${MINGW_PACKAGE_PREFIX}-gcc" |
| "${MINGW_PACKAGE_PREFIX}-ninja" |
| "${MINGW_PACKAGE_PREFIX}-python" |
| "${MINGW_PACKAGE_PREFIX}-python-sphinx" |
| "${MINGW_PACKAGE_PREFIX}-spice" |
| 'perl' 'bison' 'bsdtar') |
| depends=( |
| "${MINGW_PACKAGE_PREFIX}-capstone" |
| "${MINGW_PACKAGE_PREFIX}-curl" |
| "${MINGW_PACKAGE_PREFIX}-cyrus-sasl" |
| "${MINGW_PACKAGE_PREFIX}-glib2" |
| "${MINGW_PACKAGE_PREFIX}-gnutls" |
| "${MINGW_PACKAGE_PREFIX}-gtk3" |
| "${MINGW_PACKAGE_PREFIX}-libjpeg" |
| "${MINGW_PACKAGE_PREFIX}-libnfs" |
| "${MINGW_PACKAGE_PREFIX}-libpng" |
| "${MINGW_PACKAGE_PREFIX}-libslirp" |
| "${MINGW_PACKAGE_PREFIX}-libssh" |
| "${MINGW_PACKAGE_PREFIX}-libssp" |
| "${MINGW_PACKAGE_PREFIX}-libtasn1" |
| "${MINGW_PACKAGE_PREFIX}-libusb" |
| "${MINGW_PACKAGE_PREFIX}-libxml2" |
| "${MINGW_PACKAGE_PREFIX}-lzo2" |
| "${MINGW_PACKAGE_PREFIX}-nettle" |
| "${MINGW_PACKAGE_PREFIX}-pixman" |
| "${MINGW_PACKAGE_PREFIX}-SDL2" |
| "${MINGW_PACKAGE_PREFIX}-SDL2_image" |
| "${MINGW_PACKAGE_PREFIX}-snappy" |
| "${MINGW_PACKAGE_PREFIX}-usbredir" |
| "${MINGW_PACKAGE_PREFIX}-zstd" |
| ) |
| optdepends=( |
| "${MINGW_PACKAGE_PREFIX}-spice: to enable spice usage" |
| ) |
| source=(https://download.qemu.org/${_realname}-${pkgver}.tar.xz{,.sig} msys2.readme.txt msys2.examples.tests.sh) |
| sha256sums=('87bc1a471ca24b97e7005711066007d443423d19aacda3d442558ae032fa30b9' 'SKIP' 'SKIP' 'SKIP') |
| validpgpkeys=('CEACC9E15534EBABB82D3FA03353C9CEF108B584') # Michael Roth <flukshun@gmail.com> |
| # tar cannot create links, to keep build running, manual extraction is required |
| noextract=(${_realname}-${pkgver}.tar.xz) |
| |
| prepare() { |
| [[ -d "${srcdir}"/${_realname}-${pkgver} ]] && rm -rf "${srcdir}"/${_realname}-${pkgver} |
| # tar cannot create links here, therefore hide the failure |
| tar -xf ${srcdir}/${_realname}-${pkgver}.tar.xz -C ${srcdir} || true |
| |
| cd "${srcdir}/${_realname}-${pkgver}" |
| } |
| |
| build() { |
| # Requirements as documented in https://wiki.qemu.org/Hosts/W32#Native_builds_with_MSYS2 |
| # Execution of |
| # configure --cross-prefix=${CARCH}-w64-mingw32- |
| # and |
| # Providing cross-prefixed binaries by copying |
| # ${CARCH}-w64-mingw32-objcopy.exe using objcopy.exe |
| # ${CARCH}-w64-mingw32-windres.exe using windres.exe |
| # ${CARCH}-w64-mingw32-ranlib.exe using ${CARCH}-w64-mingw32-gcc-ranlib.exe |
| # ${CARCH}-w64-mingw32-ar.exe using ${CARCH}-w64-mingw32-gcc-ar.exe |
| # ${CARCH}-w64-mingw32-nm.exe using nm.exe |
| LDFLAGS+=" -fstack-protector" |
| [[ -d "${srcdir}"/build-${CARCH} ]] && rm -rf "${srcdir}"/build-${CARCH} |
| mkdir -p "${srcdir}"/build-${CARCH} && cd "${srcdir}"/build-${CARCH} |
| |
| # We need to provide all expected cross-prefixed tools without links or copying! |
| # We will also provide undocumented ${CARCH}-w64-mingw32-strip.exe using strip.exe |
| # Msys2 already provides some duplicates in ${MINGW_PREFIX}/bin: |
| # gcc-ar.exe is ${CARCH}-w64-mingw32-gcc-ar.exe |
| # gcc-ranlib.exe is ${CARCH}-w64-mingw32-gcc-ranlib.exe |
| # These common, not prefixed exports read by configure fulfill all qemu requirements |
| export AR=gcc-ar |
| export NM=nm |
| export OBJCOPY=objcopy |
| export RANLIB=gcc-ranlib |
| export STRIP=strip |
| export WINDRES=windres |
| |
| # configure failes to create links, which can be ignored |
| # qemu enables all features if possible, so keep it simple |
| # For faster testing: |
| #TARGETLIST="--target-list=x86_64-softmmu" |
| # configuration of paths for win32 - fixes in package(): |
| # intention: leave all core files in one directory - lib/qemu |
| ../${_realname}-${pkgver}/configure $TARGETLIST \ |
| --cross-prefix=${CARCH}-w64-mingw32- \ |
| --python=${MINGW_PREFIX}/bin/python \ |
| --prefix=${MINGW_PREFIX} \ |
| --bindir=${MINGW_PREFIX}/lib/qemu \ |
| --datadir=${MINGW_PREFIX}/lib/qemu \ |
| --localedir=${MINGW_PREFIX}/share/locale \ |
| --mandir=${MINGW_PREFIX}/share/man \ |
| --docdir=${MINGW_PREFIX}/share/doc/qemu |
| |
| # Finally build |
| make |
| } |
| |
| check() { |
| cd "${srcdir}"/build-${CARCH} |
| # Tests are not performed in CI |
| # For local testing: perform, but do not fail |
| make test || true |
| } |
| |
| package() { |
| cd "${srcdir}"/build-${CARCH} |
| |
| # Fix failure of make install introduced by Sphinx >=4.0.0 |
| # Sphinx >=4.0.0 puts man pages to docs/(1|7|8)/ and not to docs/ as expected |
| # TODO Try to remove with next Qemu release |
| find docs -type f -regextype grep -regex "docs/[0-9]/.*" -exec \ |
| cp -pv {} docs/ \; |
| |
| # 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 to standard dirs in share/ |
| mkdir -pv share |
| mv -v lib/qemu/applications share/ |
| mv -v lib/qemu/icons share/ |
| |
| # Fix firmware descriptors |
| # see https://bugzilla.redhat.com/show_bug.cgi?id=1728652#c7 |
| mkdir -pv share/qemu |
| mv -v lib/qemu/firmware share/qemu/ |
| find share/qemu/firmware -type f -exec \ |
| sed -i "s%\(\"filename\"\s*:\s*\"\).*edk2%\1${MINGW_PREFIX}/lib/qemu/edk2%" {} \; |
| |
| # For executables in lib/qemu/ create wrappers in bin/ |
| mkdir -pv bin |
| local LIBEXES=$(find lib/qemu -name "*.exe" ! -name "*w.exe") |
| local LIBEXE="" |
| for LIBEXE in $LIBEXES |
| do |
| local EXE=$(basename $LIBEXE) |
| local WRAPPER=bin/$EXE |
| echo "#!/bin/bash" >> $WRAPPER |
| echo "export PATH=\"${MINGW_PREFIX}/lib/qemu:\$PATH\"" >> $WRAPPER |
| echo "exec ${MINGW_PREFIX}/lib/qemu/$EXE \"\$@\"" >> $WRAPPER |
| chmod u+x $WRAPPER |
| done |
| |
| # Add all licenses found in qemu sources to share/licences/qemu/ |
| mkdir -pv share/licenses/qemu |
| tar -C "${srcdir}"/${_realname}-${pkgver} -c $( |
| cd "${srcdir}"/${_realname}-${pkgver} && |
| 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 |
| mkdir -pv share/doc/qemu |
| cp -pv "${srcdir}"/msys2.readme.txt share/doc/qemu/ |
| cp -pv "${srcdir}"/msys2.examples.tests.sh share/doc/qemu/ |
| } |