[packages/xorg-xserver-Xdmx: 1/2] - last version of Xdmx based on xorg-xserver-server.spec version 1.20.13

qboosh qboosh at pld-linux.org
Wed Nov 3 22:01:37 CET 2021


commit 1b16829cf9a8a439440fa9c9c70f76c9b2e4ecd7
Author: Jakub Bogusz <qboosh at pld-linux.org>
Date:   Wed Nov 3 21:56:42 2021 +0100

    - last version of Xdmx based on xorg-xserver-server.spec version 1.20.13

 110_nvidia_slowdow_fix.patch           | 179 ++++++++
 xorg-xserver-Xdmx.spec                 | 224 ++++++++++
 xorg-xserver-server-builtin-SHA1.patch | 752 +++++++++++++++++++++++++++++++++
 3 files changed, 1155 insertions(+)
---
diff --git a/xorg-xserver-Xdmx.spec b/xorg-xserver-Xdmx.spec
new file mode 100644
index 0000000..616bb5c
--- /dev/null
+++ b/xorg-xserver-Xdmx.spec
@@ -0,0 +1,224 @@
+# TODO
+# - consider XSELINUX by default
+#
+# Conditional build:
+%bcond_with	dbus		# D-BUS support for configuration (if no udev)
+%bcond_with	hal		# HAL support for configuration (if no udev)
+%bcond_without	udev		# UDEV support for configuration
+%bcond_without	dri2		# DRI2 extension
+%bcond_without	dri3		# DRI3 extension
+%bcond_without	record		# RECORD extension
+%bcond_with	xcsecurity	# XC-SECURITY extension (deprecated)
+%bcond_with	xf86bigfont	# XF86BigFont extension
+%bcond_with	xselinux	# SELinux extension
+%bcond_without	systemtap	# systemtap/dtrace probes
+%bcond_without	libunwind	# use libunwind for backtracing
+#
+
+%define	pixman_ver	0.30.0
+
+%ifarch x32
+%undefine	with_libunwind
+%endif
+
+Summary:	Xdmx - distributed multi-head X server
+Summary(pl.UTF-8):	Xdmx - rozproszony, wielomonitorowy serwer X
+Name:		xorg-xserver-Xdmx
+Version:	1.20.13
+Release:	1
+License:	MIT
+Group:		X11/Servers
+Source0:	https://xorg.freedesktop.org/releases/individual/xserver/xorg-server-%{version}.tar.xz
+# Source0-md5:	9acb2a51507e6056b09e3d3f19565419
+Patch0:		xorg-xserver-server-builtin-SHA1.patch
+Patch1:		110_nvidia_slowdow_fix.patch
+URL:		https://xorg.freedesktop.org/
+BuildRequires:	Mesa-dri-devel >= 7.8.1
+%{?with_dri2:BuildRequires:	Mesa-dri-devel >= 9.2.0}
+BuildRequires:	OpenGL-devel >= 3.0
+# for glx headers
+BuildRequires:	OpenGL-GLX-devel >= 1.3
+%{?with_xselinux:BuildRequires:	audit-libs-devel}
+BuildRequires:	autoconf >= 2.60
+BuildRequires:	automake
+BuildRequires:	cpp
+BuildRequires:	docbook-dtd43-xml
+#BuildRequires:	doxygen >= 1.6.1
+%if %{with hal} || %{with dbus}
+BuildRequires:	dbus-devel >= 1.0
+%endif
+%{?with_hal:BuildRequires:	hal-devel}
+BuildRequires:	libbsd-devel
+BuildRequires:	libdrm-devel >= 2.4.89
+%{?with_xselinux:BuildRequires:	libselinux-devel >= 2.0.86}
+BuildRequires:	libtirpc-devel
+BuildRequires:	libtool >= 2:2.2
+%{?with_libunwind:BuildRequires:	libunwind-devel}
+BuildRequires:	perl-base
+BuildRequires:	pixman-devel >= %{pixman_ver}
+BuildRequires:	pkgconfig >= 1:0.19
+BuildRequires:	pkgconfig(gl) >= 1.2
+%{?with_systemtap:BuildRequires:	systemtap-sdt-devel}
+BuildRequires:	systemd-devel >= 1:209
+BuildRequires:	tar >= 1:1.22
+BuildRequires:	udev-devel >= 1:143
+BuildRequires:	xmlto >= 0.0.20
+BuildRequires:	xorg-font-font-util >= 1.1
+BuildRequires:	xorg-lib-libX11-devel >= 1.6
+BuildRequires:	xorg-lib-libXau-devel
+BuildRequires:	xorg-lib-libXaw-devel
+BuildRequires:	xorg-lib-libXdmcp-devel
+BuildRequires:	xorg-lib-libXext-devel >= 1.0.99.4
+BuildRequires:	xorg-lib-libXfixes-devel
+BuildRequires:	xorg-lib-libXfont2-devel >= 2.0.0
+BuildRequires:	xorg-lib-libXi-devel >= 1.2.99.1
+BuildRequires:	xorg-lib-libXmu-devel
+BuildRequires:	xorg-lib-libXpm-devel
+BuildRequires:	xorg-lib-libXrender-devel
+BuildRequires:	xorg-lib-libXres-devel
+BuildRequires:	xorg-lib-libXt-devel >= 1.0.0
+BuildRequires:	xorg-lib-libXtst-devel >= 1.0.99.2
+BuildRequires:	xorg-lib-libdmx-devel >= 1.0.99.1
+BuildRequires:	xorg-lib-libpciaccess-devel >= 0.12.901
+BuildRequires:	xorg-lib-libxkbfile-devel
+BuildRequires:	xorg-lib-libxshmfence-devel >= 1.1
+BuildRequires:	xorg-lib-xtrans-devel >= 1.3.5
+BuildRequires:	xorg-proto-bigreqsproto-devel >= 1.1.0
+BuildRequires:	xorg-proto-compositeproto-devel >= 0.4
+BuildRequires:	xorg-proto-damageproto-devel >= 1.1
+BuildRequires:	xorg-proto-dmxproto-devel >= 2.2.99.1
+%{?with_dri2:BuildRequires:	xorg-proto-dri2proto-devel >= 2.8}
+BuildRequires:	xorg-proto-dri3proto-devel >= 1.2
+BuildRequires:	xorg-proto-fixesproto-devel >= 5.0
+BuildRequires:	xorg-proto-fontsproto-devel >= 2.1.3
+BuildRequires:	xorg-proto-glproto-devel >= 1.4.17
+BuildRequires:	xorg-proto-inputproto-devel >= 2.3
+BuildRequires:	xorg-proto-kbproto-devel >= 1.0.3
+BuildRequires:	xorg-proto-presentproto-devel >= 1.1
+BuildRequires:	xorg-proto-randrproto-devel >= 1.6.0
+%{?with_record:BuildRequires:	xorg-proto-recordproto-devel >= 1.13.99.1}
+BuildRequires:	xorg-proto-renderproto-devel >= 0.11
+BuildRequires:	xorg-proto-resourceproto-devel >= 1.2.0
+BuildRequires:	xorg-proto-scrnsaverproto-devel >= 1.1
+BuildRequires:	xorg-proto-videoproto-devel
+BuildRequires:	xorg-proto-xcmiscproto-devel >= 1.2.0
+BuildRequires:	xorg-proto-xextproto-devel >= 1:7.3.0
+%{?with_xf86bigfont:BuildRequires:	xorg-proto-xf86bigfontproto-devel >= 1.2.0}
+BuildRequires:	xorg-proto-xf86dgaproto-devel >= 2.0.99.1
+BuildRequires:	xorg-proto-xf86driproto-devel >= 2.1.0
+BuildRequires:	xorg-proto-xf86vidmodeproto-devel >= 2.2.99.1
+BuildRequires:	xorg-proto-xineramaproto-devel
+BuildRequires:	xorg-proto-xproto-devel >= 7.0.31
+BuildRequires:	xorg-sgml-doctools >= 1.8
+BuildRequires:	xorg-util-util-macros >= 1.14
+BuildRequires:	xz
+Requires:	pixman >= %{pixman_ver}
+Requires:	xorg-lib-libX11 >= 1.6
+Requires:	xorg-lib-libXext >= 1.0.99.4
+Requires:	xorg-lib-libXfont2 >= 2.0.0
+Requires:	xorg-lib-libXi >= 1.2.99.1
+Requires:	xorg-lib-libdmx >= 1.0.99.1
+Requires:	xorg-xserver-common >= 1.20.13
+BuildRoot:	%{tmpdir}/%{name}-%{version}-root-%(id -u -n)
+
+%define		tirpc_cflags	$(pkg-config --cflags libtirpc)
+%define		tirpc_libs	$(pkg-config --libs libtirpc)
+
+%description
+Xdmx - distributed multi-head X server.
+
+%description -l pl.UTF-8
+Xdmx - rozproszony, wielomonitorowy serwer X.
+
+%prep
+%setup -q -n xorg-server-%{version}
+%patch0 -p1
+%patch1 -p1
+
+# xserver uses pixman-1 API/ABI so put that explictly here
+sed -i -e 's#<pixman\.h#<pixman-1/pixman.h#g' ./fb/fb.h ./include/miscstruct.h ./render/picture.h
+
+# support __filemansuffix__ with "x" suffix (per FHS 2.3)
+%{__sed} -i -e 's,\.so man__filemansuffix__/,.so man5/,' hw/xfree86/man/*.man
+
+%{__sed} -i -e '1s|#!/usr/bin/python$|#!%{__python}|' config/fdi2iclass.py
+
+%build
+%{__libtoolize}
+%{__aclocal} -I m4
+%{__autoconf}
+%{__autoheader}
+%{__automake}
+%configure \
+	CPPFLAGS="%{rpmcppflags} %{tirpc_cflags}" \
+	LIBS="%{tirpc_libs}" \
+	--libexecdir=%{_libdir}/xorg \
+	--with-os-name="PLD/Linux" \
+	--with-os-vendor="PLD/Team" \
+	--with-default-font-path="%{_fontsdir}/misc,%{_fontsdir}/TTF,%{_fontsdir}/OTF,%{_fontsdir}/Type1,%{_fontsdir}/100dpi,%{_fontsdir}/75dpi" \
+	--with-xkb-output=/var/lib/xkb \
+	--disable-linux-acpi \
+	--disable-linux-apm \
+	%{?with_dbus:--enable-config-dbus} \
+	--enable-config-hal%{!?with_hal:=no} \
+	--enable-config-udev%{!?with_udev:=no} \
+	--enable-dga \
+	--enable-dmx \
+	--enable-dri2%{!?with_dri2:=no} \
+	--enable-dri3%{!?with_dri3:=no} \
+	--disable-kdrive \
+	%{?with_libunwind:--enable-libunwind} \
+	%{?with_record:--enable-record} \
+	--enable-secure-rpc \
+	--enable-suid-wrapper \
+	%{?with_xcsecurity:--enable-xcsecurity} \
+	--disable-xephyr \
+	%{?with_xf86bigfont:--enable-xf86bigfont} \
+	--disable-xfree86-utils \
+	--disable-xnest \
+	--disable-xorg \
+	%{?with_xselinux:--enable-xselinux} \
+	--disable-xvfb \
+	--disable-xwayland \
+	%{!?with_systemtap:--without-dtrace} \
+	--without-fop \
+	--with-systemd-daemon
+
+%{__make}
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+%{__make} install \
+	DESTDIR=$RPM_BUILD_ROOT
+
+%if %{with systemtap}
+%{__rm} $RPM_BUILD_ROOT%{_docdir}/xorg-server/Xserver-DTrace.*
+%endif
+
+# packaged in xorg-xserver-common built from xorg-xserver-server.spec
+%{__rm} $RPM_BUILD_ROOT%{_libdir}/xorg/protocol.txt
+%{__rm} $RPM_BUILD_ROOT%{_mandir}/man1/Xserver.1
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(644,root,root,755)
+%doc COPYING ChangeLog README.md
+%attr(755,root,root) %{_bindir}/Xdmx
+%attr(755,root,root) %{_bindir}/dmxaddinput
+%attr(755,root,root) %{_bindir}/dmxaddscreen
+%attr(755,root,root) %{_bindir}/dmxinfo
+%attr(755,root,root) %{_bindir}/dmxreconfig
+%attr(755,root,root) %{_bindir}/dmxresize
+%attr(755,root,root) %{_bindir}/dmxrminput
+%attr(755,root,root) %{_bindir}/dmxrmscreen
+%attr(755,root,root) %{_bindir}/dmxtodmx
+%attr(755,root,root) %{_bindir}/dmxwininfo
+%attr(755,root,root) %{_bindir}/vdltodmx
+%attr(755,root,root) %{_bindir}/xdmxconfig
+%{_mandir}/man1/Xdmx.1*
+%{_mandir}/man1/dmxtodmx.1*
+%{_mandir}/man1/vdltodmx.1*
+%{_mandir}/man1/xdmxconfig.1*
diff --git a/110_nvidia_slowdow_fix.patch b/110_nvidia_slowdow_fix.patch
new file mode 100644
index 0000000..f04c0ae
--- /dev/null
+++ b/110_nvidia_slowdow_fix.patch
@@ -0,0 +1,179 @@
+diff -ru a/fb/fbpict.c b/fb/fbpict.c
+--- a/fb/fbpict.c	2011-08-01 01:44:24.000000000 +0200
++++ b/fb/fbpict.c	2011-10-05 22:45:29.000000000 +0200
+@@ -364,7 +364,7 @@
+     ps->UnrealizeGlyph = fbUnrealizeGlyph;
+     ps->CompositeRects = miCompositeRects;
+     ps->RasterizeTrapezoid = fbRasterizeTrapezoid;
+-    ps->Trapezoids = fbTrapezoids;
++    ps->Trapezoids = miTrapezoids;
+     ps->AddTraps = fbAddTraps;
+     ps->AddTriangles = fbAddTriangles;
+     ps->Triangles = fbTriangles;
+diff -ru a/render/mipict.c b/render/mipict.c
+--- a/render/mipict.c	2011-04-04 05:19:50.000000000 +0200
++++ b/render/mipict.c	2011-10-05 22:02:53.000000000 +0200
+@@ -573,6 +573,67 @@
+     free(tris);
+ }
+ 
++void
++miTrapezoids (CARD8	    op,
++	      PicturePtr    pSrc,
++	      PicturePtr    pDst,
++	      PictFormatPtr maskFormat,
++	      INT16	    xSrc,
++	      INT16	    ySrc,
++	      int	    ntrap,
++	      xTrapezoid    *traps)
++{
++    ScreenPtr		pScreen = pDst->pDrawable->pScreen;
++    PictureScreenPtr    ps = GetPictureScreen(pScreen);
++
++    /*
++     * Check for solid alpha add
++     */
++    if (op == PictOpAdd && miIsSolidAlpha (pSrc))
++    {
++	for (; ntrap; ntrap--, traps++)
++	    (*ps->RasterizeTrapezoid) (pDst, traps, 0, 0);
++    } 
++    else if (maskFormat)
++    {
++	PicturePtr	pPicture;
++	BoxRec		bounds;
++	INT16		xDst, yDst;
++	INT16		xRel, yRel;
++	
++	xDst = traps[0].left.p1.x >> 16;
++	yDst = traps[0].left.p1.y >> 16;
++
++	miTrapezoidBounds (ntrap, traps, &bounds);
++	if (bounds.y1 >= bounds.y2 || bounds.x1 >= bounds.x2)
++	    return;
++	pPicture = miCreateAlphaPicture (pScreen, pDst, maskFormat,
++					 bounds.x2 - bounds.x1,
++					 bounds.y2 - bounds.y1);
++	if (!pPicture)
++	    return;
++	for (; ntrap; ntrap--, traps++)
++	    (*ps->RasterizeTrapezoid) (pPicture, traps, 
++				       -bounds.x1, -bounds.y1);
++	xRel = bounds.x1 + xSrc - xDst;
++	yRel = bounds.y1 + ySrc - yDst;
++	CompositePicture (op, pSrc, pPicture, pDst,
++			  xRel, yRel, 0, 0, bounds.x1, bounds.y1,
++			  bounds.x2 - bounds.x1,
++			  bounds.y2 - bounds.y1);
++	FreePicture (pPicture, 0);
++    }
++    else
++    {
++	if (pDst->polyEdge == PolyEdgeSharp)
++	    maskFormat = PictureMatchFormat (pScreen, 1, PICT_a1);
++	else
++	    maskFormat = PictureMatchFormat (pScreen, 8, PICT_a8);
++	for (; ntrap; ntrap--, traps++)
++	    miTrapezoids (op, pSrc, pDst, maskFormat, xSrc, ySrc, 1, traps);
++    }
++}
++
+ Bool
+ miPictureInit(ScreenPtr pScreen, PictFormatPtr formats, int nformats)
+ {
+@@ -656,7 +656,7 @@
+     ps->Composite = 0;          /* requires DDX support */
+     ps->Glyphs = miGlyphs;
+     ps->CompositeRects = miCompositeRects;
+-    ps->Trapezoids = 0;
++    ps->Trapezoids = miTrapezoids;
+     ps->Triangles = 0;
+ 
+     ps->RasterizeTrapezoid = 0; /* requires DDX support */
+diff -ru a/render/mipict.h b/render/mipict.h
+--- a/render/mipict.h	2011-04-04 05:19:50.000000000 +0200
++++ b/render/mipict.h	2011-10-05 22:06:19.000000000 +0200
+@@ -129,6 +129,23 @@
+ extern _X_EXPORT void
+  miRenderPixelToColor(PictFormatPtr pPict, CARD32 pixel, xRenderColor * color);
+ 
++extern _X_EXPORT PicturePtr
++miCreateAlphaPicture (ScreenPtr	    pScreen, 
++		      PicturePtr    pDst,
++		      PictFormatPtr pPictFormat,
++		      CARD16	    width,
++		      CARD16	    height);
++
++extern _X_EXPORT void
++miTrapezoids (CARD8	    op,
++	      PicturePtr    pSrc,
++	      PicturePtr    pDst,
++	      PictFormatPtr maskFormat,
++	      INT16	    xSrc,
++	      INT16	    ySrc,
++	      int	    ntrap,
++	      xTrapezoid    *traps);
++
+ extern _X_EXPORT Bool
+  miIsSolidAlpha(PicturePtr pSrc);
+ 
+diff -ru a/render/mitrap.c b/render/mitrap.c
+--- a/render/mitrap.c	2011-04-04 05:19:50.000000000 +0200
++++ b/render/mitrap.c	2011-10-05 22:05:29.000000000 +0200
+@@ -34,6 +34,55 @@
+ #include "picturestr.h"
+ #include "mipict.h"
+ 
++PicturePtr
++miCreateAlphaPicture (ScreenPtr	    pScreen, 
++		      PicturePtr    pDst,
++		      PictFormatPtr pPictFormat,
++		      CARD16	    width,
++		      CARD16	    height)
++{
++    PixmapPtr	    pPixmap;
++    PicturePtr	    pPicture;
++    GCPtr	    pGC;
++    int		    error;
++    xRectangle	    rect;
++
++    if (width > 32767 || height > 32767)
++	return 0;
++
++    if (!pPictFormat)
++    {
++	if (pDst->polyEdge == PolyEdgeSharp)
++	    pPictFormat = PictureMatchFormat (pScreen, 1, PICT_a1);
++	else
++	    pPictFormat = PictureMatchFormat (pScreen, 8, PICT_a8);
++	if (!pPictFormat)
++	    return 0;
++    }
++
++    pPixmap = (*pScreen->CreatePixmap) (pScreen, width, height, 
++					pPictFormat->depth, 0);
++    if (!pPixmap)
++	return 0;
++    pGC = GetScratchGC (pPixmap->drawable.depth, pScreen);
++    if (!pGC)
++    {
++	(*pScreen->DestroyPixmap) (pPixmap);
++	return 0;
++    }
++    ValidateGC (&pPixmap->drawable, pGC);
++    rect.x = 0;
++    rect.y = 0;
++    rect.width = width;
++    rect.height = height;
++    (*pGC->ops->PolyFillRect)(&pPixmap->drawable, pGC, 1, &rect);
++    FreeScratchGC (pGC);
++    pPicture = CreatePicture (0, &pPixmap->drawable, pPictFormat,
++			      0, 0, serverClient, &error);
++    (*pScreen->DestroyPixmap) (pPixmap);
++    return pPicture;
++}
++
+ static xFixed
+ miLineFixedX(xLineFixed * l, xFixed y, Bool ceil)
+ {
+
diff --git a/xorg-xserver-server-builtin-SHA1.patch b/xorg-xserver-server-builtin-SHA1.patch
new file mode 100644
index 0000000..19be640
--- /dev/null
+++ b/xorg-xserver-server-builtin-SHA1.patch
@@ -0,0 +1,752 @@
+diff -urN xorg-server-1.17.0.org/configure.ac xorg-server-1.17.0/configure.ac
+--- xorg-server-1.17.0.org/configure.ac	2015-02-02 07:40:17.000000000 +0100
++++ xorg-server-1.17.0/configure.ac	2015-02-04 19:34:23.458568095 +0100
+@@ -1544,7 +1544,7 @@
+ 
+ if test "x$SPECIAL_DTRACE_OBJECTS" = "xyes" ; then
+   DIX_LIB='$(top_builddir)/dix/dix.O'
+-  OS_LIB='$(top_builddir)/os/os.O $(SHA1_LIBS) $(DLOPEN_LIBS) $(LIBUNWIND_LIBS)'
++  OS_LIB='$(top_builddir)/os/os.O $(DLOPEN_LIBS) $(LIBUNWIND_LIBS)'
+ else
+   DIX_LIB='$(top_builddir)/dix/libdix.la'
+   OS_LIB='$(top_builddir)/os/libos.la'
+@@ -1566,124 +1566,6 @@
+ MIEXT_SYNC_LIB='$(top_builddir)/miext/sync/libsync.la'
+ CORE_INCS='-I$(top_srcdir)/include -I$(top_builddir)/include'
+ 
+-# SHA1 hashing
+-AC_ARG_WITH([sha1],
+-            [AS_HELP_STRING([--with-sha1=libc|libmd|libnettle|libgcrypt|libcrypto|libsha1|CommonCrypto|CryptoAPI],
+-                            [choose SHA1 implementation])])
+-AC_CHECK_FUNC([SHA1Init], [HAVE_SHA1_IN_LIBC=yes])
+-if test "x$with_sha1" = x && test "x$HAVE_SHA1_IN_LIBC" = xyes; then
+-	with_sha1=libc
+-fi
+-if test "x$with_sha1" = xlibc && test "x$HAVE_SHA1_IN_LIBC" != xyes; then
+-	AC_MSG_ERROR([libc requested but not found])
+-fi
+-if test "x$with_sha1" = xlibc; then
+-	AC_DEFINE([HAVE_SHA1_IN_LIBC], [1],
+-		[Use libc SHA1 functions])
+-	SHA1_LIBS=""
+-fi
+-AC_CHECK_FUNC([CC_SHA1_Init], [HAVE_SHA1_IN_COMMONCRYPTO=yes])
+-if test "x$with_sha1" = x && test "x$HAVE_SHA1_IN_COMMONCRYPTO" = xyes; then
+-	with_sha1=CommonCrypto
+-fi
+-if test "x$with_sha1" = xCommonCrypto && test "x$HAVE_SHA1_IN_COMMONCRYPTO" != xyes; then
+-	AC_MSG_ERROR([CommonCrypto requested but not found])
+-fi
+-if test "x$with_sha1" = xCommonCrypto; then
+-	AC_DEFINE([HAVE_SHA1_IN_COMMONCRYPTO], [1],
+-		[Use CommonCrypto SHA1 functions])
+-	SHA1_LIBS=""
+-fi
+-dnl stdcall functions cannot be tested with AC_CHECK_LIB
+-AC_CHECK_HEADER([wincrypt.h], [HAVE_SHA1_IN_CRYPTOAPI=yes], [], [#include <windows.h>])
+-if test "x$with_sha1" = x && test "x$HAVE_SHA1_IN_CRYPTOAPI" = xyes; then
+-	with_sha1=CryptoAPI
+-fi
+-if test "x$with_sha1" = xCryptoAPI && test "x$HAVE_SHA1_IN_CRYPTOAPI" != xyes; then
+-	AC_MSG_ERROR([CryptoAPI requested but not found])
+-fi
+-if test "x$with_sha1" = xCryptoAPI; then
+-	AC_DEFINE([HAVE_SHA1_IN_CRYPTOAPI], [1],
+-		[Use CryptoAPI SHA1 functions])
+-	SHA1_LIBS=""
+-fi
+-AC_CHECK_LIB([md], [SHA1Init], [HAVE_LIBMD=yes])
+-if test "x$with_sha1" = x && test "x$HAVE_LIBMD" = xyes; then
+-	with_sha1=libmd
+-fi
+-if test "x$with_sha1" = xlibmd && test "x$HAVE_LIBMD" != xyes; then
+-	AC_MSG_ERROR([libmd requested but not found])
+-fi
+-if test "x$with_sha1" = xlibmd; then
+-	AC_DEFINE([HAVE_SHA1_IN_LIBMD], [1],
+-	          [Use libmd SHA1 functions])
+-	SHA1_LIBS=-lmd
+-fi
+-PKG_CHECK_MODULES([LIBSHA1], [libsha1], [HAVE_LIBSHA1=yes], [HAVE_LIBSHA1=no])
+-if test "x$with_sha1" = x && test "x$HAVE_LIBSHA1" = xyes; then
+-   with_sha1=libsha1
+-fi
+-if test "x$with_sha1" = xlibsha1 && test "x$HAVE_LIBSHA1" != xyes; then
+-	AC_MSG_ERROR([libsha1 requested but not found])
+-fi
+-if test "x$with_sha1" = xlibsha1; then
+-	AC_DEFINE([HAVE_SHA1_IN_LIBSHA1], [1],
+-	          [Use libsha1 for SHA1])
+-	SHA1_LIBS=-lsha1
+-fi
+-AC_CHECK_LIB([nettle], [nettle_sha1_init], [HAVE_LIBNETTLE=yes])
+-if test "x$with_sha1" = x && test "x$HAVE_LIBNETTLE" = xyes; then
+-	with_sha1=libnettle
+-fi
+-if test "x$with_sha1" = xlibnettle && test "x$HAVE_LIBNETTLE" != xyes; then
+-	AC_MSG_ERROR([libnettle requested but not found])
+-fi
+-if test "x$with_sha1" = xlibnettle; then
+-	AC_DEFINE([HAVE_SHA1_IN_LIBNETTLE], [1],
+-	          [Use libnettle SHA1 functions])
+-	SHA1_LIBS=-lnettle
+-fi
+-AC_CHECK_LIB([gcrypt], [gcry_md_open], [HAVE_LIBGCRYPT=yes])
+-if test "x$with_sha1" = x && test "x$HAVE_LIBGCRYPT" = xyes; then
+-	with_sha1=libgcrypt
+-fi
+-if test "x$with_sha1" = xlibgcrypt && test "x$HAVE_LIBGCRYPT" != xyes; then
+-	AC_MSG_ERROR([libgcrypt requested but not found])
+-fi
+-if test "x$with_sha1" = xlibgcrypt; then
+-	AC_DEFINE([HAVE_SHA1_IN_LIBGCRYPT], [1],
+-	          [Use libgcrypt SHA1 functions])
+-	SHA1_LIBS=-lgcrypt
+-fi
+-# We don't need all of the OpenSSL libraries, just libcrypto
+-AC_CHECK_LIB([crypto], [SHA1_Init], [HAVE_LIBCRYPTO=yes])
+-PKG_CHECK_MODULES([OPENSSL], [openssl], [HAVE_OPENSSL_PKC=yes],
+-                  [HAVE_OPENSSL_PKC=no])
+-if test "x$HAVE_LIBCRYPTO" = xyes || test "x$HAVE_OPENSSL_PKC" = xyes; then
+-	if test "x$with_sha1" = x; then
+-		with_sha1=libcrypto
+-	fi
+-else
+-	if test "x$with_sha1" = xlibcrypto; then
+-		AC_MSG_ERROR([OpenSSL libcrypto requested but not found])
+-	fi
+-fi
+-if test "x$with_sha1" = xlibcrypto; then
+-	if test "x$HAVE_LIBCRYPTO" = xyes; then
+-		SHA1_LIBS=-lcrypto
+-	else
+-		SHA1_LIBS="$OPENSSL_LIBS"
+-		SHA1_CFLAGS="$OPENSSL_CFLAGS"
+-	fi
+-fi
+-AC_MSG_CHECKING([for SHA1 implementation])
+-if test "x$with_sha1" = x; then
+-	AC_MSG_ERROR([No suitable SHA1 implementation found])
+-fi
+-AC_MSG_RESULT([$with_sha1])
+-AC_SUBST(SHA1_LIBS)
+-AC_SUBST(SHA1_CFLAGS)
+-
+ PKG_CHECK_MODULES([XSERVERCFLAGS], [$REQUIRED_MODULES $REQUIRED_LIBS])
+ PKG_CHECK_MODULES([XSERVERLIBS], [$REQUIRED_LIBS])
+ 
+diff -urN xorg-server-1.17.0.org/include/dix-config.h.in xorg-server-1.17.0/include/dix-config.h.in
+--- xorg-server-1.17.0.org/include/dix-config.h.in	2014-10-09 14:15:31.000000000 +0200
++++ xorg-server-1.17.0/include/dix-config.h.in	2015-02-04 19:34:23.455234679 +0100
+@@ -152,27 +152,6 @@
+ /* Define to 1 if you have the `arc4random_buf' function. */
+ #undef HAVE_ARC4RANDOM_BUF
+ 
+-/* Define to use libc SHA1 functions */
+-#undef HAVE_SHA1_IN_LIBC
+-
+-/* Define to use CommonCrypto SHA1 functions */
+-#undef HAVE_SHA1_IN_COMMONCRYPTO
+-
+-/* Define to use CryptoAPI SHA1 functions */
+-#undef HAVE_SHA1_IN_CRYPTOAPI
+-
+-/* Define to use libmd SHA1 functions */
+-#undef HAVE_SHA1_IN_LIBMD
+-
+-/* Define to use libgcrypt SHA1 functions */
+-#undef HAVE_SHA1_IN_LIBGCRYPT
+-
+-/* Define to use libnettle SHA1 functions */
+-#undef HAVE_SHA1_IN_LIBNETTLE
+-
+-/* Define to use libsha1 for SHA1 */
+-#undef HAVE_SHA1_IN_LIBSHA1
+-
+ /* Define to 1 if you have the `shmctl64' function. */
+ #undef HAVE_SHMCTL64
+ 
+diff -urN xorg-server-1.17.0.org/os/Makefile.am xorg-server-1.17.0/os/Makefile.am
+--- xorg-server-1.17.0.org/os/Makefile.am	2013-11-12 00:15:00.000000000 +0100
++++ xorg-server-1.17.0/os/Makefile.am	2015-02-04 19:34:23.455234679 +0100
+@@ -21,7 +21,6 @@
+ 	ospoll.h	\
+ 	utils.c		\
+ 	xdmauth.c	\
+-	xsha1.c		\
+ 	xstrans.c	\
+ 	xprintf.c	\
+ 	$(XORG_SRCS)
+diff -urN xorg-server-1.17.0.org/os/xsha1.c xorg-server-1.17.0/os/xsha1.c
+--- xorg-server-1.17.0.org/os/xsha1.c	2015-01-18 00:42:52.000000000 +0100
++++ xorg-server-1.17.0/os/xsha1.c	2015-02-04 19:34:23.455234679 +0100
+@@ -23,270 +23,3 @@
+  * DEALINGS IN THE SOFTWARE.
+  */
+ 
+-#ifdef HAVE_DIX_CONFIG_H
+-#include <dix-config.h>
+-#endif
+-
+-#include "os.h"
+-#include "xsha1.h"
+-
+-#if defined(HAVE_SHA1_IN_LIBMD)  /* Use libmd for SHA1 */ \
+-	|| defined(HAVE_SHA1_IN_LIBC)   /* Use libc for SHA1 */
+-
+-#include <sha1.h>
+-
+-void *
+-x_sha1_init(void)
+-{
+-    SHA1_CTX *ctx = malloc(sizeof(*ctx));
+-
+-    if (!ctx)
+-        return NULL;
+-    SHA1Init(ctx);
+-    return ctx;
+-}
+-
+-int
+-x_sha1_update(void *ctx, void *data, int size)
+-{
+-    SHA1_CTX *sha1_ctx = ctx;
+-
+-    SHA1Update(sha1_ctx, data, size);
+-    return 1;
+-}
+-
+-int
+-x_sha1_final(void *ctx, unsigned char result[20])
+-{
+-    SHA1_CTX *sha1_ctx = ctx;
+-
+-    SHA1Final(result, sha1_ctx);
+-    free(sha1_ctx);
+-    return 1;
+-}
+-
+-#elif defined(HAVE_SHA1_IN_COMMONCRYPTO)        /* Use CommonCrypto for SHA1 */
+-
+-#include <CommonCrypto/CommonDigest.h>
+-
+-void *
+-x_sha1_init(void)
+-{
+-    CC_SHA1_CTX *ctx = malloc(sizeof(*ctx));
+-
+-    if (!ctx)
+-        return NULL;
+-    CC_SHA1_Init(ctx);
+-    return ctx;
+-}
+-
+-int
+-x_sha1_update(void *ctx, void *data, int size)
+-{
+-    CC_SHA1_CTX *sha1_ctx = ctx;
+-
+-    CC_SHA1_Update(sha1_ctx, data, size);
+-    return 1;
+-}
+-
+-int
+-x_sha1_final(void *ctx, unsigned char result[20])
+-{
+-    CC_SHA1_CTX *sha1_ctx = ctx;
+-
+-    CC_SHA1_Final(result, sha1_ctx);
+-    free(sha1_ctx);
+-    return 1;
+-}
+-
+-#elif defined(HAVE_SHA1_IN_CRYPTOAPI)        /* Use CryptoAPI for SHA1 */
+-
+-#define WIN32_LEAN_AND_MEAN
+-#include <X11/Xwindows.h>
+-#include <wincrypt.h>
+-
+-static HCRYPTPROV hProv;
+-
+-void *
+-x_sha1_init(void)
+-{
+-    HCRYPTHASH *ctx = malloc(sizeof(*ctx));
+-
+-    if (!ctx)
+-        return NULL;
+-    CryptAcquireContext(&hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);
+-    CryptCreateHash(hProv, CALG_SHA1, 0, 0, ctx);
+-    return ctx;
+-}
+-
+-int
+-x_sha1_update(void *ctx, void *data, int size)
+-{
+-    HCRYPTHASH *hHash = ctx;
+-
+-    CryptHashData(*hHash, data, size, 0);
+-    return 1;
+-}
+-
+-int
+-x_sha1_final(void *ctx, unsigned char result[20])
+-{
+-    HCRYPTHASH *hHash = ctx;
+-    DWORD len = 20;
+-
+-    CryptGetHashParam(*hHash, HP_HASHVAL, result, &len, 0);
+-    CryptDestroyHash(*hHash);
+-    CryptReleaseContext(hProv, 0);
+-    free(ctx);
+-    return 1;
+-}
+-
+-#elif defined(HAVE_SHA1_IN_LIBNETTLE)   /* Use libnettle for SHA1 */
+-
+-#include <nettle/sha.h>
+-
+-void *
+-x_sha1_init(void)
+-{
+-    struct sha1_ctx *ctx = malloc(sizeof(*ctx));
+-
+-    if (!ctx)
+-        return NULL;
+-    sha1_init(ctx);
+-    return ctx;
+-}
+-
+-int
+-x_sha1_update(void *ctx, void *data, int size)
+-{
+-    sha1_update(ctx, size, data);
+-    return 1;
+-}
+-
+-int
+-x_sha1_final(void *ctx, unsigned char result[20])
+-{
+-    sha1_digest(ctx, 20, result);
+-    free(ctx);
+-    return 1;
+-}
+-
+-#elif defined(HAVE_SHA1_IN_LIBGCRYPT)   /* Use libgcrypt for SHA1 */
+-
+-#include <gcrypt.h>
+-
+-void *
+-x_sha1_init(void)
+-{
+-    static int init;
+-    gcry_md_hd_t h;
+-    gcry_error_t err;
+-
+-    if (!init) {
+-        if (!gcry_check_version(NULL))
+-            return NULL;
+-        gcry_control(GCRYCTL_DISABLE_SECMEM, 0);
+-        gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
+-        init = 1;
+-    }
+-
+-    err = gcry_md_open(&h, GCRY_MD_SHA1, 0);
+-    if (err)
+-        return NULL;
+-    return h;
+-}
+-
+-int
+-x_sha1_update(void *ctx, void *data, int size)
+-{
+-    gcry_md_hd_t h = ctx;
+-
+-    gcry_md_write(h, data, size);
+-    return 1;
+-}
+-
+-int
+-x_sha1_final(void *ctx, unsigned char result[20])
+-{
+-    gcry_md_hd_t h = ctx;
+-
+-    memcpy(result, gcry_md_read(h, GCRY_MD_SHA1), 20);
+-    gcry_md_close(h);
+-    return 1;
+-}
+-
+-#elif defined(HAVE_SHA1_IN_LIBSHA1)     /* Use libsha1 */
+-
+-#include <libsha1.h>
+-
+-void *
+-x_sha1_init(void)
+-{
+-    sha1_ctx *ctx = malloc(sizeof(*ctx));
+-
+-    if (!ctx)
+-        return NULL;
+-    sha1_begin(ctx);
+-    return ctx;
+-}
+-
+-int
+-x_sha1_update(void *ctx, void *data, int size)
+-{
+-    sha1_hash(data, size, ctx);
+-    return 1;
+-}
+-
+-int
+-x_sha1_final(void *ctx, unsigned char result[20])
+-{
+-    sha1_end(result, ctx);
+-    free(ctx);
+-    return 1;
+-}
+-
+-#else                           /* Use OpenSSL's libcrypto */
+-
+-#include <stddef.h>             /* buggy openssl/sha.h wants size_t */
+-#include <openssl/sha.h>
+-
+-void *
+-x_sha1_init(void)
+-{
+-    int ret;
+-    SHA_CTX *ctx = malloc(sizeof(*ctx));
+-
+-    if (!ctx)
+-        return NULL;
+-    ret = SHA1_Init(ctx);
+-    if (!ret) {
+-        free(ctx);
+-        return NULL;
+-    }
+-    return ctx;
+-}
+-
+-int
+-x_sha1_update(void *ctx, void *data, int size)
+-{
+-    int ret;
+-    SHA_CTX *sha_ctx = ctx;
+-
+-    ret = SHA1_Update(sha_ctx, data, size);
+-    if (!ret)
+-        free(sha_ctx);
+-    return ret;
+-}
+-
+-int
+-x_sha1_final(void *ctx, unsigned char result[20])
+-{
+-    int ret;
+-    SHA_CTX *sha_ctx = ctx;
+-
+-    ret = SHA1_Final(result, sha_ctx);
+-    free(sha_ctx);
+-    return ret;
+-}
+-
+-#endif
+diff -urN xorg-server-1.17.0.org/render/glyph.c xorg-server-1.17.0/render/glyph.c
+--- xorg-server-1.17.0.org/render/glyph.c	2015-01-18 00:42:52.000000000 +0100
++++ xorg-server-1.17.0/render/glyph.c	2015-02-04 19:34:23.458568095 +0100
+@@ -26,8 +26,7 @@
+ #include <dix-config.h>
+ #endif
+ 
+-#include "xsha1.h"
+-
++#include "sha1.h"
+ #include "misc.h"
+ #include "scrnintstr.h"
+ #include "os.h"
+@@ -165,21 +164,13 @@
+ HashGlyph(xGlyphInfo * gi,
+           CARD8 *bits, unsigned long size, unsigned char sha1[20])
+ {
+-    void *ctx = x_sha1_init();
+-    int success;
++    SHA1_CTX ctx;
+ 
+-    if (!ctx)
+-        return BadAlloc;
++    SHA1Init (&ctx);
++    SHA1Update (&ctx, gi, sizeof (xGlyphInfo));
++    SHA1Update (&ctx, bits, size);
++    SHA1Final (sha1, &ctx);
+ 
+-    success = x_sha1_update(ctx, gi, sizeof(xGlyphInfo));
+-    if (!success)
+-        return BadAlloc;
+-    success = x_sha1_update(ctx, bits, size);
+-    if (!success)
+-        return BadAlloc;
+-    success = x_sha1_final(ctx, sha1);
+-    if (!success)
+-        return BadAlloc;
+     return Success;
+ }
+ 
+diff -urN xorg-server-1.17.0.org/render/Makefile.am xorg-server-1.17.0/render/Makefile.am
+--- xorg-server-1.17.0.org/render/Makefile.am	2013-06-18 18:03:42.000000000 +0200
++++ xorg-server-1.17.0/render/Makefile.am	2015-02-04 19:34:23.455234679 +0100
+@@ -13,8 +13,11 @@
+ 	mitrap.c	\
+ 	mitri.c		\
+ 	picture.c	\
++	sha1.c		\
+ 	render.c
+ 
+ if XORG
+ sdk_HEADERS = picture.h mipict.h glyphstr.h picturestr.h
+ endif
++
++EXTRA_DIST = sha1.h
+diff -urN xorg-server-1.17.0.org/render/sha1.c xorg-server-1.17.0/render/sha1.c
+--- xorg-server-1.17.0.org/render/sha1.c	1970-01-01 01:00:00.000000000 +0100
++++ xorg-server-1.17.0/render/sha1.c	2015-02-04 19:34:23.458568095 +0100
+@@ -0,0 +1,173 @@
++/*
++ * SHA-1 in C
++ * By Steve Reid <steve at edmweb.com>
++ * 100% Public Domain
++ *
++ * Test Vectors (from FIPS PUB 180-1)
++ * "abc"
++ *   A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D
++ * "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
++ *   84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1
++ * A million repetitions of "a"
++ *   34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F
++ */
++
++#include <sys/param.h>
++#include <string.h>
++#include <sha1.h>
++
++#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
++
++/*
++ * blk0() and blk() perform the initial expand.
++ * I got the idea of expanding during the round function from SSLeay
++ */
++#if BYTE_ORDER == LITTLE_ENDIAN
++# define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \
++    |(rol(block->l[i],8)&0x00FF00FF))
++#else
++# define blk0(i) block->l[i]
++#endif
++#define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \
++    ^block->l[(i+2)&15]^block->l[i&15],1))
++
++/*
++ * (R0+R1), R2, R3, R4 are the different operations (rounds) used in SHA1
++ */
++#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30);
++#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30);
++#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30);
++#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30);
++#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30);
++
++/*
++ * Hash a single 512-bit block. This is the core of the algorithm.
++ */
++void
++SHA1Transform(uint32_t state[5], const uint8_t buffer[SHA1_BLOCK_LENGTH])
++{
++	uint32_t a, b, c, d, e;
++	uint8_t workspace[SHA1_BLOCK_LENGTH];
++	typedef union {
++		uint8_t c[64];
++		uint32_t l[16];
++	} CHAR64LONG16;
++	CHAR64LONG16 *block = (CHAR64LONG16 *)workspace;
++
++	(void)memcpy(block, buffer, SHA1_BLOCK_LENGTH);
++
++	/* Copy context->state[] to working vars */
++	a = state[0];
++	b = state[1];
++	c = state[2];
++	d = state[3];
++	e = state[4];
++
++	/* 4 rounds of 20 operations each. Loop unrolled. */
++	R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3);
++	R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7);
++	R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11);
++	R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15);
++	R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);
++	R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
++	R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
++	R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
++	R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
++	R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
++	R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43);
++	R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47);
++	R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51);
++	R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55);
++	R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59);
++	R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63);
++	R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67);
++	R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71);
++	R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75);
++	R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79);
++
++	/* Add the working vars back into context.state[] */
++	state[0] += a;
++	state[1] += b;
++	state[2] += c;
++	state[3] += d;
++	state[4] += e;
++
++	/* Wipe variables */
++	a = b = c = d = e = 0;
++}
++
++
++/*
++ * SHA1Init - Initialize new context
++ */
++void
++SHA1Init(SHA1_CTX *context)
++{
++
++	/* SHA1 initialization constants */
++	context->count = 0;
++	context->state[0] = 0x67452301;
++	context->state[1] = 0xEFCDAB89;
++	context->state[2] = 0x98BADCFE;
++	context->state[3] = 0x10325476;
++	context->state[4] = 0xC3D2E1F0;
++}
++
++
++/*
++ * Run your data through this.
++ */
++void
++SHA1Update(SHA1_CTX *context, const uint8_t *data, size_t len)
++{
++	size_t i, j;
++
++	j = (size_t)((context->count >> 3) & 63);
++	context->count += (len << 3);
++	if ((j + len) > 63) {
++		(void)memcpy(&context->buffer[j], data, (i = 64-j));
++		SHA1Transform(context->state, context->buffer);
++		for ( ; i + 63 < len; i += 64)
++			SHA1Transform(context->state, (uint8_t *)&data[i]);
++		j = 0;
++	} else {
++		i = 0;
++	}
++	(void)memcpy(&context->buffer[j], &data[i], len - i);
++}
++
++
++/*
++ * Add padding and return the message digest.
++ */
++void
++SHA1Pad(SHA1_CTX *context)
++{
++	uint8_t finalcount[8];
++	uint i;
++
++	for (i = 0; i < 8; i++) {
++		finalcount[i] = (uint8_t)((context->count >>
++		    ((7 - (i & 7)) * 8)) & 255);	/* Endian independent */
++	}
++	SHA1Update(context, (uint8_t *)"\200", 1);
++	while ((context->count & 504) != 448)
++		SHA1Update(context, (uint8_t *)"\0", 1);
++	SHA1Update(context, finalcount, 8); /* Should cause a SHA1Transform() */
++}
++
++void
++SHA1Final(uint8_t digest[SHA1_DIGEST_LENGTH], SHA1_CTX *context)
++{
++	uint i;
++
++	SHA1Pad(context);
++	if (digest) {
++		for (i = 0; i < SHA1_DIGEST_LENGTH; i++) {
++			digest[i] = (uint8_t)
++			   ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255);
++		}
++		memset(context, 0, sizeof(*context));
++	}
++}
++
+diff -urN xorg-server-1.17.0.org/render/sha1.h xorg-server-1.17.0/render/sha1.h
+--- xorg-server-1.17.0.org/render/sha1.h	1970-01-01 01:00:00.000000000 +0100
++++ xorg-server-1.17.0/render/sha1.h	2015-02-04 19:34:23.458568095 +0100
+@@ -0,0 +1,63 @@
++/*
++ * SHA-1 in C
++ * By Steve Reid <steve at edmweb.com>
++ * 100% Public Domain
++ */
++
++#ifndef _SHA1_H
++#define _SHA1_H
++
++#include <stdint.h>
++#include <stddef.h>
++#include <unistd.h>
++
++
++#define	SHA1_BLOCK_LENGTH		64
++#define	SHA1_DIGEST_LENGTH		20
++#define	SHA1_DIGEST_STRING_LENGTH	(SHA1_DIGEST_LENGTH * 2 + 1)
++
++typedef struct {
++    uint32_t state[5];
++    uint64_t count;
++    uint8_t buffer[SHA1_BLOCK_LENGTH];
++} SHA1_CTX;
++
++#include <sys/cdefs.h>
++
++__BEGIN_DECLS
++void SHA1Init(SHA1_CTX *);
++void SHA1Pad(SHA1_CTX *);
++void SHA1Transform(uint32_t [5], const uint8_t [SHA1_BLOCK_LENGTH])
++	__attribute__((__bounded__(__minbytes__,1,5)))
++	__attribute__((__bounded__(__minbytes__,2,SHA1_BLOCK_LENGTH)));
++void SHA1Update(SHA1_CTX *, const uint8_t *, size_t)
++	__attribute__((__bounded__(__string__,2,3)));
++void SHA1Final(uint8_t [SHA1_DIGEST_LENGTH], SHA1_CTX *)
++	__attribute__((__bounded__(__minbytes__,1,SHA1_DIGEST_LENGTH)));
++char *SHA1End(SHA1_CTX *, char *)
++	__attribute__((__bounded__(__minbytes__,2,SHA1_DIGEST_STRING_LENGTH)));
++char *SHA1File(const char *, char *)
++	__attribute__((__bounded__(__minbytes__,2,SHA1_DIGEST_STRING_LENGTH)));
++char *SHA1FileChunk(const char *, char *, off_t, off_t)
++	__attribute__((__bounded__(__minbytes__,2,SHA1_DIGEST_STRING_LENGTH)));
++char *SHA1Data(const uint8_t *, size_t, char *)
++	__attribute__((__bounded__(__string__,1,2)))
++	__attribute__((__bounded__(__minbytes__,3,SHA1_DIGEST_STRING_LENGTH)));
++__END_DECLS
++
++#define HTONDIGEST(x) do {                                              \
++        x[0] = htonl(x[0]);                                             \
++        x[1] = htonl(x[1]);                                             \
++        x[2] = htonl(x[2]);                                             \
++        x[3] = htonl(x[3]);                                             \
++        x[4] = htonl(x[4]); } while (0)
++
++#define NTOHDIGEST(x) do {                                              \
++        x[0] = ntohl(x[0]);                                             \
++        x[1] = ntohl(x[1]);                                             \
++        x[2] = ntohl(x[2]);                                             \
++        x[3] = ntohl(x[3]);                                             \
++        x[4] = ntohl(x[4]); } while (0)
++
++#endif /* _SHA1_H */
++
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/xorg-xserver-Xdmx.git/commitdiff/4d53a4989264527b854becf239ebae11a3518b96



More information about the pld-cvs-commit mailing list