%ifarch x86_64 aarch64 %define wine wine64 %define mark64 ()(64bit) %else %define wine wine %define mark64 %{nil} %endif %define lib_name_orig lib%{name} %define lib_major 1 %define lib_name %mklibname %{name} %{lib_major} %define lib_name_devel %mklibname wine -d %define have_mingw 0 # Mingw can only be used on x86 (aarch64 listed just for filelist conditional): %ifarch %{ix86} x86_64 aarch64 %define have_mingw 1 %endif # On 32-bit we have # wine32 - those 32-bit binaries that are also used on 64-bit for 32-bit support # wine - all other files (requires 'wine32') # On 64-bit we have # wine64 - all 64-bit files (suggests 'wine32') # - Anssi 07/2010 %define mainver 9.0 %define mainget 9.0 #define bugfix 0 %define rel 1 #define prerel rc5 # When altering these, make sure corresponding wine-gecko/wine-mono is # submitted, or notify their maintainer about the new version: # Dependencies hardcoded in dlls/appwiz.cpl/addons.c %define gecko_version 2.47.4 %define mono_version 8.1.0 # build with wine-staging patches, see: https://github.com/wine-staging/wine-staging # Build with staging during our development cycles, stick to stable for Mageia stable releases %global wine_staging 0 %ifarch %{ix86} %global winepedir i386-windows %global winesodir i386-unix %endif %ifarch x86_64 %global winepedir x86_64-windows %global winesodir x86_64-unix %endif %ifarch %{arm} %global winepedir arm-windows %global winesodir arm-unix %endif %ifarch aarch64 %global winepedir aarch64-windows %global winesodir aarch64-unix %global __brp_llvm_compile_lto_elf %nil %global __brp_strip_lto %nil %global __brp_strip_static_archive %nil %endif Name: wine Epoch: 1 Version: %{mainver}%{?bugfix:.%{bugfix}} Release: %mkrel %{?prerel:0.%{prerel}.}%{rel} Summary: WINE Is Not An Emulator - runs MS Windows programs License: LGPLv2+ Group: Emulators URL: https://www.winehq.org/ Source0: https://dl.winehq.org/wine/source/%mainget/%{name}-%{version}%{?prerel:-%{prerel}}.tar.xz Source10: https://dl.winehq.org/wine/source/%mainget/%{name}-%{version}%{?prerel:-%{prerel}}.tar.xz.sign Source2: wine.systemd Source3: %{name}-icons_256.tar.xz %if 0%{?wine_staging} Source900: https://github.com/wine-staging/wine-staging/archive/v%{mainver}%{?prerel:-%{prerel}}/wine-staging-%{mainver}%{?prerel:-%{prerel}}.tar.gz %endif # Autoconf 2.72 support - https://bugzilla.redhat.com/show_bug.cgi?id=2143724 Patch100: wine-7.22-autoconf-2.72.patch # https://bugs.winehq.org/show_bug.cgi?id=45277 #Patch100: wine-6.0-vulkan-child-window.patch # (Anssi 05/2008) Adds: # a: => /media/floppy # d: => $HOME (at config_dir creation time, not refreshed if $HOME changes; # note that Wine also provides $HOME in My Documents) # com4 => /dev/ttyUSB0 (replaces /dev/ttyS3) Patch108: %{name}-mgaconf.patch ExclusiveArch: %{ix86} x86_64 aarch64 BuildRequires: autoconf BuildRequires: bison BuildRequires: flex %ifarch %{arm} aarch64 BuildRequires: clang >= 5.0 BuildRequires: lld BuildRequires: llvm %else BuildRequires: gcc %endif %if %have_mingw BuildRequires: mingw32-FAudio BuildRequires: mingw64-FAudio BuildRequires: mingw32-gcc BuildRequires: mingw64-gcc BuildRequires: mingw32-lcms2 BuildRequires: mingw64-lcms2 BuildRequires: mingw32-libpng BuildRequires: mingw64-libpng BuildRequires: mingw32-libxml2 BuildRequires: mingw64-libxml2 BuildRequires: mingw32-libxslt BuildRequires: mingw64-libxslt BuildRequires: mingw32-vkd3d BuildRequires: mingw64-vkd3d BuildRequires: mingw32-vulkan-headers BuildRequires: mingw64-vulkan-headers BuildRequires: mingw32-zlib BuildRequires: mingw64-zlib %endif BuildRequires: desktop-file-utils BuildRequires: docbook-dtd-sgml BuildRequires: docbook-utils BuildRequires: ffmpeg-devel BuildRequires: fontconfig-devel BuildRequires: fontforge BuildRequires: freetype2-devel BuildRequires: gettext-devel BuildRequires: glibc-static-devel BuildRequires: cups-devel BuildRequires: dbus-devel BuildRequires: gnutls-devel BuildRequires: gphoto2-devel BuildRequires: gpm-devel BuildRequires: gsm-devel BuildRequires: gstreamer1.0-devel BuildRequires: gtk3-devel BuildRequires: icoutils BuildRequires: imagemagick BuildRequires: libalsa-devel BuildRequires: libgstreamer1.0-plugins-base-devel BuildRequires: libmpg123-devel BuildRequires: libpcap-devel BuildRequires: librsvg BuildRequires: libsm-devel BuildRequires: libv4l-devel BuildRequires: chrpath BuildRequires: libva-devel BuildRequires: libx11-devel BuildRequires: libxcomposite-devel BuildRequires: libxcursor-devel BuildRequires: libxext-devel BuildRequires: libxi-devel BuildRequires: libxinerama-devel BuildRequires: libxrandr-devel BuildRequires: libxrender-devel BuildRequires: mesaglu-devel BuildRequires: ncurses-devel BuildRequires: opencl-devel BuildRequires: openldap-devel BuildRequires: osmesa-devel BuildRequires: perl-devel BuildRequires: pkgconfig(vulkan) BuildRequires: png-devel BuildRequires: pulseaudio-devel BuildRequires: sane-devel BuildRequires: sgml-tools BuildRequires: tiff-devel BuildRequires: ungif-devel BuildRequires: unixODBC-devel BuildRequires: valgrind-devel BuildRequires: xpm-devel %define desc Wine is a program which allows running Microsoft Windows programs \ (including DOS, Windows 3.x and Win32 executables) on Unix. It \ consists of a program loader which loads and executes a Microsoft \ Windows binary, and a library (called Winelib) that implements Windows \ API calls using their Unix or X11 equivalents. The library may also \ be used for porting Win32 code into native Unix executables. %ifarch x86_64 aarch64 %package -n %{wine} Summary: WINE Is Not An Emulator - runs MS Windows programs Group: Emulators Recommends: %{name}32 = %{epoch}:%{version}-%{release} Recommends: mingw32-wine-gecko = %gecko_version %else # on 32-bit we always want wine32 package Requires: %{name}32 = %{epoch}:%{version}-%{release} %endif Provides: %{wine}-utils = %{epoch}:%{version}-%{release} %{wine}-full = %{epoch}:%{version}-%{release} Provides: %{lib_name}-capi = %{epoch}:%{version}-%{release} %{lib_name}-twain = %{epoch}:%{version}-%{release} Provides: %{lib_name} = %{epoch}:%{version}-%{release} Provides: wine-bin = %{epoch}:%{version}-%{release} Obsoletes: %{wine}-utils %{wine}-full %{lib_name}-capi %{lib_name}-twain Obsoletes: %{lib_name} <= %{epoch}:%{version}-%{release} Recommends: sane-frontends %define dlopenreq() %(F=%{_libdir}/lib%{1}.so;[ -e $F ] && (file $F|grep -q ASCII && grep -o 'lib[^ ]*' $F|sed -e "s/\$/%{mark64}/"||objdump -p $F | grep SONAME | awk '{ print $2 "%{mark64}" }') || echo "wine-missing-buildrequires-on-%{1}") # wine dlopen's these, so let's add the dependencies ourself # Adding these here is especially important with wine, since wine32 is # commonly one of the few 32-bit components on a 64-bit installation, so # these packages might not necessarily be pulled by anything else. # grep WINE_CHECK_SONAME configure.ac :) (though note that some of those # results are in autoreq already) - (Anssi 08/2012) Requires: %dlopenreq asound Requires: %dlopenreq crypto Requires: %dlopenreq cups Requires: %dlopenreq dbus-1 Requires: %dlopenreq fontconfig Requires: %dlopenreq freetype Requires: %dlopenreq gnutls Requires: %dlopenreq gsm Requires: %dlopenreq jpeg Requires: %dlopenreq ncurses Requires: %dlopenreq odbc Requires: %dlopenreq OSMesa Requires: %dlopenreq png Requires: %dlopenreq sane Requires: %dlopenreq ssl Requires: %dlopenreq tiff Requires: %dlopenreq v4l1 Requires: %dlopenreq Xcomposite Requires: %dlopenreq Xcursor Requires: %dlopenreq Xi Requires: %dlopenreq Xinerama Requires: %dlopenreq Xrandr Requires: %dlopenreq Xrender Requires: %dlopenreq Xxf86vm #Requires: %%dlopenreq capi20 # ISDN support - unlikely to be needed # (Anssi) If not installed, wine pops up a dialog on first start proposing to # download pre-built binaries (unlike wine-gecko, same wine-mono works with # both wine and wine64): Recommends: wine-mono = %mono_version Requires(post): desktop-file-utils Requires(postun): desktop-file-utils Requires(post): desktop-common-data Requires(postun): desktop-common-data Requires(preun): rpm-helper Requires(post): rpm-helper %ifarch %{ix86} Conflicts: %{name}64 %else Conflicts: %{name} %endif # (tv) needed by games: Requires: %{mklibname dri-drivers} %ifnarch x86_64 aarch64 Requires: mingw32-FAudio Requires: mingw32-lcms2 Requires: mingw32-libpng Requires: mingw32-libxml2 Requires: mingw32-libxslt Requires: mingw32-vkd3d Requires: mingw32-zlib %else Requires: mingw64-FAudio Requires: mingw64-lcms2 Requires: mingw64-libpng Requires: mingw64-libxml2 Requires: mingw64-libxslt Requires: mingw64-vkd3d Requires: mingw64-zlib %endif %description %desc %ifarch x86_64 aarch64 %description -n %{wine} %desc This package contains the Win64 version of Wine. You need the wine32 package from the 32-bit repository to be able to run 32-bit applications. %endif %ifnarch x86_64 aarch64 %package -n wine32 Summary: 32-bit support for Wine Group: Emulators # This is not an EVR-specific requirement, as otherwise on x86_64 urpmi could # resolve the dependency to wine64 even on upgrades, and therefore replace # wine+nwine32 installation with a wine32+wine64 installation. - Anssi Requires: %{name}-bin Conflicts: %{name} < 1:1.2-0.rc7.1 Conflicts: %{name}64 < 1:1.2-0.rc7.1 # (Anssi) If wine-gecko is not installed, wine pops up a dialog on first # start proposing to download wine-gecko from sourceforge, while recommending # to use distribution packages instead. Therefore suggest wine-gecko here: Recommends: mingw64-wine-gecko = %gecko_version %description -n wine32 Wine is a program which allows running Microsoft Windows programs (including DOS, Windows 3.x and Win32 executables) on Unix. This package contains the files needed to support 32-bit Windows programs. %endif %package -n %{wine}-devel Summary: Static libraries and headers for %{name} Group: Development/C Requires: %{wine} = %{epoch}:%{version} Provides: %{lib_name_devel} = %{epoch}:%{version}-%{release} Provides: %{lib_name_orig}-devel = %{epoch}:%{version}-%{release} Obsoletes: %{lib_name_devel} <= %{epoch}:%{version}-%{release} Obsoletes: %{mklibname -d wine 1} < %{epoch}:%{version} %ifarch %{ix86} Conflicts: %{name}64-devel %else Conflicts: %{name}-devel %endif %description -n %{wine}-devel Wine is a program which allows running Microsoft Windows programs (including DOS, Windows 3.x and Win32 executables) on Unix. %{wine}-devel contains the libraries and header files needed to develop programs which make use of wine. %prep %autosetup -p1 -n %{name}-%{version}%{?prerel:-%{prerel}} %if 0%{?wine_staging} # setup and apply wine-staging patches gzip -dc %{SOURCE900} | tar -xf - --strip-components=1 ./patches/patchinstall.sh --all %endif GECKO_VERSION=$(sed -rn 's,^#define\s+GECKO_VERSION\s+"([^"]*)".*$,\1,p' dlls/appwiz.cpl/addons.c) [ "$GECKO_VERSION" = "%gecko_version" ] || { echo %{name}-gecko version mismatch; exit 1; } MONO_VERSION=$(sed -rn 's,^#define\s+MONO_VERSION\s+"([^"]*)".*$,\1,p' dlls/appwiz.cpl/addons.c) [ "$MONO_VERSION" = "%mono_version" ] || { echo wine-mono version mismatch; exit 1; } %build autoreconf -vfi %ifarch %ix86 # (Anssi 04/2008) mdvbug #39604 # Some protection systems complain "debugger detected" with our # -fomit-frame-pointer flag, so disable it. # It also causes some crashing issues, and the upstream workaround # in configure script does not seem to work properly. -Anssi 12/2012 export CFLAGS="%{optflags} -fno-omit-frame-pointer" %endif # disable fortify as it breaks wine # https://bugs.winehq.org/show_bug.cgi?id=24606 # https://bugs.winehq.org/show_bug.cgi?id=25073 # Disable Red Hat specs for package notes (Fedora 38+) and annobin. # MinGW GCC does not support these options. export LDFLAGS="$(echo "%{build_ldflags}" | sed -e 's/-Wl,-z,relro//' -e 's/-Wl,--build-id=sha1//' -e 's/-specs=\/usr\/lib\/rpm\/redhat\/redhat-package-notes//' -e 's/-specs=\/usr\/lib\/rpm\/redhat\/redhat-annobin-cc1//')" %ifarch x86_64 export CFLAGS="$(echo "%{optflags}" | sed -e 's/-O2//' -e 's/-Wp,-D_FORTIFY_SOURCE=2//' -e 's/-fcf-protection//' -e 's/-fstack-protector-strong//' -e 's/-fstack-clash-protection//' -e 's/-specs=\/usr\/lib\/rpm\/redhat\/redhat-annobin-cc1//') -O2" %else export CFLAGS="$(echo "%{optflags}" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=2//' -e 's/-fcf-protection//' -e 's/-fstack-protector-strong//' -e 's/-fstack-clash-protection//' -e 's/-specs=\/usr\/lib\/rpm\/redhat\/redhat-annobin-cc1//')" %endif %ifarch %{arm} aarch64 # Wine enabled -Wl,-WX that turns linker warnings into errors # Fedora passes '--as-needed' for all binaries and this is a warning from the linker, now an error, so disable flag for now sed -i 's/-Wl,-WX//g' configure # ARM64 now requires clang # https://source.winehq.org/git/wine.git/commit/8fb8cc03c3edb599dd98f369e14a08f899cbff95 export CC="/usr/bin/clang" # Our build_ldflags have stuff unsupported by lld export LDFLAGS=$(echo "$LDFLAGS" | sed -e 's/-Wl,-O1//' -e 's/-Wl,--as-needed -Wl,--no-undefined//' -e 's/-Wl,--enable-new-dtags//') %endif %ifarch armv7hl export CFLAGS="`echo $CFLAGS | sed -e 's/-fexceptions//'`" %endif # required so that both Linux and Windows development files can be found unset PKG_CONFIG_PATH %configure \ --with-x \ --with-dbus \ --with-pulse \ %ifarch %{arm} --with-float-abi=hard \ %endif %ifarch x86_64 aarch64 --enable-win64 \ %ifarch x86_64 --with-system-dllpath=%{mingw64_bindir} \ %endif %endif %ifarch %{ix86} --with-system-dllpath=%{mingw32_bindir} \ %endif %{?wine_staging: --with-xattr} \ --disable-tests %make_build depend %make_build %install %make_install LDCONFIG=/bin/true %ifarch aarch64 mv %{buildroot}%{_bindir}/wine %{buildroot}%{_bindir}/wine64 mv %{buildroot}%{_bindir}/wine-preloader %{buildroot}%{_bindir}/wine64-preloader %endif # remove rpath chrpath --delete %{buildroot}%{_bindir}/wmc chrpath --delete %{buildroot}%{_bindir}/wrc %ifarch x86_64 aarch64 chrpath --delete %{buildroot}%{_bindir}/wine64 chrpath --delete %{buildroot}%{_bindir}/wineserver %else chrpath --delete %{buildroot}%{_bindir}/wine chrpath --delete %{buildroot}%{_bindir}/wineserver %endif # Allow users to launch Windows programs by just clicking on the .exe file... mkdir -p %{buildroot}%{_binfmtdir} install -p -c -m 644 %{SOURCE2} %{buildroot}%{_binfmtdir}/wine.conf mkdir -p %{buildroot}%{_sysconfdir}/xdg/menus/applications-merged cat > %{buildroot}%{_sysconfdir}/xdg/menus/applications-merged/%{name}.menu < Applications Tools Emulators Wine %{name}.directory X-Wine EOF mkdir -p %{buildroot}%{_datadir}/desktop-directories cat > %{buildroot}%{_datadir}/desktop-directories/%{name}.directory < %{buildroot}%{_datadir}/applications/%{name}-`echo $i|cut -d: -f1|sed s/"%{name} "//g`.desktop << EOF [Desktop Entry] Name=`echo $i|cut -d: -f2` Comment=`echo $i|cut -d: -f2` Exec=`echo $i|cut -d: -f1` Icon=`echo $i|cut -d: -f3` Terminal=false Type=Application Categories=X-Wine; EOF done # Use Category=Wine instead of the previous workaround (Category=Emulator) desktop-file-install --add-mime-type=application/x-zip-compressed \ --remove-mime-type=application/x-zip-compressed \ --add-category=X-Wine \ --dir %{buildroot}%{_datadir}/applications %{buildroot}%{_datadir}/applications/%{name}.desktop %ifarch x86_64 aarch64 # fix the binary name sed -i 's,Exec=wine ,Exec=wine64 ,' %{buildroot}%{_datadir}/applications/%{name}.desktop %endif mkdir -p %{buildroot}%{_iconsdir}/hicolor/256x256/apps tar -Jxf %{SOURCE3} -C %{buildroot}%{_iconsdir}/hicolor/256x256/apps/ %ifarch x86_64 aarch64 cat > README.install.urpmi <