blob: 23f3de64b2959e601412783e19aad137c636eed8 [file] [log] [blame]
_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/
}