File wine.spec of Package wine

#
# spec file for package wine
#
# Copyright (c) 2016 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 http://bugs.opensuse.org/
#


# 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
%else
%define _libdir %_prefix/lib
%endif
%define _mandir %_prefix/man
%define _includedir %_prefix/include
%define _defaultdocdir %_prefix/share/doc
%endif

# 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

Name:           wine

# 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:  capi4linux-devel
BuildRequires:  cups-devel
BuildRequires:  dbus-1-devel
BuildRequires:  desktop-file-utils
BuildRequires:  FAudio-devel
BuildRequires:  flex
BuildRequires:  fontconfig-devel
BuildRequires:  freeglut-devel
BuildRequires:  freetype2-devel
BuildRequires:  giflib-devel
BuildRequires: 	krb5-devel
BuildRequires:  libOSMesa-devel
BuildRequires:	libcom_err-devel
BuildRequires:  libgnutls-devel
BuildRequires:  libgphoto2-devel
BuildRequires:  libgsm-devel
BuildRequires:  libjpeg-devel
BuildRequires:  liblcms2-devel
BuildRequires:  libpcap-devel
BuildRequires:  libpng-devel
BuildRequires:  libpulse-devel
BuildRequires:	libSDL2-devel
BuildRequires:  libtiff-devel
BuildRequires:  libudev-devel
BuildRequires:  libusb-1_0-devel
BuildRequires:	libXfixes-devel
BuildRequires:  libxml2-devel
BuildRequires:  libxslt-devel
BuildRequires:	mpg123-devel
BuildRequires:  ncurses-devel
BuildRequires:  opencl-headers
BuildRequires:  ocl-icd-devel
BuildRequires:  openldap2-devel
BuildRequires:  openssl-devel
BuildRequires:  pkgconfig
BuildRequires:  sane-backends-devel
BuildRequires:  update-desktop-files
BuildRequires:  valgrind-devel
BuildRequires:	vkd3d-devel
BuildRequires:  vulkan-devel
BuildRequires:  xorg-x11-devel
BuildRequires:  gstreamer-plugins-base-devel
BuildRequires:  libv4l-devel
BuildRequires:  openal-soft-devel
# for the PE DLLs
%ifarch x86_64
BuildRequires:  mingw64-cross-gcc
%endif
%ifarch %ix86
BuildRequires:  mingw32-cross-gcc
%endif

%define realver 6.0
Version:        6.0
Release:        0
Summary:        An MS Windows Emulator
License:        LGPL-2.1+
Group:          System/Emulators/PC
Url:            http://www.winehq.org/
Source0:        http://downloads.sourceforge.net/project/wine/Source/%{prjname}-%{realver}.tar.xz
Source41:       wine.keyring
Source42:       http://downloads.sourceforge.net/project/wine/Source/%{prjname}-%{realver}.tar.xz.sign
Patch0:         susepatches.patch
Source3:        README.SUSE
Source4:        wine.desktop
Source5:        ubuntuwine.tar.bz2
Source6:        wine-msi.desktop

Source7:        baselibs.conf
Source8:        wine-rpmlintrc

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

%if 0%{?suse_version} > 1120
%ifarch x86_64
Requires:       %{name}-32bit = %{version}
%endif
%endif
%ifarch %ix86 x86_64
Requires:       wine-gecko >= 2.24
%endif
# for ntlm_auth helper
Requires:       samba-winbind
# 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
# for winetricks:
Requires:       cabextract
Requires:       unzip
BuildRoot:      %{_tmppath}/%{name}-%{version}-build

%description
An MS Windows emulator, consisting of both runtime and also source
compatibility functions. You can run your MS executables with it, and
you can 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
libraries.

%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:       libgnutls-devel-32bit
Requires:       libgsm-devel-32bit
Requires:       libjpeg8-devel-32bit
Requires:       liblcms2-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.
%endif

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

#
cp %{SOURCE3} .
#

%build
# currently not building with LTO
%define _lto_cflags %{nil}
cat VERSION
%ifarch %ix86
# Steam wants proper %ebp frames to hook functions
export RPM_OPT_FLAGS=`echo %{optflags}|sed -e 's/-fomit-frame-pointer//'`
%endif
%if 0%{?suse_version} == 1110
if [ -f /usr/bin/gcc-4.6 ]; then
	export CC=gcc-4.6
fi
if [ -f /usr/bin/gcc-4.7 ]; then
	export CC=gcc-4.7
fi
if [ -f /usr/bin/gcc-4.8 ]; then
	export CC=gcc-4.8
fi
%else
export CC=gcc
%endif

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

CFLAGS="-DLDAP_DEPRECATED=1 $RPM_OPT_FLAGS" \
%configure \
	--with-x --verbose \
%ifarch x86_64
	--enable-win64 \
%endif

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"
  echo " +^%{_prefix}/lib/wine/*"
  %if %{pkgconflict}
    echo " conflicts \"wine-32bit\""
  %endif
  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\""
%endif
%if 0%{?suse_version} >= 1310
  echo " requires \"p11-kit-32bit\""
%endif
  echo "%name-devel"
  echo "  +^%{_prefix}/lib/wine/.*def"
) > %SOURCE7
cat %SOURCE7
%endif

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

%install
make install DESTDIR=$RPM_BUILD_ROOT
# 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 %{SOURCE1} %{buildroot}%{_bindir}/
#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 wine64.man dont get installed
mv %{buildroot}/%{_mandir}/pl.UTF-8 %{buildroot}/%{_mandir}/pl
%endif
#install -m 644 -c %{SOURCE11} %{buildroot}/%{_mandir}/man1/

%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
  done

  ( 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
  )
%endif

tar xjf %{SOURCE5}
# Copied from Ubuntu Wine out of debian.diff
# https://launchpad.net/~ubuntu-wine/+archive/ppa/+packages
# 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. %%name.menu, 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 wine.menu %{buildroot}%{_sysconfdir}/xdg/menus/applications-merged
  %endif

  # 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
%endif

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

%clean
rm -rf %{buildroot}

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

%files
%defattr(-,root,root)
%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
%endif
%doc ANNOUNCE AUTHORS LICENSE LICENSE.OLD README*
%{_bindir}/function_grep.pl
%{_bindir}/msidb
%{_bindir}/msiexec
%{_bindir}/notepad
%{_bindir}/regedit
%{_bindir}/regsvr32
%{_bindir}/wineboot
%{_bindir}/winecfg
%{_bindir}/wineconsole
%{_bindir}/winedbg
%{_bindir}/winefile
%{_bindir}/winemine
%{_bindir}/winepath
%{_bindir}/wineserver
%{_datadir}/wine
%{_datadir}/applications/wine.desktop
%ifnarch x86_64
%dir %doc %{_mandir}/pl
%dir %doc %{_mandir}/pl/man1
%doc %{_mandir}/man1/wine.1*
%endif
%doc %{_mandir}/man1/winedbg.1*
%doc %{_mandir}/man1/wineserver.1*
%ifnarch x86_64
%doc %{_mandir}/*/man1/wine.1*
%endif
%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
%endif
%{_datadir}/applications/*.desktop
%dir %{_datadir}/desktop-directories/
%{_datadir}/desktop-directories/*.directory
%dir %{_datadir}/icons/hicolor
%dir %{_datadir}/icons/hicolor/scalable
%dir %{_datadir}/icons/hicolor/scalable/apps
%{_datadir}/icons/hicolor/scalable/apps/*.svg
%ifarch %ix86
%{_bindir}/wine
%{_bindir}/wine-preloader
%endif
%ifarch x86_64
%{_bindir}/wine64
%{_bindir}/wine64-preloader
%endif
%ifarch ppc %arm
%{_bindir}/wine
%endif
%{_libdir}/wine/*.so
%{_libdir}/libwine.so*
%if 0%{?suse_version} >= 1500
%{_libdir}/wine/*.acm
%{_libdir}/wine/*.ax
%{_libdir}/wine/*.com
%{_libdir}/wine/*.cpl
%{_libdir}/wine/*.dll
%ifarch %ix86
%{_libdir}/wine/*.dll16
%{_libdir}/wine/*.drv16
%{_libdir}/wine/*.exe16
%{_libdir}/wine/*.mod16
%{_libdir}/wine/*.vxd
%endif
%{_libdir}/wine/*.drv
%{_libdir}/wine/*.exe
%{_libdir}/wine/*.ocx
%{_libdir}/wine/*.sys
%{_libdir}/wine/*.tlb
%endif
%dir %{_libdir}/wine
%dir %{_libdir}/wine/fakedlls
%{_libdir}/wine/fakedlls/*

%files devel
%defattr(-,root,root)
%if 0%{?changedprefix}
%dir %_includedir
%endif
%{_includedir}/wine
%{_bindir}/widl
%{_bindir}/winebuild
%{_bindir}/winecpp
%{_bindir}/winedump
%{_bindir}/wineg++
%{_bindir}/winegcc
%{_bindir}/winemaker
%{_bindir}/wmc
%{_bindir}/wrc
%{_libdir}/wine/*.def
%{_libdir}/wine/*.a
%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
%defattr(-,root,root)
%doc LICENSE
%endif

%changelog
openSUSE Build Service is sponsored by