File tigervnc.spec of Package tigervnc.20174

#
# spec file for package tigervnc
#
# Copyright (c) 2021 SUSE LLC
#
# 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 https://bugs.opensuse.org/
#


%define vncgroup vnc
%define vncuser vnc

%define tlskey  %{_sysconfdir}/vnc/tls.key
%define tlscert %{_sysconfdir}/vnc/tls.cert

Name:           tigervnc
Version:        1.6.0
Release:        0
Obsoletes:      tightvnc <= 1.3.9
Provides:       tightvnc = 1.3.9.5
Provides:       vnc
BuildRequires:  Mesa-devel
BuildRequires:  autoconf
BuildRequires:  automake
BuildRequires:  cmake
BuildRequires:  fltk-devel
BuildRequires:  gcc-c++
BuildRequires:  gcc-c++
BuildRequires:  java-devel
BuildRequires:  jpackage-utils
BuildRequires:  libjpeg-devel
BuildRequires:  libopenssl-devel
BuildRequires:  libtool
BuildRequires:  nasm
BuildRequires:  xorg-x11-server-sdk
BuildRequires:  xorg-x11-server-source >= 7.6_1.18.3
BuildRequires:  pkgconfig(x11)
BuildRequires:  pkgconfig(xext)
BuildRequires:  pkgconfig(xproto)
BuildRequires:  pkgconfig(xtst)
# Because of keytool to build java client
BuildRequires:  libgcrypt-devel
BuildRequires:  libgpg-error-devel
BuildRequires:  mozilla-nss
BuildRequires:  pam-devel
BuildRequires:  pkg-config
BuildRequires:  xmlto
BuildRequires:  xorg-x11-libICE-devel
BuildRequires:  xorg-x11-libSM-devel
BuildRequires:  pkgconfig(bigreqsproto) >= 1.1.0
BuildRequires:  pkgconfig(compositeproto) >= 0.4
BuildRequires:  pkgconfig(damageproto) >= 1.1
BuildRequires:  pkgconfig(dri)
BuildRequires:  pkgconfig(fixesproto) >= 4.1
BuildRequires:  pkgconfig(fontsproto)
BuildRequires:  pkgconfig(fontutil)
BuildRequires:  pkgconfig(gl)
BuildRequires:  pkgconfig(glproto)
BuildRequires:  pkgconfig(gnutls)
BuildRequires:  pkgconfig(inputproto)  >= 1.9.99.902
BuildRequires:  pkgconfig(kbproto) >= 1.0.3
BuildRequires:  pkgconfig(libtasn1)
BuildRequires:  pkgconfig(openssl)
BuildRequires:  pkgconfig(pciaccess) >= 0.8.0
BuildRequires:  pkgconfig(pixman-1) >= 0.15.20
BuildRequires:  pkgconfig(presentproto) >= 1.0
BuildRequires:  pkgconfig(randrproto) >= 1.2.99.3
BuildRequires:  pkgconfig(recordproto) >= 1.13.99.1
BuildRequires:  pkgconfig(renderproto) >= 0.11
BuildRequires:  pkgconfig(resourceproto)
BuildRequires:  pkgconfig(scrnsaverproto) >= 1.1
BuildRequires:  pkgconfig(videoproto)
BuildRequires:  pkgconfig(xau)
BuildRequires:  pkgconfig(xcmiscproto) >= 1.2.0
BuildRequires:  pkgconfig(xdmcp)
BuildRequires:  pkgconfig(xextproto) >= 7.0.99.3
BuildRequires:  pkgconfig(xf86driproto) >= 2.1.1
BuildRequires:  pkgconfig(xfont) >= 1.4.2
BuildRequires:  pkgconfig(xineramaproto)
BuildRequires:  pkgconfig(xkbfile)
BuildRequires:  pkgconfig(xorg-macros) >= 1.14
BuildRequires:  pkgconfig(xproto)  >= 7.0.17
BuildRequires:  pkgconfig(xtrans) >= 1.2.2
BuildRequires:  pkgconfig(zlib)
Requires(post):   update-alternatives
Requires(postun): update-alternatives
URL:            http://tigervnc.org/
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
Summary:        A high-performance, platform-neutral implementation of VNC
# would need fixing to use fPIC in common/CMakeLists.txt
License:        GPL-2.0-only AND MIT
Group:          System/X11/Servers/XF86_4
ExcludeArch:    s390
Source1:        https://github.com/TigerVNC/tigervnc/archive/v%{version}.tar.gz
Source3:        vnc.xinetd
Source4:        10-libvnc.conf
Source5:        vnc-server.firewall
Source6:        vnc-httpd.firewall
Source7:        vnc_inetd_httpd
Source8:        vnc.reg
Source9:        vncpasswd.arg
Source10:       vnc.pam
Source11:       with-vnc-key.sh
Source12:       index.vnc
Patch1:         tigervnc-newfbsize.patch
Patch2:         tigervnc-clean-pressed-key-on-exit.patch
Patch3:         u_tigervnc-ignore-epipe-on-write.patch
Patch4:         n_tigervnc-date-time.patch
Patch5:         U_include-vencrypt-only-if-any-subtype-present.patch
Patch6:         u_tigervnc-cve-2014-8240.patch
Patch7:         u_xserver118.patch
Patch8:         u_tigervnc_update_default_vncxstartup.patch
Patch9:         u_add_allowoverride_parameter.patch
Patch10:        u_build_libXvnc_as_separate_library.patch
Patch11:        N_tigervnc_revert_fltk_1_3_3_requirements.patch
Patch12:        N_use-icewm.patch
Patch13:        u_tigervnc-show-unencrypted-warning.patch
Patch14:        U_tigervnc_clear_up_zlibinstream_reset_behaviour.patch
Patch15:        U_tigervnc-fix-buffer-overflow-in-ModifiablePixelBuffer-fillRect.patch
Patch16:        U_tigervnc-prevent-invalid-PixelBuffer-accesses.patch
Patch17:        U_tigervnc-check-invalid-RRE-rects.patch
Patch18:        U_tigervnc_proper_global_init_deinit_of_GnuTLS.patch
Patch19:        U_tigervnc-crop-cursor-before-calling-maskRect.patch
Patch20:        U_tigervnc-restore-cropping-API-to-maskRect.patch
Patch21:        U_tigervnc-delete-underlying-ssecurity-in-SSecurityVeNCrypt.patch
Patch22:        U_tigervnc-fix-checkNoWait-logic-in-SSecurityPlain.patch
Patch23:        U_tigervnc-fix-crash-from-integer-overflow-in-SMsgReader-readClientCutText.patch
Patch24:        U_tigervnc-limit-max-username-password-size-in-SSecurityPlain.patch
Patch25:        U_tigervnc-prevent-double-free-by-crafted-fences.patch
Patch26:        U_tigervnc-prevent-leak-of-SecurityServer-and-ClientServer.patch
Patch27:        U_tigervnc-better-check-for-screen-visibility.patch
Patch28:        U_tigervnc-limit-size-of-cursor-accepted-by-client.patch
Patch29:        U_allow_multiple_certs_with_same_dn_in_saved_certs_file.patch
Patch30:        U_handle_certificate_verification_for_saved_certs_correctly.patch
Patch31:        u_tigervnc-add-autoaccept-parameter.patch
Patch32:        U_tigervnc-fix-race-problem-with-detecting-listening-inetd-sockets.patch
Patch33:        n_java_fix_16bit_depth.patch
Patch41:        0001-Make-ZlibInStream-more-robust-against-failures.patch
Patch43:        0003-Restrict-PixelBuffer-dimensions-to-safe-values.patch
Patch44:        0004-Add-write-protection-to-OffsetPixelBuffer.patch
Patch45:        0005-Handle-empty-Tight-gradient-rects.patch
Patch46:        0006-Add-unit-test-for-PixelFormat-sanity-checks.patch
Patch47:        0007-Fix-depth-sanity-test-in-PixelFormat.patch
Patch48:        0008-Add-sanity-checks-for-PixelFormat-shift-values.patch
Patch49:        0009-Remove-unused-FixedMemOutStream.patch
Patch50:        0010-Use-size_t-for-lengths-in-stream-objects.patch
Patch51:        0011-Be-defensive-about-overflows-in-stream-objects.patch
Patch52:        0012-Add-unit-tests-for-PixelFormat.is888-detection.patch
Patch53:        0013-Handle-pixel-formats-with-odd-shift-values.patch
Patch60:        U_0001-Properly-store-certificate-exceptions.patch
Patch61:        U_Move-UserPasswordGetter-out-of-CConn.patch
Patch62:        U_0002-Properly-store-certificate-exceptions-in-Java-viewer.patch
Patch63:        tigervnc-FIPS-use-RFC7919.patch

%description
TigerVNC is a high-performance, platform-neutral implementation of VNC (Virtual Network Computing), 
a client/server application that allows users to launch and interact with graphical applications on remote machines. 
TigerVNC provides the levels of performance necessary to run 3D and video applications;
it attempts to maintain a common look and feel and re-use components, where possible, across the various platforms that it supports. 
TigerVNC also provides extensions for advanced authentication methods and TLS encryption.

%package -n xorg-x11-Xvnc
Requires(post): /usr/sbin/useradd
Requires(post): /usr/sbin/groupadd
# Needed to generate certificates
Requires:       openssl
# Needed to serve java applet
Requires:       python
Requires:       python-pyOpenSSL
Requires:       xauth
Requires:       xinetd
# Needed by vncserver script.
Requires:       icewm-lite
Requires:       xinit
Requires:       xkbcomp
Requires:       xkeyboard-config
Requires:       xorg-x11-fonts-core
# For the with-vnc-key.sh script
Requires:       /bin/hostname
Provides:       xorg-x11-Xvnc:/usr/lib/vnc/with-vnc-key.sh
Summary:        TigerVNC implementation of Xvnc
Group:          System/X11/Servers/XF86_4

%description -n xorg-x11-Xvnc
This is the TigerVNC implementation of Xvnc.

%package -n libXvnc1
Summary:        X extension to control VNC module
Group:          System/Libraries

%description -n libXvnc1
Xvnc extension allows X clients to read and change VNC configuration.

%package -n libXvnc-devel
Summary:        X extension to control VNC module
Group:          Development/Libraries/C and C++
Requires:       libXvnc1 = %version

%description -n libXvnc-devel
Xvnc extension allows X clients to read and change VNC configuration.

%prep
%setup -T -b1 -q
cp -r /usr/src/xserver/* unix/xserver/

%patch1 -p1
%patch2 -p1
%patch3 -p0
%patch4 -p1
%patch5 -p0
%patch6 -p1
%patch7 -p1
%patch8 -p1
%patch9 -p1
%patch10 -p1
%patch11 -p1
%patch12 -p1
%patch13 -p1
%patch14 -p1
%patch15 -p1
%patch16 -p1
%patch17 -p1
%patch18 -p1
%patch19 -p1
%patch20 -p1
%patch21 -p1
%patch22 -p1
%patch23 -p1
%patch24 -p1
%patch25 -p1
%patch26 -p1
%patch27 -p1
%patch28 -p1
%patch29 -p1
%patch30 -p1
%patch32 -p1
%patch33 -p1
%patch41 -p1
%patch43 -p1
%patch44 -p1
%patch45 -p1
%patch46 -p1
%patch47 -p1
%patch48 -p1
%patch49 -p1
%patch50 -p1
%patch51 -p1
%patch52 -p1
%patch53 -p1
%patch60 -p1
%patch61 -p1
%patch62 -p1
%patch31 -p1
%patch63 -p1

pushd unix/xserver
# Please adjust version of org-x11-server-source in BuildRequires
# when changing ...
patch -p1 < ../xserver117.patch
popd

%build
export CXXFLAGS="%optflags -fPIC"
export CFLAGS="%optflags -fPIC"
# Build all tigervnc
cmake -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_TIMESTAMP="??-??-?? ??:??"
make %{?_smp_mflags}

# Build Xvnc server
pushd unix/xserver
autoreconf -fi
%configure \
        --disable-xorg --disable-xnest --disable-xvfb --disable-dmx \
        --disable-xwin --disable-xephyr --disable-kdrive --with-pic \
        --disable-static --disable-xinerama \
        --with-xkb-path="/usr/share/X11/xkb" \
        --with-xkb-output="/var/lib/xkb/compiled" \
        --enable-glx --enable-dri \
%ifnarch s390 s390x
	--enable-dri2 \
%endif
        --disable-config-dbus \
        --disable-config-hal \
        --disable-config-udev \
        --without-dtrace \
        --disable-unit-tests \
        --disable-devel-docs \
        --with-fontrootdir=/usr/share/fonts \
        --disable-selective-werror
make %{?_smp_mflags} V=1
popd

# Build java client
pushd java
cmake -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix}
make %{?_smp_mflags}
popd

%install

%make_install

mv $RPM_BUILD_ROOT/usr/bin/vncviewer $RPM_BUILD_ROOT/usr/bin/vncviewer-tigervnc
mv $RPM_BUILD_ROOT/usr/share/man/man1/vncviewer.1 $RPM_BUILD_ROOT/usr/share/man/man1/vncviewer-tigervnc.1

pushd unix/xserver
%make_install
popd

pushd java
mkdir -p $RPM_BUILD_ROOT%{_datadir}/vnc/classes
install -m755 VncViewer.jar $RPM_BUILD_ROOT%{_datadir}/vnc/classes
popd

install -D -m 644 %{SOURCE3} $RPM_BUILD_ROOT/etc/xinetd.d/vnc
%ifnarch s390 s390x
install -D -m 644 %{SOURCE4} $RPM_BUILD_ROOT/etc/X11/xorg.conf.d/10-libvnc.conf
%endif
install -D -m 644 %{SOURCE5} $RPM_BUILD_ROOT/etc/sysconfig/SuSEfirewall2.d/services/vnc-server
install -D -m 644 %{SOURCE6} $RPM_BUILD_ROOT/etc/sysconfig/SuSEfirewall2.d/services/vnc-httpd
install -D -m 755 %{SOURCE7} $RPM_BUILD_ROOT%{_bindir}/vnc_inetd_httpd
install -D -m 644 %{SOURCE8} $RPM_BUILD_ROOT/etc/slp.reg.d/vnc.reg
install -D -m 755 %{SOURCE9} $RPM_BUILD_ROOT%{_bindir}/vncpasswd.arg
install -D -m 644 %{SOURCE10} $RPM_BUILD_ROOT/etc/pam.d/vnc
install -D -m 644 %{SOURCE12} $RPM_BUILD_ROOT%{_datadir}/vnc/classes
ln -s -f %{_sysconfdir}/alternatives/vncviewer $RPM_BUILD_ROOT%{_bindir}/vncviewer
ln -s -f %{_sysconfdir}/alternatives/vncviewer.1.gz $RPM_BUILD_ROOT%{_mandir}/man1/vncviewer.1.gz

mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/vnc

mkdir -p $RPM_BUILD_ROOT%{_libexecdir}/vnc
install -D -m 755 %{SOURCE11} $RPM_BUILD_ROOT%{_libexecdir}/vnc

%find_lang '%{name}'

%pre -n xorg-x11-Xvnc
getent group %{vncgroup} > /dev/null || groupadd -r %{vncgroup} || :
getent passwd %{vncuser} > /dev/null || useradd -r -g %{vncgroup} -d /var/lib/empty -s /sbin/nologin -c "user for VNC" %{vncuser} || :
usermod -G shadow -a %{vncuser} || :

%post
%_sbindir/update-alternatives \
    --install %{_bindir}/vncviewer vncviewer %{_bindir}/vncviewer-tigervnc 20 \
    --slave %{_mandir}/man1/vncviewer.1.gz  vncviewer.1.gz  %{_mandir}/man1/vncviewer-tigervnc.1.gz

%postun
if [ "$1" = 0 ] ; then
   "%_sbindir/update-alternatives" --remove vncviewer /usr/bin/vncviewer-tigervnc
fi

%post -n libXvnc1 -p /sbin/ldconfig

%postun -n libXvnc1 -p /sbin/ldconfig

%files -f %{name}.lang
%defattr(-,root,root,-)
%ghost %{_bindir}/vncviewer
%{_bindir}/vncviewer-tigervnc
%doc LICENCE.TXT README.txt
%ghost %_mandir/man1/vncviewer.1.gz
%doc %_mandir/man1/vncviewer-tigervnc.1.gz
%ghost %_sysconfdir/alternatives/vncviewer
%ghost %_sysconfdir/alternatives/vncviewer.1.gz

%files -n xorg-x11-Xvnc
%defattr(-,root,root)

%exclude /usr/share/doc/tigervnc-%{version}
%doc LICENCE.TXT
%doc README.txt

%{_bindir}/Xvnc
%{_bindir}/vncconfig
%{_bindir}/vncpasswd
%{_bindir}/vncpasswd.arg
%{_bindir}/vncserver
%{_bindir}/x0vncserver
%{_bindir}/vnc_inetd_httpd

%exclude %{_mandir}/man1/Xserver.1*
%{_mandir}/man1/Xvnc.1*
%{_mandir}/man1/vncconfig.1*
%{_mandir}/man1/vncpasswd.1*
%{_mandir}/man1/vncserver.1*
%{_mandir}/man1/x0vncserver.1*

%exclude /usr/%{_lib}/xorg/protocol.txt
%exclude /usr/%{_lib}/xorg/modules/extensions/libvnc.la
%ifnarch s390 s390x
%{_libdir}/xorg/modules/extensions/libvnc.so
%else
%exclude %{_libdir}/xorg/modules
%exclude %{_libdir}/xorg/modules/extensions
%exclude %{_libdir}/xorg/modules/extensions/libvnc.so
%endif

%exclude /var/lib/xkb/compiled/README.compiled

%config %{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/vnc-server
%config %{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/vnc-httpd

%ifnarch s390 s390x
%config(noreplace) /etc/X11/xorg.conf.d/10-libvnc.conf
%else
%exclude /etc/X11/xorg.conf.d
%endif
%config(noreplace) /etc/xinetd.d/vnc
%dir /etc/slp.reg.d
%config(noreplace) /etc/slp.reg.d/vnc.reg

%config %{_sysconfdir}/pam.d/vnc

%exclude /usr/lib/debug/*
%exclude /usr/lib/debug/.*
%exclude /usr/src/debug

%doc java/com/tigervnc/vncviewer/README
%{_datadir}/vnc

%dir %attr(0755,%{vncuser},%{vncuser}) %{_sysconfdir}/vnc
%ghost %attr(0600,%{vncuser},%{vncuser}) %config(noreplace) %{tlskey}
%ghost %attr(0644,%{vncuser},%{vncuser}) %config(noreplace) %{tlscert}

%{_libexecdir}/vnc

%files -n libXvnc1
%defattr(-,root,root)
%{_libdir}/libXvnc.so.1*

%files -n libXvnc-devel
%defattr(-,root,root)
%{_libdir}/libXvnc.so
%{_includedir}/X11/extensions/Xvnc.h

%changelog
openSUSE Build Service is sponsored by