]> git.pld-linux.org Git - packages/xorg-xserver-Xdmx.git/commitdiff
- last version of Xdmx based on xorg-xserver-server.spec version 1.20.13
authorJakub Bogusz <qboosh@pld-linux.org>
Wed, 3 Nov 2021 20:56:42 +0000 (21:56 +0100)
committerJakub Bogusz <qboosh@pld-linux.org>
Wed, 3 Nov 2021 21:01:12 +0000 (22:01 +0100)
110_nvidia_slowdow_fix.patch [new file with mode: 0644]
xorg-xserver-Xdmx.spec [new file with mode: 0644]
xorg-xserver-server-builtin-SHA1.patch [new file with mode: 0644]

diff --git a/110_nvidia_slowdow_fix.patch b/110_nvidia_slowdow_fix.patch
new file mode 100644 (file)
index 0000000..f04c0ae
--- /dev/null
@@ -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-Xdmx.spec b/xorg-xserver-Xdmx.spec
new file mode 100644 (file)
index 0000000..616bb5c
--- /dev/null
@@ -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/xorg-xserver-server-builtin-SHA1.patch b/xorg-xserver-server-builtin-SHA1.patch
new file mode 100644 (file)
index 0000000..19be640
--- /dev/null
@@ -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@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@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 */
++
This page took 0.102688 seconds and 4 git commands to generate.