commit 49a2def

hovercats  ·  2024-02-20 22:42:22 +0000 UTC
parent 862e875
repo/surf: add surf + mass import deps.
got meson building, so freetype-harfbuzz is now used, instead of having them separated.
theres still lots of things to clean up and adjust though.
310 files changed,  +10863, -173
+1, -1
1@@ -1,4 +1,4 @@
2-freetype
3+freetype-harfbuzz
4 imlib2
5 libX11
6 libXau
+31, -0
 1@@ -0,0 +1,31 @@
 2+#!/bin/sh -e
 3+
 4+export DESTDIR="$1"
 5+
 6+# Disable building 'cairo-sphinx'.
 7+sed -e "s/\(BUILD_SPHINX_TRUE=\)/\1'#'/" \
 8+    -e "s/\(BUILD_SPHINX_FALSE=\)'#'/\1=/" \
 9+    configure > _
10+mv -f _ configure
11+
12+# Disable building tests and documentation.
13+sed 's/boilerplate test perf//g;s/src doc/src/g' Makefile.in > _
14+mv -f _ Makefile.in
15+
16+sh ./configure \
17+    --prefix=/ \
18+    --disable-static \
19+    --enable-tee \
20+    --enable-gl \
21+    --enable-egl \
22+    --enable-xlib-xcb \
23+    --enable-xcb \
24+    --enable-xlib-xrender \
25+    --enable-xlib \
26+    --disable-trace \
27+    --disable-valgrind \
28+    --disable-gtk-doc-html \
29+    ax_cv_c_float_words_bigendian=no
30+
31+make
32+make install
+1, -0
1@@ -0,0 +1 @@
2+33e88a21de1fa52405f3952647b3bfd21d5d9d394e1abbc9ddb050a8ca09e35a74
+10, -0
 1@@ -0,0 +1,10 @@
 2+fontconfig
 3+freetype-harfbuzz
 4+glib
 5+libXext
 6+libXrender
 7+libpng
 8+mesa
 9+pixman
10+pkgconf make
11+zlib
+1, -0
1@@ -0,0 +1 @@
2+https://cairographics.org/releases/cairo-1.16.0.tar.xz
+1, -0
1@@ -0,0 +1 @@
2+1.16.0 1
+0, -63
 1@@ -1,63 +0,0 @@
 2-cmake
 3-________________________________________________________________________________
 4-
 5-CMake is cross-platform free and open-source software for build automation,
 6-testing, packaging and installation of software by using a compiler-independent
 7-method. CMake is not a build system but rather it generates another system's
 8-build files. It supports directory hierarchies and applications that depend on
 9-multiple libraries. It is used in conjunction with native build environments
10-such as Make, Qt Creator, Ninja, Android Studio, Apple's Xcode, and Microsoft
11-Visual Studio. [0]
12-
13-Upstream: https://cmake.org/
14-
15-
16-[000] Index
17-________________________________________________________________________________
18-
19-* Installation ........................................................... [001]
20-* Setup .................................................................. [002]
21-* Usage .................................................................. [003]
22-* References ............................................................. [004]
23-
24-
25-[001] Installation
26-________________________________________________________________________________
27-
28-+------------------------------------------------------------------------------+
29-|                                                                              |
30-|  $ kiss b cmake                                                              |
31-|                                                                              |
32-+------------------------------------------------------------------------------+
33-
34-
35-[002] Setup
36-________________________________________________________________________________
37-
38-Cmake supports to output methods on Linux; 'GNU Makefiles' and 'Ninja' with the
39-former being the default value. These values are set via the CMAKE_GENERATOR
40-environment variable.
41-
42-The distribution recommends this value be set to 'Ninja' as it offers a
43-performance improvement over make and works better with ccache. Set the
44-following environment variable in your .profile or shell runtime file.
45-
46-+------------------------------------------------------------------------------+
47-|                                                                              |
48-|  $ export CMAKE_GENERATOR=Ninja                                              |
49-|                                                                              |
50-+------------------------------------------------------------------------------+
51-
52-
53-[003] Usage
54-________________________________________________________________________________
55-
56-Refer to the command help output and online documentation. This package does
57-not yet provide manual pages.
58-
59-
60-[004] References
61-________________________________________________________________________________
62-
63-[0] https://en.wikipedia.org/wiki/CMake
64-
+0, -2
1@@ -1,4 +1,2 @@
2-#bzip2
3 expat
4-#linux-headers make
5 zlib
+1, -2
 1@@ -5,8 +5,7 @@
 2     --without-xmlwf \
 3     --without-examples \
 4     --without-tests \
 5-    --without-docbook \
 6-    --disable-shared
 7+    --without-docbook
 8 
 9 make
10 make DESTDIR="$1" install
+1, -1
1@@ -1,3 +1,3 @@
2 expat
3-freetype
4+freetype-harfbuzz
5 pkgconf make
+59, -0
 1@@ -0,0 +1,59 @@
 2+#!/bin/sh -e
 3+
 4+export DESTDIR="$1"
 5+
 6+
 7+build_freetype() (
 8+    cd freetype
 9+
10+    meson setup \
11+        -Dprefix=/ \
12+        -Ddefault_library=both \
13+        -Dbzip2=disabled \
14+        -Dzlib=disabled \
15+        "$@" \
16+        output
17+
18+    samu -C output
19+    samu -C output install
20+)
21+
22+build_harfbuzz() (
23+    cd harfbuzz
24+
25+# harfbuzz-icu is basically harfbuzz with icu and glib enabled.
26+# this avoids a new package for stuff that can already be enabled here, which
27+# makes much more sense imo. glib remains disabled untill I get to test this
28+# further.
29+kiss list icu  >/dev/null 2>&1 || icu_enabled=disabled
30+
31+    meson setup \
32+        -Dprefix=/ \
33+        -Dpkg_config_path="$DESTDIR/lib/pkgconfig" \
34+        -Ddefault_library=both \
35+        -Dglib=disabled \
36+        -Dfreetype=enabled \
37+        -Dgobject=disabled \
38+        -Dcairo=disabled \
39+        -Dbenchmark=disabled \
40+        -Dicu="${icu_enabled:-enabled}" \
41+        -Dtests=disabled \
42+        -Dintrospection=disabled \
43+        output
44+
45+    samu -C output
46+    samu -C output install
47+)
48+
49+# Point Freetype to the Harfbuzz files.
50+export CFLAGS="$CFLAGS -I$DESTDIR/include/harfbuzz"
51+export CFLAGS="$CFLAGS -L$DESTDIR/lib "
52+export PKG_CONFIG_PATH="$DESTDIR/lib/pkgconfig"
53+
54+# Point Harfbuzz to the Freetype files.
55+export CXXFLAGS="$CXXFLAGS -I$DESTDIR/include/freetype2"
56+export CXXFLAGS="$CXXFLAGS -L$DESTDIR/lib"
57+
58+build_freetype -Dharfbuzz=disabled
59+build_harfbuzz
60+build_freetype -Dharfbuzz=enabled  --reconfigure
R repo/freetype/checksums => repo/freetype-harfbuzz/checksums
+1, -0
1@@ -1 +1,2 @@
2 8dd2a91dad75886ad3fed8d096b37ccbc82ba12ec863ea97324c07ac184a6ac2a9
3+80670ee07210478e4233cd65cba67f155f3e05596e605cfb529862920cad73bb5e
R repo/freetype/depends => repo/freetype-harfbuzz/depends
+4, -1
 1@@ -1,4 +1,6 @@
 2+#icu
 3 expat
 4+icu
 5 libX11
 6 libXau
 7 libXdamage
 8@@ -7,8 +9,9 @@ libXfixes
 9 libXrender
10 libXxf86vm
11 libdrm
12+libpng
13 libxcb
14 libxshmfence
15-muon   make
16+meson   make
17 pixman
18 pkgconf make
+131, -0
  1@@ -0,0 +1,131 @@
  2+/var/db/kiss/installed/freetype-harfbuzz/version
  3+/var/db/kiss/installed/freetype-harfbuzz/sources
  4+/var/db/kiss/installed/freetype-harfbuzz/manifest
  5+/var/db/kiss/installed/freetype-harfbuzz/depends
  6+/var/db/kiss/installed/freetype-harfbuzz/checksums
  7+/var/db/kiss/installed/freetype-harfbuzz/build
  8+/var/db/kiss/installed/freetype-harfbuzz/
  9+/var/db/kiss/installed/
 10+/var/db/kiss/
 11+/var/db/
 12+/var/
 13+/usr/lib/pkgconfig/harfbuzz.pc
 14+/usr/lib/pkgconfig/harfbuzz-subset.pc
 15+/usr/lib/pkgconfig/harfbuzz-icu.pc
 16+/usr/lib/pkgconfig/freetype2.pc
 17+/usr/lib/pkgconfig/
 18+/usr/lib/libharfbuzz.so.0.60822.0
 19+/usr/lib/libharfbuzz.so.0
 20+/usr/lib/libharfbuzz.so
 21+/usr/lib/libharfbuzz.a
 22+/usr/lib/libharfbuzz-subset.so.0.60822.0
 23+/usr/lib/libharfbuzz-subset.so.0
 24+/usr/lib/libharfbuzz-subset.so
 25+/usr/lib/libharfbuzz-subset.a
 26+/usr/lib/libharfbuzz-icu.so.0.60822.0
 27+/usr/lib/libharfbuzz-icu.so.0
 28+/usr/lib/libharfbuzz-icu.so
 29+/usr/lib/libharfbuzz-icu.a
 30+/usr/lib/libfreetype.so.6.20.1
 31+/usr/lib/libfreetype.so.6
 32+/usr/lib/libfreetype.so
 33+/usr/lib/libfreetype.a
 34+/usr/lib/cmake/harfbuzz/harfbuzz-config.cmake
 35+/usr/lib/cmake/harfbuzz/
 36+/usr/lib/cmake/
 37+/usr/lib/
 38+/usr/include/harfbuzz/hb.h
 39+/usr/include/harfbuzz/hb-version.h
 40+/usr/include/harfbuzz/hb-unicode.h
 41+/usr/include/harfbuzz/hb-subset.h
 42+/usr/include/harfbuzz/hb-subset-repacker.h
 43+/usr/include/harfbuzz/hb-style.h
 44+/usr/include/harfbuzz/hb-shape.h
 45+/usr/include/harfbuzz/hb-shape-plan.h
 46+/usr/include/harfbuzz/hb-set.h
 47+/usr/include/harfbuzz/hb-paint.h
 48+/usr/include/harfbuzz/hb-ot.h
 49+/usr/include/harfbuzz/hb-ot-var.h
 50+/usr/include/harfbuzz/hb-ot-shape.h
 51+/usr/include/harfbuzz/hb-ot-name.h
 52+/usr/include/harfbuzz/hb-ot-metrics.h
 53+/usr/include/harfbuzz/hb-ot-meta.h
 54+/usr/include/harfbuzz/hb-ot-math.h
 55+/usr/include/harfbuzz/hb-ot-layout.h
 56+/usr/include/harfbuzz/hb-ot-font.h
 57+/usr/include/harfbuzz/hb-ot-deprecated.h
 58+/usr/include/harfbuzz/hb-ot-color.h
 59+/usr/include/harfbuzz/hb-map.h
 60+/usr/include/harfbuzz/hb-icu.h
 61+/usr/include/harfbuzz/hb-ft.h
 62+/usr/include/harfbuzz/hb-font.h
 63+/usr/include/harfbuzz/hb-features.h
 64+/usr/include/harfbuzz/hb-face.h
 65+/usr/include/harfbuzz/hb-draw.h
 66+/usr/include/harfbuzz/hb-deprecated.h
 67+/usr/include/harfbuzz/hb-cplusplus.hh
 68+/usr/include/harfbuzz/hb-common.h
 69+/usr/include/harfbuzz/hb-buffer.h
 70+/usr/include/harfbuzz/hb-blob.h
 71+/usr/include/harfbuzz/hb-aat.h
 72+/usr/include/harfbuzz/hb-aat-layout.h
 73+/usr/include/harfbuzz/
 74+/usr/include/freetype2/ft2build.h
 75+/usr/include/freetype2/freetype/tttags.h
 76+/usr/include/freetype2/freetype/tttables.h
 77+/usr/include/freetype2/freetype/ttnameid.h
 78+/usr/include/freetype2/freetype/t1tables.h
 79+/usr/include/freetype2/freetype/otsvg.h
 80+/usr/include/freetype2/freetype/ftwinfnt.h
 81+/usr/include/freetype2/freetype/fttypes.h
 82+/usr/include/freetype2/freetype/fttrigon.h
 83+/usr/include/freetype2/freetype/ftsystem.h
 84+/usr/include/freetype2/freetype/ftsynth.h
 85+/usr/include/freetype2/freetype/ftstroke.h
 86+/usr/include/freetype2/freetype/ftsnames.h
 87+/usr/include/freetype2/freetype/ftsizes.h
 88+/usr/include/freetype2/freetype/ftrender.h
 89+/usr/include/freetype2/freetype/ftpfr.h
 90+/usr/include/freetype2/freetype/ftparams.h
 91+/usr/include/freetype2/freetype/ftoutln.h
 92+/usr/include/freetype2/freetype/ftotval.h
 93+/usr/include/freetype2/freetype/ftmoderr.h
 94+/usr/include/freetype2/freetype/ftmodapi.h
 95+/usr/include/freetype2/freetype/ftmm.h
 96+/usr/include/freetype2/freetype/ftmac.h
 97+/usr/include/freetype2/freetype/ftlzw.h
 98+/usr/include/freetype2/freetype/ftlist.h
 99+/usr/include/freetype2/freetype/ftlcdfil.h
100+/usr/include/freetype2/freetype/ftincrem.h
101+/usr/include/freetype2/freetype/ftimage.h
102+/usr/include/freetype2/freetype/ftgzip.h
103+/usr/include/freetype2/freetype/ftgxval.h
104+/usr/include/freetype2/freetype/ftglyph.h
105+/usr/include/freetype2/freetype/ftgasp.h
106+/usr/include/freetype2/freetype/ftfntfmt.h
107+/usr/include/freetype2/freetype/fterrors.h
108+/usr/include/freetype2/freetype/fterrdef.h
109+/usr/include/freetype2/freetype/ftdriver.h
110+/usr/include/freetype2/freetype/ftcolor.h
111+/usr/include/freetype2/freetype/ftcid.h
112+/usr/include/freetype2/freetype/ftchapters.h
113+/usr/include/freetype2/freetype/ftcache.h
114+/usr/include/freetype2/freetype/ftbzip2.h
115+/usr/include/freetype2/freetype/ftbitmap.h
116+/usr/include/freetype2/freetype/ftbdf.h
117+/usr/include/freetype2/freetype/ftbbox.h
118+/usr/include/freetype2/freetype/ftadvanc.h
119+/usr/include/freetype2/freetype/freetype.h
120+/usr/include/freetype2/freetype/config/public-macros.h
121+/usr/include/freetype2/freetype/config/mac-support.h
122+/usr/include/freetype2/freetype/config/integer-types.h
123+/usr/include/freetype2/freetype/config/ftstdlib.h
124+/usr/include/freetype2/freetype/config/ftoption.h
125+/usr/include/freetype2/freetype/config/ftmodule.h
126+/usr/include/freetype2/freetype/config/ftheader.h
127+/usr/include/freetype2/freetype/config/ftconfig.h
128+/usr/include/freetype2/freetype/config/
129+/usr/include/freetype2/freetype/
130+/usr/include/freetype2/
131+/usr/include/
132+/usr/
+2, -0
1@@ -0,0 +1,2 @@
2+https://download-mirror.savannah.gnu.org/releases/freetype/freetype-2.13.2.tar.xz freetype
3+https://github.com/harfbuzz/harfbuzz/archive/8.2.2.tar.gz harfbuzz
+1, -0
1@@ -0,0 +1 @@
2+2.13.2+8.2.2 1
+0, -15
 1@@ -1,15 +0,0 @@
 2-#!/bin/sh -e
 3-
 4-export DESTDIR="$1"
 5-
 6-muon setup \
 7-    -Dprefix=/ \
 8-    -Ddefault_library=static \
 9-    -Dbzip2=disabled \
10-    -Dzlib=disabled \
11-    -Dpng=disabled \
12-    -Dtests=disabled \
13-    build
14-
15-samu -C build
16-muon -C build install
+0, -1
1@@ -1 +0,0 @@
2-https://download-mirror.savannah.gnu.org/releases/freetype/freetype-2.13.2.tar.xz
+0, -1
1@@ -1 +0,0 @@
2-2.13.2 1
+23, -0
 1@@ -0,0 +1,23 @@
 2+#!/bin/sh -e
 3+
 4+export DESTDIR="$1"
 5+
 6+meson setup \
 7+    -Dprefix=/ \
 8+    -Dsysconfdir=/etc \
 9+    -Dmandir=/share/man \
10+    -Ddebug=false \
11+    -Djpeg=enabled \
12+    -Dpng=enabled \
13+    -Dtiff=disabled \
14+    -Dgtk_doc=false \
15+    -Dman=false \
16+    -Dgio_sniffing=false \
17+    -Dtests=false \
18+    -Dinstalled_tests=false \
19+    -Dbuiltin_loaders=all \
20+    -Dwrap_mode=nofallback \
21+    output
22+
23+samu -C output
24+samu -C output install
+1, -0
1@@ -0,0 +1 @@
2+dbbdf280e8ebde20529f4de5d83d7a09d623961aa9065edea22de7a8580c098ff3
+6, -0
1@@ -0,0 +1,6 @@
2+glib
3+libX11
4+libjpeg-turbo
5+libpng
6+meson   make
7+pkgconf make
+1, -0
1@@ -0,0 +1 @@
2+https://download.gnome.org/sources/gdk-pixbuf/MAJOR.MINOR/gdk-pixbuf-VERSION.tar.xz
+1, -0
1@@ -0,0 +1 @@
2+https://download.gnome.org/sources/gdk-pixbuf/2.42/gdk-pixbuf-2.42.10.tar.xz
+1, -0
1@@ -0,0 +1 @@
2+2.42.10 1
+20, -0
 1@@ -0,0 +1,20 @@
 2+#!/bin/sh -e
 3+
 4+export DESTDIR="$1"
 5+
 6+# Don't build tests that fail due to `gnutls` not being built with `p11-kit`.
 7+sed "/subdir('tests')/d" tls/meson.build > _
 8+mv -f _ tls/meson.build
 9+
10+meson setup \
11+    -Dprefix=/usr \
12+    -Dsysconfdir=/etc \
13+    -Dlocalstatedir=/var \
14+    -Dlibproxy=disabled \
15+    -Dopenssl=disabled \
16+    -Dgnutls=enabled \
17+    -Dgnome_proxy=disabled \
18+    output
19+
20+samu -C output
21+samu -C output install
+1, -0
1@@ -0,0 +1 @@
2+bf9c42eb846bfcb7ea5a09013ce477f3a9b87e71299877054be27aef4b668d2b1d
+4, -0
1@@ -0,0 +1,4 @@
2+glib
3+gnutls
4+meson	make
5+pkgconf make
+1, -0
1@@ -0,0 +1 @@
2+https://ftp.gnome.org/pub/gnome/sources/glib-networking/2.78/glib-networking-2.78.0.tar.xz
+1, -0
1@@ -0,0 +1 @@
2+2.78.0 1
+21, -0
 1@@ -0,0 +1,21 @@
 2+#!/bin/sh -e
 3+
 4+export DESTDIR="$1"
 5+
 6+: > fuzzing/meson.build
 7+
 8+meson setup \
 9+    -Dprefix=/ \
10+    -Dlibexecdir=/lib \
11+    -Dlibmount=disabled \
12+    -Dinstalled_tests=false \
13+    -Dman=false \
14+    -Dtests=false \
15+    -Dlibelf=disabled \
16+    -Dnls=disabled \
17+    build
18+
19+samu -C build
20+samu -C build install
21+
22+rm -rf "$1/bin/gdbus"
+1, -0
1@@ -0,0 +1 @@
2+e0af02a9064dbf5553026ec7a1171905bf105340b9fa54ef628dbfcaf0f2049d47
+6, -0
1@@ -0,0 +1,6 @@
2+libffi
3+meson   make
4+pcre2
5+pkgconf make
6+python-packaging make
7+zlib
+1, -0
1@@ -0,0 +1 @@
2+https://download.gnome.org/sources/glib/2.79/glib-2.79.1.tar.xz
+1, -0
1@@ -0,0 +1 @@
2+2.79.1 1
+13, -0
 1@@ -0,0 +1,13 @@
 2+#!/bin/sh -e
 3+
 4+./configure \
 5+    --prefix=/ \
 6+    --disable-nls \
 7+    --with-nettle-mini \
 8+    --with-included-libtasn1 \
 9+    --with-included-unistring \
10+    --enable-static \
11+    --without-p11-kit
12+
13+make
14+make DESTDIR="$1" install
+1, -0
1@@ -0,0 +1 @@
2+e89da5395d978b3654775d1ffbd22592056107b7c1988ac202262ab9184bb64376
+2, -0
1@@ -0,0 +1,2 @@
2+nettle
3+pkgconf make
+1, -0
1@@ -0,0 +1 @@
2+https://www.gnupg.org/ftp/gcrypt/gnutls/v3.8/gnutls-3.8.3.tar.xz
+1, -0
1@@ -0,0 +1 @@
2+3.8.3 1
+12, -0
 1@@ -0,0 +1,12 @@
 2+#!/bin/sh -e
 3+
 4+export DESTDIR="$1"
 5+
 6+./configure \
 7+    --prefix=/
 8+
 9+make
10+make install
11+
12+# Remove HTML documentation.
13+rm -rf "$1/share/doc"
+1, -0
1@@ -0,0 +1 @@
2+7023ada08089bb46d7c000af7a6eaded9b4cf0ec2d1018d28a1a1425a4ec56804a
+1, -0
1@@ -0,0 +1 @@
2+https://ftp.gnu.org/gnu/gperf/gperf-VERSION.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+https://ftp.gnu.org/gnu/gperf/gperf-3.1.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+3.1 3
+46, -0
 1@@ -0,0 +1,46 @@
 2+#!/bin/sh -e
 3+
 4+export DESTDIR="$1"
 5+
 6+# Some packages in community/ requrire that gtk+3 have atk methods.
 7+# So if atk is installed, then we don't patch it out of gtk, just fribidi.
 8+if pkg-config --exists atk; then
 9+    patch -p1 < 01-no-fribidi.patch
10+else
11+    for p in *.patch; do
12+        patch -p1 < "$p"
13+    done
14+fi
15+
16+# Disable native language support, disable atk-bridge, don't compile schemas.
17+sed -e '/compile_schemas/s/true/false/' \
18+    -e '/ENABLE_NLS/s/1/0/' \
19+    -e "/subdir('po/d" \
20+    -e "/atk-bridge/d" \
21+    meson.build > _
22+mv -f _ meson.build
23+
24+# Remove atk-bridge code.
25+sed '/<atk-bridge.h>/d;/atk_bridge_adaptor_init/d' \
26+    gtk/a11y/gtkaccessibility.c > _
27+mv -f _ gtk/a11y/gtkaccessibility.c
28+
29+meson setup \
30+    -Dprefix=/ \
31+    -Dx11_backend=true \
32+    -Dwayland_backend=false \
33+    -Dxinerama=yes \
34+    -Dprint_backends=file,lpr \
35+    -Dcolord=no \
36+    -Dintrospection=false \
37+    -Ddemos=false \
38+    -Dexamples=false \
39+    -Dtests=false \
40+    output
41+
42+ninja -C output
43+ninja -C output install
44+
45+# We don't compile with librsvg which leads to this utility solely causing
46+# compiler errors for some packages. It has no use at all.
47+rm -f "$1/bin/gtk-encode-symbolic-svg"
+5, -0
1@@ -0,0 +1,5 @@
2+46777a428699d6e2643a6d4c0929168912b760011706cb95b67807bd777e005fe5
3+8b8bf563e74f720990030791f8e408db6099813a6290c38ab812231dbd10eb0cb8
4+763400831b2abe5eff95609826dc6769ab2a742d68d4ffd0b4a7209a7f1be2cdaa
5+09d6f9e59422724a1fead2bd2103ab0569f823da04e1411a338ae9892bedb2652e
6+05cf248d5d857ac14fd5904671ed53d08f125ebc74f0e81f270fb8186ddb000540
+19, -0
 1@@ -0,0 +1,19 @@
 2+cairo
 3+fontconfig
 4+freetype-harfbuzz
 5+gdk-pixbuf
 6+glib
 7+libXcomposite
 8+libXcursor
 9+libXdamage
10+libXext
11+libXi
12+libXinerama
13+libXrandr
14+libepoxy
15+libxkbcommon
16+mesa
17+meson   make
18+pango
19+pkgconf make
20+python  make
+5, -0
1@@ -0,0 +1,5 @@
2+https://download.gnome.org/sources/gtk+/MAJOR.MINOR/gtk+-VERSION.tar.xz
3+patches/01-no-fribidi.patch
4+patches/02-fix-firefox.patch
5+patches/03-no-accessibility.patch
6+patches/04-no-atk-extra.patch
+124, -0
  1@@ -0,0 +1,124 @@
  2+diff --git a/gdk/gdk.c b/gdk/gdk.c
  3+index f0869a6..2f3c039 100644
  4+--- a/gdk/gdk.c
  5++++ b/gdk/gdk.c
  6+@@ -44,7 +44,6 @@
  7+ #include <string.h>
  8+ #include <stdlib.h>
  9+ 
 10+-#include <fribidi.h>
 11+ 
 12+ 
 13+ /**
 14+@@ -1118,17 +1117,6 @@ gdk_disable_multidevice (void)
 15+ PangoDirection
 16+ gdk_unichar_direction (gunichar ch)
 17+ {
 18+-  FriBidiCharType fribidi_ch_type;
 19+-
 20+-  G_STATIC_ASSERT (sizeof (FriBidiChar) == sizeof (gunichar));
 21+-
 22+-  fribidi_ch_type = fribidi_get_bidi_type (ch);
 23+-
 24+-  if (!FRIBIDI_IS_STRONG (fribidi_ch_type))
 25+-    return PANGO_DIRECTION_NEUTRAL;
 26+-  else if (FRIBIDI_IS_RTL (fribidi_ch_type))
 27+-    return PANGO_DIRECTION_RTL;
 28+-  else
 29+     return PANGO_DIRECTION_LTR;
 30+ }
 31+ 
 32+diff --git a/gdk/meson.build b/gdk/meson.build
 33+index 4bb1bf2..9270c97 100644
 34+--- a/gdk/meson.build
 35++++ b/gdk/meson.build
 36+@@ -202,7 +202,6 @@ gdk_deps = [
 37+   pixbuf_dep,
 38+   cairo_dep,
 39+   pango_dep,
 40+-  fribidi_dep,
 41+   cairogobj_dep,
 42+   glib_dep,
 43+   epoxy_dep,
 44+diff --git a/gtk/gtkpango.c b/gtk/gtkpango.c
 45+index aaac4cc..a76ad57 100644
 46+--- a/gtk/gtkpango.c
 47++++ b/gtk/gtkpango.c
 48+@@ -25,7 +25,6 @@
 49+ #include "config.h"
 50+ #include "gtkpango.h"
 51+ #include <pango/pangocairo.h>
 52+-#include <fribidi.h>
 53+ #include "gtkintl.h"
 54+ 
 55+ #define GTK_TYPE_FILL_LAYOUT_RENDERER            (_gtk_fill_layout_renderer_get_type())
 56+@@ -1326,17 +1325,6 @@ _gtk_pango_attr_list_merge (PangoAttrList *into,
 57+ PangoDirection
 58+ _gtk_pango_unichar_direction (gunichar ch)
 59+ {
 60+-  FriBidiCharType fribidi_ch_type;
 61+-
 62+-  G_STATIC_ASSERT (sizeof (FriBidiChar) == sizeof (gunichar));
 63+-
 64+-  fribidi_ch_type = fribidi_get_bidi_type (ch);
 65+-
 66+-  if (!FRIBIDI_IS_STRONG (fribidi_ch_type))
 67+-    return PANGO_DIRECTION_NEUTRAL;
 68+-  else if (FRIBIDI_IS_RTL (fribidi_ch_type))
 69+-    return PANGO_DIRECTION_RTL;
 70+-  else
 71+     return PANGO_DIRECTION_LTR;
 72+ }
 73+ 
 74+diff --git a/gtk/meson.build b/gtk/meson.build
 75+index 79f4f0d..be51997 100644
 76+--- a/gtk/meson.build
 77++++ b/gtk/meson.build
 78+@@ -836,7 +836,6 @@ gtk_deps = [
 79+   pango_dep,
 80+   pangoft_dep,
 81+   harfbuzz_dep,
 82+-  fribidi_dep,
 83+   cairogobj_dep,
 84+   cairo_dep,
 85+   fontconfig_dep,
 86+diff --git a/meson.build b/meson.build
 87+index c599843..967a022 100644
 88+--- a/meson.build
 89++++ b/meson.build
 90+@@ -25,7 +25,6 @@ endif
 91+ 
 92+ glib_req           = '>= @0@.@1@.@2@'.format(glib_major_req, glib_minor_req, glib_micro_req)
 93+ pango_req          = '>= 1.41.0'
 94+-fribidi_req        = '>= 0.19.7'
 95+ atk_req            = '>= 2.35.1'
 96+ at_spi2_atk_req    = '>= 2.15.1'
 97+ cairo_req          = '>= 1.14.0'
 98+@@ -404,8 +403,6 @@ endif
 99+ 
100+ pango_dep      = dependency('pango', version: pango_req,
101+                             fallback : ['pango', 'libpango_dep'])
102+-fribidi_dep    = dependency('fribidi', version: fribidi_req,
103+-                            fallback : ['fribidi', 'libfribidi_dep'])
104+ 
105+ # Require PangoFT2 if on X11 or wayland
106+ require_pangoft2 = wayland_enabled or x11_enabled
107+@@ -927,8 +924,7 @@ endif
108+ 
109+ pkgconf.set('GDK_PRIVATE_PACKAGES',
110+             ' '.join(gio_packages + x11_pkgs + wayland_pkgs + cairo_backends +
111+-                     ['epoxy', epoxy_req] + cloudproviders_packages +
112+-                     ['fribidi', fribidi_req]))
113++                     ['epoxy', epoxy_req] + cloudproviders_packages))
114+ 
115+ gtk_packages = ' '.join([
116+     atk_dep.name(), atk_req,
117+@@ -941,7 +937,7 @@ pkgconf.set('GTK_PACKAGES', gtk_packages)
118+ # Requires.private
119+ pc_gdk_extra_libs += cairo_libs
120+ 
121+-gtk_private_packages = atk_pkgs + wayland_pkgs + ['epoxy', epoxy_req, 'fribidi', fribidi_req]
122++gtk_private_packages = atk_pkgs + wayland_pkgs + ['epoxy', epoxy_req]
123+ if wayland_enabled or x11_enabled
124+   gtk_private_packages += ['pangoft2']
125+ endif
+62, -0
 1@@ -0,0 +1,62 @@
 2+From f8e2e254c5a6cba2f6cf267bd8c3ce796779a2e8 Mon Sep 17 00:00:00 2001
 3+From: Ronan Pigott <rpigott@berkeley.edu>
 4+Date: Sun, 22 Aug 2021 01:54:39 -0700
 5+Subject: [PATCH] Revert "Revert "wayland: Push NULL buffer when hiding a
 6+ GdkWindow""
 7+
 8+wayland: Push NULL buffer when hiding a GdkWindow
 9+
10+This is how windows are hidden in xdg_shell stable.
11+
12+This reverts commit bbcc3ee45643ccdc25bc525b4d7f7daf6b25440a.
13+
14+Closes #4198
15+---
16+ gdk/wayland/gdkwindow-wayland.c | 11 +++++++----
17+ 1 file changed, 7 insertions(+), 4 deletions(-)
18+
19+diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c
20+index 2d7c42bd7a..07f77eb596 100644
21+--- a/gdk/wayland/gdkwindow-wayland.c
22++++ b/gdk/wayland/gdkwindow-wayland.c
23+@@ -3286,7 +3286,7 @@ unmap_popups_for_window (GdkWindow *window)
24+ }
25+
26+ static void
27+-gdk_wayland_window_hide_surface (GdkWindow *window)
28++gdk_wayland_window_clear_surface (GdkWindow *window)
29+ {
30+   GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (gdk_window_get_display (window));
31+   GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
32+@@ -3416,7 +3416,10 @@ gdk_wayland_window_hide_surface (GdkWindow *window)
33+ static void
34+ gdk_wayland_window_hide (GdkWindow *window)
35+ {
36+-  gdk_wayland_window_hide_surface (window);
37++  GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
38++
39++  wl_surface_attach (impl->display_server.wl_surface, NULL, 0, 0);
40++  wl_surface_commit (impl->display_server.wl_surface);
41+   _gdk_window_clear_update_area (window);
42+ }
43+
44+@@ -3430,7 +3433,7 @@ gdk_window_wayland_withdraw (GdkWindow *window)
45+
46+       g_assert (!GDK_WINDOW_IS_MAPPED (window));
47+
48+-      gdk_wayland_window_hide_surface (window);
49++      gdk_wayland_window_clear_surface (window);
50+     }
51+ }
52+
53+@@ -3751,7 +3754,7 @@ gdk_wayland_window_destroy (GdkWindow *window,
54+    */
55+   g_return_if_fail (!foreign_destroy);
56+
57+-  gdk_wayland_window_hide_surface (window);
58++  gdk_wayland_window_clear_surface (window);
59+ }
60+
61+ static void
62+--
63+GitLab
+4858, -0
   1@@ -0,0 +1,4858 @@
   2+--- a/gtk/a11y/gtkbooleancellaccessible.h
   3++++ b/gtk/a11y/gtkbooleancellaccessible.h
   4+@@ -22,7 +22,6 @@
   5+ #error "Only <gtk/gtk-a11y.h> can be included directly."
   6+ #endif
   7+ 
   8+-#include <atk/atk.h>
   9+ #include <gtk/a11y/gtkrenderercellaccessible.h>
  10+ 
  11+ G_BEGIN_DECLS
  12+--- a/gtk/a11y/gtkcellaccessible.h
  13++++ b/gtk/a11y/gtkcellaccessible.h
  14+@@ -22,7 +22,6 @@
  15+ #error "Only <gtk/gtk-a11y.h> can be included directly."
  16+ #endif
  17+ 
  18+-#include <atk/atk.h>
  19+ #include <gtk/gtk.h>
  20+ 
  21+ G_BEGIN_DECLS
  22+@@ -40,14 +39,11 @@
  23+ 
  24+ struct _GtkCellAccessible
  25+ {
  26+-  GtkAccessible parent;
  27+-
  28+   GtkCellAccessiblePrivate *priv;
  29+ };
  30+ 
  31+ struct _GtkCellAccessibleClass
  32+ {
  33+-  GtkAccessibleClass parent_class;
  34+   void (*update_cache) (GtkCellAccessible *cell,
  35+                         gboolean           emit_signal);
  36+ };
  37+--- a/gtk/a11y/gtkcontaineraccessibleprivate.h
  38++++ b/gtk/a11y/gtkcontaineraccessibleprivate.h
  39+@@ -23,10 +23,8 @@
  40+ G_BEGIN_DECLS
  41+ 
  42+ void            _gtk_container_accessible_add_child     (GtkContainerAccessible *accessible,
  43+-                                                         AtkObject              *child,
  44+                                                          gint                    index);
  45+ void            _gtk_container_accessible_remove_child  (GtkContainerAccessible *accessible,
  46+-                                                         AtkObject              *child,
  47+                                                          gint                    index);
  48+ void            _gtk_container_accessible_add           (GtkWidget              *parent,
  49+                                                          GtkWidget              *child);
  50+--- a/gtk/a11y/gtkimagecellaccessible.h
  51++++ b/gtk/a11y/gtkimagecellaccessible.h
  52+@@ -22,7 +22,6 @@
  53+ #error "Only <gtk/gtk-a11y.h> can be included directly."
  54+ #endif
  55+ 
  56+-#include <atk/atk.h>
  57+ #include <gtk/a11y/gtkrenderercellaccessible.h>
  58+ 
  59+ G_BEGIN_DECLS
  60+--- a/gtk/a11y/gtkrenderercellaccessible.h
  61++++ b/gtk/a11y/gtkrenderercellaccessible.h
  62+@@ -22,7 +22,6 @@
  63+ #error "Only <gtk/gtk-a11y.h> can be included directly."
  64+ #endif
  65+ 
  66+-#include <atk/atk.h>
  67+ #include <gtk/a11y/gtkcellaccessible.h>
  68+ 
  69+ G_BEGIN_DECLS
  70+@@ -52,9 +51,6 @@
  71+ 
  72+ GDK_AVAILABLE_IN_ALL
  73+ GType      gtk_renderer_cell_accessible_get_type     (void);
  74+-
  75+-GDK_AVAILABLE_IN_ALL
  76+-AtkObject *gtk_renderer_cell_accessible_new          (GtkCellRenderer * renderer);
  77+ 
  78+ G_END_DECLS
  79+ 
  80+--- a/gtk/a11y/gtktextcellaccessible.h
  81++++ b/gtk/a11y/gtktextcellaccessible.h
  82+@@ -22,7 +22,6 @@
  83+ #error "Only <gtk/gtk-a11y.h> can be included directly."
  84+ #endif
  85+ 
  86+-#include <atk/atk.h>
  87+ #include <gtk/a11y/gtkrenderercellaccessible.h>
  88+ 
  89+ G_BEGIN_DECLS
  90+--- a/gtk/a11y/gtktoplevelaccessible.h
  91++++ b/gtk/a11y/gtktoplevelaccessible.h
  92+@@ -22,8 +22,6 @@
  93+ #error "Only <gtk/gtk-a11y.h> can be included directly."
  94+ #endif
  95+ 
  96+-#include <atk/atk.h>
  97+-
  98+ G_BEGIN_DECLS
  99+ 
 100+ #define GTK_TYPE_TOPLEVEL_ACCESSIBLE               (gtk_toplevel_accessible_get_type ())
 101+--- a/gtk/a11y/gtkwidgetaccessible.h
 102++++ b/gtk/a11y/gtkwidgetaccessible.h
 103+@@ -39,15 +39,11 @@
 104+ 
 105+ struct _GtkWidgetAccessible
 106+ {
 107+-  GtkAccessible parent;
 108+-
 109+   GtkWidgetAccessiblePrivate *priv;
 110+ };
 111+ 
 112+ struct _GtkWidgetAccessibleClass
 113+ {
 114+-  GtkAccessibleClass parent_class;
 115+-
 116+   /*
 117+    * Signal handler for notify signal on GTK widget
 118+    */
 119+--- a/gtk/deprecated/gtkarrow.c
 120++++ b/gtk/deprecated/gtkarrow.c
 121+@@ -139,8 +139,6 @@
 122+                                                                P_("Amount of space used up by arrow"),
 123+                                                                0.0, 1.0, 0.7,
 124+                                                                GTK_PARAM_READABLE));
 125+-
 126+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_ARROW_ACCESSIBLE);
 127+ }
 128+ 
 129+ static void
 130+--- a/gtk/deprecated/gtkcolorsel.c
 131++++ b/gtk/deprecated/gtkcolorsel.c
 132+@@ -206,10 +206,6 @@
 133+ static void     default_change_palette_func             (GdkScreen         *screen,
 134+                                                          const GdkColor    *colors,
 135+                                                          gint               n_colors);
 136+-static void     make_control_relations                  (AtkObject         *atk_obj,
 137+-                                                         GtkWidget         *widget);
 138+-static void     make_all_relations                      (AtkObject         *atk_obj,
 139+-                                                         GtkColorSelectionPrivate *priv);
 140+ 
 141+ static void     hsv_changed                             (GtkWidget         *hsv,
 142+                                                          gpointer           data);
 143+@@ -398,7 +394,6 @@
 144+   GtkWidget *picker_image;
 145+   gint i, j;
 146+   GtkColorSelectionPrivate *priv;
 147+-  AtkObject *atk_obj;
 148+   GList *focus_chain = NULL;
 149+ 
 150+   gtk_orientable_set_orientation (GTK_ORIENTABLE (colorsel),
 151+@@ -572,14 +567,6 @@
 152+       gtk_widget_hide (priv->palette_frame);
 153+     }
 154+ 
 155+-  atk_obj = gtk_widget_get_accessible (priv->triangle_colorsel);
 156+-  if (GTK_IS_ACCESSIBLE (atk_obj))
 157+-    {
 158+-      atk_object_set_name (atk_obj, _("Color Wheel"));
 159+-      atk_object_set_role (gtk_widget_get_accessible (GTK_WIDGET (colorsel)), ATK_ROLE_COLOR_CHOOSER);
 160+-      make_all_relations (atk_obj, priv);
 161+-    }
 162+-
 163+   gtk_widget_pop_composite_child ();
 164+ }
 165+ 
 166+@@ -3056,27 +3043,4 @@
 167+   change_palette_hook = func;
 168+ 
 169+   return old;
 170+-}
 171+-
 172+-static void
 173+-make_control_relations (AtkObject *atk_obj,
 174+-                        GtkWidget *widget)
 175+-{
 176+-  AtkObject *obj;
 177+-
 178+-  obj = gtk_widget_get_accessible (widget);
 179+-  atk_object_add_relationship (atk_obj, ATK_RELATION_CONTROLLED_BY, obj);
 180+-  atk_object_add_relationship (obj, ATK_RELATION_CONTROLLER_FOR, atk_obj);
 181+-}
 182+-
 183+-static void
 184+-make_all_relations (AtkObject                *atk_obj,
 185+-                    GtkColorSelectionPrivate *priv)
 186+-{
 187+-  make_control_relations (atk_obj, priv->hue_spinbutton);
 188+-  make_control_relations (atk_obj, priv->sat_spinbutton);
 189+-  make_control_relations (atk_obj, priv->val_spinbutton);
 190+-  make_control_relations (atk_obj, priv->red_spinbutton);
 191+-  make_control_relations (atk_obj, priv->green_spinbutton);
 192+-  make_control_relations (atk_obj, priv->blue_spinbutton);
 193+ }
 194+--- a/gtk/deprecated/gtkcolorseldialog.c
 195++++ b/gtk/deprecated/gtkcolorseldialog.c
 196+@@ -158,8 +158,6 @@
 197+ 						     P_("The help button of the dialog."),
 198+ 						     GTK_TYPE_WIDGET,
 199+ 						     G_PARAM_READABLE));
 200+-
 201+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_COLOR_CHOOSER);
 202+ }
 203+ 
 204+ static void
 205+--- a/gtk/deprecated/gtkfontsel.c
 206++++ b/gtk/deprecated/gtkfontsel.c
 207+@@ -35,8 +35,6 @@
 208+ #include <glib/gprintf.h>
 209+ #include <string.h>
 210+ 
 211+-#include <atk/atk.h>
 212+-
 213+ #include "gtkbutton.h"
 214+ #include "gtkcellrenderertext.h"
 215+ #include "gtkentry.h"
 216+@@ -335,7 +333,6 @@
 217+   GtkListStore *model;
 218+   GtkTreeViewColumn *column;
 219+   GList *focus_chain = NULL;
 220+-  AtkObject *atk_obj;
 221+ 
 222+   fontsel->priv = gtk_font_selection_get_instance_private (fontsel);
 223+   priv = fontsel->priv;
 224+@@ -528,47 +525,7 @@
 225+ 
 226+   g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->size_list)), "changed",
 227+ 		    G_CALLBACK (gtk_font_selection_select_size), fontsel);
 228+-  atk_obj = gtk_widget_get_accessible (priv->size_list);
 229+-  if (GTK_IS_ACCESSIBLE (atk_obj))
 230+-    {
 231+-      /* Accessibility support is enabled.
 232+-       * Make the label ATK_RELATON_LABEL_FOR for the size list as well.
 233+-       */
 234+-      AtkObject *atk_label;
 235+-      AtkRelationSet *relation_set;
 236+-      AtkRelation *relation;
 237+-      AtkObject *obj_array[1];
 238+ 
 239+-      atk_label = gtk_widget_get_accessible (label);
 240+-      relation_set = atk_object_ref_relation_set (atk_obj);
 241+-      relation = atk_relation_set_get_relation_by_type (relation_set, ATK_RELATION_LABELLED_BY);
 242+-      if (relation)
 243+-        {
 244+-          atk_relation_add_target (relation, atk_label);
 245+-        }
 246+-      else 
 247+-        {
 248+-          obj_array[0] = atk_label;
 249+-          relation = atk_relation_new (obj_array, 1, ATK_RELATION_LABELLED_BY);
 250+-          atk_relation_set_add (relation_set, relation);
 251+-        }
 252+-      g_object_unref (relation_set);
 253+-
 254+-      relation_set = atk_object_ref_relation_set (atk_label);
 255+-      relation = atk_relation_set_get_relation_by_type (relation_set, ATK_RELATION_LABEL_FOR);
 256+-      if (relation)
 257+-        {
 258+-          atk_relation_add_target (relation, atk_obj);
 259+-        }
 260+-      else 
 261+-        {
 262+-          obj_array[0] = atk_obj;
 263+-          relation = atk_relation_new (obj_array, 1, ATK_RELATION_LABEL_FOR);
 264+-          atk_relation_set_add (relation_set, relation);
 265+-        }
 266+-      g_object_unref (relation_set);
 267+-    }
 268+-
 269+   vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
 270+   gtk_widget_show (vbox);
 271+   gtk_box_pack_start (GTK_BOX (fontsel), vbox, FALSE, TRUE, 0);
 272+@@ -1651,8 +1608,6 @@
 273+ gtk_font_selection_dialog_class_init (GtkFontSelectionDialogClass *klass)
 274+ {
 275+   GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 276+-
 277+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_FONT_CHOOSER);
 278+ }
 279+ 
 280+ static void
 281+--- a/gtk/deprecated/gtkhsv.c
 282++++ b/gtk/deprecated/gtkhsv.c
 283+@@ -160,8 +160,6 @@
 284+   widget_class->focus = gtk_hsv_focus;
 285+   widget_class->grab_broken_event = gtk_hsv_grab_broken;
 286+ 
 287+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_COLOR_CHOOSER);
 288+-
 289+   hsv_class->move = gtk_hsv_move;
 290+ 
 291+   hsv_signals[CHANGED] =
 292+--- a/gtk/deprecated/gtktearoffmenuitem.c
 293++++ b/gtk/deprecated/gtktearoffmenuitem.c
 294+@@ -110,8 +110,6 @@
 295+   widget_class->get_preferred_height = gtk_tearoff_menu_item_get_preferred_height;
 296+   widget_class->parent_set = gtk_tearoff_menu_item_parent_set;
 297+ 
 298+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_TEAR_OFF_MENU_ITEM);
 299+-
 300+   menu_item_class->activate = gtk_tearoff_menu_item_activate;
 301+ }
 302+ 
 303+--- a/gtk/gtk-autocleanups.h
 304++++ b/gtk/gtk-autocleanups.h
 305+@@ -21,7 +21,6 @@
 306+ 
 307+ #ifndef __GI_SCANNER__
 308+ 
 309+-G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkAccessible, g_object_unref)
 310+ G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkActionBar, g_object_unref)
 311+ G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkActionable, g_object_unref)
 312+ G_DEFINE_AUTOPTR_CLEANUP_FUNC(GtkAdjustment, g_object_unref)
 313+--- a/gtk/gtk.h
 314++++ b/gtk/gtk.h
 315+@@ -32,7 +32,6 @@
 316+ #include <gtk/gtkaccelgroup.h>
 317+ #include <gtk/gtkaccellabel.h>
 318+ #include <gtk/gtkaccelmap.h>
 319+-#include <gtk/gtkaccessible.h>
 320+ #include <gtk/gtkactionable.h>
 321+ #include <gtk/gtkactionbar.h>
 322+ #include <gtk/gtkadjustment.h>
 323+--- a/gtk/gtkaccellabel.c
 324++++ b/gtk/gtkaccellabel.c
 325+@@ -167,8 +167,6 @@
 326+   widget_class->get_preferred_width = gtk_accel_label_get_preferred_width;
 327+   widget_class->destroy = gtk_accel_label_destroy;
 328+ 
 329+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_ACCEL_LABEL);
 330+-
 331+   class->signal_quote1 = g_strdup ("<:");
 332+   class->signal_quote2 = g_strdup (":>");
 333+ 
 334+--- a/gtk/gtkaccessible.c
 335++++ b/gtk/gtkaccessible.c
 336+@@ -50,177 +50,8 @@
 337+   PROP_WIDGET
 338+ };
 339+ 
 340+-static void gtk_accessible_real_connect_widget_destroyed (GtkAccessible *accessible);
 341+ 
 342+-G_DEFINE_TYPE_WITH_PRIVATE (GtkAccessible, gtk_accessible, ATK_TYPE_OBJECT)
 343+-
 344+-static void
 345+-gtk_accessible_set_property (GObject      *object,
 346+-                             guint         prop_id,
 347+-                             const GValue *value,
 348+-                             GParamSpec   *pspec)
 349+-{
 350+-  GtkAccessible *accessible = GTK_ACCESSIBLE (object);
 351+-
 352+-  switch (prop_id)
 353+-    {
 354+-    case PROP_WIDGET:
 355+-      gtk_accessible_set_widget (accessible, g_value_get_object (value));
 356+-      break;
 357+-    default:
 358+-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 359+-      break;
 360+-    }
 361+-}
 362+-
 363+-static void
 364+-gtk_accessible_get_property (GObject    *object,
 365+-                             guint       prop_id,
 366+-                             GValue     *value,
 367+-                             GParamSpec *pspec)
 368+-{
 369+-  GtkAccessible *accessible = GTK_ACCESSIBLE (object);
 370+-  GtkAccessiblePrivate *priv = accessible->priv;
 371+-
 372+-  switch (prop_id)
 373+-    {
 374+-    case PROP_WIDGET:
 375+-      g_value_set_object (value, priv->widget);
 376+-      break;
 377+-    default:
 378+-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 379+-      break;
 380+-    }
 381+-}
 382+-
 383+-static void
 384+-gtk_accessible_init (GtkAccessible *accessible)
 385+-{
 386+-  accessible->priv = gtk_accessible_get_instance_private (accessible);
 387+-}
 388+-
 389+-static AtkStateSet *
 390+-gtk_accessible_ref_state_set (AtkObject *object)
 391+-{
 392+-  GtkAccessible *accessible = GTK_ACCESSIBLE (object);
 393+-  AtkStateSet *state_set;
 394+-
 395+-  state_set = ATK_OBJECT_CLASS (gtk_accessible_parent_class)->ref_state_set (object);
 396+-
 397+-  if (accessible->priv->widget == NULL)
 398+-    atk_state_set_add_state (state_set, ATK_STATE_DEFUNCT);
 399+-
 400+-  return state_set;
 401+-}
 402+-
 403+-static void
 404+-gtk_accessible_real_widget_set (GtkAccessible *accessible)
 405+-{
 406+-  atk_object_notify_state_change (ATK_OBJECT (accessible), ATK_STATE_DEFUNCT, FALSE);
 407+-}
 408+-
 409+-static void
 410+-gtk_accessible_real_widget_unset (GtkAccessible *accessible)
 411+-{
 412+-  atk_object_notify_state_change (ATK_OBJECT (accessible), ATK_STATE_DEFUNCT, TRUE);
 413+-}
 414+-
 415+-static void
 416+-gtk_accessible_dispose (GObject *object)
 417+-{
 418+-  GtkAccessible *accessible = GTK_ACCESSIBLE (object);
 419+-  
 420+-  gtk_accessible_set_widget (accessible, NULL);
 421+-
 422+-  G_OBJECT_CLASS (gtk_accessible_parent_class)->dispose (object);
 423+-}
 424+-
 425+-static void
 426+-gtk_accessible_class_init (GtkAccessibleClass *klass)
 427+-{
 428+-  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 429+-  AtkObjectClass *atkobject_class = ATK_OBJECT_CLASS (klass);
 430+-
 431+-  klass->connect_widget_destroyed = gtk_accessible_real_connect_widget_destroyed;
 432+-  klass->widget_set = gtk_accessible_real_widget_set;
 433+-  klass->widget_unset = gtk_accessible_real_widget_unset;
 434+-
 435+-  atkobject_class->ref_state_set = gtk_accessible_ref_state_set;
 436+-  gobject_class->get_property = gtk_accessible_get_property;
 437+-  gobject_class->set_property = gtk_accessible_set_property;
 438+-  gobject_class->dispose = gtk_accessible_dispose;
 439+-
 440+-  g_object_class_install_property (gobject_class,
 441+-				   PROP_WIDGET,
 442+-				   g_param_spec_object ("widget",
 443+-							P_("Widget"),
 444+-							P_("The widget referenced by this accessible."),
 445+-							GTK_TYPE_WIDGET,
 446+-							G_PARAM_READWRITE));
 447+-}
 448+-
 449+ /**
 450+- * gtk_accessible_set_widget:
 451+- * @accessible: a #GtkAccessible
 452+- * @widget: (allow-none): a #GtkWidget or %NULL to unset
 453+- *
 454+- * Sets the #GtkWidget corresponding to the #GtkAccessible.
 455+- *
 456+- * @accessible will not hold a reference to @widget.
 457+- * It is the caller’s responsibility to ensure that when @widget
 458+- * is destroyed, the widget is unset by calling this function
 459+- * again with @widget set to %NULL.
 460+- *
 461+- * Since: 2.22
 462+- */
 463+-void
 464+-gtk_accessible_set_widget (GtkAccessible *accessible,
 465+-                           GtkWidget     *widget)
 466+-{
 467+-  GtkAccessiblePrivate *priv;
 468+-  GtkAccessibleClass *klass;
 469+-
 470+-  g_return_if_fail (GTK_IS_ACCESSIBLE (accessible));
 471+-
 472+-  priv = accessible->priv;
 473+-  klass = GTK_ACCESSIBLE_GET_CLASS (accessible);
 474+-
 475+-  if (priv->widget == widget)
 476+-    return;
 477+-
 478+-  if (priv->widget)
 479+-    klass->widget_unset (accessible);
 480+-
 481+-  priv->widget = widget;
 482+-
 483+-  if (widget)
 484+-    klass->widget_set (accessible);
 485+-
 486+-  g_object_notify (G_OBJECT (accessible), "widget");
 487+-}
 488+-
 489+-/**
 490+- * gtk_accessible_get_widget:
 491+- * @accessible: a #GtkAccessible
 492+- *
 493+- * Gets the #GtkWidget corresponding to the #GtkAccessible.
 494+- * The returned widget does not have a reference added, so
 495+- * you do not need to unref it.
 496+- *
 497+- * Returns: (nullable) (transfer none): pointer to the #GtkWidget
 498+- *     corresponding to the #GtkAccessible, or %NULL.
 499+- *
 500+- * Since: 2.22
 501+- */
 502+-GtkWidget*
 503+-gtk_accessible_get_widget (GtkAccessible *accessible)
 504+-{
 505+-  g_return_val_if_fail (GTK_IS_ACCESSIBLE (accessible), NULL);
 506+-
 507+-  return accessible->priv->widget;
 508+-}
 509+-
 510+-/**
 511+  * gtk_accessible_connect_widget_destroyed:
 512+  * @accessible: a #GtkAccessible
 513+  *
 514+@@ -242,19 +73,3 @@
 515+     class->connect_widget_destroyed (accessible);
 516+ }
 517+ 
 518+-static void
 519+-gtk_accessible_widget_destroyed (GtkWidget     *widget,
 520+-                                 GtkAccessible *accessible)
 521+-{
 522+-  gtk_accessible_set_widget (accessible, NULL);
 523+-}
 524+-
 525+-static void
 526+-gtk_accessible_real_connect_widget_destroyed (GtkAccessible *accessible)
 527+-{
 528+-  GtkAccessiblePrivate *priv = accessible->priv;
 529+-
 530+-  if (priv->widget)
 531+-    g_signal_connect (priv->widget, "destroy",
 532+-                      G_CALLBACK (gtk_accessible_widget_destroyed), accessible);
 533+-}
 534+--- a/gtk/gtkaccessible.h
 535++++ b/gtk/gtkaccessible.h
 536+@@ -22,34 +22,22 @@
 537+ #error "Only <gtk/gtk.h> can be included directly."
 538+ #endif
 539+ 
 540+-#include <atk/atk.h>
 541+ #include <gtk/gtkwidget.h>
 542+ 
 543+ G_BEGIN_DECLS
 544+ 
 545+-#define GTK_TYPE_ACCESSIBLE                  (gtk_accessible_get_type ())
 546+-#define GTK_ACCESSIBLE(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_ACCESSIBLE, GtkAccessible))
 547+-#define GTK_ACCESSIBLE_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_ACCESSIBLE, GtkAccessibleClass))
 548+-#define GTK_IS_ACCESSIBLE(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_ACCESSIBLE))
 549+-#define GTK_IS_ACCESSIBLE_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_ACCESSIBLE))
 550+-#define GTK_ACCESSIBLE_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_ACCESSIBLE, GtkAccessibleClass))
 551+-
 552+ typedef struct _GtkAccessible        GtkAccessible;
 553+ typedef struct _GtkAccessiblePrivate GtkAccessiblePrivate;
 554+ typedef struct _GtkAccessibleClass   GtkAccessibleClass;
 555+ 
 556+ struct _GtkAccessible
 557+ {
 558+-  AtkObject parent;
 559+-
 560+   /*< private >*/
 561+   GtkAccessiblePrivate *priv;
 562+ };
 563+ 
 564+ struct _GtkAccessibleClass
 565+ {
 566+-  AtkObjectClass parent_class;
 567+-
 568+   void (*connect_widget_destroyed) (GtkAccessible *accessible);
 569+ 
 570+   void (*widget_set)               (GtkAccessible *accessible);
 571+@@ -58,9 +46,6 @@
 572+   void (*_gtk_reserved3) (void);
 573+   void (*_gtk_reserved4) (void);
 574+ };
 575+-
 576+-GDK_AVAILABLE_IN_ALL
 577+-GType      gtk_accessible_get_type                 (void) G_GNUC_CONST;
 578+ 
 579+ GDK_AVAILABLE_IN_ALL
 580+ void       gtk_accessible_set_widget               (GtkAccessible *accessible,
 581+--- a/gtk/gtkactionbar.c
 582++++ b/gtk/gtkactionbar.c
 583+@@ -351,7 +351,6 @@
 584+   gtk_widget_class_bind_template_child_private (widget_class, GtkActionBar, box);
 585+   gtk_widget_class_bind_template_child_private (widget_class, GtkActionBar, revealer);
 586+ 
 587+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_PANEL);
 588+   gtk_widget_class_set_css_name (widget_class, "actionbar");
 589+ }
 590+ 
 591+--- a/gtk/gtkassistant.c
 592++++ b/gtk/gtkassistant.c
 593+@@ -58,8 +58,6 @@
 594+ 
 595+ #include "config.h"
 596+ 
 597+-#include <atk/atk.h>
 598+-
 599+ #include "gtkassistant.h"
 600+ 
 601+ #include "gtkbutton.h"
 602+@@ -405,8 +403,6 @@
 603+   widget_class->unmap = gtk_assistant_unmap;
 604+   widget_class->delete_event = gtk_assistant_delete_event;
 605+ 
 606+-  gtk_widget_class_set_accessible_type (widget_class, _gtk_assistant_accessible_get_type ());
 607+-
 608+   container_class->add = gtk_assistant_add;
 609+   container_class->remove = gtk_assistant_remove;
 610+   container_class->set_child_property = gtk_assistant_set_child_property;
 611+@@ -2534,76 +2530,9 @@
 612+ typedef GtkWindowAccessible      GtkAssistantAccessible;
 613+ typedef GtkWindowAccessibleClass GtkAssistantAccessibleClass;
 614+ 
 615+-G_DEFINE_TYPE (GtkAssistantAccessible, _gtk_assistant_accessible, GTK_TYPE_WINDOW_ACCESSIBLE);
 616+-
 617+-static gint
 618+-gtk_assistant_accessible_get_n_children (AtkObject *accessible)
 619+-{
 620+-  GtkWidget *widget;
 621+-
 622+-  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible));
 623+-  if (widget == NULL)
 624+-    return 0;
 625+-
 626+-  return g_list_length (GTK_ASSISTANT (widget)->priv->pages) + 2;
 627+-}
 628+-
 629+-static AtkObject *
 630+-gtk_assistant_accessible_ref_child (AtkObject *accessible,
 631+-                                    gint       index)
 632+-{
 633+-  GtkAssistant *assistant;
 634+-  GtkAssistantPrivate *priv;
 635+-  GtkWidget *widget, *child;
 636+-  gint n_pages;
 637+-  AtkObject *obj;
 638+-  const gchar *title;
 639+-
 640+-  widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (accessible));
 641+-  if (widget == NULL)
 642+-    return NULL;
 643+-
 644+-  assistant = GTK_ASSISTANT (widget);
 645+-  priv = assistant->priv;
 646+-  n_pages = g_list_length (priv->pages);
 647+-
 648+-  if (index < 0)
 649+-    return NULL;
 650+-  else if (index < n_pages)
 651+-    {
 652+-      GtkAssistantPage *page = g_list_nth_data (priv->pages, index);
 653+-
 654+-      child = page->page;
 655+-      title = gtk_assistant_get_page_title (assistant, child);
 656+-    }
 657+-  else if (index == n_pages)
 658+-    {
 659+-      child = priv->action_area;
 660+-      title = NULL;
 661+-    }
 662+-  else if (index == n_pages + 1)
 663+-    {
 664+-      child = priv->headerbar;
 665+-      title = NULL;
 666+-    }
 667+-  else
 668+-    return NULL;
 669+-
 670+-  obj = gtk_widget_get_accessible (child);
 671+-
 672+-  if (title)
 673+-    atk_object_set_name (obj, title);
 674+-
 675+-  return g_object_ref (obj);
 676+-}
 677+-
 678+ static void
 679+ _gtk_assistant_accessible_class_init (GtkAssistantAccessibleClass *klass)
 680+ {
 681+-  AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass);
 682+-
 683+-  atk_class->get_n_children = gtk_assistant_accessible_get_n_children;
 684+-  atk_class->ref_child = gtk_assistant_accessible_ref_child;
 685+ }
 686+ 
 687+ static void
 688+--- a/gtk/gtkbox.c
 689++++ b/gtk/gtkbox.c
 690+@@ -370,7 +370,6 @@
 691+ 
 692+   gtk_container_class_install_child_properties (container_class, LAST_CHILD_PROP, child_props);
 693+ 
 694+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_FILLER);
 695+   gtk_widget_class_set_css_name (widget_class, "box");
 696+ }
 697+ 
 698+--- a/gtk/gtkbutton.c
 699++++ b/gtk/gtkbutton.c
 700+@@ -630,7 +630,6 @@
 701+ 							     2,
 702+ 							     GTK_PARAM_READABLE | G_PARAM_DEPRECATED));
 703+ 
 704+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_BUTTON_ACCESSIBLE);
 705+   gtk_widget_class_set_css_name (widget_class, "button");
 706+ }
 707+ 
 708+--- a/gtk/gtkcalendar.c
 709++++ b/gtk/gtkcalendar.c
 710+@@ -680,7 +680,6 @@
 711+                   NULL,
 712+                   G_TYPE_NONE, 0);
 713+ 
 714+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_CALENDAR);
 715+   gtk_widget_class_set_css_name (widget_class, "calendar");
 716+ }
 717+ 
 718+--- a/gtk/gtkcellrenderer.c
 719++++ b/gtk/gtkcellrenderer.c
 720+@@ -443,8 +443,6 @@
 721+ 
 722+   if (GtkCellRenderer_private_offset != 0)
 723+     g_type_class_adjust_private_offset (class, &GtkCellRenderer_private_offset);
 724+-
 725+-  gtk_cell_renderer_class_set_accessible_type (class, GTK_TYPE_RENDERER_CELL_ACCESSIBLE);
 726+ }
 727+ 
 728+ static void
 729+@@ -1848,40 +1846,5 @@
 730+     state |= GTK_STATE_FLAG_SELECTED;
 731+ 
 732+   return state;
 733+-}
 734+-
 735+-/**
 736+- * gtk_cell_renderer_class_set_accessible_type:
 737+- * @renderer_class: class to set the accessible type for
 738+- * @type: The object type that implements the accessible for @widget_class.
 739+- *     The type must be a subtype of #GtkRendererCellAccessible
 740+- *
 741+- * Sets the type to be used for creating accessibles for cells rendered by
 742+- * cell renderers of @renderer_class. Note that multiple accessibles will
 743+- * be created.
 744+- *
 745+- * This function should only be called from class init functions of cell
 746+- * renderers.
 747+- **/
 748+-void
 749+-gtk_cell_renderer_class_set_accessible_type (GtkCellRendererClass *renderer_class,
 750+-                                             GType                 type)
 751+-{
 752+-  GtkCellRendererClassPrivate *priv;
 753+-
 754+-  g_return_if_fail (GTK_IS_CELL_RENDERER_CLASS (renderer_class));
 755+-  g_return_if_fail (g_type_is_a (type, GTK_TYPE_RENDERER_CELL_ACCESSIBLE));
 756+-
 757+-  priv = renderer_class->priv;
 758+-
 759+-  priv->accessible_type = type;
 760+-}
 761+-
 762+-GType
 763+-_gtk_cell_renderer_get_accessible_type (GtkCellRenderer *renderer)
 764+-{
 765+-  g_return_val_if_fail (GTK_IS_CELL_RENDERER (renderer), GTK_TYPE_RENDERER_CELL_ACCESSIBLE);
 766+-
 767+-  return GTK_CELL_RENDERER_GET_CLASS (renderer)->priv->accessible_type;
 768+ }
 769+ 
 770+--- a/gtk/gtkcellrendererpixbuf.c
 771++++ b/gtk/gtkcellrendererpixbuf.c
 772+@@ -282,10 +282,6 @@
 773+                                                         P_("The GIcon being displayed"),
 774+                                                         G_TYPE_ICON,
 775+                                                         GTK_PARAM_READWRITE));
 776+-
 777+-
 778+-
 779+-  gtk_cell_renderer_class_set_accessible_type (cell_class, GTK_TYPE_IMAGE_CELL_ACCESSIBLE);
 780+ }
 781+ 
 782+ static void
 783+--- a/gtk/gtkcellrenderertext.c
 784++++ b/gtk/gtkcellrenderertext.c
 785+@@ -692,8 +692,6 @@
 786+   g_signal_set_va_marshaller (text_cell_renderer_signals [EDITED],
 787+                               G_OBJECT_CLASS_TYPE (object_class),
 788+                               _gtk_marshal_VOID__STRING_STRINGv);
 789+-
 790+-  gtk_cell_renderer_class_set_accessible_type (cell_class, GTK_TYPE_TEXT_CELL_ACCESSIBLE);
 791+ }
 792+ 
 793+ static void
 794+--- a/gtk/gtkcellrenderertoggle.c
 795++++ b/gtk/gtkcellrenderertoggle.c
 796+@@ -196,8 +196,6 @@
 797+ 		  NULL,
 798+ 		  G_TYPE_NONE, 1,
 799+ 		  G_TYPE_STRING);
 800+-
 801+-  gtk_cell_renderer_class_set_accessible_type (cell_class, GTK_TYPE_BOOLEAN_CELL_ACCESSIBLE);
 802+ }
 803+ 
 804+ static void
 805+--- a/gtk/gtkcheckbutton.c
 806++++ b/gtk/gtkcheckbutton.c
 807+@@ -253,7 +253,6 @@
 808+ 							     INDICATOR_SPACING,
 809+ 							     GTK_PARAM_READABLE|G_PARAM_DEPRECATED));
 810+ 
 811+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_CHECK_BOX);
 812+   gtk_widget_class_set_css_name (widget_class, "checkbutton");
 813+ }
 814+ 
 815+--- a/gtk/gtkcheckmenuitem.c
 816++++ b/gtk/gtkcheckmenuitem.c
 817+@@ -271,7 +271,6 @@
 818+                   NULL,
 819+                   G_TYPE_NONE, 0);
 820+ 
 821+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_CHECK_MENU_ITEM_ACCESSIBLE);
 822+   gtk_widget_class_set_css_name (widget_class, "menuitem");
 823+ }
 824+ 
 825+--- a/gtk/gtkcolorchooserwidget.c
 826++++ b/gtk/gtkcolorchooserwidget.c
 827+@@ -344,7 +344,6 @@
 828+ {
 829+   GtkWidget *grid;
 830+   GtkWidget *p;
 831+-  AtkObject *atk_obj;
 832+   gint line, pos;
 833+   gint i;
 834+   gint left, right;
 835+@@ -373,11 +372,8 @@
 836+   for (i = 0; i < n_colors; i++)
 837+     {
 838+       p = gtk_color_swatch_new ();
 839+-      atk_obj = gtk_widget_get_accessible (p);
 840+       if (names)
 841+         {
 842+-          atk_object_set_name (atk_obj,
 843+-                               g_dpgettext2 (GETTEXT_PACKAGE, "Color name", names[i]));
 844+         }
 845+       else
 846+         {
 847+@@ -385,7 +381,6 @@
 848+ 
 849+           name = accessible_color_name (&colors[i]);
 850+           text = g_strdup_printf (_("Color: %s"), name);
 851+-          atk_object_set_name (atk_obj, text);
 852+           g_free (text);
 853+           g_free (name);
 854+         }
 855+@@ -513,7 +508,6 @@
 856+   GVariant *variant;
 857+   GVariantIter iter;
 858+   gboolean selected;
 859+-  AtkObject *atk_obj;
 860+   gchar *text, *name;
 861+ 
 862+   cc->priv = gtk_color_chooser_widget_get_instance_private (cc);
 863+@@ -537,9 +531,6 @@
 864+ 
 865+   cc->priv->button = button = gtk_color_swatch_new ();
 866+   gtk_widget_set_name (button, "add-color-button");
 867+-  atk_obj = gtk_widget_get_accessible (button);
 868+-  atk_object_set_name (atk_obj, _("Custom color"));
 869+-  atk_object_set_description (atk_obj, _("Create a custom color"));
 870+   connect_button_signals (button, cc);
 871+   gtk_color_swatch_set_icon (GTK_COLOR_SWATCH (button), "list-add-symbolic");
 872+   gtk_color_swatch_set_selectable (GTK_COLOR_SWATCH (button), FALSE);
 873+@@ -556,10 +547,8 @@
 874+       p = gtk_color_swatch_new ();
 875+       gtk_color_swatch_set_rgba (GTK_COLOR_SWATCH (p), &color);
 876+       gtk_color_swatch_set_can_drop (GTK_COLOR_SWATCH (p), TRUE);
 877+-      atk_obj = gtk_widget_get_accessible (p);
 878+       name = accessible_color_name (&color);
 879+       text = g_strdup_printf (_("Custom color %d: %s"), i, name);
 880+-      atk_object_set_name (atk_obj, text);
 881+       g_free (text);
 882+       g_free (name);
 883+       connect_custom_signals (p, cc);
 884+--- a/gtk/gtkcolorplane.c
 885++++ b/gtk/gtkcolorplane.c
 886+@@ -392,8 +392,6 @@
 887+ static void
 888+ gtk_color_plane_init (GtkColorPlane *plane)
 889+ {
 890+-  AtkObject *atk_obj;
 891+-
 892+   plane->priv = gtk_color_plane_get_instance_private (plane);
 893+ 
 894+   gtk_widget_set_can_focus (GTK_WIDGET (plane), TRUE);
 895+@@ -402,13 +400,6 @@
 896+                                              | GDK_BUTTON_PRESS_MASK
 897+                                              | GDK_BUTTON_RELEASE_MASK
 898+                                              | GDK_POINTER_MOTION_MASK);
 899+-
 900+-  atk_obj = gtk_widget_get_accessible (GTK_WIDGET (plane));
 901+-  if (GTK_IS_ACCESSIBLE (atk_obj))
 902+-    {
 903+-      atk_object_set_name (atk_obj, _("Color Plane"));
 904+-      atk_object_set_role (atk_obj, ATK_ROLE_COLOR_CHOOSER);
 905+-    }
 906+ 
 907+   plane->priv->drag_gesture = gtk_gesture_drag_new (GTK_WIDGET (plane));
 908+   g_signal_connect (plane->priv->drag_gesture, "drag-begin",
 909+--- a/gtk/gtkcolorscale.c
 910++++ b/gtk/gtkcolorscale.c
 911+@@ -200,19 +200,7 @@
 912+ scale_set_type (GtkColorScale     *scale,
 913+                 GtkColorScaleType  type)
 914+ {
 915+-  AtkObject *atk_obj;
 916+-
 917+   scale->priv->type = type;
 918+-
 919+-  atk_obj = gtk_widget_get_accessible (GTK_WIDGET (scale));
 920+-  if (GTK_IS_ACCESSIBLE (atk_obj))
 921+-    {
 922+-      if (type == GTK_COLOR_SCALE_HUE)
 923+-        atk_object_set_name (atk_obj, C_("Color channel", "Hue"));
 924+-      else if (type == GTK_COLOR_SCALE_ALPHA)
 925+-        atk_object_set_name (atk_obj, C_("Color channel", "Alpha"));
 926+-      atk_object_set_role (atk_obj, ATK_ROLE_COLOR_CHOOSER);
 927+-    }
 928+ }
 929+ 
 930+ static void
 931+--- a/gtk/gtkcolorswatch.c
 932++++ b/gtk/gtkcolorswatch.c
 933+@@ -725,7 +725,6 @@
 934+       g_param_spec_boolean ("has-menu", P_("Has Menu"), P_("Whether the swatch should offer customization"),
 935+                             TRUE, GTK_PARAM_READWRITE));
 936+ 
 937+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_COLOR_SWATCH_ACCESSIBLE);
 938+   gtk_widget_class_set_css_name (widget_class, "colorswatch");
 939+ }
 940+ 
 941+--- a/gtk/gtkcombobox.c
 942++++ b/gtk/gtkcombobox.c
 943+@@ -1255,7 +1255,6 @@
 944+   gtk_widget_class_bind_template_child_internal_private (widget_class, GtkComboBox, arrow);
 945+   gtk_widget_class_bind_template_callback (widget_class, gtk_combo_box_button_toggled);
 946+ 
 947+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_COMBO_BOX_ACCESSIBLE);
 948+   gtk_widget_class_set_css_name (widget_class, "combobox");
 949+ }
 950+ 
 951+@@ -4639,35 +4638,6 @@
 952+   return combo_box->priv->popup_fixed_width;
 953+ }
 954+ 
 955+-
 956+-/**
 957+- * gtk_combo_box_get_popup_accessible:
 958+- * @combo_box: a #GtkComboBox
 959+- *
 960+- * Gets the accessible object corresponding to the combo box’s popup.
 961+- *
 962+- * This function is mostly intended for use by accessibility technologies;
 963+- * applications should have little use for it.
 964+- *
 965+- * Returns: (transfer none): the accessible object corresponding
 966+- *     to the combo box’s popup.
 967+- *
 968+- * Since: 2.6
 969+- */
 970+-AtkObject *
 971+-gtk_combo_box_get_popup_accessible (GtkComboBox *combo_box)
 972+-{
 973+-  GtkComboBoxPrivate *priv;
 974+-
 975+-  g_return_val_if_fail (GTK_IS_COMBO_BOX (combo_box), NULL);
 976+-
 977+-  priv = combo_box->priv;
 978+-
 979+-  if (priv->popup_widget)
 980+-    return gtk_widget_get_accessible (priv->popup_widget);
 981+-
 982+-  return NULL;
 983+-}
 984+ 
 985+ /**
 986+  * gtk_combo_box_get_row_separator_func: (skip)
 987+--- a/gtk/gtkcombobox.h
 988++++ b/gtk/gtkcombobox.h
 989+@@ -181,8 +181,6 @@
 990+                                               GdkDevice       *device);
 991+ GDK_AVAILABLE_IN_ALL
 992+ void          gtk_combo_box_popdown          (GtkComboBox     *combo_box);
 993+-GDK_AVAILABLE_IN_ALL
 994+-AtkObject *   gtk_combo_box_get_popup_accessible (GtkComboBox *combo_box);
 995+ 
 996+ GDK_AVAILABLE_IN_ALL
 997+ gint          gtk_combo_box_get_id_column        (GtkComboBox *combo_box);
 998+--- a/gtk/gtkcontainer.c
 999++++ b/gtk/gtkcontainer.c
1000+@@ -591,8 +591,6 @@
1001+ 
1002+   if (GtkContainer_private_offset != 0)
1003+     g_type_class_adjust_private_offset (class, &GtkContainer_private_offset);
1004+-
1005+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_CONTAINER_ACCESSIBLE);
1006+ }
1007+ 
1008+ static void
1009+@@ -1875,8 +1873,6 @@
1010+     }
1011+ 
1012+   g_signal_emit (container, container_signals[ADD], 0, widget);
1013+-
1014+-  _gtk_container_accessible_add (GTK_WIDGET (container), widget);
1015+ }
1016+ 
1017+ /**
1018+@@ -1905,8 +1901,6 @@
1019+   g_object_ref (widget);
1020+ 
1021+   g_signal_emit (container, container_signals[REMOVE], 0, widget);
1022+-
1023+-  _gtk_container_accessible_remove (GTK_WIDGET (container), widget);
1024+ 
1025+   g_object_unref (widget);
1026+   g_object_unref (container);
1027+--- a/gtk/gtkdialog.c
1028++++ b/gtk/gtkdialog.c
1029+@@ -533,8 +533,6 @@
1030+   widget_class->map = gtk_dialog_map;
1031+   widget_class->style_updated = gtk_dialog_style_updated;
1032+ 
1033+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_DIALOG);
1034+-
1035+   class->close = gtk_dialog_close;
1036+ 
1037+   /**
1038+--- a/gtk/gtkdrawingarea.c
1039++++ b/gtk/gtkdrawingarea.c
1040+@@ -135,8 +135,6 @@
1041+   widget_class->realize = gtk_drawing_area_realize;
1042+   widget_class->size_allocate = gtk_drawing_area_size_allocate;
1043+   widget_class->style_updated = gtk_drawing_area_style_updated;
1044+-
1045+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_DRAWING_AREA);
1046+ }
1047+ 
1048+ static void
1049+--- a/gtk/gtkentry.c
1050++++ b/gtk/gtkentry.c
1051+@@ -2125,7 +2125,6 @@
1052+   gtk_binding_entry_add_signal (binding_set, GDK_KEY_semicolon, GDK_CONTROL_MASK,
1053+                                 "insert-emoji", 0);
1054+ 
1055+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_ENTRY_ACCESSIBLE);
1056+   gtk_widget_class_set_css_name (widget_class, "entry");
1057+ }
1058+ 
1059+--- a/gtk/gtkentrycompletion.c
1060++++ b/gtk/gtkentrycompletion.c
1061+@@ -2634,30 +2634,12 @@
1062+ set_accessible_relation (GtkWidget *window,
1063+                          GtkWidget *entry)
1064+ {
1065+-  AtkObject *window_accessible;
1066+-  AtkObject *entry_accessible;
1067+-
1068+-  window_accessible = gtk_widget_get_accessible (window);
1069+-  entry_accessible = gtk_widget_get_accessible (entry);
1070+-
1071+-  atk_object_add_relationship (window_accessible,
1072+-                               ATK_RELATION_POPUP_FOR,
1073+-                               entry_accessible);
1074+ }
1075+ 
1076+ static void
1077+ unset_accessible_relation (GtkWidget *window,
1078+                            GtkWidget *entry)
1079+ {
1080+-  AtkObject *window_accessible;
1081+-  AtkObject *entry_accessible;
1082+-
1083+-  window_accessible = gtk_widget_get_accessible (window);
1084+-  entry_accessible = gtk_widget_get_accessible (entry);
1085+-
1086+-  atk_object_remove_relationship (window_accessible,
1087+-                                  ATK_RELATION_POPUP_FOR,
1088+-                                  entry_accessible);
1089+ }
1090+ 
1091+ static void
1092+--- a/gtk/gtkexpander.c
1093++++ b/gtk/gtkexpander.c
1094+@@ -427,7 +427,6 @@
1095+                   NULL,
1096+                   G_TYPE_NONE, 0);
1097+ 
1098+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_EXPANDER_ACCESSIBLE);
1099+   gtk_widget_class_set_css_name (widget_class, "expander");
1100+ }
1101+ 
1102+--- a/gtk/gtkfilechooserdialog.c
1103++++ b/gtk/gtkfilechooserdialog.c
1104+@@ -265,8 +265,6 @@
1105+   widget_class->unmap = gtk_file_chooser_dialog_unmap;
1106+   widget_class->size_allocate = gtk_file_chooser_dialog_size_allocate;
1107+ 
1108+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_FILE_CHOOSER);
1109+-
1110+   _gtk_file_chooser_install_properties (gobject_class);
1111+ 
1112+   /* Bind class to template
1113+--- a/gtk/gtkfilechooserwidget.c
1114++++ b/gtk/gtkfilechooserwidget.c
1115+@@ -8753,7 +8753,6 @@
1116+   gtk_widget_class_bind_template_callback (widget_class, rename_file_rename_clicked);
1117+   gtk_widget_class_bind_template_callback (widget_class, rename_file_end);
1118+ 
1119+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_FILE_CHOOSER_WIDGET_ACCESSIBLE);
1120+   gtk_widget_class_set_css_name (widget_class, "filechooser");
1121+ }
1122+ 
1123+@@ -8762,7 +8761,6 @@
1124+ {
1125+   GtkTreeSelection *selection;
1126+   GtkCellRenderer *cell;
1127+-  AtkObject *atk_obj;
1128+   GList *cells;
1129+   GFile *file;
1130+ 
1131+@@ -8818,10 +8816,6 @@
1132+    * that priv->icon_size be already setup.
1133+    */
1134+   set_icon_cell_renderer_fixed_size (impl);
1135+-
1136+-  atk_obj = gtk_widget_get_accessible (impl->priv->browse_new_folder_button);
1137+-  if (GTK_IS_ACCESSIBLE (atk_obj))
1138+-    atk_object_set_name (atk_obj, _("Create Folder"));
1139+ 
1140+   gtk_popover_set_default_widget (GTK_POPOVER (impl->priv->new_folder_popover), impl->priv->new_folder_create_button);
1141+   gtk_popover_set_default_widget (GTK_POPOVER (impl->priv->rename_file_popover), impl->priv->rename_file_rename_button);
1142+--- a/gtk/gtkflowbox.c
1143++++ b/gtk/gtkflowbox.c
1144+@@ -635,7 +635,6 @@
1145+                   G_TYPE_NONE, 0);
1146+   widget_class->activate_signal = child_signals[CHILD_ACTIVATE];
1147+ 
1148+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_LIST_ITEM);
1149+   gtk_widget_class_set_css_name (widget_class, "flowboxchild");
1150+ }
1151+ 
1152+@@ -1025,7 +1024,6 @@
1153+   BOX_PRIV (box)->cursor_child = child;
1154+   gtk_widget_grab_focus (GTK_WIDGET (child));
1155+   gtk_widget_queue_draw (GTK_WIDGET (child));
1156+-  _gtk_flow_box_accessible_update_cursor (GTK_WIDGET (box), GTK_WIDGET (child));
1157+ }
1158+ 
1159+ static void
1160+@@ -3645,7 +3643,6 @@
1161+ static void
1162+ gtk_flow_box_selected_children_changed (GtkFlowBox *box)
1163+ {
1164+-  _gtk_flow_box_accessible_selection_changed (GTK_WIDGET (box));
1165+ }
1166+ 
1167+ /* GObject implementation {{{2 */
1168+@@ -4100,7 +4097,6 @@
1169+   gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_CONTROL_MASK | GDK_SHIFT_MASK,
1170+                                 "unselect-all", 0);
1171+ 
1172+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_FLOW_BOX_ACCESSIBLE);
1173+   gtk_widget_class_set_css_name (widget_class, "flowbox");
1174+ }
1175+ 
1176+--- a/gtk/gtkfontchooserdialog.c
1177++++ b/gtk/gtkfontchooserdialog.c
1178+@@ -22,8 +22,6 @@
1179+ #include <glib/gprintf.h>
1180+ #include <string.h>
1181+ 
1182+-#include <atk/atk.h>
1183+-
1184+ #include "gtkfontchooserdialog.h"
1185+ #include "gtkfontchooser.h"
1186+ #include "gtkfontchooserwidget.h"
1187+--- a/gtk/gtkfontchooserwidget.c
1188++++ b/gtk/gtkfontchooserwidget.c
1189+@@ -21,8 +21,6 @@
1190+ #include <glib/gprintf.h>
1191+ #include <string.h>
1192+ 
1193+-#include <atk/atk.h>
1194+-
1195+ #include "gtkfontchooserwidget.h"
1196+ #include "gtkfontchooserwidgetprivate.h"
1197+ 
1198+--- a/gtk/gtkframe.c
1199++++ b/gtk/gtkframe.c
1200+@@ -282,7 +282,6 @@
1201+ 
1202+   class->compute_child_allocation = gtk_frame_real_compute_child_allocation;
1203+ 
1204+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_FRAME_ACCESSIBLE);
1205+   gtk_widget_class_set_css_name (widget_class, "frame");
1206+ }
1207+ 
1208+--- a/gtk/gtkglarea.c
1209++++ b/gtk/gtkglarea.c
1210+@@ -766,8 +766,6 @@
1211+   widget_class->size_allocate = gtk_gl_area_size_allocate;
1212+   widget_class->draw = gtk_gl_area_draw;
1213+ 
1214+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_DRAWING_AREA);
1215+-
1216+   /**
1217+    * GtkGLArea:context:
1218+    *
1219+--- a/gtk/gtkheaderbar.c
1220++++ b/gtk/gtkheaderbar.c
1221+@@ -351,7 +351,6 @@
1222+             {
1223+               GtkWidget *button = NULL;
1224+               GtkWidget *image = NULL;
1225+-              AtkObject *accessible;
1226+ 
1227+               if (strcmp (t[j], "icon") == 0 &&
1228+                   is_sovereign_window)
1229+@@ -386,10 +385,6 @@
1230+                   gtk_widget_set_can_focus (button, FALSE);
1231+                   gtk_widget_show_all (button);
1232+ 
1233+-                  accessible = gtk_widget_get_accessible (button);
1234+-                  if (GTK_IS_ACCESSIBLE (accessible))
1235+-                    atk_object_set_name (accessible, _("Application menu"));
1236+-
1237+                   priv->titlebar_icon = image;
1238+                   if (!_gtk_header_bar_update_window_icon (bar, window))
1239+                     gtk_image_set_from_icon_name (GTK_IMAGE (priv->titlebar_icon),
1240+@@ -409,10 +404,6 @@
1241+                   gtk_widget_show_all (button);
1242+                   g_signal_connect_swapped (button, "clicked",
1243+                                             G_CALLBACK (gtk_window_iconify), window);
1244+-
1245+-                  accessible = gtk_widget_get_accessible (button);
1246+-                  if (GTK_IS_ACCESSIBLE (accessible))
1247+-                    atk_object_set_name (accessible, _("Minimize"));
1248+                 }
1249+               else if (strcmp (t[j], "maximize") == 0 &&
1250+                        gtk_window_get_resizable (window) &&
1251+@@ -433,10 +424,6 @@
1252+                   gtk_widget_show_all (button);
1253+                   g_signal_connect_swapped (button, "clicked",
1254+                                             G_CALLBACK (_gtk_window_toggle_maximized), window);
1255+-
1256+-                  accessible = gtk_widget_get_accessible (button);
1257+-                  if (GTK_IS_ACCESSIBLE (accessible))
1258+-                    atk_object_set_name (accessible, maximized ? _("Restore") : _("Maximize"));
1259+                 }
1260+               else if (strcmp (t[j], "close") == 0 &&
1261+                        gtk_window_get_deletable (window))
1262+@@ -452,10 +439,6 @@
1263+                   gtk_widget_show_all (button);
1264+                   g_signal_connect_swapped (button, "clicked",
1265+                                             G_CALLBACK (gtk_window_close), window);
1266+-
1267+-                  accessible = gtk_widget_get_accessible (button);
1268+-                  if (GTK_IS_ACCESSIBLE (accessible))
1269+-                    atk_object_set_name (accessible, _("Close"));
1270+                 }
1271+ 
1272+               if (button)
1273+@@ -2118,8 +2101,6 @@
1274+ 
1275+   g_object_class_install_properties (object_class, LAST_PROP, header_bar_props);
1276+ 
1277+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_HEADER_BAR_ACCESSIBLE);
1278+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_PANEL);
1279+   gtk_widget_class_set_css_name (widget_class, "headerbar");
1280+ }
1281+ 
1282+--- a/gtk/gtkiconview.c
1283++++ b/gtk/gtkiconview.c
1284+@@ -965,7 +965,6 @@
1285+   gtk_icon_view_add_move_binding (binding_set, GDK_KEY_KP_Left, 0, 
1286+ 				  GTK_MOVEMENT_VISUAL_POSITIONS, -1);
1287+ 
1288+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_ICON_VIEW_ACCESSIBLE);
1289+   gtk_widget_class_set_css_name (widget_class, "iconview");
1290+ }
1291+ 
1292+@@ -2125,19 +2124,6 @@
1293+ gtk_icon_view_item_selected_changed (GtkIconView      *icon_view,
1294+                                      GtkIconViewItem  *item)
1295+ {
1296+-  AtkObject *obj;
1297+-  AtkObject *item_obj;
1298+-
1299+-  obj = gtk_widget_get_accessible (GTK_WIDGET (icon_view));
1300+-  if (obj != NULL)
1301+-    {
1302+-      item_obj = atk_object_ref_accessible_child (obj, item->index);
1303+-      if (item_obj != NULL)
1304+-        {
1305+-          atk_object_notify_state_change (item_obj, ATK_STATE_SELECTED, item->selected);
1306+-          g_object_unref (item_obj);
1307+-        }
1308+-    }
1309+ }
1310+ 
1311+ static void
1312+@@ -2939,8 +2925,6 @@
1313+ 
1314+       if (icon_view->priv->doing_rubberband)
1315+         gtk_icon_view_update_rubberband (GTK_WIDGET (icon_view));
1316+-
1317+-      _gtk_icon_view_accessible_adjustment_changed (icon_view);
1318+     }
1319+ }
1320+ 
1321+@@ -3238,10 +3222,6 @@
1322+                                 GtkIconViewItem *item,
1323+                                 GtkCellRenderer *cursor_cell)
1324+ {
1325+-  AtkObject *obj;
1326+-  AtkObject *item_obj;
1327+-  AtkObject *cursor_item_obj;
1328+-
1329+   /* When hitting this path from keynav, the focus cell is
1330+    * already set, we dont need to notify the atk object
1331+    * but we still need to queue the draw here (in the case
1332+@@ -3253,17 +3233,10 @@
1333+       (cursor_cell == NULL || cursor_cell == gtk_cell_area_get_focus_cell (icon_view->priv->cell_area)))
1334+     return;
1335+ 
1336+-  obj = gtk_widget_get_accessible (GTK_WIDGET (icon_view));
1337+   if (icon_view->priv->cursor_item != NULL)
1338+     {
1339+       gtk_icon_view_queue_draw_item (icon_view, icon_view->priv->cursor_item);
1340+-      if (obj != NULL)
1341+-        {
1342+-          cursor_item_obj = atk_object_ref_accessible_child (obj, icon_view->priv->cursor_item->index);
1343+-          if (cursor_item_obj != NULL)
1344+-            atk_object_notify_state_change (cursor_item_obj, ATK_STATE_FOCUSED, FALSE);
1345+         }
1346+-    }
1347+   icon_view->priv->cursor_item = item;
1348+ 
1349+   if (cursor_cell)
1350+@@ -3273,18 +3246,6 @@
1351+       /* Make sure there is a cell in focus initially */
1352+       if (!gtk_cell_area_get_focus_cell (icon_view->priv->cell_area))
1353+ 	gtk_cell_area_focus (icon_view->priv->cell_area, GTK_DIR_TAB_FORWARD);
1354+-    }
1355+-  
1356+-  /* Notify that accessible focus object has changed */
1357+-  item_obj = atk_object_ref_accessible_child (obj, item->index);
1358+-
1359+-  if (item_obj != NULL)
1360+-    {
1361+-      G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
1362+-      atk_focus_tracker_notify (item_obj);
1363+-      G_GNUC_END_IGNORE_DEPRECATIONS;
1364+-      atk_object_notify_state_change (item_obj, ATK_STATE_FOCUSED, TRUE);
1365+-      g_object_unref (item_obj); 
1366+     }
1367+ }
1368+ 
1369+--- a/gtk/gtkimage.c
1370++++ b/gtk/gtkimage.c
1371+@@ -402,7 +402,6 @@
1372+ 
1373+   g_object_class_install_properties (gobject_class, NUM_PROPERTIES, image_props);
1374+ 
1375+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_IMAGE_ACCESSIBLE);
1376+   gtk_widget_class_set_css_name (widget_class, "image");
1377+ }
1378+ 
1379+--- a/gtk/gtkinfobar.c
1380++++ b/gtk/gtkinfobar.c
1381+@@ -1276,7 +1276,6 @@
1382+   if (priv->message_type != message_type)
1383+     {
1384+       GtkStyleContext *context;
1385+-      AtkObject *atk_obj;
1386+       const char *type_class[] = {
1387+         GTK_STYLE_CLASS_INFO,
1388+         GTK_STYLE_CLASS_WARNING,
1389+@@ -1293,43 +1292,6 @@
1390+       priv->message_type = message_type;
1391+ 
1392+       gtk_widget_queue_draw (GTK_WIDGET (info_bar));
1393+-
1394+-      atk_obj = gtk_widget_get_accessible (GTK_WIDGET (info_bar));
1395+-      if (GTK_IS_ACCESSIBLE (atk_obj))
1396+-        {
1397+-          const char *name = NULL;
1398+-
1399+-          atk_object_set_role (atk_obj, ATK_ROLE_INFO_BAR);
1400+-
1401+-          switch (message_type)
1402+-            {
1403+-            case GTK_MESSAGE_INFO:
1404+-              name = _("Information");
1405+-              break;
1406+-
1407+-            case GTK_MESSAGE_QUESTION:
1408+-              name = _("Question");
1409+-              break;
1410+-
1411+-            case GTK_MESSAGE_WARNING:
1412+-              name = _("Warning");
1413+-              break;
1414+-
1415+-            case GTK_MESSAGE_ERROR:
1416+-              name = _("Error");
1417+-              break;
1418+-
1419+-            case GTK_MESSAGE_OTHER:
1420+-              break;
1421+-
1422+-            default:
1423+-              g_warning ("Unknown GtkMessageType %u", message_type);
1424+-              break;
1425+-            }
1426+-
1427+-          if (name)
1428+-            atk_object_set_name (atk_obj, name);
1429+-        }
1430+ 
1431+       if (type_class[priv->message_type])
1432+         gtk_style_context_add_class (context, type_class[priv->message_type]);
1433+--- a/gtk/gtklabel.c
1434++++ b/gtk/gtklabel.c
1435+@@ -1194,8 +1194,6 @@
1436+   gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Enter, 0,
1437+ 				"activate-current-link", 0);
1438+ 
1439+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_LABEL_ACCESSIBLE);
1440+-
1441+   gtk_widget_class_set_css_name (widget_class, "label");
1442+ 
1443+   quark_shortcuts_connected = g_quark_from_static_string ("gtk-label-shortcuts-connected");
1444+@@ -2146,12 +2144,9 @@
1445+       return;
1446+     }
1447+ 
1448+-  _gtk_label_accessible_text_deleted (label);
1449+   g_free (priv->text);
1450+   priv->text = str;
1451+ 
1452+-  _gtk_label_accessible_text_inserted (label);
1453+-
1454+   gtk_label_select_region_index (label, 0, 0);
1455+ }
1456+ 
1457+@@ -2680,7 +2675,6 @@
1458+     {
1459+       gtk_label_ensure_select_info (label);
1460+       priv->select_info->links = g_list_reverse (links);
1461+-      _gtk_label_accessible_update_links (label);
1462+       gtk_label_ensure_has_tooltip (label);
1463+     }
1464+ 
1465+@@ -4818,7 +4812,6 @@
1466+                 {
1467+                   priv->select_info->selection_anchor = link->start;
1468+                   priv->select_info->selection_end = link->start;
1469+-                  _gtk_label_accessible_focus_link_changed (label);
1470+                   break;
1471+                 }
1472+             }
1473+@@ -4851,7 +4844,6 @@
1474+                     {
1475+                       info->selection_anchor = focus_link->start;
1476+                       info->selection_end = focus_link->start;
1477+-                      _gtk_label_accessible_focus_link_changed (label);
1478+                     }
1479+                 }
1480+             }
1481+@@ -4882,7 +4874,6 @@
1482+                 if (!range_is_in_ellipsis (label, link->start, link->end))
1483+                   {
1484+                     gtk_label_select_region_index (label, link->start, link->start);
1485+-                    _gtk_label_accessible_focus_link_changed (label);
1486+                     return TRUE;
1487+                   }
1488+               }
1489+@@ -4897,7 +4888,6 @@
1490+                 if (!range_is_in_ellipsis (label, link->start, link->end))
1491+                   {
1492+                     gtk_label_select_region_index (label, link->start, link->start);
1493+-                    _gtk_label_accessible_focus_link_changed (label);
1494+                     return TRUE;
1495+                   }
1496+               }
1497+@@ -4951,7 +4941,6 @@
1498+           focus_link = l->data;
1499+           info->selection_anchor = focus_link->start;
1500+           info->selection_end = focus_link->start;
1501+-          _gtk_label_accessible_focus_link_changed (label);
1502+           gtk_widget_queue_draw (widget);
1503+ 
1504+           return TRUE;
1505+@@ -6732,7 +6721,6 @@
1506+   priv->select_info->links = NULL;
1507+   priv->select_info->active_link = NULL;
1508+ 
1509+-  _gtk_label_accessible_update_links (label);
1510+ }
1511+ 
1512+ static gboolean
1513+--- a/gtk/gtklevelbar.c
1514++++ b/gtk/gtklevelbar.c
1515+@@ -1136,7 +1136,6 @@
1516+ 
1517+   g_object_class_install_properties (oclass, LAST_PROPERTY, properties);
1518+ 
1519+-  gtk_widget_class_set_accessible_type (wclass, GTK_TYPE_LEVEL_BAR_ACCESSIBLE);
1520+   gtk_widget_class_set_css_name (wclass, "levelbar");
1521+ }
1522+ 
1523+--- a/gtk/gtklinkbutton.c
1524++++ b/gtk/gtklinkbutton.c
1525+@@ -209,7 +209,6 @@
1526+                   _gtk_marshal_BOOLEAN__VOID,
1527+                   G_TYPE_BOOLEAN, 0);
1528+ 
1529+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_LINK_BUTTON_ACCESSIBLE);
1530+   gtk_widget_class_set_css_name (widget_class, "button");
1531+ }
1532+ 
1533+--- a/gtk/gtklistbox.c
1534++++ b/gtk/gtklistbox.c
1535+@@ -447,8 +447,6 @@
1536+   GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass);
1537+   GtkBindingSet *binding_set;
1538+ 
1539+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_LIST_BOX_ACCESSIBLE);
1540+-
1541+   object_class->get_property = gtk_list_box_get_property;
1542+   object_class->set_property = gtk_list_box_set_property;
1543+   object_class->finalize = gtk_list_box_finalize;
1544+@@ -903,7 +901,6 @@
1545+ static void
1546+ gtk_list_box_selected_rows_changed (GtkListBox *box)
1547+ {
1548+-  _gtk_list_box_accessible_selection_changed (box);
1549+ }
1550+ 
1551+ /**
1552+@@ -1559,7 +1556,6 @@
1553+   if (grab_focus)
1554+     gtk_widget_grab_focus (GTK_WIDGET (row));
1555+   gtk_widget_queue_draw (GTK_WIDGET (row));
1556+-  _gtk_list_box_accessible_update_cursor (box, row);
1557+ }
1558+ 
1559+ static GtkListBox *
1560+@@ -3865,8 +3861,6 @@
1561+ {
1562+   GObjectClass *object_class = G_OBJECT_CLASS (klass);
1563+   GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
1564+-
1565+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_LIST_BOX_ROW_ACCESSIBLE);
1566+ 
1567+   object_class->get_property = gtk_list_box_row_get_property;
1568+   object_class->set_property = gtk_list_box_row_set_property;
1569+--- a/gtk/gtklockbutton.c
1570++++ b/gtk/gtklockbutton.c
1571+@@ -189,12 +189,10 @@
1572+ 
1573+     case PROP_TEXT_LOCK:
1574+       gtk_label_set_text (GTK_LABEL (priv->label_lock), g_value_get_string (value));
1575+-      _gtk_lock_button_accessible_name_changed (button);
1576+       break;
1577+ 
1578+     case PROP_TEXT_UNLOCK:
1579+       gtk_label_set_text (GTK_LABEL (priv->label_unlock), g_value_get_string (value));
1580+-      _gtk_lock_button_accessible_name_changed (button);
1581+       break;
1582+ 
1583+     case PROP_TOOLTIP_LOCK:
1584+@@ -322,7 +320,6 @@
1585+   gtk_widget_class_bind_template_child_private (widget_class, GtkLockButton, label_unlock);
1586+   gtk_widget_class_bind_template_child_private (widget_class, GtkLockButton, stack);
1587+ 
1588+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_LOCK_BUTTON_ACCESSIBLE);
1589+   gtk_widget_class_set_css_name (widget_class, "button");
1590+ }
1591+ 
1592+@@ -387,7 +384,6 @@
1593+   gtk_image_set_from_gicon (GTK_IMAGE (priv->image), icon, GTK_ICON_SIZE_MENU);
1594+   gtk_stack_set_visible_child (GTK_STACK (priv->stack),
1595+                                allowed ? priv->label_lock : priv->label_unlock);
1596+-  _gtk_lock_button_accessible_name_changed (button);
1597+   gtk_widget_set_tooltip_markup (GTK_WIDGET (button), tooltip);
1598+   gtk_widget_set_sensitive (GTK_WIDGET (button), sensitive);
1599+   gtk_widget_set_visible (GTK_WIDGET (button), visible);
1600+--- a/gtk/gtkmain.c
1601++++ b/gtk/gtkmain.c
1602+@@ -131,8 +131,6 @@
1603+ #include "gtkwindowprivate.h"
1604+ #include "gtkwindowgroup.h"
1605+ 
1606+-#include "a11y/gtkaccessibility.h"
1607+-
1608+ /* Private type definitions
1609+  */
1610+ typedef struct _GtkKeySnooperData        GtkKeySnooperData;
1611+@@ -712,7 +710,6 @@
1612+ static void
1613+ default_display_notify_cb (GdkDisplayManager *dm)
1614+ {
1615+-  _gtk_accessibility_init ();
1616+   debug_flags[0].display = gdk_display_get_default ();
1617+ }
1618+ 
1619+@@ -2434,18 +2431,6 @@
1620+ {
1621+   GSList *slist;
1622+   gint return_val = FALSE;
1623+-
1624+-  return_val = _gtk_accessibility_key_snooper (grab_widget, (GdkEventKey *) event);
1625+-
1626+-  slist = key_snoopers;
1627+-  while (slist && !return_val)
1628+-    {
1629+-      GtkKeySnooperData *data;
1630+-
1631+-      data = slist->data;
1632+-      slist = slist->next;
1633+-      return_val = (*data->func) (grab_widget, (GdkEventKey*) event, data->func_data);
1634+-    }
1635+ 
1636+   return return_val;
1637+ }
1638+--- a/gtk/gtkmenu.c
1639++++ b/gtk/gtkmenu.c
1640+@@ -1090,7 +1090,6 @@
1641+                                 GTK_TYPE_SCROLL_TYPE,
1642+                                 GTK_SCROLL_PAGE_DOWN);
1643+ 
1644+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_MENU_ACCESSIBLE);
1645+   gtk_widget_class_set_css_name (widget_class, "menu");
1646+ }
1647+ 
1648+--- a/gtk/gtkmenubar.c
1649++++ b/gtk/gtkmenubar.c
1650+@@ -275,7 +275,6 @@
1651+                                                              GTK_PARAM_READABLE|G_PARAM_DEPRECATED));
1652+ 
1653+   gtk_container_class_handle_border_width (container_class);
1654+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_MENU_BAR);
1655+   gtk_widget_class_set_css_name (widget_class, "menubar");
1656+ }
1657+ 
1658+--- a/gtk/gtkmenubutton.c
1659++++ b/gtk/gtkmenubutton.c
1660+@@ -568,7 +568,6 @@
1661+ 
1662+   g_object_class_install_properties (gobject_class, LAST_PROP, menu_button_props);
1663+ 
1664+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_MENU_BUTTON_ACCESSIBLE);
1665+   gtk_widget_class_set_css_name (widget_class, "button");
1666+ }
1667+ 
1668+--- a/gtk/gtkmenuitem.c
1669++++ b/gtk/gtkmenuitem.c
1670+@@ -919,7 +919,6 @@
1671+                                                              0, G_MAXINT, 12,
1672+                                                              GTK_PARAM_READABLE|G_PARAM_DEPRECATED));
1673+ 
1674+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_MENU_ITEM_ACCESSIBLE);
1675+   gtk_widget_class_set_css_name (widget_class, "menuitem");
1676+ 
1677+   gtk_container_class_handle_border_width (container_class);
1678+--- a/gtk/gtkmenushell.c
1679++++ b/gtk/gtkmenushell.c
1680+@@ -420,8 +420,6 @@
1681+                                                          P_("A boolean that determines whether the menu grabs the keyboard focus"),
1682+                                                          TRUE,
1683+                                                          GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
1684+-
1685+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_MENU_SHELL_ACCESSIBLE);
1686+ }
1687+ 
1688+ static GType
1689+--- a/gtk/gtkmessagedialog.c
1690++++ b/gtk/gtkmessagedialog.c
1691+@@ -163,8 +163,6 @@
1692+   
1693+   widget_class->style_updated = gtk_message_dialog_style_updated;
1694+ 
1695+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_ALERT);
1696+-
1697+   gobject_class->constructed = gtk_message_dialog_constructed;
1698+   gobject_class->set_property = gtk_message_dialog_set_property;
1699+   gobject_class->get_property = gtk_message_dialog_get_property;
1700+@@ -372,7 +370,6 @@
1701+ {
1702+   GtkMessageDialogPrivate *priv = dialog->priv;
1703+   const gchar *name = NULL;
1704+-  AtkObject *atk_obj;
1705+ 
1706+   if (priv->message_type == type)
1707+     return;
1708+@@ -403,14 +400,6 @@
1709+     default:
1710+       g_warning ("Unknown GtkMessageType %u", type);
1711+       break;
1712+-    }
1713+-
1714+-  atk_obj = gtk_widget_get_accessible (GTK_WIDGET (dialog));
1715+-  if (GTK_IS_ACCESSIBLE (atk_obj))
1716+-    {
1717+-      atk_object_set_role (atk_obj, ATK_ROLE_ALERT);
1718+-      if (name)
1719+-        atk_object_set_name (atk_obj, name);
1720+     }
1721+ 
1722+   g_object_notify (G_OBJECT (dialog), "message-type");
1723+--- a/gtk/gtkmodelbutton.c
1724++++ b/gtk/gtkmodelbutton.c
1725+@@ -247,15 +247,6 @@
1726+     gtk_css_gadget_set_state (button->gadget, state);
1727+ 
1728+   gtk_css_gadget_set_state (button->indicator_gadget, indicator_state);
1729+-
1730+-  if (button->role == GTK_BUTTON_ROLE_CHECK ||
1731+-      button->role == GTK_BUTTON_ROLE_RADIO)
1732+-    {
1733+-      AtkObject *object = _gtk_widget_peek_accessible (GTK_WIDGET (button));
1734+-      if (object)
1735+-        atk_object_notify_state_change (object, ATK_STATE_CHECKED,
1736+-                                        (indicator_state & GTK_STATE_FLAG_CHECKED));
1737+-    }
1738+ }
1739+ 
1740+ static void
1741+@@ -310,17 +301,13 @@
1742+ static void
1743+ update_node_name (GtkModelButton *button)
1744+ {
1745+-  AtkObject *accessible;
1746+-  AtkRole a11y_role;
1747+   const gchar *indicator_name;
1748+   gboolean indicator_visible;
1749+   GtkCssNode *indicator_node;
1750+ 
1751+-  accessible = gtk_widget_get_accessible (GTK_WIDGET (button));
1752+   switch (button->role)
1753+     {
1754+     case GTK_BUTTON_ROLE_NORMAL:
1755+-      a11y_role = ATK_ROLE_PUSH_BUTTON;
1756+       if (button->menu_name)
1757+         {
1758+           indicator_name = I_("arrow");
1759+@@ -334,13 +321,11 @@
1760+       break;
1761+ 
1762+     case GTK_BUTTON_ROLE_CHECK:
1763+-      a11y_role = ATK_ROLE_CHECK_BOX;
1764+       indicator_name = I_("check");
1765+       indicator_visible = TRUE;
1766+       break;
1767+ 
1768+     case GTK_BUTTON_ROLE_RADIO:
1769+-      a11y_role = ATK_ROLE_RADIO_BUTTON;
1770+       indicator_name = I_("radio");
1771+       indicator_visible = TRUE;
1772+       break;
1773+@@ -352,8 +337,6 @@
1774+   if (button->iconic)
1775+     indicator_visible = FALSE;
1776+ 
1777+-  atk_object_set_role (accessible, a11y_role);
1778+-
1779+   indicator_node = gtk_css_gadget_get_node (button->indicator_gadget);
1780+   gtk_css_node_set_name (indicator_node, indicator_name);
1781+   gtk_css_node_set_visible (indicator_node, indicator_visible);
1782+@@ -1099,18 +1082,6 @@
1783+   G_OBJECT_CLASS (gtk_model_button_parent_class)->finalize (object);
1784+ }
1785+ 
1786+-static AtkObject *
1787+-gtk_model_button_get_accessible (GtkWidget *widget)
1788+-{
1789+-  AtkObject *object;
1790+-
1791+-  object = GTK_WIDGET_CLASS (gtk_model_button_parent_class)->get_accessible (widget);
1792+-
1793+-  gtk_model_button_update_state (GTK_MODEL_BUTTON (widget));
1794+-
1795+-  return object;
1796+-}
1797+-
1798+ static void
1799+ gtk_model_button_class_init (GtkModelButtonClass *class)
1800+ {
1801+@@ -1132,7 +1103,6 @@
1802+   widget_class->destroy = gtk_model_button_destroy;
1803+   widget_class->state_flags_changed = gtk_model_button_state_flags_changed;
1804+   widget_class->direction_changed = gtk_model_button_direction_changed;
1805+-  widget_class->get_accessible = gtk_model_button_get_accessible;
1806+ 
1807+   button_class->clicked = gtk_model_button_clicked;
1808+ 
1809+@@ -1276,7 +1246,6 @@
1810+                           G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
1811+   g_object_class_install_properties (object_class, LAST_PROPERTY, properties);
1812+ 
1813+-  gtk_widget_class_set_accessible_role (GTK_WIDGET_CLASS (class), ATK_ROLE_PUSH_BUTTON);
1814+   gtk_widget_class_set_css_name (GTK_WIDGET_CLASS (class), "modelbutton");
1815+ }
1816+ 
1817+--- a/gtk/gtkmodelmenuitem.c
1818++++ b/gtk/gtkmodelmenuitem.c
1819+@@ -94,35 +94,27 @@
1820+ gtk_model_menu_item_set_action_role (GtkModelMenuItem       *item,
1821+                                      GtkMenuTrackerItemRole  role)
1822+ {
1823+-  AtkObject *accessible;
1824+-  AtkRole a11y_role;
1825+-
1826+   if (role == item->role)
1827+     return;
1828+ 
1829+   gtk_check_menu_item_set_draw_as_radio (GTK_CHECK_MENU_ITEM (item), role == GTK_MENU_TRACKER_ITEM_ROLE_RADIO);
1830+   gtk_model_menu_item_set_has_indicator (item, role != GTK_MENU_TRACKER_ITEM_ROLE_NORMAL);
1831+ 
1832+-  accessible = gtk_widget_get_accessible (GTK_WIDGET (item));
1833+   switch (role)
1834+     {
1835+     case GTK_MENU_TRACKER_ITEM_ROLE_NORMAL:
1836+-      a11y_role = ATK_ROLE_MENU_ITEM;
1837+       break;
1838+ 
1839+     case GTK_MENU_TRACKER_ITEM_ROLE_CHECK:
1840+-      a11y_role = ATK_ROLE_CHECK_MENU_ITEM;
1841+       break;
1842+ 
1843+     case GTK_MENU_TRACKER_ITEM_ROLE_RADIO:
1844+-      a11y_role = ATK_ROLE_RADIO_MENU_ITEM;
1845+       break;
1846+ 
1847+     default:
1848+       g_assert_not_reached ();
1849+     }
1850+ 
1851+-  atk_object_set_role (accessible, a11y_role);
1852+   g_object_notify (G_OBJECT (item), "action-role");
1853+ }
1854+ 
1855+@@ -499,8 +491,6 @@
1856+   g_object_class_install_property (object_class, PROP_ACCEL,
1857+                                    g_param_spec_string ("accel", "accel", "accel", NULL,
1858+                                                         G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY));
1859+-
1860+-  gtk_widget_class_set_accessible_role (GTK_WIDGET_CLASS (class), ATK_ROLE_MENU_ITEM);
1861+ }
1862+ 
1863+ GtkWidget *
1864+--- a/gtk/gtknotebook.c
1865++++ b/gtk/gtknotebook.c
1866+@@ -1282,7 +1282,6 @@
1867+ 
1868+   gtk_container_class_handle_border_width (container_class);
1869+ 
1870+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_NOTEBOOK_ACCESSIBLE);
1871+   gtk_widget_class_set_css_name (widget_class, "notebook");
1872+ }
1873+ 
1874+--- a/gtk/gtkpaned.c
1875++++ b/gtk/gtkpaned.c
1876+@@ -692,7 +692,6 @@
1877+   add_move_binding (binding_set, GDK_KEY_End, 0, GTK_SCROLL_END);
1878+   add_move_binding (binding_set, GDK_KEY_KP_End, 0, GTK_SCROLL_END);
1879+ 
1880+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_PANED_ACCESSIBLE);
1881+   gtk_widget_class_set_css_name (widget_class, "paned");
1882+ }
1883+ 
1884+--- a/gtk/gtkpango.c
1885++++ b/gtk/gtkpango.c
1886+@@ -233,301 +233,7 @@
1887+     cairo_move_to (cr, current_x, current_y);
1888+ }
1889+ 
1890+-static AtkAttributeSet *
1891+-add_attribute (AtkAttributeSet  *attributes,
1892+-               AtkTextAttribute  attr,
1893+-               const gchar      *value)
1894+-{
1895+-  AtkAttribute *at;
1896+-
1897+-  at = g_new (AtkAttribute, 1);
1898+-  at->name = g_strdup (atk_text_attribute_get_name (attr));
1899+-  at->value = g_strdup (value);
1900+-
1901+-  return g_slist_prepend (attributes, at);
1902+-}
1903+-
1904+ /*
1905+- * _gtk_pango_get_default_attributes:
1906+- * @attributes: a #AtkAttributeSet to add the attributes to
1907+- * @layout: the #PangoLayout from which to get attributes
1908+- *
1909+- * Adds the default text attributes from @layout to @attributes,
1910+- * after translating them from Pango attributes to ATK attributes.
1911+- *
1912+- * This is a convenience function that can be used to implement
1913+- * support for the #AtkText interface in widgets using Pango
1914+- * layouts.
1915+- *
1916+- * Returns: the modified @attributes
1917+- */
1918+-AtkAttributeSet*
1919+-_gtk_pango_get_default_attributes (AtkAttributeSet *attributes,
1920+-                                   PangoLayout     *layout)
1921+-{
1922+-  PangoContext *context;
1923+-  gint i;
1924+-  PangoWrapMode mode;
1925+-
1926+-  context = pango_layout_get_context (layout);
1927+-  if (context)
1928+-    {
1929+-      PangoLanguage *language;
1930+-      PangoFontDescription *font;
1931+-
1932+-      language = pango_context_get_language (context);
1933+-      if (language)
1934+-        attributes = add_attribute (attributes, ATK_TEXT_ATTR_LANGUAGE,
1935+-                         pango_language_to_string (language));
1936+-
1937+-      font = pango_context_get_font_description (context);
1938+-      if (font)
1939+-        {
1940+-          gchar buf[60];
1941+-          attributes = add_attribute (attributes, ATK_TEXT_ATTR_STYLE,
1942+-                           atk_text_attribute_get_value (ATK_TEXT_ATTR_STYLE,
1943+-                                 pango_font_description_get_style (font)));
1944+-          attributes = add_attribute (attributes, ATK_TEXT_ATTR_VARIANT,
1945+-                           atk_text_attribute_get_value (ATK_TEXT_ATTR_VARIANT,
1946+-                                 pango_font_description_get_variant (font)));
1947+-          attributes = add_attribute (attributes, ATK_TEXT_ATTR_STRETCH,
1948+-                           atk_text_attribute_get_value (ATK_TEXT_ATTR_STRETCH,
1949+-                                 pango_font_description_get_stretch (font)));
1950+-          attributes = add_attribute (attributes, ATK_TEXT_ATTR_FAMILY_NAME,
1951+-                           pango_font_description_get_family (font));
1952+-          g_snprintf (buf, 60, "%d", pango_font_description_get_weight (font));
1953+-          attributes = add_attribute (attributes, ATK_TEXT_ATTR_WEIGHT, buf);
1954+-          g_snprintf (buf, 60, "%i", pango_font_description_get_size (font) / PANGO_SCALE);
1955+-          attributes = add_attribute (attributes, ATK_TEXT_ATTR_SIZE, buf);
1956+-        }
1957+-    }
1958+-  if (pango_layout_get_justify (layout))
1959+-    {
1960+-      i = 3;
1961+-    }
1962+-  else
1963+-    {
1964+-      PangoAlignment align;
1965+-
1966+-      align = pango_layout_get_alignment (layout);
1967+-      if (align == PANGO_ALIGN_LEFT)
1968+-        i = 0;
1969+-      else if (align == PANGO_ALIGN_CENTER)
1970+-        i = 2;
1971+-      else   /* PANGO_ALIGN_RIGHT */
1972+-        i = 1;
1973+-    }
1974+-  attributes = add_attribute (attributes, ATK_TEXT_ATTR_JUSTIFICATION,
1975+-                   atk_text_attribute_get_value (ATK_TEXT_ATTR_JUSTIFICATION, i));
1976+-  mode = pango_layout_get_wrap (layout);
1977+-  if (mode == PANGO_WRAP_WORD)
1978+-    i = 2;
1979+-  else   /* PANGO_WRAP_CHAR */
1980+-    i = 1;
1981+-  attributes = add_attribute (attributes, ATK_TEXT_ATTR_WRAP_MODE,
1982+-                   atk_text_attribute_get_value (ATK_TEXT_ATTR_WRAP_MODE, i));
1983+-
1984+-  attributes = add_attribute (attributes, ATK_TEXT_ATTR_STRIKETHROUGH,
1985+-                   atk_text_attribute_get_value (ATK_TEXT_ATTR_STRIKETHROUGH, 0));
1986+-  attributes = add_attribute (attributes, ATK_TEXT_ATTR_UNDERLINE,
1987+-                   atk_text_attribute_get_value (ATK_TEXT_ATTR_UNDERLINE, 0));
1988+-  attributes = add_attribute (attributes, ATK_TEXT_ATTR_RISE, "0");
1989+-  attributes = add_attribute (attributes, ATK_TEXT_ATTR_SCALE, "1");
1990+-  attributes = add_attribute (attributes, ATK_TEXT_ATTR_BG_FULL_HEIGHT, "0");
1991+-  attributes = add_attribute (attributes, ATK_TEXT_ATTR_PIXELS_INSIDE_WRAP, "0");
1992+-  attributes = add_attribute (attributes, ATK_TEXT_ATTR_PIXELS_BELOW_LINES, "0");
1993+-  attributes = add_attribute (attributes, ATK_TEXT_ATTR_PIXELS_ABOVE_LINES, "0");
1994+-  attributes = add_attribute (attributes, ATK_TEXT_ATTR_EDITABLE,
1995+-                   atk_text_attribute_get_value (ATK_TEXT_ATTR_EDITABLE, 0));
1996+-  attributes = add_attribute (attributes, ATK_TEXT_ATTR_INVISIBLE,
1997+-                   atk_text_attribute_get_value (ATK_TEXT_ATTR_INVISIBLE, 0));
1998+-  attributes = add_attribute (attributes, ATK_TEXT_ATTR_INDENT, "0");
1999+-  attributes = add_attribute (attributes, ATK_TEXT_ATTR_RIGHT_MARGIN, "0");
2000+-  attributes = add_attribute (attributes, ATK_TEXT_ATTR_LEFT_MARGIN, "0");
2001+-
2002+-  return attributes;
2003+-}
2004+-
2005+-/*
2006+- * _gtk_pango_get_run_attributes:
2007+- * @attributes: a #AtkAttributeSet to add attributes to
2008+- * @layout: the #PangoLayout to get the attributes from
2009+- * @offset: the offset at which the attributes are wanted
2010+- * @start_offset: return location for the starting offset
2011+- *    of the current run
2012+- * @end_offset: return location for the ending offset of the
2013+- *    current run
2014+- *
2015+- * Finds the “run” around index (i.e. the maximal range of characters
2016+- * where the set of applicable attributes remains constant) and
2017+- * returns the starting and ending offsets for it.
2018+- *
2019+- * The attributes for the run are added to @attributes, after
2020+- * translating them from Pango attributes to ATK attributes.
2021+- *
2022+- * This is a convenience function that can be used to implement
2023+- * support for the #AtkText interface in widgets using Pango
2024+- * layouts.
2025+- *
2026+- * Returns: the modified #AtkAttributeSet
2027+- */
2028+-AtkAttributeSet *
2029+-_gtk_pango_get_run_attributes (AtkAttributeSet *attributes,
2030+-                               PangoLayout     *layout,
2031+-                               gint             offset,
2032+-                               gint            *start_offset,
2033+-                               gint            *end_offset)
2034+-{
2035+-  PangoAttrIterator *iter;
2036+-  PangoAttrList *attr;
2037+-  PangoAttrString *pango_string;
2038+-  PangoAttrInt *pango_int;
2039+-  PangoAttrColor *pango_color;
2040+-  PangoAttrLanguage *pango_lang;
2041+-  PangoAttrFloat *pango_float;
2042+-  gint index, start_index, end_index;
2043+-  gboolean is_next;
2044+-  glong len;
2045+-  const gchar *text;
2046+-  gchar *value;
2047+-
2048+-  text = pango_layout_get_text (layout);
2049+-  len = g_utf8_strlen (text, -1);
2050+-
2051+-  /* Grab the attributes of the PangoLayout, if any */
2052+-  attr = pango_layout_get_attributes (layout);
2053+-
2054+-  if (attr == NULL)
2055+-    {
2056+-      *start_offset = 0;
2057+-      *end_offset = len;
2058+-      return attributes;
2059+-    }
2060+-
2061+-  iter = pango_attr_list_get_iterator (attr);
2062+-  /* Get invariant range offsets */
2063+-  /* If offset out of range, set offset in range */
2064+-  if (offset > len)
2065+-    offset = len;
2066+-  else if (offset < 0)
2067+-    offset = 0;
2068+-
2069+-  index = g_utf8_offset_to_pointer (text, offset) - text;
2070+-  pango_attr_iterator_range (iter, &start_index, &end_index);
2071+-  is_next = TRUE;
2072+-  while (is_next)
2073+-    {
2074+-      if (index >= start_index && index < end_index)
2075+-        {
2076+-          *start_offset = g_utf8_pointer_to_offset (text, text + start_index);
2077+-          if (end_index == G_MAXINT) /* Last iterator */
2078+-            end_index = len;
2079+-
2080+-          *end_offset = g_utf8_pointer_to_offset (text, text + end_index);
2081+-          break;
2082+-        }
2083+-      is_next = pango_attr_iterator_next (iter);
2084+-      pango_attr_iterator_range (iter, &start_index, &end_index);
2085+-    }
2086+-
2087+-  /* Get attributes */
2088+-  pango_string = (PangoAttrString*) pango_attr_iterator_get (iter, PANGO_ATTR_FAMILY);
2089+-  if (pango_string != NULL)
2090+-    {
2091+-      value = g_strdup_printf ("%s", pango_string->value);
2092+-      attributes = add_attribute (attributes, ATK_TEXT_ATTR_FAMILY_NAME, value);
2093+-      g_free (value);
2094+-    }
2095+-  pango_int = (PangoAttrInt*) pango_attr_iterator_get (iter, PANGO_ATTR_STYLE);
2096+-  if (pango_int != NULL)
2097+-    {
2098+-      attributes = add_attribute (attributes, ATK_TEXT_ATTR_STYLE,
2099+-                       atk_text_attribute_get_value (ATK_TEXT_ATTR_STYLE, pango_int->value));
2100+-    }
2101+-  pango_int = (PangoAttrInt*) pango_attr_iterator_get (iter, PANGO_ATTR_WEIGHT);
2102+-  if (pango_int != NULL)
2103+-    {
2104+-      value = g_strdup_printf ("%i", pango_int->value);
2105+-      attributes = add_attribute (attributes, ATK_TEXT_ATTR_WEIGHT, value);
2106+-      g_free (value);
2107+-    }
2108+-  pango_int = (PangoAttrInt*) pango_attr_iterator_get (iter, PANGO_ATTR_VARIANT);
2109+-  if (pango_int != NULL)
2110+-    {
2111+-      attributes = add_attribute (attributes, ATK_TEXT_ATTR_VARIANT,
2112+-                       atk_text_attribute_get_value (ATK_TEXT_ATTR_VARIANT, pango_int->value));
2113+-    }
2114+-  pango_int = (PangoAttrInt*) pango_attr_iterator_get (iter, PANGO_ATTR_STRETCH);
2115+-  if (pango_int != NULL)
2116+-    {
2117+-      attributes = add_attribute (attributes, ATK_TEXT_ATTR_STRETCH,
2118+-                       atk_text_attribute_get_value (ATK_TEXT_ATTR_STRETCH, pango_int->value));
2119+-    }
2120+-  pango_int = (PangoAttrInt*) pango_attr_iterator_get (iter, PANGO_ATTR_SIZE);
2121+-  if (pango_int != NULL)
2122+-    {
2123+-      value = g_strdup_printf ("%i", pango_int->value / PANGO_SCALE);
2124+-      attributes = add_attribute (attributes, ATK_TEXT_ATTR_SIZE, value);
2125+-      g_free (value);
2126+-    }
2127+-  pango_int = (PangoAttrInt*) pango_attr_iterator_get (iter, PANGO_ATTR_UNDERLINE);
2128+-  if (pango_int != NULL)
2129+-    {
2130+-      attributes = add_attribute (attributes, ATK_TEXT_ATTR_UNDERLINE,
2131+-                       atk_text_attribute_get_value (ATK_TEXT_ATTR_UNDERLINE, pango_int->value));
2132+-    }
2133+-  pango_int = (PangoAttrInt*) pango_attr_iterator_get (iter, PANGO_ATTR_STRIKETHROUGH);
2134+-  if (pango_int != NULL)
2135+-    {
2136+-      attributes = add_attribute (attributes, ATK_TEXT_ATTR_STRIKETHROUGH,
2137+-                       atk_text_attribute_get_value (ATK_TEXT_ATTR_STRIKETHROUGH, pango_int->value));
2138+-    }
2139+-  pango_int = (PangoAttrInt*) pango_attr_iterator_get (iter, PANGO_ATTR_RISE);
2140+-  if (pango_int != NULL)
2141+-    {
2142+-      value = g_strdup_printf ("%i", pango_int->value);
2143+-      attributes = add_attribute (attributes, ATK_TEXT_ATTR_RISE, value);
2144+-      g_free (value);
2145+-    }
2146+-  pango_lang = (PangoAttrLanguage*) pango_attr_iterator_get (iter, PANGO_ATTR_LANGUAGE);
2147+-  if (pango_lang != NULL)
2148+-    {
2149+-      attributes = add_attribute (attributes, ATK_TEXT_ATTR_LANGUAGE,
2150+-                                  pango_language_to_string (pango_lang->value));
2151+-    }
2152+-  pango_float = (PangoAttrFloat*) pango_attr_iterator_get (iter, PANGO_ATTR_SCALE);
2153+-  if (pango_float != NULL)
2154+-    {
2155+-      value = g_strdup_printf ("%g", pango_float->value);
2156+-      attributes = add_attribute (attributes, ATK_TEXT_ATTR_SCALE, value);
2157+-      g_free (value);
2158+-    }
2159+-  pango_color = (PangoAttrColor*) pango_attr_iterator_get (iter, PANGO_ATTR_FOREGROUND);
2160+-  if (pango_color != NULL)
2161+-    {
2162+-      value = g_strdup_printf ("%u,%u,%u",
2163+-                               pango_color->color.red,
2164+-                               pango_color->color.green,
2165+-                               pango_color->color.blue);
2166+-      attributes = add_attribute (attributes, ATK_TEXT_ATTR_FG_COLOR, value);
2167+-      g_free (value);
2168+-    }
2169+-  pango_color = (PangoAttrColor*) pango_attr_iterator_get (iter, PANGO_ATTR_BACKGROUND);
2170+-  if (pango_color != NULL)
2171+-    {
2172+-      value = g_strdup_printf ("%u,%u,%u",
2173+-                               pango_color->color.red,
2174+-                               pango_color->color.green,
2175+-                               pango_color->color.blue);
2176+-      attributes = add_attribute (attributes, ATK_TEXT_ATTR_BG_COLOR, value);
2177+-      g_free (value);
2178+-    }
2179+-  pango_attr_iterator_destroy (iter);
2180+-
2181+-  return attributes;
2182+-}
2183+-
2184+-/*
2185+  * _gtk_pango_move_chars:
2186+  * @layout: a #PangoLayout
2187+  * @offset: a character offset in @layout
2188+@@ -793,7 +499,6 @@
2189+ 
2190+ static void
2191+ pango_layout_get_line_before (PangoLayout     *layout,
2192+-                              AtkTextBoundary  boundary_type,
2193+                               gint             offset,
2194+                               gint            *start_offset,
2195+                               gint            *end_offset)
2196+@@ -818,23 +523,7 @@
2197+           /* Found line for offset */
2198+           if (prev_line)
2199+             {
2200+-              switch (boundary_type)
2201+-                {
2202+-                case ATK_TEXT_BOUNDARY_LINE_START:
2203+-                  end_index = start_index;
2204+-                  start_index = prev_line->start_index;
2205+-                  break;
2206+-                case ATK_TEXT_BOUNDARY_LINE_END:
2207+-                  if (prev_prev_line)
2208+-                    start_index = prev_prev_line->start_index + prev_prev_line->length;
2209+-                  else
2210+-                    start_index = 0;
2211+-                  end_index = prev_line->start_index + prev_line->length;
2212+-                  break;
2213+-                default:
2214+-                  g_assert_not_reached();
2215+                 }
2216+-            }
2217+           else
2218+             start_index = end_index = 0;
2219+ 
2220+@@ -860,7 +549,6 @@
2221+ 
2222+ static void
2223+ pango_layout_get_line_at (PangoLayout     *layout,
2224+-                          AtkTextBoundary  boundary_type,
2225+                           gint             offset,
2226+                           gint            *start_offset,
2227+                           gint            *end_offset)
2228+@@ -882,21 +570,6 @@
2229+ 
2230+       if (index >= start_index && index <= end_index)
2231+         {
2232+-          /* Found line for offset */
2233+-          switch (boundary_type)
2234+-            {
2235+-            case ATK_TEXT_BOUNDARY_LINE_START:
2236+-              if (pango_layout_iter_next_line (iter))
2237+-                end_index = pango_layout_iter_get_line (iter)->start_index;
2238+-              break;
2239+-            case ATK_TEXT_BOUNDARY_LINE_END:
2240+-              if (prev_line)
2241+-                start_index = prev_line->start_index + prev_line->length;
2242+-              break;
2243+-            default:
2244+-              g_assert_not_reached();
2245+-            }
2246+-
2247+           found = TRUE;
2248+           break;
2249+         }
2250+@@ -918,7 +591,6 @@
2251+ 
2252+ static void
2253+ pango_layout_get_line_after (PangoLayout     *layout,
2254+-                             AtkTextBoundary  boundary_type,
2255+                              gint             offset,
2256+                              gint            *start_offset,
2257+                              gint            *end_offset)
2258+@@ -944,23 +616,7 @@
2259+           if (pango_layout_iter_next_line (iter))
2260+             {
2261+               line = pango_layout_iter_get_line (iter);
2262+-              switch (boundary_type)
2263+-                {
2264+-                case ATK_TEXT_BOUNDARY_LINE_START:
2265+-                  start_index = line->start_index;
2266+-                  if (pango_layout_iter_next_line (iter))
2267+-                    end_index = pango_layout_iter_get_line (iter)->start_index;
2268+-                  else
2269+-                    end_index = start_index + line->length;
2270+-                  break;
2271+-                case ATK_TEXT_BOUNDARY_LINE_END:
2272+-                  start_index = end_index;
2273+-                  end_index = line->start_index + line->length;
2274+-                  break;
2275+-                default:
2276+-                  g_assert_not_reached();
2277+                 }
2278+-            }
2279+           else
2280+             start_index = end_index;
2281+ 
2282+@@ -986,23 +642,17 @@
2283+ /*
2284+  * _gtk_pango_get_text_before:
2285+  * @layout: a #PangoLayout
2286+- * @boundary_type: a #AtkTextBoundary
2287+  * @offset: a character offset in @layout
2288+  * @start_offset: return location for the start of the returned text
2289+  * @end_offset: return location for the end of the return text
2290+  *
2291+  * Gets a slice of the text from @layout before @offset.
2292+  *
2293+- * The @boundary_type determines the size of the returned slice of
2294+- * text. For the exact semantics of this function, see
2295+- * atk_text_get_text_before_offset().
2296+- *
2297+  * Returns: a newly allocated string containing a slice of text
2298+  *     from layout. Free with g_free().
2299+  */
2300+ gchar *
2301+ _gtk_pango_get_text_before (PangoLayout     *layout,
2302+-                            AtkTextBoundary  boundary_type,
2303+                             gint             offset,
2304+                             gint            *start_offset,
2305+                             gint            *end_offset)
2306+@@ -1026,56 +676,6 @@
2307+   start = offset;
2308+   end = start;
2309+ 
2310+-  switch (boundary_type)
2311+-    {
2312+-    case ATK_TEXT_BOUNDARY_CHAR:
2313+-      start = _gtk_pango_move_chars (layout, start, -1);
2314+-      break;
2315+-
2316+-    case ATK_TEXT_BOUNDARY_WORD_START:
2317+-      if (!attrs[start].is_word_start)
2318+-        start = _gtk_pango_move_words (layout, start, -1);
2319+-      end = start;
2320+-      start = _gtk_pango_move_words (layout, start, -1);
2321+-      break;
2322+-
2323+-    case ATK_TEXT_BOUNDARY_WORD_END:
2324+-      if (_gtk_pango_is_inside_word (layout, start) &&
2325+-          !attrs[start].is_word_start)
2326+-        start = _gtk_pango_move_words (layout, start, -1);
2327+-      while (!attrs[start].is_word_end && start > 0)
2328+-        start = _gtk_pango_move_chars (layout, start, -1);
2329+-      end = start;
2330+-      start = _gtk_pango_move_words (layout, start, -1);
2331+-      while (!attrs[start].is_word_end && start > 0)
2332+-        start = _gtk_pango_move_chars (layout, start, -1);
2333+-      break;
2334+-
2335+-    case ATK_TEXT_BOUNDARY_SENTENCE_START:
2336+-      if (!attrs[start].is_sentence_start)
2337+-        start = _gtk_pango_move_sentences (layout, start, -1);
2338+-      end = start;
2339+-      start = _gtk_pango_move_sentences (layout, start, -1);
2340+-      break;
2341+-
2342+-    case ATK_TEXT_BOUNDARY_SENTENCE_END:
2343+-      if (_gtk_pango_is_inside_sentence (layout, start) &&
2344+-          !attrs[start].is_sentence_start)
2345+-        start = _gtk_pango_move_sentences (layout, start, -1);
2346+-      while (!attrs[start].is_sentence_end && start > 0)
2347+-        start = _gtk_pango_move_chars (layout, start, -1);
2348+-      end = start;
2349+-      start = _gtk_pango_move_sentences (layout, start, -1);
2350+-      while (!attrs[start].is_sentence_end && start > 0)
2351+-        start = _gtk_pango_move_chars (layout, start, -1);
2352+-      break;
2353+-
2354+-    case ATK_TEXT_BOUNDARY_LINE_START:
2355+-    case ATK_TEXT_BOUNDARY_LINE_END:
2356+-      pango_layout_get_line_before (layout, boundary_type, offset, &start, &end);
2357+-      break;
2358+-    }
2359+-
2360+   *start_offset = start;
2361+   *end_offset = end;
2362+ 
2363+@@ -1087,23 +687,17 @@
2364+ /*
2365+  * _gtk_pango_get_text_after:
2366+  * @layout: a #PangoLayout
2367+- * @boundary_type: a #AtkTextBoundary
2368+  * @offset: a character offset in @layout
2369+  * @start_offset: return location for the start of the returned text
2370+  * @end_offset: return location for the end of the return text
2371+  *
2372+  * Gets a slice of the text from @layout after @offset.
2373+  *
2374+- * The @boundary_type determines the size of the returned slice of
2375+- * text. For the exact semantics of this function, see
2376+- * atk_text_get_text_after_offset().
2377+- *
2378+  * Returns: a newly allocated string containing a slice of text
2379+  *     from layout. Free with g_free().
2380+  */
2381+ gchar *
2382+ _gtk_pango_get_text_after (PangoLayout     *layout,
2383+-                           AtkTextBoundary  boundary_type,
2384+                            gint             offset,
2385+                            gint            *start_offset,
2386+                            gint            *end_offset)
2387+@@ -1127,62 +721,6 @@
2388+   start = offset;
2389+   end = start;
2390+ 
2391+-  switch (boundary_type)
2392+-    {
2393+-    case ATK_TEXT_BOUNDARY_CHAR:
2394+-      start = _gtk_pango_move_chars (layout, start, 1);
2395+-      end = start;
2396+-      end = _gtk_pango_move_chars (layout, end, 1);
2397+-      break;
2398+-
2399+-    case ATK_TEXT_BOUNDARY_WORD_START:
2400+-      if (_gtk_pango_is_inside_word (layout, end))
2401+-        end = _gtk_pango_move_words (layout, end, 1);
2402+-      while (!attrs[end].is_word_start && end < n_attrs - 1)
2403+-        end = _gtk_pango_move_chars (layout, end, 1);
2404+-      start = end;
2405+-      if (end < n_attrs - 1)
2406+-        {
2407+-          end = _gtk_pango_move_words (layout, end, 1);
2408+-          while (!attrs[end].is_word_start && end < n_attrs - 1)
2409+-            end = _gtk_pango_move_chars (layout, end, 1);
2410+-        }
2411+-      break;
2412+-
2413+-    case ATK_TEXT_BOUNDARY_WORD_END:
2414+-      end = _gtk_pango_move_words (layout, end, 1);
2415+-      start = end;
2416+-      if (end < n_attrs - 1)
2417+-        end = _gtk_pango_move_words (layout, end, 1);
2418+-      break;
2419+-
2420+-    case ATK_TEXT_BOUNDARY_SENTENCE_START:
2421+-      if (_gtk_pango_is_inside_sentence (layout, end))
2422+-        end = _gtk_pango_move_sentences (layout, end, 1);
2423+-      while (!attrs[end].is_sentence_start && end < n_attrs - 1)
2424+-        end = _gtk_pango_move_chars (layout, end, 1);
2425+-      start = end;
2426+-      if (end < n_attrs - 1)
2427+-        {
2428+-          end = _gtk_pango_move_sentences (layout, end, 1);
2429+-          while (!attrs[end].is_sentence_start && end < n_attrs - 1)
2430+-            end = _gtk_pango_move_chars (layout, end, 1);
2431+-        }
2432+-      break;
2433+-
2434+-    case ATK_TEXT_BOUNDARY_SENTENCE_END:
2435+-      end = _gtk_pango_move_sentences (layout, end, 1);
2436+-      start = end;
2437+-      if (end < n_attrs - 1)
2438+-        end = _gtk_pango_move_sentences (layout, end, 1);
2439+-      break;
2440+-
2441+-    case ATK_TEXT_BOUNDARY_LINE_START:
2442+-    case ATK_TEXT_BOUNDARY_LINE_END:
2443+-      pango_layout_get_line_after (layout, boundary_type, offset, &start, &end);
2444+-      break;
2445+-    }
2446+-
2447+   *start_offset = start;
2448+   *end_offset = end;
2449+ 
2450+@@ -1194,23 +732,17 @@
2451+ /*
2452+  * _gtk_pango_get_text_at:
2453+  * @layout: a #PangoLayout
2454+- * @boundary_type: a #AtkTextBoundary
2455+  * @offset: a character offset in @layout
2456+  * @start_offset: return location for the start of the returned text
2457+  * @end_offset: return location for the end of the return text
2458+  *
2459+  * Gets a slice of the text from @layout at @offset.
2460+  *
2461+- * The @boundary_type determines the size of the returned slice of
2462+- * text. For the exact semantics of this function, see
2463+- * atk_text_get_text_after_offset().
2464+- *
2465+  * Returns: a newly allocated string containing a slice of text
2466+  *     from layout. Free with g_free().
2467+  */
2468+ gchar *
2469+ _gtk_pango_get_text_at (PangoLayout     *layout,
2470+-                        AtkTextBoundary  boundary_type,
2471+                         gint             offset,
2472+                         gint            *start_offset,
2473+                         gint            *end_offset)
2474+@@ -1233,54 +765,6 @@
2475+ 
2476+   start = offset;
2477+   end = start;
2478+-
2479+-  switch (boundary_type)
2480+-    {
2481+-    case ATK_TEXT_BOUNDARY_CHAR:
2482+-      end = _gtk_pango_move_chars (layout, end, 1);
2483+-      break;
2484+-
2485+-    case ATK_TEXT_BOUNDARY_WORD_START:
2486+-      if (!attrs[start].is_word_start)
2487+-        start = _gtk_pango_move_words (layout, start, -1);
2488+-      if (_gtk_pango_is_inside_word (layout, end))
2489+-        end = _gtk_pango_move_words (layout, end, 1);
2490+-      while (!attrs[end].is_word_start && end < n_attrs - 1)
2491+-        end = _gtk_pango_move_chars (layout, end, 1);
2492+-      break;
2493+-
2494+-    case ATK_TEXT_BOUNDARY_WORD_END:
2495+-      if (_gtk_pango_is_inside_word (layout, start) &&
2496+-          !attrs[start].is_word_start)
2497+-        start = _gtk_pango_move_words (layout, start, -1);
2498+-      while (!attrs[start].is_word_end && start > 0)
2499+-        start = _gtk_pango_move_chars (layout, start, -1);
2500+-      end = _gtk_pango_move_words (layout, end, 1);
2501+-      break;
2502+-
2503+-    case ATK_TEXT_BOUNDARY_SENTENCE_START:
2504+-      if (!attrs[start].is_sentence_start)
2505+-        start = _gtk_pango_move_sentences (layout, start, -1);
2506+-      if (_gtk_pango_is_inside_sentence (layout, end))
2507+-        end = _gtk_pango_move_sentences (layout, end, 1);
2508+-      while (!attrs[end].is_sentence_start && end < n_attrs - 1)
2509+-        end = _gtk_pango_move_chars (layout, end, 1);
2510+-      break;
2511+-
2512+-    case ATK_TEXT_BOUNDARY_SENTENCE_END:
2513+-      if (_gtk_pango_is_inside_sentence (layout, start) &&
2514+-          !attrs[start].is_sentence_start)
2515+-        start = _gtk_pango_move_sentences (layout, start, -1);
2516+-      while (!attrs[start].is_sentence_end && start > 0)
2517+-        start = _gtk_pango_move_chars (layout, start, -1);
2518+-      end = _gtk_pango_move_sentences (layout, end, 1);
2519+-      break;
2520+-
2521+-    case ATK_TEXT_BOUNDARY_LINE_START:
2522+-    case ATK_TEXT_BOUNDARY_LINE_END:
2523+-      pango_layout_get_line_at (layout, boundary_type, offset, &start, &end);
2524+-      break;
2525+-    }
2526+ 
2527+   *start_offset = start;
2528+   *end_offset = end;
2529+--- a/gtk/gtkpango.h
2530++++ b/gtk/gtkpango.h
2531+@@ -27,7 +27,6 @@
2532+ 
2533+ 
2534+ #include <pango/pangocairo.h>
2535+-#include <atk/atk.h>
2536+ 
2537+ G_BEGIN_DECLS
2538+ 
2539+@@ -35,15 +34,6 @@
2540+                                                     PangoLayout     *layout);
2541+ 
2542+ 
2543+-AtkAttributeSet *_gtk_pango_get_default_attributes (AtkAttributeSet *attributes,
2544+-                                                    PangoLayout     *layout);
2545+-
2546+-AtkAttributeSet *_gtk_pango_get_run_attributes     (AtkAttributeSet *attributes,
2547+-                                                    PangoLayout     *layout,
2548+-                                                    gint             offset,
2549+-                                                    gint            *start_offset,
2550+-                                                    gint            *end_offset);
2551+-
2552+ gint _gtk_pango_move_chars     (PangoLayout  *layout,
2553+                                 gint          offset,
2554+                                 gint          count);
2555+@@ -64,17 +54,14 @@
2556+ 
2557+ 
2558+ gchar *_gtk_pango_get_text_before (PangoLayout     *layout,
2559+-                                   AtkTextBoundary  boundary_type,
2560+                                    gint             offset,
2561+                                    gint            *start_offset,
2562+                                    gint            *end_offset);
2563+ gchar *_gtk_pango_get_text_at     (PangoLayout     *layout,
2564+-                                   AtkTextBoundary  boundary_type,
2565+                                    gint             offset,
2566+                                    gint            *start_offset,
2567+                                    gint            *end_offset);
2568+ gchar *_gtk_pango_get_text_after  (PangoLayout     *layout,
2569+-                                   AtkTextBoundary  boundary_type,
2570+                                    gint             offset,
2571+                                    gint            *start_offset,
2572+                                    gint            *end_offset);
2573+--- a/gtk/gtkpathbar.c
2574++++ b/gtk/gtkpathbar.c
2575+@@ -1550,7 +1550,6 @@ make_directory_button (GtkPathBar  *path_bar,
2576+ 		       gboolean     current_dir,
2577+ 		       gboolean     file_is_hidden)
2578+ {
2579+-  AtkObject *atk_obj;
2580+   GtkWidget *child = NULL;
2581+   ButtonData *button_data;
2582+ 
2583+@@ -1559,7 +1558,6 @@ make_directory_button (GtkPathBar  *path_bar,
2584+   button_data = g_new0 (ButtonData, 1);
2585+   button_data->type = find_button_type (path_bar, file, root_file);
2586+   button_data->button = gtk_toggle_button_new ();
2587+-  atk_obj = gtk_widget_get_accessible (button_data->button);
2588+   gtk_widget_set_focus_on_click (button_data->button, FALSE);
2589+   gtk_widget_add_events (button_data->button, GDK_SCROLL_MASK);
2590+ 
2591+@@ -1569,7 +1567,6 @@ make_directory_button (GtkPathBar  *path_bar,
2592+       button_data->image = gtk_image_new ();
2593+       child = button_data->image;
2594+       button_data->label = NULL;
2595+-      atk_object_set_name (atk_obj, _("File System Root"));
2596+       break;
2597+     case HOME_BUTTON:
2598+     case DESKTOP_BUTTON:
2599+--- a/gtk/gtkpopover.c
2600++++ b/gtk/gtkpopover.c
2601+@@ -1835,7 +1835,6 @@
2602+                   G_TYPE_NONE, 0);
2603+ 
2604+   quark_widget_popovers = g_quark_from_static_string ("gtk-quark-widget-popovers");
2605+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_POPOVER_ACCESSIBLE);
2606+   gtk_widget_class_set_css_name (widget_class, "popover");
2607+ }
2608+ 
2609+--- a/gtk/gtkprogressbar.c
2610++++ b/gtk/gtkprogressbar.c
2611+@@ -427,7 +427,6 @@
2612+                                                              1, G_MAXINT, MIN_VERTICAL_BAR_HEIGHT,
2613+                                                              G_PARAM_READWRITE|G_PARAM_DEPRECATED));
2614+ 
2615+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_PROGRESS_BAR_ACCESSIBLE);
2616+   gtk_widget_class_set_css_name (widget_class, "progressbar");
2617+ }
2618+ 
2619+--- a/gtk/gtkradiobutton.c
2620++++ b/gtk/gtkradiobutton.c
2621+@@ -216,7 +216,6 @@
2622+ 				       NULL,
2623+ 				       G_TYPE_NONE, 0);
2624+ 
2625+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_RADIO_BUTTON_ACCESSIBLE);
2626+   gtk_widget_class_set_css_name (widget_class, "radiobutton");
2627+ }
2628+ 
2629+--- a/gtk/gtkradiomenuitem.c
2630++++ b/gtk/gtkradiomenuitem.c
2631+@@ -407,8 +407,6 @@
2632+ 
2633+   widget_class->destroy = gtk_radio_menu_item_destroy;
2634+ 
2635+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_RADIO_MENU_ITEM_ACCESSIBLE);
2636+-
2637+   menu_item_class->activate = gtk_radio_menu_item_activate;
2638+ 
2639+   /**
2640+--- a/gtk/gtkrange.c
2641++++ b/gtk/gtkrange.c
2642+@@ -657,8 +657,6 @@
2643+ 							       P_("Arrow scaling with regard to scroll button size"),
2644+ 							       0.0, 1.0, 0.5,
2645+ 							       GTK_PARAM_READABLE|G_PARAM_DEPRECATED));
2646+-
2647+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_RANGE_ACCESSIBLE);
2648+ }
2649+ 
2650+ static void
2651+--- a/gtk/gtkscale.c
2652++++ b/gtk/gtkscale.c
2653+@@ -944,7 +944,6 @@
2654+   add_slider_binding (binding_set, GDK_KEY_KP_End, 0,
2655+                       GTK_SCROLL_END);
2656+ 
2657+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_SCALE_ACCESSIBLE);
2658+   gtk_widget_class_set_css_name (widget_class, "scale");
2659+ }
2660+ 
2661+--- a/gtk/gtkscalebutton.c
2662++++ b/gtk/gtkscalebutton.c
2663+@@ -343,7 +343,6 @@
2664+   gtk_widget_class_bind_template_callback (widget_class, cb_scale_value_changed);
2665+   gtk_widget_class_bind_template_callback (widget_class, cb_popup_mapped);
2666+ 
2667+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_SCALE_BUTTON_ACCESSIBLE);
2668+   gtk_widget_class_set_css_name (widget_class, "button");
2669+ }
2670+ 
2671+--- a/gtk/gtkscrollbar.c
2672++++ b/gtk/gtkscrollbar.c
2673+@@ -145,7 +145,6 @@
2674+                                                                  FALSE,
2675+                                                                  GTK_PARAM_READABLE));
2676+ 
2677+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_SCROLL_BAR);
2678+   gtk_widget_class_set_css_name (widget_class, "scrollbar");
2679+ }
2680+ 
2681+--- a/gtk/gtkscrolledwindow.c
2682++++ b/gtk/gtkscrolledwindow.c
2683+@@ -896,7 +896,6 @@
2684+   add_tab_bindings (binding_set, GDK_CONTROL_MASK, GTK_DIR_TAB_FORWARD);
2685+   add_tab_bindings (binding_set, GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD);
2686+ 
2687+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_SCROLLED_WINDOW_ACCESSIBLE);
2688+   gtk_widget_class_set_css_name (widget_class, "scrolledwindow");
2689+ }
2690+ 
2691+--- a/gtk/gtksearchentry.c
2692++++ b/gtk/gtksearchentry.c
2693+@@ -358,17 +358,11 @@
2694+ static void
2695+ gtk_search_entry_init (GtkSearchEntry *entry)
2696+ {
2697+-  AtkObject *atk_obj;
2698+-
2699+   g_object_set (entry,
2700+                 "primary-icon-name", "edit-find-symbolic",
2701+                 "primary-icon-activatable", FALSE,
2702+                 "primary-icon-sensitive", FALSE,
2703+                 NULL);
2704+-
2705+-  atk_obj = gtk_widget_get_accessible (GTK_WIDGET (entry));
2706+-  if (GTK_IS_ACCESSIBLE (atk_obj))
2707+-    atk_object_set_name (atk_obj, _("Search"));
2708+ 
2709+   gtk_style_context_add_class (gtk_widget_get_style_context (GTK_WIDGET (entry)), "search");
2710+ }
2711+--- a/gtk/gtkseparator.c
2712++++ b/gtk/gtkseparator.c
2713+@@ -211,7 +211,6 @@
2714+ 
2715+   g_object_class_override_property (object_class, PROP_ORIENTATION, "orientation");
2716+ 
2717+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_SEPARATOR);
2718+   gtk_widget_class_set_css_name (widget_class, "separator");
2719+ }
2720+ 
2721+--- a/gtk/gtkseparatormenuitem.c
2722++++ b/gtk/gtkseparatormenuitem.c
2723+@@ -58,7 +58,6 @@
2724+ 
2725+   GTK_MENU_ITEM_CLASS (class)->get_label = gtk_separator_menu_item_get_label;
2726+ 
2727+-  gtk_widget_class_set_accessible_role (GTK_WIDGET_CLASS (class), ATK_ROLE_SEPARATOR);
2728+   gtk_widget_class_set_css_name (GTK_WIDGET_CLASS (class), "separator");
2729+ }
2730+ 
2731+--- a/gtk/gtkspinbutton.c
2732++++ b/gtk/gtkspinbutton.c
2733+@@ -592,7 +592,6 @@
2734+   add_spin_binding (binding_set, GDK_KEY_Page_Up, GDK_CONTROL_MASK, GTK_SCROLL_END);
2735+   add_spin_binding (binding_set, GDK_KEY_Page_Down, GDK_CONTROL_MASK, GTK_SCROLL_START);
2736+ 
2737+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_SPIN_BUTTON_ACCESSIBLE);
2738+   gtk_widget_class_set_css_name (widget_class, "spinbutton");
2739+ }
2740+ 
2741+--- a/gtk/gtkspinner.c
2742++++ b/gtk/gtkspinner.c
2743+@@ -223,7 +223,6 @@
2744+                                                          FALSE,
2745+                                                          GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
2746+ 
2747+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_SPINNER_ACCESSIBLE);
2748+   gtk_widget_class_set_css_name (widget_class, "spinner");
2749+ }
2750+ 
2751+--- a/gtk/gtkstack.c
2752++++ b/gtk/gtkstack.c
2753+@@ -559,7 +559,6 @@
2754+ 
2755+   gtk_container_class_install_child_properties (container_class, LAST_CHILD_PROP, stack_child_props);
2756+ 
2757+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_STACK_ACCESSIBLE);
2758+   gtk_widget_class_set_css_name (widget_class, "stack");
2759+ }
2760+ 
2761+@@ -1118,10 +1117,6 @@
2762+           gtk_widget_set_child_visible (priv->visible_child->widget, FALSE);
2763+         }
2764+     }
2765+-
2766+-  gtk_stack_accessible_update_visible_child (stack,
2767+-                                             priv->visible_child ? priv->visible_child->widget : NULL,
2768+-                                             child_info ? child_info->widget : NULL);
2769+ 
2770+   priv->visible_child = child_info;
2771+ 
2772+--- a/gtk/gtkstatusbar.c
2773++++ b/gtk/gtkstatusbar.c
2774+@@ -187,7 +187,6 @@
2775+   gtk_widget_class_bind_template_child_private (widget_class, GtkStatusbar, frame);
2776+   gtk_widget_class_bind_template_child_private (widget_class, GtkStatusbar, label);
2777+ 
2778+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_STATUSBAR_ACCESSIBLE);
2779+   gtk_widget_class_set_css_name (widget_class, "statusbar");
2780+ }
2781+ 
2782+--- a/gtk/gtkstylecontext.c
2783++++ b/gtk/gtkstylecontext.c
2784+@@ -3079,63 +3079,6 @@
2785+   return gtk_css_style_get_pango_attributes (gtk_style_context_lookup_style (context));
2786+ }
2787+ 
2788+-static AtkAttributeSet *
2789+-add_attribute (AtkAttributeSet  *attributes,
2790+-               AtkTextAttribute  attr,
2791+-               const gchar      *value)
2792+-{
2793+-  AtkAttribute *at;
2794+-
2795+-  at = g_new (AtkAttribute, 1);
2796+-  at->name = g_strdup (atk_text_attribute_get_name (attr));
2797+-  at->value = g_strdup (value);
2798+-
2799+-  return g_slist_prepend (attributes, at);
2800+-}
2801+-
2802+-/*
2803+- * _gtk_style_context_get_attributes:
2804+- * @attributes: a #AtkAttributeSet to add attributes to
2805+- * @context: the #GtkStyleContext to get attributes from
2806+- * @flags: the state to use with @context
2807+- *
2808+- * Adds the foreground and background color from @context to
2809+- * @attributes, after translating them to ATK attributes.
2810+- *
2811+- * This is a convenience function that can be used in
2812+- * implementing the #AtkText interface in widgets.
2813+- *
2814+- * Returns: the modified #AtkAttributeSet
2815+- */
2816+-AtkAttributeSet *
2817+-_gtk_style_context_get_attributes (AtkAttributeSet *attributes,
2818+-                                   GtkStyleContext *context,
2819+-                                   GtkStateFlags    flags)
2820+-{
2821+-  GdkRGBA color;
2822+-  gchar *value;
2823+-
2824+-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
2825+-  gtk_style_context_get_background_color (context, flags, &color);
2826+-G_GNUC_END_IGNORE_DEPRECATIONS
2827+-  value = g_strdup_printf ("%u,%u,%u",
2828+-                           (guint) ceil (color.red * 65536 - color.red),
2829+-                           (guint) ceil (color.green * 65536 - color.green),
2830+-                           (guint) ceil (color.blue * 65536 - color.blue));
2831+-  attributes = add_attribute (attributes, ATK_TEXT_ATTR_BG_COLOR, value);
2832+-  g_free (value);
2833+-
2834+-  gtk_style_context_get_color (context, flags, &color);
2835+-  value = g_strdup_printf ("%u,%u,%u",
2836+-                           (guint) ceil (color.red * 65536 - color.red),
2837+-                           (guint) ceil (color.green * 65536 - color.green),
2838+-                           (guint) ceil (color.blue * 65536 - color.blue));
2839+-  attributes = add_attribute (attributes, ATK_TEXT_ATTR_FG_COLOR, value);
2840+-  g_free (value);
2841+-
2842+-  return attributes;
2843+-}
2844+-
2845+ cairo_pattern_t *
2846+ gtk_gradient_resolve_for_context (GtkGradient     *gradient,
2847+                                   GtkStyleContext *context)
2848+--- a/gtk/gtkstylecontext.h
2849++++ b/gtk/gtkstylecontext.h
2850+@@ -26,7 +26,6 @@
2851+ #include <gtk/gtkcsssection.h>
2852+ #include <gtk/gtkstyleprovider.h>
2853+ #include <gtk/gtktypes.h>
2854+-#include <atk/atk.h>
2855+ 
2856+ G_BEGIN_DECLS
2857+ 
2858+--- a/gtk/gtkstylecontextprivate.h
2859++++ b/gtk/gtkstylecontextprivate.h
2860+@@ -72,11 +72,6 @@
2861+ 
2862+ PangoAttrList *_gtk_style_context_get_pango_attributes       (GtkStyleContext *context);
2863+ 
2864+-/* Accessibility support */
2865+-AtkAttributeSet *_gtk_style_context_get_attributes           (AtkAttributeSet    *attributes,
2866+-                                                              GtkStyleContext    *context,
2867+-                                                              GtkStateFlags       flags);
2868+-
2869+ G_END_DECLS
2870+ 
2871+ #endif /* __GTK_STYLE_CONTEXT_PRIVATE_H__ */
2872+--- a/gtk/gtkswitch.c
2873++++ b/gtk/gtkswitch.c
2874+@@ -1008,9 +1008,6 @@
2875+   g_object_class_override_property (gobject_class, PROP_ACTION_NAME, "action-name");
2876+   g_object_class_override_property (gobject_class, PROP_ACTION_TARGET, "action-target");
2877+ 
2878+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_SWITCH_ACCESSIBLE);
2879+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_TOGGLE_BUTTON);
2880+-
2881+   gtk_widget_class_set_css_name (widget_class, "switch");
2882+ }
2883+ 
2884+@@ -1120,7 +1117,6 @@
2885+ 
2886+   if (priv->is_active != is_active)
2887+     {
2888+-      AtkObject *accessible;
2889+       gboolean handled;
2890+ 
2891+       priv->is_active = is_active;
2892+@@ -1133,9 +1129,6 @@
2893+       g_signal_emit (sw, signals[STATE_SET], 0, is_active, &handled);
2894+ 
2895+       g_object_notify_by_pspec (G_OBJECT (sw), switch_props[PROP_ACTIVE]);
2896+-
2897+-      accessible = gtk_widget_get_accessible (GTK_WIDGET (sw));
2898+-      atk_object_notify_state_change (accessible, ATK_STATE_CHECKED, priv->is_active);
2899+ 
2900+       gtk_widget_queue_allocate (GTK_WIDGET (sw));
2901+     }
2902+--- a/gtk/gtktextbuffer.c
2903++++ b/gtk/gtktextbuffer.c
2904+@@ -4478,7 +4478,6 @@
2905+ 
2906+ void
2907+ _gtk_text_buffer_get_text_before (GtkTextBuffer   *buffer,
2908+-                                  AtkTextBoundary  boundary_type,
2909+                                   GtkTextIter     *position,
2910+                                   GtkTextIter     *start,
2911+                                   GtkTextIter     *end)
2912+@@ -4487,103 +4486,10 @@
2913+ 
2914+   *start = *position;
2915+   *end = *start;
2916+-
2917+-  switch (boundary_type)
2918+-    {
2919+-    case ATK_TEXT_BOUNDARY_CHAR:
2920+-      gtk_text_iter_backward_char (start);
2921+-      break;
2922+-
2923+-    case ATK_TEXT_BOUNDARY_WORD_START:
2924+-      if (!gtk_text_iter_starts_word (start))
2925+-        gtk_text_iter_backward_word_start (start);
2926+-      *end = *start;
2927+-      gtk_text_iter_backward_word_start (start);
2928+-      break;
2929+-
2930+-    case ATK_TEXT_BOUNDARY_WORD_END:
2931+-      if (gtk_text_iter_inside_word (start) &&
2932+-          !gtk_text_iter_starts_word (start))
2933+-        gtk_text_iter_backward_word_start (start);
2934+-      while (!gtk_text_iter_ends_word (start))
2935+-        {
2936+-          if (!gtk_text_iter_backward_char (start))
2937+-            break;
2938+-        }
2939+-      *end = *start;
2940+-      gtk_text_iter_backward_word_start (start);
2941+-      while (!gtk_text_iter_ends_word (start))
2942+-        {
2943+-          if (!gtk_text_iter_backward_char (start))
2944+-            break;
2945+-        }
2946+-      break;
2947+-
2948+-    case ATK_TEXT_BOUNDARY_SENTENCE_START:
2949+-      if (!gtk_text_iter_starts_sentence (start))
2950+-        gtk_text_iter_backward_sentence_start (start);
2951+-      *end = *start;
2952+-      gtk_text_iter_backward_sentence_start (start);
2953+-      break;
2954+-
2955+-    case ATK_TEXT_BOUNDARY_SENTENCE_END:
2956+-      if (gtk_text_iter_inside_sentence (start) &&
2957+-          !gtk_text_iter_starts_sentence (start))
2958+-        gtk_text_iter_backward_sentence_start (start);
2959+-      while (!gtk_text_iter_ends_sentence (start))
2960+-        {
2961+-          if (!gtk_text_iter_backward_char (start))
2962+-            break;
2963+-        }
2964+-      *end = *start;
2965+-      gtk_text_iter_backward_sentence_start (start);
2966+-      while (!gtk_text_iter_ends_sentence (start))
2967+-        {
2968+-          if (!gtk_text_iter_backward_char (start))
2969+-            break;
2970+-        }
2971+-      break;
2972+-
2973+-    case ATK_TEXT_BOUNDARY_LINE_START:
2974+-      line_number = gtk_text_iter_get_line (start);
2975+-      if (line_number == 0)
2976+-        {
2977+-          gtk_text_buffer_get_iter_at_offset (buffer, start, 0);
2978+-        }
2979+-      else
2980+-        {
2981+-          gtk_text_iter_backward_line (start);
2982+-          gtk_text_iter_forward_line (start);
2983+-        }
2984+-      *end = *start;
2985+-      gtk_text_iter_backward_line (start);
2986+-      break;
2987+-
2988+-    case ATK_TEXT_BOUNDARY_LINE_END:
2989+-      line_number = gtk_text_iter_get_line (start);
2990+-      if (line_number == 0)
2991+-        {
2992+-          gtk_text_buffer_get_iter_at_offset (buffer, start, 0);
2993+-          *end = *start;
2994+-        }
2995+-      else
2996+-        {
2997+-          gtk_text_iter_backward_line (start);
2998+-          *end = *start;
2999+-          while (!gtk_text_iter_ends_line (start))
3000+-            {
3001+-              if (!gtk_text_iter_backward_char (start))
3002+-                break;
3003+-            }
3004+-          gtk_text_iter_forward_to_line_end (end);
3005+-        }
3006+-      break;
3007+-    }
3008+ }
3009+ 
3010+ void
3011+ _gtk_text_buffer_get_text_at (GtkTextBuffer   *buffer,
3012+-                              AtkTextBoundary  boundary_type,
3013+                               GtkTextIter     *position,
3014+                               GtkTextIter     *start,
3015+                               GtkTextIter     *end)
3016+@@ -4592,187 +4498,16 @@
3017+ 
3018+   *start = *position;
3019+   *end = *start;
3020+-
3021+-  switch (boundary_type)
3022+-    {
3023+-    case ATK_TEXT_BOUNDARY_CHAR:
3024+-      gtk_text_iter_forward_char (end);
3025+-      break;
3026+-
3027+-    case ATK_TEXT_BOUNDARY_WORD_START:
3028+-      if (!gtk_text_iter_starts_word (start))
3029+-        gtk_text_iter_backward_word_start (start);
3030+-      if (gtk_text_iter_inside_word (end))
3031+-        gtk_text_iter_forward_word_end (end);
3032+-      while (!gtk_text_iter_starts_word (end))
3033+-        {
3034+-          if (!gtk_text_iter_forward_char (end))
3035+-            break;
3036+-        }
3037+-      break;
3038+-
3039+-    case ATK_TEXT_BOUNDARY_WORD_END:
3040+-      if (gtk_text_iter_inside_word (start) &&
3041+-          !gtk_text_iter_starts_word (start))
3042+-        gtk_text_iter_backward_word_start (start);
3043+-      while (!gtk_text_iter_ends_word (start))
3044+-        {
3045+-          if (!gtk_text_iter_backward_char (start))
3046+-            break;
3047+-        }
3048+-      gtk_text_iter_forward_word_end (end);
3049+-      break;
3050+-
3051+-    case ATK_TEXT_BOUNDARY_SENTENCE_START:
3052+-      if (!gtk_text_iter_starts_sentence (start))
3053+-        gtk_text_iter_backward_sentence_start (start);
3054+-      if (gtk_text_iter_inside_sentence (end))
3055+-        gtk_text_iter_forward_sentence_end (end);
3056+-      while (!gtk_text_iter_starts_sentence (end))
3057+-        {
3058+-          if (!gtk_text_iter_forward_char (end))
3059+-            break;
3060+-        }
3061+-      break;
3062+-
3063+-    case ATK_TEXT_BOUNDARY_SENTENCE_END:
3064+-      if (gtk_text_iter_inside_sentence (start) &&
3065+-          !gtk_text_iter_starts_sentence (start))
3066+-        gtk_text_iter_backward_sentence_start (start);
3067+-      while (!gtk_text_iter_ends_sentence (start))
3068+-        {
3069+-          if (!gtk_text_iter_backward_char (start))
3070+-            break;
3071+-        }
3072+-      gtk_text_iter_forward_sentence_end (end);
3073+-      break;
3074+-
3075+-    case ATK_TEXT_BOUNDARY_LINE_START:
3076+-      line_number = gtk_text_iter_get_line (start);
3077+-      if (line_number == 0)
3078+-        {
3079+-          gtk_text_buffer_get_iter_at_offset (buffer, start, 0);
3080+-        }
3081+-      else
3082+-        {
3083+-          gtk_text_iter_backward_line (start);
3084+-          gtk_text_iter_forward_line (start);
3085+-        }
3086+-      gtk_text_iter_forward_line (end);
3087+-      break;
3088+-
3089+-    case ATK_TEXT_BOUNDARY_LINE_END:
3090+-      line_number = gtk_text_iter_get_line (start);
3091+-      if (line_number == 0)
3092+-        {
3093+-          gtk_text_buffer_get_iter_at_offset (buffer, start, 0);
3094+-        }
3095+-      else
3096+-        {
3097+-          gtk_text_iter_backward_line (start);
3098+-          gtk_text_iter_forward_line (start);
3099+-        }
3100+-      while (!gtk_text_iter_ends_line (start))
3101+-        {
3102+-          if (!gtk_text_iter_backward_char (start))
3103+-            break;
3104+-        }
3105+-      gtk_text_iter_forward_to_line_end (end);
3106+-      break;
3107+-   }
3108+ }
3109+ 
3110+ void
3111+ _gtk_text_buffer_get_text_after (GtkTextBuffer   *buffer,
3112+-                                 AtkTextBoundary  boundary_type,
3113+                                  GtkTextIter     *position,
3114+                                  GtkTextIter     *start,
3115+                                  GtkTextIter     *end)
3116+ {
3117+   *start = *position;
3118+   *end = *start;
3119+-
3120+-  switch (boundary_type)
3121+-    {
3122+-    case ATK_TEXT_BOUNDARY_CHAR:
3123+-      gtk_text_iter_forward_char (start);
3124+-      gtk_text_iter_forward_chars (end, 2);
3125+-      break;
3126+-
3127+-    case ATK_TEXT_BOUNDARY_WORD_START:
3128+-      if (gtk_text_iter_inside_word (end))
3129+-        gtk_text_iter_forward_word_end (end);
3130+-      while (!gtk_text_iter_starts_word (end))
3131+-        {
3132+-          if (!gtk_text_iter_forward_char (end))
3133+-            break;
3134+-        }
3135+-      *start = *end;
3136+-      if (!gtk_text_iter_is_end (end))
3137+-        {
3138+-          gtk_text_iter_forward_word_end (end);
3139+-          while (!gtk_text_iter_starts_word (end))
3140+-            {
3141+-              if (!gtk_text_iter_forward_char (end))
3142+-                break;
3143+-            }
3144+-        }
3145+-      break;
3146+-
3147+-    case ATK_TEXT_BOUNDARY_WORD_END:
3148+-      gtk_text_iter_forward_word_end (end);
3149+-      *start = *end;
3150+-      if (!gtk_text_iter_is_end (end))
3151+-        gtk_text_iter_forward_word_end (end);
3152+-      break;
3153+-
3154+-    case ATK_TEXT_BOUNDARY_SENTENCE_START:
3155+-      if (gtk_text_iter_inside_sentence (end))
3156+-        gtk_text_iter_forward_sentence_end (end);
3157+-      while (!gtk_text_iter_starts_sentence (end))
3158+-        {
3159+-          if (!gtk_text_iter_forward_char (end))
3160+-            break;
3161+-        }
3162+-      *start = *end;
3163+-      if (!gtk_text_iter_is_end (end))
3164+-        {
3165+-          gtk_text_iter_forward_sentence_end (end);
3166+-          while (!gtk_text_iter_starts_sentence (end))
3167+-            {
3168+-              if (!gtk_text_iter_forward_char (end))
3169+-                break;
3170+-            }
3171+-        }
3172+-      break;
3173+-
3174+-    case ATK_TEXT_BOUNDARY_SENTENCE_END:
3175+-      gtk_text_iter_forward_sentence_end (end);
3176+-      *start = *end;
3177+-      if (!gtk_text_iter_is_end (end))
3178+-        gtk_text_iter_forward_sentence_end (end);
3179+-      break;
3180+-
3181+-    case ATK_TEXT_BOUNDARY_LINE_START:
3182+-      gtk_text_iter_forward_line (end);
3183+-      *start = *end;
3184+-      gtk_text_iter_forward_line (end);
3185+-      break;
3186+-
3187+-    case ATK_TEXT_BOUNDARY_LINE_END:
3188+-      gtk_text_iter_forward_line (start);
3189+-      *end = *start;
3190+-      if (!gtk_text_iter_is_end (start))
3191+-        {
3192+-          while (!gtk_text_iter_ends_line (start))
3193+-            {
3194+-              if (!gtk_text_iter_backward_char (start))
3195+-                break;
3196+-            }
3197+-          gtk_text_iter_forward_to_line_end (end);
3198+-        }
3199+-      break;
3200+-    }
3201+ }
3202+ 
3203+ static GtkTextTag *
3204+--- a/gtk/gtktextbufferprivate.h
3205++++ b/gtk/gtktextbufferprivate.h
3206+@@ -35,17 +35,14 @@
3207+                                               GtkTextTag    *tag);
3208+ 
3209+ void _gtk_text_buffer_get_text_before (GtkTextBuffer   *buffer,
3210+-                                       AtkTextBoundary  boundary_type,
3211+                                        GtkTextIter     *position,
3212+                                        GtkTextIter     *start,
3213+                                        GtkTextIter     *end);
3214+ void _gtk_text_buffer_get_text_at     (GtkTextBuffer   *buffer,
3215+-                                       AtkTextBoundary  boundary_type,
3216+                                        GtkTextIter     *position,
3217+                                        GtkTextIter     *start,
3218+                                        GtkTextIter     *end);
3219+ void _gtk_text_buffer_get_text_after  (GtkTextBuffer   *buffer,
3220+-                                       AtkTextBoundary  boundary_type,
3221+                                        GtkTextIter     *position,
3222+                                        GtkTextIter     *start,
3223+                                        GtkTextIter     *end);
3224+--- a/gtk/gtktextview.c
3225++++ b/gtk/gtktextview.c
3226+@@ -1706,7 +1706,6 @@
3227+ 				"move-focus", 1,
3228+ 				GTK_TYPE_DIRECTION_TYPE, GTK_DIR_TAB_BACKWARD);
3229+ 
3230+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_TEXT_VIEW_ACCESSIBLE);
3231+   gtk_widget_class_set_css_name (widget_class, "textview");
3232+ 
3233+   quark_text_selection_data = g_quark_from_static_string ("gtk-text-view-text-selection-data");
3234+@@ -2016,7 +2015,6 @@
3235+         gtk_text_view_update_handles (text_view, GTK_TEXT_HANDLE_MODE_NONE);
3236+     }
3237+ 
3238+-  _gtk_text_view_accessible_set_buffer (text_view, old_buffer);
3239+   if (old_buffer)
3240+     g_object_unref (old_buffer);
3241+ 
3242+--- a/gtk/gtktogglebutton.c
3243++++ b/gtk/gtktogglebutton.c
3244+@@ -222,7 +222,6 @@
3245+ 		  NULL,
3246+ 		  G_TYPE_NONE, 0);
3247+ 
3248+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_TOGGLE_BUTTON_ACCESSIBLE);
3249+   gtk_widget_class_set_css_name (widget_class, "button");
3250+ }
3251+ 
3252+--- a/gtk/gtktoolbar.c
3253++++ b/gtk/gtktoolbar.c
3254+@@ -413,8 +413,6 @@
3255+   widget_class->style_updated = gtk_toolbar_style_updated;
3256+   widget_class->focus = gtk_toolbar_focus;
3257+ 
3258+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_TOOL_BAR);
3259+-
3260+   /* need to override the base class function via override_class_handler,
3261+    * because the signal slot is not available in GtkWidgetClass
3262+    */
3263+--- a/gtk/gtktoolbutton.c
3264++++ b/gtk/gtktoolbutton.c
3265+@@ -1193,7 +1193,6 @@
3266+ {
3267+   gchar *old_label;
3268+   gchar *elided_label;
3269+-  AtkObject *accessible;
3270+   
3271+   g_return_if_fail (GTK_IS_TOOL_BUTTON (button));
3272+ 
3273+@@ -1205,8 +1204,6 @@
3274+   if (label)
3275+     {
3276+       elided_label = _gtk_toolbar_elide_underscores (label);
3277+-      accessible = gtk_widget_get_accessible (GTK_WIDGET (button->priv->button));
3278+-      atk_object_set_name (accessible, elided_label);
3279+       g_free (elided_label);
3280+     }
3281+ 
3282+--- a/gtk/gtktooltipwindow.c
3283++++ b/gtk/gtktooltipwindow.c
3284+@@ -64,7 +64,6 @@
3285+   GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
3286+ 
3287+   gtk_widget_class_set_css_name (widget_class, I_("tooltip"));
3288+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_TOOL_TIP);
3289+   gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/ui/gtktooltipwindow.ui");
3290+ 
3291+   gtk_widget_class_bind_template_child (widget_class, GtkTooltipWindow, box);
3292+--- a/gtk/gtktreeselection.c
3293++++ b/gtk/gtktreeselection.c
3294+@@ -1638,12 +1638,10 @@
3295+       if (!GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED))
3296+         {
3297+           GTK_RBNODE_SET_FLAG (node, GTK_RBNODE_IS_SELECTED);
3298+-          _gtk_tree_view_accessible_add_state (priv->tree_view, tree, node, GTK_CELL_RENDERER_SELECTED);
3299+         }
3300+       else
3301+         {
3302+           GTK_RBNODE_UNSET_FLAG (node, GTK_RBNODE_IS_SELECTED);
3303+-          _gtk_tree_view_accessible_remove_state (priv->tree_view, tree, node, GTK_CELL_RENDERER_SELECTED);
3304+         }
3305+ 
3306+       _gtk_tree_view_queue_draw_node (priv->tree_view, tree, node, NULL);
3307+--- a/gtk/gtktreeview.c
3308++++ b/gtk/gtktreeview.c
3309+@@ -1811,7 +1811,6 @@
3310+ 
3311+   gtk_binding_entry_add_signal (binding_set, GDK_KEY_F, GDK_CONTROL_MASK, "start-interactive-search", 0);
3312+ 
3313+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_TREE_VIEW_ACCESSIBLE);
3314+   gtk_widget_class_set_css_name (widget_class, "treeview");
3315+ }
3316+ 
3317+@@ -9029,8 +9028,6 @@
3318+   if (tree == NULL)
3319+     goto done;
3320+ 
3321+-  _gtk_tree_view_accessible_changed (tree_view, tree, node);
3322+-
3323+   if (tree_view->priv->fixed_height_mode
3324+       && tree_view->priv->fixed_height >= 0)
3325+     {
3326+@@ -9159,8 +9156,6 @@
3327+       tmpnode = _gtk_rbtree_insert_after (tree, tmpnode, height, FALSE);
3328+     }
3329+ 
3330+-  _gtk_tree_view_accessible_add (tree_view, tree, tmpnode);
3331+-
3332+  done:
3333+   if (height > 0)
3334+     {
3335+@@ -9223,12 +9218,10 @@
3336+   if (has_child)
3337+     {
3338+       GTK_RBNODE_SET_FLAG (node, GTK_RBNODE_IS_PARENT);
3339+-      _gtk_tree_view_accessible_add_state (tree_view, tree, node, GTK_CELL_RENDERER_EXPANDABLE);
3340+     }
3341+   else
3342+     {
3343+       GTK_RBNODE_UNSET_FLAG (node, GTK_RBNODE_IS_PARENT);
3344+-      _gtk_tree_view_accessible_remove_state (tree_view, tree, node, GTK_CELL_RENDERER_EXPANDABLE);
3345+     }
3346+ 
3347+   if (has_child && tree_view->priv->is_list)
3348+@@ -9378,15 +9371,10 @@
3349+       if (tree_view->priv->tree == tree)
3350+ 	tree_view->priv->tree = NULL;
3351+ 
3352+-      _gtk_tree_view_accessible_remove_state (tree_view,
3353+-                                              tree->parent_tree, tree->parent_node,
3354+-                                              GTK_CELL_RENDERER_EXPANDED);
3355+-      _gtk_tree_view_accessible_remove (tree_view, tree, NULL);
3356+       _gtk_rbtree_remove (tree);
3357+     }
3358+   else
3359+     {
3360+-      _gtk_tree_view_accessible_remove (tree_view, tree, node);
3361+       _gtk_rbtree_remove_node (tree, node);
3362+     }
3363+ 
3364+@@ -9460,8 +9448,6 @@
3365+ 
3366+   _gtk_rbtree_reorder (tree, new_order, len);
3367+ 
3368+-  _gtk_tree_view_accessible_reorder (tree_view);
3369+-
3370+   gtk_widget_queue_draw (GTK_WIDGET (tree_view));
3371+ 
3372+   gtk_tree_view_dy_to_top_row (tree_view);
3373+@@ -10293,9 +10279,6 @@
3374+ 
3375+   tree_view->priv->focus_column = column;
3376+ 
3377+-  _gtk_tree_view_accessible_update_focus_column (tree_view, 
3378+-                                                 old_column,
3379+-                                                 column);
3380+ }
3381+ 
3382+ 
3383+@@ -11593,7 +11576,6 @@
3384+ 	{
3385+ 	  tree_view->priv->tree = _gtk_rbtree_new ();
3386+ 	  gtk_tree_view_build_tree (tree_view, tree_view->priv->tree, &iter, 1, FALSE);
3387+-          _gtk_tree_view_accessible_add (tree_view, tree_view->priv->tree, NULL);
3388+ 	}
3389+       gtk_tree_path_free (path);
3390+ 
3391+@@ -12145,8 +12127,6 @@
3392+       gtk_widget_queue_resize (GTK_WIDGET (tree_view));
3393+     }
3394+ 
3395+-  _gtk_tree_view_accessible_remove_column (tree_view, column, position);
3396+-
3397+   g_object_unref (column);
3398+   g_signal_emit (tree_view, tree_view_signals[COLUMNS_CHANGED], 0);
3399+ 
3400+@@ -12217,8 +12197,6 @@
3401+       gtk_widget_queue_resize (GTK_WIDGET (tree_view));
3402+     }
3403+ 
3404+-  _gtk_tree_view_accessible_add_column (tree_view, column, position);
3405+-
3406+   g_signal_emit (tree_view, tree_view_signals[COLUMNS_CHANGED], 0);
3407+ 
3408+   return tree_view->priv->n_columns;
3409+@@ -12436,8 +12414,6 @@
3410+       gtk_tree_view_size_allocate_columns (GTK_WIDGET (tree_view), NULL);
3411+     }
3412+ 
3413+-  _gtk_tree_view_accessible_reorder_column (tree_view, column);
3414+-
3415+   g_signal_emit (tree_view, tree_view_signals[COLUMNS_CHANGED], 0);
3416+ }
3417+ 
3418+@@ -12910,11 +12886,6 @@
3419+ 			    gtk_tree_path_get_depth (path) + 1,
3420+ 			    open_all);
3421+ 
3422+-  _gtk_tree_view_accessible_add (tree_view, node->children, NULL);
3423+-  _gtk_tree_view_accessible_add_state (tree_view,
3424+-                                       tree, node,
3425+-                                       GTK_CELL_RENDERER_EXPANDED);
3426+-
3427+   install_presize_handler (tree_view);
3428+ 
3429+   g_signal_emit (tree_view, tree_view_signals[ROW_EXPANDED], 0, &iter, path);
3430+@@ -13061,11 +13032,6 @@
3431+   /* Stop a pending double click */
3432+   gtk_event_controller_reset (GTK_EVENT_CONTROLLER (tree_view->priv->multipress_gesture));
3433+ 
3434+-  _gtk_tree_view_accessible_remove (tree_view, node->children, NULL);
3435+-  _gtk_tree_view_accessible_remove_state (tree_view,
3436+-                                          tree, node,
3437+-                                          GTK_CELL_RENDERER_EXPANDED);
3438+-
3439+   _gtk_rbtree_remove (node->children);
3440+ 
3441+   if (cursor_changed)
3442+@@ -13284,10 +13250,6 @@
3443+ {
3444+   if (!(flags & CURSOR_INVALID) && tree_view->priv->cursor_node)
3445+     {
3446+-      _gtk_tree_view_accessible_remove_state (tree_view,
3447+-                                              tree_view->priv->cursor_tree,
3448+-                                              tree_view->priv->cursor_node,
3449+-                                              GTK_CELL_RENDERER_FOCUSED);
3450+       _gtk_tree_view_queue_draw_node (tree_view,
3451+                                       tree_view->priv->cursor_tree,
3452+                                       tree_view->priv->cursor_node,
3453+@@ -13352,10 +13314,6 @@
3454+                                           NULL);
3455+ 	}
3456+ 
3457+-      _gtk_tree_view_accessible_add_state (tree_view,
3458+-                                           tree_view->priv->cursor_tree,
3459+-                                           tree_view->priv->cursor_node,
3460+-                                           GTK_CELL_RENDERER_FOCUSED);
3461+     }
3462+ 
3463+   if (!gtk_widget_in_destruction (GTK_WIDGET (tree_view)))
3464+--- a/gtk/gtktreeviewcolumn.c
3465++++ b/gtk/gtktreeviewcolumn.c
3466+@@ -1889,12 +1889,6 @@
3467+   if (priv->visible)
3468+     _gtk_tree_view_column_cell_set_dirty (tree_column, TRUE);
3469+ 
3470+-  if (priv->tree_view)
3471+-    {
3472+-      _gtk_tree_view_accessible_toggle_visibility (GTK_TREE_VIEW (priv->tree_view),
3473+-                                                   tree_column);
3474+-    }
3475+-
3476+   gtk_tree_view_column_update_button (tree_column);
3477+   g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_VISIBLE]);
3478+ }
3479+--- a/gtk/gtkviewport.c
3480++++ b/gtk/gtkviewport.c
3481+@@ -390,8 +390,6 @@
3482+   widget_class->get_preferred_height_for_width = gtk_viewport_get_preferred_height_for_width;
3483+   widget_class->queue_draw_region = gtk_viewport_queue_draw_region;
3484+   
3485+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_VIEWPORT);
3486+-
3487+   container_class->remove = gtk_viewport_remove;
3488+   container_class->add = gtk_viewport_add;
3489+   gtk_container_class_handle_border_width (container_class);
3490+--- a/gtk/gtkvolumebutton.c
3491++++ b/gtk/gtkvolumebutton.c
3492+@@ -183,10 +183,6 @@
3493+   GtkWidget *widget = GTK_WIDGET (button);
3494+ 
3495+   gtk_widget_init_template (widget);
3496+-
3497+-  /* The atk action description is not supported by GtkBuilder */
3498+-  atk_action_set_description (ATK_ACTION (gtk_widget_get_accessible (GTK_WIDGET (widget))),
3499+-			      1, _("Adjusts the volume"));
3500+ }
3501+ 
3502+ /**
3503+@@ -220,10 +216,7 @@
3504+   GtkAdjustment *adjustment;
3505+   gdouble val;
3506+   char *str;
3507+-  AtkImage *image;
3508+ 
3509+-  image = ATK_IMAGE (gtk_widget_get_accessible (button));
3510+-
3511+   adjustment = gtk_scale_button_get_adjustment (scale_button);
3512+   val = gtk_scale_button_get_value (scale_button);
3513+ 
3514+@@ -250,7 +243,6 @@
3515+     }
3516+ 
3517+   gtk_tooltip_set_text (tooltip, str);
3518+-  atk_image_set_image_description (image, str);
3519+   g_free (str);
3520+ 
3521+   return TRUE;
3522+--- a/gtk/gtkwidget.c
3523++++ b/gtk/gtkwidget.c
3524+@@ -496,8 +496,6 @@
3525+ struct _GtkWidgetClassPrivate
3526+ {
3527+   GtkWidgetTemplate *template;
3528+-  GType accessible_type;
3529+-  AtkRole accessible_role;
3530+   const char *css_name;
3531+ };
3532+ 
3533+@@ -738,9 +736,6 @@
3534+                                                                  GtkStateFlags     old_state);
3535+ static void             gtk_widget_real_queue_draw_region       (GtkWidget         *widget,
3536+ 								 const cairo_region_t *region);
3537+-static AtkObject*	gtk_widget_real_get_accessible		(GtkWidget	  *widget);
3538+-static void		gtk_widget_accessible_interface_init	(AtkImplementorIface *iface);
3539+-static AtkObject*	gtk_widget_ref_accessible		(AtkImplementor *implementor);
3540+ static void             gtk_widget_invalidate_widget_windows    (GtkWidget        *widget,
3541+ 								 cairo_region_t        *region);
3542+ static GdkScreen *      gtk_widget_get_screen_unchecked         (GtkWidget        *widget);
3543+@@ -878,13 +873,6 @@
3544+ 	NULL,		/* value_table */
3545+       };
3546+ 
3547+-      const GInterfaceInfo accessibility_info =
3548+-      {
3549+-	(GInterfaceInitFunc) gtk_widget_accessible_interface_init,
3550+-	(GInterfaceFinalizeFunc) NULL,
3551+-	NULL /* interface data */
3552+-      };
3553+-
3554+       const GInterfaceInfo buildable_info =
3555+       {
3556+ 	(GInterfaceInitFunc) gtk_widget_buildable_interface_init,
3557+@@ -900,8 +888,6 @@
3558+       GtkWidget_private_offset =
3559+         g_type_add_instance_private (widget_type, sizeof (GtkWidgetPrivate));
3560+ 
3561+-      g_type_add_interface_static (widget_type, ATK_TYPE_IMPLEMENTOR,
3562+-                                   &accessibility_info) ;
3563+       g_type_add_interface_static (widget_type, GTK_TYPE_BUILDABLE,
3564+                                    &buildable_info) ;
3565+     }
3566+@@ -1106,11 +1092,6 @@
3567+ 
3568+   klass->show_help = gtk_widget_real_show_help;
3569+ 
3570+-  /* Accessibility support */
3571+-  klass->priv->accessible_type = GTK_TYPE_ACCESSIBLE;
3572+-  klass->priv->accessible_role = ATK_ROLE_INVALID;
3573+-  klass->get_accessible = gtk_widget_real_get_accessible;
3574+-
3575+   klass->adjust_size_request = gtk_widget_real_adjust_size_request;
3576+   klass->adjust_baseline_request = gtk_widget_real_adjust_baseline_request;
3577+   klass->adjust_size_allocation = gtk_widget_real_adjust_size_allocation;
3578+@@ -3722,7 +3703,6 @@
3579+                                                              1, G_MAXINT, 20,
3580+                                                              GTK_PARAM_READABLE));
3581+ 
3582+-  gtk_widget_class_set_accessible_type (klass, GTK_TYPE_WIDGET_ACCESSIBLE);
3583+   gtk_widget_class_set_css_name (klass, "widget");
3584+ }
3585+ 
3586+@@ -12332,13 +12312,6 @@
3587+ 	}
3588+     }
3589+ 
3590+-  if (priv->accessible)
3591+-    {
3592+-      gtk_accessible_set_widget (GTK_ACCESSIBLE (priv->accessible), NULL);
3593+-      g_object_unref (priv->accessible);
3594+-      priv->accessible = NULL;
3595+-    }
3596+-
3597+   /* wipe accelerator closures (keep order) */
3598+   g_object_set_qdata (G_OBJECT (widget), quark_accel_path, NULL);
3599+   g_object_set_qdata (G_OBJECT (widget), quark_accel_closures, NULL);
3600+@@ -12371,8 +12344,6 @@
3601+ 
3602+   g_free (priv->name);
3603+ 
3604+-  g_clear_object (&priv->accessible);
3605+-
3606+   gtk_widget_clear_path (widget);
3607+ 
3608+   gtk_css_widget_node_widget_destroyed (GTK_CSS_WIDGET_NODE (priv->cssnode));
3609+@@ -13420,191 +13391,7 @@
3610+                      gtk_requisition_copy,
3611+                      gtk_requisition_free)
3612+ 
3613+-/**
3614+- * gtk_widget_class_set_accessible_type:
3615+- * @widget_class: class to set the accessible type for
3616+- * @type: The object type that implements the accessible for @widget_class
3617+- *
3618+- * Sets the type to be used for creating accessibles for widgets of
3619+- * @widget_class. The given @type must be a subtype of the type used for
3620+- * accessibles of the parent class.
3621+- *
3622+- * This function should only be called from class init functions of widgets.
3623+- *
3624+- * Since: 3.2
3625+- **/
3626+-void
3627+-gtk_widget_class_set_accessible_type (GtkWidgetClass *widget_class,
3628+-                                      GType           type)
3629+-{
3630+-  GtkWidgetClassPrivate *priv;
3631+-
3632+-  g_return_if_fail (GTK_IS_WIDGET_CLASS (widget_class));
3633+-  g_return_if_fail (g_type_is_a (type, widget_class->priv->accessible_type));
3634+-
3635+-  priv = widget_class->priv;
3636+-
3637+-  priv->accessible_type = type;
3638+-  /* reset this - honoring the type's role is better. */
3639+-  priv->accessible_role = ATK_ROLE_INVALID;
3640+-}
3641+-
3642+-/**
3643+- * gtk_widget_class_set_accessible_role:
3644+- * @widget_class: class to set the accessible role for
3645+- * @role: The role to use for accessibles created for @widget_class
3646+- *
3647+- * Sets the default #AtkRole to be set on accessibles created for
3648+- * widgets of @widget_class. Accessibles may decide to not honor this
3649+- * setting if their role reporting is more refined. Calls to 
3650+- * gtk_widget_class_set_accessible_type() will reset this value.
3651+- *
3652+- * In cases where you want more fine-grained control over the role of
3653+- * accessibles created for @widget_class, you should provide your own
3654+- * accessible type and use gtk_widget_class_set_accessible_type()
3655+- * instead.
3656+- *
3657+- * If @role is #ATK_ROLE_INVALID, the default role will not be changed
3658+- * and the accessible’s default role will be used instead.
3659+- *
3660+- * This function should only be called from class init functions of widgets.
3661+- *
3662+- * Since: 3.2
3663+- **/
3664+-void
3665+-gtk_widget_class_set_accessible_role (GtkWidgetClass *widget_class,
3666+-                                      AtkRole         role)
3667+-{
3668+-  GtkWidgetClassPrivate *priv;
3669+-
3670+-  g_return_if_fail (GTK_IS_WIDGET_CLASS (widget_class));
3671+-
3672+-  priv = widget_class->priv;
3673+-
3674+-  priv->accessible_role = role;
3675+-}
3676+-
3677+-/**
3678+- * _gtk_widget_peek_accessible:
3679+- * @widget: a #GtkWidget
3680+- *
3681+- * Gets the accessible for @widget, if it has been created yet.
3682+- * Otherwise, this function returns %NULL. If the @widget’s implementation
3683+- * does not use the default way to create accessibles, %NULL will always be
3684+- * returned.
3685+- *
3686+- * Returns: (nullable): the accessible for @widget or %NULL if none has been
3687+- *     created yet.
3688+- **/
3689+-AtkObject *
3690+-_gtk_widget_peek_accessible (GtkWidget *widget)
3691+-{
3692+-  return widget->priv->accessible;
3693+-}
3694+-
3695+-/**
3696+- * gtk_widget_get_accessible:
3697+- * @widget: a #GtkWidget
3698+- *
3699+- * Returns the accessible object that describes the widget to an
3700+- * assistive technology.
3701+- *
3702+- * If accessibility support is not available, this #AtkObject
3703+- * instance may be a no-op. Likewise, if no class-specific #AtkObject
3704+- * implementation is available for the widget instance in question,
3705+- * it will inherit an #AtkObject implementation from the first ancestor
3706+- * class for which such an implementation is defined.
3707+- *
3708+- * The documentation of the
3709+- * [ATK](http://developer.gnome.org/atk/stable/)
3710+- * library contains more information about accessible objects and their uses.
3711+- *
3712+- * Returns: (transfer none): the #AtkObject associated with @widget
3713+- */
3714+-AtkObject*
3715+-gtk_widget_get_accessible (GtkWidget *widget)
3716+-{
3717+-  g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
3718+-
3719+-  return GTK_WIDGET_GET_CLASS (widget)->get_accessible (widget);
3720+-}
3721+-
3722+-static AtkObject*
3723+-gtk_widget_real_get_accessible (GtkWidget *widget)
3724+-{
3725+-  AtkObject* accessible;
3726+-
3727+-  accessible = widget->priv->accessible;
3728+-
3729+-  if (!accessible)
3730+-    {
3731+-      GtkWidgetClass *widget_class;
3732+-      GtkWidgetClassPrivate *priv;
3733+-      AtkObjectFactory *factory;
3734+-      AtkRegistry *default_registry;
3735+-
3736+-      widget_class = GTK_WIDGET_GET_CLASS (widget);
3737+-      priv = widget_class->priv;
3738+-
3739+-      if (priv->accessible_type == GTK_TYPE_ACCESSIBLE)
3740+-        {
3741+-          default_registry = atk_get_default_registry ();
3742+-          factory = atk_registry_get_factory (default_registry,
3743+-                                              G_TYPE_FROM_INSTANCE (widget));
3744+-          accessible = atk_object_factory_create_accessible (factory, G_OBJECT (widget));
3745+-
3746+-          if (priv->accessible_role != ATK_ROLE_INVALID)
3747+-            atk_object_set_role (accessible, priv->accessible_role);
3748+-
3749+-          widget->priv->accessible = accessible;
3750+-        }
3751+-      else
3752+-        {
3753+-          accessible = g_object_new (priv->accessible_type,
3754+-                                     "widget", widget,
3755+-                                     NULL);
3756+-          if (priv->accessible_role != ATK_ROLE_INVALID)
3757+-            atk_object_set_role (accessible, priv->accessible_role);
3758+-
3759+-          widget->priv->accessible = accessible;
3760+-
3761+-          atk_object_initialize (accessible, widget);
3762+-
3763+-          /* Set the role again, since we don't want a role set
3764+-           * in some parent initialize() function to override
3765+-           * our own.
3766+-           */
3767+-          if (priv->accessible_role != ATK_ROLE_INVALID)
3768+-            atk_object_set_role (accessible, priv->accessible_role);
3769+-        }
3770+-
3771+-    }
3772+-
3773+-  return accessible;
3774+-}
3775+-
3776+ /*
3777+- * Initialize a AtkImplementorIface instance’s virtual pointers as
3778+- * appropriate to this implementor’s class (GtkWidget).
3779+- */
3780+-static void
3781+-gtk_widget_accessible_interface_init (AtkImplementorIface *iface)
3782+-{
3783+-  iface->ref_accessible = gtk_widget_ref_accessible;
3784+-}
3785+-
3786+-static AtkObject*
3787+-gtk_widget_ref_accessible (AtkImplementor *implementor)
3788+-{
3789+-  AtkObject *accessible;
3790+-
3791+-  accessible = gtk_widget_get_accessible (GTK_WIDGET (implementor));
3792+-  if (accessible)
3793+-    g_object_ref (accessible);
3794+-  return accessible;
3795+-}
3796+-
3797+-/*
3798+  * Expand flag management
3799+  */
3800+ 
3801+@@ -14072,9 +13859,6 @@
3802+   GSList *l;
3803+   GType internal_child_type = 0;
3804+ 
3805+-  if (strcmp (childname, "accessible") == 0)
3806+-    return G_OBJECT (gtk_widget_get_accessible (GTK_WIDGET (buildable)));
3807+-
3808+   /* Find a widget type which has declared an automated child as internal by
3809+    * the name 'childname', if any.
3810+    */
3811+@@ -14122,44 +13906,10 @@
3812+     g_object_set_property (G_OBJECT (buildable), name, value);
3813+ }
3814+ 
3815+-typedef struct
3816+-{
3817+-  gchar *action_name;
3818+-  GString *description;
3819+-  gchar *context;
3820+-  gboolean translatable;
3821+-} AtkActionData;
3822+-
3823+-typedef struct
3824+-{
3825+-  gchar *target;
3826+-  AtkRelationType type;
3827+-  gint line;
3828+-  gint col;
3829+-} AtkRelationData;
3830+-
3831+ static void
3832+-free_action (AtkActionData *data, gpointer user_data)
3833+-{
3834+-  g_free (data->action_name);
3835+-  g_string_free (data->description, TRUE);
3836+-  g_free (data->context);
3837+-  g_slice_free (AtkActionData, data);
3838+-}
3839+-
3840+-static void
3841+-free_relation (AtkRelationData *data, gpointer user_data)
3842+-{
3843+-  g_free (data->target);
3844+-  g_slice_free (AtkRelationData, data);
3845+-}
3846+-
3847+-static void
3848+ gtk_widget_buildable_parser_finished (GtkBuildable *buildable,
3849+ 				      GtkBuilder   *builder)
3850+ {
3851+-  GSList *atk_relations;
3852+-
3853+   if (g_object_get_qdata (G_OBJECT (buildable), quark_builder_has_default))
3854+     {
3855+       gtk_widget_grab_default (GTK_WIDGET (buildable));
3856+@@ -14171,37 +13921,6 @@
3857+       gtk_widget_grab_focus (GTK_WIDGET (buildable));
3858+       g_object_steal_qdata (G_OBJECT (buildable), quark_builder_has_focus);
3859+     }
3860+-
3861+-  atk_relations = g_object_get_qdata (G_OBJECT (buildable),
3862+-				      quark_builder_atk_relations);
3863+-  if (atk_relations)
3864+-    {
3865+-      AtkObject *accessible;
3866+-      AtkRelationSet *relation_set;
3867+-      GSList *l;
3868+-      GObject *target;
3869+-      AtkObject *target_accessible;
3870+-
3871+-      accessible = gtk_widget_get_accessible (GTK_WIDGET (buildable));
3872+-      relation_set = atk_object_ref_relation_set (accessible);
3873+-
3874+-      for (l = atk_relations; l; l = l->next)
3875+-	{
3876+-	  AtkRelationData *relation = (AtkRelationData*)l->data;
3877+-
3878+-	  target = _gtk_builder_lookup_object (builder, relation->target, relation->line, relation->col);
3879+-	  if (!target)
3880+-	    continue;
3881+-	  target_accessible = gtk_widget_get_accessible (GTK_WIDGET (target));
3882+-	  g_assert (target_accessible != NULL);
3883+-
3884+-	  atk_relation_set_add_relation_by_type (relation_set, relation->type, target_accessible);
3885+-	}
3886+-      g_object_unref (relation_set);
3887+-
3888+-      g_slist_free_full (atk_relations, (GDestroyNotify) free_relation);
3889+-      g_object_steal_qdata (G_OBJECT (buildable), quark_builder_atk_relations);
3890+-    }
3891+ }
3892+ 
3893+ typedef struct
3894+@@ -14211,125 +13930,6 @@
3895+   GSList *relations;
3896+ } AccessibilitySubParserData;
3897+ 
3898+-static void
3899+-accessibility_start_element (GMarkupParseContext  *context,
3900+-                             const gchar          *element_name,
3901+-                             const gchar         **names,
3902+-                             const gchar         **values,
3903+-                             gpointer              user_data,
3904+-                             GError              **error)
3905+-{
3906+-  AccessibilitySubParserData *data = (AccessibilitySubParserData*)user_data;
3907+-
3908+-  if (strcmp (element_name, "relation") == 0)
3909+-    {
3910+-      gchar *target = NULL;
3911+-      gchar *type = NULL;
3912+-      AtkRelationData *relation;
3913+-      AtkRelationType relation_type;
3914+-
3915+-      if (!_gtk_builder_check_parent (data->builder, context, "accessibility", error))
3916+-        return;
3917+-
3918+-      if (!g_markup_collect_attributes (element_name, names, values, error,
3919+-                                        G_MARKUP_COLLECT_STRING, "target", &target,
3920+-                                        G_MARKUP_COLLECT_STRING, "type", &type,
3921+-                                        G_MARKUP_COLLECT_INVALID))
3922+-        {
3923+-          _gtk_builder_prefix_error (data->builder, context, error);
3924+-          return;
3925+-        }
3926+-
3927+-      relation_type = atk_relation_type_for_name (type);
3928+-      if (relation_type == ATK_RELATION_NULL)
3929+-        {
3930+-          g_set_error (error,
3931+-                       GTK_BUILDER_ERROR,
3932+-                       GTK_BUILDER_ERROR_INVALID_VALUE,
3933+-                       "No such relation type: '%s'", type);
3934+-          _gtk_builder_prefix_error (data->builder, context, error);
3935+-          return;
3936+-        }
3937+-
3938+-      relation = g_slice_new (AtkRelationData);
3939+-      relation->target = g_strdup (target);
3940+-      relation->type = relation_type;
3941+-
3942+-      data->relations = g_slist_prepend (data->relations, relation);
3943+-    }
3944+-  else if (strcmp (element_name, "action") == 0)
3945+-    {
3946+-      const gchar *action_name;
3947+-      const gchar *description = NULL;
3948+-      const gchar *msg_context = NULL;
3949+-      gboolean translatable = FALSE;
3950+-      AtkActionData *action;
3951+-
3952+-      if (!_gtk_builder_check_parent (data->builder, context, "accessibility", error))
3953+-        return;
3954+-
3955+-      if (!g_markup_collect_attributes (element_name, names, values, error,
3956+-                                        G_MARKUP_COLLECT_STRING, "action_name", &action_name,
3957+-                                        G_MARKUP_COLLECT_STRING|G_MARKUP_COLLECT_OPTIONAL, "description", &description,
3958+-                                        G_MARKUP_COLLECT_STRING|G_MARKUP_COLLECT_OPTIONAL, "comments", NULL,
3959+-                                        G_MARKUP_COLLECT_STRING|G_MARKUP_COLLECT_OPTIONAL, "context", &msg_context,
3960+-                                        G_MARKUP_COLLECT_BOOLEAN|G_MARKUP_COLLECT_OPTIONAL, "translatable", &translatable,
3961+-                                        G_MARKUP_COLLECT_INVALID))
3962+-        {
3963+-          _gtk_builder_prefix_error (data->builder, context, error);
3964+-          return;
3965+-        }
3966+-
3967+-      action = g_slice_new (AtkActionData);
3968+-      action->action_name = g_strdup (action_name);
3969+-      action->description = g_string_new (description);
3970+-      action->context = g_strdup (msg_context);
3971+-      action->translatable = translatable;
3972+-
3973+-      data->actions = g_slist_prepend (data->actions, action);
3974+-    }
3975+-  else if (strcmp (element_name, "accessibility") == 0)
3976+-    {
3977+-      if (!_gtk_builder_check_parent (data->builder, context, "object", error))
3978+-        return;
3979+-
3980+-      if (!g_markup_collect_attributes (element_name, names, values, error,
3981+-                                        G_MARKUP_COLLECT_INVALID, NULL, NULL,
3982+-                                        G_MARKUP_COLLECT_INVALID))
3983+-        _gtk_builder_prefix_error (data->builder, context, error);
3984+-    }
3985+-  else
3986+-    {
3987+-      _gtk_builder_error_unhandled_tag (data->builder, context,
3988+-                                        "GtkWidget", element_name,
3989+-                                        error);
3990+-    }
3991+-}
3992+-
3993+-static void
3994+-accessibility_text (GMarkupParseContext  *context,
3995+-                    const gchar          *text,
3996+-                    gsize                 text_len,
3997+-                    gpointer              user_data,
3998+-                    GError              **error)
3999+-{
4000+-  AccessibilitySubParserData *data = (AccessibilitySubParserData*)user_data;
4001+-
4002+-  if (strcmp (g_markup_parse_context_get_element (context), "action") == 0)
4003+-    {
4004+-      AtkActionData *action = data->actions->data;
4005+-
4006+-      g_string_append_len (action->description, text, text_len);
4007+-    }
4008+-}
4009+-
4010+-static const GMarkupParser accessibility_parser =
4011+-  {
4012+-    accessibility_start_element,
4013+-    NULL,
4014+-    accessibility_text,
4015+-  };
4016+-
4017+ typedef struct
4018+ {
4019+   GObject *object;
4020+@@ -14492,19 +14092,6 @@
4021+       return TRUE;
4022+     }
4023+ 
4024+-  if (strcmp (tagname, "accessibility") == 0)
4025+-    {
4026+-      AccessibilitySubParserData *data;
4027+-
4028+-      data = g_slice_new0 (AccessibilitySubParserData);
4029+-      data->builder = builder;
4030+-
4031+-      *parser = accessibility_parser;
4032+-      *parser_data = data;
4033+-
4034+-      return TRUE;
4035+-    }
4036+-
4037+   if (strcmp (tagname, "style") == 0)
4038+     {
4039+       StyleParserData *data;
4040+@@ -14577,62 +14164,6 @@
4041+       toplevel = _gtk_widget_get_toplevel (GTK_WIDGET (accel_data->object));
4042+ 
4043+       _gtk_widget_buildable_finish_accelerator (GTK_WIDGET (buildable), toplevel, user_data);
4044+-    }
4045+-  else if (strcmp (tagname, "accessibility") == 0)
4046+-    {
4047+-      AccessibilitySubParserData *a11y_data;
4048+-
4049+-      a11y_data = (AccessibilitySubParserData*)user_data;
4050+-
4051+-      if (a11y_data->actions)
4052+-	{
4053+-	  AtkObject *accessible;
4054+-	  AtkAction *action;
4055+-	  gint i, n_actions;
4056+-	  GSList *l;
4057+-
4058+-	  accessible = gtk_widget_get_accessible (GTK_WIDGET (buildable));
4059+-
4060+-          if (ATK_IS_ACTION (accessible))
4061+-            {
4062+-	      action = ATK_ACTION (accessible);
4063+-	      n_actions = atk_action_get_n_actions (action);
4064+-
4065+-	      for (l = a11y_data->actions; l; l = l->next)
4066+-	        {
4067+-	          AtkActionData *action_data = (AtkActionData*)l->data;
4068+-
4069+-	          for (i = 0; i < n_actions; i++)
4070+-		    if (strcmp (atk_action_get_name (action, i),
4071+-		  	        action_data->action_name) == 0)
4072+-		      break;
4073+-
4074+-	          if (i < n_actions)
4075+-                    {
4076+-                      const gchar *description;
4077+-
4078+-                      if (action_data->translatable && action_data->description->len)
4079+-                        description = _gtk_builder_parser_translate (gtk_builder_get_translation_domain (builder),
4080+-                                                                     action_data->context,
4081+-                                                                     action_data->description->str);
4082+-                      else
4083+-                        description = action_data->description->str;
4084+-
4085+-		      atk_action_set_description (action, i, description);
4086+-                    }
4087+-                }
4088+-	    }
4089+-          else
4090+-            g_warning ("accessibility action on a widget that does not implement AtkAction");
4091+-
4092+-	  g_slist_free_full (a11y_data->actions, (GDestroyNotify) free_action);
4093+-	}
4094+-
4095+-      if (a11y_data->relations)
4096+-	g_object_set_qdata (G_OBJECT (buildable), quark_builder_atk_relations,
4097+-			    a11y_data->relations);
4098+-
4099+-      g_slice_free (AccessibilitySubParserData, a11y_data);
4100+     }
4101+   else if (strcmp (tagname, "style") == 0)
4102+     {
4103+--- a/gtk/gtkwidget.h
4104++++ b/gtk/gtkwidget.h
4105+@@ -33,7 +33,6 @@
4106+ #include <gtk/gtkaccelgroup.h>
4107+ #include <gtk/gtkborder.h>
4108+ #include <gtk/gtktypes.h>
4109+-#include <atk/atk.h>
4110+ 
4111+ G_BEGIN_DECLS
4112+ 
4113+@@ -305,8 +304,6 @@
4114+  * @popup_menu: Signal emitted whenever a widget should pop up a
4115+  *   context menu.
4116+  * @show_help:
4117+- * @get_accessible: Returns the accessible object that describes the
4118+- *   widget to an assistive technology.
4119+  * @screen_changed: Signal emitted when the screen of a widget has
4120+  *   changed.
4121+  * @can_activate_accel: Signal allows applications and derived widgets
4122+@@ -549,8 +546,6 @@
4123+ 
4124+   /* accessibility support
4125+    */
4126+-  AtkObject *  (* get_accessible)     (GtkWidget *widget);
4127+-
4128+   void         (* screen_changed)     (GtkWidget *widget,
4129+                                        GdkScreen *previous_screen);
4130+   gboolean     (* can_activate_accel) (GtkWidget *widget,
4131+@@ -1055,16 +1050,6 @@
4132+ GDK_AVAILABLE_IN_ALL
4133+ void             gtk_widget_set_support_multidevice (GtkWidget      *widget,
4134+                                                      gboolean        support_multidevice);
4135+-
4136+-/* Accessibility support */
4137+-GDK_AVAILABLE_IN_3_2
4138+-void             gtk_widget_class_set_accessible_type    (GtkWidgetClass     *widget_class,
4139+-                                                          GType               type);
4140+-GDK_AVAILABLE_IN_3_2
4141+-void             gtk_widget_class_set_accessible_role    (GtkWidgetClass     *widget_class,
4142+-                                                          AtkRole             role);
4143+-GDK_AVAILABLE_IN_ALL
4144+-AtkObject*       gtk_widget_get_accessible               (GtkWidget          *widget);
4145+ 
4146+ 
4147+ /* Margin and alignment */
4148+--- a/gtk/gtkwidgetprivate.h
4149++++ b/gtk/gtkwidgetprivate.h
4150+@@ -158,8 +158,6 @@
4151+   GtkWidget *parent;
4152+ 
4153+   GList *event_controllers;
4154+-
4155+-  AtkObject *accessible;
4156+ };
4157+ 
4158+ GtkCssNode *  gtk_widget_get_css_node       (GtkWidget *widget);
4159+@@ -212,8 +210,6 @@
4160+ 
4161+ const gchar*      _gtk_widget_get_accel_path               (GtkWidget *widget,
4162+                                                             gboolean  *locked);
4163+-
4164+-AtkObject *       _gtk_widget_peek_accessible              (GtkWidget *widget);
4165+ 
4166+ void              _gtk_widget_set_has_default              (GtkWidget *widget,
4167+                                                             gboolean   has_default);
4168+--- a/gtk/gtkwindow.c
4169++++ b/gtk/gtkwindow.c
4170+@@ -60,7 +60,6 @@
4171+ #include "gtkheaderbarprivate.h"
4172+ #include "gtkpopoverprivate.h"
4173+ #include "a11y/gtkwindowaccessible.h"
4174+-#include "a11y/gtkcontaineraccessibleprivate.h"
4175+ #include "gtkapplicationprivate.h"
4176+ #include "gtkgestureprivate.h"
4177+ #include "inspector/init.h"
4178+@@ -1270,7 +1269,6 @@
4179+   add_tab_bindings (binding_set, GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD);
4180+   add_tab_bindings (binding_set, GDK_CONTROL_MASK | GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD);
4181+ 
4182+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_WINDOW_ACCESSIBLE);
4183+   gtk_widget_class_set_css_name (widget_class, "window");
4184+ }
4185+ 
4186+@@ -12478,7 +12476,6 @@
4187+ {
4188+   GtkWindowPrivate *priv;
4189+   GtkWindowPopover *data;
4190+-  AtkObject *accessible;
4191+ 
4192+   g_return_if_fail (GTK_IS_WINDOW (window));
4193+   g_return_if_fail (GTK_IS_WIDGET (popover));
4194+@@ -12501,10 +12498,6 @@
4195+     popover_realize (popover, data, window);
4196+ 
4197+   gtk_widget_set_parent (popover, GTK_WIDGET (window));
4198+-
4199+-  accessible = gtk_widget_get_accessible (GTK_WIDGET (window));
4200+-  _gtk_container_accessible_add_child (GTK_CONTAINER_ACCESSIBLE (accessible),
4201+-                                       gtk_widget_get_accessible (popover), -1);
4202+ }
4203+ 
4204+ void
4205+@@ -12513,7 +12506,6 @@
4206+ {
4207+   GtkWindowPrivate *priv;
4208+   GtkWindowPopover *data;
4209+-  AtkObject *accessible;
4210+ 
4211+   g_return_if_fail (GTK_IS_WINDOW (window));
4212+   g_return_if_fail (GTK_IS_WIDGET (popover));
4213+@@ -12535,9 +12527,6 @@
4214+ 
4215+   priv->popovers = g_list_remove (priv->popovers, data);
4216+ 
4217+-  accessible = gtk_widget_get_accessible (GTK_WIDGET (window));
4218+-  _gtk_container_accessible_remove_child (GTK_CONTAINER_ACCESSIBLE (accessible),
4219+-                                          gtk_widget_get_accessible (popover), -1);
4220+   popover_destroy (data);
4221+   g_object_unref (popover);
4222+ }
4223+--- a/gtk/inspector/misc-info.c
4224++++ b/gtk/inspector/misc-info.c
4225+@@ -68,12 +68,6 @@
4226+   GtkWidget *framerate;
4227+   GtkWidget *framecount_row;
4228+   GtkWidget *framecount;
4229+-  GtkWidget *accessible_role_row;
4230+-  GtkWidget *accessible_role;
4231+-  GtkWidget *accessible_name_row;
4232+-  GtkWidget *accessible_name;
4233+-  GtkWidget *accessible_description_row;
4234+-  GtkWidget *accessible_description;
4235+   GtkWidget *mapped_row;
4236+   GtkWidget *mapped;
4237+   GtkWidget *realized_row;
4238+@@ -337,8 +331,6 @@
4239+ 
4240+   if (GTK_IS_WIDGET (sl->priv->object))
4241+     {
4242+-      AtkObject *accessible;
4243+-      AtkRole role;
4244+       GList *list, *l;
4245+ 
4246+       gtk_container_forall (GTK_CONTAINER (sl->priv->mnemonic_label), (GtkCallback)gtk_widget_destroy, NULL);
4247+@@ -359,11 +351,6 @@
4248+ 
4249+       gtk_widget_set_visible (sl->priv->tick_callback, gtk_widget_has_tick_callback (GTK_WIDGET (sl->priv->object)));
4250+ 
4251+-      accessible = ATK_OBJECT (gtk_widget_get_accessible (GTK_WIDGET (sl->priv->object)));
4252+-      role = atk_object_get_role (accessible);
4253+-      gtk_label_set_text (GTK_LABEL (sl->priv->accessible_role), atk_role_get_name (role));
4254+-      gtk_label_set_text (GTK_LABEL (sl->priv->accessible_name), atk_object_get_name (accessible));
4255+-      gtk_label_set_text (GTK_LABEL (sl->priv->accessible_description), atk_object_get_description (accessible));
4256+       gtk_widget_set_visible (sl->priv->mapped, gtk_widget_get_mapped (GTK_WIDGET (sl->priv->object)));
4257+       gtk_widget_set_visible (sl->priv->realized, gtk_widget_get_realized (GTK_WIDGET (sl->priv->object)));
4258+       gtk_widget_set_visible (sl->priv->is_toplevel, gtk_widget_is_toplevel (GTK_WIDGET (sl->priv->object)));
4259+@@ -454,9 +441,6 @@
4260+       gtk_widget_show (sl->priv->clip_area_row);
4261+       gtk_widget_show (sl->priv->mnemonic_label_row);
4262+       gtk_widget_show (sl->priv->tick_callback_row);
4263+-      gtk_widget_show (sl->priv->accessible_role_row);
4264+-      gtk_widget_show (sl->priv->accessible_name_row);
4265+-      gtk_widget_show (sl->priv->accessible_description_row);
4266+       gtk_widget_show (sl->priv->mapped_row);
4267+       gtk_widget_show (sl->priv->realized_row);
4268+       gtk_widget_show (sl->priv->is_toplevel_row);
4269+@@ -478,9 +462,6 @@
4270+       gtk_widget_hide (sl->priv->baseline_row);
4271+       gtk_widget_hide (sl->priv->clip_area_row);
4272+       gtk_widget_hide (sl->priv->tick_callback_row);
4273+-      gtk_widget_hide (sl->priv->accessible_role_row);
4274+-      gtk_widget_hide (sl->priv->accessible_name_row);
4275+-      gtk_widget_hide (sl->priv->accessible_description_row);
4276+       gtk_widget_hide (sl->priv->mapped_row);
4277+       gtk_widget_hide (sl->priv->realized_row);
4278+       gtk_widget_hide (sl->priv->is_toplevel_row);
4279+@@ -642,12 +623,6 @@
4280+   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, framecount);
4281+   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, framerate_row);
4282+   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, framerate);
4283+-  gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, accessible_role_row);
4284+-  gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, accessible_role);
4285+-  gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, accessible_name_row);
4286+-  gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, accessible_name);
4287+-  gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, accessible_description_row);
4288+-  gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, accessible_description);
4289+   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, mapped_row);
4290+   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, mapped);
4291+   gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorMiscInfo, realized_row);
4292+--- a/gtk/meson.build
4293++++ b/gtk/meson.build
4294+@@ -1,5 +1,4 @@
4295+ subdir('deprecated')
4296+-subdir('a11y')
4297+ subdir('inspector')
4298+ 
4299+ gtk_cargs = [
4300+@@ -32,7 +31,6 @@
4301+   'gtkaccelgroup.c',
4302+   'gtkaccellabel.c',
4303+   'gtkaccelmap.c',
4304+-  'gtkaccessible.c',
4305+   'gtkactionbar.c',
4306+   'gtkactionhelper.c',
4307+   'gtkadjustment.c',
4308+@@ -396,12 +394,10 @@
4309+   'gtk.h',
4310+   'gtk-autocleanups.h',
4311+   'gtkx-autocleanups.h',
4312+-  'gtk-a11y.h',
4313+   'gtkaboutdialog.h',
4314+   'gtkaccelgroup.h',
4315+   'gtkaccellabel.h',
4316+   'gtkaccelmap.h',
4317+-  'gtkaccessible.h',
4318+   'gtkactionable.h',
4319+   'gtkactionbar.h',
4320+   'gtkadjustment.h',
4321+@@ -761,7 +757,7 @@
4322+ gtkmarshal_h = gtkmarshalers[1]
4323+ 
4324+ gtktypebuiltins = gnome.mkenums('gtktypebuiltins',
4325+-                                sources: gtk_public_headers + gtk_deprecated_headers + a11y_headers,
4326++                                sources: gtk_public_headers + gtk_deprecated_headers,
4327+                                 c_template: 'gtktypebuiltins.c.template',
4328+                                 h_template: 'gtktypebuiltins.h.template',
4329+                                 install_dir: join_paths(gtk_includedir, 'gtk-3.0/gtk'),
4330+@@ -820,7 +816,6 @@
4331+   gtk_dbus_src,
4332+   gtk_deprecated_sources,
4333+   inspector_sources,
4334+-  a11y_sources,
4335+   gtkresources,
4336+   gtkmarshalers,
4337+   gtkprivatetypebuiltins,
4338+@@ -840,7 +835,6 @@
4339+   cairo_dep,
4340+   fontconfig_dep,
4341+   pixbuf_dep,
4342+-  atk_dep,
4343+   epoxy_dep,
4344+   libm,
4345+ ]
4346+@@ -896,8 +890,6 @@
4347+            )
4348+   gtk_res = import('windows').compile_resources(gtk_rc)
4349+   gtk_sources += gtk_res
4350+-else
4351+-  gtk_deps += [ atkbridge_dep, ]
4352+ endif
4353+ 
4354+ if quartz_enabled
4355+@@ -991,15 +983,12 @@
4356+     gtk_gir_public_headers,
4357+     gtk_deprecated_headers,
4358+     gtk_sources,
4359+-    a11y_headers,
4360+-    a11y_sources,
4361+     gtktypebuiltins_h,
4362+     gtkversion,
4363+   ]
4364+ 
4365+-  gtk_gir_includes = [gdk_gir[0], 'Atk-1.0']
4366+-  gtk_gir_extra_args = gir_args + ['-DGTK_COMPILATION',
4367+-                                   '--c-include=gtk/gtk-a11y.h']
4368++  gtk_gir_includes = gdk_gir[0]
4369++  gtk_gir_extra_args = gir_args + ['-DGTK_COMPILATION']
4370+   if x11_enabled
4371+     gtk_gir_includes += ['xlib-2.0']
4372+     gtk_gir_extra_args += ['--c-include=gtk/gtkx.h']
4373+--- a/gtk/ui/gtkcoloreditor.ui
4374++++ b/gtk/ui/gtkcoloreditor.ui
4375+@@ -84,11 +84,6 @@
4376+                 <property name="visible">1</property>
4377+                 <property name="can-focus">1</property>
4378+                 <property name="invisible-char">•</property>
4379+-                <child internal-child="accessible">
4380+-                  <object class="AtkObject" id="entry-atkobject">
4381+-                    <property name="AtkObject::accessible-name" translatable="yes">Color Name</property>
4382+-                  </object>
4383+-                </child>
4384+                 <signal name="activate" handler="entry_apply" swapped="no"/>
4385+                 <signal name="focus-out-event" handler="entry_focus_out" swapped="no"/>
4386+                 <signal name="notify::text" handler="entry_text_changed" swapped="no"/>
4387+@@ -191,11 +186,6 @@
4388+             <property name="width-chars">2</property>
4389+             <property name="max-width-chars">2</property>
4390+             <property name="climb-rate">1</property>
4391+-            <child internal-child="accessible">
4392+-              <object class="AtkObject" id="a_entry-atkobject">
4393+-                <property name="AtkObject::accessible-name" translatable="yes">Alpha</property>
4394+-              </object>
4395+-            </child>
4396+             <signal name="key-press-event" handler="popup_key_press" swapped="no"/>
4397+           </object>
4398+           <packing>
4399+@@ -238,11 +228,6 @@
4400+             <property name="width-chars">2</property>
4401+             <property name="max-width-chars">2</property>
4402+             <property name="climb-rate">1</property>
4403+-            <child internal-child="accessible">
4404+-              <object class="AtkObject" id="h_entry-atkobject">
4405+-                <property name="AtkObject::accessible-name" translatable="yes">Hue</property>
4406+-              </object>
4407+-            </child>
4408+             <signal name="key-press-event" handler="popup_key_press" swapped="no"/>
4409+           </object>
4410+           <packing>
4411+@@ -296,11 +281,6 @@
4412+             <property name="width-chars">2</property>
4413+             <property name="max-width-chars">2</property>
4414+             <property name="climb-rate">1</property>
4415+-            <child internal-child="accessible">
4416+-              <object class="AtkObject" id="s_entry-atkobject">
4417+-                <property name="AtkObject::accessible-name" translatable="yes">Saturation</property>
4418+-              </object>
4419+-            </child>
4420+             <signal name="key-press-event" handler="popup_key_press" swapped="no"/>
4421+           </object>
4422+           <packing>
4423+@@ -315,11 +295,6 @@
4424+             <property name="width-chars">2</property>
4425+             <property name="max-width-chars">2</property>
4426+             <property name="climb-rate">1</property>
4427+-            <child internal-child="accessible">
4428+-              <object class="AtkObject" id="v_entry-atkobject">
4429+-                <property name="AtkObject::accessible-name" translatable="yes">Value</property>
4430+-              </object>
4431+-            </child>
4432+             <signal name="key-press-event" handler="popup_key_press" swapped="no"/>
4433+           </object>
4434+           <packing>
4435+--- a/gtk/ui/gtkfilechooserdialog.ui
4436++++ b/gtk/ui/gtkfilechooserdialog.ui
4437+@@ -27,11 +27,6 @@
4438+             <signal name="file-activated" handler="file_chooser_widget_file_activated" swapped="no"/>
4439+             <signal name="response-requested" handler="file_chooser_widget_response_requested" swapped="no"/>
4440+             <signal name="selection-changed" handler="file_chooser_widget_selection_changed" swapped="no"/>
4441+-            <child internal-child="accessible">
4442+-              <object class="AtkObject">
4443+-                <property name="AtkObject::accessible-name" translatable="yes">File Chooser Widget</property>
4444+-              </object>
4445+-            </child>
4446+           </object>
4447+           <packing>
4448+             <property name="expand">1</property>
4449+--- a/gtk/ui/gtkfilechooserwidget.ui
4450++++ b/gtk/ui/gtkfilechooserwidget.ui
4451+@@ -17,11 +17,6 @@
4452+                 <property name="hscrollbar-policy">never</property>
4453+                 <property name="local-only">1</property>
4454+                 <property name="show-other-locations">1</property>
4455+-                <child internal-child="accessible">
4456+-                  <object class="AtkObject">
4457+-                    <property name="AtkObject::accessible-name" translatable="yes">Places</property>
4458+-                  </object>
4459+-                </child>
4460+                 <style>
4461+                   <class name="sidebar"/>
4462+                 </style>
4463+@@ -42,11 +37,6 @@
4464+                   <object class="GtkRevealer" id="browse_header_revealer">
4465+                     <property name="visible">1</property>
4466+                     <property name="hexpand">1</property>
4467+-                    <child internal-child="accessible">
4468+-                      <object class="AtkObject">
4469+-                        <property name="AtkObject::accessible-name" translatable="yes">Browse Header Revealer</property>
4470+-                      </object>
4471+-                    </child>
4472+                     <child>
4473+                       <object class="GtkBox">
4474+                         <property name="visible">1</property>
4475+@@ -60,21 +50,11 @@
4476+                           <object class="GtkStack" id="browse_header_stack">
4477+                             <property name="visible">1</property>
4478+                             <property name="transition-type">crossfade</property>
4479+-                            <child internal-child="accessible">
4480+-                              <object class="AtkObject">
4481+-                                <property name="AtkObject::accessible-name" translatable="yes">Browse Header Stack</property>
4482+-                              </object>
4483+-                            </child>
4484+                             <child>
4485+                               <object class="GtkBox">
4486+                                 <property name="visible">1</property>
4487+                                 <property name="spacing">6</property>
4488+                                 <property name="border-width">6</property>
4489+-                                <child internal-child="accessible">
4490+-                                  <object class="AtkObject">
4491+-                                    <property name="AtkObject::accessible-name" translatable="yes">PathBar Layer</property>
4492+-                                  </object>
4493+-                                </child>
4494+                                 <child>
4495+                                   <object class="GtkPathBar" id="browse_path_bar">
4496+                                     <property name="visible">True</property>
4497+@@ -116,12 +96,7 @@
4498+                                 <property name="no-show-all">1</property>
4499+                                 <property name="spacing">6</property>
4500+                                 <property name="border-width">6</property>
4501+-                                <child internal-child="accessible">
4502+-                                  <object class="AtkObject">
4503+-                                    <property name="AtkObject::accessible-name" translatable="yes">Location Layer</property>
4504+                                   </object>
4505+-                                </child>
4506+-                              </object>
4507+                               <packing>
4508+                                 <property name="name">location</property>
4509+                               </packing>
4510+@@ -132,11 +107,6 @@
4511+                                 <property name="no-show-all">1</property>
4512+                                 <property name="spacing">6</property>
4513+                                 <property name="border-width">6</property>
4514+-                                <child internal-child="accessible">
4515+-                                  <object class="AtkObject">
4516+-                                    <property name="AtkObject::accessible-name" translatable="yes">Search Layer</property>
4517+-                                  </object>
4518+-                                </child>
4519+                                 <child type="center">
4520+                                   <object class="GtkSearchEntry" id="search_entry">
4521+                                     <property name="visible">1</property>
4522+@@ -194,11 +164,6 @@
4523+                                     <property name="visible">1</property>
4524+                                     <property name="has-tooltip">1</property>
4525+                                     <property name="enable-search">0</property>
4526+-                                    <child internal-child="accessible">
4527+-                                      <object class="AtkObject" id="browse_files_tree_view-atkobject">
4528+-                                        <property name="AtkObject::accessible-name" translatable="yes">Files</property>
4529+-                                      </object>
4530+-                                    </child>
4531+                                     <signal name="button-press-event" handler="list_button_press_event_cb" swapped="no"/>
4532+                                     <signal name="drag-data-received" handler="file_list_drag_data_received_cb" swapped="no"/>
4533+                                     <signal name="drag-drop" handler="file_list_drag_drop_cb" swapped="no"/>
4534+--- a/gtk/ui/gtkpathbar.ui
4535++++ b/gtk/ui/gtkpathbar.ui
4536+@@ -6,11 +6,6 @@
4537+     <property name="can-focus">1</property>
4538+     <property name="receives-default">1</property>
4539+     <property name="focus-on-click">0</property>
4540+-    <child internal-child="accessible">
4541+-      <object class="AtkObject" id="down_slider_button-atkobject">
4542+-        <property name="AtkObject::accessible-name" translatable="yes">Down Path</property>
4543+-      </object>
4544+-    </child>
4545+     <signal name="button-press-event" handler="gtk_path_bar_slider_button_press" swapped="no"/>
4546+     <signal name="button-release-event" handler="gtk_path_bar_slider_button_release" swapped="no"/>
4547+     <signal name="focus-out-event" handler="gtk_path_bar_slider_down_defocus" swapped="no"/>
4548+@@ -31,11 +26,6 @@
4549+     <property name="can-focus">1</property>
4550+     <property name="receives-default">1</property>
4551+     <property name="focus-on-click">0</property>
4552+-    <child internal-child="accessible">
4553+-      <object class="AtkObject" id="up_slider_button-atkobject">
4554+-        <property name="AtkObject::accessible-name" translatable="yes">Up Path</property>
4555+-      </object>
4556+-    </child>
4557+     <signal name="button-press-event" handler="gtk_path_bar_slider_button_press" swapped="no"/>
4558+     <signal name="button-release-event" handler="gtk_path_bar_slider_button_release" swapped="no"/>
4559+     <signal name="focus-out-event" handler="gtk_path_bar_slider_up_defocus" swapped="no"/>
4560+--- a/gtk/ui/gtkprintunixdialog.ui
4561++++ b/gtk/ui/gtkprintunixdialog.ui
4562+@@ -182,9 +182,6 @@
4563+                                 <attributes>
4564+                                   <attribute name="weight" value="bold"/>
4565+                                 </attributes>
4566+-                                <accessibility>
4567+-                                  <relation type="label-for" target="range_table"/>
4568+-                                </accessibility>
4569+                               </object>
4570+                               <packing>
4571+                                 <property name="fill">0</property>
4572+@@ -271,22 +268,12 @@
4573+  e.g. 1–3, 7, 11</property>
4574+                                     <property name="invisible-char">•</property>
4575+                                     <property name="activates-default">1</property>
4576+-                                    <child internal-child="accessible">
4577+-                                      <object class="AtkObject" id="page_range_entry-atkobject">
4578+-                                        <property name="AtkObject::accessible-name" translatable="yes">Pages</property>
4579+-                                        <property name="AtkObject::accessible-description" translatable="yes">Specify one or more page ranges,
4580+- e.g. 1–3, 7, 11</property>
4581+-                                      </object>
4582+-                                    </child>
4583+                                   </object>
4584+                                   <packing>
4585+                                     <property name="left-attach">1</property>
4586+                                     <property name="top-attach">3</property>
4587+                                   </packing>
4588+                                 </child>
4589+-                                <accessibility>
4590+-                                  <relation type="labelled-by" target="label_widget1"/>
4591+-                                </accessibility>
4592+                               </object>
4593+                               <packing>
4594+                                 <property name="fill">0</property>
4595+@@ -312,9 +299,6 @@
4596+                                 <attributes>
4597+                                   <attribute name="weight" value="bold"/>
4598+                                 </attributes>
4599+-                                <accessibility>
4600+-                                  <relation type="label-for" target="grid1"/>
4601+-                                </accessibility>
4602+                               </object>
4603+                               <packing>
4604+                                 <property name="fill">0</property>
4605+@@ -397,9 +381,6 @@
4606+                                     <property name="height">2</property>
4607+                                   </packing>
4608+                                 </child>
4609+-                                <accessibility>
4610+-                                  <relation type="labelled-by" target="label_widget2"/>
4611+-                                </accessibility>
4612+                               </object>
4613+                               <packing>
4614+                                 <property name="fill">0</property>
4615+@@ -453,9 +434,6 @@
4616+                                 <attributes>
4617+                                   <attribute name="weight" value="bold"/>
4618+                                 </attributes>
4619+-                                <accessibility>
4620+-                                  <relation type="label-for" target="grid2"/>
4621+-                                </accessibility>
4622+                               </object>
4623+                               <packing>
4624+                                 <property name="fill">0</property>
4625+@@ -622,9 +600,6 @@
4626+                                     <property name="top-attach">4</property>
4627+                                   </packing>
4628+                                 </child>
4629+-                                <accessibility>
4630+-                                  <relation type="labelled-by" target="label_widget3"/>
4631+-                                </accessibility>
4632+                               </object>
4633+                               <packing>
4634+                                 <property name="fill">0</property>
4635+@@ -650,9 +625,6 @@
4636+                                 <attributes>
4637+                                   <attribute name="weight" value="bold"/>
4638+                                 </attributes>
4639+-                                <accessibility>
4640+-                                  <relation type="label-for" target="grid3"/>
4641+-                                </accessibility>
4642+                               </object>
4643+                               <packing>
4644+                                 <property name="fill">0</property>
4645+@@ -802,9 +774,6 @@
4646+                                     <property name="top-attach">4</property>
4647+                                   </packing>
4648+                                 </child>
4649+-                                <accessibility>
4650+-                                  <relation type="labelled-by" target="label_widget4"/>
4651+-                                </accessibility>
4652+                               </object>
4653+                               <packing>
4654+                                 <property name="fill">0</property>
4655+@@ -877,9 +846,6 @@
4656+                             <attributes>
4657+                               <attribute name="weight" value="bold"/>
4658+                             </attributes>
4659+-                            <accessibility>
4660+-                              <relation type="label-for" target="grid5"/>
4661+-                            </accessibility>
4662+                           </object>
4663+                           <packing>
4664+                             <property name="fill">0</property>
4665+@@ -939,9 +905,6 @@
4666+                                 <property name="top-attach">1</property>
4667+                               </packing>
4668+                             </child>
4669+-                            <accessibility>
4670+-                              <relation type="labelled-by" target="label_widget5"/>
4671+-                            </accessibility>
4672+                           </object>
4673+                           <packing>
4674+                             <property name="fill">0</property>
4675+@@ -968,9 +931,6 @@
4676+                             <attributes>
4677+                               <attribute name="weight" value="bold"/>
4678+                             </attributes>
4679+-                            <accessibility>
4680+-                              <relation type="label-for" target="grid6"/>
4681+-                            </accessibility>
4682+                           </object>
4683+                           <packing>
4684+                             <property name="fill">0</property>
4685+@@ -1031,13 +991,6 @@
4686+  e.g. 15∶30, 2∶35 pm, 14∶15∶20, 11∶46∶30 am, 4 pm</property>
4687+                                 <property name="invisible-char">•</property>
4688+                                 <property name="invisible-char-set">1</property>
4689+-                                <child internal-child="accessible">
4690+-                                  <object class="AtkObject" id="print_at_entry-atkobject">
4691+-                                    <property name="AtkObject::accessible-name" translatable="yes">Time of print</property>
4692+-                                    <property name="AtkObject::accessible-description" translatable="yes">Specify the time of print,
4693+- e.g. 15∶30, 2∶35 pm, 14∶15∶20, 11∶46∶30 am, 4 pm</property>
4694+-                                  </object>
4695+-                                </child>
4696+                                 <signal name="changed" handler="update_print_at_option" object="GtkPrintUnixDialog" swapped="yes"/>
4697+                               </object>
4698+                               <packing>
4699+@@ -1064,9 +1017,6 @@
4700+                                 <property name="width">2</property>
4701+                               </packing>
4702+                             </child>
4703+-                            <accessibility>
4704+-                              <relation type="labelled-by" target="label_widget6"/>
4705+-                            </accessibility>
4706+                           </object>
4707+                           <packing>
4708+                             <property name="fill">0</property>
4709+@@ -1093,9 +1043,6 @@
4710+                             <attributes>
4711+                               <attribute name="weight" value="bold"/>
4712+                             </attributes>
4713+-                            <accessibility>
4714+-                              <relation type="label-for" target="grid7"/>
4715+-                            </accessibility>
4716+                           </object>
4717+                           <packing>
4718+                             <property name="fill">0</property>
4719+@@ -1155,9 +1102,6 @@
4720+                                 <property name="top-attach">1</property>
4721+                               </packing>
4722+                             </child>
4723+-                            <accessibility>
4724+-                              <relation type="labelled-by" target="label_widget7"/>
4725+-                            </accessibility>
4726+                           </object>
4727+                           <packing>
4728+                             <property name="fill">0</property>
4729+--- a/gtk/ui/gtkvolumebutton.ui
4730++++ b/gtk/ui/gtkvolumebutton.ui
4731+@@ -19,32 +19,14 @@
4732+ audio-volume-high
4733+ audio-volume-low
4734+ audio-volume-medium</property>
4735+-    <child internal-child="accessible">
4736+-      <object class="AtkObject" id="GtkVolumeButton-atkobject">
4737+-        <property name="AtkObject::accessible-name" translatable="yes">Volume</property>
4738+-        <property name="AtkObject::accessible-description" translatable="yes">Turns volume up or down</property>
4739+-      </object>
4740+-    </child>
4741+     <signal name="query-tooltip" handler="cb_query_tooltip" swapped="no"/>
4742+     <signal name="value-changed" handler="cb_value_changed" swapped="no"/>
4743+     <child internal-child="plus_button">
4744+       <object class="GtkButton" id="scalebutton-plus_button1">
4745+-        <child internal-child="accessible">
4746+-          <object class="AtkObject" id="scalebutton-plus_button1-atkobject">
4747+-            <property name="AtkObject::accessible-name" translatable="yes">Volume Up</property>
4748+-            <property name="AtkObject::accessible-description" translatable="yes">Increases the volume</property>
4749+           </object>
4750+         </child>
4751+-      </object>
4752+-    </child>
4753+     <child internal-child="minus_button">
4754+       <object class="GtkButton" id="scalebutton-minus_button1">
4755+-        <child internal-child="accessible">
4756+-          <object class="AtkObject" id="scalebutton-minus_button1-atkobject">
4757+-            <property name="AtkObject::accessible-name" translatable="yes">Volume Down</property>
4758+-            <property name="AtkObject::accessible-description" translatable="yes">Decreases the volume</property>
4759+-          </object>
4760+-        </child>
4761+       </object>
4762+     </child>
4763+   </template>
4764+--- a/meson.build
4765++++ b/meson.build
4766+@@ -25,8 +25,6 @@
4767+ 
4768+ glib_req           = '>= @0@.@1@.@2@'.format(glib_major_req, glib_minor_req, glib_micro_req)
4769+ pango_req          = '>= 1.41.0'
4770+-atk_req            = '>= 2.35.1'
4771+-at_spi2_atk_req    = '>= 2.15.1'
4772+ cairo_req          = '>= 1.14.0'
4773+ gdk_pixbuf_req     = '>= 2.30.0'
4774+ introspection_req  = '>= 1.39.0'
4775+@@ -289,7 +287,7 @@
4776+   test_cflags = [
4777+     '-fno-strict-aliasing',
4778+     '-Wpointer-arith',
4779+-    '-Wimplicit-function-declaration',
4780++    '-Werror=implicit-function-declaration',
4781+     '-Wformat=2',
4782+     '-Wformat-security',
4783+     '-Wnested-externs',
4784+@@ -354,7 +352,6 @@
4785+ confinc = include_directories('.')
4786+ gdkinc = include_directories('gdk')
4787+ gtkinc = include_directories('gtk')
4788+-libgailutilinc = include_directories('libgail-util')
4789+ testinc = include_directories('tests')
4790+ 
4791+ # Dependencies
4792+@@ -449,8 +446,6 @@
4793+                             fallback : ['gdk-pixbuf', 'gdkpixbuf_dep'])
4794+ epoxy_dep      = dependency('epoxy', version: epoxy_req,
4795+                             fallback: ['libepoxy', 'libepoxy_dep'])
4796+-atk_dep        = dependency('atk', version: atk_req,
4797+-                            fallback : ['atk', 'libatk_dep'])
4798+ 
4799+ # Update once Meson can have deps declared in a declarative manner or can
4800+ # find deps properly with CMake again
4801+@@ -459,7 +454,6 @@
4802+ iso_codes_dep  = dependency('iso-codes', required: false)
4803+ 
4804+ fontconfig_dep = [] # only used in x11 backend
4805+-atkbridge_dep  = [] # only used in x11 backend
4806+ 
4807+ if os_win32
4808+   platform_gio_dep = giowin32_dep
4809+@@ -548,8 +542,6 @@
4810+ cdata.set('HAVE_HARFBUZZ', harfbuzz_dep.found() ? 1 : false)
4811+ cdata.set('HAVE_PANGOFT', pangoft_dep.found() ? 1 : false)
4812+ 
4813+-atk_pkgs = ['atk']
4814+-
4815+ wayland_pkgs = []
4816+ if wayland_enabled
4817+   wlclientdep    = dependency('wayland-client', version:  wayland_req)
4818+@@ -579,7 +571,6 @@
4819+   xfixes_dep     = dependency('xfixes', required: false)
4820+   xcomposite_dep = dependency('xcomposite', required: false)
4821+   fontconfig_dep = dependency('fontconfig', fallback: ['fontconfig', 'fontconfig_dep'])
4822+-  atkbridge_dep  = dependency('atk-bridge-2.0', version: at_spi2_atk_req)
4823+ 
4824+   backend_immodules += ['xim']
4825+ 
4826+@@ -598,8 +589,6 @@
4827+     x11_pkgs += ['xdamage']
4828+   endif
4829+ 
4830+-  atk_pkgs += ['atk-bridge-2.0']
4831+-
4832+   cdata.set('HAVE_XDAMAGE', xdamage_dep.found() ? 1 : false)
4833+   cdata.set('HAVE_XCURSOR', xcursor_dep.found() ? 1 : false)
4834+   cdata.set('HAVE_XCOMPOSITE', xcomposite_dep.found() ? 1 : false)
4835+@@ -866,7 +855,6 @@
4836+ subdir('gdk')
4837+ subdir('gtk')
4838+ subdir('modules')
4839+-subdir('libgail-util')
4840+ if get_option('demos')
4841+   subdir('demos')
4842+ endif
4843+@@ -928,7 +916,6 @@
4844+                      ['epoxy', epoxy_req] + cloudproviders_packages))
4845+ 
4846+ gtk_packages = ' '.join([
4847+-    atk_dep.name(), atk_req,
4848+     cairo_packages,
4849+     pixbuf_dep.name(), gdk_pixbuf_req,
4850+     'gio-2.0', glib_req,
4851+@@ -938,7 +925,7 @@
4852+ # Requires.private
4853+ pc_gdk_extra_libs += cairo_libs
4854+ 
4855+-gtk_private_packages = atk_pkgs + wayland_pkgs + ['epoxy', epoxy_req]
4856++gtk_private_packages = wayland_pkgs + ['epoxy', epoxy_req]
4857+ if wayland_enabled or x11_enabled
4858+   gtk_private_packages += ['pangoft2']
4859+ endif
+82, -0
 1@@ -0,0 +1,82 @@
 2+--- a/gtk/a11y/gtkplugaccessible.h
 3++++ b/gtk/a11y/gtkplugaccessible.h
 4+@@ -24,48 +24,4 @@
 5+ 
 6+ #include <gtk/a11y/gtkwindowaccessible.h>
 7+ 
 8+-#if ATK_CHECK_VERSION(2,35,1)
 9+-
10+-#define GTK_HAVE_ATK_PLUG_SET_CHILD
11+-
12+-G_BEGIN_DECLS
13+-
14+-#define GTK_TYPE_PLUG_ACCESSIBLE                         (gtk_plug_accessible_get_type ())
15+-#define GTK_PLUG_ACCESSIBLE(obj)                         (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_PLUG_ACCESSIBLE, GtkPlugAccessible))
16+-#define GTK_PLUG_ACCESSIBLE_CLASS(klass)                 (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_PLUG_ACCESSIBLE, GtkPlugAccessibleClass))
17+-#define GTK_IS_PLUG_ACCESSIBLE(obj)                      (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_PLUG_ACCESSIBLE))
18+-#define GTK_IS_PLUG_ACCESSIBLE_CLASS(klass)              (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_PLUG_ACCESSIBLE))
19+-#define GTK_PLUG_ACCESSIBLE_GET_CLASS(obj)               (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_PLUG_ACCESSIBLE, GtkPlugAccessibleClass))
20+-
21+-typedef struct _GtkPlugAccessible        GtkPlugAccessible;
22+-typedef struct _GtkPlugAccessibleClass   GtkPlugAccessibleClass;
23+-typedef struct _GtkPlugAccessiblePrivate GtkPlugAccessiblePrivate;
24+-
25+-/**
26+- * GtkPlugAccessible:
27+- *
28+- * Since: 3.24.30
29+- */
30+-struct _GtkPlugAccessible
31+-{
32+-  GtkWindowAccessible parent;
33+-
34+-  GtkPlugAccessiblePrivate *priv;
35+-};
36+-
37+-struct _GtkPlugAccessibleClass
38+-{
39+-  GtkWindowAccessibleClass parent_class;
40+-};
41+-
42+-GDK_AVAILABLE_IN_ALL
43+-GType gtk_plug_accessible_get_type (void);
44+-
45+-GDK_AVAILABLE_IN_ALL
46+-gchar *gtk_plug_accessible_get_id (GtkPlugAccessible *plug);
47+-
48+-G_END_DECLS
49+-
50+-#endif /* ATK_CHECK_VERSION(2,35,1) */
51+-
52+ #endif /* __GTK_PLUG_ACCESSIBLE_H__ */
53+--- a/gtk/gtkplug.c
54++++ b/gtk/gtkplug.c
55+@@ -178,8 +178,6 @@ gtk_plug_class_init (GtkPlugClass *class)
56+   widget_class->unmap = gtk_plug_unmap;
57+   widget_class->focus = gtk_plug_focus;
58+ 
59+-  gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_PANEL);
60+-
61+   container_class->check_resize = gtk_plug_check_resize;
62+ 
63+   window_class->set_focus = gtk_plug_set_focus;
64+diff --git a/gtk/gtksocket.c b/gtk/gtksocket.c
65+index ffdaf8bee4..18b3d5563d 100644
66+--- a/gtk/gtksocket.c
67++++ b/gtk/gtksocket.c
68+@@ -271,7 +271,6 @@ gtk_socket_class_init (GtkSocketClass *class)
69+ 		  G_TYPE_BOOLEAN, 0);
70+ 
71+ 
72+-  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_SOCKET_ACCESSIBLE);
73+ }
74+ 
75+ static void
76+@@ -1432,7 +1431,6 @@ _gtk_socket_accessible_embed (GtkWidget *socket, GdkWindow *window)
77+       return;
78+     }
79+ 
80+-  gtk_socket_accessible_embed (GTK_SOCKET_ACCESSIBLE (gtk_widget_get_accessible (socket)), (gchar*) data);
81+   XFree (data);
82+ 
83+   return;
+3, -0
1@@ -0,0 +1,3 @@
2+#!/bin/sh -e
3+
4+glib-compile-schemas /usr/share/glib-2.0/schemas/
+5, -0
1@@ -0,0 +1,5 @@
2+https://download.gnome.org/sources/gtk+/3.24/gtk+-3.24.41.tar.xz
3+patches/01-no-fribidi.patch
4+patches/02-fix-firefox.patch
5+patches/03-no-accessibility.patch
6+patches/04-no-atk-extra.patch
+1, -0
1@@ -0,0 +1 @@
2+3.24.41 1
+19, -0
 1@@ -0,0 +1,19 @@
 2+#!/bin/sh -e
 3+
 4+# Change the order for checking installed compilers as
 5+# the ccache clang symlink might exist, but clang might not be installed.
 6+sed 's/clang gcc cc/cc clang gcc/g' icu4c/source/configure > _
 7+mv -f _ icu4c/source/configure
 8+sed 's/clang++ g++ c++/c++ clang++ g++/g' icu4c/source/configure > _
 9+mv -f _ icu4c/source/configure
10+
11+# license installation seems to give us a symolic link loop, which breaks the install
12+sed '/LICENSE/d' icu4c/source/Makefile.in > _
13+mv -f _ icu4c/source/Makefile.in
14+
15+sh icu4c/source/configure \
16+    --prefix=/ \
17+    --sbindir=/bin
18+
19+make
20+make DESTDIR="$1" install
+1, -0
1@@ -0,0 +1 @@
2+927feda0b91cfd3600a46b58a4a99492dbc38ed47ceea58d7c1ba9bdfcc3f0222f
+1, -0
1@@ -0,0 +1 @@
2+https://github.com/unicode-org/icu/archive/refs/tags/release-74-2.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+74.2 1 
+1, -1
1@@ -1 +1 @@
2-0664010014af50e8a7077148cf58c1fa57d5c3137bc899977d307396757304cef7
3+a520a54a086dd165fd608d4f30eb3c91dfb3a9c9bd328f4028fc30c514903de103
+1, -1
1@@ -2,7 +2,7 @@
2 # both formats by uncommenting giflib and tiff.
3 # giflib
4 # tiff
5-freetype
6+freetype-harfbuzz
7 libXext
8 libjpeg-turbo
9 libpng
+1, -1
1@@ -1 +1 @@
2-https://fossies.org/linux/misc/imlib2-1.12.1.tar.gz
3+https://fossies.org/linux/misc/imlib2-1.12.2.tar.xz
+1, -1
1@@ -1 +1 @@
2-1.12.1 1
3+1.12.2 1
+1, -2
 1@@ -10,8 +10,7 @@ TMPDIR="$1/tmp"
 2     --mandir=/share/man \
 3     --localstatedir=/var \
 4     --without-xmlto \
 5-    --disable-specs \
 6-    --disable-shared
 7+    --disable-specs
 8 
 9 make
10 make install
+36, -0
 1@@ -0,0 +1,36 @@
 2+#!/bin/sh -e
 3+
 4+export DESTDIR="$1"
 5+
 6+TMPDIR="$1/tmp"
 7+
 8+./configure \
 9+    --prefix=/ \
10+    --sysconfdir=/etc \
11+    --mandir=//share/man \
12+    --localstatedir=/var \
13+    --without-xmlto \
14+    --disable-specs \
15+    --disable-shared \
16+    --enable-static
17+
18+make
19+make install
20+
21+# Some X11 packages install to //share.
22+! [ -d "$1//share/pkgconfig" ] || {
23+    mkdir -p "$1//lib"
24+    mv -f "$1//share/pkgconfig" "$1//lib"
25+}
26+
27+# We need to keep this around.
28+! [ -d "$1//share/aclocal" ] || {
29+    mkdir -p "$TMPDIR"
30+    mv -f "$1//share/aclocal" "$TMPDIR"
31+}
32+
33+# Restore kept directories.
34+! [ -d "$TMPDIR" ] || {
35+    mv -f "$TMPDIR/"* "$1//share"
36+    rm -rf "$TMPDIR"
37+}
+1, -0
1@@ -0,0 +1 @@
2+78c2f6093f3d4b18cd716b896b91d496cf7d41b1d48365e48a09e9abdce50384fc
+3, -0
1@@ -0,0 +1,3 @@
2+libXfixes
3+pkgconf   make
4+xorgproto make
+1, -0
1@@ -0,0 +1 @@
2+https://x.org/releases/individual/lib/PACKAGE-VERSION.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+https://x.org/releases/individual/lib/libXcomposite-0.4.6.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+0.4.6 1
+36, -0
 1@@ -0,0 +1,36 @@
 2+#!/bin/sh -e
 3+
 4+export DESTDIR="$1"
 5+
 6+TMPDIR="$1/tmp"
 7+
 8+./configure \
 9+    --prefix=/ \
10+    --sysconfdir=/etc \
11+    --mandir=/share/man \
12+    --localstatedir=/var \
13+    --without-xmlto \
14+    --disable-specs \
15+    --disable-shared \
16+    --enable-static
17+
18+make
19+make install
20+
21+# Some X11 packages install to /share.
22+! [ -d "$1/share/pkgconfig" ] || {
23+    mkdir -p "$1/lib"
24+    mv -f "$1/share/pkgconfig" "$1/lib"
25+}
26+
27+# We need to keep this around.
28+! [ -d "$1/share/aclocal" ] || {
29+    mkdir -p "$TMPDIR"
30+    mv -f "$1/share/aclocal" "$TMPDIR"
31+}
32+
33+# Restore kept directories.
34+! [ -d "$TMPDIR" ] || {
35+    mv -f "$TMPDIR/"* "$1/share"
36+    rm -rf "$TMPDIR"
37+}
+1, -0
1@@ -0,0 +1 @@
2+26a322123196adc8c5a09514d565b907b34cca67fe0824e09367efd65e75cf7d05
+4, -0
1@@ -0,0 +1,4 @@
2+libXfixes
3+libXrender
4+pkgconf   make
5+xorgproto make
+1, -0
1@@ -0,0 +1 @@
2+https://x.org/releases/individual/lib/PACKAGE-VERSION.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+https://x.org/releases/individual/lib/libXcursor-1.2.1.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+1.2.1 1
+1, -2
 1@@ -10,8 +10,7 @@ TMPDIR="$1/tmp"
 2     --mandir=/share/man \
 3     --localstatedir=/var \
 4     --without-xmlto \
 5-    --disable-specs \
 6-    --disable-shared
 7+    --disable-specs
 8 
 9 make
10 make install
+5, -3
 1@@ -5,12 +5,14 @@ export DESTDIR="$1"
 2 TMPDIR="$1/tmp"
 3 
 4 ./configure \
 5-    --prefix=/usr \
 6+    --prefix=/ \
 7     --sysconfdir=/etc \
 8-    --mandir=/usr/share/man \
 9+    --mandir=/share/man \
10     --localstatedir=/var \
11     --without-xmlto \
12-    --disable-specs
13+    --disable-specs \
14+    --disable-shared \
15+    --enable-static
16 
17 make
18 make install
+1, -1
1@@ -1,4 +1,4 @@
2-freetype
3+freetype-harfbuzz
4 libfontenc
5 pkgconf   make
6 xorgproto make
+36, -0
 1@@ -0,0 +1,36 @@
 2+#!/bin/sh -e
 3+
 4+export DESTDIR="$1"
 5+
 6+TMPDIR="$1/tmp"
 7+
 8+./configure \
 9+    --prefix=/ \
10+    --sysconfdir=/etc \
11+    --mandir=/share/man \
12+    --localstatedir=/var \
13+    --without-xmlto \
14+    --disable-specs \
15+    --disable-shared \
16+    --enable-static
17+
18+make
19+make install
20+
21+# Some X11 packages install to /share.
22+! [ -d "$1/share/pkgconfig" ] || {
23+    mkdir -p "$1/lib"
24+    mv -f "$1/share/pkgconfig" "$1/lib"
25+}
26+
27+# We need to keep this around.
28+! [ -d "$1/share/aclocal" ] || {
29+    mkdir -p "$TMPDIR"
30+    mv -f "$1/share/aclocal" "$TMPDIR"
31+}
32+
33+# Restore kept directories.
34+! [ -d "$TMPDIR" ] || {
35+    mv -f "$TMPDIR/"* "$1/share"
36+    rm -rf "$TMPDIR"
37+}
+1, -0
1@@ -0,0 +1 @@
2+bcff239c6139ed140d45ed4358d430a910152929f7ecf9557db7eec454e268066d
+5, -0
1@@ -0,0 +1,5 @@
2+fontconfig        make
3+freetype-harfubuzz  make
4+libXrender        make
5+pkgconf           make
6+xorgproto         make
+1, -0
1@@ -0,0 +1 @@
2+https://x.org/releases/individual/lib/PACKAGE-VERSION.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+https://x.org/releases/individual/lib/libXft-2.3.8.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+2.3.8 1
+36, -0
 1@@ -0,0 +1,36 @@
 2+#!/bin/sh -e
 3+
 4+export DESTDIR="$1"
 5+
 6+TMPDIR="$1/tmp"
 7+
 8+./configure \
 9+    --prefix=/ \
10+    --sysconfdir=/etc \
11+    --mandir=/share/man \
12+    --localstatedir=/var \
13+    --without-xmlto \
14+    --disable-specs \
15+    --disable-shared \
16+    --enable-static
17+
18+make
19+make install
20+
21+# Some X11 packages install to /share.
22+! [ -d "$1/share/pkgconfig" ] || {
23+    mkdir -p "$1/lib"
24+    mv -f "$1/share/pkgconfig" "$1/lib"
25+}
26+
27+# We need to keep this around.
28+! [ -d "$1/share/aclocal" ] || {
29+    mkdir -p "$TMPDIR"
30+    mv -f "$1/share/aclocal" "$TMPDIR"
31+}
32+
33+# Restore kept directories.
34+! [ -d "$TMPDIR" ] || {
35+    mv -f "$TMPDIR/"* "$1/share"
36+    rm -rf "$TMPDIR"
37+}
+1, -0
1@@ -0,0 +1 @@
2+4275827cb3012d07b89cc7eacf695c15850a6df065228eae33bc5cef5ceba15bf6
+3, -0
1@@ -0,0 +1,3 @@
2+libXext
3+pkgconf make
4+xorgproto
+1, -0
1@@ -0,0 +1 @@
2+https://x.org/releases/individual/lib/PACKAGE-VERSION.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+https://x.org/releases/individual/lib/libXinerama-1.1.5.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+1.1.5 1
+36, -0
 1@@ -0,0 +1,36 @@
 2+#!/bin/sh -e
 3+
 4+export DESTDIR="$1"
 5+
 6+TMPDIR="$1/tmp"
 7+
 8+./configure \
 9+    --prefix=/ \
10+    --sysconfdir=/etc \
11+    --mandir=/share/man \
12+    --localstatedir=/var \
13+    --without-xmlto \
14+    --disable-specs \
15+    --disable-shared \
16+    --enable-static
17+
18+make
19+make install
20+
21+# Some X11 packages install to /share.
22+! [ -d "$1/share/pkgconfig" ] || {
23+    mkdir -p "$1/lib"
24+    mv -f "$1/share/pkgconfig" "$1/lib"
25+}
26+
27+# We need to keep this around.
28+! [ -d "$1/share/aclocal" ] || {
29+    mkdir -p "$TMPDIR"
30+    mv -f "$1/share/aclocal" "$TMPDIR"
31+}
32+
33+# Restore kept directories.
34+! [ -d "$TMPDIR" ] || {
35+    mv -f "$TMPDIR/"* "$1/share"
36+    rm -rf "$TMPDIR"
37+}
+1, -0
1@@ -0,0 +1 @@
2+6611045d6721e4bb1041b8b0daf2b531a1a084f68af736ac6bc0ebb5d63ff780ea
+4, -0
1@@ -0,0 +1,4 @@
2+libXext
3+libXrender
4+pkgconf   make
5+xorgproto make
+1, -0
1@@ -0,0 +1 @@
2+https://x.org/releases/individual/lib/PACKAGE-VERSION.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+https://x.org/releases/individual/lib/libXrandr-1.5.4.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+1.5.4 1
+2, -2
 1@@ -2,7 +2,7 @@
 2 
 3 export DESTDIR="$1"
 4 
 5-muon setup \
 6+meson setup \
 7 	-Dprefix=/ \
 8 	-Dintel=disabled \
 9 	-Dnouveau=disabled \
10@@ -14,4 +14,4 @@ muon setup \
11 	build
12 
13 samu -C build
14-muon -C build install
15+samu -C build install
+1, -1
1@@ -1,4 +1,4 @@
2 libpciaccess
3 #linux-headers make
4-muon         make
5+meson         make
6 pkgconf       make
+42, -0
 1@@ -0,0 +1,42 @@
 2+libelf
 3+________________________________________________________________________________
 4+
 5+NOTE: The libelf implementation is one component of elfutils of which the
 6+      following information is about.
 7+
 8+elfutils is a collection of utilities and libraries to read, create and modify
 9+ELF binary files, find and handle DWARF debug data, symbols, thread state and
10+stacktraces for processes and core files on GNU/Linux. [0]
11+
12+Upstream: https://sourceware.org/elfutils/
13+
14+
15+[000] Index
16+________________________________________________________________________________
17+
18+* Installation ........................................................... [001]
19+* Usage .................................................................. [002]
20+* References ............................................................. [003]
21+
22+
23+[001] Installation
24+________________________________________________________________________________
25+
26++------------------------------------------------------------------------------+
27+|                                                                              |
28+|  $ kiss b libelf                                                             |
29+|                                                                              |
30++------------------------------------------------------------------------------+
31+
32+
33+[002] Usage
34+________________________________________________________________________________
35+
36+Refer to the manual pages for more information.
37+
38+
39+[003] References
40+________________________________________________________________________________
41+
42+[0] https://sourceware.org/elfutils/
43+
+29, -0
 1@@ -0,0 +1,29 @@
 2+#!/bin/sh -e
 3+
 4+patch -p1 < musl.patch
 5+
 6+# Build sometimes forces -Werror.
 7+export CFLAGS="$CFLAGS -Wno-error"
 8+
 9+sh ./configure \
10+    --prefix=/ \
11+    --disable-symbol-versioning \
12+    --disable-debuginfod \
13+    --disable-libdebuginfod \
14+    --disable-nls \
15+    ac_cv_c99=yes # Override check for Clang.
16+
17+# Utility functions that need argp and fts, not strictly necessary
18+# for the library to function
19+:>libdwfl/argp-std.c
20+:>libdwfl/linux-kernel-modules.c
21+
22+# Useless stuff
23+printf '%s\n' "all:" "install:" > src/Makefile
24+
25+# linux-lts will error out on unknown type name for Relr
26+sed '/Relr/d' libelf/gelf.h > _
27+mv -f _ libelf/gelf.h
28+
29+make
30+make DESTDIR="$1" install
+2, -0
1@@ -0,0 +1,2 @@
2+f3449fb0ddb3c114f4e24689ab505542f0bad9ee84f92ff8beced7e1ccbf57c6e1
3+ca809d922b60ed548f7ce36bba97d6b0620d602a9bf31164022e1d805cfc83fb03
+2, -0
1@@ -0,0 +1,2 @@
2+pkgconf make
3+zlib
+56, -0
 1@@ -0,0 +1,56 @@
 2+/var/db/kiss/installed/libelf/version
 3+/var/db/kiss/installed/libelf/sources
 4+/var/db/kiss/installed/libelf/patches/musl.patch
 5+/var/db/kiss/installed/libelf/patches/
 6+/var/db/kiss/installed/libelf/manifest
 7+/var/db/kiss/installed/libelf/depends
 8+/var/db/kiss/installed/libelf/checksums
 9+/var/db/kiss/installed/libelf/build
10+/var/db/kiss/installed/libelf/README
11+/var/db/kiss/installed/libelf/
12+/var/db/kiss/installed/
13+/var/db/kiss/
14+/var/db/
15+/var/
16+/usr/share/man/man3/elf_update.3
17+/usr/share/man/man3/elf_getdata.3
18+/usr/share/man/man3/elf_clone.3
19+/usr/share/man/man3/elf_begin.3
20+/usr/share/man/man3/
21+/usr/share/man/man1/eu-srcfiles.1
22+/usr/share/man/man1/eu-readelf.1
23+/usr/share/man/man1/eu-elfclassify.1
24+/usr/share/man/man1/
25+/usr/share/man/
26+/usr/share/
27+/usr/lib/pkgconfig/libelf.pc
28+/usr/lib/pkgconfig/libdw.pc
29+/usr/lib/pkgconfig/
30+/usr/lib/libelf.so.1
31+/usr/lib/libelf.so
32+/usr/lib/libelf.a
33+/usr/lib/libelf-0.190.so
34+/usr/lib/libdw.so.1
35+/usr/lib/libdw.so
36+/usr/lib/libdw.a
37+/usr/lib/libdw-0.190.so
38+/usr/lib/libasm.so.1
39+/usr/lib/libasm.so
40+/usr/lib/libasm.a
41+/usr/lib/libasm-0.190.so
42+/usr/lib/
43+/usr/include/nlist.h
44+/usr/include/libelf.h
45+/usr/include/gelf.h
46+/usr/include/elfutils/version.h
47+/usr/include/elfutils/libdwfl.h
48+/usr/include/elfutils/libdwelf.h
49+/usr/include/elfutils/libdw.h
50+/usr/include/elfutils/libasm.h
51+/usr/include/elfutils/known-dwarf.h
52+/usr/include/elfutils/elf-knowledge.h
53+/usr/include/elfutils/
54+/usr/include/dwarf.h
55+/usr/include/
56+/usr/bin/
57+/usr/
+59, -0
 1@@ -0,0 +1,59 @@
 2+diff --git a/configure b/configure
 3+index 562d9f4..8c45cc1 100755
 4+--- a/configure
 5++++ b/configure
 6+@@ -8880,7 +8880,7 @@ LIBS="$saved_LIBS"
 7+ case "$ac_cv_search_argp_parse" in
 8+         no) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 9+ printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
10+-as_fn_error $? "failed to find argp_parse
11++: $? "failed to find argp_parse
12+ See \`config.log' for more details" "$LINENO" 5; } ;;
13+         -l*) argp_LDADD="$ac_cv_search_argp_parse" ;;
14+         *) argp_LDADD= ;;
15+@@ -8951,7 +8951,7 @@ LIBS="$saved_LIBS"
16+ case "$ac_cv_search_fts_close" in
17+         no) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
18+ printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
19+-as_fn_error $? "failed to find fts_close
20++: $? "failed to find fts_close
21+ See \`config.log' for more details" "$LINENO" 5; } ;;
22+         -l*) fts_LIBS="$ac_cv_search_fts_close" ;;
23+         *) fts_LIBS= ;;
24+@@ -9022,7 +9022,7 @@ LIBS="$saved_LIBS"
25+ case "$ac_cv_search__obstack_free" in
26+         no) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
27+ printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
28+-as_fn_error $? "failed to find _obstack_free
29++: $? "failed to find _obstack_free
30+ See \`config.log' for more details" "$LINENO" 5; } ;;
31+         -l*) obstack_LIBS="$ac_cv_search__obstack_free" ;;
32+         *) obstack_LIBS= ;;
33+diff --git a/lib/Makefile.in b/lib/Makefile.in
34+index e84bc45..1f3be35 100644
35+--- a/lib/Makefile.in
36++++ b/lib/Makefile.in
37+@@ -117,8 +117,8 @@ libeu_a_AR = $(AR) $(ARFLAGS)
38+ libeu_a_LIBADD =
39+ am_libeu_a_OBJECTS = xasprintf.$(OBJEXT) xstrdup.$(OBJEXT) \
40+ 	xstrndup.$(OBJEXT) xmalloc.$(OBJEXT) next_prime.$(OBJEXT) \
41+-	crc32.$(OBJEXT) crc32_file.$(OBJEXT) color.$(OBJEXT) \
42+-	error.$(OBJEXT) printversion.$(OBJEXT)
43++	crc32.$(OBJEXT) crc32_file.$(OBJEXT) \
44++	error.$(OBJEXT)
45+ libeu_a_OBJECTS = $(am_libeu_a_OBJECTS)
46+ AM_V_P = $(am__v_P_@AM_V@)
47+ am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
48+@@ -409,10 +409,10 @@ textrel_check = if $(READELF) -d $@ | grep -F -q TEXTREL; then $(textrel_found);
49+ noinst_LIBRARIES = libeu.a
50+ libeu_a_SOURCES = xasprintf.c xstrdup.c xstrndup.c xmalloc.c next_prime.c \
51+ 		  crc32.c crc32_file.c \
52+-		  color.c error.c printversion.c
53++		  color.c
54+ 
55+ noinst_HEADERS = fixedsizehash.h libeu.h system.h dynamicsizehash.h list.h \
56+-		 eu-config.h color.h printversion.h bpf.h \
57++		 eu-config.h bpf.h \
58+ 		 atomics.h stdatomic-fbsd.h dynamicsizehash_concurrent.h
59+ 
60+ EXTRA_DIST = dynamicsizehash.c dynamicsizehash_concurrent.c
+2, -0
1@@ -0,0 +1,2 @@
2+https://sourceware.org/elfutils/ftp/0.190/elfutils-0.190.tar.bz2
3+patches/musl.patch
+1, -0
1@@ -0,0 +1 @@
2+0.190 2
+17, -0
 1@@ -0,0 +1,17 @@
 2+#!/bin/sh -e
 3+
 4+export DESTDIR="$1"
 5+
 6+# Disable building tests.
 7+: > test/meson.build
 8+
 9+meson setup \
10+    -Dprefix=/ \
11+    -Dsysconfdir=/etc \
12+    -Dmandir=/usr/share/man \
13+    -Dpkg_config_path=/lib/pkgconfig \
14+    -Dx11=true \
15+    output
16+
17+samu -C output
18+samu -C output install
+1, -0
1@@ -0,0 +1 @@
2+df74575d2a4ca65bf98d15ed6357cb066b6369704137e53b5e1d35b6d582657e12
+3, -0
1@@ -0,0 +1,3 @@
2+libX11 make
3+mesa   make
4+meson  make
+1, -0
1@@ -0,0 +1 @@
2+https://github.com/anholt/libepoxy/archive/VERSION.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+https://github.com/anholt/libepoxy/archive/1.5.10.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+1.5.10 1
+0, -1
1@@ -3,7 +3,6 @@
2 ./configure \
3     --prefix=/ \
4     --disable-exec-static-tramp \
5-    --disable-shared \
6     --enable-static
7 
8 make
+15, -0
 1@@ -0,0 +1,15 @@
 2+#!/bin/sh -e
 3+
 4+# Missing includes...
 5+sed '/^#ifdef USE_JENT/a #include <fcntl.h>\n#include <limits.h>' \
 6+    random/rndjent.c > _
 7+mv -f _ random/rndjent.c
 8+
 9+./configure \
10+    --prefix=/ \
11+    --sysconfdir=/etc \
12+    --mandir=/share/man \
13+    --localstatedir=/var
14+
15+make
16+make DESTDIR="$1" install
+1, -0
1@@ -0,0 +1 @@
2+d87cb6843d1cbee907f15ab1d14e3fb5d6979ca5e7567d0898c43800507593176e
+1, -0
1@@ -0,0 +1 @@
2+libgpg-error
+1, -0
1@@ -0,0 +1 @@
2+https://www.gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-1.10.3.tar.bz2
+1, -0
1@@ -0,0 +1 @@
2+1.10.3 1
+10, -0
 1@@ -0,0 +1,10 @@
 2+#!/bin/sh -e
 3+
 4+./configure \
 5+    --prefix=/ \
 6+    --sysconfdir=/etc \
 7+    --mandir=/share/man \
 8+    --localstatedir=/var
 9+
10+make
11+make DESTDIR="$1" install
+1, -0
1@@ -0,0 +1 @@
2+192f7986cf23f753085f607ca7950707683a74cf7dabf867896128feeeb782ea19
+1, -0
1@@ -0,0 +1 @@
2+https://gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.47.tar.bz2
+1, -0
1@@ -0,0 +1 @@
2+1.47 1
+0, -55
 1@@ -1,55 +0,0 @@
 2-libjpeg-turbo
 3-________________________________________________________________________________
 4-
 5-libjpeg-turbo is a fork of libjpeg that uses SIMD instructions to accelerate
 6-baseline JPEG encoding and decoding. Many projects are now using libjpeg-turbo
 7-instead of libjpeg, including popular Linux distributions (Fedora, Debian,
 8-Mageia, openSUSE, ...), Mozilla, and Chrome. Apart from performance, some
 9-projects have chosen to use libjpeg-turbo because it allows them to retain
10-backward ABI compatibility with the older libjpeg v6b release. libjpeg v7, v8
11-and v9 broke ABI compatibility with prior releases. [0]
12-
13-Upstream: https://libjpeg-turbo.org/
14-
15-
16-[000] Index
17-________________________________________________________________________________
18-
19-* Installation ........................................................... [001]
20-* Usage .................................................................. [002]
21-* References ............................................................. [003]
22-
23-
24-[001] Installation
25-________________________________________________________________________________
26-
27-+------------------------------------------------------------------------------+
28-|                                                                              |
29-|  $ kiss b libjpeg-turbo                                                      |
30-|                                                                              |
31-+------------------------------------------------------------------------------+
32-
33-
34-[002] Usage
35-________________________________________________________________________________
36-
37-+--------------+---------------------------------------------------------------+
38-| Tool         | Purpose                                                       |
39-+--------------+---------------------------------------------------------------+
40-|              |                                                               |
41-| wrjpgcom     | Insert text comments into a JPEG file.                        |
42-| rdjpgcom     | Display text comments from a JPEG file.                       |
43-| jpegtran     | Lossless transformation of JPEG files.                        |
44-| djpeg        | Decompress a JPEG file to an image file.                      |
45-| cjpeg        | Compress a JPEG file to an image file.                        |
46-|              |                                                               |
47-+--------------+---------------------------------------------------------------+
48-
49-Refer to the manual pages and command help output for more information.
50-
51-
52-[003] References
53-________________________________________________________________________________
54-
55-[0] https://en.wikipedia.org/wiki/Libjpeg#libjpeg-turbo
56-
+3, -0
 1@@ -7,6 +7,9 @@ patch -p1 < no-docs.patch
 2 cmake -B build \
 3     -DCMAKE_INSTALL_PREFIX=/ \
 4     -DCMAKE_INSTALL_LIBDIR=/lib \
 5+    -DCMAKE_INSTALL_BINDIR=/bin \
 6+    -DCMAKE_INSTALL_INCLUDEDIR=/bin \
 7+    -DCMAKE_INSTALL_MANDIR=/share \
 8     -DCMAKE_SHARED_LIBS=False \
 9     -DCMAKE_STATIC_LIBS=True \
10     -DCMAKE_BUILD_TYPE=Release \
+10, -0
 1@@ -0,0 +1,10 @@
 2+#!/bin/sh -e
 3+
 4+./configure \
 5+    --prefix=/ \
 6+    --disable-examples \
 7+    --disable-python-bindings \
 8+    --enable-lib-only
 9+
10+make
11+make DESTDIR="$1" install
+1, -0
1@@ -0,0 +1 @@
2+10b0d4e14db85112588ee969bf3590c67cfcc97855b2372b8b78778b9a4eb22480
+1, -0
1@@ -0,0 +1 @@
2+python
+1, -0
1@@ -0,0 +1 @@
2+https://github.com/nghttp2/nghttp2/releases/download/vVERSION/nghttp2-VERSION.tar.xz
+1, -0
1@@ -0,0 +1 @@
2+https://github.com/nghttp2/nghttp2/releases/download/v1.59.0/nghttp2-1.59.0.tar.xz
+1, -0
1@@ -0,0 +1 @@
2+1.59.0 1
+2, -2
 1@@ -4,10 +4,10 @@ patch -p1 < lfs64.patch
 2 
 3 export DESTDIR="$1"
 4 
 5-muon setup \
 6+meson setup \
 7     -Dprefix=/ \
 8     -Ddefault_library=static \
 9     build
10 
11 samu -C build
12-muon -C build install
13+samu -C build install
+1, -2
1@@ -1,3 +1,2 @@
2-muon make
3-#samurai make
4+meson make
5 zlib
+7, -0
1@@ -0,0 +1,7 @@
2+#!/bin/sh -e
3+
4+./configure \
5+    --prefix=/
6+
7+make
8+make DESTDIR="$1" install
+1, -0
1@@ -0,0 +1 @@
2+75520a5e4ef205ad5fcb236075182c9e7aeb4f3122ebdb32854a14f49dc5267695
+2, -0
1@@ -0,0 +1,2 @@
2+icu
3+python make
+1, -0
1@@ -0,0 +1 @@
2+https://github.com/rockdaboot/libpsl/releases/download/0.21.5/libpsl-0.21.5.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+0.21.5 1
+35, -0
 1@@ -0,0 +1,35 @@
 2+#!/bin/sh -e
 3+
 4+export DESTDIR="$1"
 5+
 6+# Remove subprojects folder to avoid cloning them via git.
 7+rm -rf subprojects/
 8+
 9+# Disable nls.
10+sed "/subdir('po')/d" meson.build > _
11+mv -f _ meson.build
12+
13+# Enable gobject-introspection if it is installed.
14+pkg-config --exists gobject-introspection-1.0 && gi=en
15+
16+# Needed to make the build succeed.
17+export CFLAGS="$CFLAGS -w"
18+export CXXFLAGS="$CXXFLAGS -w"
19+
20+meson setup \
21+    -Dprefix=/ \
22+    -Dsysconfdir=/etc \
23+    -Dlocalstatedir=/var \
24+    -Dtests=false \
25+    -Ddocs=disabled \
26+    -Dtls_check=false \
27+    -Dvapi=disabled \
28+    -Dgssapi=disabled \
29+    -Dbrotli=disabled \
30+    -Dsysprof=disabled \
31+    -Dpkcs11_tests=disabled \
32+    -Dintrospection="${gi:-dis}abled" \
33+    output
34+
35+samu -C output
36+samu -C output install
+1, -0
1@@ -0,0 +1 @@
2+eb3427e1db6dbf5a4a6ba8201659538c4217b825b1626491d0728b6ca694c3cb45
+8, -0
1@@ -0,0 +1,8 @@
2+glib
3+glib-networking
4+libnghttp2
5+libpsl
6+libxml2
7+meson make
8+pkgconf make
9+sqlite
+1, -0
1@@ -0,0 +1 @@
2+https://download.gnome.org/sources/libsoup/MAJOR.MINOR/libsoup-VERSION.tar.xz
+1, -0
1@@ -0,0 +1 @@
2+https://download.gnome.org/sources/libsoup/3.4/libsoup-3.4.4.tar.xz
+1, -0
1@@ -0,0 +1 @@
2+3.4.4 1
+11, -0
 1@@ -0,0 +1,11 @@
 2+#!/bin/sh -e
 3+
 4+./configure \
 5+    --prefix=/ \
 6+    --disable-tiff \
 7+    --enable-libwebpmux \
 8+    --enable-libwebpdemux \
 9+    --enable-libwebpdecoder
10+
11+make
12+make DESTDIR="$1" install
+1, -0
1@@ -0,0 +1 @@
2+da08f0f73f67b9fb52cf8285b909400aa5b32afc6f3cd4c718e57cd31a16bce512
+2, -0
1@@ -0,0 +1,2 @@
2+libjpeg-turbo
3+libpng
+1, -0
1@@ -0,0 +1 @@
2+https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.3.2.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+1.3.2 1
+16, -0
 1@@ -0,0 +1,16 @@
 2+#!/bin/sh -e
 3+
 4+export DESTDIR="$1"
 5+
 6+meson setup \
 7+    -Dprefix=/ \
 8+    -Dlibexecdir=/usr/lib \
 9+    -Ddefault_library=static \
10+    -Denable-docs=false \
11+    -Denable-wayland=false \
12+    -Denable-xkbregistry=false \
13+    -Dpkg_config_path=/lib/pkgconfig \
14+    output
15+
16+samu -C output
17+samu -C output install
+1, -0
1@@ -0,0 +1 @@
2+ce9e2187d72a7d689110caa9bf84aee27bcc7f23317ea72df6c7620ebdc57ad900
+2, -0
1@@ -0,0 +1,2 @@
2+meson    make
3+pkgconf make
+1, -0
1@@ -0,0 +1 @@
2+https://xkbcommon.org/download/libxkbcommon-1.6.0.tar.xz
+1, -0
1@@ -0,0 +1 @@
2+1.6.0 1
+11, -0
 1@@ -0,0 +1,11 @@
 2+#!/bin/sh -e
 3+
 4+./configure \
 5+    --prefix=/ \
 6+    --with-threads \
 7+    --with-history \
 8+    --without-python \
 9+    --without-icu
10+
11+make
12+make DESTDIR="$1" install
+1, -0
1@@ -0,0 +1 @@
2+326c3a05dcfe647ef4e1def8aa7f8d7d96b0a2f2f9f2ddac2b982fc1e485a9264e
+1, -0
1@@ -0,0 +1 @@
2+zlib
+1, -0
1@@ -0,0 +1 @@
2+https://download.gnome.org/sources/libxml2/2.11/libxml2-2.11.5.tar.xz
+1, -0
1@@ -0,0 +1 @@
2+2.11.5 1
+11, -0
 1@@ -0,0 +1,11 @@
 2+#!/bin/sh -e
 3+
 4+./configure \
 5+    --prefix=/ \
 6+    --without-python \
 7+    --without-debugger \
 8+    --without-debug \
 9+    --without-crypto
10+
11+make
12+make DESTDIR="$1" install
+1, -0
1@@ -0,0 +1 @@
2+51a7dfbbbc90eb66d78659d66889f34cea7c1b31eb6246af916335e37e1e3787d9
+2, -0
1@@ -0,0 +1,2 @@
2+libxml2
3+pkgconf make
+1, -0
1@@ -0,0 +1 @@
2+https://fossies.org/linux/www/libxslt-1.1.38.tar.xz
+1, -0
1@@ -0,0 +1 @@
2+1.1.38 2
+7, -0
1@@ -0,0 +1,7 @@
2+#!/bin/sh -e
3+
4+./configure \
5+    --prefix=/
6+
7+make
8+make DESTDIR="$1" install
+1, -0
1@@ -0,0 +1 @@
2+64cd0f69eb55904fdf4a6f20d46d565ab2433ae494e76edbdf835a25b57c98d9c7
+1, -0
1@@ -0,0 +1 @@
2+https://github.com/yaml/libyaml/releases/download/0.2.5/yaml-0.2.5.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+0.2.5 1 
+36, -0
 1@@ -0,0 +1,36 @@
 2+#!/bin/sh -e
 3+
 4+export DESTDIR="$1"
 5+
 6+# Fix issues with musl and firefox.
 7+# https://bugs.freedesktop.org/show_bug.cgi?id=35268
 8+# https://github.com/mesa3d/mesa/commit/9f37c9903b87f86a533bfaffa72f0ecb285b02b2
 9+# https://gitlab.freedesktop.org/mesa/mesa/-/issues/966
10+sed "/pre_args += '-DUSE_ELF_TLS'/d" meson.build > _
11+mv -f _ meson.build
12+
13+# To prevent the need for users to fork the mesa package to add
14+# libglvnd support, the below code checks for its availability
15+# and enables it if present. ie: install glvnd, rebuild mesa.
16+! kiss list libglvnd >/dev/null 2>&1 || glvnd_enabled=true
17+
18+meson setup \
19+    -Dprefix=/ \
20+    -Dsysconfdir=/etc \
21+    -Dmandir=/share/man \
22+    -Dlocalstatedir=/var \
23+    -Dbuildtype=release \
24+    -Dglx-read-only-text=true \
25+    -Dplatforms=x11 \
26+    -Dglx=auto \
27+    -Dgallium-drivers=swrast \
28+    -Degl=enabled \
29+    -Dvalgrind=false \
30+    -Dzstd=disabled \
31+    -Dvulkan-drivers='' \
32+    -Dglvnd="${glvnd_enabled:-false}" \
33+    -Db_colorout=never \
34+    output
35+
36+samu -C output
37+samu -C output install
+1, -0
1@@ -0,0 +1 @@
2+04121cd0de429adfba0d63bafba28b9479acd942f30553e8d43fe9f0c9e54c0e0c
+17, -0
 1@@ -0,0 +1,17 @@
 2+expat
 3+libX11
 4+libXdamage
 5+libXext
 6+libXrandr
 7+libXrender
 8+libXxf86vm
 9+libdrm
10+#libelf
11+libxcb
12+libxshmfence
13+meson         make
14+pkgconf       make
15+python        make
16+python-mako   make
17+xorgproto
18+zlib
+1, -0
1@@ -0,0 +1 @@
2+https://archive.mesa3d.org/mesa-23.3.5.tar.xz
+1, -0
1@@ -0,0 +1 @@
2+23.3.5 1
+15, -0
 1@@ -0,0 +1,15 @@
 2+#!/bin/sh -e
 3+
 4+python packaging/create_zipapp.py \
 5+	--outfile meson \
 6+	--compress
 7+
 8+chmod 755 meson
 9+chmod 655 man/meson.1
10+
11+mkdir -p \
12+	"$1/bin" \
13+	"$1/share/man/man1"
14+
15+cp -f meson "$1/bin"
16+cp -f man/meson.1 "$1/share/man/man1"
+1, -0
1@@ -0,0 +1 @@
2+18c84ea9485a1d0b48a5c7d007fa849bfcefbd644717b7f9aae2cff4a044c6dcb8
+1, -0
1@@ -0,0 +1 @@
2+python
+1, -0
1@@ -0,0 +1 @@
2+https://github.com/mesonbuild/meson/archive/1.3.1.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+1.3.1 1
+1, -1
1@@ -21,4 +21,4 @@ muon setup \
2       build
3 
4 samu -C build
5-muon  -C build install
6+muon -C build install
+0, -1
1@@ -1,2 +1 @@
2 pkgconf make
3-#samurai make
+10, -0
 1@@ -0,0 +1,10 @@
 2+#!/bin/sh -e
 3+
 4+./configure \
 5+    --prefix=/ \
 6+    --enable-static \
 7+    --enable-mini-gmp \
 8+    --disable-documentation
 9+
10+make
11+make DESTDIR="$1" install
+1, -0
1@@ -0,0 +1 @@
2+e4bfbda32f4fdf5ed96c152efe3a3867193b690faa5378d02a2a6fd052ee3393e0
+1, -0
1@@ -0,0 +1 @@
2+http://ftp.gnu.org/gnu/nettle/nettle-3.9.1.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+3.9.1 1
+24, -0
 1@@ -0,0 +1,24 @@
 2+#!/bin/sh -e
 3+
 4+export DESTDIR="$1"
 5+
 6+for p in *.patch; do
 7+    patch -p1 < "$p"
 8+done
 9+
10+# Disable download of missing (optional) dependencies
11+# during the build. This cannot be turned off otherwise.
12+rm -rf subprojects
13+
14+: > tests/meson.build
15+: > examples/meson.build
16+: > docs/meson.build
17+
18+meson setup \
19+    -Dprefix=/ \
20+    -Dgtk_doc=false \
21+    -Dintrospection=disabled \
22+    output
23+
24+samu -C output
25+samu -C output install
+2, -0
1@@ -0,0 +1,2 @@
2+28a53dc462649e1b41b0f8c50315ecb8cb9afbfe010817d87fed9e09a6d8e4ce2d
3+afad7fce3afe98072131cf4b97ec0d00340ea316812df9ae78c1d785121583c063
+8, -0
1@@ -0,0 +1,8 @@
2+cairo
3+fontconfig
4+freetype-harfbuzz
5+glib
6+libXft
7+libXrender
8+meson   make
9+pkgconf make
+2, -0
1@@ -0,0 +1,2 @@
2+https://github.com/GNOME/pango/archive/VERSION.tar.gz
3+patches/no-fribidi.patch
+237, -0
  1@@ -0,0 +1,237 @@
  2+diff --git a/meson.build b/meson.build
  3+index 50ec14b..f45dd6a 100644
  4+--- a/meson.build
  5++++ b/meson.build
  6+@@ -200,7 +200,6 @@ endif
  7+ pango_deps = []
  8+ 
  9+ glib_req_version = '>= 2.62'
 10+-fribidi_req_version = '>= 1.0.6'
 11+ libthai_req_version = '>= 0.1.9'
 12+ harfbuzz_req_version = '>= 2.6.0'
 13+ fontconfig_req_version = '>= 2.13.0'
 14+@@ -217,10 +216,6 @@ gobject_dep = dependency('gobject-2.0', version: glib_req_version)
 15+ gio_dep = dependency('gio-2.0', version: glib_req_version)
 16+ pango_deps += [glib_dep, gobject_dep, gio_dep]
 17+ 
 18+-fribidi_dep = dependency('fribidi', version: fribidi_req_version,
 19+-                         default_options: ['docs=false'])
 20+-pango_deps += fribidi_dep
 21+-
 22+ thai_dep = dependency('libthai', version: libthai_req_version, required: get_option('libthai'))
 23+ if thai_dep.found()
 24+   pango_conf.set('HAVE_LIBTHAI', 1)
 25+diff --git a/pango/pango-bidi-type.c b/pango/pango-bidi-type.c
 26+index 4277dc1..73d3476 100644
 27+--- a/pango/pango-bidi-type.c
 28++++ b/pango/pango-bidi-type.c
 29+@@ -23,14 +23,21 @@
 30+ 
 31+ #include <string.h>
 32+ 
 33+-#include <fribidi.h>
 34+-
 35+ #undef PANGO_DISABLE_DEPRECATED
 36+ 
 37+ #include "pango-bidi-type.h"
 38+ #include "pango-utils.h"
 39+ #include "pango-utils-private.h"
 40+ 
 41++typedef uint32_t FriBidiChar;
 42++typedef uint32_t FriBidiCharType;
 43++typedef uint32_t FriBidiBracketType;
 44++typedef int FriBidiStrIndex;
 45++typedef int FriBidiParType;
 46++typedef signed char FriBidiLevel;
 47++
 48++#define FRIBIDI_PAR_LTR (0x00000010L | 0x00000100L)
 49++
 50+ /**
 51+  * pango_bidi_type_for_unichar:
 52+  * @ch: a Unicode character
 53+@@ -49,41 +56,7 @@
 54+ PangoBidiType
 55+ pango_bidi_type_for_unichar (gunichar ch)
 56+ {
 57+-  FriBidiCharType fribidi_ch_type;
 58+-
 59+-  G_STATIC_ASSERT (sizeof (FriBidiChar) == sizeof (gunichar));
 60+-
 61+-  fribidi_ch_type = fribidi_get_bidi_type (ch);
 62+-
 63+-  switch (fribidi_ch_type)
 64+-    {
 65+-    case FRIBIDI_TYPE_LTR:  return PANGO_BIDI_TYPE_L;
 66+-    case FRIBIDI_TYPE_LRE:  return PANGO_BIDI_TYPE_LRE;
 67+-    case FRIBIDI_TYPE_LRO:  return PANGO_BIDI_TYPE_LRO;
 68+-    case FRIBIDI_TYPE_RTL:  return PANGO_BIDI_TYPE_R;
 69+-    case FRIBIDI_TYPE_AL:   return PANGO_BIDI_TYPE_AL;
 70+-    case FRIBIDI_TYPE_RLE:  return PANGO_BIDI_TYPE_RLE;
 71+-    case FRIBIDI_TYPE_RLO:  return PANGO_BIDI_TYPE_RLO;
 72+-    case FRIBIDI_TYPE_PDF:  return PANGO_BIDI_TYPE_PDF;
 73+-    case FRIBIDI_TYPE_EN:   return PANGO_BIDI_TYPE_EN;
 74+-    case FRIBIDI_TYPE_ES:   return PANGO_BIDI_TYPE_ES;
 75+-    case FRIBIDI_TYPE_ET:   return PANGO_BIDI_TYPE_ET;
 76+-    case FRIBIDI_TYPE_AN:   return PANGO_BIDI_TYPE_AN;
 77+-    case FRIBIDI_TYPE_CS:   return PANGO_BIDI_TYPE_CS;
 78+-    case FRIBIDI_TYPE_NSM:  return PANGO_BIDI_TYPE_NSM;
 79+-    case FRIBIDI_TYPE_BN:   return PANGO_BIDI_TYPE_BN;
 80+-    case FRIBIDI_TYPE_BS:   return PANGO_BIDI_TYPE_B;
 81+-    case FRIBIDI_TYPE_SS:   return PANGO_BIDI_TYPE_S;
 82+-    case FRIBIDI_TYPE_WS:   return PANGO_BIDI_TYPE_WS;
 83+-    case FRIBIDI_TYPE_ON:   return PANGO_BIDI_TYPE_ON;
 84+-    case FRIBIDI_TYPE_LRI:  return PANGO_BIDI_TYPE_LRI;
 85+-    case FRIBIDI_TYPE_RLI:  return PANGO_BIDI_TYPE_RLI;
 86+-    case FRIBIDI_TYPE_FSI:  return PANGO_BIDI_TYPE_FSI;
 87+-    case FRIBIDI_TYPE_PDI:  return PANGO_BIDI_TYPE_PDI;
 88+-    case _FRIBIDI_TYPE_SENTINEL:
 89+-    default:
 90+-      return PANGO_BIDI_TYPE_ON;
 91+-    }
 92++  return PANGO_BIDI_TYPE_L;
 93+ }
 94+ 
 95+ /* Some bidi-related functions */
 96+@@ -136,38 +109,14 @@ pango_log2vis_fill_embedding_levels (const gchar    *text,
 97+ {
 98+   glong i;
 99+   const gchar *p;
100+-  FriBidiParType fribidi_base_dir;
101+   FriBidiCharType *bidi_types;
102+   FriBidiCharType bidi_types_[64];
103+   FriBidiBracketType *bracket_types;
104+   FriBidiBracketType bracket_types_[64];
105+-  FriBidiLevel max_level;
106+-  FriBidiCharType ored_types = 0;
107+-  FriBidiCharType anded_strongs = FRIBIDI_TYPE_RLE;
108+ 
109+   G_STATIC_ASSERT (sizeof (FriBidiLevel) == sizeof (guint8));
110+   G_STATIC_ASSERT (sizeof (FriBidiChar) == sizeof (gunichar));
111+ 
112+-  switch (*pbase_dir)
113+-    {
114+-    case PANGO_DIRECTION_LTR:
115+-    case PANGO_DIRECTION_TTB_RTL:
116+-      fribidi_base_dir = FRIBIDI_PAR_LTR;
117+-      break;
118+-    case PANGO_DIRECTION_RTL:
119+-    case PANGO_DIRECTION_TTB_LTR:
120+-      fribidi_base_dir = FRIBIDI_PAR_RTL;
121+-      break;
122+-    case PANGO_DIRECTION_WEAK_RTL:
123+-      fribidi_base_dir = FRIBIDI_PAR_WRTL;
124+-      break;
125+-    case PANGO_DIRECTION_WEAK_LTR:
126+-    case PANGO_DIRECTION_NEUTRAL:
127+-    default:
128+-      fribidi_base_dir = FRIBIDI_PAR_WLTR;
129+-      break;
130+-    }
131+-
132+   if (n_chars < 64)
133+     {
134+       bidi_types = bidi_types_;
135+@@ -181,20 +130,11 @@ pango_log2vis_fill_embedding_levels (const gchar    *text,
136+ 
137+   for (i = 0, p = text; p < text + length; p = g_utf8_next_char(p), i++)
138+     {
139+-      gunichar ch = g_utf8_get_char (p);
140+-      FriBidiCharType char_type = fribidi_get_bidi_type (ch);
141+-
142+       if (i == n_chars)
143+         break;
144+ 
145+-      bidi_types[i] = char_type;
146+-      ored_types |= char_type;
147+-      if (FRIBIDI_IS_STRONG (char_type))
148+-        anded_strongs &= char_type;
149+-      if (G_UNLIKELY(bidi_types[i] == FRIBIDI_TYPE_ON))
150+-        bracket_types[i] = fribidi_get_bracket (ch);
151+-      else
152+-        bracket_types[i] = FRIBIDI_NO_BRACKET;
153++      bidi_types[i] = FRIBIDI_PAR_LTR;
154++      bracket_types[i] = 0;
155+     }
156+ 
157+     /* Short-circuit (malloc-expensive) FriBidi call for unidirectional
158+@@ -211,59 +151,14 @@ pango_log2vis_fill_embedding_levels (const gchar    *text,
159+      * o base_dir doesn't have an RTL taste.
160+      * o there are letters, and base_dir is weak.
161+      */
162+-    if (!FRIBIDI_IS_ISOLATE (ored_types) &&
163+-	!FRIBIDI_IS_RTL (ored_types) &&
164+-	!FRIBIDI_IS_ARABIC (ored_types) &&
165+-	(!FRIBIDI_IS_RTL (fribidi_base_dir) ||
166+-	  (FRIBIDI_IS_WEAK (fribidi_base_dir) &&
167+-	   FRIBIDI_IS_LETTER (ored_types))
168+-	))
169+-      {
170+-        /* all LTR */
171+-	fribidi_base_dir = FRIBIDI_PAR_LTR;
172+ 	memset (embedding_levels_list, 0, n_chars);
173+-	goto resolved;
174+-      }
175+-    /* The case that all resolved levels will be RTL is much more complex.
176+-     * No isolates, no numbers, all strongs are RTL, and one of
177+-     * the following:
178+-     *
179+-     * o base_dir has an RTL taste (may be weak).
180+-     * o there are letters, and base_dir is weak.
181+-     */
182+-    else if (!FRIBIDI_IS_ISOLATE (ored_types) &&
183+-	     !FRIBIDI_IS_NUMBER (ored_types) &&
184+-	     FRIBIDI_IS_RTL (anded_strongs) &&
185+-	     (FRIBIDI_IS_RTL (fribidi_base_dir) ||
186+-	       (FRIBIDI_IS_WEAK (fribidi_base_dir) &&
187+-		FRIBIDI_IS_LETTER (ored_types))
188+-	     ))
189+-      {
190+-        /* all RTL */
191+-	fribidi_base_dir = FRIBIDI_PAR_RTL;
192+-	memset (embedding_levels_list, 1, n_chars);
193+-	goto resolved;
194+-      }
195+-
196+-
197+-  max_level = fribidi_get_par_embedding_levels_ex (bidi_types, bracket_types, n_chars,
198+-						   &fribidi_base_dir,
199+-						   (FriBidiLevel*)embedding_levels_list);
200+-
201+-  if (G_UNLIKELY(max_level == 0))
202+-    {
203+-      /* fribidi_get_par_embedding_levels() failed. */
204+-      memset (embedding_levels_list, 0, length);
205+-    }
206+-
207+-resolved:
208+   if (n_chars >= 64)
209+     {
210+       g_free (bidi_types);
211+       g_free (bracket_types);
212+     }
213+ 
214+-  *pbase_dir = (fribidi_base_dir == FRIBIDI_PAR_LTR) ?  PANGO_DIRECTION_LTR : PANGO_DIRECTION_RTL;
215++  *pbase_dir = PANGO_DIRECTION_LTR;
216+ }
217+ 
218+ /**
219+@@ -285,18 +180,7 @@ resolved:
220+ PangoDirection
221+ pango_unichar_direction (gunichar ch)
222+ {
223+-  FriBidiCharType fribidi_ch_type;
224+-
225+-  G_STATIC_ASSERT (sizeof (FriBidiChar) == sizeof (gunichar));
226+-
227+-  fribidi_ch_type = fribidi_get_bidi_type (ch);
228+-
229+-  if (!FRIBIDI_IS_STRONG (fribidi_ch_type))
230+-    return PANGO_DIRECTION_NEUTRAL;
231+-  else if (FRIBIDI_IS_RTL (fribidi_ch_type))
232+-    return PANGO_DIRECTION_RTL;
233+-  else
234+-    return PANGO_DIRECTION_LTR;
235++  return PANGO_DIRECTION_LTR;
236+ }
237+ 
238+ 
+2, -0
1@@ -0,0 +1,2 @@
2+https://github.com/GNOME/pango/archive/1.51.1.tar.gz
3+patches/no-fribidi.patch
+1, -0
1@@ -0,0 +1 @@
2+1.51.1 1
+11, -0
 1@@ -0,0 +1,11 @@
 2+#!/bin/sh -e
 3+
 4+./configure \
 5+    --prefix=/ \
 6+    --enable-pcre2-16 \
 7+    --enable-pcre2-32 \
 8+    --enable-pcre2grep-libz \
 9+    --enable-jit
10+
11+make
12+make DESTDIR="$1" install
+1, -0
1@@ -0,0 +1 @@
2+1e4a9560c8ea165725e920962467e14b3a627a08c29267bb79470f521527e14a59
+1, -0
1@@ -0,0 +1 @@
2+https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.42/pcre2-10.42.tar.bz2
+1, -0
1@@ -0,0 +1 @@
2+10.42 1
+49, -0
 1@@ -0,0 +1,49 @@
 2+#!/bin/sh -e
 3+
 4+export BUILD_ZLIB=0
 5+export BUILD_BZIP2=0
 6+export LDFLAGS="$LDFLAGS -pthread"
 7+export CFLAGS="$CFLAGS -DNO_POSIX_2008_LOCALE -D_GNU_SOURCE"
 8+
 9+./Configure \
10+    -des \
11+    -Dprefix=/ \
12+    -Dvendorprefix=/ \
13+    -Dusevendorprefix \
14+    -Duseshrplib \
15+    -Dusesoname \
16+    -Dusethreads \
17+    -Dinc_version_list=none \
18+    -Dd_sockaddr_in6=define \
19+    -Dcccdlflags=-fPIC \
20+    -Dccflags="$CFLAGS" \
21+    -Dlddlflags="-shared $LDFLAGS" \
22+    -Dldflags="$LDFLAGS" \
23+    -Doptimize="-Wall $CFLAGS" \
24+    -Dcc="$CC" \
25+    -Dar="$AR" \
26+    -Dnm="$NM" \
27+    -Dranlib="$RANLIB" \
28+    -Dman1dir=/share/man/man1 \
29+    -Dman3dir=/share/man/man3 \
30+    -Dinstallman1dir=/share/man/man1 \
31+    -Dinstallman3dir=/share/man/man3 \
32+    -Dman1ext=1 \
33+    -Dman3ext=3pm \
34+    -Dperl_static_inline="static __inline__" \
35+    -Dd_static_inline
36+
37+make
38+make install
39+
40+# Remove all unneeded files.
41+find "$1" -name \*.pod       -exec rm -f {} +
42+find "$1" -name .packlist    -exec rm -f {} +
43+find "$1" -name README\*     -exec rm -f {} +
44+find "$1" -name TODO\*       -exec rm -f {} +
45+find "$1" -name Change\*     -exec rm -f {} +
46+find "$1" -name \*.bs        -exec rm -f {} +
47+find "$1" -name \*.0 -type f -exec rm -f {} +
48+
49+# Fix permissions.
50+find "$1/lib" -type f -exec chmod 644 {} \;
+1, -0
1@@ -0,0 +1 @@
2+0ff7c7aae1dbe717559d6d1d4ce668f6a4a2c3f657afe887ef0b73b3be6a312d66
+1, -0
1@@ -0,0 +1 @@
2+zlib
+1, -0
1@@ -0,0 +1 @@
2+https://www.cpan.org/src/5.0/perl-5.38.0.tar.xz
+1, -0
1@@ -0,0 +1 @@
2+5.38.0 1
+3, -3
 1@@ -2,11 +2,11 @@
 2 
 3 export DESTDIR="$1"
 4 
 5-muon setup \
 6-    -Dprefix=/usr \
 7+meson setup \
 8+    -Dprefix=/ \
 9     -Dgtk=disabled \
10     -Ddefault_library=static \
11     output
12 
13 samu -C output
14-muon -C output install
15+samu -C output install
+1, -1
1@@ -1 +1 @@
2-muon make
3+meson make
+8, -0
1@@ -0,0 +1,8 @@
2+#!/bin/sh -e
3+
4+rm -rf flit_core/flit_core/vendor/
5+python flit_core/build_dists.py
6+
7+python -m installer -d "$1" "flit_core/dist/flit_core-$2-py3-none-any.whl"
8+
9+rm -rf "$1/lib/python3*/site-packages/flit_core/tests"
+1, -0
1@@ -0,0 +1 @@
2+a14e806578da1abff5ef9b5a31e948e3e74391e171e4b8a70acd4dc5348aa2f83e
+2, -0
1@@ -0,0 +1,2 @@
2+python
3+python-installer make
+36, -0
 1@@ -0,0 +1,36 @@
 2+/var/db/kiss/installed/python-flit-core/version
 3+/var/db/kiss/installed/python-flit-core/sources
 4+/var/db/kiss/installed/python-flit-core/manifest
 5+/var/db/kiss/installed/python-flit-core/depends
 6+/var/db/kiss/installed/python-flit-core/checksums
 7+/var/db/kiss/installed/python-flit-core/build
 8+/var/db/kiss/installed/python-flit-core/
 9+/var/db/kiss/installed/
10+/var/db/kiss/
11+/var/db/
12+/var/
13+/usr/lib/python3.11/site-packages/flit_core/wheel.py
14+/usr/lib/python3.11/site-packages/flit_core/versionno.py
15+/usr/lib/python3.11/site-packages/flit_core/sdist.py
16+/usr/lib/python3.11/site-packages/flit_core/config.py
17+/usr/lib/python3.11/site-packages/flit_core/common.py
18+/usr/lib/python3.11/site-packages/flit_core/buildapi.py
19+/usr/lib/python3.11/site-packages/flit_core/__pycache__/wheel.cpython-311.pyc
20+/usr/lib/python3.11/site-packages/flit_core/__pycache__/versionno.cpython-311.pyc
21+/usr/lib/python3.11/site-packages/flit_core/__pycache__/sdist.cpython-311.pyc
22+/usr/lib/python3.11/site-packages/flit_core/__pycache__/config.cpython-311.pyc
23+/usr/lib/python3.11/site-packages/flit_core/__pycache__/common.cpython-311.pyc
24+/usr/lib/python3.11/site-packages/flit_core/__pycache__/buildapi.cpython-311.pyc
25+/usr/lib/python3.11/site-packages/flit_core/__pycache__/__init__.cpython-311.pyc
26+/usr/lib/python3.11/site-packages/flit_core/__pycache__/
27+/usr/lib/python3.11/site-packages/flit_core/__init__.py
28+/usr/lib/python3.11/site-packages/flit_core/
29+/usr/lib/python3.11/site-packages/flit_core-3.9.0.dist-info/WHEEL
30+/usr/lib/python3.11/site-packages/flit_core-3.9.0.dist-info/RECORD
31+/usr/lib/python3.11/site-packages/flit_core-3.9.0.dist-info/METADATA
32+/usr/lib/python3.11/site-packages/flit_core-3.9.0.dist-info/LICENSE
33+/usr/lib/python3.11/site-packages/flit_core-3.9.0.dist-info/
34+/usr/lib/python3.11/site-packages/
35+/usr/lib/python3.11/
36+/usr/lib/
37+/usr/
+1, -0
1@@ -0,0 +1 @@
2+https://files.pythonhosted.org/packages/source/f/flit/flit-3.9.0.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+3.9.0 1
+13, -0
 1@@ -0,0 +1,13 @@
 2+#!/bin/sh -e
 3+
 4+patch -p1 < default-bytecode-levels.patch
 5+
 6+sitedir="$(python3 -c 'import site;print(site.getsitepackages()[0])')"
 7+
 8+mkdir -p "$1/$sitedir"
 9+cp -pR gpep517 "$1/$sitedir"
10+python -m compileall "$1/$sitedir"
11+
12+mkdir -p "$1/bin"
13+cp gpep517.bin "$1/bin/gpep517"
14+chmod 755 "$1/bin/gpep517"
+3, -0
1@@ -0,0 +1,3 @@
2+1b667c868cac2666242d3f655619286e2da926667f407ef992fba29caa80d80fe9
3+482b3562a2d6a9b273e8e2049bc29136643cad5002495cff0e1169c53ea8b6eb2b
4+236459f14ba3e57226f6c21df619d2ad6198b9d68a5af131c05f98faff05a167d2
+1, -0
1@@ -0,0 +1 @@
2+python
+6, -0
1@@ -0,0 +1,6 @@
2+#!/usr/bin/python
3+# -*- coding: utf-8 -*-
4+import sys
5+from gpep517.__main__ import main
6+if __name__ == "__main__":
7+    sys.exit(main())
+30, -0
 1@@ -0,0 +1,30 @@
 2+/var/db/kiss/installed/python-gpep517/version
 3+/var/db/kiss/installed/python-gpep517/sources
 4+/var/db/kiss/installed/python-gpep517/patches/default-bytecode-levels.patch
 5+/var/db/kiss/installed/python-gpep517/patches/
 6+/var/db/kiss/installed/python-gpep517/manifest
 7+/var/db/kiss/installed/python-gpep517/files/gpep517.bin
 8+/var/db/kiss/installed/python-gpep517/files/
 9+/var/db/kiss/installed/python-gpep517/depends
10+/var/db/kiss/installed/python-gpep517/checksums
11+/var/db/kiss/installed/python-gpep517/build
12+/var/db/kiss/installed/python-gpep517/
13+/var/db/kiss/installed/
14+/var/db/kiss/
15+/var/db/
16+/var/
17+/usr/lib/python3.11/site-packages/gpep517/qa.py
18+/usr/lib/python3.11/site-packages/gpep517/__pycache__/qa.cpython-311.pyc
19+/usr/lib/python3.11/site-packages/gpep517/__pycache__/__main__.cpython-311.pyc
20+/usr/lib/python3.11/site-packages/gpep517/__pycache__/__init__.cpython-311.pyc
21+/usr/lib/python3.11/site-packages/gpep517/__pycache__/
22+/usr/lib/python3.11/site-packages/gpep517/__main__.py.orig
23+/usr/lib/python3.11/site-packages/gpep517/__main__.py
24+/usr/lib/python3.11/site-packages/gpep517/__init__.py
25+/usr/lib/python3.11/site-packages/gpep517/
26+/usr/lib/python3.11/site-packages/
27+/usr/lib/python3.11/
28+/usr/lib/
29+/usr/bin/gpep517
30+/usr/bin/
31+/usr/
+16, -0
 1@@ -0,0 +1,16 @@
 2+diff --git a/gpep517/__main__.py b/gpep517/__main__.py
 3+index d519c75..2dc0b49 100644
 4+--- a/gpep517/__main__.py
 5++++ b/gpep517/__main__.py
 6+@@ -350,9 +350,9 @@ def add_install_args(parser):
 7+                        f"(default: {sys.executable})")
 8+     group.add_argument("--optimize",
 9+                        type=parse_optimize_arg,
10+-                       default=[],
11++                       default=[0],
12+                        help="Comma-separated list of optimization levels "
13+-                       "to compile bytecode for (default: none), pass 'all' "
14++                       "to compile bytecode for (default: 0), 0s 'all' "
15+                        "to enable all known optimization levels (currently: "
16+                        f"{', '.join(str(x) for x in ALL_OPT_LEVELS)})")
17+ 
+3, -0
1@@ -0,0 +1,3 @@
2+https://github.com/mgorny/gpep517/archive/v15/gpep517-v15.tar.gz
3+files/gpep517.bin
4+patches/default-bytecode-levels.patch
+1, -0
1@@ -0,0 +1 @@
2+15 1
+11, -0
 1@@ -0,0 +1,11 @@
 2+#!/bin/sh -e
 3+
 4+sitedir="$(python3 -c 'import site;print(site.getsitepackages()[0])')"
 5+
 6+unzip -d build "installer-$2-py3-none-any.whl"
 7+
 8+(cd build; patch -p1 < default-bytecode-levels.patch)
 9+
10+mkdir -p "$1/$sitedir"
11+cp -pR build/installer* "$1/$sitedir"
12+python -m compileall "$1/$sitedir"
+2, -0
1@@ -0,0 +1,2 @@
2+72790531eb73009974eca65759a7088ed1398cd009b85e5a243d1ea22102179bbc
3+8d93b38e8b441cfac476787bd834230c9dfb59f23ab6a4927ea127e07ad0a2543a
+2, -0
1@@ -0,0 +1,2 @@
2+python
3+unzip make
+26, -0
 1@@ -0,0 +1,26 @@
 2+the previous default of 0, 1 causes opt-1 bytecode to also be generated,
 3+which is not used without passing `-O` to `python3` anyway, and doubles
 4+the size of the resulting package
 5+
 6+diff --git a/installer/__main__.py b/installer/__main__.py
 7+index 51014b9..2a389e8 100644
 8+--- a/installer/__main__.py
 9++++ b/installer/__main__.py
10+@@ -36,7 +36,7 @@ def _get_main_parser() -> argparse.ArgumentParser:
11+         metavar="level",
12+         type=int,
13+         choices=[0, 1, 2],
14+-        help="generate bytecode for the specified optimization level(s) (default=0, 1)",
15++        help="generate bytecode for the specified optimization level(s) (default=0)",
16+     )
17+     parser.add_argument(
18+         "--no-compile-bytecode",
19+@@ -81,7 +81,7 @@ def _main(cli_args: Sequence[str], program: Optional[str] = None) -> None:
20+     if args.no_compile_bytecode:
21+         bytecode_levels = []
22+     elif not bytecode_levels:
23+-        bytecode_levels = [0, 1]
24++        bytecode_levels = [0]
25+ 
26+     with WheelFile.open(args.wheel) as source:
27+         destination = SchemeDictionaryDestination(
+2, -0
1@@ -0,0 +1,2 @@
2+https://files.pythonhosted.org/packages/py3/i/installer/installer-0.7.0-py3-none-any.whl
3+patches/default-bytecode-levels.patch build
+1, -0
1@@ -0,0 +1 @@
2+0.7.0 1
+6, -0
1@@ -0,0 +1,6 @@
2+#!/bin/sh -e
3+
4+python3 setup.py build
5+python3 setup.py install \
6+    --prefix= \
7+    --root="$1"
+1, -0
1@@ -0,0 +1 @@
2+3609266a8bfbb7f788f12b0b6b78838720348a4c07792c885eaf4827aaaefc8b03
+2, -0
1@@ -0,0 +1,2 @@
2+python
3+python-markupsafe
+1, -0
1@@ -0,0 +1 @@
2+https://files.pythonhosted.org/packages/source/M/Mako/Mako-1.3.2.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+1.3.2 1
+6, -0
1@@ -0,0 +1,6 @@
2+#!/bin/sh -e
3+
4+python3 setup.py build
5+python3 setup.py install \
6+    --prefix= \
7+    --root="$1"
+1, -0
1@@ -0,0 +1 @@
2+68bb64c58e1c26d8f046a370a78bac148e85e131ce0aff6464cec226b1d613a933
+1, -0
1@@ -0,0 +1 @@
2+python
+1, -0
1@@ -0,0 +1 @@
2+https://github.com/pallets/markupsafe/archive/refs/tags/2.1.5.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+2.1.5 1
+4, -0
1@@ -0,0 +1,4 @@
2+#!/bin/sh -e
3+
4+gpep517 build-wheel --wheel-dir .dist --output-fd 3 3>&1 >&2
5+python -m installer -d "$1" .dist/*.whl
+1, -0
1@@ -0,0 +1 @@
2+8d1b229ed8d16fc54dc5d22058875790114f6ab6ce9387368481f813e39342d8ba
+3, -0
1@@ -0,0 +1,3 @@
2+python
3+python-flit-core make
4+python-gpep517 make
+53, -0
 1@@ -0,0 +1,53 @@
 2+/var/db/kiss/installed/python-packaging/version
 3+/var/db/kiss/installed/python-packaging/sources
 4+/var/db/kiss/installed/python-packaging/manifest
 5+/var/db/kiss/installed/python-packaging/depends
 6+/var/db/kiss/installed/python-packaging/checksums
 7+/var/db/kiss/installed/python-packaging/build
 8+/var/db/kiss/installed/python-packaging/
 9+/var/db/kiss/installed/
10+/var/db/kiss/
11+/var/db/
12+/var/
13+/usr/lib/python3.11/site-packages/packaging/version.py
14+/usr/lib/python3.11/site-packages/packaging/utils.py
15+/usr/lib/python3.11/site-packages/packaging/tags.py
16+/usr/lib/python3.11/site-packages/packaging/specifiers.py
17+/usr/lib/python3.11/site-packages/packaging/requirements.py
18+/usr/lib/python3.11/site-packages/packaging/py.typed
19+/usr/lib/python3.11/site-packages/packaging/metadata.py
20+/usr/lib/python3.11/site-packages/packaging/markers.py
21+/usr/lib/python3.11/site-packages/packaging/_tokenizer.py
22+/usr/lib/python3.11/site-packages/packaging/_structures.py
23+/usr/lib/python3.11/site-packages/packaging/_parser.py
24+/usr/lib/python3.11/site-packages/packaging/_musllinux.py
25+/usr/lib/python3.11/site-packages/packaging/_manylinux.py
26+/usr/lib/python3.11/site-packages/packaging/_elffile.py
27+/usr/lib/python3.11/site-packages/packaging/__pycache__/version.cpython-311.pyc
28+/usr/lib/python3.11/site-packages/packaging/__pycache__/utils.cpython-311.pyc
29+/usr/lib/python3.11/site-packages/packaging/__pycache__/tags.cpython-311.pyc
30+/usr/lib/python3.11/site-packages/packaging/__pycache__/specifiers.cpython-311.pyc
31+/usr/lib/python3.11/site-packages/packaging/__pycache__/requirements.cpython-311.pyc
32+/usr/lib/python3.11/site-packages/packaging/__pycache__/metadata.cpython-311.pyc
33+/usr/lib/python3.11/site-packages/packaging/__pycache__/markers.cpython-311.pyc
34+/usr/lib/python3.11/site-packages/packaging/__pycache__/_tokenizer.cpython-311.pyc
35+/usr/lib/python3.11/site-packages/packaging/__pycache__/_structures.cpython-311.pyc
36+/usr/lib/python3.11/site-packages/packaging/__pycache__/_parser.cpython-311.pyc
37+/usr/lib/python3.11/site-packages/packaging/__pycache__/_musllinux.cpython-311.pyc
38+/usr/lib/python3.11/site-packages/packaging/__pycache__/_manylinux.cpython-311.pyc
39+/usr/lib/python3.11/site-packages/packaging/__pycache__/_elffile.cpython-311.pyc
40+/usr/lib/python3.11/site-packages/packaging/__pycache__/__init__.cpython-311.pyc
41+/usr/lib/python3.11/site-packages/packaging/__pycache__/
42+/usr/lib/python3.11/site-packages/packaging/__init__.py
43+/usr/lib/python3.11/site-packages/packaging/
44+/usr/lib/python3.11/site-packages/packaging-23.2.dist-info/WHEEL
45+/usr/lib/python3.11/site-packages/packaging-23.2.dist-info/RECORD
46+/usr/lib/python3.11/site-packages/packaging-23.2.dist-info/METADATA
47+/usr/lib/python3.11/site-packages/packaging-23.2.dist-info/LICENSE.BSD
48+/usr/lib/python3.11/site-packages/packaging-23.2.dist-info/LICENSE.APACHE
49+/usr/lib/python3.11/site-packages/packaging-23.2.dist-info/LICENSE
50+/usr/lib/python3.11/site-packages/packaging-23.2.dist-info/
51+/usr/lib/python3.11/site-packages/
52+/usr/lib/python3.11/
53+/usr/lib/
54+/usr/
+1, -0
1@@ -0,0 +1 @@
2+https://github.com/pypa/packaging/archive/23.2/python-packaging-23.2.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+23.2 1
+1, -1
1@@ -1,5 +1,5 @@
2 47bb72ced6c29652399875b77b953ccda570f9d51ed966a27c680cd4428b9e7da1
3-9360e2b3668ebb095f4898f0e8c567b1a5c34f43e36dc6a020f6ca418019de328c
4+c382aa92212e6b0497375e2dc1504bf5c4f06e9f4eb9aa13a2eb6f4efcd3c834c7
5 0af9d6cc044d43fbe3f98a316802e4a4cd6d35d3606a4c5b6d5c135da6342d316d
6 396477ecc3d3244653804674429e0013d6bc631fec52d2ef33d0d4546b681715df
7 c4b318c0f2cbcdc0da0c1ee452b78266ec10a9e0ed4a36d630a81d73853e31cb3c
+0, -1
1@@ -1,4 +1,3 @@
2-#bzip2
3 libffi
4 libressl
5 pkgconf make
+10, -0
 1@@ -0,0 +1,10 @@
 2+#!/bin/sh -e
 3+
 4+./configure \
 5+    --prefix=/ \
 6+    --enable-shared \
 7+    --enable-static \
 8+    --disable-rpath
 9+
10+make
11+make DESTDIR="$1" install
+1, -0
1@@ -0,0 +1 @@
2+ce1ee7c81f2fc3664c67423a1a1fe11a897af4dc529c7007297461ec7a2905d26c
+4, -0
1@@ -0,0 +1,4 @@
2+libffi   make
3+libressl
4+libyaml  make
5+zlib
+1, -0
1@@ -0,0 +1 @@
2+https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0.tar.xz
+1, -0
1@@ -0,0 +1 @@
2+3.3.0 1
+12, -0
 1@@ -0,0 +1,12 @@
 2+#!/bin/sh -e
 3+
 4+for p in *.patch; do
 5+	patch -p1 < "$p"
 6+done
 7+
 8+# force use webkit 4.1
 9+sed 's/4.0/4.1/g' config.mk > _
10+mv -f _ config.mk
11+
12+make
13+make DESTDIR="$1" PREFIX=/ install
+7, -0
1@@ -0,0 +1,7 @@
2+6095a698544d69f413e277d4b97913a738fcca4bea7885b325c6fef6fc9c6840b9
3+a65498dae604effe2781f3d3cf707fe7081df338c9e5aee1b6b7dafd2bf7d9d938
4+84a76a3dc9e5551c9f248c52df02bc403642b2e1b37dfe57044ea7765e19834c21
5+9b7ed8a6af0ae71701d36438af99cb5a4bd7b39f1266dcfa18edc410009935fe33
6+34c332ffd3ce2cc543c07e76ba1b27454c189023e53165b3843764762b22b9f186
7+d9489a73af424f8e0651756ab45bc5477a220b301fa4658413dc763bf8f48bd5c8
8+7b2580e3ad50da24b93d5a6cc248377084582f431782f8c1866181337b704f96ca
+3, -0
1@@ -0,0 +1,3 @@
2+pkgconf make
3+webkit2gtk
4+xprop
+230, -0
  1@@ -0,0 +1,230 @@
  2+From 9e58d334893f059a1bc4fb45bba79debeef211af Mon Sep 17 00:00:00 2001
  3+From: hovercats <hovercatswithlasereyes@protonmail.com>
  4+Date: Tue, 29 Aug 2023 22:56:07 +0200
  5+Subject: [PATCH 1/4] remove the need for gcr
  6+
  7+---
  8+ Makefile     |  2 +-
  9+ arg.h        | 48 --------------------------------------
 10+ config.def.h |  1 -
 11+ config.mk    |  4 ++--
 12+ surf.1       |  3 ---
 13+ surf.c       | 66 +++++++++++++++++++++++++++++-----------------------
 14+ 6 files changed, 40 insertions(+), 84 deletions(-)
 15+ delete mode 100644 arg.h
 16+
 17+diff --git a/Makefile b/Makefile
 18+index 1edf820..e071a91 100644
 19+--- a/Makefile
 20++++ b/Makefile
 21+@@ -22,7 +22,7 @@ options:
 22+ surf: $(OBJ)
 23+ 	$(CC) $(SURFLDFLAGS) $(LDFLAGS) -o $@ $(OBJ) $(LIBS)
 24+ 
 25+-$(OBJ) $(WOBJ): config.h common.h config.mk
 26++$(OBJ) $(WOBJ): config.h  config.mk
 27+ 
 28+ config.h:
 29+ 	cp config.def.h $@
 30+diff --git a/arg.h b/arg.h
 31+deleted file mode 100644
 32+index ba3fb3f..0000000
 33+--- a/arg.h
 34++++ /dev/null
 35+@@ -1,48 +0,0 @@
 36+-/*
 37+- * Copy me if you can.
 38+- * by 20h
 39+- */
 40+-
 41+-#ifndef ARG_H__
 42+-#define ARG_H__
 43+-
 44+-extern char *argv0;
 45+-
 46+-/* use main(int argc, char *argv[]) */
 47+-#define ARGBEGIN	for (argv0 = *argv, argv++, argc--;\
 48+-					argv[0] && argv[0][0] == '-'\
 49+-					&& argv[0][1];\
 50+-					argc--, argv++) {\
 51+-				char argc_;\
 52+-				char **argv_;\
 53+-				int brk_;\
 54+-				if (argv[0][1] == '-' && argv[0][2] == '\0') {\
 55+-					argv++;\
 56+-					argc--;\
 57+-					break;\
 58+-				}\
 59+-				for (brk_ = 0, argv[0]++, argv_ = argv;\
 60+-						argv[0][0] && !brk_;\
 61+-						argv[0]++) {\
 62+-					if (argv_ != argv)\
 63+-						break;\
 64+-					argc_ = argv[0][0];\
 65+-					switch (argc_)
 66+-#define ARGEND			}\
 67+-			}
 68+-
 69+-#define ARGC()		argc_
 70+-
 71+-#define EARGF(x)	((argv[0][1] == '\0' && argv[1] == NULL)?\
 72+-				((x), abort(), (char *)0) :\
 73+-				(brk_ = 1, (argv[0][1] != '\0')?\
 74+-					(&argv[0][1]) :\
 75+-					(argc--, argv++, argv[0])))
 76+-
 77+-#define ARGF()		((argv[0][1] == '\0' && argv[1] == NULL)?\
 78+-				(char *)0 :\
 79+-				(brk_ = 1, (argv[0][1] != '\0')?\
 80+-					(&argv[0][1]) :\
 81+-					(argc--, argv++, argv[0])))
 82+-
 83+-#endif
 84+diff --git a/config.def.h b/config.def.h
 85+index ef44721..2745e79 100644
 86+--- a/config.def.h
 87++++ b/config.def.h
 88+@@ -163,7 +163,6 @@ static Key keys[] = {
 89+ 	{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_n,      find,       { .i = -1 } },
 90+ 
 91+ 	{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_p,      print,      { 0 } },
 92+-	{ MODKEY,                GDK_KEY_t,      showcert,   { 0 } },
 93+ 
 94+ 	{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_a,      togglecookiepolicy, { 0 } },
 95+ 	{ 0,                     GDK_KEY_F11,    togglefullscreen, { 0 } },
 96+diff --git a/config.mk b/config.mk
 97+index 2eb9fb0..6e51980 100644
 98+--- a/config.mk
 99++++ b/config.mk
100+@@ -12,8 +12,8 @@ LIBDIR = $(LIBPREFIX)/surf
101+ X11INC = `pkg-config --cflags x11`
102+ X11LIB = `pkg-config --libs x11`
103+ 
104+-GTKINC = `pkg-config --cflags gtk+-3.0 gcr-3 webkit2gtk-4.0`
105+-GTKLIB = `pkg-config --libs gtk+-3.0 gcr-3 webkit2gtk-4.0`
106++GTKINC = `pkg-config --cflags gtk+-3.0  webkit2gtk-4.0`
107++GTKLIB = `pkg-config --libs gtk+-3.0  webkit2gtk-4.0`
108+ WEBEXTINC = `pkg-config --cflags webkit2gtk-4.0 webkit2gtk-web-extension-4.0 gio-2.0`
109+ WEBEXTLIBS = `pkg-config --libs webkit2gtk-4.0 webkit2gtk-web-extension-4.0 gio-2.0`
110+ 
111+diff --git a/surf.1 b/surf.1
112+index 496afb9..78e8f9c 100644
113+--- a/surf.1
114++++ b/surf.1
115+@@ -194,9 +194,6 @@ Reloads the website without using the cache.
116+ .B Ctrl\-y
117+ Copies current URI to primary selection.
118+ .TP
119+-.B Ctrl\-t
120+-Display the current TLS certificate in a popup window.
121+-.TP
122+ .B Ctrl\-Shift\-a
123+ Toggle through the the
124+ .I cookie policies\fR.
125+diff --git a/surf.c b/surf.c
126+index af0fa74..9186fc7 100644
127+--- a/surf.c
128++++ b/surf.c
129+@@ -6,7 +6,6 @@
130+ #include <sys/socket.h>
131+ #include <sys/types.h>
132+ #include <sys/wait.h>
133+-#include <glib.h>
134+ #include <inttypes.h>
135+ #include <libgen.h>
136+ #include <limits.h>
137+@@ -24,15 +23,49 @@
138+ #include <glib/gstdio.h>
139+ #include <gtk/gtk.h>
140+ #include <gtk/gtkx.h>
141+-#include <gcr/gcr.h>
142+ #include <JavaScriptCore/JavaScript.h>
143+ #include <webkit2/webkit2.h>
144+ #include <X11/X.h>
145+ #include <X11/Xatom.h>
146+ #include <glib.h>
147+ 
148+-#include "arg.h"
149+-#include "common.h"
150++/* use main(int argc, char *argv[]) */
151++#define ARGBEGIN	for (argv0 = *argv, argv++, argc--;\
152++					argv[0] && argv[0][0] == '-'\
153++					&& argv[0][1];\
154++					argc--, argv++) {\
155++				char argc_;\
156++				char **argv_;\
157++				int brk_;\
158++				if (argv[0][1] == '-' && argv[0][2] == '\0') {\
159++					argv++;\
160++					argc--;\
161++					break;\
162++				}\
163++				for (brk_ = 0, argv[0]++, argv_ = argv;\
164++						argv[0][0] && !brk_;\
165++						argv[0]++) {\
166++					if (argv_ != argv)\
167++						break;\
168++					argc_ = argv[0][0];\
169++					switch (argc_)
170++#define ARGEND			}\
171++			}
172++#define ARGC()		argc_
173++
174++#define EARGF(x)	((argv[0][1] == '\0' && argv[1] == NULL)?\
175++				((x), abort(), (char *)0) :\
176++				(brk_ = 1, (argv[0][1] != '\0')?\
177++					(&argv[0][1]) :\
178++					(argc--, argv++, argv[0])))
179++
180++#define ARGF()		((argv[0][1] == '\0' && argv[1] == NULL)?\
181++				(char *)0 :\
182++				(brk_ = 1, (argv[0][1] != '\0')?\
183++					(&argv[0][1]) :\
184++					(argc--, argv++, argv[0])))
185++
186++#define MSGBUFSZ 8
187+ 
188+ #define LENGTH(x)               (sizeof(x) / sizeof(x[0]))
189+ #define CLEANMASK(mask)         (mask & (MODKEY|GDK_SHIFT_MASK))
190+@@ -142,7 +175,6 @@ typedef struct {
191+ } SiteSpecific;
192+ 
193+ /* Surf */
194+-static void die(const char *errstr, ...);
195+ static void usage(void);
196+ static void setup(void);
197+ static void sigchld(int unused);
198+@@ -1800,30 +1832,6 @@ print(Client *c, const Arg *a)
199+ 	                                  GTK_WINDOW(c->win));
200+ }
201+ 
202+-void
203+-showcert(Client *c, const Arg *a)
204+-{
205+-	GTlsCertificate *cert = c->failedcert ? c->failedcert : c->cert;
206+-	GcrCertificate *gcrt;
207+-	GByteArray *crt;
208+-	GtkWidget *win;
209+-	GcrCertificateWidget *wcert;
210+-
211+-	if (!cert)
212+-		return;
213+-
214+-	g_object_get(cert, "certificate", &crt, NULL);
215+-	gcrt = gcr_simple_certificate_new(crt->data, crt->len);
216+-	g_byte_array_unref(crt);
217+-
218+-	win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
219+-	wcert = gcr_certificate_widget_new(gcrt);
220+-	g_object_unref(gcrt);
221+-
222+-	gtk_container_add(GTK_CONTAINER(win), GTK_WIDGET(wcert));
223+-	gtk_widget_show_all(win);
224+-}
225+-
226+ void
227+ clipboard(Client *c, const Arg *a)
228+ {
229+-- 
230+2.42.0
231+
+33, -0
 1@@ -0,0 +1,33 @@
 2+From f79c9427db7f671362dbae79ca03d0b149cb8037 Mon Sep 17 00:00:00 2001
 3+From: hovercats <hovercatswithlasereyes@protonmail.com>
 4+Date: Tue, 29 Aug 2023 22:58:53 +0200
 5+Subject: [PATCH 2/4] set cache/cookiedir to /tmp, and the rest to ~/etc/surf
 6+
 7+---
 8+ config.def.h | 10 +++++-----
 9+ 1 file changed, 5 insertions(+), 5 deletions(-)
10+
11+diff --git a/config.def.h b/config.def.h
12+index 2745e79..71d5890 100644
13+--- a/config.def.h
14++++ b/config.def.h
15+@@ -1,11 +1,11 @@
16+ /* modifier 0 means no modifier */
17+ static int surfuseragent    = 1;  /* Append Surf version to default WebKit user agent */
18+ static char *fulluseragent  = ""; /* Or override the whole user agent string */
19+-static char *scriptfile     = "~/.surf/script.js";
20+-static char *styledir       = "~/.surf/styles/";
21+-static char *certdir        = "~/.surf/certificates/";
22+-static char *cachedir       = "~/.surf/cache/";
23+-static char *cookiefile     = "~/.surf/cookies.txt";
24++static char *scriptfile     = "~/etc/surf/script.js";
25++static char *styledir       = "~/etc/surf/styles/";
26++static char *certdir        = "~/etc/surf/certificates/";
27++static char *cachedir       = "/tmp/cache/";
28++static char *cookiefile     = "/tmp/cookies.txt";
29+ 
30+ /* Webkit default features */
31+ /* Highest priority value will be used.
32+-- 
33+2.42.0
34+
+67, -0
 1@@ -0,0 +1,67 @@
 2+From 678b2e7872358e7e67be0780d58456e356c15a17 Mon Sep 17 00:00:00 2001
 3+From: hovercats <hovercatswithlasereyes@protonmail.com>
 4+Date: Sun, 3 Dec 2023 16:44:06 +0100
 5+Subject: [PATCH] add quit hotkey
 6+
 7+---
 8+ config.def.h | 2 ++
 9+ surf.1       | 3 +++
10+ surf.c       | 8 ++++++++
11+ 3 files changed, 13 insertions(+)
12+
13+diff --git a/config.def.h b/config.def.h
14+index ef44721..57f78d7 100644
15+--- a/config.def.h
16++++ b/config.def.h
17+@@ -134,6 +134,8 @@ static Key keys[] = {
18+ 
19+ 	{ 0,                     GDK_KEY_Escape, stop,       { 0 } },
20+ 	{ MODKEY,                GDK_KEY_c,      stop,       { 0 } },
21++	
22++	{ MODKEY,				 GDK_KEY_q,	 	 quit,	     { 0 } },
23+ 
24+ 	{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_r,      reload,     { .i = 1 } },
25+ 	{ MODKEY,                GDK_KEY_r,      reload,     { .i = 0 } },
26+diff --git a/surf.1 b/surf.1
27+index 496afb9..a42be2f 100644
28+--- a/surf.1
29++++ b/surf.1
30+@@ -134,6 +134,9 @@ which surf should use.
31+ .B Escape
32+ Stops loading current page or stops download.
33+ .TP
34++.B Ctrl\-q
35++Close surf.
36++.TP
37+ .B Ctrl\-h
38+ Walks back the history.
39+ .TP
40+diff --git a/surf.c b/surf.c
41+index af0fa74..16f28f4 100644
42+--- a/surf.c
43++++ b/surf.c
44+@@ -228,6 +228,7 @@ static void scrollv(Client *c, const Arg *a);
45+ static void scrollh(Client *c, const Arg *a);
46+ static void navigate(Client *c, const Arg *a);
47+ static void stop(Client *c, const Arg *a);
48++static void quit(Client *c, const Arg *a);
49+ static void toggle(Client *c, const Arg *a);
50+ static void togglefullscreen(Client *c, const Arg *a);
51+ static void togglecookiepolicy(Client *c, const Arg *a);
52+@@ -1900,6 +1901,13 @@ stop(Client *c, const Arg *a)
53+ 	webkit_web_view_stop_loading(c->view);
54+ }
55+ 
56++void
57++quit(Client *c, const Arg *a)
58++{
59++	cleanup();
60++	exit(0);
61++}
62++
63+ void
64+ toggle(Client *c, const Arg *a)
65+ {
66+-- 
67+2.43.0
68+
+84, -0
 1@@ -0,0 +1,84 @@
 2+From 444ac633cedab97d6227b63665fa43a65aebca70 Mon Sep 17 00:00:00 2001
 3+From: hovercats <hovercatswithlasereyes@protonmail.com>
 4+Date: Tue, 29 Aug 2023 23:34:53 +0200
 5+Subject: [PATCH 4/4] apply searchengines patch
 6+
 7+---
 8+ config.def.h |  6 ++++++
 9+ surf.c       | 22 +++++++++++++++++++++-
10+ 2 files changed, 27 insertions(+), 1 deletion(-)
11+
12+diff --git a/config.def.h b/config.def.h
13+index a6a4692..6c26c34 100644
14+--- a/config.def.h
15++++ b/config.def.h
16+@@ -7,6 +7,12 @@ static char *certdir        = "~/etc/surf/certificates/";
17+ static char *cachedir       = "/tmp/cache/";
18+ static char *cookiefile     = "/tmp/cookies.txt";
19+ 
20++static SearchEngine searchengines[] = {
21++	{ " ", "https://duckduckgo.com/?q=%s" },
22++	{ "yt ", "https://yewtu.be/search?q=%s" },
23++
24++};
25++
26+ /* Webkit default features */
27+ /* Highest priority value will be used.
28+  * Default parameters are priority 0
29+diff --git a/surf.c b/surf.c
30+index 7abb207..f0e361f 100644
31+--- a/surf.c
32++++ b/surf.c
33+@@ -162,6 +162,11 @@ typedef struct {
34+ 	unsigned int stopevent;
35+ } Button;
36+ 
37++typedef struct {
38++	char *token;
39++	char *uri;
40++} SearchEngine;
41++
42+ typedef struct {
43+ 	const char *uri;
44+ 	Parameter config[ParameterLast];
45+@@ -248,6 +253,7 @@ static void webprocessterminated(WebKitWebView *v,
46+                                  Client *c);
47+ static void closeview(WebKitWebView *v, Client *c);
48+ static void destroywin(GtkWidget* w, Client *c);
49++static gchar *parseuri(const gchar *uri);
50+ 
51+ /* Hotkeys */
52+ static void pasteuri(GtkClipboard *clipboard, const char *text, gpointer d);
53+@@ -609,7 +615,7 @@ loaduri(Client *c, const Arg *a)
54+ 			url = g_strdup_printf("file://%s", path);
55+ 			free(path);
56+ 		} else {
57+-			url = g_strdup_printf("http://%s", uri);
58++			url = parseuri(uri);
59+ 		}
60+ 		if (apath != uri)
61+ 			free(apath);
62+@@ -1809,6 +1815,20 @@ destroywin(GtkWidget* w, Client *c)
63+ 		gtk_main_quit();
64+ }
65+ 
66++gchar *
67++parseuri(const gchar *uri)
68++{
69++	guint i;
70++
71++	for (i = 0; i < LENGTH(searchengines); i++) {
72++		if (g_str_has_prefix(uri, searchengines[i].token))
73++			return g_strdup_printf(searchengines[i].uri,
74++					       uri + strlen(searchengines[i].token));
75++	}
76++
77++	return g_strdup_printf("http://%s", uri);
78++}
79++
80+ void
81+ pasteuri(GtkClipboard *clipboard, const char *text, gpointer d)
82+ {
83+-- 
84+2.42.0
85+
+67, -0
 1@@ -0,0 +1,67 @@
 2+From a6a8878bb6a203b589d559025b94a78214f22878 Mon Sep 17 00:00:00 2001
 3+From: Olivier Moreau <m242@protonmail.com>
 4+Date: Sun, 12 Jan 2020 11:23:11 +0000
 5+Subject: [PATCH] Added choice between PRIMARY and CLIPBOARD Gtk selections, as
 6+ a config option
 7+
 8+---
 9+ config.def.h |  1 +
10+ surf.c       | 11 +++++++++--
11+ 2 files changed, 10 insertions(+), 2 deletions(-)
12+
13+diff --git a/config.def.h b/config.def.h
14+index 34265f6..03bbe2b 100644
15+--- a/config.def.h
16++++ b/config.def.h
17+@@ -48,6 +48,7 @@ static Parameter defconfig[ParameterLast] = {
18+ 	[Style]               =       { { .i = 1 },     },
19+ 	[WebGL]               =       { { .i = 0 },     },
20+ 	[ZoomLevel]           =       { { .f = 1.0 },   },
21++	[ClipboardNotPrimary] =	      { { .i = 1 }, 	},
22+ };
23+ 
24+ static UriParameters uriparams[] = {
25+diff --git a/surf.c b/surf.c
26+index 2b54e3c..b8a9b2f 100644
27+--- a/surf.c
28++++ b/surf.c
29+@@ -82,6 +82,7 @@ typedef enum {
30+ 	Style,
31+ 	WebGL,
32+ 	ZoomLevel,
33++	ClipboardNotPrimary,
34+ 	ParameterLast
35+ } ParamName;
36+ 
37+@@ -291,6 +292,7 @@ static ParamName loadcommitted[] = {
38+ 	SpellLanguages,
39+ 	Style,
40+ 	ZoomLevel,
41++	ClipboardNotPrimary,
42+ 	ParameterLast
43+ };
44+ 
45+@@ -1816,13 +1818,18 @@ showcert(Client *c, const Arg *a)
46+ void
47+ clipboard(Client *c, const Arg *a)
48+ {
49++	/* User defined choice of selection, see config.h */
50++	GdkAtom	selection = GDK_SELECTION_PRIMARY;
51++	if (curconfig[ClipboardNotPrimary].val.i > 0)
52++		selection = GDK_SELECTION_CLIPBOARD;
53++
54+ 	if (a->i) { /* load clipboard uri */
55+ 		gtk_clipboard_request_text(gtk_clipboard_get(
56+-		                           GDK_SELECTION_PRIMARY),
57++                                          selection),
58+ 		                           pasteuri, c);
59+ 	} else { /* copy uri */
60+ 		gtk_clipboard_set_text(gtk_clipboard_get(
61+-		                       GDK_SELECTION_PRIMARY), c->targeturi
62++		                       selection), c->targeturi
63+ 		                       ? c->targeturi : geturi(c), -1);
64+ 	}
65+ }
66+-- 
67+2.24.1
68+
+69, -0
 1@@ -0,0 +1,69 @@
 2+From cd4785280b4c02d1c71ea30d9278fea8f8bdca65 Mon Sep 17 00:00:00 2001
 3+From: hovercats <hovercatswithlasereyes@protonmail.com>
 4+Date: Sun, 3 Dec 2023 16:36:54 +0100
 5+Subject: [PATCH] add bookmarking using bmks
 6+
 7+---
 8+ config.def.h | 18 ++++++++++++++++++
 9+ surf.1       |  9 +++++++++
10+ 2 files changed, 27 insertions(+)
11+
12+diff --git a/config.def.h b/config.def.h
13+index 8057e88..99dbf50 100644
14+--- a/config.def.h
15++++ b/config.def.h
16+@@ -81,6 +81,20 @@ static WebKitFindOptions findopts = WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE |
17+         } \
18+ }
19+ 
20++/* bookmarks, need bmks script */
21++#define BM_PICK(p, q) { .v = (char *[]){ "/bin/sh", "-c", \
22++        "prop=\"$(bmks)\" &&" \
23++        "xprop -id $2 -f $1 8s -set $1 \"$prop\"", \
24++        p, q, winid, NULL } }
25++
26++#define BM_ADD { .v = (char *[]){ "/bin/sh", "-c", \
27++        "bmks a \"$(xprop -id $0 _SURF_URI | cut -d '\"' -f 2)\"", \
28++        winid, NULL } }
29++
30++#define BM_DEL { .v = (char *[]){ "/bin/sh", "-c", \
31++        "bmks d", \
32++        winid, NULL } }
33++
34+ /* DOWNLOAD(URI, referer) */
35+ #define DOWNLOAD(u, r) { \
36+         .v = (const char *[]){ "st", "-e", "/bin/sh", "-c",\
37+@@ -139,6 +153,10 @@ static Key keys[] = {
38+ 	{ MODKEY,                GDK_KEY_f,      spawn,      SETPROP("_SURF_FIND", "_SURF_FIND", PROMPT_FIND) },
39+ 	{ MODKEY,                GDK_KEY_slash,  spawn,      SETPROP("_SURF_FIND", "_SURF_FIND", PROMPT_FIND) },
40+ 
41++	{ MODKEY,                GDK_KEY_o,      spawn,      BM_PICK("_SURF_URI", "_SURF_GO") },
42++	{ MODKEY,                GDK_KEY_a,      spawn,      BM_ADD },
43++	{ MODKEY,				 GDK_KEY_d,      spawn,      BM_DEL },
44++
45+ 	{ 0,                     GDK_KEY_Escape, stop,       { 0 } },
46+ 	{ MODKEY,                GDK_KEY_c,      stop,       { 0 } },
47+ 	
48+diff --git a/surf.1 b/surf.1
49+index 78e8f9c..d9734cc 100644
50+--- a/surf.1
51++++ b/surf.1
52+@@ -158,6 +158,15 @@ Scroll horizontally to the right.
53+ .B Ctrl\-u
54+ Scroll horizontally to the left.
55+ .TP
56++.B Ctrl\-o
57++Show bookmarks.
58++.TP
59++.B Ctrl\-a
60++Bookmark current url.
61++.TP
62++.B Ctrl\-d
63++Delete bookmark.
64++.TP
65+ .B Ctrl\-Shift\-k or Ctrl\-+
66+ Zooms page in.
67+ .TP
68+-- 
69+2.43.0
70+
+7, -0
1@@ -0,0 +1,7 @@
2+https://dl.suckless.org/surf/surf-2.1.tar.gz
3+patches/0001-remove-the-need-for-gcr.patch
4+patches/0002-set-cache-cookiedir-to-tmp-and-the-rest-to-etc-surf.patch
5+patches/0003-add-quit-hotkey.patch
6+patches/0004-apply-searchengines-patch.patch
7+patches/0005-use-clipboard.patch
8+patches/0006-add-bookmarking-using-bmks.patch
+1, -0
1@@ -0,0 +1 @@
2+2.1 3
+1, -2
 1@@ -1,9 +1,8 @@
 2-freetype make
 3+freetype-harfbuzz make
 4 libXdmcp make make
 5 libXfont make
 6 libXtst make
 7 libfontenc make
 8 libpng make
 9-#linux-headers make
10 xtrans make
11 zlib make
+6, -0
1@@ -0,0 +1,6 @@
2+#!/bin/sh -e
3+
4+export DESTDIR="$1"
5+
6+make
7+make prefix=/ install
+1, -0
1@@ -0,0 +1 @@
2+git+https://github.com/fanf2/unifdef
+1, -0
1@@ -0,0 +1 @@
2+git+https://github.com/fanf2/unifdef
+1, -0
1@@ -0,0 +1 @@
2+git 1
+31, -0
 1@@ -0,0 +1,31 @@
 2+#!/bin/sh -e
 3+
 4+while read -r p; do
 5+    patch -p1 < "$p"
 6+done < series
 7+
 8+export DESTDIR="$1"
 9+export LDFLAGS="$LDFLAGS -static -L/src/oakiss/out/pkg/bzip2"
10+export CFLAGS="$CFLAGS \
11+	-I/src/oakiss/pkg/bzip2/src \
12+	-D_FILE_OFFSET_BITS=64 \
13+	-DWILD_STOP_AT_DIR \
14+	-DLARGE_FILE_SUPPORT \
15+	-DUNICODE_SUPPORT \
16+	-DUNICODE_WCHAR \
17+	-DUTF8_MAYBE_NATIVE \
18+	-DNO_LCHMOD \
19+	-LDDATE_FORMAT=DF_YMD \
20+	-DUSE_BZIP2 \
21+	-DNATIVE"
22+
23+make \
24+    D_USE_BZ2=-DUSE_BZIP2 L_BZ2=-lbz2 \
25+    LF2="$LDFLAGS" CF="$CFLAGS $CPPFLAGS -I." \
26+    prefix="$1/" \
27+    -f unix/Makefile unzips
28+
29+make \
30+    prefix="$1/"  \
31+    MANDIR=/share/man/man1 \
32+    -f unix/Makefile install
+32, -0
 1@@ -0,0 +1,32 @@
 2+5969810311361d686f6408091d60d0a36bf29f1abfae05831be9c42e69aaf67f6f
 3+39546eeb15e841aed165741093c0896d31f35ac38024dfa3960f0d5bb47997ebef
 4+e13b7cbb6e5005eaeb5147c189b8f93beded83d314eeba08a6cc454fc43ffc44d2
 5+5fdc4d182ad2d78462ca09e87de943b70aa063048d9d3768decf5e9f2f5a96b7c4
 6+0036e591b726d54ce562f609f9d74713449278dab9040c95c4dbcbd9ca30ea915f
 7+3715bf8ac1e3ff56082c6b431868bce7938d64bd25efc033814d7a67d66f9a6199
 8+c17fa198734ff19d78410f2c334a11977a5cee98e05a75fe227c41ab1cfc33a950
 9+4d169d70763fd28d8e1185481fc46fbe6ef640227d4b02a91770a595aaeefd02a5
10+6ff406487a846aa3222dae6fa9b95df36a54ace3047a150a70217c92e96f28d130
11+440ac6b17647bcc39765dc776a18b922d759bc346f5d0be8807188a43ed4c5a07b
12+df311a6c578ce88d750473ca2113bb9d87ce0f036cf1c101f602e17c67cc74b8ac
13+0b4b8e3965fffb111ccb82cad1a278675167d0f47aa35549d9fcbb634e93fd5575
14+f9cb4800cea71b4b2cbb1a1adf05e9e3f33c7c1394073e2e545c438d60300ec683
15+f584d7caffee134588c4008c0bb269b56b885a6779db4e82913c44dd6b35ef5f1e
16+2bac1b5b7039eaf8e5bcbf2d15b4c096a70b57ee7d61e8e14d0809df0090b10dc2
17+4dbcf9da1545f94a279d11a513f6febfb1d6d88d11100b7e28d2fefd6fffe9d05e
18+ec11baa02294b90c915300e209ae8f8747cc0ba14c54dc543f125dfd7a73f3c430
19+9cfe62e834de2d2513bd820ef84db55a7911188640813cd41cc164768e24ad509b
20+9871056e67f47ce9698b5bb50e8f65cf2e750a4f6c6af53304df1f4c40ebfbc77d
21+22be381e9e86b37282920418d14265d027ea434fad79b952482d409db3eec61470
22+9361c0f0ae89fa398c998662a15468feb0d035789b93aafc500898fdac00801a3b
23+ee4f8f10a83d1a23bfd35fbdefb97ec927383c2ba0105c28af8497964cef585f7c
24+8f53b98ad3d0d3601395c77150597fefabfdcb9d3a4f3b7e7d5f61471446fa2403
25+46816b2fd0c0121d3ef4662b9fc6531b88e1eed9007cf3c9c248c58a15c4b3b318
26+62eada60854366ff9db91fcf5d1450e28205faca989156adda1fe771a690821a89
27+6299ee334b4fe591f7c03830284f372265fec966d4b8436b0bfe08d6ae175d55f7
28+6be08aed32aea14744aba5adec840ecfb6721fecea784807ad4c4179832aa6ece3
29+da70d8638d7f933f1ad626fa6b6683dc50e0f9ec10db1ba446ca1b9b22783e5c70
30+4230500331de2ec2a090ea5ec3865afdc29b14691a5623e880add75e510ce17052
31+1c752da7d554901b29f43aaeb427776359dc4cc4b378e454b29dee26cb64ef3154
32+92ae3240adee386963fa34241435c9955aedc3e37203752ec37cb1a5d36dd87ddf
33+6abdb144fbdaa1cf3c498c7c71ea6ca317f0326d36fb1e4c0d3096650d0d8fb783
+39, -0
 1@@ -0,0 +1,39 @@
 2+From 754137e70cf58a64ad524b704a86b651ba0cde07 Mon Sep 17 00:00:00 2001
 3+From: Petr Stodulka <pstodulk@redhat.com>
 4+Date: Wed, 14 Dec 2016 16:30:36 +0100
 5+Subject: [PATCH] Fix CVE-2016-9844 (rhbz#1404283)
 6+
 7+Fixes buffer overflow in zipinfo in similar way like fix for
 8+CVE-2014-9913 provided by upstream.
 9+---
10+ zipinfo.c | 14 +++++++++++++-
11+ 1 file changed, 13 insertions(+), 1 deletion(-)
12+
13+diff --git a/zipinfo.c b/zipinfo.c
14+index c03620e..accca2a 100644
15+--- a/zipinfo.c
16++++ b/zipinfo.c
17+@@ -1984,7 +1984,19 @@ static int zi_short(__G)   /* return PK-type error code */
18+         ush  dnum=(ush)((G.crec.general_purpose_bit_flag>>1) & 3);
19+         methbuf[3] = dtype[dnum];
20+     } else if (methnum >= NUM_METHODS) {   /* unknown */
21+-        sprintf(&methbuf[1], "%03u", G.crec.compression_method);
22++        /* 2016-12-05 SMS.
23++         * https://launchpad.net/bugs/1643750
24++         * Unexpectedly large compression methods overflow
25++         * &methbuf[].  Use the old, three-digit decimal format
26++         * for values which fit.  Otherwise, sacrifice the "u",
27++         * and use four-digit hexadecimal.
28++         */
29++        if (G.crec.compression_method <= 999) {
30++              sprintf( &methbuf[ 1], "%03u", G.crec.compression_method);
31++        } else {
32++              sprintf( &methbuf[ 0], "%04X", G.crec.compression_method);
33++        }
34++
35+     }
36+ 
37+     for (k = 0;  k < 15;  ++k)
38+-- 
39+2.5.5
40+
+30, -0
 1@@ -0,0 +1,30 @@
 2+unzip-6.0-bzip2-configure.patch
 3+unzip-6.0-exec-shield.patch
 4+unzip-6.0-close.patch
 5+unzip-6.0-attribs-overflow.patch
 6+unzip-6.0-configure.patch
 7+unzip-6.0-manpage-fix.patch
 8+unzip-6.0-fix-recmatch.patch
 9+unzip-6.0-symlink.patch
10+unzip-6.0-caseinsensitive.patch
11+unzip-6.0-format-secure.patch
12+unzip-6.0-valgrind.patch
13+unzip-6.0-x-option.patch
14+unzip-6.0-overflow.patch
15+unzip-6.0-cve-2014-8139.patch
16+unzip-6.0-cve-2014-8140.patch
17+unzip-6.0-cve-2014-8141.patch
18+unzip-6.0-overflow-long-fsize.patch
19+unzip-6.0-heap-overflow-infloop.patch
20+unzip-6.0-alt-iconv-utf8.patch
21+unzip-6.0-alt-iconv-utf8-print.patch
22+0001-Fix-CVE-2016-9844-rhbz-1404283.patch
23+unzip-6.0-timestamp.patch
24+unzip-6.0-cve-2018-1000035-heap-based-overflow.patch
25+unzip-6.0-cve-2018-18384.patch
26+unzip-6.0-COVSCAN-fix-unterminated-string.patch
27+unzip-zipbomb-part1.patch
28+unzip-zipbomb-part2.patch
29+unzip-zipbomb-part3.patch
30+unzip-zipbomb-manpage.patch
31+unzip-6.0_CVE-2021-4217.patch
+131, -0
  1@@ -0,0 +1,131 @@
  2+From 06d1b08aef94984256cad3c5a54cedb10295681f Mon Sep 17 00:00:00 2001
  3+From: Jakub Martisko <jamartis@redhat.com>
  4+Date: Thu, 8 Nov 2018 09:31:18 +0100
  5+Subject: [PATCH] Possible unterminated string fix
  6+
  7+---
  8+ unix/unix.c   |  4 +++-
  9+ unix/unxcfg.h |  2 +-
 10+ unzip.c       | 12 ++++++++----
 11+ zipinfo.c     | 12 ++++++++----
 12+ 4 files changed, 20 insertions(+), 10 deletions(-)
 13+
 14+diff --git a/unix/unix.c b/unix/unix.c
 15+index 59b622d..cd57f80 100644
 16+--- a/unix/unix.c
 17++++ b/unix/unix.c
 18+@@ -1945,7 +1945,9 @@ void init_conversion_charsets()
 19+     	for(i = 0; i < sizeof(dos_charset_map)/sizeof(CHARSET_MAP); i++)
 20+     		if(!strcasecmp(local_charset, dos_charset_map[i].local_charset)) {
 21+     			strncpy(OEM_CP, dos_charset_map[i].archive_charset,
 22+-    					sizeof(OEM_CP));
 23++    					MAX_CP_NAME - 1);
 24++
 25++			OEM_CP[MAX_CP_NAME - 1] = '\0';
 26+     			break;
 27+     		}
 28+     }
 29+diff --git a/unix/unxcfg.h b/unix/unxcfg.h
 30+index 8729de2..9ee8cfe 100644
 31+--- a/unix/unxcfg.h
 32++++ b/unix/unxcfg.h
 33+@@ -228,7 +228,7 @@ typedef struct stat z_stat;
 34+ /*    and notfirstcall are used by do_wild().                          */
 35+ 
 36+ 
 37+-#define MAX_CP_NAME 25 
 38++#define MAX_CP_NAME 25 + 1 
 39+    
 40+ #ifdef SETLOCALE
 41+ #  undef SETLOCALE
 42+diff --git a/unzip.c b/unzip.c
 43+index 2d94a38..a485f2b 100644
 44+--- a/unzip.c
 45++++ b/unzip.c
 46+@@ -1561,7 +1561,8 @@ int uz_opts(__G__ pargc, pargv)
 47+         		                  "error:  a valid character encoding should follow the -I argument"));
 48+     	                        return(PK_PARAM); 
 49+     						}
 50+-    						strncpy(ISO_CP, s, sizeof(ISO_CP));
 51++    						strncpy(ISO_CP, s, MAX_CP_NAME - 1);
 52++                ISO_CP[MAX_CP_NAME - 1] = '\0';
 53+     					} else { /* -I charset */
 54+     						++argv;
 55+     						if(!(--argc > 0 && *argv != NULL && **argv != '-')) {
 56+@@ -1570,7 +1571,8 @@ int uz_opts(__G__ pargc, pargv)
 57+     	                        return(PK_PARAM); 
 58+     						}
 59+     						s = *argv;
 60+-    						strncpy(ISO_CP, s, sizeof(ISO_CP));
 61++    						strncpy(ISO_CP, s, MAX_CP_NAME - 1);
 62++                ISO_CP[MAX_CP_NAME - 1] = '\0';
 63+     					}
 64+     					while(*(++s)); /* No params straight after charset name */
 65+     				}
 66+@@ -1665,7 +1667,8 @@ int uz_opts(__G__ pargc, pargv)
 67+         		                  "error:  a valid character encoding should follow the -I argument"));
 68+     	                        return(PK_PARAM); 
 69+     						}
 70+-    						strncpy(OEM_CP, s, sizeof(OEM_CP));
 71++    						strncpy(OEM_CP, s, MAX_CP_NAME - 1);
 72++                OEM_CP[MAX_CP_NAME - 1] = '\0';
 73+     					} else { /* -O charset */
 74+     						++argv;
 75+     						if(!(--argc > 0 && *argv != NULL && **argv != '-')) {
 76+@@ -1674,7 +1677,8 @@ int uz_opts(__G__ pargc, pargv)
 77+     	                        return(PK_PARAM); 
 78+     						}
 79+     						s = *argv;
 80+-    						strncpy(OEM_CP, s, sizeof(OEM_CP));
 81++    						strncpy(OEM_CP, s, MAX_CP_NAME - 1);
 82++                OEM_CP[MAX_CP_NAME - 1] = '\0';
 83+     					}
 84+     					while(*(++s)); /* No params straight after charset name */
 85+     				}
 86+diff --git a/zipinfo.c b/zipinfo.c
 87+index accca2a..cb7e08d 100644
 88+--- a/zipinfo.c
 89++++ b/zipinfo.c
 90+@@ -519,7 +519,8 @@ int zi_opts(__G__ pargc, pargv)
 91+         		                  "error:  a valid character encoding should follow the -I argument"));
 92+     	                        return(PK_PARAM); 
 93+     						}
 94+-    						strncpy(ISO_CP, s, sizeof(ISO_CP));
 95++    						strncpy(ISO_CP, s, MAX_CP_NAME - 1);
 96++                ISO_CP[MAX_CP_NAME - 1] = '\0';
 97+     					} else { /* -I charset */
 98+     						++argv;
 99+     						if(!(--argc > 0 && *argv != NULL && **argv != '-')) {
100+@@ -528,7 +529,8 @@ int zi_opts(__G__ pargc, pargv)
101+     	                        return(PK_PARAM); 
102+     						}
103+     						s = *argv;
104+-    						strncpy(ISO_CP, s, sizeof(ISO_CP));
105++    						strncpy(ISO_CP, s, MAX_CP_NAME - 1);
106++                ISO_CP[MAX_CP_NAME - 1] = '\0';
107+     					}
108+     					while(*(++s)); /* No params straight after charset name */
109+     				}
110+@@ -568,7 +570,8 @@ int zi_opts(__G__ pargc, pargv)
111+         		                  "error:  a valid character encoding should follow the -I argument"));
112+     	                        return(PK_PARAM); 
113+     						}
114+-    						strncpy(OEM_CP, s, sizeof(OEM_CP));
115++    						strncpy(OEM_CP, s, MAX_CP_NAME - 1);
116++                OEM_CP[MAX_CP_NAME - 1] = '\0';
117+     					} else { /* -O charset */
118+     						++argv;
119+     						if(!(--argc > 0 && *argv != NULL && **argv != '-')) {
120+@@ -577,7 +580,8 @@ int zi_opts(__G__ pargc, pargv)
121+     	                        return(PK_PARAM); 
122+     						}
123+     						s = *argv;
124+-    						strncpy(OEM_CP, s, sizeof(OEM_CP));
125++    						strncpy(OEM_CP, s, MAX_CP_NAME - 1);
126++                OEM_CP[MAX_CP_NAME - 1] = '\0';
127+     					}
128+     					while(*(++s)); /* No params straight after charset name */
129+     				}
130+-- 
131+2.14.5
132+
+381, -0
  1@@ -0,0 +1,381 @@
  2+From ca0212ba19b64488b9e8459a762c11ecd6e7d0bd Mon Sep 17 00:00:00 2001
  3+From: Petr Stodulka <pstodulk@redhat.com>
  4+Date: Tue, 24 Nov 2015 17:56:11 +0100
  5+Subject: [PATCH] print correctly non-ascii filenames
  6+
  7+---
  8+ extract.c | 289 ++++++++++++++++++++++++++++++++++++++++++++++++--------------
  9+ unzpriv.h |   7 ++
 10+ 2 files changed, 233 insertions(+), 63 deletions(-)
 11+
 12+diff --git a/extract.c b/extract.c
 13+index 0ee4e93..741b7e0 100644
 14+--- a/extract.c
 15++++ b/extract.c
 16+@@ -2648,8 +2648,21 @@ static void set_deferred_symlink(__G__ slnk_entry)
 17+ } /* end function set_deferred_symlink() */
 18+ #endif /* SYMLINKS */
 19+ 
 20++/*
 21++ * If Unicode is supported, assume we have what we need to do this
 22++ * check using wide characters, avoiding MBCS issues.
 23++ */
 24+ 
 25+-
 26++#ifndef UZ_FNFILTER_REPLACECHAR
 27++        /* A convenient choice for the replacement of unprintable char codes is
 28++         * the "single char wildcard", as this character is quite unlikely to
 29++         * appear in filenames by itself.  The following default definition
 30++         * sets the replacement char to a question mark as the most common
 31++         * "single char wildcard"; this setting should be overridden in the
 32++         * appropiate system-specific configuration header when needed.
 33++         */
 34++# define UZ_FNFILTER_REPLACECHAR      '?'
 35++#endif
 36+ 
 37+ /*************************/
 38+ /*  Function fnfilter()  */        /* here instead of in list.c for SFX */
 39+@@ -2661,48 +2674,168 @@ char *fnfilter(raw, space, size)   /* convert name to safely printable form */
 40+     extent size;
 41+ {
 42+ #ifndef NATIVE   /* ASCII:  filter ANSI escape codes, etc. */
 43+-    ZCONST uch *r=(ZCONST uch *)raw;
 44++    ZCONST uch *r; // =(ZCONST uch *)raw;
 45+     uch *s=space;
 46+     uch *slim=NULL;
 47+     uch *se=NULL;
 48+     int have_overflow = FALSE;
 49+ 
 50+-    if (size > 0) {
 51+-        slim = space + size
 52+-#ifdef _MBCS
 53+-                     - (MB_CUR_MAX - 1)
 54+-#endif
 55+-                     - 4;
 56++# if defined( UNICODE_SUPPORT) && defined( _MBCS)
 57++/* If Unicode support is enabled, and we have multi-byte characters,
 58++ * then do the isprint() checks by first converting to wide characters
 59++ * and checking those.  This avoids our having to parse multi-byte
 60++ * characters for ourselves.  After the wide-char replacements have been
 61++ * made, the wide string is converted back to the local character set.
 62++ */
 63++    wchar_t *wstring;    /* wchar_t version of raw */
 64++    size_t wslen;        /* length of wstring */
 65++    wchar_t *wostring;   /* wchar_t version of output string */
 66++    size_t woslen;       /* length of wostring */
 67++    char *newraw;        /* new raw */
 68++
 69++    /* 2012-11-06 SMS.
 70++     * Changed to check the value returned by mbstowcs(), and bypass the
 71++     * Unicode processing if it fails.  This seems to fix a problem
 72++     * reported in the SourceForge forum, but it's not clear that we
 73++     * should be doing any Unicode processing without some evidence that
 74++     * the name actually is Unicode.  (Check bit 11 in the flags before
 75++     * coming here?)
 76++     * http://sourceforge.net/p/infozip/bugs/40/
 77++     */
 78++
 79++    if (MB_CUR_MAX <= 1)
 80++    {
 81++        /* There's no point to converting multi-byte chars if there are
 82++         * no multi-byte chars.
 83++         */
 84++        wslen = (size_t)-1;
 85+     }
 86+-    while (*r) {
 87+-        if (size > 0 && s >= slim && se == NULL) {
 88+-            se = s;
 89++    else
 90++    {
 91++        /* Get Unicode wide character count (for storage allocation). */
 92++        wslen = mbstowcs( NULL, raw, 0);
 93++    }
 94++
 95++    if (wslen != (size_t)-1)
 96++    {
 97++        /* Apparently valid Unicode.  Allocate wide-char storage. */
 98++        wstring = (wchar_t *)malloc((wslen + 1) * sizeof(wchar_t));
 99++        if (wstring == NULL) {
100++            strcpy( (char *)space, raw);
101++            return (char *)space;
102+         }
103+-#ifdef QDOS
104+-        if (qlflag & 2) {
105+-            if (*r == '/' || *r == '.') {
106++        wostring = (wchar_t *)malloc(2 * (wslen + 1) * sizeof(wchar_t));
107++        if (wostring == NULL) {
108++            free(wstring);
109++            strcpy( (char *)space, raw);
110++            return (char *)space;
111++        }
112++
113++        /* Convert the multi-byte Unicode to wide chars. */
114++        wslen = mbstowcs(wstring, raw, wslen + 1);
115++
116++        /* Filter the wide-character string. */
117++        fnfilterw( wstring, wostring, (2 * (wslen + 1) * sizeof(wchar_t)));
118++
119++        /* Convert filtered wide chars back to multi-byte. */
120++        woslen = wcstombs( NULL, wostring, 0);
121++        if ((newraw = malloc(woslen + 1)) == NULL) {
122++            free(wstring);
123++            free(wostring);
124++            strcpy( (char *)space, raw);
125++            return (char *)space;
126++        }
127++        woslen = wcstombs( newraw, wostring, (woslen * MB_CUR_MAX) + 1);
128++
129++        if (size > 0) {
130++            slim = space + size - 4;
131++        }
132++        r = (ZCONST uch *)newraw;
133++        while (*r) {
134++            if (size > 0 && s >= slim && se == NULL) {
135++                se = s;
136++            }
137++#  ifdef QDOS
138++            if (qlflag & 2) {
139++                if (*r == '/' || *r == '.') {
140++                    if (se != NULL && (s > (space + (size-3)))) {
141++                        have_overflow = TRUE;
142++                        break;
143++                    }
144++                    ++r;
145++                    *s++ = '_';
146++                    continue;
147++                }
148++            } else
149++#  endif
150++            {
151+                 if (se != NULL && (s > (space + (size-3)))) {
152+                     have_overflow = TRUE;
153+                     break;
154+                 }
155+-                ++r;
156+-                *s++ = '_';
157+-                continue;
158++                *s++ = *r++;
159+             }
160+-        } else
161++        }
162++        if (have_overflow) {
163++            strcpy((char *)se, "...");
164++        } else {
165++            *s = '\0';
166++        }
167++
168++        free(wstring);
169++        free(wostring);
170++        free(newraw);
171++    }
172++    else
173++# endif /* defined( UNICODE_SUPPORT) && defined( _MBCS) */
174++    {
175++        /* No Unicode support, or apparently invalid Unicode. */
176++        r = (ZCONST uch *)raw;
177++
178++        if (size > 0) {
179++            slim = space + size
180++#ifdef _MBCS
181++                         - (MB_CUR_MAX - 1)
182++#endif
183++                         - 4;
184++        }
185++        while (*r) {
186++            if (size > 0 && s >= slim && se == NULL) {
187++                se = s;
188++            }
189++#ifdef QDOS
190++            if (qlflag & 2) {
191++                if (*r == '/' || *r == '.') {
192++                    if (se != NULL && (s > (space + (size-3)))) {
193++                        have_overflow = TRUE;
194++                        break;
195++                    }
196++                    ++r;
197++                    *s++ = '_';
198++                    continue;
199++                }
200++            } else
201+ #endif
202+ #ifdef HAVE_WORKING_ISPRINT
203+-# ifndef UZ_FNFILTER_REPLACECHAR
204+-    /* A convenient choice for the replacement of unprintable char codes is
205+-     * the "single char wildcard", as this character is quite unlikely to
206+-     * appear in filenames by itself.  The following default definition
207+-     * sets the replacement char to a question mark as the most common
208+-     * "single char wildcard"; this setting should be overridden in the
209+-     * appropiate system-specific configuration header when needed.
210+-     */
211+-#   define UZ_FNFILTER_REPLACECHAR      '?'
212+-# endif
213+-        if (!isprint(*r)) {
214++            if (!isprint(*r)) {
215++                if (*r < 32) {
216++                    /* ASCII control codes are escaped as "^{letter}". */
217++                    if (se != NULL && (s > (space + (size-4)))) {
218++                        have_overflow = TRUE;
219++                        break;
220++                    }
221++                    *s++ = '^', *s++ = (uch)(64 + *r++);
222++                } else {
223++                    /* Other unprintable codes are replaced by the
224++                     * placeholder character. */
225++                    if (se != NULL && (s > (space + (size-3)))) {
226++                        have_overflow = TRUE;
227++                        break;
228++                    }
229++                    *s++ = UZ_FNFILTER_REPLACECHAR;
230++                    INCSTR(r);
231++                }
232++#else /* !HAVE_WORKING_ISPRINT */
233+             if (*r < 32) {
234+                 /* ASCII control codes are escaped as "^{letter}". */
235+                 if (se != NULL && (s > (space + (size-4)))) {
236+@@ -2710,47 +2843,30 @@ char *fnfilter(raw, space, size)   /* convert name to safely printable form */
237+                     break;
238+                 }
239+                 *s++ = '^', *s++ = (uch)(64 + *r++);
240++#endif /* ?HAVE_WORKING_ISPRINT */
241+             } else {
242+-                /* Other unprintable codes are replaced by the
243+-                 * placeholder character. */
244++#ifdef _MBCS
245++                unsigned i = CLEN(r);
246++                if (se != NULL && (s > (space + (size-i-2)))) {
247++                    have_overflow = TRUE;
248++                    break;
249++                }
250++                for (; i > 0; i--)
251++                    *s++ = *r++;
252++#else
253+                 if (se != NULL && (s > (space + (size-3)))) {
254+                     have_overflow = TRUE;
255+                     break;
256+                 }
257+-                *s++ = UZ_FNFILTER_REPLACECHAR;
258+-                INCSTR(r);
259+-            }
260+-#else /* !HAVE_WORKING_ISPRINT */
261+-        if (*r < 32) {
262+-            /* ASCII control codes are escaped as "^{letter}". */
263+-            if (se != NULL && (s > (space + (size-4)))) {
264+-                have_overflow = TRUE;
265+-                break;
266+-            }
267+-            *s++ = '^', *s++ = (uch)(64 + *r++);
268+-#endif /* ?HAVE_WORKING_ISPRINT */
269+-        } else {
270+-#ifdef _MBCS
271+-            unsigned i = CLEN(r);
272+-            if (se != NULL && (s > (space + (size-i-2)))) {
273+-                have_overflow = TRUE;
274+-                break;
275+-            }
276+-            for (; i > 0; i--)
277+                 *s++ = *r++;
278+-#else
279+-            if (se != NULL && (s > (space + (size-3)))) {
280+-                have_overflow = TRUE;
281+-                break;
282+-            }
283+-            *s++ = *r++;
284+ #endif
285+-         }
286+-    }
287+-    if (have_overflow) {
288+-        strcpy((char *)se, "...");
289+-    } else {
290+-        *s = '\0';
291++             }
292++        }
293++        if (have_overflow) {
294++            strcpy((char *)se, "...");
295++        } else {
296++            *s = '\0';
297++        }
298+     }
299+ 
300+ #ifdef WINDLL
301+@@ -2772,6 +2888,53 @@ char *fnfilter(raw, space, size)   /* convert name to safely printable form */
302+ } /* end function fnfilter() */
303+ 
304+ 
305++#if defined( UNICODE_SUPPORT) && defined( _MBCS)
306++
307++/****************************/
308++/*  Function fnfilter[w]()  */  /* (Here instead of in list.c for SFX.) */
309++/****************************/
310++
311++/* fnfilterw() - Convert wide name to safely printable form. */
312++
313++/* fnfilterw() - Convert wide-character name to safely printable form. */
314++
315++wchar_t *fnfilterw( src, dst, siz)
316++    ZCONST wchar_t *src;        /* Pointer to source char (string). */
317++    wchar_t *dst;               /* Pointer to destination char (string). */
318++    extent siz;                 /* Not used (!). */
319++{
320++    wchar_t *dsx = dst;
321++
322++    /* Filter the wide chars. */
323++    while (*src)
324++    {
325++        if (iswprint( *src))
326++        {
327++            /* Printable code.  Copy it. */
328++            *dst++ = *src;
329++        }
330++        else
331++        {
332++            /* Unprintable code.  Substitute something printable for it. */
333++            if (*src < 32)
334++            {
335++                /* Replace ASCII control code with "^{letter}". */
336++                *dst++ = (wchar_t)'^';
337++                *dst++ = (wchar_t)(64 + *src);
338++            }
339++            else
340++            {
341++                /* Replace other unprintable code with the placeholder. */
342++                *dst++ = (wchar_t)UZ_FNFILTER_REPLACECHAR;
343++            }
344++        }
345++        src++;
346++    }
347++    *dst = (wchar_t)0;  /* NUL-terminate the destination string. */
348++    return dsx;
349++} /* fnfilterw(). */
350++
351++#endif /* defined( UNICODE_SUPPORT) && defined( _MBCS) */
352+ 
353+ 
354+ #ifdef SET_DIR_ATTRIB
355+diff --git a/unzpriv.h b/unzpriv.h
356+index 22d3923..e48a652 100644
357+--- a/unzpriv.h
358++++ b/unzpriv.h
359+@@ -1212,6 +1212,7 @@
360+ # ifdef UNICODE_WCHAR
361+ #  if !(defined(_WIN32_WCE) || defined(POCKET_UNZIP))
362+ #   include <wchar.h>
363++#   include <wctype.h>
364+ #  endif
365+ # endif
366+ # ifndef _MBCS  /* no need to include <locale.h> twice, see below */
367+@@ -2410,6 +2411,12 @@ int    memflush                  OF((__GPRO__ ZCONST uch *rawbuf, ulg size));
368+ char  *fnfilter                  OF((ZCONST char *raw, uch *space,
369+                                      extent size));
370+ 
371++# if defined( UNICODE_SUPPORT) && defined( _MBCS)
372++wchar_t *fnfilterw               OF((ZCONST wchar_t *src, wchar_t *dst,
373++                                     extent siz));
374++#endif
375++
376++
377+ /*---------------------------------------------------------------------------
378+     Decompression functions:
379+   ---------------------------------------------------------------------------*/
380+-- 
381+2.4.3
382+
+398, -0
  1@@ -0,0 +1,398 @@
  2+From: Giovanni Scafora <giovanni.archlinux.org>
  3+Subject: unzip files encoded with non-latin, non-unicode file names
  4+Last-Update: 2015-02-11
  5+
  6+Updated 2015-02-11 by Marc Deslauriers <marc.deslauriers@canonical.com>
  7+to fix buffer overflow in charset_to_intern()
  8+
  9+Index: unzip-6.0/unix/unix.c
 10+===================================================================
 11+--- unzip-6.0.orig/unix/unix.c	2015-02-11 08:46:43.675324290 -0500
 12++++ unzip-6.0/unix/unix.c	2015-02-11 09:18:04.902081319 -0500
 13+@@ -30,6 +30,9 @@
 14+ #define UNZIP_INTERNAL
 15+ #include "unzip.h"
 16+ 
 17++#include <iconv.h>
 18++#include <langinfo.h>
 19++
 20+ #ifdef SCO_XENIX
 21+ #  define SYSNDIR
 22+ #else  /* SCO Unix, AIX, DNIX, TI SysV, Coherent 4.x, ... */
 23+@@ -1874,3 +1877,102 @@
 24+     }
 25+ }
 26+ #endif /* QLZIP */
 27++
 28++
 29++typedef struct {
 30++    char *local_charset;
 31++    char *archive_charset;
 32++} CHARSET_MAP;
 33++
 34++/* A mapping of local <-> archive charsets used by default to convert filenames
 35++ * of DOS/Windows Zip archives. Currently very basic. */
 36++static CHARSET_MAP dos_charset_map[] = {
 37++    { "ANSI_X3.4-1968", "CP850" },
 38++    { "ISO-8859-1", "CP850" },
 39++    { "CP1252", "CP850" },
 40++    { "UTF-8", "CP866" },
 41++    { "KOI8-R", "CP866" },
 42++    { "KOI8-U", "CP866" },
 43++    { "ISO-8859-5", "CP866" }
 44++};
 45++
 46++char OEM_CP[MAX_CP_NAME] = "";
 47++char ISO_CP[MAX_CP_NAME] = "";
 48++
 49++/* Try to guess the default value of OEM_CP based on the current locale.
 50++ * ISO_CP is left alone for now. */
 51++void init_conversion_charsets()
 52++{
 53++    const char *local_charset;
 54++    int i;
 55++
 56++    /* Make a guess only if OEM_CP not already set. */ 
 57++    if(*OEM_CP == '\0') {
 58++    	local_charset = nl_langinfo(CODESET);
 59++    	for(i = 0; i < sizeof(dos_charset_map)/sizeof(CHARSET_MAP); i++)
 60++    		if(!strcasecmp(local_charset, dos_charset_map[i].local_charset)) {
 61++    			strncpy(OEM_CP, dos_charset_map[i].archive_charset,
 62++    					sizeof(OEM_CP));
 63++    			break;
 64++    		}
 65++    }
 66++}
 67++
 68++/* Convert a string from one encoding to the current locale using iconv().
 69++ * Be as non-intrusive as possible. If error is encountered during covertion
 70++ * just leave the string intact. */
 71++static void charset_to_intern(char *string, char *from_charset)
 72++{
 73++    iconv_t cd;
 74++    char *s,*d, *buf;
 75++    size_t slen, dlen, buflen;
 76++    const char *local_charset;
 77++
 78++    if(*from_charset == '\0')
 79++    	return;
 80++
 81++    buf = NULL;
 82++    local_charset = nl_langinfo(CODESET);
 83++
 84++    if((cd = iconv_open(local_charset, from_charset)) == (iconv_t)-1)
 85++        return;
 86++
 87++    slen = strlen(string);
 88++    s = string;
 89++
 90++    /*  Make sure OUTBUFSIZ + 1 never ends up smaller than FILNAMSIZ
 91++     *  as this function also gets called with G.outbuf in fileio.c
 92++     */
 93++    buflen = FILNAMSIZ;
 94++    if (OUTBUFSIZ + 1 < FILNAMSIZ)
 95++    {
 96++        buflen = OUTBUFSIZ + 1;
 97++    }
 98++
 99++    d = buf = malloc(buflen);
100++    if(!d)
101++    	goto cleanup;
102++
103++    bzero(buf,buflen);
104++    dlen = buflen - 1;
105++
106++    if(iconv(cd, &s, &slen, &d, &dlen) == (size_t)-1)
107++    	goto cleanup;
108++    strncpy(string, buf, buflen);
109++
110++    cleanup:
111++    free(buf);
112++    iconv_close(cd);
113++}
114++
115++/* Convert a string from OEM_CP to the current locale charset. */
116++inline void oem_intern(char *string)
117++{
118++    charset_to_intern(string, OEM_CP);
119++}
120++
121++/* Convert a string from ISO_CP to the current locale charset. */
122++inline void iso_intern(char *string)
123++{
124++    charset_to_intern(string, ISO_CP);
125++}
126+Index: unzip-6.0/unix/unxcfg.h
127+===================================================================
128+--- unzip-6.0.orig/unix/unxcfg.h	2015-02-11 08:46:43.675324290 -0500
129++++ unzip-6.0/unix/unxcfg.h	2015-02-11 08:46:43.671324260 -0500
130+@@ -228,4 +228,30 @@
131+ /* wild_dir, dirname, wildname, matchname[], dirnamelen, have_dirname, */
132+ /*    and notfirstcall are used by do_wild().                          */
133+ 
134++
135++#define MAX_CP_NAME 25 
136++   
137++#ifdef SETLOCALE
138++#  undef SETLOCALE
139++#endif
140++#define SETLOCALE(category, locale) setlocale(category, locale)
141++#include <locale.h>
142++   
143++#ifdef _ISO_INTERN
144++#  undef _ISO_INTERN
145++#endif
146++#define _ISO_INTERN(str1) iso_intern(str1)
147++
148++#ifdef _OEM_INTERN
149++#  undef _OEM_INTERN
150++#endif
151++#ifndef IZ_OEM2ISO_ARRAY
152++#  define IZ_OEM2ISO_ARRAY
153++#endif
154++#define _OEM_INTERN(str1) oem_intern(str1)
155++
156++void iso_intern(char *);
157++void oem_intern(char *);
158++void init_conversion_charsets(void);
159++   
160+ #endif /* !__unxcfg_h */
161+Index: unzip-6.0/unzip.c
162+===================================================================
163+--- unzip-6.0.orig/unzip.c	2015-02-11 08:46:43.675324290 -0500
164++++ unzip-6.0/unzip.c	2015-02-11 08:46:43.675324290 -0500
165+@@ -327,11 +327,21 @@
166+   -2  just filenames but allow -h/-t/-z  -l  long Unix \"ls -l\" format\n\
167+                                          -v  verbose, multi-page format\n";
168+ 
169++#ifndef UNIX
170+ static ZCONST char Far ZipInfoUsageLine3[] = "miscellaneous options:\n\
171+   -h  print header line       -t  print totals for listed files or for all\n\
172+   -z  print zipfile comment   -T  print file times in sortable decimal format\
173+ \n  -C  be case-insensitive   %s\
174+   -x  exclude filenames that follow from listing\n";
175++#else /* UNIX */
176++static ZCONST char Far ZipInfoUsageLine3[] = "miscellaneous options:\n\
177++  -h  print header line       -t  print totals for listed files or for all\n\
178++  -z  print zipfile comment  %c-T%c print file times in sortable decimal format\
179++\n %c-C%c be case-insensitive   %s\
180++  -x  exclude filenames that follow from listing\n\
181++  -O CHARSET  specify a character encoding for DOS, Windows and OS/2 archives\n\
182++  -I CHARSET  specify a character encoding for UNIX and other archives\n";
183++#endif /* !UNIX */
184+ #ifdef MORE
185+    static ZCONST char Far ZipInfoUsageLine4[] =
186+      "  -M  page output through built-in \"more\"\n";
187+@@ -664,6 +674,17 @@
188+   -U  use escapes for all non-ASCII Unicode  -UU ignore any Unicode fields\n\
189+   -C  match filenames case-insensitively     -L  make (some) names \
190+ lowercase\n %-42s  -V  retain VMS version numbers\n%s";
191++#elif (defined UNIX)
192++static ZCONST char Far UnzipUsageLine4[] = "\
193++modifiers:\n\
194++  -n  never overwrite existing files         -q  quiet mode (-qq => quieter)\n\
195++  -o  overwrite files WITHOUT prompting      -a  auto-convert any text files\n\
196++  -j  junk paths (do not make directories)   -aa treat ALL files as text\n\
197++  -U  use escapes for all non-ASCII Unicode  -UU ignore any Unicode fields\n\
198++  -C  match filenames case-insensitively     -L  make (some) names \
199++lowercase\n %-42s  -V  retain VMS version numbers\n%s\
200++  -O CHARSET  specify a character encoding for DOS, Windows and OS/2 archives\n\
201++  -I CHARSET  specify a character encoding for UNIX and other archives\n\n";
202+ #else /* !VMS */
203+ static ZCONST char Far UnzipUsageLine4[] = "\
204+ modifiers:\n\
205+@@ -802,6 +823,10 @@
206+ #endif /* UNICODE_SUPPORT */
207+ 
208+ 
209++#ifdef UNIX
210++    init_conversion_charsets();
211++#endif
212++
213+ #if (defined(__IBMC__) && defined(__DEBUG_ALLOC__))
214+     extern void DebugMalloc(void);
215+ 
216+@@ -1335,6 +1360,11 @@
217+     argc = *pargc;
218+     argv = *pargv;
219+ 
220++#ifdef UNIX
221++    extern char OEM_CP[MAX_CP_NAME];
222++    extern char ISO_CP[MAX_CP_NAME];
223++#endif
224++    
225+     while (++argv, (--argc > 0 && *argv != NULL && **argv == '-')) {
226+         s = *argv + 1;
227+         while ((c = *s++) != 0) {    /* "!= 0":  prevent Turbo C warning */
228+@@ -1516,6 +1546,35 @@
229+                     }
230+                     break;
231+ #endif  /* MACOS */
232++#ifdef UNIX
233++    			case ('I'):
234++                    if (negative) {
235++                        Info(slide, 0x401, ((char *)slide,
236++                          "error:  encodings can't be negated"));
237++                        return(PK_PARAM);
238++    				} else {
239++    					if(*s) { /* Handle the -Icharset case */
240++    						/* Assume that charsets can't start with a dash to spot arguments misuse */
241++    						if(*s == '-') { 
242++    	                        Info(slide, 0x401, ((char *)slide,
243++        		                  "error:  a valid character encoding should follow the -I argument"));
244++    	                        return(PK_PARAM); 
245++    						}
246++    						strncpy(ISO_CP, s, sizeof(ISO_CP));
247++    					} else { /* -I charset */
248++    						++argv;
249++    						if(!(--argc > 0 && *argv != NULL && **argv != '-')) {
250++    	                        Info(slide, 0x401, ((char *)slide,
251++        		                  "error:  a valid character encoding should follow the -I argument"));
252++    	                        return(PK_PARAM); 
253++    						}
254++    						s = *argv;
255++    						strncpy(ISO_CP, s, sizeof(ISO_CP));
256++    					}
257++    					while(*(++s)); /* No params straight after charset name */
258++    				}
259++    				break;
260++#endif /* ?UNIX */
261+                 case ('j'):    /* junk pathnames/directory structure */
262+                     if (negative)
263+                         uO.jflag = FALSE, negative = 0;
264+@@ -1591,6 +1650,35 @@
265+                     } else
266+                         ++uO.overwrite_all;
267+                     break;
268++#ifdef UNIX
269++    			case ('O'):
270++                    if (negative) {
271++                        Info(slide, 0x401, ((char *)slide,
272++                          "error:  encodings can't be negated"));
273++                        return(PK_PARAM);
274++    				} else {
275++    					if(*s) { /* Handle the -Ocharset case */
276++    						/* Assume that charsets can't start with a dash to spot arguments misuse */
277++    						if(*s == '-') { 
278++    	                        Info(slide, 0x401, ((char *)slide,
279++        		                  "error:  a valid character encoding should follow the -I argument"));
280++    	                        return(PK_PARAM); 
281++    						}
282++    						strncpy(OEM_CP, s, sizeof(OEM_CP));
283++    					} else { /* -O charset */
284++    						++argv;
285++    						if(!(--argc > 0 && *argv != NULL && **argv != '-')) {
286++    	                        Info(slide, 0x401, ((char *)slide,
287++        		                  "error:  a valid character encoding should follow the -O argument"));
288++    	                        return(PK_PARAM); 
289++    						}
290++    						s = *argv;
291++    						strncpy(OEM_CP, s, sizeof(OEM_CP));
292++    					}
293++    					while(*(++s)); /* No params straight after charset name */
294++    				}
295++    				break;
296++#endif /* ?UNIX */
297+                 case ('p'):    /* pipes:  extract to stdout, no messages */
298+                     if (negative) {
299+                         uO.cflag = FALSE;
300+Index: unzip-6.0/unzpriv.h
301+===================================================================
302+--- unzip-6.0.orig/unzpriv.h	2015-02-11 08:46:43.675324290 -0500
303++++ unzip-6.0/unzpriv.h	2015-02-11 08:46:43.675324290 -0500
304+@@ -3008,7 +3008,7 @@
305+          !(((islochdr) || (isuxatt)) && \
306+            ((hostver) == 25 || (hostver) == 26 || (hostver) == 40))) || \
307+         (hostnum) == FS_HPFS_ || \
308+-        ((hostnum) == FS_NTFS_ && (hostver) == 50)) { \
309++        ((hostnum) == FS_NTFS_ /* && (hostver) == 50 */ )) { \
310+         _OEM_INTERN((string)); \
311+     } else { \
312+         _ISO_INTERN((string)); \
313+Index: unzip-6.0/zipinfo.c
314+===================================================================
315+--- unzip-6.0.orig/zipinfo.c	2015-02-11 08:46:43.675324290 -0500
316++++ unzip-6.0/zipinfo.c	2015-02-11 08:46:43.675324290 -0500
317+@@ -457,6 +457,10 @@
318+     int    tflag_slm=TRUE, tflag_2v=FALSE;
319+     int    explicit_h=FALSE, explicit_t=FALSE;
320+ 
321++#ifdef UNIX
322++    extern char OEM_CP[MAX_CP_NAME];
323++    extern char ISO_CP[MAX_CP_NAME];
324++#endif
325+ 
326+ #ifdef MACOS
327+     uO.lflag = LFLAG;         /* reset default on each call */
328+@@ -501,6 +505,35 @@
329+                             uO.lflag = 0;
330+                     }
331+                     break;
332++#ifdef UNIX
333++    			case ('I'):
334++                    if (negative) {
335++                        Info(slide, 0x401, ((char *)slide,
336++                          "error:  encodings can't be negated"));
337++                        return(PK_PARAM);
338++    				} else {
339++    					if(*s) { /* Handle the -Icharset case */
340++    						/* Assume that charsets can't start with a dash to spot arguments misuse */
341++    						if(*s == '-') { 
342++    	                        Info(slide, 0x401, ((char *)slide,
343++        		                  "error:  a valid character encoding should follow the -I argument"));
344++    	                        return(PK_PARAM); 
345++    						}
346++    						strncpy(ISO_CP, s, sizeof(ISO_CP));
347++    					} else { /* -I charset */
348++    						++argv;
349++    						if(!(--argc > 0 && *argv != NULL && **argv != '-')) {
350++    	                        Info(slide, 0x401, ((char *)slide,
351++        		                  "error:  a valid character encoding should follow the -I argument"));
352++    	                        return(PK_PARAM); 
353++    						}
354++    						s = *argv;
355++    						strncpy(ISO_CP, s, sizeof(ISO_CP));
356++    					}
357++    					while(*(++s)); /* No params straight after charset name */
358++    				}
359++    				break;
360++#endif /* ?UNIX */
361+                 case 'l':      /* longer form of "ls -l" type listing */
362+                     if (negative)
363+                         uO.lflag = -2, negative = 0;
364+@@ -521,6 +554,35 @@
365+                         G.M_flag = TRUE;
366+                     break;
367+ #endif
368++#ifdef UNIX
369++    			case ('O'):
370++                    if (negative) {
371++                        Info(slide, 0x401, ((char *)slide,
372++                          "error:  encodings can't be negated"));
373++                        return(PK_PARAM);
374++    				} else {
375++    					if(*s) { /* Handle the -Ocharset case */
376++    						/* Assume that charsets can't start with a dash to spot arguments misuse */
377++    						if(*s == '-') { 
378++    	                        Info(slide, 0x401, ((char *)slide,
379++        		                  "error:  a valid character encoding should follow the -I argument"));
380++    	                        return(PK_PARAM); 
381++    						}
382++    						strncpy(OEM_CP, s, sizeof(OEM_CP));
383++    					} else { /* -O charset */
384++    						++argv;
385++    						if(!(--argc > 0 && *argv != NULL && **argv != '-')) {
386++    	                        Info(slide, 0x401, ((char *)slide,
387++        		                  "error:  a valid character encoding should follow the -O argument"));
388++    	                        return(PK_PARAM); 
389++    						}
390++    						s = *argv;
391++    						strncpy(OEM_CP, s, sizeof(OEM_CP));
392++    					}
393++    					while(*(++s)); /* No params straight after charset name */
394++    				}
395++    				break;
396++#endif /* ?UNIX */
397+                 case 's':      /* default:  shorter "ls -l" type listing */
398+                     if (negative)
399+                         uO.lflag = -2, negative = 0;
+12, -0
 1@@ -0,0 +1,12 @@
 2+diff -up unzip60/zipinfo.c.attribs-overflow unzip60/zipinfo.c
 3+--- unzip60/zipinfo.c.attribs-overflow	2009-11-30 09:55:39.000000000 +0100
 4++++ unzip60/zipinfo.c	2009-11-30 09:56:42.844263244 +0100
 5+@@ -1881,7 +1881,7 @@ static int zi_short(__G)   /* return PK-
 6+ #endif
 7+     int         k, error, error_in_archive=PK_COOL;
 8+     unsigned    hostnum, hostver, methid, methnum, xattr;
 9+-    char        *p, workspace[12], attribs[16];
10++    char        *p, workspace[12], attribs[17];
11+     char        methbuf[5];
12+     static ZCONST char dtype[5]="NXFS"; /* normal, maximum, fast, superfast */
13+     static ZCONST char Far os[NUM_HOSTS+1][4] = {
+30, -0
 1@@ -0,0 +1,30 @@
 2+diff -up unzip60/unix/configure.bzip2-configure unzip60/unix/configure
 3+--- unzip60/unix/configure.bzip2-configure	2009-04-16 21:25:12.000000000 +0200
 4++++ unzip60/unix/configure	2009-11-18 11:22:14.598389194 +0100
 5+@@ -640,7 +640,24 @@ else
 6+     D_USE_BZ2="-DUSE_BZIP2"
 7+     L_BZ2="${BZLF} -lbz2"
 8+   else
 9+-    echo "-- bzip2 sources not found - no bzip2 support"
10++    echo "  Check if OS already has bzip2 library installed"
11++    cat > conftest.c << _EOF_
12++#include "bzlib.h"
13++int main()
14++{
15++  bz_stream strm;
16++  BZ2_bzCompressEnd(&strm);
17++  return 0;
18++}
19++_EOF_
20++    $CC $CFLAGS -o conftest conftest.c -lbz2 > /dev/null 2>/dev/null
21++    if test $? -eq 0; then
22++      echo "-- OS supports bzip2 - linking in bzip2"
23++      D_USE_BZ2="-DUSE_BZIP2"
24++      L_BZ2="${BZLF} -lbz2"
25++    else
26++      echo "-- Either bzlib.h or libbz2.a not found - no bzip2"
27++    fi
28+   fi
29+ fi
30+ 
31+ 
+131, -0
  1@@ -0,0 +1,131 @@
  2+diff --git a/match.c b/match.c
  3+index 6cd656f..4e569f5 100644
  4+--- a/match.c
  5++++ b/match.c
  6+@@ -190,10 +190,10 @@ char *___tmp_ptr;
  7+ 
  8+ #endif
  9+ 
 10+-static int recmatch(p, s, cs)
 11++static int recmatch(p, s, ci)
 12+ ZCONST char *p;         /* sh pattern to match */
 13+ ZCONST char *s;         /* string to match it to */
 14+-int cs;                 /* flag: force case-sensitive matching */
 15++int ci;                 /* flag: force case-insensitive matching */
 16+ /* Recursively compare the sh pattern p with the string s and return 1 if
 17+    they match, and 0 or 2 if they don't or if there is a syntax error in the
 18+    pattern.  This routine recurses on itself no deeper than the number of
 19+@@ -214,7 +214,7 @@ int cs;                 /* flag: force case-sensitive matching */
 20+   if (CLEN(p) == 2) {
 21+     if (CLEN(s) == 2) {
 22+       return (*p == *s && *(p+1) == *(s+1)) ?
 23+-        recmatch(p + 2, s + 2, cs) : 0;
 24++        recmatch(p + 2, s + 2, ci) : 0;
 25+     } else {
 26+       return 0;
 27+     }
 28+@@ -230,9 +230,9 @@ int cs;                 /* flag: force case-sensitive matching */
 29+   /* '?' (or '%' or '#') matches any character (but not an empty string) */
 30+   if (c == WILDCHR_SINGLE) {
 31+     if (wild_stop_at_dir)
 32+-      return (*s && *s != DIRSEP_CHR) ? recmatch(p, s + CLEN(s), cs) : 0;
 33++      return (*s && *s != DIRSEP_CHR) ? recmatch(p, s + CLEN(s), ci) : 0;
 34+     else
 35+-      return *s ? recmatch(p, s + CLEN(s), cs) : 0;
 36++      return *s ? recmatch(p, s + CLEN(s), ci) : 0;
 37+   }
 38+ 
 39+   /* WILDCHR_MULTI ('*') matches any number of characters, including zero */
 40+@@ -253,14 +253,14 @@ int cs;                 /* flag: force case-sensitive matching */
 41+ # endif /* ?AMIGA */
 42+         /* Single WILDCHR_MULTI ('*'): this doesn't match slashes */
 43+         for (; *s && *s != DIRSEP_CHR; INCSTR(s))
 44+-          if ((c = recmatch(p, s, cs)) != 0)
 45++          if ((c = recmatch(p, s, ci)) != 0)
 46+             return c;
 47+         /* end of pattern: matched if at end of string, else continue */
 48+         if (*p == 0)
 49+           return (*s == 0);
 50+         /* continue to match if at DIRSEP_CHR in pattern, else give up */
 51+         return (*p == DIRSEP_CHR || (*p == '\\' && p[1] == DIRSEP_CHR))
 52+-               ? recmatch(p, s, cs) : 2;
 53++               ? recmatch(p, s, ci) : 2;
 54+       }
 55+       /* Two consecutive WILDCHR_MULTI ("**"): this matches DIRSEP_CHR ('/') */
 56+       p++;        /* move p past the second WILDCHR_MULTI */
 57+@@ -308,17 +308,17 @@ int cs;                 /* flag: force case-sensitive matching */
 58+          */
 59+         if (q != srest)
 60+           return 0;
 61+-        return ((cs ? strcmp(p, q) : namecmp(p, q)) == 0);
 62++        return ((!ci ? strcmp(p, q) : namecmp(p, q)) == 0);
 63+       }
 64+ #else /* !_MBCS */
 65+-        return ((cs ? strcmp(p, srest) : namecmp(p, srest)) == 0);
 66++        return ((!ci ? strcmp(p, srest) : namecmp(p, srest)) == 0);
 67+ #endif /* ?_MBCS */
 68+     }
 69+     else
 70+     {
 71+       /* pattern contains more wildcards, continue with recursion... */
 72+       for (; *s; INCSTR(s))
 73+-        if ((c = recmatch(p, s, cs)) != 0)
 74++        if ((c = recmatch(p, s, ci)) != 0)
 75+           return c;
 76+       return 2;           /* 2 means give up--shmatch will return false */
 77+     }
 78+@@ -353,17 +353,17 @@ int cs;                 /* flag: force case-sensitive matching */
 79+         c = *(p-1);
 80+       else
 81+       {
 82+-        uch cc = (cs ? (uch)*s : case_map((uch)*s));
 83++        uch cc = (!ci ? (uch)*s : to_up((uch)*s));
 84+         uch uc = (uch) c;
 85+         if (*(p+1) != '-')
 86+           for (uc = uc ? uc : (uch)*p; uc <= (uch)*p; uc++)
 87+             /* compare range */
 88+-            if ((cs ? uc : case_map(uc)) == cc)
 89+-              return r ? 0 : recmatch(q + CLEN(q), s + CLEN(s), cs);
 90++            if ((!ci ? uc : to_up(uc)) == cc)
 91++              return r ? 0 : recmatch(q + CLEN(q), s + CLEN(s), ci);
 92+         c = e = 0;                      /* clear range, escape flags */
 93+       }
 94+     }
 95+-    return r ? recmatch(q + CLEN(q), s + CLEN(s), cs) : 0;
 96++    return r ? recmatch(q + CLEN(q), s + CLEN(s), ci) : 0;
 97+                                         /* bracket match failed */
 98+   }
 99+ #endif /* !VMS */
100+@@ -382,18 +382,18 @@ int cs;                 /* flag: force case-sensitive matching */
101+   {
102+     /* Match "...]" with "]".  Continue after "]" in both. */
103+     if ((*(p+ 2* CLEN( p)) == ']') && (*s == ']'))
104+-      return recmatch( (p+ 3* CLEN( p)), (s+ CLEN( s)), cs);
105++      return recmatch( (p+ 3* CLEN( p)), (s+ CLEN( s)), ci);
106+ 
107+     /* Else, look for a reduced match in s, until "]" in or end of s. */
108+     for (; *s && (*s != ']'); INCSTR(s))
109+       if (*s == '.')
110+         /* If reduced match, then continue after "..." in p, "." in s. */
111+-        if ((c = recmatch( (p+ CLEN( p)), s, cs)) != 0)
112++        if ((c = recmatch( (p+ CLEN( p)), s, ci)) != 0)
113+           return (int)c;
114+ 
115+     /* Match "...]" with "]".  Continue after "]" in both. */
116+     if ((*(p+ 2* CLEN( p)) == ']') && (*s == ']'))
117+-      return recmatch( (p+ 3* CLEN( p)), (s+ CLEN( s)), cs);
118++      return recmatch( (p+ 3* CLEN( p)), (s+ CLEN( s)), ci);
119+ 
120+     /* No reduced match.  Quit. */
121+     return 2;
122+@@ -402,8 +402,8 @@ int cs;                 /* flag: force case-sensitive matching */
123+ #endif /* def VMS */
124+ 
125+   /* Just a character--compare it */
126+-  return (cs ? c == *s : case_map((uch)c) == case_map((uch)*s)) ?
127+-          recmatch(p, s + CLEN(s), cs) : 0;
128++  return (!ci ? c == *s : to_up((uch)c) == to_up((uch)*s)) ?
129++          recmatch(p, s + CLEN(s), ci) : 0;
130+ }
131+ 
132+ 
+176, -0
  1@@ -0,0 +1,176 @@
  2+diff -up unzip60/extract.c.close unzip60/extract.c
  3+--- unzip60/extract.c.close	2009-03-14 02:32:52.000000000 +0100
  4++++ unzip60/extract.c	2009-11-19 08:17:23.481263496 +0100
  5+@@ -1924,24 +1924,21 @@ static int extract_or_test_member(__G)  
  6+ 
  7+ #ifdef VMS                  /* VMS:  required even for stdout! (final flush) */
  8+     if (!uO.tflag)           /* don't close NULL file */
  9+-        close_outfile(__G);
 10++        error = close_outfile(__G);
 11+ #else
 12+ #ifdef DLL
 13+     if (!uO.tflag && (!uO.cflag || G.redirect_data)) {
 14+         if (G.redirect_data)
 15+             FINISH_REDIRECT();
 16+         else
 17+-            close_outfile(__G);
 18++            error = close_outfile(__G);
 19+     }
 20+ #else
 21+     if (!uO.tflag && !uO.cflag)   /* don't close NULL file or stdout */
 22+-        close_outfile(__G);
 23++        error = close_outfile(__G);
 24+ #endif
 25+ #endif /* VMS */
 26+ 
 27+-            /* GRR: CONVERT close_outfile() TO NON-VOID:  CHECK FOR ERRORS! */
 28+-
 29+-
 30+     if (G.disk_full) {            /* set by flush() */
 31+         if (G.disk_full > 1) {
 32+ #if (defined(DELETE_IF_FULL) && defined(HAVE_UNLINK))
 33+diff -up unzip60/unix/unix.c.close unzip60/unix/unix.c
 34+--- unzip60/unix/unix.c.close	2009-01-24 00:31:26.000000000 +0100
 35++++ unzip60/unix/unix.c	2009-11-19 08:33:25.568389171 +0100
 36+@@ -1096,10 +1096,41 @@ static int get_extattribs(__G__ pzt, z_u
 37+ #ifndef MTS
 38+ 
 39+ /****************************/
 40++/* Function CloseError()    */
 41++/***************************/
 42++
 43++int CloseError(__G)
 44++    __GDEF
 45++{
 46++    int errval = PK_OK;
 47++    
 48++    if (fclose(G.outfile) < 0) {
 49++          switch (errno) {
 50++                case ENOSPC:
 51++                    /* Do we need this on fileio.c? */
 52++                    Info(slide, 0x4a1, ((char *)slide, "%s: write error (disk full?).   Continue? (y/n/^C) ",
 53++                          FnFilter1(G.filename)));
 54++                    fgets(G.answerbuf, 9, stdin);
 55++                    if (*G.answerbuf == 'y')     /* stop writing to this file */
 56++                        G.disk_full = 1;         /* pass to next */
 57++                    else
 58++                        G.disk_full = 2;         /* no: exit program */
 59++          
 60++                    errval = PK_DISK;
 61++                    break;
 62++
 63++                default:
 64++                    errval = PK_WARN;
 65++          }
 66++     }
 67++     return errval;
 68++} /* End of CloseError() */
 69++
 70++/****************************/
 71+ /* Function close_outfile() */
 72+ /****************************/
 73+ 
 74+-void close_outfile(__G)    /* GRR: change to return PK-style warning level */
 75++int close_outfile(__G) 
 76+     __GDEF
 77+ {
 78+     union {
 79+@@ -1108,6 +1139,7 @@ void close_outfile(__G)    /* GRR: chang
 80+     } zt;
 81+     ulg z_uidgid[2];
 82+     int have_uidgid_flg;
 83++    int errval = PK_OK;
 84+ 
 85+     have_uidgid_flg = get_extattribs(__G__ &(zt.t3), z_uidgid);
 86+ 
 87+@@ -1141,16 +1173,16 @@ void close_outfile(__G)    /* GRR: chang
 88+             Info(slide, 0x201, ((char *)slide,
 89+               "warning:  symbolic link (%s) failed: mem alloc overflow\n",
 90+               FnFilter1(G.filename)));
 91+-            fclose(G.outfile);
 92+-            return;
 93++            errval = CloseError(G.outfile, G.filename);
 94++            return errval ? errval : PK_WARN;
 95+         }
 96+ 
 97+         if ((slnk_entry = (slinkentry *)malloc(slnk_entrysize)) == NULL) {
 98+             Info(slide, 0x201, ((char *)slide,
 99+               "warning:  symbolic link (%s) failed: no mem\n",
100+               FnFilter1(G.filename)));
101+-            fclose(G.outfile);
102+-            return;
103++            errval = CloseError(G.outfile, G.filename);
104++            return errval ? errval : PK_WARN;
105+         }
106+         slnk_entry->next = NULL;
107+         slnk_entry->targetlen = ucsize;
108+@@ -1174,10 +1206,10 @@ void close_outfile(__G)    /* GRR: chang
109+               "warning:  symbolic link (%s) failed\n",
110+               FnFilter1(G.filename)));
111+             free(slnk_entry);
112+-            fclose(G.outfile);
113+-            return;
114++            errval = CloseError(G.outfile, G.filename);
115++            return errval ? errval : PK_WARN;
116+         }
117+-        fclose(G.outfile);                  /* close "link" file for good... */
118++        errval = CloseError(G.outfile, G.filename); /* close "link" file for good... */
119+         slnk_entry->target[ucsize] = '\0';
120+         if (QCOND2)
121+             Info(slide, 0, ((char *)slide, "-> %s ",
122+@@ -1188,7 +1220,7 @@ void close_outfile(__G)    /* GRR: chang
123+         else
124+             G.slink_head = slnk_entry;
125+         G.slink_last = slnk_entry;
126+-        return;
127++        return errval;
128+     }
129+ #endif /* SYMLINKS */
130+ 
131+@@ -1201,7 +1233,7 @@ void close_outfile(__G)    /* GRR: chang
132+ #endif
133+ 
134+ #if (defined(NO_FCHOWN))
135+-    fclose(G.outfile);
136++    errval = CloseError(G.outfile, G.filename);
137+ #endif
138+ 
139+     /* if -X option was specified and we have UID/GID info, restore it */
140+@@ -1227,7 +1259,7 @@ void close_outfile(__G)    /* GRR: chang
141+     }
142+ 
143+ #if (!defined(NO_FCHOWN) && defined(NO_FCHMOD))
144+-    fclose(G.outfile);
145++    errval = CloseError(G.outfile, G.filename);
146+ #endif
147+ 
148+ #if (!defined(NO_FCHOWN) && !defined(NO_FCHMOD))
149+@@ -1239,7 +1271,7 @@ void close_outfile(__G)    /* GRR: chang
150+     if (fchmod(fileno(G.outfile), filtattr(__G__ G.pInfo->file_attr)))
151+         perror("fchmod (file attributes) error");
152+ 
153+-    fclose(G.outfile);
154++    errval = CloseError(G.outfile, G.filename);
155+ #endif /* !NO_FCHOWN && !NO_FCHMOD */
156+ 
157+     /* skip restoring time stamps on user's request */
158+@@ -1267,6 +1299,7 @@ void close_outfile(__G)    /* GRR: chang
159+ #endif
160+ #endif /* NO_FCHOWN || NO_FCHMOD */
161+ 
162++    return errval;
163+ } /* end function close_outfile() */
164+ 
165+ #endif /* !MTS */
166+diff -up unzip60/unzpriv.h.close unzip60/unzpriv.h
167+--- unzip60/unzpriv.h.close	2009-04-20 01:59:26.000000000 +0200
168++++ unzip60/unzpriv.h	2009-11-19 08:19:08.610388618 +0100
169+@@ -2604,7 +2604,7 @@ char    *GetLoadPath     OF((__GPRO));  
170+    int   SetFileSize     OF((FILE *file, zusz_t filesize));         /* local */
171+ #endif
172+ #ifndef MTS /* macro in MTS */
173+-   void  close_outfile   OF((__GPRO));                              /* local */
174++   int  close_outfile   OF((__GPRO));                              /* local */
175+ #endif
176+ #ifdef SET_SYMLINK_ATTRIBS
177+    int  set_symlnk_attribs  OF((__GPRO__ slinkentry *slnk_entry));  /* local */
+12, -0
 1@@ -0,0 +1,12 @@
 2+diff -up unzip60/unix/configure.nostrip unzip60/unix/configure
 3+--- unzip60/unix/configure.nostrip	2009-11-30 10:18:09.000000000 +0100
 4++++ unzip60/unix/configure	2009-11-30 10:21:08.354264213 +0100
 5+@@ -17,7 +17,7 @@ CFLAGSR=${CFLAGS}
 6+ IZ_BZIP2=${3}
 7+ CFLAGS="${CFLAGS} -I. -DUNIX"
 8+ LFLAGS1=""
 9+-LFLAGS2="-s"
10++LFLAGS2="${LFLAGS2}"
11+ LN="ln -s"
12+ 
13+ CFLAGS_OPT=''
+79, -0
 1@@ -0,0 +1,79 @@
 2+diff --git a/extract.c b/extract.c
 3+index 9ef80b3..c741b5f 100644
 4+--- a/extract.c
 5++++ b/extract.c
 6+@@ -1,5 +1,5 @@
 7+ /*
 8+-  Copyright (c) 1990-2009 Info-ZIP.  All rights reserved.
 9++  Copyright (c) 1990-2014 Info-ZIP.  All rights reserved.
10+ 
11+   See the accompanying file LICENSE, version 2009-Jan-02 or later
12+   (the contents of which are also included in unzip.h) for terms of use.
13+@@ -298,6 +298,8 @@ char ZCONST Far TruncNTSD[] =
14+ #ifndef SFX
15+    static ZCONST char Far InconsistEFlength[] = "bad extra-field entry:\n \
16+      EF block length (%u bytes) exceeds remaining EF data (%u bytes)\n";
17++   static ZCONST char Far TooSmallEBlength[] = "bad extra-field entry:\n \
18++     EF block length (%u bytes) invalid (< %d)\n";
19+    static ZCONST char Far InvalidComprDataEAs[] =
20+      " invalid compressed data for EAs\n";
21+ #  if (defined(WIN32) && defined(NTSD_EAS))
22+@@ -2020,7 +2022,8 @@ static int TestExtraField(__G__ ef, ef_len)
23+         ebID = makeword(ef);
24+         ebLen = (unsigned)makeword(ef+EB_LEN);
25+ 
26+-        if (ebLen > (ef_len - EB_HEADSIZE)) {
27++        if (ebLen > (ef_len - EB_HEADSIZE))
28++        {
29+            /* Discovered some extra field inconsistency! */
30+             if (uO.qflag)
31+                 Info(slide, 1, ((char *)slide, "%-22s ",
32+@@ -2155,11 +2158,29 @@ static int TestExtraField(__G__ ef, ef_len)
33+                 }
34+                 break;
35+             case EF_PKVMS:
36+-                if (makelong(ef+EB_HEADSIZE) !=
37+-                    crc32(CRCVAL_INITIAL, ef+(EB_HEADSIZE+4),
38+-                          (extent)(ebLen-4)))
39+-                    Info(slide, 1, ((char *)slide,
40+-                      LoadFarString(BadCRC_EAs)));
41++                /* 2015-01-30 SMS.  Added sufficient-bytes test/message
42++                 * here.  (Removed defective ebLen test above.)
43++                 *
44++                 * If sufficient bytes (EB_PKVMS_MINLEN) are available,
45++                 * then compare the stored CRC value with the calculated
46++                 * CRC for the remainder of the data (and complain about
47++                 * a mismatch).
48++                 */
49++                if (ebLen < EB_PKVMS_MINLEN)
50++                {
51++                    /* Insufficient bytes available. */
52++                    Info( slide, 1,
53++                     ((char *)slide, LoadFarString( TooSmallEBlength),
54++                     ebLen, EB_PKVMS_MINLEN));
55++                }
56++                else if (makelong(ef+ EB_HEADSIZE) !=
57++                 crc32(CRCVAL_INITIAL,
58++                 (ef+ EB_HEADSIZE+ EB_PKVMS_MINLEN),
59++                 (extent)(ebLen- EB_PKVMS_MINLEN)))
60++                {
61++                     Info(slide, 1, ((char *)slide,
62++                       LoadFarString(BadCRC_EAs)));
63++                }
64+                 break;
65+             case EF_PKW32:
66+             case EF_PKUNIX:
67+diff --git a/unzpriv.h b/unzpriv.h
68+index 005cee0..5c83a6e 100644
69+--- a/unzpriv.h
70++++ b/unzpriv.h
71+@@ -1806,6 +1806,8 @@
72+ #define EB_NTSD_VERSION   4    /* offset of NTSD version byte */
73+ #define EB_NTSD_MAX_VER   (0)  /* maximum version # we know how to handle */
74+ 
75++#define EB_PKVMS_MINLEN   4    /* minimum data length of PKVMS extra block */
76++
77+ #define EB_ASI_CRC32      0    /* offset of ASI Unix field's crc32 checksum */
78+ #define EB_ASI_MODE       4    /* offset of ASI Unix permission mode field */
79+ 
80+
+25, -0
 1@@ -0,0 +1,25 @@
 2+diff --git a/extract.c b/extract.c
 3+index c741b5f..e4a4c7b 100644
 4+--- a/extract.c
 5++++ b/extract.c
 6+@@ -2240,10 +2240,17 @@ static int test_compr_eb(__G__ eb, eb_size, compr_offset, test_uc_ebdata)
 7+     if (compr_offset < 4)                /* field is not compressed: */
 8+         return PK_OK;                    /* do nothing and signal OK */
 9+ 
10++    /* Return no/bad-data error status if any problem is found:
11++     *    1. eb_size is too small to hold the uncompressed size
12++     *       (eb_ucsize).  (Else extract eb_ucsize.)
13++     *    2. eb_ucsize is zero (invalid).  2014-12-04 SMS.
14++     *    3. eb_ucsize is positive, but eb_size is too small to hold
15++     *       the compressed data header.
16++     */
17+     if ((eb_size < (EB_UCSIZE_P + 4)) ||
18+-        ((eb_ucsize = makelong(eb+(EB_HEADSIZE+EB_UCSIZE_P))) > 0L &&
19+-         eb_size <= (compr_offset + EB_CMPRHEADLEN)))
20+-        return IZ_EF_TRUNC;               /* no compressed data! */
21++     ((eb_ucsize = makelong( eb+ (EB_HEADSIZE+ EB_UCSIZE_P))) == 0L) ||
22++     ((eb_ucsize > 0L) && (eb_size <= (compr_offset + EB_CMPRHEADLEN))))
23++        return IZ_EF_TRUNC;             /* no/bad compressed data! */
24+ 
25+     method = makeword(eb + (EB_HEADSIZE + compr_offset));
26+     if ((method == STORED) && (eb_size != compr_offset + EB_CMPRHEADLEN + eb_ucsize))
+138, -0
  1@@ -0,0 +1,138 @@
  2+diff --git a/fileio.c b/fileio.c
  3+index 03fc4be..2a61a30 100644
  4+--- a/fileio.c
  5++++ b/fileio.c
  6+@@ -176,6 +176,8 @@ static ZCONST char Far FilenameTooLongTrunc[] =
  7+ #endif
  8+ static ZCONST char Far ExtraFieldTooLong[] =
  9+   "warning:  extra field too long (%d).  Ignoring...\n";
 10++static ZCONST char Far ExtraFieldCorrupt[] =
 11++  "warning:  extra field (type: 0x%04x) corrupt.  Continuing...\n";
 12+ 
 13+ #ifdef WINDLL
 14+    static ZCONST char Far DiskFullQuery[] =
 15+@@ -2300,7 +2302,13 @@ int do_string(__G__ length, option)   /* return PK-type error code */
 16+               length = length2;
 17+             }
 18+             /* Looks like here is where extra fields are read */
 19+-            getZip64Data(__G__ G.extra_field, length);
 20++            if (getZip64Data(__G__ G.extra_field, length) != PK_COOL)
 21++            {
 22++                Info(slide, 0x401, ((char *)slide,
 23++                 LoadFarString( ExtraFieldCorrupt), EF_PKSZ64));
 24++                error = PK_WARN;
 25++            }
 26++
 27+ #ifdef UNICODE_SUPPORT
 28+             G.unipath_filename = NULL;
 29+             if (G.UzO.U_flag < 2) {
 30+diff --git a/process.c b/process.c
 31+index be6e006..0d57ab4 100644
 32+--- a/process.c
 33++++ b/process.c
 34+@@ -1,5 +1,5 @@
 35+ /*
 36+-  Copyright (c) 1990-2009 Info-ZIP.  All rights reserved.
 37++  Copyright (c) 1990-2014 Info-ZIP.  All rights reserved.
 38+ 
 39+   See the accompanying file LICENSE, version 2009-Jan-02 or later
 40+   (the contents of which are also included in unzip.h) for terms of use.
 41+@@ -1894,48 +1894,83 @@ int getZip64Data(__G__ ef_buf, ef_len)
 42+     and a 4-byte version of disk start number.
 43+     Sets both local header and central header fields.  Not terribly clever,
 44+     but it means that this procedure is only called in one place.
 45++
 46++    2014-12-05 SMS.
 47++    Added checks to ensure that enough data are available before calling
 48++    makeint64() or makelong().  Replaced various sizeof() values with
 49++    simple ("4" or "8") constants.  (The Zip64 structures do not depend
 50++    on our variable sizes.)  Error handling is crude, but we should now
 51++    stay within the buffer.
 52+   ---------------------------------------------------------------------------*/
 53+ 
 54++#define Z64FLGS 0xffff
 55++#define Z64FLGL 0xffffffff
 56++
 57+     if (ef_len == 0 || ef_buf == NULL)
 58+         return PK_COOL;
 59+ 
 60+     Trace((stderr,"\ngetZip64Data: scanning extra field of length %u\n",
 61+       ef_len));
 62+ 
 63+-    while (ef_len >= EB_HEADSIZE) {
 64++    while (ef_len >= EB_HEADSIZE)
 65++    {
 66+         eb_id = makeword(EB_ID + ef_buf);
 67+         eb_len = makeword(EB_LEN + ef_buf);
 68+ 
 69+-        if (eb_len > (ef_len - EB_HEADSIZE)) {
 70+-            /* discovered some extra field inconsistency! */
 71++        if (eb_len > (ef_len - EB_HEADSIZE))
 72++        {
 73++            /* Extra block length exceeds remaining extra field length. */
 74+             Trace((stderr,
 75+               "getZip64Data: block length %u > rest ef_size %u\n", eb_len,
 76+               ef_len - EB_HEADSIZE));
 77+             break;
 78+         }
 79+-        if (eb_id == EF_PKSZ64) {
 80+ 
 81++        if (eb_id == EF_PKSZ64)
 82++        {
 83+           int offset = EB_HEADSIZE;
 84+ 
 85+-          if (G.crec.ucsize == 0xffffffff || G.lrec.ucsize == 0xffffffff){
 86+-            G.lrec.ucsize = G.crec.ucsize = makeint64(offset + ef_buf);
 87+-            offset += sizeof(G.crec.ucsize);
 88++          if ((G.crec.ucsize == Z64FLGL) || (G.lrec.ucsize == Z64FLGL))
 89++          {
 90++            if (offset+ 8 > ef_len)
 91++              return PK_ERR;
 92++
 93++            G.crec.ucsize = G.lrec.ucsize = makeint64(offset + ef_buf);
 94++            offset += 8;
 95+           }
 96+-          if (G.crec.csize == 0xffffffff || G.lrec.csize == 0xffffffff){
 97+-            G.csize = G.lrec.csize = G.crec.csize = makeint64(offset + ef_buf);
 98+-            offset += sizeof(G.crec.csize);
 99++
100++          if ((G.crec.csize == Z64FLGL) || (G.lrec.csize == Z64FLGL))
101++          {
102++            if (offset+ 8 > ef_len)
103++              return PK_ERR;
104++
105++            G.csize = G.crec.csize = G.lrec.csize = makeint64(offset + ef_buf);
106++            offset += 8;
107+           }
108+-          if (G.crec.relative_offset_local_header == 0xffffffff){
109++
110++          if (G.crec.relative_offset_local_header == Z64FLGL)
111++          {
112++            if (offset+ 8 > ef_len)
113++              return PK_ERR;
114++
115+             G.crec.relative_offset_local_header = makeint64(offset + ef_buf);
116+-            offset += sizeof(G.crec.relative_offset_local_header);
117++            offset += 8;
118+           }
119+-          if (G.crec.disk_number_start == 0xffff){
120++
121++          if (G.crec.disk_number_start == Z64FLGS)
122++          {
123++            if (offset+ 4 > ef_len)
124++              return PK_ERR;
125++
126+             G.crec.disk_number_start = (zuvl_t)makelong(offset + ef_buf);
127+-            offset += sizeof(G.crec.disk_number_start);
128++            offset += 4;
129+           }
130++#if 0
131++          break;                /* Expect only one EF_PKSZ64 block. */
132++#endif /* 0 */
133+         }
134+ 
135+-        /* Skip this extra field block */
136++        /* Skip this extra field block. */
137+         ef_buf += (eb_len + EB_HEADSIZE);
138+         ef_len -= (eb_len + EB_HEADSIZE);
139+     }
+34, -0
 1@@ -0,0 +1,34 @@
 2+--- a/fileio.c	2014-12-05 05:06:05 -0600
 3++++ b/fileio.c	2017-11-14 01:06:28 -0600
 4+@@ -1,5 +1,5 @@
 5+ /*
 6+-  Copyright (c) 1990-2009 Info-ZIP.  All rights reserved.
 7++  Copyright (c) 1990-2017 Info-ZIP.  All rights reserved.
 8+ 
 9+   See the accompanying file LICENSE, version 2009-Jan-02 or later
10+   (the contents of which are also included in unzip.h) for terms of use.
11+@@ -1582,6 +1582,8 @@
12+     int r = IZ_PW_ENTERED;
13+     char *m;
14+     char *prompt;
15++    char *ep;
16++    char *zp;
17+ 
18+ #ifndef REENTRANT
19+     /* tell picky compilers to shut up about "unused variable" warnings */
20+@@ -1590,9 +1592,12 @@
21+ 
22+     if (*rcnt == 0) {           /* First call for current entry */
23+         *rcnt = 2;
24+-        if ((prompt = (char *)malloc(2*FILNAMSIZ + 15)) != (char *)NULL) {
25+-            sprintf(prompt, LoadFarString(PasswPrompt),
26+-                    FnFilter1(zfn), FnFilter2(efn));
27++        zp = FnFilter1( zfn);
28++        ep = FnFilter2( efn);
29++        prompt = (char *)malloc(        /* Slightly too long (2* "%s"). */
30++         sizeof( PasswPrompt)+ strlen( zp)+ strlen( ep));
31++        if (prompt != (char *)NULL) {
32++            sprintf(prompt, LoadFarString(PasswPrompt), zp, ep);
33+             m = prompt;
34+         } else
35+             m = (char *)LoadFarString(PasswPrompt2);
+35, -0
 1@@ -0,0 +1,35 @@
 2+--- unzip60/list.c	
 3++++ unzip60/list.c	
 4+@@ -97,7 +97,7 @@ int list_files(__G)    /* return PK-type
 5+ {
 6+     int do_this_file=FALSE, cfactor, error, error_in_archive=PK_COOL;
 7+ #ifndef WINDLL
 8+-    char sgn, cfactorstr[13];
 9++    char sgn, cfactorstr[1+10+1+1];	/* <sgn><int>%NUL */
10+     int longhdr=(uO.vflag>1);
11+ #endif
12+     int date_format;
13+@@ -389,9 +389,9 @@ int list_files(__G)    /* return PK-type
14+             }
15+ #else /* !WINDLL */
16+             if (cfactor == 100)
17+-                sprintf(cfactorstr, LoadFarString(CompFactor100));
18++                snprintf(cfactorstr, sizeof(cfactorstr), LoadFarString(CompFactor100));
19+             else
20+-                sprintf(cfactorstr, LoadFarString(CompFactorStr), sgn, cfactor);
21++                snprintf(cfactorstr, sizeof(cfactorstr), LoadFarString(CompFactorStr), sgn, cfactor);
22+             if (longhdr)
23+                 Info(slide, 0, ((char *)slide, LoadFarString(LongHdrStats),
24+                   FmZofft(G.crec.ucsize, "8", "u"), methbuf,
25+@@ -471,9 +471,9 @@ int list_files(__G)    /* return PK-type
26+ 
27+ #else /* !WINDLL */
28+         if (cfactor == 100)
29+-            sprintf(cfactorstr, LoadFarString(CompFactor100));
30++            snprintf(cfactorstr, sizeof(cfactorstr), LoadFarString(CompFactor100));
31+         else
32+-            sprintf(cfactorstr, LoadFarString(CompFactorStr), sgn, cfactor);
33++            snprintf(cfactorstr, sizeof(cfactorstr), LoadFarString(CompFactorStr), sgn, cfactor);
34+         if (longhdr) {
35+             Info(slide, 0, ((char *)slide, LoadFarString(LongFileTrailer),
36+               FmZofft(tot_ucsize, "8", "u"), FmZofft(tot_csize, "8", "u"),
+10, -0
 1@@ -0,0 +1,10 @@
 2+diff -up unzip60/crc_i386.S.exec-shield unzip60/crc_i386.S
 3+--- unzip60/crc_i386.S.exec-shield	2007-01-07 06:02:58.000000000 +0100
 4++++ unzip60/crc_i386.S	2009-11-18 11:16:39.630389312 +0100
 5+@@ -302,3 +302,6 @@ _crc32:                         /* ulg c
 6+ #endif /* i386 || _i386 || _I386 || __i386 */
 7+ 
 8+ #endif /* !USE_ZLIB && !CRC_TABLE_ONLY */
 9++
10++.section .note.GNU-stack, "", @progbits
11++.previous
+477, -0
  1@@ -0,0 +1,477 @@
  2+diff -up unzip60/match.c.recmatch unzip60/match.c
  3+--- unzip60/match.c.recmatch	2005-08-14 13:00:36.000000000 -0400
  4++++ unzip60/match.c	2013-05-28 10:29:57.949077543 -0400
  5+@@ -27,16 +27,14 @@
  6+ 
  7+   ---------------------------------------------------------------------------
  8+ 
  9+-  Copyright on recmatch() from Zip's util.c (although recmatch() was almost
 10+-  certainly written by Mark Adler...ask me how I can tell :-) ):
 11++  Copyright on recmatch() from Zip's util.c
 12++	 Copyright (c) 1990-2005 Info-ZIP.  All rights reserved.
 13+ 
 14+-     Copyright (C) 1990-1992 Mark Adler, Richard B. Wales, Jean-loup Gailly,
 15+-     Kai Uwe Rommel and Igor Mandrichenko.
 16++	 See the accompanying file LICENSE, version 2004-May-22 or later
 17++	 for terms of use.
 18++	 If, for some reason, both of these files are missing, the Info-ZIP license
 19++	 also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html  
 20+ 
 21+-     Permission is granted to any individual or institution to use, copy,
 22+-     or redistribute this software so long as all of the original files are
 23+-     included unmodified, that it is not sold for profit, and that this copy-
 24+-     right notice is retained.
 25+ 
 26+   ---------------------------------------------------------------------------
 27+ 
 28+@@ -53,7 +51,7 @@
 29+ 
 30+   A set is composed of characters or ranges; a range looks like ``character
 31+   hyphen character'' (as in 0-9 or A-Z).  [0-9a-zA-Z_] is the minimal set of
 32+-  characters allowed in the [..] pattern construct.  Other characters are
 33++  characters ALlowed in the [..] pattern construct.  Other characters are
 34+   allowed (i.e., 8-bit characters) if your system will support them.
 35+ 
 36+   To suppress the special syntactic significance of any of ``[]*?!^-\'', in-
 37+@@ -101,8 +99,32 @@
 38+ #  define WILDCHAR   '?'
 39+ #  define BEG_RANGE  '['
 40+ #  define END_RANGE  ']'
 41++#  define WILDCHR_SINGLE '?'
 42++#  define DIRSEP_CHR '/'
 43++#  define WILDCHR_MULTI '*'
 44+ #endif
 45+ 
 46++#ifdef WILD_STOP_AT_DIR
 47++   int wild_stop_at_dir = 1; /* default wildcards do not include / in matches */
 48++#else
 49++   int wild_stop_at_dir = 0; /* default wildcards do include / in matches */
 50++#endif
 51++
 52++
 53++
 54++/*
 55++ * case mapping functions. case_map is used to ignore case in comparisons,
 56++ * to_up is used to force upper case even on Unix (for dosify option).
 57++ */
 58++#ifdef USE_CASE_MAP
 59++#  define case_map(c) upper[(c) & 0xff]
 60++#  define to_up(c)    upper[(c) & 0xff]
 61++#else
 62++#  define case_map(c) (c)
 63++#  define to_up(c)    ((c) >= 'a' && (c) <= 'z' ? (c)-'a'+'A' : (c))
 64++#endif /* USE_CASE_MAP */
 65++
 66++
 67+ #if 0                /* GRR:  add this to unzip.h someday... */
 68+ #if !(defined(MSDOS) && defined(DOSWILD))
 69+ #ifdef WILD_STOP_AT_DIR
 70+@@ -114,8 +136,8 @@ int recmatch OF((ZCONST uch *pattern, ZC
 71+                  int ignore_case __WDLPRO));
 72+ #endif
 73+ #endif /* 0 */
 74+-static int recmatch OF((ZCONST uch *pattern, ZCONST uch *string,
 75+-                        int ignore_case __WDLPRO));
 76++static int recmatch OF((ZCONST char *, ZCONST char *, 
 77++                        int));
 78+ static char *isshexp OF((ZCONST char *p));
 79+ static int namecmp OF((ZCONST char *s1, ZCONST char *s2));
 80+ 
 81+@@ -154,192 +176,240 @@ int match(string, pattern, ignore_case _
 82+             }
 83+             dospattern[j-1] = '\0';                    /* nuke the end "." */
 84+         }
 85+-        j = recmatch((uch *)dospattern, (uch *)string, ignore_case __WDL);
 86++        j = recmatch(dospattern, string, ignore_case);
 87+         free(dospattern);
 88+         return j == 1;
 89+     } else
 90+ #endif /* MSDOS && DOSWILD */
 91+-    return recmatch((uch *)pattern, (uch *)string, ignore_case __WDL) == 1;
 92++    return recmatch(pattern, string, ignore_case) == 1;
 93+ }
 94+ 
 95++#ifdef _MBCS
 96++
 97++char *___tmp_ptr;
 98+ 
 99++#endif
100+ 
101+-static int recmatch(p, s, ic __WDL)
102+-    ZCONST uch *p;        /* sh pattern to match */
103+-    ZCONST uch *s;        /* string to which to match it */
104+-    int ic;               /* true for case insensitivity */
105+-    __WDLDEF              /* directory sepchar for WildStopAtDir mode, or 0 */
106++static int recmatch(p, s, cs)
107++ZCONST char *p;         /* sh pattern to match */
108++ZCONST char *s;         /* string to match it to */
109++int cs;                 /* flag: force case-sensitive matching */
110+ /* Recursively compare the sh pattern p with the string s and return 1 if
111+- * they match, and 0 or 2 if they don't or if there is a syntax error in the
112+- * pattern.  This routine recurses on itself no more deeply than the number
113+- * of characters in the pattern. */
114++   they match, and 0 or 2 if they don't or if there is a syntax error in the
115++   pattern.  This routine recurses on itself no deeper than the number of
116++   characters in the pattern. */
117+ {
118+-    unsigned int c;       /* pattern char or start of range in [-] loop */
119++  int c;                /* pattern char or start of range in [-] loop */
120++  /* Get first character, the pattern for new recmatch calls follows */
121++ /* borrowed from Zip's global.c */
122++ int no_wild = 0; 
123++ int allow_regex=1;
124++  /* This fix provided by akt@m5.dion.ne.jp for Japanese.
125++     See 21 July 2006 mail.
126++     It only applies when p is pointing to a doublebyte character and
127++     things like / and wildcards are not doublebyte.  This probably
128++     should not be needed. */
129+ 
130+-    /* Get first character, the pattern for new recmatch calls follows */
131+-    c = *p; INCSTR(p);
132++#ifdef _MBCS
133++  if (CLEN(p) == 2) {
134++    if (CLEN(s) == 2) {
135++      return (*p == *s && *(p+1) == *(s+1)) ?
136++        recmatch(p + 2, s + 2, cs) : 0;
137++    } else {
138++      return 0;
139++    }
140++  }
141++#endif /* ?_MBCS */
142+ 
143+-    /* If that was the end of the pattern, match if string empty too */
144+-    if (c == 0)
145+-        return *s == 0;
146++  c = *POSTINCSTR(p);
147+ 
148+-    /* '?' (or '%') matches any character (but not an empty string). */
149+-    if (c == WILDCHAR)
150+-#ifdef WILD_STOP_AT_DIR
151+-        /* If uO.W_flag is non-zero, it won't match '/' */
152+-        return (*s && (!sepc || *s != (uch)sepc))
153+-               ? recmatch(p, s + CLEN(s), ic, sepc) : 0;
154+-#else
155+-        return *s ? recmatch(p, s + CLEN(s), ic) : 0;
156+-#endif
157++  /* If that was the end of the pattern, match if string empty too */
158++  if (c == 0)
159++    return *s == 0;
160++
161++  /* '?' (or '%' or '#') matches any character (but not an empty string) */
162++  if (c == WILDCHR_SINGLE) {
163++    if (wild_stop_at_dir)
164++      return (*s && *s != DIRSEP_CHR) ? recmatch(p, s + CLEN(s), cs) : 0;
165++    else
166++      return *s ? recmatch(p, s + CLEN(s), cs) : 0;
167++  }
168+ 
169+-    /* '*' matches any number of characters, including zero */
170++  /* WILDCHR_MULTI ('*') matches any number of characters, including zero */
171+ #ifdef AMIGA
172+-    if (c == '#' && *p == '?')     /* "#?" is Amiga-ese for "*" */
173+-        c = '*', p++;
174++  if (!no_wild && c == '#' && *p == '?')            /* "#?" is Amiga-ese for "*" */
175++    c = WILDCHR_MULTI, p++;
176+ #endif /* AMIGA */
177+-    if (c == '*') {
178+-#ifdef WILD_STOP_AT_DIR
179+-        if (sepc) {
180+-          /* check for single "*" or double "**" */
181+-#  ifdef AMIGA
182+-          if ((c = p[0]) == '#' && p[1] == '?') /* "#?" is Amiga-ese for "*" */
183+-            c = '*', p++;
184+-          if (c != '*') {
185+-#  else /* !AMIGA */
186+-          if (*p != '*') {
187+-#  endif /* ?AMIGA */
188+-            /* single "*": this doesn't match the dirsep character */
189+-            for (; *s && *s != (uch)sepc; INCSTR(s))
190+-                if ((c = recmatch(p, s, ic, sepc)) != 0)
191+-                    return (int)c;
192+-            /* end of pattern: matched if at end of string, else continue */
193+-            if (*p == '\0')
194+-                return (*s == 0);
195+-            /* continue to match if at sepc in pattern, else give up */
196+-            return (*p == (uch)sepc || (*p == '\\' && p[1] == (uch)sepc))
197+-                   ? recmatch(p, s, ic, sepc) : 2;
198+-          }
199+-          /* "**": this matches slashes */
200+-          ++p;        /* move p behind the second '*' */
201+-          /* and continue with the non-W_flag code variant */
202+-        }
203+-#endif /* WILD_STOP_AT_DIR */
204++  if (!no_wild && c == WILDCHR_MULTI)
205++  {
206++    if (wild_stop_at_dir) {
207++      /* Check for an immediately following WILDCHR_MULTI */
208++# ifdef AMIGA
209++      if ((c = p[0]) == '#' && p[1] == '?') /* "#?" is Amiga-ese for "*" */
210++        c = WILDCHR_MULTI, p++;
211++      if (c != WILDCHR_MULTI) {
212++# else /* !AMIGA */
213++      if (*p != WILDCHR_MULTI) {
214++# endif /* ?AMIGA */
215++        /* Single WILDCHR_MULTI ('*'): this doesn't match slashes */
216++        for (; *s && *s != DIRSEP_CHR; INCSTR(s))
217++          if ((c = recmatch(p, s, cs)) != 0)
218++            return c;
219++        /* end of pattern: matched if at end of string, else continue */
220+         if (*p == 0)
221+-            return 1;
222+-        if (isshexp((ZCONST char *)p) == NULL) {
223+-            /* Optimization for rest of pattern being a literal string:
224+-             * If there are no other shell expression chars in the rest
225+-             * of the pattern behind the multi-char wildcard, then just
226+-             * compare the literal string tail.
227+-             */
228+-            ZCONST uch *srest;
229+-
230+-            srest = s + (strlen((ZCONST char *)s) - strlen((ZCONST char *)p));
231+-            if (srest - s < 0)
232+-                /* remaining literal string from pattern is longer than rest
233+-                 * of test string, there can't be a match
234+-                 */
235+-                return 0;
236+-            else
237+-              /* compare the remaining literal pattern string with the last
238+-               * bytes of the test string to check for a match
239+-               */
240++          return (*s == 0);
241++        /* continue to match if at DIRSEP_CHR in pattern, else give up */
242++        return (*p == DIRSEP_CHR || (*p == '\\' && p[1] == DIRSEP_CHR))
243++               ? recmatch(p, s, cs) : 2;
244++      }
245++      /* Two consecutive WILDCHR_MULTI ("**"): this matches DIRSEP_CHR ('/') */
246++      p++;        /* move p past the second WILDCHR_MULTI */
247++      /* continue with the normal non-WILD_STOP_AT_DIR code */
248++    } /* wild_stop_at_dir */
249++
250++    /* Not wild_stop_at_dir */
251++    if (*p == 0)
252++      return 1;
253++    if (!isshexp((char *)p))
254++    {
255++      /* optimization for rest of pattern being a literal string */
256++
257++      /* optimization to handle patterns like *.txt */
258++      /* if the first char in the pattern is '*' and there */
259++      /* are no other shell expression chars, i.e. a literal string */
260++      /* then just compare the literal string at the end */
261++
262++      ZCONST char *srest;
263++
264++      srest = s + (strlen(s) - strlen(p));
265++      if (srest - s < 0)
266++        /* remaining literal string from pattern is longer than rest of
267++           test string, there can't be a match
268++         */
269++        return 0;
270++      else
271++        /* compare the remaining literal pattern string with the last bytes
272++           of the test string to check for a match */
273+ #ifdef _MBCS
274+-            {
275+-                ZCONST uch *q = s;
276++      {
277++        ZCONST char *q = s;
278+ 
279+-                /* MBCS-aware code must not scan backwards into a string from
280+-                 * the end.
281+-                 * So, we have to move forward by character from our well-known
282+-                 * character position s in the test string until we have
283+-                 * advanced to the srest position.
284+-                 */
285+-                while (q < srest)
286+-                  INCSTR(q);
287+-                /* In case the byte *srest is a trailing byte of a multibyte
288+-                 * character in the test string s, we have actually advanced
289+-                 * past the position (srest).
290+-                 * For this case, the match has failed!
291+-                 */
292+-                if (q != srest)
293+-                    return 0;
294+-                return ((ic
295+-                         ? namecmp((ZCONST char *)p, (ZCONST char *)q)
296+-                         : strcmp((ZCONST char *)p, (ZCONST char *)q)
297+-                        ) == 0);
298+-            }
299++        /* MBCS-aware code must not scan backwards into a string from
300++         * the end.
301++         * So, we have to move forward by character from our well-known
302++         * character position s in the test string until we have advanced
303++         * to the srest position.
304++         */
305++        while (q < srest)
306++          INCSTR(q);
307++        /* In case the byte *srest is a trailing byte of a multibyte
308++         * character, we have actually advanced past the position (srest).
309++         * For this case, the match has failed!
310++         */
311++        if (q != srest)
312++          return 0;
313++        return ((cs ? strcmp(p, q) : namecmp(p, q)) == 0);
314++      }
315+ #else /* !_MBCS */
316+-                return ((ic
317+-                         ? namecmp((ZCONST char *)p, (ZCONST char *)srest)
318+-                         : strcmp((ZCONST char *)p, (ZCONST char *)srest)
319+-                        ) == 0);
320++        return ((cs ? strcmp(p, srest) : namecmp(p, srest)) == 0);
321+ #endif /* ?_MBCS */
322+-        } else {
323+-            /* pattern contains more wildcards, continue with recursion... */
324+-            for (; *s; INCSTR(s))
325+-                if ((c = recmatch(p, s, ic __WDL)) != 0)
326+-                    return (int)c;
327+-            return 2;  /* 2 means give up--match will return false */
328+-        }
329+     }
330+-
331+-    /* Parse and process the list of characters and ranges in brackets */
332+-    if (c == BEG_RANGE) {
333+-        int e;          /* flag true if next char to be taken literally */
334+-        ZCONST uch *q;  /* pointer to end of [-] group */
335+-        int r;          /* flag true to match anything but the range */
336+-
337+-        if (*s == 0)                            /* need a character to match */
338+-            return 0;
339+-        p += (r = (*p == '!' || *p == '^'));    /* see if reverse */
340+-        for (q = p, e = 0; *q; INCSTR(q))       /* find closing bracket */
341+-            if (e)
342+-                e = 0;
343+-            else
344+-                if (*q == '\\')      /* GRR:  change to ^ for MS-DOS, OS/2? */
345+-                    e = 1;
346+-                else if (*q == END_RANGE)
347+-                    break;
348+-        if (*q != END_RANGE)         /* nothing matches if bad syntax */
349+-            return 0;
350+-        for (c = 0, e = (*p == '-'); p < q; INCSTR(p)) {
351+-            /* go through the list */
352+-            if (!e && *p == '\\')               /* set escape flag if \ */
353+-                e = 1;
354+-            else if (!e && *p == '-')           /* set start of range if - */
355+-                c = *(p-1);
356+-            else {
357+-                unsigned int cc = Case(*s);
358+-
359+-                if (*(p+1) != '-')
360+-                    for (c = c ? c : *p; c <= *p; c++)  /* compare range */
361+-                        if ((unsigned)Case(c) == cc) /* typecast for MSC bug */
362+-                            return r ? 0 : recmatch(q + 1, s + 1, ic __WDL);
363+-                c = e = 0;   /* clear range, escape flags */
364+-            }
365+-        }
366+-        return r ? recmatch(q + CLEN(q), s + CLEN(s), ic __WDL) : 0;
367+-                                        /* bracket match failed */
368++    else
369++    {
370++      /* pattern contains more wildcards, continue with recursion... */
371++      for (; *s; INCSTR(s))
372++        if ((c = recmatch(p, s, cs)) != 0)
373++          return c;
374++      return 2;           /* 2 means give up--shmatch will return false */
375+     }
376++  }
377+ 
378+-    /* if escape ('\\'), just compare next character */
379+-    if (c == '\\' && (c = *p++) == 0)     /* if \ at end, then syntax error */
380+-        return 0;
381++#ifndef VMS             /* No bracket matching in VMS */
382++  /* Parse and process the list of characters and ranges in brackets */
383++  if (!no_wild && allow_regex && c == '[')
384++  {
385++    int e;              /* flag true if next char to be taken literally */
386++    ZCONST char *q;     /* pointer to end of [-] group */
387++    int r;              /* flag true to match anything but the range */
388++
389++    if (*s == 0)                        /* need a character to match */
390++      return 0;
391++    p += (r = (*p == '!' || *p == '^')); /* see if reverse */
392++    for (q = p, e = 0; *q; q++)         /* find closing bracket */
393++      if (e)
394++        e = 0;
395++      else
396++        if (*q == '\\')
397++          e = 1;
398++        else if (*q == ']')
399++          break;
400++    if (*q != ']')                      /* nothing matches if bad syntax */
401++      return 0;
402++    for (c = 0, e = *p == '-'; p < q; p++)      /* go through the list */
403++    {
404++      if (e == 0 && *p == '\\')         /* set escape flag if \ */
405++        e = 1;
406++      else if (e == 0 && *p == '-')     /* set start of range if - */
407++        c = *(p-1);
408++      else
409++      {
410++        uch cc = (cs ? (uch)*s : case_map((uch)*s));
411++        uch uc = (uch) c;
412++        if (*(p+1) != '-')
413++          for (uc = uc ? uc : (uch)*p; uc <= (uch)*p; uc++)
414++            /* compare range */
415++            if ((cs ? uc : case_map(uc)) == cc)
416++              return r ? 0 : recmatch(q + CLEN(q), s + CLEN(s), cs);
417++        c = e = 0;                      /* clear range, escape flags */
418++      }
419++    }
420++    return r ? recmatch(q + CLEN(q), s + CLEN(s), cs) : 0;
421++                                        /* bracket match failed */
422++  }
423++#endif /* !VMS */
424+ 
425+-    /* just a character--compare it */
426+-#ifdef QDOS
427+-    return QMatch(Case((uch)c), Case(*s)) ?
428+-           recmatch(p, s + CLEN(s), ic __WDL) : 0;
429+-#else
430+-    return Case((uch)c) == Case(*s) ?
431+-           recmatch(p, s + CLEN(s), ic __WDL) : 0;
432+-#endif
433++  /* If escape ('\'), just compare next character */
434++  if (!no_wild && c == '\\')
435++    if ((c = *p++) == '\0')             /* if \ at end, then syntax error */
436++      return 0;
437++
438++#ifdef VMS
439++  /* 2005-11-06 SMS.
440++     Handle "..." wildcard in p with "." or "]" in s.
441++  */
442++  if ((c == '.') && (*p == '.') && (*(p+ CLEN( p)) == '.') &&
443++   ((*s == '.') || (*s == ']')))
444++  {
445++    /* Match "...]" with "]".  Continue after "]" in both. */
446++    if ((*(p+ 2* CLEN( p)) == ']') && (*s == ']'))
447++      return recmatch( (p+ 3* CLEN( p)), (s+ CLEN( s)), cs);
448++
449++    /* Else, look for a reduced match in s, until "]" in or end of s. */
450++    for (; *s && (*s != ']'); INCSTR(s))
451++      if (*s == '.')
452++        /* If reduced match, then continue after "..." in p, "." in s. */
453++        if ((c = recmatch( (p+ CLEN( p)), s, cs)) != 0)
454++          return (int)c;
455++
456++    /* Match "...]" with "]".  Continue after "]" in both. */
457++    if ((*(p+ 2* CLEN( p)) == ']') && (*s == ']'))
458++      return recmatch( (p+ 3* CLEN( p)), (s+ CLEN( s)), cs);
459++
460++    /* No reduced match.  Quit. */
461++    return 2;
462++  }
463++
464++#endif /* def VMS */
465++
466++  /* Just a character--compare it */
467++  return (cs ? c == *s : case_map((uch)c) == case_map((uch)*s)) ?
468++          recmatch(p, s + CLEN(s), cs) : 0;
469++}
470+ 
471+-} /* end function recmatch() */
472+ 
473+ 
474+ 
475++/*************************************************************************************************/
476+ static char *isshexp(p)
477+ ZCONST char *p;
478+ /* If p is a sh expression, a pointer to the first special character is
+90, -0
 1@@ -0,0 +1,90 @@
 2+diff --git a/extract.c b/extract.c
 3+index eeb2f57..a0a4929 100644
 4+--- a/extract.c
 5++++ b/extract.c
 6+@@ -472,8 +472,8 @@ int extract_or_test_files(__G)    /* return PK-type error code */
 7+                      */
 8+                     Info(slide, 0x401, ((char *)slide,
 9+                       LoadFarString(CentSigMsg), j + blknum*DIR_BLKSIZ + 1));
10+-                    Info(slide, 0x401, ((char *)slide,
11+-                      LoadFarString(ReportMsg)));
12++                    Info(slide, 0x401,
13++                         ((char *)slide,"%s", LoadFarString(ReportMsg)));
14+                     error_in_archive = PK_BADERR;
15+                 }
16+                 reached_end = TRUE;     /* ...so no more left to do */
17+@@ -752,8 +752,8 @@ int extract_or_test_files(__G)    /* return PK-type error code */
18+ 
19+ #ifndef SFX
20+     if (no_endsig_found) {                      /* just to make sure */
21+-        Info(slide, 0x401, ((char *)slide, LoadFarString(EndSigMsg)));
22+-        Info(slide, 0x401, ((char *)slide, LoadFarString(ReportMsg)));
23++        Info(slide, 0x401, ((char *)slide,"%s", LoadFarString(EndSigMsg)));
24++        Info(slide, 0x401, ((char *)slide,"%s", LoadFarString(ReportMsg)));
25+         if (!error_in_archive)       /* don't overwrite stronger error */
26+             error_in_archive = PK_WARN;
27+     }
28+diff --git a/list.c b/list.c
29+index 15e0011..f7359c3 100644
30+--- a/list.c
31++++ b/list.c
32+@@ -181,7 +181,7 @@ int list_files(__G)    /* return PK-type error code */
33+                 Info(slide, 0x401,
34+                      ((char *)slide, LoadFarString(CentSigMsg), j));
35+                 Info(slide, 0x401,
36+-                     ((char *)slide, LoadFarString(ReportMsg)));
37++                     ((char *)slide,"%s", LoadFarString(ReportMsg)));
38+                 return PK_BADERR;   /* sig not found */
39+             }
40+         }
41+@@ -507,7 +507,8 @@ int list_files(__G)    /* return PK-type error code */
42+             && (!G.ecrec.is_zip64_archive)
43+             && (memcmp(G.sig, end_central_sig, 4) != 0)
44+            ) {          /* just to make sure again */
45+-            Info(slide, 0x401, ((char *)slide, LoadFarString(EndSigMsg)));
46++            Info(slide, 0x401, 
47++                 ((char *)slide,"%s", LoadFarString(EndSigMsg)));
48+             error_in_archive = PK_WARN;   /* didn't find sig */
49+         }
50+ 
51+@@ -591,7 +592,7 @@ int get_time_stamp(__G__ last_modtime, nmember)  /* return PK-type error code */
52+                 Info(slide, 0x401,
53+                      ((char *)slide, LoadFarString(CentSigMsg), j));
54+                 Info(slide, 0x401,
55+-                     ((char *)slide, LoadFarString(ReportMsg)));
56++                     ((char *)slide,"%s", LoadFarString(ReportMsg)));
57+                 return PK_BADERR;   /* sig not found */
58+             }
59+         }
60+@@ -674,7 +675,7 @@ int get_time_stamp(__G__ last_modtime, nmember)  /* return PK-type error code */
61+   ---------------------------------------------------------------------------*/
62+ 
63+     if (memcmp(G.sig, end_central_sig, 4)) {    /* just to make sure again */
64+-        Info(slide, 0x401, ((char *)slide, LoadFarString(EndSigMsg)));
65++        Info(slide, 0x401, ((char *)slide,"%s", LoadFarString(EndSigMsg)));
66+         error_in_archive = PK_WARN;
67+     }
68+     if (*nmember == 0L && error_in_archive <= PK_WARN)
69+diff --git a/zipinfo.c b/zipinfo.c
70+index 6e22cc8..ac5c61b 100644
71+--- a/zipinfo.c
72++++ b/zipinfo.c
73+@@ -771,7 +771,7 @@ int zipinfo(__G)   /* return PK-type error code */
74+                 Info(slide, 0x401,
75+                      ((char *)slide, LoadFarString(CentSigMsg), j));
76+                 Info(slide, 0x401,
77+-                     ((char *)slide, LoadFarString(ReportMsg)));
78++                     ((char *)slide,"%s", LoadFarString(ReportMsg)));
79+                 error_in_archive = PK_BADERR;   /* sig not found */
80+                 break;
81+             }
82+@@ -960,7 +960,8 @@ int zipinfo(__G)   /* return PK-type error code */
83+             && (!G.ecrec.is_zip64_archive)
84+             && (memcmp(G.sig, end_central_sig, 4) != 0)
85+            ) {          /* just to make sure again */
86+-            Info(slide, 0x401, ((char *)slide, LoadFarString(EndSigMsg)));
87++            Info(slide, 0x401, 
88++                 ((char *)slide,"%s", LoadFarString(EndSigMsg)));
89+             error_in_archive = PK_WARN;   /* didn't find sig */
90+         }
91+ 
+104, -0
  1@@ -0,0 +1,104 @@
  2+From bdd4a0cecd745cb4825e4508b5bdf2579731086a Mon Sep 17 00:00:00 2001
  3+From: Petr Stodulka <pstodulk@redhat.com>
  4+Date: Mon, 14 Sep 2015 18:23:17 +0200
  5+Subject: [PATCH 1/3] upstream fix for heap overflow
  6+
  7+https://bugzilla.redhat.com/attachment.cgi?id=1073002
  8+---
  9+ crypt.c | 12 +++++++++++-
 10+ 1 file changed, 11 insertions(+), 1 deletion(-)
 11+
 12+diff --git a/crypt.c b/crypt.c
 13+index 784e411..a8975f2 100644
 14+--- a/crypt.c
 15++++ b/crypt.c
 16+@@ -465,7 +465,17 @@ int decrypt(__G__ passwrd)
 17+     GLOBAL(pInfo->encrypted) = FALSE;
 18+     defer_leftover_input(__G);
 19+     for (n = 0; n < RAND_HEAD_LEN; n++) {
 20+-        b = NEXTBYTE;
 21++        /* 2012-11-23 SMS.  (OUSPG report.)
 22++         * Quit early if compressed size < HEAD_LEN.  The resulting
 23++         * error message ("unable to get password") could be improved,
 24++         * but it's better than trying to read nonexistent data, and
 25++         * then continuing with a negative G.csize.  (See
 26++         * fileio.c:readbyte()).
 27++         */
 28++        if ((b = NEXTBYTE) == (ush)EOF)
 29++        {
 30++            return PK_ERR;
 31++        }
 32+         h[n] = (uch)b;
 33+         Trace((stdout, " (%02x)", h[n]));
 34+     }
 35+-- 
 36+2.4.6
 37+
 38+
 39+From 4b48844661ff9569f2ecf582a387d46a5775b5d8 Mon Sep 17 00:00:00 2001
 40+From: Kamil Dudka <kdudka@redhat.com>
 41+Date: Mon, 14 Sep 2015 18:24:56 +0200
 42+Subject: [PATCH 2/3] fix infinite loop when extracting empty bzip2 data
 43+
 44+Bug: https://sourceforge.net/p/infozip/patches/23/
 45+---
 46+ extract.c | 6 ++++++
 47+ 1 file changed, 6 insertions(+)
 48+
 49+diff --git a/extract.c b/extract.c
 50+index 7134bfe..29db027 100644
 51+--- a/extract.c
 52++++ b/extract.c
 53+@@ -2733,6 +2733,12 @@ __GDEF
 54+     int repeated_buf_err;
 55+     bz_stream bstrm;
 56+ 
 57++    if (G.incnt <= 0 && G.csize <= 0L) {
 58++        /* avoid an infinite loop */
 59++        Trace((stderr, "UZbunzip2() got empty input\n"));
 60++        return 2;
 61++    }
 62++
 63+ #if (defined(DLL) && !defined(NO_SLIDE_REDIR))
 64+     if (G.redirect_slide)
 65+         wsize = G.redirect_size, redirSlide = G.redirect_buffer;
 66+-- 
 67+2.4.6
 68+
 69+
 70+From bd150334fb4084f5555a6be26b015a0671cb5b74 Mon Sep 17 00:00:00 2001
 71+From: Kamil Dudka <kdudka@redhat.com>
 72+Date: Tue, 22 Sep 2015 18:52:23 +0200
 73+Subject: [PATCH 3/3] extract: prevent unsigned overflow on invalid input
 74+
 75+Suggested-by: Stefan Cornelius
 76+---
 77+ extract.c | 11 ++++++++++-
 78+ 1 file changed, 10 insertions(+), 1 deletion(-)
 79+
 80+diff --git a/extract.c b/extract.c
 81+index 29db027..b9ae667 100644
 82+--- a/extract.c
 83++++ b/extract.c
 84+@@ -1257,8 +1257,17 @@ static int extract_or_test_entrylist(__G__ numchunk,
 85+         if (G.lrec.compression_method == STORED) {
 86+             zusz_t csiz_decrypted = G.lrec.csize;
 87+ 
 88+-            if (G.pInfo->encrypted)
 89++            if (G.pInfo->encrypted) {
 90++                if (csiz_decrypted < 12) {
 91++                    /* handle the error now to prevent unsigned overflow */
 92++                    Info(slide, 0x401, ((char *)slide,
 93++                      LoadFarStringSmall(ErrUnzipNoFile),
 94++                      LoadFarString(InvalidComprData),
 95++                      LoadFarStringSmall2(Inflate)));
 96++                    return PK_ERR;
 97++                }
 98+                 csiz_decrypted -= 12;
 99++            }
100+             if (G.lrec.ucsize != csiz_decrypted) {
101+                 Info(slide, 0x401, ((char *)slide,
102+                   LoadFarStringSmall2(WrnStorUCSizCSizDiff),
103+-- 
104+2.5.2
105+
+11, -0
 1@@ -0,0 +1,11 @@
 2+--- unzip60/man/unzip.1	2011-01-11 11:59:59.000000000 +0000
 3++++ unzip60/man/unzip.1	2011-02-05 18:45:55.000000000 +0000
 4+@@ -424,7 +424,7 @@
 5+ .\" Amiga support possible eventually, but not yet
 6+ [MS-DOS, OS/2, NT] restore the volume label if the extraction medium is
 7+ removable (e.g., a diskette).  Doubling the option (\fB\-$$\fP) allows fixed
 8+-media (hard disks) to be labelled as well.  By default, volume labels are
 9++media (hard disks) to be labeled as well.  By default, volume labels are
10+ ignored.
11+ .IP \fB\-/\fP\ \fIextensions\fP
12+ [Acorn only] overrides the extension list supplied by Unzip$Ext environment
+34, -0
 1@@ -0,0 +1,34 @@
 2+diff --git a/list.c b/list.c
 3+index f7359c3..4c3d703 100644
 4+--- a/list.c
 5++++ b/list.c
 6+@@ -97,7 +97,7 @@ int list_files(__G)    /* return PK-type error code */
 7+ {
 8+     int do_this_file=FALSE, cfactor, error, error_in_archive=PK_COOL;
 9+ #ifndef WINDLL
10+-    char sgn, cfactorstr[10];
11++    char sgn, cfactorstr[13];
12+     int longhdr=(uO.vflag>1);
13+ #endif
14+     int date_format;
15+@@ -339,7 +339,19 @@ int list_files(__G)    /* return PK-type error code */
16+                 G.crec.compression_method == ENHDEFLATED) {
17+                 methbuf[5] = dtype[(G.crec.general_purpose_bit_flag>>1) & 3];
18+             } else if (methnum >= NUM_METHODS) {
19+-                sprintf(&methbuf[4], "%03u", G.crec.compression_method);
20++                /* 2013-02-26 SMS.
21++                 * http://sourceforge.net/tracker/?func=detail
22++                 *  &aid=2861648&group_id=118012&atid=679786
23++                 * Unexpectedly large compression methods overflow
24++                 * &methbuf[].  Use the old, three-digit decimal format
25++                 * for values which fit.  Otherwise, sacrifice the
26++                 * colon, and use four-digit hexadecimal.
27++                 */
28++                if (G.crec.compression_method <= 999) {
29++                    sprintf( &methbuf[ 4], "%03u", G.crec.compression_method);
30++                } else {
31++                    sprintf( &methbuf[ 3], "%04X", G.crec.compression_method);
32++                }
33+             }
34+ 
35+ #if 0       /* GRR/Euro:  add this? */
+25, -0
 1@@ -0,0 +1,25 @@
 2+diff --git a/extract.c b/extract.c
 3+index a0a4929..9ef80b3 100644
 4+--- a/extract.c
 5++++ b/extract.c
 6+@@ -2214,6 +2214,7 @@ static int test_compr_eb(__G__ eb, eb_size, compr_offset, test_uc_ebdata)
 7+     ulg eb_ucsize;
 8+     uch *eb_ucptr;
 9+     int r;
10++    ush method;
11+ 
12+     if (compr_offset < 4)                /* field is not compressed: */
13+         return PK_OK;                    /* do nothing and signal OK */
14+@@ -2223,6 +2224,12 @@ static int test_compr_eb(__G__ eb, eb_size, compr_offset, test_uc_ebdata)
15+          eb_size <= (compr_offset + EB_CMPRHEADLEN)))
16+         return IZ_EF_TRUNC;               /* no compressed data! */
17+ 
18++    method = makeword(eb + (EB_HEADSIZE + compr_offset));
19++    if ((method == STORED) && (eb_size != compr_offset + EB_CMPRHEADLEN + eb_ucsize))
20++        return PK_ERR;            /* compressed & uncompressed
21++                                   * should match in STORED
22++                                   * method */
23++
24+     if (
25+ #ifdef INT_16BIT
26+         (((ulg)(extent)eb_ucsize) != eb_ucsize) ||
+17, -0
 1@@ -0,0 +1,17 @@
 2+diff --git a/process.c b/process.c
 3+index 1e9a1e1..905732b 100644
 4+--- a/process.c
 5++++ b/process.c
 6+@@ -1751,6 +1751,12 @@ int process_cdir_file_hdr(__G)    /* return PK-type error code */
 7+         = (G.crec.general_purpose_bit_flag & (1 << 11)) == (1 << 11);
 8+ #endif
 9+ 
10++#ifdef SYMLINKS
11++    /* Initialize the symlink flag, may be set by the platform-specific
12++       mapattr function.  */
13++    G.pInfo->symlink = 0;
14++#endif
15++
16+     return PK_COOL;
17+ 
18+ } /* end function process_cdir_file_hdr() */
+41, -0
 1@@ -0,0 +1,41 @@
 2+From: "Steven M. Schweda" <sms@antinode.info>
 3+Subject: Do not ignore extra fields containing Unix Timestamps
 4+Bug-Debian: https://bugs.debian.org/842993
 5+X-Debian-version: 6.0-21
 6+
 7+--- a/process.c
 8++++ b/process.c
 9+@@ -2914,10 +2914,13 @@
10+             break;
11+ 
12+           case EF_IZUNIX2:
13+-            if (have_new_type_eb == 0) {
14+-                flags &= ~0x0ff;        /* ignore any previous IZUNIX field */
15++            if (have_new_type_eb == 0) {        /* (< 1) */
16+                 have_new_type_eb = 1;
17+             }
18++            if (have_new_type_eb <= 1) {
19++                /* Ignore any prior (EF_IZUNIX/EF_PKUNIX) UID/GID. */
20++                flags &= 0x0ff;
21++            }
22+ #ifdef IZ_HAVE_UXUIDGID
23+             if (have_new_type_eb > 1)
24+                 break;          /* IZUNIX3 overrides IZUNIX2 e.f. block ! */
25+@@ -2933,6 +2936,8 @@
26+             /* new 3rd generation Unix ef */
27+             have_new_type_eb = 2;
28+ 
29++            /* Ignore any prior EF_IZUNIX/EF_PKUNIX/EF_IZUNIX2 UID/GID. */
30++            flags &= 0x0ff;
31+         /*
32+           Version       1 byte      version of this extra field, currently 1
33+           UIDSize       1 byte      Size of UID field
34+@@ -2953,8 +2958,6 @@
35+                 uid_size = *((EB_HEADSIZE + 1) + ef_buf);
36+                 gid_size = *((EB_HEADSIZE + uid_size + 2) + ef_buf);
37+ 
38+-                flags &= ~0x0ff;      /* ignore any previous UNIX field */
39+-
40+                 if ( read_ux3_value((EB_HEADSIZE + 2) + ef_buf,
41+                                     uid_size, &z_uidgid[0])
42+                     &&
+26, -0
 1@@ -0,0 +1,26 @@
 2+diff --git a/fileio.c b/fileio.c
 3+index ba0a1d0..03fc4be 100644
 4+--- a/fileio.c
 5++++ b/fileio.c
 6+@@ -2006,6 +2006,7 @@ int do_string(__G__ length, option)   /* return PK-type error code */
 7+     unsigned comment_bytes_left;
 8+     unsigned int block_len;
 9+     int error=PK_OK;
10++    unsigned int length2;
11+ #ifdef AMIGA
12+     char tmp_fnote[2 * AMIGA_FILENOTELEN];   /* extra room for squozen chars */
13+ #endif
14+@@ -2292,8 +2293,12 @@ int do_string(__G__ length, option)   /* return PK-type error code */
15+             seek_zipf(__G__ G.cur_zipfile_bufstart - G.extra_bytes +
16+                       (G.inptr-G.inbuf) + length);
17+         } else {
18+-            if (readbuf(__G__ (char *)G.extra_field, length) == 0)
19++            if ((length2 = readbuf(__G__ (char *)G.extra_field, length)) == 0)
20+                 return PK_EOF;
21++            if(length2 < length) {
22++              memset (__G__ (char *)G.extra_field+length2, 0 , length-length2);
23++              length = length2;
24++            }
25+             /* Looks like here is where extra fields are read */
26+             getZip64Data(__G__ G.extra_field, length);
27+ #ifdef UNICODE_SUPPORT
+28, -0
 1@@ -0,0 +1,28 @@
 2+--- ./process.c.orig    2009-03-06 02:25:10.000000000 +0100
 3++++ ./process.c
 4+@@ -2901,9 +2901,9 @@
 5+         */
 6+ 
 7+ #ifdef IZ_HAVE_UXUIDGID
 8+-            if (eb_len >= EB_UX3_MINLEN
 9+-                && z_uidgid != NULL
10+-                && (*((EB_HEADSIZE + 0) + ef_buf) == 1)
11++            if ((eb_len >= EB_UX3_MINLEN)
12++                && (z_uidgid != NULL)
13++                && ((*((EB_HEADSIZE + 0) + ef_buf) == 1)))
14+                     /* only know about version 1 */
15+             {
16+                 uch uid_size;
17+@@ -2915,10 +2915,10 @@
18+                 flags &= ~0x0ff;      /* ignore any previous UNIX field */
19+ 
20+                 if ( read_ux3_value((EB_HEADSIZE + 2) + ef_buf,
21+-                                    uid_size, z_uidgid[0])
22++                                    uid_size, &z_uidgid[0])
23+                     &&
24+                      read_ux3_value((EB_HEADSIZE + uid_size + 3) + ef_buf,
25+-                                    gid_size, z_uidgid[1]) )
26++                                    gid_size, &z_uidgid[1]) )
27+                 {
28+                     flags |= EB_UX2_VALID;   /* signal success */
29+                 }
+19, -0
 1@@ -0,0 +1,19 @@
 2+diff --git a/process.c b/process.c
 3+index d2a846e..cba2463 100644
 4+--- a/process.c
 5++++ b/process.c
 6+@@ -2064,10 +2064,14 @@ int getUnicodeData(__G__ ef_buf, ef_len)
 7+           G.unipath_checksum = makelong(offset + ef_buf);
 8+           offset += 4;
 9+ 
10++          if (!G.filename_full) {
11++            /* Check if we have a unicode extra section but no filename set */
12++            return PK_ERR;
13++          }
14++
15+           /*
16+            * Compute 32-bit crc
17+            */
18+-
19+           chksum = crc32(chksum, (uch *)(G.filename_full),
20+                          strlen(G.filename_full));
+25, -0
 1@@ -0,0 +1,25 @@
 2+From 6fe72291a5563cdbcd2bdd87e36528537b7cdcfb Mon Sep 17 00:00:00 2001
 3+From: Jakub Martisko <jamartis@redhat.com>
 4+Date: Mon, 18 Nov 2019 14:17:46 +0100
 5+Subject: [PATCH] update the man page
 6+
 7+---
 8+ man/unzip.1 | 2 ++
 9+ 1 file changed, 2 insertions(+)
10+
11+diff --git a/man/unzip.1 b/man/unzip.1
12+index 21816d1..4d66073 100644
13+--- a/man/unzip.1
14++++ b/man/unzip.1
15+@@ -850,6 +850,8 @@ the specified zipfiles were not found.
16+ invalid options were specified on the command line.
17+ .IP 11
18+ no matching files were found.
19++.IP 12
20++invalid zip file with overlapped components (possible zip bomb).
21+ .IP 50
22+ the disk is (or was) full during extraction.
23+ .IP 51
24+-- 
25+2.23.0
26+
+25, -0
 1@@ -0,0 +1,25 @@
 2+From 41beb477c5744bc396fa1162ee0c14218ec12213 Mon Sep 17 00:00:00 2001
 3+From: Mark Adler <madler@alumni.caltech.edu>
 4+Date: Mon, 27 May 2019 08:20:32 -0700
 5+Subject: [PATCH] Fix bug in undefer_input() that misplaced the input state.
 6+
 7+---
 8+ fileio.c | 4 +++-
 9+ 1 file changed, 3 insertions(+), 1 deletion(-)
10+
11+diff --git a/fileio.c b/fileio.c
12+index c042987..bc00d74 100644
13+--- a/fileio.c
14++++ b/fileio.c
15+@@ -530,8 +530,10 @@ void undefer_input(__G)
16+          * This condition was checked when G.incnt_leftover was set > 0 in
17+          * defer_leftover_input(), and it is NOT allowed to touch G.csize
18+          * before calling undefer_input() when (G.incnt_leftover > 0)
19+-         * (single exception: see read_byte()'s  "G.csize <= 0" handling) !!
20++         * (single exception: see readbyte()'s  "G.csize <= 0" handling) !!
21+          */
22++        if (G.csize < 0L)
23++            G.csize = 0L;
24+         G.incnt = G.incnt_leftover + (int)G.csize;
25+         G.inptr = G.inptr_leftover - (int)G.csize;
26+         G.incnt_leftover = 0;
+349, -0
  1@@ -0,0 +1,349 @@
  2+From 47b3ceae397d21bf822bc2ac73052a4b1daf8e1c Mon Sep 17 00:00:00 2001
  3+From: Mark Adler <madler@alumni.caltech.edu>
  4+Date: Tue, 11 Jun 2019 22:01:18 -0700
  5+Subject: [PATCH] Detect and reject a zip bomb using overlapped entries.
  6+
  7+This detects an invalid zip file that has at least one entry that
  8+overlaps with another entry or with the central directory to the
  9+end of the file. A Fifield zip bomb uses overlapped local entries
 10+to vastly increase the potential inflation ratio. Such an invalid
 11+zip file is rejected.
 12+
 13+See https://www.bamsoftware.com/hacks/zipbomb/ for David Fifield's
 14+analysis, construction, and examples of such zip bombs.
 15+
 16+The detection maintains a list of covered spans of the zip files
 17+so far, where the central directory to the end of the file and any
 18+bytes preceding the first entry at zip file offset zero are
 19+considered covered initially. Then as each entry is decompressed
 20+or tested, it is considered covered. When a new entry is about to
 21+be processed, its initial offset is checked to see if it is
 22+contained by a covered span. If so, the zip file is rejected as
 23+invalid.
 24+
 25+This commit depends on a preceding commit: "Fix bug in
 26+undefer_input() that misplaced the input state."
 27+---
 28+ extract.c | 190 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
 29+ globals.c |   1 +
 30+ globals.h |   3 +
 31+ process.c |  11 ++++
 32+ unzip.h   |   1 +
 33+ 5 files changed, 205 insertions(+), 1 deletion(-)
 34+
 35+diff --git a/extract.c b/extract.c
 36+index 1acd769..0973a33 100644
 37+--- a/extract.c
 38++++ b/extract.c
 39+@@ -319,6 +319,125 @@ static ZCONST char Far UnsupportedExtraField[] =
 40+   "\nerror:  unsupported extra-field compression type (%u)--skipping\n";
 41+ static ZCONST char Far BadExtraFieldCRC[] =
 42+   "error [%s]:  bad extra-field CRC %08lx (should be %08lx)\n";
 43++static ZCONST char Far NotEnoughMemCover[] =
 44++  "error: not enough memory for bomb detection\n";
 45++static ZCONST char Far OverlappedComponents[] =
 46++  "error: invalid zip file with overlapped components (possible zip bomb)\n";
 47++
 48++
 49++
 50++
 51++
 52++/* A growable list of spans. */
 53++typedef zoff_t bound_t;
 54++typedef struct {
 55++    bound_t beg;        /* start of the span */
 56++    bound_t end;        /* one past the end of the span */
 57++} span_t;
 58++typedef struct {
 59++    span_t *span;       /* allocated, distinct, and sorted list of spans */
 60++    size_t num;         /* number of spans in the list */
 61++    size_t max;         /* allocated number of spans (num <= max) */
 62++} cover_t;
 63++
 64++/*
 65++ * Return the index of the first span in cover whose beg is greater than val.
 66++ * If there is no such span, then cover->num is returned.
 67++ */
 68++static size_t cover_find(cover, val)
 69++    cover_t *cover;
 70++    bound_t val;
 71++{
 72++    size_t lo = 0, hi = cover->num;
 73++    while (lo < hi) {
 74++        size_t mid = (lo + hi) >> 1;
 75++        if (val < cover->span[mid].beg)
 76++            hi = mid;
 77++        else
 78++            lo = mid + 1;
 79++    }
 80++    return hi;
 81++}
 82++
 83++/* Return true if val lies within any one of the spans in cover. */
 84++static int cover_within(cover, val)
 85++    cover_t *cover;
 86++    bound_t val;
 87++{
 88++    size_t pos = cover_find(cover, val);
 89++    return pos > 0 && val < cover->span[pos - 1].end;
 90++}
 91++
 92++/*
 93++ * Add a new span to the list, but only if the new span does not overlap any
 94++ * spans already in the list. The new span covers the values beg..end-1. beg
 95++ * must be less than end.
 96++ *
 97++ * Keep the list sorted and merge adjacent spans. Grow the allocated space for
 98++ * the list as needed. On success, 0 is returned. If the new span overlaps any
 99++ * existing spans, then 1 is returned and the new span is not added to the
100++ * list. If the new span is invalid because beg is greater than or equal to
101++ * end, then -1 is returned. If the list needs to be grown but the memory
102++ * allocation fails, then -2 is returned.
103++ */
104++static int cover_add(cover, beg, end)
105++    cover_t *cover;
106++    bound_t beg;
107++    bound_t end;
108++{
109++    size_t pos;
110++    int prec, foll;
111++
112++    if (beg >= end)
113++    /* The new span is invalid. */
114++        return -1;
115++
116++    /* Find where the new span should go, and make sure that it does not
117++       overlap with any existing spans. */
118++    pos = cover_find(cover, beg);
119++    if ((pos > 0 && beg < cover->span[pos - 1].end) ||
120++        (pos < cover->num && end > cover->span[pos].beg))
121++        return 1;
122++
123++    /* Check for adjacencies. */
124++    prec = pos > 0 && beg == cover->span[pos - 1].end;
125++    foll = pos < cover->num && end == cover->span[pos].beg;
126++    if (prec && foll) {
127++        /* The new span connects the preceding and following spans. Merge the
128++           following span into the preceding span, and delete the following
129++           span. */
130++        cover->span[pos - 1].end = cover->span[pos].end;
131++        cover->num--;
132++        memmove(cover->span + pos, cover->span + pos + 1,
133++                (cover->num - pos) * sizeof(span_t));
134++    }
135++    else if (prec)
136++        /* The new span is adjacent only to the preceding span. Extend the end
137++           of the preceding span. */
138++        cover->span[pos - 1].end = end;
139++    else if (foll)
140++        /* The new span is adjacent only to the following span. Extend the
141++           beginning of the following span. */
142++        cover->span[pos].beg = beg;
143++    else {
144++        /* The new span has gaps between both the preceding and the following
145++           spans. Assure that there is room and insert the span.  */
146++        if (cover->num == cover->max) {
147++            size_t max = cover->max == 0 ? 16 : cover->max << 1;
148++            span_t *span = realloc(cover->span, max * sizeof(span_t));
149++            if (span == NULL)
150++                return -2;
151++            cover->span = span;
152++            cover->max = max;
153++        }
154++        memmove(cover->span + pos + 1, cover->span + pos,
155++                (cover->num - pos) * sizeof(span_t));
156++        cover->num++;
157++        cover->span[pos].beg = beg;
158++        cover->span[pos].end = end;
159++    }
160++    return 0;
161++}
162+ 
163+ 
164+ 
165+@@ -374,6 +493,29 @@ int extract_or_test_files(__G)    /* return PK-type error code */
166+     }
167+ #endif /* !SFX || SFX_EXDIR */
168+ 
169++    /* One more: initialize cover structure for bomb detection. Start with a
170++       span that covers the central directory though the end of the file. */
171++    if (G.cover == NULL) {
172++        G.cover = malloc(sizeof(cover_t));
173++        if (G.cover == NULL) {
174++            Info(slide, 0x401, ((char *)slide,
175++              LoadFarString(NotEnoughMemCover)));
176++            return PK_MEM;
177++        }
178++        ((cover_t *)G.cover)->span = NULL;
179++        ((cover_t *)G.cover)->max = 0;
180++    }
181++    ((cover_t *)G.cover)->num = 0;
182++    if ((G.extra_bytes != 0 &&
183++         cover_add((cover_t *)G.cover, 0, G.extra_bytes) != 0) ||
184++        cover_add((cover_t *)G.cover,
185++                  G.extra_bytes + G.ecrec.offset_start_central_directory,
186++                  G.ziplen) != 0) {
187++        Info(slide, 0x401, ((char *)slide,
188++          LoadFarString(NotEnoughMemCover)));
189++        return PK_MEM;
190++    }
191++
192+ /*---------------------------------------------------------------------------
193+     The basic idea of this function is as follows.  Since the central di-
194+     rectory lies at the end of the zipfile and the member files lie at the
195+@@ -591,7 +733,8 @@ int extract_or_test_files(__G)    /* return PK-type error code */
196+             if (error > error_in_archive)
197+                 error_in_archive = error;
198+             /* ...and keep going (unless disk full or user break) */
199+-            if (G.disk_full > 1 || error_in_archive == IZ_CTRLC) {
200++            if (G.disk_full > 1 || error_in_archive == IZ_CTRLC ||
201++                error == PK_BOMB) {
202+                 /* clear reached_end to signal premature stop ... */
203+                 reached_end = FALSE;
204+                 /* ... and cancel scanning the central directory */
205+@@ -1060,6 +1203,11 @@ static int extract_or_test_entrylist(__G__ numchunk,
206+ 
207+         /* seek_zipf(__G__ pInfo->offset);  */
208+         request = G.pInfo->offset + G.extra_bytes;
209++        if (cover_within((cover_t *)G.cover, request)) {
210++            Info(slide, 0x401, ((char *)slide,
211++              LoadFarString(OverlappedComponents)));
212++            return PK_BOMB;
213++        }
214+         inbuf_offset = request % INBUFSIZ;
215+         bufstart = request - inbuf_offset;
216+ 
217+@@ -1591,6 +1739,18 @@ static int extract_or_test_entrylist(__G__ numchunk,
218+             return IZ_CTRLC;        /* cancel operation by user request */
219+         }
220+ #endif
221++        error = cover_add((cover_t *)G.cover, request,
222++                          G.cur_zipfile_bufstart + (G.inptr - G.inbuf));
223++        if (error < 0) {
224++            Info(slide, 0x401, ((char *)slide,
225++              LoadFarString(NotEnoughMemCover)));
226++            return PK_MEM;
227++        }
228++        if (error != 0) {
229++            Info(slide, 0x401, ((char *)slide,
230++              LoadFarString(OverlappedComponents)));
231++            return PK_BOMB;
232++        }
233+ #ifdef MACOS  /* MacOS is no preemptive OS, thus call event-handling by hand */
234+         UserStop();
235+ #endif
236+@@ -1992,6 +2152,34 @@ static int extract_or_test_member(__G)    /* return PK-type error code */
237+     }
238+ 
239+     undefer_input(__G);
240++
241++    if ((G.lrec.general_purpose_bit_flag & 8) != 0) {
242++        /* skip over data descriptor (harder than it sounds, due to signature
243++         * ambiguity)
244++         */
245++#       define SIG 0x08074b50
246++#       define LOW 0xffffffff
247++        uch buf[12];
248++        unsigned shy = 12 - readbuf((char *)buf, 12);
249++        ulg crc = shy ? 0 : makelong(buf);
250++        ulg clen = shy ? 0 : makelong(buf + 4);
251++        ulg ulen = shy ? 0 : makelong(buf + 8); /* or high clen if ZIP64 */
252++        if (crc == SIG &&                       /* if not SIG, no signature */
253++            (G.lrec.crc32 != SIG ||             /* if not SIG, have signature */
254++             (clen == SIG &&                    /* if not SIG, no signature */
255++              ((G.lrec.csize & LOW) != SIG ||   /* if not SIG, have signature */
256++               (ulen == SIG &&                  /* if not SIG, no signature */
257++                (G.zip64 ? G.lrec.csize >> 32 : G.lrec.ucsize) != SIG
258++                                                /* if not SIG, have signature */
259++                )))))
260++                   /* skip four more bytes to account for signature */
261++                   shy += 4 - readbuf((char *)buf, 4);
262++        if (G.zip64)
263++            shy += 8 - readbuf((char *)buf, 8); /* skip eight more for ZIP64 */
264++        if (shy)
265++            error = PK_ERR;
266++    }
267++
268+     return error;
269+ 
270+ } /* end function extract_or_test_member() */
271+diff --git a/globals.c b/globals.c
272+index fa8cca5..1e0f608 100644
273+--- a/globals.c
274++++ b/globals.c
275+@@ -181,6 +181,7 @@ Uz_Globs *globalsCtor()
276+ # if (!defined(NO_TIMESTAMPS))
277+     uO.D_flag=1;    /* default to '-D', no restoration of dir timestamps */
278+ # endif
279++    G.cover = NULL;     /* not allocated yet */
280+ #endif
281+ 
282+     uO.lflag=(-1);
283+diff --git a/globals.h b/globals.h
284+index 11b7215..2bdcdeb 100644
285+--- a/globals.h
286++++ b/globals.h
287+@@ -260,12 +260,15 @@ typedef struct Globals {
288+     ecdir_rec       ecrec;         /* used in unzip.c, extract.c */
289+     z_stat   statbuf;              /* used by main, mapname, check_for_newer */
290+ 
291++    int zip64;                     /* true if Zip64 info in extra field */
292++
293+     int      mem_mode;
294+     uch      *outbufptr;           /* extract.c static */
295+     ulg      outsize;              /* extract.c static */
296+     int      reported_backslash;   /* extract.c static */
297+     int      disk_full;
298+     int      newfile;
299++    void     **cover;              /* used in extract.c for bomb detection */
300+ 
301+     int      didCRlast;            /* fileio static */
302+     ulg      numlines;             /* fileio static: number of lines printed */
303+diff --git a/process.c b/process.c
304+index 1e9a1e1..d2e4dc3 100644
305+--- a/process.c
306++++ b/process.c
307+@@ -637,6 +637,13 @@ void free_G_buffers(__G)     /* releases all memory allocated in global vars */
308+     }
309+ #endif
310+ 
311++    /* Free the cover span list and the cover structure. */
312++    if (G.cover != NULL) {
313++        free(*(G.cover));
314++        free(G.cover);
315++        G.cover = NULL;
316++    }
317++
318+ } /* end function free_G_buffers() */
319+ 
320+ 
321+@@ -1890,6 +1897,8 @@ int getZip64Data(__G__ ef_buf, ef_len)
322+ #define Z64FLGS 0xffff
323+ #define Z64FLGL 0xffffffff
324+ 
325++    G.zip64 = FALSE;
326++
327+     if (ef_len == 0 || ef_buf == NULL)
328+         return PK_COOL;
329+ 
330+@@ -1927,6 +1936,8 @@ int getZip64Data(__G__ ef_buf, ef_len)
331+ #if 0
332+           break;                /* Expect only one EF_PKSZ64 block. */
333+ #endif /* 0 */
334++
335++          G.zip64 = TRUE;
336+         }
337+
338+         /* Skip this extra field block. */
339+diff --git a/unzip.h b/unzip.h
340+index 5b2a326..ed24a5b 100644
341+--- a/unzip.h
342++++ b/unzip.h
343+@@ -645,6 +645,7 @@ typedef struct _Uzp_cdir_Rec {
344+ #define PK_NOZIP           9   /* zipfile not found */
345+ #define PK_PARAM          10   /* bad or illegal parameters specified */
346+ #define PK_FIND           11   /* no files found */
347++#define PK_BOMB           12   /* likely zip bomb */
348+ #define PK_DISK           50   /* disk full */
349+ #define PK_EOF            51   /* unexpected EOF */
350+ 
+112, -0
  1@@ -0,0 +1,112 @@
  2+From 6d351831be705cc26d897db44f878a978f4138fc Mon Sep 17 00:00:00 2001
  3+From: Mark Adler <madler@alumni.caltech.edu>
  4+Date: Thu, 25 Jul 2019 20:43:17 -0700
  5+Subject: [PATCH] Do not raise a zip bomb alert for a misplaced central
  6+ directory.
  7+
  8+There is a zip-like file in the Firefox distribution, omni.ja,
  9+which is a zip container with the central directory placed at the
 10+start of the file instead of after the local entries as required
 11+by the zip standard. This commit marks the actual location of the
 12+central directory, as well as the end of central directory records,
 13+as disallowed locations. This now permits such containers to not
 14+raise a zip bomb alert, where in fact there are no overlaps.
 15+---
 16+ extract.c | 25 +++++++++++++++++++------
 17+ process.c |  6 ++++++
 18+ unzpriv.h | 10 ++++++++++
 19+ 3 files changed, 35 insertions(+), 6 deletions(-)
 20+
 21+diff --git a/extract.c b/extract.c
 22+index 0973a33..1b73cb0 100644
 23+--- a/extract.c
 24++++ b/extract.c
 25+@@ -493,8 +493,11 @@ int extract_or_test_files(__G)    /* return PK-type error code */
 26+     }
 27+ #endif /* !SFX || SFX_EXDIR */
 28+ 
 29+-    /* One more: initialize cover structure for bomb detection. Start with a
 30+-       span that covers the central directory though the end of the file. */
 31++    /* One more: initialize cover structure for bomb detection. Start with
 32++       spans that cover any extra bytes at the start, the central directory,
 33++       the end of central directory record (including the Zip64 end of central
 34++       directory locator, if present), and the Zip64 end of central directory
 35++       record, if present. */
 36+     if (G.cover == NULL) {
 37+         G.cover = malloc(sizeof(cover_t));
 38+         if (G.cover == NULL) {
 39+@@ -506,15 +509,25 @@ int extract_or_test_files(__G)    /* return PK-type error code */
 40+         ((cover_t *)G.cover)->max = 0;
 41+     }
 42+     ((cover_t *)G.cover)->num = 0;
 43+-    if ((G.extra_bytes != 0 &&
 44+-         cover_add((cover_t *)G.cover, 0, G.extra_bytes) != 0) ||
 45+-        cover_add((cover_t *)G.cover,
 46++    if (cover_add((cover_t *)G.cover,
 47+                   G.extra_bytes + G.ecrec.offset_start_central_directory,
 48+-                  G.ziplen) != 0) {
 49++                  G.extra_bytes + G.ecrec.offset_start_central_directory +
 50++                  G.ecrec.size_central_directory) != 0) {
 51+         Info(slide, 0x401, ((char *)slide,
 52+           LoadFarString(NotEnoughMemCover)));
 53+         return PK_MEM;
 54+     }
 55++    if ((G.extra_bytes != 0 &&
 56++         cover_add((cover_t *)G.cover, 0, G.extra_bytes) != 0) ||
 57++        (G.ecrec.have_ecr64 &&
 58++         cover_add((cover_t *)G.cover, G.ecrec.ec64_start,
 59++                   G.ecrec.ec64_end) != 0) ||
 60++        cover_add((cover_t *)G.cover, G.ecrec.ec_start,
 61++                  G.ecrec.ec_end) != 0) {
 62++        Info(slide, 0x401, ((char *)slide,
 63++          LoadFarString(OverlappedComponents)));
 64++        return PK_BOMB;
 65++    }
 66+ 
 67+ /*---------------------------------------------------------------------------
 68+     The basic idea of this function is as follows.  Since the central di-
 69+diff --git a/process.c b/process.c
 70+index d2e4dc3..d75d405 100644
 71+--- a/process.c
 72++++ b/process.c
 73+@@ -1408,6 +1408,10 @@ static int find_ecrec64(__G__ searchlen)         /* return PK-class error */
 74+ 
 75+     /* Now, we are (almost) sure that we have a Zip64 archive. */
 76+     G.ecrec.have_ecr64 = 1;
 77++    G.ecrec.ec_start -= ECLOC64_SIZE+4;
 78++    G.ecrec.ec64_start = ecrec64_start_offset;
 79++    G.ecrec.ec64_end = ecrec64_start_offset +
 80++                       12 + makeint64(&byterec[ECREC64_LENGTH]);
 81+ 
 82+     /* Update the "end-of-central-dir offset" for later checks. */
 83+     G.real_ecrec_offset = ecrec64_start_offset;
 84+@@ -1542,6 +1546,8 @@ static int find_ecrec(__G__ searchlen)          /* return PK-class error */
 85+       makelong(&byterec[OFFSET_START_CENTRAL_DIRECTORY]);
 86+     G.ecrec.zipfile_comment_length =
 87+       makeword(&byterec[ZIPFILE_COMMENT_LENGTH]);
 88++    G.ecrec.ec_start = G.real_ecrec_offset;
 89++    G.ecrec.ec_end = G.ecrec.ec_start + 22 + G.ecrec.zipfile_comment_length;
 90+ 
 91+     /* Now, we have to read the archive comment, BEFORE the file pointer
 92+        is moved away backwards to seek for a Zip64 ECLOC64 structure.
 93+diff --git a/unzpriv.h b/unzpriv.h
 94+index dc9eff5..297b3c7 100644
 95+--- a/unzpriv.h
 96++++ b/unzpriv.h
 97+@@ -2185,6 +2185,16 @@ typedef struct VMStimbuf {
 98+        int have_ecr64;                  /* valid Zip64 ecdir-record exists */
 99+        int is_zip64_archive;            /* Zip64 ecdir-record is mandatory */
100+        ush zipfile_comment_length;
101++       zusz_t ec_start, ec_end;         /* offsets of start and end of the
102++                                           end of central directory record,
103++                                           including if present the Zip64
104++                                           end of central directory locator,
105++                                           which immediately precedes the
106++                                           end of central directory record */
107++       zusz_t ec64_start, ec64_end;     /* if have_ecr64 is true, then these
108++                                           are the offsets of the start and
109++                                           end of the Zip64 end of central
110++                                           directory record */
111+    } ecdir_rec;
112+ 
113+ 
+32, -0
 1@@ -0,0 +1,32 @@
 2+https://versaweb.dl.sourceforge.net/project/infozip/UnZip%206.x%20%28latest%29/UnZip%206.0/unzip60.tar.gz
 3+patches/0001-Fix-CVE-2016-9844-rhbz-1404283.patch
 4+patches/series
 5+patches/unzip-6.0-COVSCAN-fix-unterminated-string.patch
 6+patches/unzip-6.0-alt-iconv-utf8-print.patch
 7+patches/unzip-6.0-alt-iconv-utf8.patch
 8+patches/unzip-6.0-attribs-overflow.patch
 9+patches/unzip-6.0-bzip2-configure.patch
10+patches/unzip-6.0-caseinsensitive.patch
11+patches/unzip-6.0-close.patch
12+patches/unzip-6.0-configure.patch
13+patches/unzip-6.0-cve-2014-8139.patch
14+patches/unzip-6.0-cve-2014-8140.patch
15+patches/unzip-6.0-cve-2014-8141.patch
16+patches/unzip-6.0-cve-2018-1000035-heap-based-overflow.patch
17+patches/unzip-6.0-cve-2018-18384.patch
18+patches/unzip-6.0-exec-shield.patch
19+patches/unzip-6.0-fix-recmatch.patch
20+patches/unzip-6.0-format-secure.patch
21+patches/unzip-6.0-heap-overflow-infloop.patch
22+patches/unzip-6.0-manpage-fix.patch
23+patches/unzip-6.0-overflow-long-fsize.patch
24+patches/unzip-6.0-overflow.patch
25+patches/unzip-6.0-symlink.patch
26+patches/unzip-6.0-timestamp.patch
27+patches/unzip-6.0-valgrind.patch
28+patches/unzip-6.0-x-option.patch
29+patches/unzip-6.0_CVE-2021-4217.patch
30+patches/unzip-zipbomb-manpage.patch
31+patches/unzip-zipbomb-part1.patch
32+patches/unzip-zipbomb-part2.patch
33+patches/unzip-zipbomb-part3.patch
+1, -0
1@@ -0,0 +1 @@
2+6.0 2
+106, -0
  1@@ -0,0 +1,106 @@
  2+#!/bin/sh -e
  3+
  4+export DESTDIR="$1"
  5+
  6+for p in *.patch; do
  7+	patch -p1 < "$p"
  8+done
  9+
 10+export CCACHE_SLOPPINESS=time_macros,include_file_mtime
 11+
 12+# Enable streaming related options if gstreamer is installed.
 13+pkg-config --exists gstreamer-video-1.0 && video=ON
 14+pkg-config --exists gstreamer-audio-1.0 && audio=ON
 15+
 16+# Enable the use of openjpeg if the package is installed.
 17+pkg-config --exists openjpeg2 && jpeg=ON
 18+
 19+# Enable WEB_CRYPTO if libtasn1 is installed.
 20+pkg-config --exists libtasn1 && tasn=ON
 21+
 22+# Use clang if installed, decreases compilation time by 25%.
 23+if command -v clang; then
 24+	export CC=clang 
 25+	export CXX=clang++
 26+fi
 27+
 28+# fix unsupported -n or -h flag for sbase ln
 29+sed 's/ln -sfh/ln -sf/g' Source/WebCore/Scripts/generate-derived-sources.sh > _
 30+mv -f _ Source/WebCore/Scripts/generate-derived-sources.sh
 31+chmod 755 Source/WebCore/Scripts/generate-derived-sources.sh
 32+
 33+sed 's/ln -n -s -f/ln -sf/g' Source/JavaScriptCore/GLib.cmake > _
 34+mv -f _ Source/JavaScriptCore/GLib.cmake
 35+
 36+sed 's/ln -n -s -f/ln -sf/g' Source/WebKit/PlatformGTK.cmake > _
 37+mv -f _ Source/WebKit/PlatformGTK.cmake
 38+
 39+sed 's/ln -n -s -f/ln -sf/g' Source/WebKit/PlatformWPEDeprecated.cmake > _
 40+mv -f _ Source/WebKit/PlatformWPEDeprecated.cmake
 41+
 42+sed 's/ln -n -s -f/ln -sf/g' Source/WebKit/PlatformGTKDeprecated.cmake  > _
 43+mv -f _ Source/WebKit/PlatformGTKDeprecated.cmake
 44+ 
 45+
 46+# Remove gettext requirement.
 47+sed 's/ngettext/printf/g' Tools/MiniBrowser/gtk/BrowserDownloadsBar.c > _
 48+mv -f _ Tools/MiniBrowser/gtk/BrowserDownloadsBar.c
 49+sed '/po_files \*\.po/d' Source/WebCore/platform/gtk/po/CMakeLists.txt > _
 50+mv -f _ Source/WebCore/platform/gtk/po/CMakeLists.txt
 51+sed '/if.*GETTEXT_FOUND/,/^endif/d' Source/WebCore/platform/gtk/po/CMakeLists.txt > _
 52+mv -f _ Source/WebCore/platform/gtk/po/CMakeLists.txt
 53+sed '/^GETTEXT_C/d' Source/WebCore/platform/gtk/po/CMakeLists.txt > _
 54+mv -f _ Source/WebCore/platform/gtk/po/CMakeLists.txt
 55+
 56+# Fix clang build.
 57+sed -e '/LC_ALL/d' -e '/WTFLogAlways/d' Source/JavaScriptCore/jsc.cpp > _
 58+mv -f _ Source/JavaScriptCore/jsc.cpp
 59+
 60+# Webkit's CMake configuration forces color output using clang-specific flags
 61+# when using Ninja as the CMAKE_GENERATOR. We should disable them.
 62+sed -e "s/-fcolor-diagnostics//"  \
 63+	-e "s/-fdiagnostics-color=always/-fdiagnostics-color=never/" \
 64+	Source/cmake/WebKitCompilerFlags.cmake > _
 65+mv -f _ Source/cmake/WebKitCompilerFlags.cmake
 66+
 67+# Reduce memory usage.
 68+export LDFLAGS="$LDFLAGS -Wl,--no-keep-memory"
 69+
 70+cmake -B build \
 71+    -DCMAKE_BUILD_TYPE=Release \
 72+    -DCMAKE_INSTALL_PREFIX=/ \
 73+    -DCMAKE_INSTALL_LIBEXECDIR=/lib \
 74+    -DLIB_INSTALL_DIR=/lib \
 75+    -DPORT=GTK \
 76+    -DCMAKE_SKIP_RPATH=ON \
 77+    -DENABLE_BUBBLEWRAP_SANDBOX=OFF \
 78+    -DENABLE_SAMPLING_PROFILER=OFF \
 79+    -DENABLE_GEOLOCATION=OFF \
 80+    -DENABLE_API_TESTS=OFF \
 81+    -DENABLE_PDFJS=OFF \
 82+    -DENABLE_DOCUMENTATION=OFF \
 83+    -DENABLE_GLES2=ON \
 84+    -DENABLE_INTROSPECTION=OFF \
 85+    -DENABLE_MINIBROWSER=OFF \
 86+    -DENABLE_SPELLCHECK=OFF \
 87+    -DUSE_GSTREAMER_GL=OFF \
 88+    -DUSE_LIBHYPHEN=OFF \
 89+    -DUSE_LIBNOTIFY=OFF \
 90+    -DUSE_LIBSECRET=OFF \
 91+    -DUSE_OPENJPEG="${jpeg:-OFF}" \
 92+    -DUSE_SYSTEMD=OFF \
 93+    -DUSE_WOFF2=OFF \
 94+    -DUSE_JPEGXL=OFF \
 95+    -DUSE_WPE_RENDERER=OFF \
 96+    -DENABLE_WEB_CRYPTO="${tasn:-OFF}" \
 97+    -DENABLE_VIDEO="${video:-OFF}" \
 98+    -DENABLE_WEB_AUDIO="${audio:-OFF}" \
 99+    -DENABLE_GAMEPAD=OFF \
100+    -DUSE_SOUP2=OFF \
101+    -DENABLE_JOURNALD_LOG=OFF \
102+    -DUSE_LCMS=OFF \
103+    -DENABLE_WAYLAND_TARGET=OFF \
104+    -DUSE_AVIF=OFF \
105+    -Wno-dev
106+cmake --build build
107+cmake --install build
+2, -0
1@@ -0,0 +1,2 @@
2+db202d3db2b0f3c59ebb262d405373f2120e83d5aa6c5db3a4cbad98ccd7ddca80
3+38325ede040c3e86b0c88e171818636775d72a2e08f182ffcadc703f551e18a14e
+17, -0
 1@@ -0,0 +1,17 @@
 2+cairo
 3+cmake        make
 4+freetype-harfbuzz
 5+glib-networking
 6+gperf        make
 7+gtk+3
 8+libXt
 9+libgcrypt
10+libsoup3
11+libwebp
12+libxslt
13+mesa
14+perl         make
15+python       make
16+ruby         make
17+sqlite
18+unifdef      make
+22, -0
 1@@ -0,0 +1,22 @@
 2+it is not portable to use initial-exec in shared objects that are meant to be
 3+dlopen'd.
 4+glibc reserves some space to allow this anyway- but other libcs like musl do
 5+not.
 6+using an initial-exec variables forces the entire libwebkit2gtk.so to gain a TLS
 7+program header, which makes it fail to dlopen with musl's loader.
 8+
 9+see https://gitlab.freedesktop.org/mesa/mesa/-/commit/8570a2a280587a1e43ac11ad46ad62dfdd6c7b39
10+--
11+diff --git a/Source/WebCore/platform/graphics/gbm/GraphicsContextGLANGLELinux.cpp b/Source/WebCore/platform/graphics/gbm/GraphicsContextGLANGLELinux.cpp
12+index f8627d2c..6666f6d0 100644
13+--- a/Source/WebCore/platform/graphics/gbm/GraphicsContextGLANGLELinux.cpp
14++++ b/Source/WebCore/platform/graphics/gbm/GraphicsContextGLANGLELinux.cpp
15+@@ -108,7 +108,7 @@ RefPtr<PixelBuffer> GraphicsContextGLANGLE::readCompositedResults()
16+ 
17+ bool GraphicsContextGLANGLE::makeContextCurrent()
18+ {
19+-    static thread_local TLS_MODEL_INITIAL_EXEC GraphicsContextGLANGLE* s_currentContext { nullptr };
20++    static thread_local GraphicsContextGLANGLE* s_currentContext { nullptr };
21+ 
22+     if (s_currentContext == this)
23+         return true;
+2, -0
1@@ -0,0 +1,2 @@
2+https://webkitgtk.org/releases/webkitgtk-2.40.4.tar.xz
3+patches/initial-exec.patch
+1, -0
1@@ -0,0 +1 @@
2+2.40.4 1
+0, -1
1@@ -1,6 +1,5 @@
2 libXau
3 libxcb
4-m4      make
5 pkgconf make
6 xcb-util
7 xcb-util-image
+9, -0
 1@@ -0,0 +1,9 @@
 2+#!/bin/sh -e
 3+
 4+./configure \
 5+    --prefix=/ \
 6+    --disable-shared \
 7+    --enable-static
 8+
 9+make
10+make DESTDIR="$1" install
+1, -0
1@@ -0,0 +1 @@
2+d922f02ad7e2034d4429c7328648382caa74ff32523cf9cc5e34e6aab8a45bd064
+3, -0
1@@ -0,0 +1,3 @@
2+libXau
3+libxcb
4+pkgconf make
+22, -0
 1@@ -0,0 +1,22 @@
 2+/var/db/kiss/installed/xcb-util-renderutil/version
 3+/var/db/kiss/installed/xcb-util-renderutil/sources
 4+/var/db/kiss/installed/xcb-util-renderutil/manifest
 5+/var/db/kiss/installed/xcb-util-renderutil/depends
 6+/var/db/kiss/installed/xcb-util-renderutil/checksums
 7+/var/db/kiss/installed/xcb-util-renderutil/build
 8+/var/db/kiss/installed/xcb-util-renderutil/
 9+/var/db/kiss/installed/
10+/var/db/kiss/
11+/var/db/
12+/var/
13+/usr/lib/pkgconfig/xcb-renderutil.pc
14+/usr/lib/pkgconfig/
15+/usr/lib/libxcb-render-util.so.0.0.0
16+/usr/lib/libxcb-render-util.so.0
17+/usr/lib/libxcb-render-util.so
18+/usr/lib/libxcb-render-util.a
19+/usr/lib/
20+/usr/include/xcb/xcb_renderutil.h
21+/usr/include/xcb/
22+/usr/include/
23+/usr/
+1, -0
1@@ -0,0 +1 @@
2+https://x.org/releases/individual/xcb/xcb-util-renderutil-0.3.10.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+0.3.10 1