File wine.spec of Package wine-4.10

# spec file for package wine
# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via

# The 32bit package (wine-32bit) can be obtained using the following command:
#   osc build --baselibs --disable-debuginfo <openSUSE version> i586 wine.spec
# If the package is to be installed with a different prefix, change it here
# using %%define _prefix /usr/lib/wine-<suffix>
%define changedprefix %(test %_prefix != /usr && echo "1" || echo "0")

%if 0%{?changedprefix}
%define _bindir %_prefix/bin
%ifarch  x86_64
%define _libdir %_prefix/lib64
%define _libdir %_prefix/lib
%define _mandir %_prefix/man
%define _includedir %_prefix/include
%define _defaultdocdir %_prefix/share/doc

# The variable prjname points to the wine project name, and should therefor
# probably stay the same forever.
# The package name, that is defined by the rpm tag Name, may be changed
# which will result in a different package name.  In combination with a
# different file path location (_prefix), it could be installed along side
# the wine package that is provided by openSUSE (the distribution).
%define prjname wine

%global flavor @BUILD_FLAVOR@%nil
%define staging 0
%define nine 0

%if "%flavor" == "staging" || "%flavor" == "staging-nine"
%define staging 1
%if "%flavor" == "nine" || "%flavor" == "staging-nine"
%define nine 1

%if "%{flavor}" == ""
Name:           wine
Name:           wine%{?flavor:-}%{?flavor}
Provides:       wine = %{version}

# Is this a native (openSUSE distribution) package?
# modpkgname: Modified Package Name
%define modpkgname %(test %name != "wine" && echo "1" || echo "0")

BuildRequires:  Mesa-devel
BuildRequires:  alsa-devel
BuildRequires:  autoconf
BuildRequires:  bison
BuildRequires:  cups-devel
BuildRequires:  dbus-1-devel
BuildRequires:  desktop-file-utils
BuildRequires:  flex
BuildRequires:  fontconfig-devel
BuildRequires:  freeglut-devel
BuildRequires:  freetype2-devel
BuildRequires:  giflib-devel
BuildRequires:  libjpeg-devel
BuildRequires:  libpcap-devel
BuildRequires:  libpng-devel
BuildRequires:  libtiff-devel
BuildRequires:  libxml2-devel
BuildRequires:  libxslt-devel
BuildRequires:  ncurses-devel
BuildRequires:  openldap2-devel
BuildRequires:  openssl-devel
BuildRequires:  pkgconfig
BuildRequires:  update-desktop-files
BuildRequires:  valgrind-devel
# Preparing to deprecating of SLE 11 in 2019-03-31 (LTSS 2022-03-31)
%if 0%{?suse_version} <= 1140
BuildRequires:  xorg-x11-devel
BuildRequires:  xz
BuildRequires:  pkgconfig(x11)
BuildRequires:  pkgconfig(x11-xcb)
BuildRequires:  pkgconfig(xcb)
BuildRequires:  pkgconfig(xcb-xfixes)
BuildRequires:  pkgconfig(xcomposite)
BuildRequires:  pkgconfig(xcursor)
BuildRequires:  pkgconfig(xcursor)
BuildRequires:  pkgconfig(xext)
BuildRequires:  pkgconfig(xfixes)
BuildRequires:  pkgconfig(xi)
BuildRequires:  pkgconfig(xinerama)
BuildRequires:  pkgconfig(xrandr)
BuildRequires:  pkgconfig(xrender)
BuildRequires:  pkgconfig(xxf86vm)
%ifarch aarch64
BuildRequires:  clang >= 5

%if 0%{?suse_version} >= 1110
#BuildRequires:  libgnutls-devel
BuildRequires:  libgphoto2-devel
BuildRequires:  libpulse-devel
# capi20 isn't available in SLE anymore
%if 0%{?sle_version} >= 120000 && !0%{?is_opensuse}
BuildRequires:  capi4linux-devel

%if 0%{?suse_version} >= 1230
BuildRequires:  liblcms2-devel
BuildRequires:  pkgconfig(osmesa)
%if 0%{?suse_version} >= 1310
BuildRequires:  krb5-devel
%if 0%{?suse_version} >= 1315
BuildRequires:  SDL2-devel
# libvulkan presents in Leap >= 42.3 and in SLE >= 15
%if 0%{?suse_version} >= 1500 || ( 0%{?sle_version} == 120300 && 0%{?is_opensuse} )
BuildRequires:  vulkan-devel
%if 0%{?suse_version} >= 1550
BuildRequires:  vkd3d-devel

# Plugable devices support
%if 0%{?suse_version} < 1130
BuildRequires:  hal-devel
%if 0%{?suse_version} >= 1110
%if 0%{?suse_version} >= 1210
BuildRequires:  pkgconfig(libudev)
BuildRequires:  libudev-devel

# Media codecs
%if 0%{?suse_version} >= 1210
BuildRequires:  libgsm-devel
%if 0%{?suse_version} >= 1230
BuildRequires:  gstreamer-plugins-base-devel
# These two dependencies were backported to Leap 42.3 but unavailable in SLE 12,
# so I made this tricky construction
%if 0%{?suse_version} >= 1500 || ( 0%{?sle_version} == 120300 && 0%{?is_opensuse} )
BuildRequires:  FAudio-devel
BuildRequires:  mpg123-devel

# libV4L and libOpenAL aren't presents for SLE 11 but there are in 11.1
%if 0%{?suse_version} >= 1110 && 0%{?sles_version} != 11
BuildRequires:  libv4l-devel
# libOpenAL isn't present for SLE 12, but there is in Leap 42.x and SLE 15
%if 0%{?suse_version} == 1315 && !0%{?is_opensuse}
BuildRequires:  openal-soft-devel

# make it build on sle11 sp3
%if 0%{?sles_version} == 11
BuildRequires:  gcc47
#!BuildIgnore:  libgcc43
#!BuildIgnore:  libgomp43

%define realver 4.10
Version:        4.10
Release:        0
Summary:        An MS Windows Emulator
License:        LGPL-2.1-or-later
Group:          System/Emulators/PC
Source41:       wine.keyring
Patch0:         susepatches.patch
Source3:        README.SUSE
Source4:        wine.desktop
Source5:        ubuntuwine.tar.bz2
Source6:        wine-msi.desktop
Source7:        baselibs.conf
Recommends:     winetricks

%if %{modpkgname}
  %if %{changedprefix}
    %define pkgconflict 0
    %define pkgconflict 1
Conflicts:      wine
  %define pkgconflict 0

%if 0%{?suse_version} > 1120
%ifarch x86_64
Requires:       %{name}-32bit = %{version}
%ifarch %ix86 x86_64
Requires:       wine-gecko >= 2.47
# for ntlm_auth helper
Requires:       samba-winbind
%if 0%{?suse_version} >= 1500 || ( 0%{?sle_version} == 120300 && 0%{?is_opensuse} )
Provides:       wine-mp3 = %version
Obsoletes:      wine-mp3 < %version
Recommends:     wine-mp3
# We built it here, but it is kind of large
Recommends:     wine-mono
# for DOS support
Recommends:     dosbox
# To have correct Pulseaudio support.
Recommends:     alsa-plugins
Recommends:     alsa-plugins-pulse
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
%if %{staging}
# upstream patch target version
%define staging_version 4.10
Source100:      wine-staging-%{staging_version}.tar.xz
%if 0%{?suse_version} >= 1210
BuildRequires:  gtk3-devel
BuildRequires:  libva-devel
# for an xaudio2_7 patch which requires ffmpeg-4.x
%if 0%{?suse_version} > 1500 || ( 0%{?sle_version} == 120300 && 0%{?is_opensuse} )
BuildRequires:  ffmpeg-4-libavcodec-devel
%if %{nine}
# upstream patch target version
%define nine_version 4.1
BuildRequires:  Mesa-libd3d-devel
Requires:       Mesa-libd3d
%if 0%{?suse_version} > 1500
BuildRequires:  xorgproto-devel
BuildRequires:  dri2proto-devel
Source110:      wine-d3d9-patches-%{nine_version}.tar.xz

Wine is a compatibility layer capable of running Windows
applications. Instead of simulating internal Windows logic like a
virtual machine or emulator, Wine translates Windows API calls into
POSIX calls on-the-fly, eliminating the performance and memory
penalties of other methods and allowing you to cleanly integrate
Windows applications into your desktop.

You can run your Windows executables with it and write your Windows
programs under Linux and link against the WINE libraries. It is not
necessary to have a Windows installation to run WINE.

Please have a look at /usr/share/doc/packages/wine/README.SUSE. There
is more documentation available in that directory. Read 'man wine' for
further information.

You can invoke wine by entering: 'wine program.exe' wine can be
configured by running 'winecfg'.

%package devel
Summary:        Files for Wine development
Group:          Development/Libraries/C and C++

%description devel
This RPM contains the header files and development tools for the WINE

%ifarch x86_64
%package 32bit-build-deps
Summary:        Wine build dependencies for 32bit builds on x86_64 systems
Group:          Development/Libraries/C and C++
Requires:       alsa-devel-32bit
Requires:       cups-devel-32bit
Requires:       dbus-1-devel-32bit
Requires:       fontconfig-devel-32bit
Requires:       freeglut-devel-32bit
Requires:       freetype2-devel-32bit
Requires:       glibc-devel-32bit
Requires:       glu-devel-32bit
Requires:       krb5-devel-32bit
Requires:       libOSMesa-devel-32bit
Requires:       libX11-devel-32bit
Requires:       libXcomposite-devel-32bit
Requires:       libXcursor-devel-32bit
Requires:       libXext-devel-32bit
Requires:       libXfixes-devel-32bit
Requires:       libXi-devel-32bit
Requires:       libXinerama-devel-32bit
Requires:       libXrandr-devel-32bit
Requires:       libXrender-devel-32bit
Requires:       libXxf86vm-devel-32bit
Requires:       libglvnd-devel-32bit
Requires:       libgnutls-devel-32bit
Requires:       libgsm-devel-32bit
Requires:       libjpeg8-devel-32bit
Requires:       liblcms2-devel-32bit
Requires:       libpcap-devel-32bit
Requires:       libpng16-devel-32bit
Requires:       libpulse-devel-32bit
Requires:       libtiff-devel-32bit
Requires:       libudev-devel-32bit
Requires:       libxml2-devel-32bit
Requires:       libxslt-devel-32bit
Requires:       mpg123-devel-32bit
Requires:       ncurses-devel-32bit
Requires:       openal-soft-devel-32bit
Requires:       openldap2-devel-32bit
Requires:       zlib-devel-32bit
#Requires:	gcc-32bit

%description 32bit-build-deps
This virtual package provides the 32bit development build dependencies for use on x86_64.

%setup -q -n wine-%realver
%patch0 -p1

cp %{SOURCE3} .
%if %{staging}
# apply wine staging patch set on top of the wine release.
tar xf %{SOURCE100}
bash ./wine-staging-%staging_version/patches/ --all

%if %{nine}
tar xf %{SOURCE110}
%if %{staging}
patch --no-backup-if-mismatch -p1 -i ./wine-d3d9-patches-%nine_version/staging-helper.patch
patch --no-backup-if-mismatch -p1 -i ./wine-d3d9-patches-%nine_version/d3d9-helper.patch
patch --no-backup-if-mismatch -p1 -i ./wine-d3d9-patches-%nine_version/wine-d3d9.patch

%ifarch %ix86
# Steam wants proper EBP frames to hook functions
export RPM_OPT_FLAGS=`echo %{optflags}|sed -e 's/-fomit-frame-pointer//'`
%if 0%{?sles_version} == 11
if [ -f /usr/bin/gcc-4.6 ]; then
	export CC=gcc-4.6
if [ -f /usr/bin/gcc-4.7 ]; then
	export CC=gcc-4.7
if [ -f /usr/bin/gcc-4.8 ]; then
	export CC=gcc-4.8
export CC=gcc

%ifarch aarch64
# ARM64 curently requires clang
export CC="/usr/bin/clang"

%if %{staging} || %{nine}
autoreconf -i -f

# Only as long as the patch is there
#autoreconf -i -f

%configure \
	--with-x --verbose \
%ifarch x86_64
	--enable-win64 \
%if %{nine}
    --with-d3d9-nine \

grep "have_x=yes" config.log || exit 1

# generate baselibs.conf
%ifarch %ix86
grep SONAME_ config.log
( echo "# autogenerated in .spec file"
  echo "%name"
  echo " +^%{_prefix}/bin/wine\$"
  echo " +^%{_prefix}/bin/wine-preloader\$"
  echo " +^%{_prefix}/lib/wine/fakedlls"
  %if %{pkgconflict}
    echo " conflicts \"wine-32bit\""
%if 0%{?suse_version} >= 1500 || ( 0%{?sle_version} == 120300 && 0%{?is_opensuse} )
  echo " obsoletes \"wine-mp3-32bit\""
  echo " recommends \"wine-mp3-32bit\""
  grep SONAME_ config.log|grep -v 'so"'|sed -e 's/^.*\(".*"\).*$/	requires \1/;'|sort -u
%if 0%{?suse_version} >= 1210
  echo " recommends \"libpulse0-32bit\""
  echo " recommends \"alsa-plugins-pulse-32bit\""
  echo " recommends \"alsa-plugins-32bit\""
%if 0%{?suse_version} >= 1310
  echo " requires \"p11-kit-32bit\""
%if %{nine}
  echo " requires \"Mesa-libd3d-32bit\""
  echo "%name-devel"
  echo "  +^%{_prefix}/lib/wine/.*def"
) > %SOURCE7
cat %SOURCE7

make %{?_smp_mflags} depend
make %{?_smp_mflags} all

# install desktop file
install -d %{buildroot}%{_datadir}/applications/
install -m 0644 %{SOURCE4} %{buildroot}%{_datadir}/applications/
install -m 0644 %{SOURCE6} %{buildroot}%{_datadir}/applications/
install -m 0755 %{SOURCE2} %{buildroot}%{_bindir}/
mv %{buildroot}/%{_mandir}/de.UTF-8 %{buildroot}/%{_mandir}/de
mv %{buildroot}/%{_mandir}/fr.UTF-8 %{buildroot}/%{_mandir}/fr
%ifnarch x86_64
# hack as on 64bit currently dont get installed
mv %{buildroot}/%{_mandir}/pl.UTF-8 %{buildroot}/%{_mandir}/pl

%if 0%{?changedprefix}

  # When this wine package is not installed in the standard %prefix (/usr);
  # Create the doc directory
  install -d -m 755 %{buildroot}/%{_defaultdocdir}

  # The manpages are not automatically compressed.  Take care that they
  # are compressed.
  find %{buildroot}/%{_mandir} -type f -name "*.1"
  for MAN in $(find %{buildroot}/%{_mandir} -type f -name "*.1"); do
    gzip $MAN

  ( cd %{buildroot}/%{_mandir}/man1
    rm winecpp.1 wineg++.1
    ln -s winegcc.1.gz winecpp.1.gz
    ln -s winegcc.1.gz wineg++.1.gz

tar -xjf %{SOURCE5}
# Copied from Ubuntu Wine out of debian.diff
# taken on 1.2rc2 time.
( cd ubuntuwine

  install -d %{buildroot}%{_sysconfdir}/xdg/menus/applications-merged
  %if ! 0%{?changedprefix}
    # Do not install the menu file, when the prefix has changed (it is not the default
    # openSUSE package anymore).  A solution could be to change the installed file name
    # to e.g., but that could result in a duplicated menu structure, besides
    # that the menu related files (.desktop, .directory, etc) probably not installed in
    # a directory that is searched by the menu maker.  Leave it here as a todo item.
    install -c -m 644 %{buildroot}%{_sysconfdir}/xdg/menus/applications-merged

  # Install application-specific desktop files
  install -d %{buildroot}%{_datadir}/applications
  install -c -m 644 *.desktop %{buildroot}%{_datadir}/applications/

  install -d %{buildroot}%{_datadir}/desktop-directories/
  install -c -m 644 *.directory %{buildroot}%{_datadir}/desktop-directories/

  # Install icons
  install -d %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/
  install -c -m 644 *.svg %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/

# breaks btrfs installation, see bnc#723402
# fdupes %{buildroot}

%if 0%{?suse_version}
%suse_update_desktop_file wine

# find the implicit dependencies
%define winedir %_builddir/%prjname-%realver/
cat >%winedir/ <<EOF
%ifarch x86_64
grep SONAME_ %winedir/config.log|grep -v 'so"'|sed -e 's/^.*"\(.*\)".*$/\1()(64bit)/;'|sort -u
grep SONAME_ %winedir/config.log|grep -v 'so"'|sed -e 's/^.*"\(.*\)".*$/\1/;'|sort -u
chmod 755 %winedir/
%define _use_internal_dependency_generator 0
%define __find_requires %winedir/

rm -rf %{buildroot}

%post   -p /sbin/ldconfig
%postun -p /sbin/ldconfig

%if 0%{?changedprefix}
%dir %_prefix
%dir %_bindir
%dir %_libdir
%dir %_mandir
%dir %_mandir/man1
%dir %_mandir/de
%dir %_mandir/de/man1
%dir %_mandir/fr
%dir %_mandir/fr/man1
%dir %_datadir
%dir %_datadir/applications
%dir %_datadir/icons
%dir %_defaultdocdir
%ifnarch x86_64
%dir %doc %{_mandir}/pl
%dir %doc %{_mandir}/pl/man1
%doc %{_mandir}/man1/wine.1*
%doc %{_mandir}/man1/winedbg.1*
%doc %{_mandir}/man1/wineserver.1*
%ifnarch x86_64
%doc %{_mandir}/*/man1/wine.1*
%doc %{_mandir}/*/man1/wineserver.1*
%doc %{_mandir}/man1/msiexec.1.*
%doc %{_mandir}/man1/notepad.1.*
%doc %{_mandir}/man1/regedit.1.*
%doc %{_mandir}/man1/regsvr32.1.*
%doc %{_mandir}/man1/wineboot.1.*
%doc %{_mandir}/man1/winecfg.1.*
%doc %{_mandir}/man1/wineconsole.1.*
%doc %{_mandir}/man1/winefile.1.*
%doc %{_mandir}/man1/winemine.1.*
%doc %{_mandir}/man1/winepath.1.*
%dir %{_sysconfdir}/xdg/menus/
%dir %{_sysconfdir}/xdg/menus/applications-merged
%if ! 0%{?changedprefix}
%config %{_sysconfdir}/xdg/menus/applications-merged/*.menu
%dir %{_datadir}/desktop-directories/
%dir %{_datadir}/icons/hicolor
%dir %{_datadir}/icons/hicolor/scalable
%dir %{_datadir}/icons/hicolor/scalable/apps
%ifarch %ix86
%ifarch x86_64
%ifarch ppc %arm
%dir %{_libdir}/wine
%dir %{_libdir}/wine/fakedlls

%files devel
%if 0%{?changedprefix}
%dir %_includedir
%doc %{_mandir}/man1/winemaker.1*
%doc %{_mandir}/*/man1/winemaker.1*
%doc %{_mandir}/man1/widl.1*
%doc %{_mandir}/man1/winebuild.1.*
%doc %{_mandir}/man1/winedump.1*
%doc %{_mandir}/man1/wineg++.1*
%doc %{_mandir}/man1/winegcc.1*
%doc %{_mandir}/man1/winecpp.1.*
%doc %{_mandir}/man1/wmc.1*
%doc %{_mandir}/man1/wrc.1*

%ifarch x86_64
%files 32bit-build-deps

openSUSE Build Service is sponsored by