summaryrefslogtreecommitdiff
path: root/subprojects
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects')
-rw-r--r--subprojects/.gitignore1
-rw-r--r--subprojects/grilo-plugins.wrap4
-rw-r--r--subprojects/grilo.wrap4
-rw-r--r--subprojects/shared-modules/CODEOWNERS21
-rw-r--r--subprojects/shared-modules/README.md38
-rw-r--r--subprojects/shared-modules/SDL/SDL-1.2.15.json40
-rw-r--r--subprojects/shared-modules/SDL/SDL_Pango-0.1.2-API-adds.patch118
-rw-r--r--subprojects/shared-modules/SDL/SDL_image-1.2.12.json19
-rw-r--r--subprojects/shared-modules/SDL/SDL_mixer-1.2.12.json22
-rw-r--r--subprojects/shared-modules/SDL/SDL_net-1.2.8.json19
-rw-r--r--subprojects/shared-modules/SDL/SDL_pango-0.1.2.json23
-rw-r--r--subprojects/shared-modules/SDL/SDL_ttf-2.0.11.json22
-rw-r--r--subprojects/shared-modules/SDL/sdl-check-for-SDL_VIDEO_X11_BACKINGSTORE.patch24
-rw-r--r--subprojects/shared-modules/SDL/sdl-libx11-build.patch59
-rw-r--r--subprojects/shared-modules/SDL/sdl12-compat.json14
-rw-r--r--subprojects/shared-modules/cld2/CMakeLists.txt155
-rw-r--r--subprojects/shared-modules/cld2/cld2.json24
-rw-r--r--subprojects/shared-modules/clutter/clutter.json69
-rw-r--r--subprojects/shared-modules/dbus-glib/dbus-glib.json23
-rw-r--r--subprojects/shared-modules/glew/glew.json30
-rw-r--r--subprojects/shared-modules/glu/glu-9.json12
-rw-r--r--subprojects/shared-modules/gtk2/arc-gtk2-theme-Replace-Inkscape-dependency-with-rsvg-convert.patch180
-rw-r--r--subprojects/shared-modules/gtk2/gtk2-common-themes.json250
-rw-r--r--subprojects/shared-modules/gtk2/gtk2-fix-crash-in-show-uri.patch30
-rw-r--r--subprojects/shared-modules/gtk2/gtk2-use-adwaita-theme.patch80
-rw-r--r--subprojects/shared-modules/gtk2/gtk2.json112
-rw-r--r--subprojects/shared-modules/gtk2/murrine-engine-fix-crash.patch12
-rw-r--r--subprojects/shared-modules/gudev/gudev.json33
-rw-r--r--subprojects/shared-modules/gzdoom/description.patch18
-rw-r--r--subprojects/shared-modules/gzdoom/gzdoom.json50
-rw-r--r--subprojects/shared-modules/intltool/intltool-0.51.json15
-rw-r--r--subprojects/shared-modules/intltool/intltool-perl5.26-regex-fixes.patch59
-rw-r--r--subprojects/shared-modules/lame/lame-3.99.5.json37
-rw-r--r--subprojects/shared-modules/lame/lame-ansi2knr2devnull.patch43
-rw-r--r--subprojects/shared-modules/lame/lame-gtk1-ac-directives.patch205
-rw-r--r--subprojects/shared-modules/lame/lame-msse.patch17
-rw-r--r--subprojects/shared-modules/lame/lame-tinfo.patch23
-rw-r--r--subprojects/shared-modules/libappindicator/Makefile10
-rw-r--r--subprojects/shared-modules/libappindicator/libappindicator-fix-crash-from-incorrect-signal-emission.patch74
-rw-r--r--subprojects/shared-modules/libappindicator/libappindicator-fix-crash-iterating-icon-themes.patch11
-rw-r--r--subprojects/shared-modules/libappindicator/libappindicator-ftbfs.patch20
-rw-r--r--subprojects/shared-modules/libappindicator/libappindicator-gtk2-12.10.json130
-rw-r--r--subprojects/shared-modules/libappindicator/libappindicator-gtk3-12.10.json130
-rw-r--r--subprojects/shared-modules/libappindicator/libappindicator-gtk3-introspection-12.10.json130
-rw-r--r--subprojects/shared-modules/libappindicator/libappindicator-no-python.patch888
-rw-r--r--subprojects/shared-modules/libappindicator/libappindicator.json.in130
-rw-r--r--subprojects/shared-modules/libcanberra/0001-gtk-Don-t-assume-all-GdkDisplays-are-GdkX11Displays-.patch123
-rw-r--r--subprojects/shared-modules/libcanberra/libcanberra.json35
-rw-r--r--subprojects/shared-modules/libmad/Provide-Thumb-2-alternative-code-for-MAD_F_MLN.diff34
-rw-r--r--subprojects/shared-modules/libmad/libmad-0.15.1b-cflags-O2.patch12
-rw-r--r--subprojects/shared-modules/libmad/libmad-0.15.1b-cflags.patch146
-rw-r--r--subprojects/shared-modules/libmad/libmad-0.15.1b-multiarch.patch37
-rw-r--r--subprojects/shared-modules/libmad/libmad-0.15.1b-ppc.patch13
-rw-r--r--subprojects/shared-modules/libmad/libmad.json49
-rw-r--r--subprojects/shared-modules/libmad/libmad.thumb.diff12
-rw-r--r--subprojects/shared-modules/libmad/mad.pc11
-rw-r--r--subprojects/shared-modules/libsecret/libsecret.json23
-rw-r--r--subprojects/shared-modules/libusb/libusb.json19
-rw-r--r--subprojects/shared-modules/linux-audio/dssi.json29
-rw-r--r--subprojects/shared-modules/linux-audio/fftw3f-static.json44
-rw-r--r--subprojects/shared-modules/linux-audio/fftw3f.json41
-rw-r--r--subprojects/shared-modules/linux-audio/fluidsynth2-static.json27
-rw-r--r--subprojects/shared-modules/linux-audio/fluidsynth2.json21
-rw-r--r--subprojects/shared-modules/linux-audio/jack2.json23
-rw-r--r--subprojects/shared-modules/linux-audio/ladspa.json17
-rw-r--r--subprojects/shared-modules/linux-audio/lash.json41
-rw-r--r--subprojects/shared-modules/linux-audio/libinstpatch.json17
-rw-r--r--subprojects/shared-modules/linux-audio/liblo-static.json25
-rw-r--r--subprojects/shared-modules/linux-audio/liblo.json17
-rw-r--r--subprojects/shared-modules/linux-audio/lilv.json100
-rw-r--r--subprojects/shared-modules/linux-audio/lrdf.json50
-rw-r--r--subprojects/shared-modules/linux-audio/lv2.json26
-rw-r--r--subprojects/shared-modules/linux-audio/patches/lash-0.5.3-no-static-lib.patch10
-rw-r--r--subprojects/shared-modules/linux-audio/patches/lash-configure.patch11
-rw-r--r--subprojects/shared-modules/linux-audio/patches/lash-gcc47.patch11
-rw-r--r--subprojects/shared-modules/linux-audio/patches/lash-linking.patch90
-rw-r--r--subprojects/shared-modules/linux-audio/patches/stk-install.sh54
-rw-r--r--subprojects/shared-modules/linux-audio/stk.json28
-rw-r--r--subprojects/shared-modules/lua5.1/lua-5.1.5-so.patch43
-rw-r--r--subprojects/shared-modules/lua5.1/lua-5.1.5.json38
-rw-r--r--subprojects/shared-modules/lua5.3/lua-5.3.5.json46
-rw-r--r--subprojects/shared-modules/lua5.3/lua.pc.in8
-rw-r--r--subprojects/shared-modules/lua5.3/makefile-add-liblua.so-rule.patch47
-rw-r--r--subprojects/shared-modules/lua5.4/lua-5.4.json44
-rw-r--r--subprojects/shared-modules/lua5.4/lua.pc.in8
-rw-r--r--subprojects/shared-modules/lua5.4/makefile-add-liblua.so-rule.patch42
-rw-r--r--subprojects/shared-modules/mac/mac.json19
-rw-r--r--subprojects/shared-modules/physfs/physfs.json18
-rw-r--r--subprojects/shared-modules/pygame/audiofile-gcc6.patch21
-rw-r--r--subprojects/shared-modules/pygame/fluidsynth-no-rawmidi.patch69
-rw-r--r--subprojects/shared-modules/pygame/portmidi-no-java.patch105
-rw-r--r--subprojects/shared-modules/pygame/pygame-1.9.6.json112
-rw-r--r--subprojects/shared-modules/pygtk/pygtk.json107
-rw-r--r--subprojects/shared-modules/pygtk/pygtk.patch39
-rw-r--r--subprojects/shared-modules/python2.7/python-2.7.json52
-rw-r--r--subprojects/shared-modules/qt4/disable-sslv3.patch54
-rw-r--r--subprojects/shared-modules/qt4/fixgcc11.patch11
-rw-r--r--subprojects/shared-modules/qt4/fixgcc9.patch31
-rw-r--r--subprojects/shared-modules/qt4/qt4-4.8.7-minimal.json118
-rw-r--r--subprojects/shared-modules/qt4/qt4-aarch64.patch514
-rw-r--r--subprojects/shared-modules/qt4/qt4-openssl-1.1.patch409
-rw-r--r--subprojects/shared-modules/smpeg/smpeg-0.4.5.json45
-rw-r--r--subprojects/shared-modules/smpeg/smpeg-am-prog-as.patch12
-rw-r--r--subprojects/shared-modules/smpeg/smpeg-export-mpegaudio-class.patch17
-rw-r--r--subprojects/shared-modules/smpeg/smpeg-gcc6.patch40
-rw-r--r--subprojects/shared-modules/smpeg/smpeg-no-gtk.patch37
-rw-r--r--subprojects/shared-modules/vorbisgain/0001-temp_files.patch75
-rw-r--r--subprojects/shared-modules/vorbisgain/0002-errno.patch33
-rw-r--r--subprojects/shared-modules/vorbisgain/0003-manpage.patch248
-rw-r--r--subprojects/shared-modules/vorbisgain/0004-vorbisgain_mtime.patch183
-rw-r--r--subprojects/shared-modules/vorbisgain/0005-double_fclose.patch21
-rw-r--r--subprojects/shared-modules/vorbisgain/0006-manpage_hyphens.patch56
-rw-r--r--subprojects/shared-modules/vorbisgain/0007-recursively_spelling.patch14
-rw-r--r--subprojects/shared-modules/vorbisgain/0008-manpage_recursion_mistake.patch23
-rw-r--r--subprojects/shared-modules/vorbisgain/0009-hardening.patch13
-rw-r--r--subprojects/shared-modules/vorbisgain/0010-fclose.patch13
-rw-r--r--subprojects/shared-modules/vorbisgain/README.md23
-rw-r--r--subprojects/shared-modules/vorbisgain/vorbisgain_0.37-2.json29
118 files changed, 7461 insertions, 0 deletions
diff --git a/subprojects/.gitignore b/subprojects/.gitignore
new file mode 100644
index 00000000..355164c1
--- /dev/null
+++ b/subprojects/.gitignore
@@ -0,0 +1 @@
+*/
diff --git a/subprojects/grilo-plugins.wrap b/subprojects/grilo-plugins.wrap
new file mode 100644
index 00000000..88ab98a6
--- /dev/null
+++ b/subprojects/grilo-plugins.wrap
@@ -0,0 +1,4 @@
+[wrap-git]
+directory = grilo-plugins
+url = https://gitlab.gnome.org/GNOME/grilo-plugins.git
+revision = head
diff --git a/subprojects/grilo.wrap b/subprojects/grilo.wrap
new file mode 100644
index 00000000..ca4e8905
--- /dev/null
+++ b/subprojects/grilo.wrap
@@ -0,0 +1,4 @@
+[wrap-git]
+directory = grilo
+url = https://gitlab.gnome.org/GNOME/grilo.git
+revision = head
diff --git a/subprojects/shared-modules/CODEOWNERS b/subprojects/shared-modules/CODEOWNERS
new file mode 100644
index 00000000..864e266c
--- /dev/null
+++ b/subprojects/shared-modules/CODEOWNERS
@@ -0,0 +1,21 @@
+# Fallback on Flathub admins for unowned shared modules
+* @flathub/reviewers
+
+/dbus-glib/ @TingPing
+/clutter/ @A6GibKm
+/gtk2/ @TingPing
+/gudev/ @Erick555
+/intltool/ @TingPing
+/libappindicator/ @TingPing
+/libcanberra/ @hadess
+/libsecret/ @Lctrs
+/libusb/ @A6GibKm
+/openjpeg/ @mbridon
+/physfs/ @Mailaender
+/python2.7/ @bilelmoussaoui
+/linux-audio/ @hfiguiere
+/lua5.1/ @Unrud
+/mac/ @enzo1982 @Eonfge
+/pygtk/ @Eonfge
+/gzdoom/ @Eonfge
+/vorbisgain/ @Eonfge
diff --git a/subprojects/shared-modules/README.md b/subprojects/shared-modules/README.md
new file mode 100644
index 00000000..cde47075
--- /dev/null
+++ b/subprojects/shared-modules/README.md
@@ -0,0 +1,38 @@
+This repository contains commonly shared modules and is intended to be used as a git submodule.
+
+To use shared modules for packaging an application, add the submodule:
+
+```
+git submodule add https://github.com/flathub/shared-modules.git
+```
+
+Then modules from this repository can be specified in a manifest JSON file like this:
+
+```json
+"modules": [
+ "shared-modules/SDL/SDL-1.2.15.json",
+ {
+ "name": "foo"
+ }
+]
+```
+
+To update the submodule:
+
+```
+git submodule update --remote --merge
+```
+
+To remove the submodule:
+
+```
+git submodule deinit -f -- shared-modules
+rm -rf .git/modules/shared-modules
+git rm -f shared-modules
+rm .gitmodules
+```
+
+
+[See the description in the Flathub wiki](https://github.com/flathub/flathub/wiki/App-Requirements#shared-modules) for more information.
+
+Please do not request adding modules unless they have many users in the Flathub repository.
diff --git a/subprojects/shared-modules/SDL/SDL-1.2.15.json b/subprojects/shared-modules/SDL/SDL-1.2.15.json
new file mode 100644
index 00000000..4d00288b
--- /dev/null
+++ b/subprojects/shared-modules/SDL/SDL-1.2.15.json
@@ -0,0 +1,40 @@
+{
+ "name": "SDL1",
+ "rm-configure": true,
+ "config-opts": ["--disable-static"],
+ "cleanup": [
+ "/bin",
+ "/share/man",
+ "/share/aclocal",
+ "/include",
+ "/lib/pkgconfig",
+ "/lib/*.la",
+ "/lib/*.a"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://www.libsdl.org/release/SDL-1.2.15.tar.gz",
+ "sha256": "d6d316a793e5e348155f0dd93b979798933fb98aa1edebcc108829d6474aad00"
+ },
+ {
+ "type": "patch",
+ "path": "sdl-libx11-build.patch"
+ },
+ {
+ "type": "patch",
+ "path": "sdl-check-for-SDL_VIDEO_X11_BACKINGSTORE.patch"
+ },
+ {
+ "type": "script",
+ "dest-filename": "autogen.sh",
+ "commands": [
+ "sed -i -e 's/.*AM_PATH_ESD.*//' configure.in",
+ "cp -p /usr/share/automake-*/config.{sub,guess} build-scripts",
+ "aclocal",
+ "libtoolize",
+ "autoconf"
+ ]
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/SDL/SDL_Pango-0.1.2-API-adds.patch b/subprojects/shared-modules/SDL/SDL_Pango-0.1.2-API-adds.patch
new file mode 100644
index 00000000..6b1f2d05
--- /dev/null
+++ b/subprojects/shared-modules/SDL/SDL_Pango-0.1.2-API-adds.patch
@@ -0,0 +1,118 @@
+diff -Naupr SDL_Pango-0.1.2.orig/src/SDL_Pango.c SDL_Pango-0.1.2/src/SDL_Pango.c
+--- SDL_Pango-0.1.2.orig/src/SDL_Pango.c 2004-12-10 10:06:33.000000000 +0100
++++ SDL_Pango-0.1.2/src/SDL_Pango.c 2006-09-29 17:42:09.000000000 +0200
+@@ -723,13 +723,8 @@ SDLPango_CopyFTBitmapToSurface(
+ SDL_UnlockSurface(surface);
+ }
+
+-/*!
+- Create a context which contains Pango objects.
+-
+- @return A pointer to the context as a SDLPango_Context*.
+-*/
+ SDLPango_Context*
+-SDLPango_CreateContext()
++SDLPango_CreateContext_GivenFontDesc(const char* font_desc)
+ {
+ SDLPango_Context *context = g_malloc(sizeof(SDLPango_Context));
+ G_CONST_RETURN char *charset;
+@@ -743,8 +738,7 @@ SDLPango_CreateContext()
+ pango_context_set_language (context->context, pango_language_from_string (charset));
+ pango_context_set_base_dir (context->context, PANGO_DIRECTION_LTR);
+
+- context->font_desc = pango_font_description_from_string(
+- MAKE_FONT_NAME (DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE));
++ context->font_desc = pango_font_description_from_string(font_desc);
+
+ context->layout = pango_layout_new (context->context);
+
+@@ -762,6 +756,17 @@ SDLPango_CreateContext()
+ }
+
+ /*!
++ Create a context which contains Pango objects.
++
++ @return A pointer to the context as a SDLPango_Context*.
++*/
++SDLPango_Context*
++SDLPango_CreateContext()
++{
++ SDLPango_CreateContext_GivenFontDesc(MAKE_FONT_NAME(DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE));
++}
++
++/*!
+ Free a context.
+
+ @param *context [i/o] Context to be free
+@@ -1053,6 +1058,20 @@ SDLPango_SetMarkup(
+ pango_layout_set_font_description (context->layout, context->font_desc);
+ }
+
++void
++SDLPango_SetText_GivenAlignment(
++ SDLPango_Context *context,
++ const char *text,
++ int length,
++ SDLPango_Alignment alignment)
++{
++ pango_layout_set_attributes(context->layout, NULL);
++ pango_layout_set_text (context->layout, text, length);
++ pango_layout_set_auto_dir (context->layout, TRUE);
++ pango_layout_set_alignment (context->layout, alignment);
++ pango_layout_set_font_description (context->layout, context->font_desc);
++}
++
+ /*!
+ Set plain text to context.
+ Text must be utf-8.
+@@ -1067,11 +1086,7 @@ SDLPango_SetText(
+ const char *text,
+ int length)
+ {
+- pango_layout_set_attributes(context->layout, NULL);
+- pango_layout_set_text (context->layout, text, length);
+- pango_layout_set_auto_dir (context->layout, TRUE);
+- pango_layout_set_alignment (context->layout, PANGO_ALIGN_LEFT);
+- pango_layout_set_font_description (context->layout, context->font_desc);
++ SDLPango_SetText_GivenAlignment(context, text, length, SDLPANGO_ALIGN_LEFT);
+ }
+
+ /*!
+diff -Naupr SDL_Pango-0.1.2.orig/src/SDL_Pango.h SDL_Pango-0.1.2/src/SDL_Pango.h
+--- SDL_Pango-0.1.2.orig/src/SDL_Pango.h 2004-12-10 10:06:33.000000000 +0100
++++ SDL_Pango-0.1.2/src/SDL_Pango.h 2006-09-29 17:42:09.000000000 +0200
+@@ -109,12 +109,20 @@ typedef enum {
+ SDLPANGO_DIRECTION_NEUTRAL /*! Neutral */
+ } SDLPango_Direction;
+
+-
++/*!
++ Specifies alignment of text. See Pango reference for detail
++*/
++typedef enum {
++ SDLPANGO_ALIGN_LEFT,
++ SDLPANGO_ALIGN_CENTER,
++ SDLPANGO_ALIGN_RIGHT
++} SDLPango_Alignment;
+
+ extern DECLSPEC int SDLCALL SDLPango_Init();
+
+ extern DECLSPEC int SDLCALL SDLPango_WasInit();
+
++extern DECLSPEC SDLPango_Context* SDLCALL SDLPango_CreateContext_GivenFontDesc(const char* font_desc);
+ extern DECLSPEC SDLPango_Context* SDLCALL SDLPango_CreateContext();
+
+ extern DECLSPEC void SDLCALL SDLPango_FreeContext(
+@@ -157,6 +165,12 @@ extern DECLSPEC void SDLCALL SDLPango_Se
+ const char *markup,
+ int length);
+
++extern DECLSPEC void SDLCALL SDLPango_SetText_GivenAlignment(
++ SDLPango_Context *context,
++ const char *text,
++ int length,
++ SDLPango_Alignment alignment);
++
+ extern DECLSPEC void SDLCALL SDLPango_SetText(
+ SDLPango_Context *context,
+ const char *markup,
diff --git a/subprojects/shared-modules/SDL/SDL_image-1.2.12.json b/subprojects/shared-modules/SDL/SDL_image-1.2.12.json
new file mode 100644
index 00000000..5e1692b6
--- /dev/null
+++ b/subprojects/shared-modules/SDL/SDL_image-1.2.12.json
@@ -0,0 +1,19 @@
+{
+ "name": "SDL_image",
+ "config-opts": ["--disable-static"],
+ "rm-configure": true,
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://www.libsdl.org/projects/SDL_image/release/SDL_image-1.2.12.tar.gz",
+ "sha256": "0b90722984561004de84847744d566809dbb9daf732a9e503b91a1b5a84e5699"
+ },
+ {
+ "type": "script",
+ "dest-filename": "autogen.sh",
+ "commands": [
+ "AUTOMAKE=\"automake --foreign\" autoreconf -vfi"
+ ]
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/SDL/SDL_mixer-1.2.12.json b/subprojects/shared-modules/SDL/SDL_mixer-1.2.12.json
new file mode 100644
index 00000000..ba5a6276
--- /dev/null
+++ b/subprojects/shared-modules/SDL/SDL_mixer-1.2.12.json
@@ -0,0 +1,22 @@
+{
+ "name": "SDL_mixer",
+ "config-opts": ["--disable-static"],
+ "rm-configure": true,
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://www.libsdl.org/projects/SDL_mixer/release/SDL_mixer-1.2.12.tar.gz",
+ "sha256": "1644308279a975799049e4826af2cfc787cad2abb11aa14562e402521f86992a"
+ },
+ {
+ "type": "script",
+ "dest-filename": "autogen.sh",
+ "commands": [
+ "rm acinclude/libtool.m4",
+ "rm acinclude/lt*",
+ "AUTOMAKE=\"automake --foreign\" autoreconf -vfi -I acinclude",
+ "cp -p /usr/share/automake-*/config.{sub,guess} build-scripts"
+ ]
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/SDL/SDL_net-1.2.8.json b/subprojects/shared-modules/SDL/SDL_net-1.2.8.json
new file mode 100644
index 00000000..9d3e896c
--- /dev/null
+++ b/subprojects/shared-modules/SDL/SDL_net-1.2.8.json
@@ -0,0 +1,19 @@
+{
+ "name": "SDL_net",
+ "config-opts": ["--disable-static"],
+ "rm-configure": true,
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://www.libsdl.org/projects/SDL_net/release/SDL_net-1.2.8.tar.gz",
+ "sha256": "5f4a7a8bb884f793c278ac3f3713be41980c5eedccecff0260411347714facb4"
+ },
+ {
+ "type": "script",
+ "dest-filename": "autogen.sh",
+ "commands": [
+ "AUTOMAKE=\"automake --foreign\" autoreconf -vfi"
+ ]
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/SDL/SDL_pango-0.1.2.json b/subprojects/shared-modules/SDL/SDL_pango-0.1.2.json
new file mode 100644
index 00000000..fdbef4d1
--- /dev/null
+++ b/subprojects/shared-modules/SDL/SDL_pango-0.1.2.json
@@ -0,0 +1,23 @@
+{
+ "name": "SDL_pango",
+ "config-opts": ["--disable-static"],
+ "rm-configure": true,
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://downloads.sourceforge.net/project/sdlpango/SDL_Pango/0.1.2/SDL_Pango-0.1.2.tar.gz",
+ "sha256": "7f75d3b97acf707c696ea126424906204ebfa07660162de925173cdd0257eba4"
+ },
+ {
+ "type": "patch",
+ "path": "SDL_Pango-0.1.2-API-adds.patch"
+ },
+ {
+ "type": "script",
+ "dest-filename": "autogen.sh",
+ "commands": [
+ "autoreconf -vfi"
+ ]
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/SDL/SDL_ttf-2.0.11.json b/subprojects/shared-modules/SDL/SDL_ttf-2.0.11.json
new file mode 100644
index 00000000..c5a04d51
--- /dev/null
+++ b/subprojects/shared-modules/SDL/SDL_ttf-2.0.11.json
@@ -0,0 +1,22 @@
+{
+ "name": "SDL_ttf",
+ "config-opts": ["--disable-static"],
+ "rm-configure": true,
+ "config-opts": [
+ "ac_cv_path_FREETYPE_CONFIG=pkg-config freetype2"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://www.libsdl.org/projects/SDL_ttf/release/SDL_ttf-2.0.11.tar.gz",
+ "sha256": "724cd895ecf4da319a3ef164892b72078bd92632a5d812111261cde248ebcdb7"
+ },
+ {
+ "type": "script",
+ "dest-filename": "autogen.sh",
+ "commands": [
+ "AUTOMAKE=\"automake --foreign\" autoreconf -vfi"
+ ]
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/SDL/sdl-check-for-SDL_VIDEO_X11_BACKINGSTORE.patch b/subprojects/shared-modules/SDL/sdl-check-for-SDL_VIDEO_X11_BACKINGSTORE.patch
new file mode 100644
index 00000000..c29811d7
--- /dev/null
+++ b/subprojects/shared-modules/SDL/sdl-check-for-SDL_VIDEO_X11_BACKINGSTORE.patch
@@ -0,0 +1,24 @@
+Description: Do not harness backing store by default
+ xorg-server 1.15 enables backing store if composite extension is enabled
+ (default settings). Harnessing backing store through compositor leads to
+ tearing effect.
+ This patch reverts default harnessing backing store to conditional use if
+ SDL_VIDEO_X11_BACKINGSTORE environment variable exists.
+Origin: https://bugs.launchpad.net/ubuntu/+source/libsdl1.2/+bug/1280665/comments/1
+Bug: https://bugzilla.libsdl.org/show_bug.cgi?id=2383
+Bug-Debian: https://bugs.debian.org/747168
+
+--- a/src/video/x11/SDL_x11video.c
++++ b/src/video/x11/SDL_x11video.c
+@@ -1088,10 +1088,8 @@
+ }
+ }
+
+-#if 0 /* This is an experiment - are the graphics faster now? - nope. */
+ if ( SDL_getenv("SDL_VIDEO_X11_BACKINGSTORE") )
+-#endif
+- /* Cache the window in the server, when possible */
++ /* Cache the window in the server when possible, on request */
+ {
+ Screen *xscreen;
+ XSetWindowAttributes a;
diff --git a/subprojects/shared-modules/SDL/sdl-libx11-build.patch b/subprojects/shared-modules/SDL/sdl-libx11-build.patch
new file mode 100644
index 00000000..5bb14d4b
--- /dev/null
+++ b/subprojects/shared-modules/SDL/sdl-libx11-build.patch
@@ -0,0 +1,59 @@
+
+# HG changeset patch
+# User Azamat H. Hackimov <azamat.hackimov@gmail.com>
+# Date 1370184533 -21600
+# Node ID 91ad7b43317a6387e115ecdf63a49137f47e42c8
+# Parent f7fd5c3951b9ed922fdf696f7182e71b58a13268
+Fix compilation with libX11 >= 1.5.99.902.
+
+These changes fixes bug #1769 for SDL 1.2
+(http://bugzilla.libsdl.org/show_bug.cgi?id=1769).
+
+diff -r f7fd5c3951b9 -r 91ad7b43317a configure.in
+--- a/configure.in Wed Apr 17 00:56:53 2013 -0700
++++ b/configure.in Sun Jun 02 20:48:53 2013 +0600
+@@ -1169,6 +1169,17 @@
+ if test x$definitely_enable_video_x11_xrandr = xyes; then
+ AC_DEFINE(SDL_VIDEO_DRIVER_X11_XRANDR)
+ fi
++ AC_MSG_CHECKING(for const parameter to _XData32)
++ have_const_param_xdata32=no
++ AC_TRY_COMPILE([
++ #include <X11/Xlibint.h>
++ extern int _XData32(Display *dpy,register _Xconst long *data,unsigned len);
++ ],[
++ ],[
++ have_const_param_xdata32=yes
++ AC_DEFINE(SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32)
++ ])
++ AC_MSG_RESULT($have_const_param_xdata32)
+ fi
+ fi
+ }
+diff -r f7fd5c3951b9 -r 91ad7b43317a include/SDL_config.h.in
+--- a/include/SDL_config.h.in Wed Apr 17 00:56:53 2013 -0700
++++ b/include/SDL_config.h.in Sun Jun 02 20:48:53 2013 +0600
+@@ -283,6 +283,7 @@
+ #undef SDL_VIDEO_DRIVER_WINDIB
+ #undef SDL_VIDEO_DRIVER_WSCONS
+ #undef SDL_VIDEO_DRIVER_X11
++#undef SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32
+ #undef SDL_VIDEO_DRIVER_X11_DGAMOUSE
+ #undef SDL_VIDEO_DRIVER_X11_DYNAMIC
+ #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT
+diff -r f7fd5c3951b9 -r 91ad7b43317a src/video/x11/SDL_x11sym.h
+--- a/src/video/x11/SDL_x11sym.h Wed Apr 17 00:56:53 2013 -0700
++++ b/src/video/x11/SDL_x11sym.h Sun Jun 02 20:48:53 2013 +0600
+@@ -165,7 +165,11 @@
+ */
+ #ifdef LONG64
+ SDL_X11_MODULE(IO_32BIT)
++#if SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32
++SDL_X11_SYM(int,_XData32,(Display *dpy,register _Xconst long *data,unsigned len),(dpy,data,len),return)
++#else
+ SDL_X11_SYM(int,_XData32,(Display *dpy,register long *data,unsigned len),(dpy,data,len),return)
++#endif
+ SDL_X11_SYM(void,_XRead32,(Display *dpy,register long *data,long len),(dpy,data,len),)
+ #endif
+
+
diff --git a/subprojects/shared-modules/SDL/sdl12-compat.json b/subprojects/shared-modules/SDL/sdl12-compat.json
new file mode 100644
index 00000000..c0227763
--- /dev/null
+++ b/subprojects/shared-modules/SDL/sdl12-compat.json
@@ -0,0 +1,14 @@
+{
+ "name": "sdl12-compat",
+ "buildsystem": "cmake-ninja",
+ "cleanup": [
+ "bin/sdl-config"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/libsdl-org/sdl12-compat/archive/refs/tags/release-1.2.52.tar.gz",
+ "sha256": "5bd7942703575554670a8767ae030f7921a0ac3c5e2fd173a537b7c7a8599014"
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/cld2/CMakeLists.txt b/subprojects/shared-modules/cld2/CMakeLists.txt
new file mode 100644
index 00000000..d25f857f
--- /dev/null
+++ b/subprojects/shared-modules/cld2/CMakeLists.txt
@@ -0,0 +1,155 @@
+cmake_minimum_required(VERSION 2.8)
+project (cld2)
+enable_language(CXX)
+
+set (VERSION "0.0.197")
+set (common_SOURCE_FILES
+ internal/cldutil.cc
+ internal/cldutil_shared.cc
+ internal/compact_lang_det.cc
+ internal/compact_lang_det_hint_code.cc
+ internal/compact_lang_det_impl.cc
+ internal/debug.cc
+ internal/fixunicodevalue.cc
+ internal/generated_entities.cc
+ internal/generated_language.cc
+ internal/generated_ulscript.cc
+ internal/getonescriptspan.cc
+ internal/lang_script.cc
+ internal/offsetmap.cc
+ internal/scoreonescriptspan.cc
+ internal/tote.cc
+ internal/utf8statetable.cc
+ )
+
+set (cld2_SOURCE_FILES
+ internal/generated_distinct_bi_0.cc
+ internal/cld_generated_cjk_uni_prop_80.cc
+ internal/cld2_generated_cjk_compatible.cc
+ internal/cld_generated_cjk_delta_bi_4.cc
+ internal/cld2_generated_quadchrome_2.cc
+ internal/cld2_generated_deltaoctachrome.cc
+ internal/cld2_generated_distinctoctachrome.cc
+ internal/cld_generated_score_quad_octa_2.cc
+ )
+
+set (cld2_full_SOURCE_FILES
+ internal/generated_distinct_bi_0.cc
+ internal/cld_generated_cjk_uni_prop_80.cc
+ internal/cld2_generated_cjk_compatible.cc
+ internal/cld_generated_cjk_delta_bi_32.cc
+ internal/cld2_generated_quad0122.cc
+ internal/cld2_generated_deltaocta0122.cc
+ internal/cld2_generated_distinctocta0122.cc
+ internal/cld_generated_score_quad_octa_0122.cc
+ )
+
+set (cld2_dynamic_SOURCE_FILES
+ internal/cld2_dynamic_data.cc
+ internal/cld2_dynamic_data_loader.cc
+ )
+
+add_library(cld2 SHARED ${common_SOURCE_FILES} ${cld2_SOURCE_FILES})
+set_target_properties(cld2 PROPERTIES
+ ENABLE_EXPORTS On
+ OUTPUT_NAME cld2
+ VERSION ${VERSION}
+ SOVERSION 0
+ )
+add_library(cld2_full SHARED ${cld2_full_SOURCE_FILES})
+set_target_properties(cld2_full PROPERTIES
+ ENABLE_EXPORTS On
+ OUTPUT_NAME cld2_full
+ VERSION ${VERSION}
+ SOVERSION 0
+ )
+
+add_library(cld2_dynamic SHARED ${cld2_dynamic_SOURCE_FILES})
+set_target_properties(cld2_dynamic PROPERTIES
+ ENABLE_EXPORTS On
+ OUTPUT_NAME cld2_dynamic
+ VERSION ${VERSION}
+ SOVERSION 0
+ COMPILE_FLAGS "-DCLD2_DYNAMIC_MODE"
+ )
+install(TARGETS cld2 DESTINATION lib/${CMAKE_LIBRARY_ARCHITECTURE})
+install(TARGETS cld2_full DESTINATION lib/${CMAKE_LIBRARY_ARCHITECTURE})
+install(TARGETS cld2_dynamic DESTINATION lib/${CMAKE_LIBRARY_ARCHITECTURE})
+
+set (cld2_internal_HEADERS
+ internal/cld2_dynamic_compat.h
+ internal/cld2_dynamic_data_extractor.h
+ internal/cld2_dynamic_data.h
+ internal/cld2_dynamic_data_loader.h
+ internal/cld2tablesummary.h
+ internal/cldutil.h
+ internal/cldutil_offline.h
+ internal/cldutil_shared.h
+ internal/compact_lang_det_hint_code.h
+ internal/compact_lang_det_impl.h
+ internal/debug.h
+ internal/fixunicodevalue.h
+ internal/generated_language.h
+ internal/generated_ulscript.h
+ internal/getonescriptspan.h
+ internal/integral_types.h
+ internal/lang_script.h
+ internal/langspan.h
+ internal/offsetmap.h
+ internal/port.h
+ internal/scoreonescriptspan.h
+ internal/stringpiece.h
+ internal/tote.h
+ internal/unittest_data.h
+ internal/utf8acceptinterchange.h
+ internal/utf8prop_lettermarkscriptnum.h
+ internal/utf8repl_lettermarklower.h
+ internal/utf8scannot_lettermarkspecial.h
+ internal/utf8statetable.h
+ )
+
+install(FILES ${cld2_internal_HEADERS} DESTINATION include/cld2/internal)
+set (cld2_public_HEADERS
+ public/compact_lang_det.h
+ public/encodings.h
+ )
+install(FILES ${cld2_public_HEADERS} DESTINATION include/cld2/public)
+
+set (full_SOURCE_FILES
+ internal/cld_generated_cjk_uni_prop_80.cc
+ internal/cld2_generated_cjk_compatible.cc
+ internal/cld_generated_cjk_delta_bi_32.cc
+ internal/generated_distinct_bi_0.cc
+ internal/cld2_generated_quad0122.cc
+ internal/cld2_generated_deltaocta0122.cc
+ internal/cld2_generated_distinctocta0122.cc
+ internal/cld_generated_score_quad_octa_0122.cc
+ )
+
+add_executable(compact_lang_det_test_full ${full_SOURCE_FILES} internal/compact_lang_det_test.cc)
+add_executable(cld2_unittest_full ${full_SOURCE_FILES} internal/cld2_unittest_full.cc)
+add_executable(cld2_unittest_full_avoid ${full_SOURCE_FILES} internal/cld2_unittest_full.cc)
+set_target_properties(cld2_unittest_full_avoid PROPERTIES COMPILE_FLAGS "-Davoid_utf8_string_constants")
+
+add_executable(cld2_dynamic_data_tool internal/cld2_dynamic_data_extractor.cc internal/cld2_dynamic_data_tool.cc)
+add_executable(compact_lang_det_dynamic_test_chrome ${common_SOURCE_FILES} internal/cld2_dynamic_data_extractor.cc internal/compact_lang_det_test.cc)
+add_executable(cld2_dynamic_unittest ${common_SOURCE_FILES} internal/cld2_unittest.cc)
+set_target_properties(compact_lang_det_dynamic_test_chrome PROPERTIES COMPILE_FLAGS "-DCLD2_DYNAMIC_MODE")
+set_target_properties(cld2_dynamic_unittest PROPERTIES COMPILE_FLAGS "-DCLD2_DYNAMIC_MODE")
+
+add_executable(compact_lang_det_test_chrome_2 internal/compact_lang_det_test.cc)
+add_executable(compact_lang_det_test_chrome_16 internal/compact_lang_det_test.cc)
+add_executable(cld2_unittest_chrome_2 internal/cld2_unittest.cc)
+add_executable(cld2_unittest_avoid_chrome_2 internal/cld2_unittest.cc)
+set_target_properties(cld2_unittest_avoid_chrome_2 PROPERTIES COMPILE_FLAGS "-Davoid_utf8_string_constants")
+
+target_link_libraries(compact_lang_det_test_full cld2)
+target_link_libraries(cld2_unittest_full cld2)
+target_link_libraries(cld2_unittest_full_avoid cld2)
+target_link_libraries(cld2_dynamic_data_tool cld2 cld2_dynamic)
+target_link_libraries(compact_lang_det_dynamic_test_chrome cld2_dynamic)
+target_link_libraries(cld2_dynamic_unittest cld2_dynamic)
+target_link_libraries(compact_lang_det_test_chrome_2 cld2)
+target_link_libraries(compact_lang_det_test_chrome_16 cld2)
+target_link_libraries(cld2_unittest_chrome_2 cld2)
+target_link_libraries(cld2_unittest_avoid_chrome_2 cld2)
diff --git a/subprojects/shared-modules/cld2/cld2.json b/subprojects/shared-modules/cld2/cld2.json
new file mode 100644
index 00000000..8487e31e
--- /dev/null
+++ b/subprojects/shared-modules/cld2/cld2.json
@@ -0,0 +1,24 @@
+{
+ "name": "cld2",
+ "buildsystem": "simple",
+ "build-options": {
+ "cxxflags": "-std=c++98"
+ },
+ "build-commands": [
+ "cp CMakeLists.txt ./cld2",
+ "cd cld2 && mkdir build && cd build && cmake .. -DCMAKE_INSTALL_PREFIX=/app -DCMAKE_BUILD_TYPE=Release",
+ "cd cld2/build && make && make install"
+ ],
+ "sources":[
+ {
+ "type": "git",
+ "url": "https://github.com/CLD2Owners/cld2.git",
+ "commit": "84b58a5d7690ebf05a91406f371ce00c3daf31c0",
+ "dest": "cld2"
+ },
+ {
+ "type": "file",
+ "path": "CMakeLists.txt"
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/clutter/clutter.json b/subprojects/shared-modules/clutter/clutter.json
new file mode 100644
index 00000000..a47b207d
--- /dev/null
+++ b/subprojects/shared-modules/clutter/clutter.json
@@ -0,0 +1,69 @@
+{
+ "name": "clutter-gtk",
+ "cleanup": [
+ "/share/gtk-doc"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://download.gnome.org/sources/clutter-gtk/1.8/clutter-gtk-1.8.4.tar.xz",
+ "sha256": "521493ec038973c77edcb8bc5eac23eed41645117894aaee7300b2487cb42b06"
+ }
+ ],
+ "modules": [
+ {
+ "name": "cogl",
+ "config-opts": [
+ "--disable-cogl-gst",
+ "--disable-gtk-doc",
+ "--enable-xlib-egl-platform",
+ "--enable-wayland-egl-platform"
+ ],
+ "cleanup": [
+ "/share/gtk-doc",
+ "/share/cogl/examples-data"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://download.gnome.org/sources/cogl/1.22/cogl-1.22.8.tar.xz",
+ "sha256": "a805b2b019184710ff53d0496f9f0ce6dcca420c141a0f4f6fcc02131581d759"
+ }
+ ]
+ },
+ {
+ "name": "clutter",
+ "config-opts": [
+ "--disable-gtk-doc",
+ "--enable-egl-backend",
+ "--enable-wayland-backend"
+ ],
+ "cleanup": [
+ "/share/gtk-doc"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://download.gnome.org/sources/clutter/1.26/clutter-1.26.4.tar.xz",
+ "sha256": "8b48fac159843f556d0a6be3dbfc6b083fc6d9c58a20a49a6b4919ab4263c4e6"
+ }
+ ]
+ },
+ {
+ "name": "clutter-gst",
+ "config-opts": [
+ "--disable-gtk-doc"
+ ],
+ "cleanup": [
+ "/share/gtk-doc"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://download.gnome.org/sources/clutter-gst/3.0/clutter-gst-3.0.27.tar.xz",
+ "sha256": "fe69bd6c659d24ab30da3f091eb91cd1970026d431179b0724f13791e8ad9f9d"
+ }
+ ]
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/dbus-glib/dbus-glib.json b/subprojects/shared-modules/dbus-glib/dbus-glib.json
new file mode 100644
index 00000000..f8b90905
--- /dev/null
+++ b/subprojects/shared-modules/dbus-glib/dbus-glib.json
@@ -0,0 +1,23 @@
+{
+ "name": "dbus-glib",
+ "cleanup": [
+ "*.la",
+ "/bin",
+ "/etc",
+ "/include",
+ "/libexec",
+ "/share/gtk-doc",
+ "/share/man"
+ ],
+ "config-opts": [
+ "--disable-static",
+ "--disable-gtk-doc"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://dbus.freedesktop.org/releases/dbus-glib/dbus-glib-0.112.tar.gz",
+ "sha256": "7d550dccdfcd286e33895501829ed971eeb65c614e73aadb4a08aeef719b143a"
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/glew/glew.json b/subprojects/shared-modules/glew/glew.json
new file mode 100644
index 00000000..ae326a23
--- /dev/null
+++ b/subprojects/shared-modules/glew/glew.json
@@ -0,0 +1,30 @@
+{
+ "name": "glew",
+ "no-autogen": true,
+ "make-args": [
+ "GLEW_PREFIX=${FLATPAK_DEST}",
+ "GLEW_DEST=${FLATPAK_DEST}",
+ "LIBDIR=${FLATPAK_DEST}/lib",
+ "CFLAGS.EXTRA:=${CFLAGS} -fPIC",
+ "LDFLAGS.EXTRA=${LDFLAGS}"
+ ],
+ "make-install-args": [
+ "GLEW_PREFIX=${FLATPAK_DEST}",
+ "GLEW_DEST=${FLATPAK_DEST}",
+ "LIBDIR=${FLATPAK_DEST}/lib",
+ "CFLAGS.EXTRA:=${CFLAGS} -fPIC",
+ "LDFLAGS.EXTRA=${LDFLAGS}"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://downloads.sourceforge.net/project/glew/glew/2.2.0/glew-2.2.0.tgz",
+ "sha256": "d4fc82893cfb00109578d0a1a2337fb8ca335b3ceccf97b97e5cc7f08e4353e1"
+ }
+ ],
+ "cleanup": [
+ "/include",
+ "/lib/pkgconfig",
+ "/lib/*.a"
+ ]
+}
diff --git a/subprojects/shared-modules/glu/glu-9.json b/subprojects/shared-modules/glu/glu-9.json
new file mode 100644
index 00000000..2dfb70b4
--- /dev/null
+++ b/subprojects/shared-modules/glu/glu-9.json
@@ -0,0 +1,12 @@
+{
+ "name": "glu",
+ "config-opts": ["--disable-static"],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://mesa.freedesktop.org/archive/glu/glu-9.0.2.tar.xz",
+ "sha256": "6e7280ff585c6a1d9dfcdf2fca489251634b3377bfc33c29e4002466a38d02d4"
+ }
+ ],
+ "cleanup": [ "/include", "/lib/*.a", "/lib/*.la", "/lib/pkgconfig" ]
+}
diff --git a/subprojects/shared-modules/gtk2/arc-gtk2-theme-Replace-Inkscape-dependency-with-rsvg-convert.patch b/subprojects/shared-modules/gtk2/arc-gtk2-theme-Replace-Inkscape-dependency-with-rsvg-convert.patch
new file mode 100644
index 00000000..90e09509
--- /dev/null
+++ b/subprojects/shared-modules/gtk2/arc-gtk2-theme-Replace-Inkscape-dependency-with-rsvg-convert.patch
@@ -0,0 +1,180 @@
+From d5e0034183564df5fec8e4dde1705116c7b38021 Mon Sep 17 00:00:00 2001
+From: Patrick Griffis <tingping@tingping.se>
+Date: Sat, 16 May 2020 18:00:36 -0700
+Subject: [PATCH] Replace Inkscape dependency with rsvg-convert
+
+rsvg-convert is a *much* smaller dependency that all systems with
+a functioning GTK installation should have easy access to.
+---
+ common/gtk-2.0/Makefile.am | 6 +-----
+ common/gtk-2.0/render-asset.sh | 16 ++++++++--------
+ common/gtk-3.0/common.am | 12 ++----------
+ common/xfwm4/Makefile.am | 6 +-----
+ common/xfwm4/render-asset.sh | 16 ++++++++--------
+ configure.ac | 8 ++------
+ 6 files changed, 22 insertions(+), 42 deletions(-)
+
+diff --git a/common/gtk-2.0/Makefile.am b/common/gtk-2.0/Makefile.am
+index 010823a..873013a 100644
+--- a/common/gtk-2.0/Makefile.am
++++ b/common/gtk-2.0/Makefile.am
+@@ -35,11 +35,7 @@ $(light): $(srcdir)/light/assets.svg | light/assets
+ $(dark): $(srcdir)/dark/assets.svg | dark/assets
+
+ $(light) $(dark):
+-if INKSCAPE_1_0_OR_NEWER
+- $(INKSCAPE) --export-id-only --export-filename="$@" --export-id="$(basename $(notdir $@))" --export-dpi=$(if $(filter $(OPTION_GTK2_HIDPI),true),192,96) "$<" >/dev/null
+-else !INKSCAPE_1_0_OR_NEWER
+- $(INKSCAPE) --export-id-only --export-png="$@" --export-id="$(basename $(notdir $@))" --export-dpi=$(if $(filter $(OPTION_GTK2_HIDPI),true),192,96) "$<" >/dev/null
+-endif
++ $(RSVG_CONVERT) --format=png --output="$@" --export-id="$(basename $(notdir $@))" --dpi-x=$(if $(filter $(OPTION_GTK2_HIDPI),true),192,96) --dpi-y=$(if $(filter $(OPTION_GTK2_HIDPI),true),192,96) "$<" >/dev/null
+ $(OPTIPNG) -o7 --quiet "$@"
+
+ menubar-toolbar/%-dark.png: dark/assets/%.png | menubar-toolbar
+diff --git a/common/gtk-2.0/render-asset.sh b/common/gtk-2.0/render-asset.sh
+index 6685414..f6198af 100755
+--- a/common/gtk-2.0/render-asset.sh
++++ b/common/gtk-2.0/render-asset.sh
+@@ -1,7 +1,7 @@
+ #!/bin/bash
+ set -ueo pipefail
+
+-INKSCAPE="$(which inkscape)"
++RSVG_CONVERT="$(which rsvg-convert)"
+ OPTIPNG="$(which optipng)"
+
+ ASSETS_DIR="$1"
+@@ -14,9 +14,9 @@ if [[ -f "${result_file}" ]] ; then
+ echo "${result_file} already exists."
+ else
+ echo "Rendering '${result_file}'"
+- "$INKSCAPE" --export-id="$i" \
+- --export-id-only \
+- --export-png="${result_file}" "$SRC_FILE" >/dev/null \
++ "$RSVG_CONVERT" --export-id="$i" \
++ --format=png
++ --output="${result_file}" "$SRC_FILE" >/dev/null \
+ && "$OPTIPNG" -o7 --quiet "${result_file}"
+ fi
+
+@@ -26,10 +26,10 @@ if [[ "$OPTION_GTK2_HIDPI" == "true" ]]; then
+ echo "${result_file_hidpi} already exists."
+ else
+ echo "Rendering '${result_file_hidpi}'"
+- "$INKSCAPE" --export-id="$i" \
+- --export-id-only \
+- --export-dpi=192 \
+- --export-png="${result_file_hidpi}" "$SRC_FILE" >/dev/null \
++ "$RSVG_CONVERT" --export-id="$i" \
++ --dpi-x=192 --dpi-y=192 \
++ --format=png
++ --output="${result_file_hidpi}" "$SRC_FILE" >/dev/null \
+ && "$OPTIPNG" -o7 --quiet "${result_file_hidpi}"
+ fi
+ fi
+diff --git a/common/gtk-3.0/common.am b/common/gtk-3.0/common.am
+index a93d01d..9e4b102 100644
+--- a/common/gtk-3.0/common.am
++++ b/common/gtk-3.0/common.am
+@@ -14,19 +14,11 @@ clean:
+ rm -rf assets/ light/ dark/ darker/ lighter/
+
+ $(normal): $(srcdir)/assets.svg | assets
+-if INKSCAPE_1_0_OR_NEWER
+- $(INKSCAPE) --export-id-only --export-filename="$@" --export-id="$(basename $(notdir $@))" --export-dpi=96 "$<" >/dev/null
+-else !INKSCAPE_1_0_OR_NEWER
+- $(INKSCAPE) --export-id-only --export-png="$@" --export-id="$(basename $(notdir $@))" --export-dpi=96 "$<" >/dev/null
+-endif
++ $(RSVG_CONVERT) --format=png --output="$@" --export-id="$(basename $(notdir $@))" --dpi-y=96 --dpi-x=96 "$<" >/dev/null
+ $(OPTIPNG) -o7 --quiet "$@"
+
+ $(hidpi): $(srcdir)/assets.svg | assets
+-if INKSCAPE_1_0_OR_NEWER
+- $(INKSCAPE) --export-id-only --export-filename="$@" --export-id="$(patsubst %@2,%,$(basename $(notdir $@)))" --export-dpi=192 "$<" >/dev/null
+-else !INKSCAPE_1_0_OR_NEWER
+- $(INKSCAPE) --export-id-only --export-png="$@" --export-id="$(patsubst %@2,%,$(basename $(notdir $@)))" --export-dpi=192 "$<" >/dev/null
+-endif
++ $(RSVG_CONVERT) --format=png --output="$@" --export-id="$(patsubst %@2,%,$(basename $(notdir $@)))" --dpi-y=192 --dpi-x=192 "$<" >/dev/null
+ $(OPTIPNG) -o7 --quiet "$@"
+
+ .PHONY: normal hidpi clean
+diff --git a/common/xfwm4/Makefile.am b/common/xfwm4/Makefile.am
+index e5fbdc5..1f21183 100644
+--- a/common/xfwm4/Makefile.am
++++ b/common/xfwm4/Makefile.am
+@@ -17,11 +17,7 @@ $(light): $(srcdir)/light/assets.svg | light/assets
+ $(dark): $(srcdir)/dark/assets.svg | dark/assets
+
+ $(light) $(dark):
+-if INKSCAPE_1_0_OR_NEWER
+- $(INKSCAPE) --export-id-only --export-filename="$@" --export-id="$(basename $(notdir $@))" --export-dpi=$(if $(filter $(OPTION_GTK2_HIDPI),true),192,96) "$<" >/dev/null
+-else !INKSCAPE_1_0_OR_NEWER
+- $(INKSCAPE) --export-id-only --export-png="$@" --export-id="$(basename $(notdir $@))" --export-dpi=$(if $(filter $(OPTION_GTK2_HIDPI),true),192,96) "$<" >/dev/null
+-endif
++ $(RSVG_CONVERT) --format=png --output="$@" --export-id="$(basename $(notdir $@))" --dpi-y=$(if $(filter $(OPTION_GTK2_HIDPI),true),192,96) --dpi-x=$(if $(filter $(OPTION_GTK2_HIDPI),true),192,96) "$<" >/dev/null
+ $(OPTIPNG) -o7 --quiet "$@"
+
+ .PHONY: light dark clean
+diff --git a/common/xfwm4/render-asset.sh b/common/xfwm4/render-asset.sh
+index 6685414..f6198af 100755
+--- a/common/xfwm4/render-asset.sh
++++ b/common/xfwm4/render-asset.sh
+@@ -1,7 +1,7 @@
+ #!/bin/bash
+ set -ueo pipefail
+
+-INKSCAPE="$(which inkscape)"
++RSVG_CONVERT="$(which rsvg-convert)"
+ OPTIPNG="$(which optipng)"
+
+ ASSETS_DIR="$1"
+@@ -14,9 +14,9 @@ if [[ -f "${result_file}" ]] ; then
+ echo "${result_file} already exists."
+ else
+ echo "Rendering '${result_file}'"
+- "$INKSCAPE" --export-id="$i" \
+- --export-id-only \
+- --export-png="${result_file}" "$SRC_FILE" >/dev/null \
++ "$RSVG_CONVERT" --export-id="$i" \
++ --format=png
++ --output="${result_file}" "$SRC_FILE" >/dev/null \
+ && "$OPTIPNG" -o7 --quiet "${result_file}"
+ fi
+
+@@ -26,10 +26,10 @@ if [[ "$OPTION_GTK2_HIDPI" == "true" ]]; then
+ echo "${result_file_hidpi} already exists."
+ else
+ echo "Rendering '${result_file_hidpi}'"
+- "$INKSCAPE" --export-id="$i" \
+- --export-id-only \
+- --export-dpi=192 \
+- --export-png="${result_file_hidpi}" "$SRC_FILE" >/dev/null \
++ "$RSVG_CONVERT" --export-id="$i" \
++ --dpi-x=192 --dpi-y=192 \
++ --format=png
++ --output="${result_file_hidpi}" "$SRC_FILE" >/dev/null \
+ && "$OPTIPNG" -o7 --quiet "${result_file_hidpi}"
+ fi
+ fi
+diff --git a/configure.ac b/configure.ac
+index f0725f1..1a52cc7 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -48,12 +48,8 @@ AM_CONDITIONAL([GNOME_SHELL_3_32_OR_NEWER], [test "0$GNOME_SHELL_VERSMNR" -ge 31
+ AS_IF([test "x$ENABLE_CINNAMON" != xno], [ARC_CINNAMON])
+
+ AS_IF([test "x$ENABLE_GTK2" != xno -o "x$ENABLE_GTK3" != xno -o "x$ENABLE_XFWM" != xno], [
+- AC_PATH_PROG([INKSCAPE], [inkscape])
+- AS_IF([test "x$ac_cv_path_INKSCAPE" = x], [AC_MSG_ERROR([inkscape not found])])
+- AS_IF([test "x$ac_cv_path_INKSCAPE" != x],
+- [INKSCAPE_VERSMJR=`inkscape --version 2> /dev/null | cut -d' ' -f2 | cut -d'.' -f1`]
+- AM_CONDITIONAL([INKSCAPE_1_0_OR_NEWER], [test "x$INKSCAPE_VERSMJR" = x1])
+- )
++ AC_PATH_PROG([RSVG_CONVERT], [rsvg-convert])
++ AS_IF([test "x$ac_cv_path_RSVG_CONVERT" = x], [AC_MSG_ERROR([rsvg-convert not found])])
+ AC_PATH_PROG([OPTIPNG], [optipng])
+ AS_IF([test "x$ac_cv_path_OPTIPNG" = x], [AC_MSG_ERROR([optipng not found])])
+ ])
+--
+2.26.0
+
diff --git a/subprojects/shared-modules/gtk2/gtk2-common-themes.json b/subprojects/shared-modules/gtk2/gtk2-common-themes.json
new file mode 100644
index 00000000..5f4f791d
--- /dev/null
+++ b/subprojects/shared-modules/gtk2/gtk2-common-themes.json
@@ -0,0 +1,250 @@
+{
+ "name": "gtk2-common-themes",
+ "buildsystem": "simple",
+ "build-commands": [],
+ "modules": [
+ {
+ "name": "sassc",
+ "// NOTE": "This is used by Yaru, Greybird, and Materia",
+ "cleanup": ["*"],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/sass/sassc/archive/3.5.0.tar.gz",
+ "sha256": "26f54e31924b83dd706bc77df5f8f5553a84d51365f0e3c566df8de027918042"
+ },
+ {
+ "type": "script",
+ "commands": ["autoreconf -si"]
+ }
+ ],
+ "modules": [
+ {
+ "name": "libsass",
+ "cleanup": ["*"],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/sass/libsass/archive/3.5.4.tar.gz",
+ "sha256": "5f61cbcddaf8e6ef7a725fcfa5d05297becd7843960f245197ebb655ff868770"
+ },
+ {
+ "type": "script",
+ "commands": ["autoreconf -si"]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "gtk2-murrine-engine",
+ "rm-configure": true,
+ "// NOTE": "Used by Arc and CrosAdapta",
+ "cleanup": [
+ "*.la"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://download.gnome.org/sources/murrine/0.98/murrine-0.98.2.tar.xz",
+ "sha256": "e9c68ae001b9130d0f9d1b311e8121a94e5c134b82553ba03971088e57d12c89"
+ },
+ {
+ "type": "patch",
+ "path": "murrine-engine-fix-crash.patch"
+ },
+ {
+ "type": "script",
+ "commands": [
+ "rm config.guess",
+ "autoreconf -si"
+ ]
+ }
+ ]
+ },
+ {
+ "name": "cros-adapta-gtk2-theme",
+ "// NOTE": "This is used by Chrome OS",
+ "buildsystem": "simple",
+ "build-commands": [
+ "install -Dm644 index.theme ${FLATPAK_DEST}/share/themes/CrosAdapta/index.theme",
+ "cp -r gtk-2.0 ${FLATPAK_DEST}/share/themes/CrosAdapta"
+ ],
+ "sources": [
+ {
+ "type": "git",
+ "url": "https://chromium.googlesource.com/chromiumos/third_party/cros-adapta",
+ "commit": "eb6d8c1832b9181926df107faf41a80887fd982c"
+ }
+ ]
+ },
+ {
+ "name": "arc-gtk2-theme",
+ "// NOTE": "This is used by Solus and is popular",
+ "// FIXME": "This has a dependency on inkscape and my patch isn't quite good enough sadly",
+ "disabled": true,
+ "config-opts": [
+ "--disable-gnome-shell",
+ "--disable-cinnamon",
+ "--disable-gtk3",
+ "--disable-metacity",
+ "--disable-xfwm",
+ "--disable-plank",
+ "--disable-openbox",
+ "--disable-unity"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/jnsh/arc-theme/releases/download/20200513/arc-theme-20200513.tar.xz",
+ "sha256": "cd268b878d6ad7c81b7acc0f89b66e26ee9a9a92eafb03b792318d51707f1962"
+ },
+ {
+ "type": "patch",
+ "path": "arc-gtk2-theme-Replace-Inkscape-dependency-with-rsvg-convert.patch"
+ },
+ {
+ "type": "shell",
+ "commands": ["sed -i 's|\"$srcdir/configure\" $@||' autogen.sh"]
+ }
+ ],
+ "modules": [
+ {
+ "name": "optipng",
+ "cleanup": ["*"],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://prdownloads.sourceforge.net/optipng/optipng-0.7.7.tar.gz",
+ "sha256": "4f32f233cef870b3f95d3ad6428bfe4224ef34908f1b42b0badf858216654452"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "breeze-gtk2-theme",
+ "// NOTE": "This is used by some KDE distros",
+ "// FIXME": "This is disabled because breeze depends on KDecoration/Qt5...",
+ "disabled": true,
+ "buildsystem": "cmake-ninja",
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/KDE/breeze-gtk/archive/v5.18.90.tar.gz",
+ "sha256": "73ff1fee8afb2fc498075d1693a664f6a749b763606d4548f74e225983107730"
+ }
+ ],
+ "modules": [
+ {
+ "name": "extra-cmake-modules",
+ "buildsystem": "cmake-ninja",
+ "cleanup": ["*"],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/KDE/extra-cmake-modules/archive/v5.70.0.tar.gz",
+ "sha256": "0e6d0694b2372cbdbc9e64abcaaac21196a15355b360e02e2e833885ae0c62f2"
+ }
+ ]
+ },
+ {
+ "name": "breeze",
+ "buildsystem": "cmake-ninja",
+ "cleanup": ["*"],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/KDE/breeze/archive/v5.18.90.tar.gz",
+ "sha256": "55e42656601dd79db1bc40589764606ec203c7f99c84340deed6e3847a4fdaf6"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "elementary-gtk2-theme",
+ "// NOTE": "This is used by Elementary OS",
+ "buildsystem": "meson",
+ "cleanup": [
+ "/share/themes/elementary/gtk-3.0",
+ "/share/themes/elementary/plank",
+ "/share/plank"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/elementary/stylesheet/archive/5.4.2.tar.gz",
+ "sha256": "3bc37723daf4ce0b7c9ce4c125ef0055affe8d6654981388ec87d4a23a1ae0ec"
+ }
+ ]
+ },
+ {
+ "name": "yaru-gtk2-theme",
+ "// NOTE": "This is used by Ubuntu",
+ "buildsystem": "meson",
+ "config-opts": [
+ "-Dicons=false",
+ "-Dsounds=false",
+ "-Dgnome-shell=false",
+ "-Dsessions=false"
+ ],
+ "cleanup": [
+ "/share/themes/Yaru*/gtk-3.0",
+ "/share/themes/Yaru*/gtk-3.20",
+ "/share/themes/Yaru*/unity"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/ubuntu/yaru/archive/20.10.1.tar.gz",
+ "sha256": "9da2605088674edf2694a8215b7344fb5209b308dd8220ea21667a914dc8c55d"
+ }
+ ]
+ },
+ {
+ "name": "greybird-gtk2-theme",
+ "// NOTE": "This is used by many XFCE distros",
+ "buildsystem": "meson",
+ "cleanup": [
+ "/share/themes/Greybird*/xfwm4",
+ "/share/themes/Greybird*/gnome-shell",
+ "/share/themes/Greybird*/gtk-3.0",
+ "/share/themes/Greybird*/metacity-1",
+ "/share/themes/Greybird*/xfce-notify-4.0",
+ "/share/themes/Greybird*/plank",
+ "/share/themes/Greybird*/unity",
+ "/share/themes/Greybird*/*.emerald"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/shimmerproject/Greybird/archive/v3.22.12.tar.gz",
+ "sha256": "410804cd5daca33cbc5c7c4a179f3a334ced87f408e515fc5d9c083a04bec4bc"
+ }
+ ]
+ },
+ {
+ "name": "materia-gtk2-theme",
+ "// NOTE": "This is used by Ubuntu Studio",
+ "buildsystem": "meson",
+ "cleanup": [
+ "/share/themes/Materia*/xfwm4",
+ "/share/themes/Materia*/gnome-shell",
+ "/share/themes/Materia*/gtk-3.0",
+ "/share/themes/Materia*/metacity-1",
+ "/share/themes/Materia*/cinnamon",
+ "/share/themes/Materia*/chrome",
+ "/share/themes/Materia*/plank",
+ "/share/themes/Materia*/unity"
+ ],
+ "sources": [
+ {
+ "type": "git",
+ "url": "https://github.com/nana-4/materia-theme.git",
+ "commit": "b36b379c9256b67e5f63a60c6faf6912f1845b66"
+ }
+ ]
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/gtk2/gtk2-fix-crash-in-show-uri.patch b/subprojects/shared-modules/gtk2/gtk2-fix-crash-in-show-uri.patch
new file mode 100644
index 00000000..27b27300
--- /dev/null
+++ b/subprojects/shared-modules/gtk2/gtk2-fix-crash-in-show-uri.patch
@@ -0,0 +1,30 @@
+From 536da7a15c1737bc63c8ecba5ccac40cc2170860 Mon Sep 17 00:00:00 2001
+From: Matthias Clasen <mclasen@redhat.com>
+Date: Mon, 19 Apr 2021 16:39:53 -0400
+Subject: [PATCH] Fix a possible crash in gtk_show_uri
+
+g_file_get_basename can return NULL.
+Deal with it somehow.
+
+Fixes: #3883
+---
+ gdk/x11/gdkapplaunchcontext-x11.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/gdk/x11/gdkapplaunchcontext-x11.c b/gdk/x11/gdkapplaunchcontext-x11.c
+index 8051229ba5..2341bb2e1f 100644
+--- a/gdk/x11/gdkapplaunchcontext-x11.c
++++ b/gdk/x11/gdkapplaunchcontext-x11.c
+@@ -45,6 +45,9 @@ get_display_name (GFile *file,
+ if (name == NULL)
+ {
+ name = g_file_get_basename (file);
++ if (name == NULL)
++ name = g_file_get_uri (file);
++
+ if (!g_utf8_validate (name, -1, NULL))
+ {
+ tmp = name;
+--
+GitLab
+
diff --git a/subprojects/shared-modules/gtk2/gtk2-use-adwaita-theme.patch b/subprojects/shared-modules/gtk2/gtk2-use-adwaita-theme.patch
new file mode 100644
index 00000000..e0350545
--- /dev/null
+++ b/subprojects/shared-modules/gtk2/gtk2-use-adwaita-theme.patch
@@ -0,0 +1,80 @@
+diff --git a/gdk/x11/gdkevents-x11.c b/gdk/x11/gdkevents-x11.c
+index 186a8f5cb2..f5c39b5afe 100644
+--- a/gdk/x11/gdkevents-x11.c
++++ b/gdk/x11/gdkevents-x11.c
+@@ -3000,6 +3000,50 @@ check_transform (const gchar *xsettings_name,
+ return TRUE;
+ }
+
++static gchar *
++gtk_rc_get_theme_dir (void)
++{
++ const gchar *var;
++ gchar *path;
++
++ var = g_getenv ("GTK_DATA_PREFIX");
++
++ if (var)
++ path = g_build_filename (var, "share", "themes", NULL);
++ else
++ path = g_build_filename ("/app", "share", "themes", NULL);
++
++ return path;
++}
++
++static gboolean
++theme_name_valid (XSettingsSetting *setting)
++{
++ gboolean res = FALSE;
++
++ if (setting->type == XSETTINGS_TYPE_STRING)
++ {
++ char *theme_name = setting->data.v_string;
++ gchar *theme_dir = gtk_rc_get_theme_dir ();
++ gchar *path = g_build_filename (theme_dir, theme_name, "gtk-2.0", "gtkrc", NULL);
++
++ if (g_file_test (path, G_FILE_TEST_EXISTS))
++ res = TRUE;
++ else if (g_str_has_suffix (theme_name, "-Dark") ||
++ g_str_has_suffix (theme_name, "-dark"))
++ {
++ setting->data.v_string = g_strdup ("Adwaita-dark");
++ g_free (theme_name);
++ res = TRUE;
++ }
++
++ g_free (theme_dir);
++ g_free (path);
++ }
++
++ return res;
++}
++
+ /**
+ * gdk_screen_get_setting:
+ * @screen: the #GdkScreen where the setting is located
+@@ -3050,6 +3094,11 @@ gdk_screen_get_setting (GdkScreen *screen,
+ if (result != XSETTINGS_SUCCESS)
+ goto out;
+
++ if (strcmp (name, "gtk-theme-name") == 0 &&
++ (setting->type != XSETTINGS_TYPE_STRING ||
++ !theme_name_valid (setting)))
++ goto out;
++
+ switch (setting->type)
+ {
+ case XSETTINGS_TYPE_INT:
+diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c
+index 3fbbf00548..5c0a4b33d2 100644
+--- a/gtk/gtksettings.c
++++ b/gtk/gtksettings.c
+@@ -312,7 +312,7 @@ gtk_settings_class_init (GtkSettingsClass *class)
+ #ifdef G_OS_WIN32
+ "MS-Windows",
+ #else
+- "Raleigh",
++ "Adwaita",
+ #endif
+ GTK_PARAM_READWRITE),
+ NULL);
diff --git a/subprojects/shared-modules/gtk2/gtk2.json b/subprojects/shared-modules/gtk2/gtk2.json
new file mode 100644
index 00000000..bfca223a
--- /dev/null
+++ b/subprojects/shared-modules/gtk2/gtk2.json
@@ -0,0 +1,112 @@
+{
+ "name": "gnome-themes-extra",
+ "rm-configure": true,
+ "config-opts": [
+ "--disable-dependency-tracking",
+ "--disable-gtk3-engine"
+ ],
+ "cleanup": [
+ "/share/themes/Adwaita/gtk-3.0",
+ "/share/themes/Adwaita-dark/gtk-3.0",
+ "/share/themes/HighContrast/gtk-3.0",
+ "*.la"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://download.gnome.org/sources/gnome-themes-extra/3.28/gnome-themes-extra-3.28.tar.xz",
+ "sha256": "7c4ba0bff001f06d8983cfc105adaac42df1d1267a2591798a780bac557a5819"
+ },
+ {
+ "type": "shell",
+ "//": "We want to avoid generating icons as its 99% of the build time and gnome runtime has it",
+ "commands": [
+ "sed -i 's/icons//' themes/HighContrast/Makefile.am"
+ ]
+ },
+ {
+ "type": "script",
+ "commands": [
+ "autoreconf -fsi"
+ ]
+ }
+ ],
+ "modules": [
+ "../intltool/intltool-0.51.json",
+ {
+ "name": "gtk2",
+ "cleanup": [
+ "/bin",
+ "/share/gtk-2.0",
+ "/share/aclocal",
+ "/share/gtk-doc",
+ "/lib/pkgconfig",
+ "/lib/gtk-2.0/include",
+ "/include",
+ "*.la"
+ ],
+ "x-cpe": {
+ "product": "gtk+"
+ },
+ "config-opts": [
+ "--disable-dependency-tracking",
+ "--disable-gtk-doc-html",
+ "--disable-introspection",
+ "--with-xinput=xfree"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://download.gnome.org/sources/gtk+/2.24/gtk+-2.24.33.tar.xz",
+ "sha256": "ac2ac757f5942d318a311a54b0c80b5ef295f299c2a73c632f6bfb1ff49cc6da"
+ },
+ {
+ "type": "patch",
+ "path": "gtk2-use-adwaita-theme.patch"
+ },
+ {
+ "type": "patch",
+ "path": "gtk2-fix-crash-in-show-uri.patch"
+ }
+ ]
+ },
+ {
+ "name": "ibus-gtk2",
+ "config-opts": [
+ "--disable-xim",
+ "--disable-dconf",
+ "--disable-gconf",
+ "--disable-memconf",
+ "--disable-schemas-compile",
+ "--disable-schemas-install",
+ "--disable-gtk3",
+ "--disable-setup",
+ "--disable-ui",
+ "--disable-engine",
+ "--disable-python-library",
+ "--disable-libnotify",
+ "--disable-emoji-dict",
+ "--disable-appindicator",
+ "--disable-glibtest",
+ "--disable-tests",
+ "--disable-unicode-dict",
+ "--disable-introspection",
+ "--disable-python2"
+ ],
+ "make-install-args": [
+ "-C", "client/gtk2"
+ ],
+ "post-install": [
+ "gtk-query-immodules-2.0 > immodules.cache",
+ "install immodules.cache -t $(pkg-config --variable=libdir gtk+-2.0)/gtk-2.0/2.10.0/"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/ibus/ibus/releases/download/1.5.23/ibus-1.5.23.tar.gz",
+ "sha256": "b7e8d5bdb7d71a5ba4ee43cdf374675f77121a71c1679c9b9e7e02875bd0e150"
+ }
+ ]
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/gtk2/murrine-engine-fix-crash.patch b/subprojects/shared-modules/gtk2/murrine-engine-fix-crash.patch
new file mode 100644
index 00000000..6200e771
--- /dev/null
+++ b/subprojects/shared-modules/gtk2/murrine-engine-fix-crash.patch
@@ -0,0 +1,12 @@
+Index: gtk2-engines-murrine-0.98.2/src/murrine_style.c
+===================================================================
+--- gtk2-engines-murrine-0.98.2.orig/src/murrine_style.c
++++ gtk2-engines-murrine-0.98.2/src/murrine_style.c
+@@ -2171,6 +2171,7 @@ murrine_style_draw_layout (GtkStyle
+ cairo_t *cr;
+ cr = murrine_begin_paint (window, area);
+ cairo_translate (cr, x+xos, y+yos);
++ pango_cairo_update_layout (cr, layout);
+ pango_cairo_layout_path (cr, layout);
+ murrine_set_color_rgba (cr, &temp, 0.5);
+ cairo_stroke (cr);
diff --git a/subprojects/shared-modules/gudev/gudev.json b/subprojects/shared-modules/gudev/gudev.json
new file mode 100644
index 00000000..50d9c6b9
--- /dev/null
+++ b/subprojects/shared-modules/gudev/gudev.json
@@ -0,0 +1,33 @@
+{
+ "name": "gudev",
+ "buildsystem": "meson",
+ "config-opts": [
+ "-Dtests=disabled",
+ "-Dvapi=disabled",
+ "-Dintrospection=disabled",
+ "-Dgtk_doc=false"
+ ],
+ "cleanup": [
+ "/include",
+ "/etc",
+ "/libexec",
+ "/sbin",
+ "/lib/pkgconfig",
+ "/lib/systemd",
+ "/man",
+ "/share/aclocal",
+ "/share/doc",
+ "/share/gtk-doc",
+ "/share/man",
+ "/share/pkgconfig",
+ "*.la",
+ "*.a"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://download.gnome.org/sources/libgudev/237/libgudev-237.tar.xz",
+ "sha256": "0d06b21170d20c93e4f0534dbb9b0a8b4f1119ffb00b4031aaeb5b9148b686aa"
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/gzdoom/description.patch b/subprojects/shared-modules/gzdoom/description.patch
new file mode 100644
index 00000000..5f760cca
--- /dev/null
+++ b/subprojects/shared-modules/gzdoom/description.patch
@@ -0,0 +1,18 @@
+diff --git a/src/d_iwad.cpp b/src/d_iwad.cpp
+index b421b1b35..9f0b16948 100644
+--- a/src/d_iwad.cpp
++++ b/src/d_iwad.cpp
+@@ -683,9 +683,10 @@ int FIWadManager::IdentifyVersion (TArray<FString> &wadfiles, const char *iwad,
+ "2. Edit your ~/Library/Preferences/" GAMENAMELOWERCASE ".ini and add the directories\n"
+ "of your iwads to the list beneath [IWADSearch.Directories]");
+ #else
+- "1. Place one or more of these wads in ~/.config/" GAMENAMELOWERCASE "/.\n"
+- "2. Edit your ~/.config/" GAMENAMELOWERCASE "/" GAMENAMELOWERCASE ".ini and add the directories of your\n"
+- "iwads to the list beneath [IWADSearch.Directories]");
++ "1. Place one or more of these wads in ~/.var/app/org.zdoom.GZDoom/.config/" GAMENAMELOWERCASE "/\n"
++ "2. Edit your ~/.var/app/org.zdoom.GZDoom/.config/" GAMENAMELOWERCASE "/" GAMENAMELOWERCASE ".ini and\n"
++ " add the directories of your iwads to the list beneath [IWADSearch.Directories]\n"
++ "3. Validate your Flatpak permissions, so that Flatpak has access to your directories with wads");
+ #endif
+ }
+ int pick = 0;
diff --git a/subprojects/shared-modules/gzdoom/gzdoom.json b/subprojects/shared-modules/gzdoom/gzdoom.json
new file mode 100644
index 00000000..1ab16bdc
--- /dev/null
+++ b/subprojects/shared-modules/gzdoom/gzdoom.json
@@ -0,0 +1,50 @@
+{
+ "name": "gzdoom",
+ "buildsystem": "cmake-ninja",
+ "config-opts": [
+ "-DCMAKE_BUILD_TYPE=RelWithDebInfo"
+ ],
+ "cleanup": [
+ "/lib/*.a",
+ "/lib/*.la",
+ "/lib/pkgconfig",
+ "/include"
+ ],
+ "sources": [
+ {
+ "type": "git",
+ "url": "https://github.com/coelckers/gzdoom.git",
+ "tag": "g4.7.1",
+ "commit": "107ff702423686414680d6458fea63a2647692c4"
+ },
+ {
+ "type": "file",
+ "url": "https://github.com/coelckers/gzdoom/raw/g4.7.1/soundfont/gzdoom.sf2",
+ "sha256": "fca3e514b635a21789d4224e84865d2954a2a914d46b64aa8219ddb565c44869"
+ },
+ /* I've discussed these patches upstream and a special -DFLATPAK_BUNDLE has been approved */
+ {
+ "type": "patch",
+ "path": "description.patch"
+ }
+ ],
+ "post-install": [
+ "install -Dm 644 gzdoom.sf2 /app/share/sounds/sf2/gzdoom.sf2"
+ ],
+ "modules": [
+ {
+ "name": "zmusic",
+ "buildsystem": "cmake-ninja",
+ "config-opts": [
+ "-DCMAKE_BUILD_TYPE=RelWithDebInfo"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/coelckers/ZMusic/archive/1.1.8.tar.gz",
+ "sha256": "73082f661b7b0bb33348d1d186c132deec9132a1613480348a00172b49c9fd68"
+ }
+ ]
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/intltool/intltool-0.51.json b/subprojects/shared-modules/intltool/intltool-0.51.json
new file mode 100644
index 00000000..c1f7d269
--- /dev/null
+++ b/subprojects/shared-modules/intltool/intltool-0.51.json
@@ -0,0 +1,15 @@
+{
+ "name": "intltool",
+ "cleanup": [ "*" ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://launchpad.net/intltool/trunk/0.51.0/+download/intltool-0.51.0.tar.gz",
+ "sha256": "67c74d94196b153b774ab9f89b2fa6c6ba79352407037c8c14d5aeb334e959cd"
+ },
+ {
+ "type": "patch",
+ "path": "intltool-perl5.26-regex-fixes.patch"
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/intltool/intltool-perl5.26-regex-fixes.patch b/subprojects/shared-modules/intltool/intltool-perl5.26-regex-fixes.patch
new file mode 100644
index 00000000..234b82bd
--- /dev/null
+++ b/subprojects/shared-modules/intltool/intltool-perl5.26-regex-fixes.patch
@@ -0,0 +1,59 @@
+Description: Escape "{", to prevent complaints from perl 5.22 and 5.26
+Author: Roderich Schupp <roderich.schupp@gmail.com>
+Author: gregor herrmann <gregoa@debian.org>
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=788705
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=826471
+Bug-Upstream: https://bugs.launchpad.net/intltool/+bug/1490906
+
+Index: intltool-0.51.0/intltool-update.in
+===================================================================
+--- intltool-0.51.0.orig/intltool-update.in 2017-07-23 17:24:35.113169465 +0200
++++ intltool-0.51.0/intltool-update.in 2017-07-23 17:24:35.109169052 +0200
+@@ -1062,13 +1062,13 @@
+ }
+ }
+
+- if ($str =~ /^(.*)\${?([A-Z_]+)}?(.*)$/)
++ if ($str =~ /^(.*)\$\{?([A-Z_]+)}?(.*)$/)
+ {
+ my $rest = $3;
+ my $untouched = $1;
+ my $sub = "";
+ # Ignore recursive definitions of variables
+- $sub = $varhash{$2} if defined $varhash{$2} and $varhash{$2} !~ /\${?$2}?/;
++ $sub = $varhash{$2} if defined $varhash{$2} and $varhash{$2} !~ /\$\{?$2}?/;
+
+ return SubstituteVariable ("$untouched$sub$rest");
+ }
+@@ -1190,10 +1190,10 @@
+ $name =~ s/\(+$//g;
+ $version =~ s/\(+$//g;
+
+- $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\${?AC_PACKAGE_NAME}?/);
+- $varhash{"PACKAGE"} = $name if (not $name =~ /\${?PACKAGE}?/);
+- $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\${?AC_PACKAGE_VERSION}?/);
+- $varhash{"VERSION"} = $version if (not $name =~ /\${?VERSION}?/);
++ $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\$\{?AC_PACKAGE_NAME}?/);
++ $varhash{"PACKAGE"} = $name if (not $name =~ /\$\{?PACKAGE}?/);
++ $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\$\{?AC_PACKAGE_VERSION}?/);
++ $varhash{"VERSION"} = $version if (not $name =~ /\$\{?VERSION}?/);
+ }
+
+ if ($conf_source =~ /^AC_INIT\(([^,\)]+),([^,\)]+)[,]?([^,\)]+)?/m)
+@@ -1219,11 +1219,11 @@
+ $version =~ s/\(+$//g;
+ $bugurl =~ s/\(+$//g if (defined $bugurl);
+
+- $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\${?AC_PACKAGE_NAME}?/);
+- $varhash{"PACKAGE"} = $name if (not $name =~ /\${?PACKAGE}?/);
+- $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\${?AC_PACKAGE_VERSION}?/);
+- $varhash{"VERSION"} = $version if (not $name =~ /\${?VERSION}?/);
+- $varhash{"PACKAGE_BUGREPORT"} = $bugurl if (defined $bugurl and not $bugurl =~ /\${?\w+}?/);
++ $varhash{"PACKAGE_NAME"} = $name if (not $name =~ /\$\{?AC_PACKAGE_NAME}?/);
++ $varhash{"PACKAGE"} = $name if (not $name =~ /\$\{?PACKAGE}?/);
++ $varhash{"PACKAGE_VERSION"} = $version if (not $name =~ /\$\{?AC_PACKAGE_VERSION}?/);
++ $varhash{"VERSION"} = $version if (not $name =~ /\$\{?VERSION}?/);
++ $varhash{"PACKAGE_BUGREPORT"} = $bugurl if (defined $bugurl and not $bugurl =~ /\$\{?\w+}?/);
+ }
+
+ # \s makes this not work, why?
diff --git a/subprojects/shared-modules/lame/lame-3.99.5.json b/subprojects/shared-modules/lame/lame-3.99.5.json
new file mode 100644
index 00000000..3b431dca
--- /dev/null
+++ b/subprojects/shared-modules/lame/lame-3.99.5.json
@@ -0,0 +1,37 @@
+{
+ "name": "lame",
+ "rm-configure": true,
+ "config-opts": ["--disable-static"],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://downloads.sourceforge.net/lame/lame-3.99.5.tar.gz",
+ "sha256": "24346b4158e4af3bd9f2e194bb23eb473c75fb7377011523353196b19b9a23ff"
+ },
+ {
+ "type": "patch",
+ "path": "lame-msse.patch"
+ },
+ {
+ "type": "patch",
+ "path": "lame-gtk1-ac-directives.patch"
+ },
+ {
+ "type": "patch",
+ "path": "lame-ansi2knr2devnull.patch"
+ },
+ {
+ "type": "patch",
+ "path": "lame-tinfo.patch",
+ "strip-components": 0
+ },
+ {
+ "type": "script",
+ "dest-filename": "autogen.sh",
+ "commands": [
+ "autoreconf -vfi"
+ ]
+ }
+ ],
+ "cleanup": ["/bin", "/include", "/share/doc", "/share/man", "*.la"]
+}
diff --git a/subprojects/shared-modules/lame/lame-ansi2knr2devnull.patch b/subprojects/shared-modules/lame/lame-ansi2knr2devnull.patch
new file mode 100644
index 00000000..c427345e
--- /dev/null
+++ b/subprojects/shared-modules/lame/lame-ansi2knr2devnull.patch
@@ -0,0 +1,43 @@
+Description: Patch out remaining ansi2knr.
+Author: Dimitri John Ledkov <xnox@ubuntu.com>
+Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=755111
+--- a/configure.in
++++ b/configure.in
+@@ -78,7 +78,6 @@
+ fi
+
+ dnl more automake stuff
+-AM_C_PROTOTYPES
+
+ AC_CHECK_HEADER(dmalloc.h)
+ if test "${ac_cv_header_dmalloc_h}" = "yes"; then
+--- a/doc/man/Makefile.am
++++ b/doc/man/Makefile.am
+@@ -1,6 +1,6 @@
+ ## $Id: Makefile.am,v 1.1 2000/10/22 11:39:44 aleidinger Exp $
+
+-AUTOMAKE_OPTIONS = foreign ansi2knr
++AUTOMAKE_OPTIONS = foreign
+
+ man_MANS = lame.1
+ EXTRA_DIST = ${man_MANS}
+--- a/libmp3lame/i386/Makefile.am
++++ b/libmp3lame/i386/Makefile.am
+@@ -1,6 +1,6 @@
+ ## $Id: Makefile.am,v 1.26 2011/04/04 09:42:34 aleidinger Exp $
+
+-AUTOMAKE_OPTIONS = foreign $(top_srcdir)/ansi2knr
++AUTOMAKE_OPTIONS = foreign
+
+ DEFS = @DEFS@ @CONFIG_DEFS@
+
+--- a/doc/html/Makefile.am
++++ b/doc/html/Makefile.am
+@@ -1,6 +1,6 @@
+ ## $Id: Makefile.am,v 1.7 2010/09/30 20:58:40 jaz001 Exp $
+
+-AUTOMAKE_OPTIONS = foreign ansi2knr
++AUTOMAKE_OPTIONS = foreign
+
+ docdir = $(datadir)/doc
+ pkgdocdir = $(docdir)/$(PACKAGE)
diff --git a/subprojects/shared-modules/lame/lame-gtk1-ac-directives.patch b/subprojects/shared-modules/lame/lame-gtk1-ac-directives.patch
new file mode 100644
index 00000000..7e0d3fe4
--- /dev/null
+++ b/subprojects/shared-modules/lame/lame-gtk1-ac-directives.patch
@@ -0,0 +1,205 @@
+Description: Include GTK-1 autoconf directives in build system.
+Origin: http://anonscm.debian.org/gitweb/?p=pkg-multimedia/lame.git;a=tree;f=debian/patches
+Forwarded: yes
+Applied-Upstream: http://lame.cvs.sf.net/viewvc/lame/lame/acinclude.m4?revision=1.6
+
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -85,4 +85,197 @@
+ [AC_MSG_WARN(can't check for IEEE854 compliant 80 bit floats)]
+ )])]) # alex_IEEE854_FLOAT80
+
++# Configure paths for GTK+
++# Owen Taylor 97-11-3
+
++dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
++dnl Test for GTK, and define GTK_CFLAGS and GTK_LIBS
++dnl
++AC_DEFUN([AM_PATH_GTK],
++[dnl
++dnl Get the cflags and libraries from the gtk-config script
++dnl
++AC_ARG_WITH(gtk-prefix,[ --with-gtk-prefix=PFX Prefix where GTK is installed (optional)],
++ gtk_config_prefix="$withval", gtk_config_prefix="")
++AC_ARG_WITH(gtk-exec-prefix,[ --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional)],
++ gtk_config_exec_prefix="$withval", gtk_config_exec_prefix="")
++AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program],
++ , enable_gtktest=yes)
++
++ for module in . $4
++ do
++ case "$module" in
++ gthread)
++ gtk_config_args="$gtk_config_args gthread"
++ ;;
++ esac
++ done
++
++ if test x$gtk_config_exec_prefix != x ; then
++ gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix"
++ if test x${GTK_CONFIG+set} != xset ; then
++ GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config
++ fi
++ fi
++ if test x$gtk_config_prefix != x ; then
++ gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix"
++ if test x${GTK_CONFIG+set} != xset ; then
++ GTK_CONFIG=$gtk_config_prefix/bin/gtk-config
++ fi
++ fi
++
++ AC_PATH_PROG(GTK_CONFIG, gtk-config, no)
++ min_gtk_version=ifelse([$1], ,0.99.7,$1)
++ AC_MSG_CHECKING(for GTK - version >= $min_gtk_version)
++ no_gtk=""
++ if test "$GTK_CONFIG" = "no" ; then
++ no_gtk=yes
++ else
++ GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags`
++ GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs`
++ gtk_config_major_version=`$GTK_CONFIG $gtk_config_args --version | \
++ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
++ gtk_config_minor_version=`$GTK_CONFIG $gtk_config_args --version | \
++ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
++ gtk_config_micro_version=`$GTK_CONFIG $gtk_config_args --version | \
++ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
++ if test "x$enable_gtktest" = "xyes" ; then
++ ac_save_CFLAGS="$CFLAGS"
++ ac_save_LIBS="$LIBS"
++ CFLAGS="$CFLAGS $GTK_CFLAGS"
++ LIBS="$GTK_LIBS $LIBS"
++dnl
++dnl Now check if the installed GTK is sufficiently new. (Also sanity
++dnl checks the results of gtk-config to some extent
++dnl
++ rm -f conf.gtktest
++ AC_TRY_RUN([
++#include <gtk/gtk.h>
++#include <stdio.h>
++#include <stdlib.h>
++
++int
++main ()
++{
++ int major, minor, micro;
++ char *tmp_version;
++
++ system ("touch conf.gtktest");
++
++ /* HP/UX 9 (%@#!) writes to sscanf strings */
++ tmp_version = g_strdup("$min_gtk_version");
++ if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
++ printf("%s, bad version string\n", "$min_gtk_version");
++ exit(1);
++ }
++
++ if ((gtk_major_version != $gtk_config_major_version) ||
++ (gtk_minor_version != $gtk_config_minor_version) ||
++ (gtk_micro_version != $gtk_config_micro_version))
++ {
++ printf("\n*** 'gtk-config --version' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n",
++ $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version,
++ gtk_major_version, gtk_minor_version, gtk_micro_version);
++ printf ("*** was found! If gtk-config was correct, then it is best\n");
++ printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n");
++ printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
++ printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
++ printf("*** required on your system.\n");
++ printf("*** If gtk-config was wrong, set the environment variable GTK_CONFIG\n");
++ printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n");
++ printf("*** before re-running configure\n");
++ }
++#if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION)
++ else if ((gtk_major_version != GTK_MAJOR_VERSION) ||
++ (gtk_minor_version != GTK_MINOR_VERSION) ||
++ (gtk_micro_version != GTK_MICRO_VERSION))
++ {
++ printf("*** GTK+ header files (version %d.%d.%d) do not match\n",
++ GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION);
++ printf("*** library (version %d.%d.%d)\n",
++ gtk_major_version, gtk_minor_version, gtk_micro_version);
++ }
++#endif /* defined (GTK_MAJOR_VERSION) ... */
++ else
++ {
++ if ((gtk_major_version > major) ||
++ ((gtk_major_version == major) && (gtk_minor_version > minor)) ||
++ ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro)))
++ {
++ return 0;
++ }
++ else
++ {
++ printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n",
++ gtk_major_version, gtk_minor_version, gtk_micro_version);
++ printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n",
++ major, minor, micro);
++ printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n");
++ printf("***\n");
++ printf("*** If you have already installed a sufficiently new version, this error\n");
++ printf("*** probably means that the wrong copy of the gtk-config shell script is\n");
++ printf("*** being found. The easiest way to fix this is to remove the old version\n");
++ printf("*** of GTK+, but you can also set the GTK_CONFIG environment to point to the\n");
++ printf("*** correct copy of gtk-config. (In this case, you will have to\n");
++ printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
++ printf("*** so that the correct libraries are found at run-time))\n");
++ }
++ }
++ return 1;
++}
++],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
++ CFLAGS="$ac_save_CFLAGS"
++ LIBS="$ac_save_LIBS"
++ fi
++ fi
++ if test "x$no_gtk" = x ; then
++ AC_MSG_RESULT(yes)
++ ifelse([$2], , :, [$2])
++ else
++ AC_MSG_RESULT(no)
++ if test "$GTK_CONFIG" = "no" ; then
++ echo "*** The gtk-config script installed by GTK could not be found"
++ echo "*** If GTK was installed in PREFIX, make sure PREFIX/bin is in"
++ echo "*** your path, or set the GTK_CONFIG environment variable to the"
++ echo "*** full path to gtk-config."
++ else
++ if test -f conf.gtktest ; then
++ :
++ else
++ echo "*** Could not run GTK test program, checking why..."
++ CFLAGS="$CFLAGS $GTK_CFLAGS"
++ LIBS="$LIBS $GTK_LIBS"
++ AC_TRY_LINK([
++#include <gtk/gtk.h>
++#include <stdio.h>
++], [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ],
++ [ echo "*** The test program compiled, but did not run. This usually means"
++ echo "*** that the run-time linker is not finding GTK or finding the wrong"
++ echo "*** version of GTK. If it is not finding GTK, you'll need to set your"
++ echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
++ echo "*** to the installed location Also, make sure you have run ldconfig if that"
++ echo "*** is required on your system"
++ echo "***"
++ echo "*** If you have an old version installed, it is best to remove it, although"
++ echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
++ echo "***"
++ echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that"
++ echo "*** came with the system with the command"
++ echo "***"
++ echo "*** rpm --erase --nodeps gtk gtk-devel" ],
++ [ echo "*** The test program failed to compile or link. See the file config.log for the"
++ echo "*** exact error that occured. This usually means GTK was incorrectly installed"
++ echo "*** or that you have moved GTK since it was installed. In the latter case, you"
++ echo "*** may want to edit the gtk-config script: $GTK_CONFIG" ])
++ CFLAGS="$ac_save_CFLAGS"
++ LIBS="$ac_save_LIBS"
++ fi
++ fi
++ GTK_CFLAGS=""
++ GTK_LIBS=""
++ ifelse([$3], , :, [$3])
++ fi
++ AC_SUBST(GTK_CFLAGS)
++ AC_SUBST(GTK_LIBS)
++ rm -f conf.gtktest
++])
diff --git a/subprojects/shared-modules/lame/lame-msse.patch b/subprojects/shared-modules/lame/lame-msse.patch
new file mode 100644
index 00000000..4b71a2ed
--- /dev/null
+++ b/subprojects/shared-modules/lame/lame-msse.patch
@@ -0,0 +1,17 @@
+Description: Build xmm_quantize_sub.c with -msse
+Author: Sebastian Ramacher <sramacher@debian.org>
+Bug: http://sourceforge.net/p/lame/bugs/443/
+Bug-Debian: https://bugs.debian.org/760047
+Forwarded: http://sourceforge.net/p/lame/bugs/443/
+Last-Update: 2014-08-31
+
+--- lame-3.99.5+repack1.orig/libmp3lame/vector/Makefile.am
++++ lame-3.99.5+repack1/libmp3lame/vector/Makefile.am
+@@ -20,6 +20,7 @@ xmm_sources = xmm_quantize_sub.c
+
+ if WITH_XMM
+ liblamevectorroutines_la_SOURCES = $(xmm_sources)
++liblamevectorroutines_la_CFLAGS = -msse
+ endif
+
+ noinst_HEADERS = lame_intrin.h
diff --git a/subprojects/shared-modules/lame/lame-tinfo.patch b/subprojects/shared-modules/lame/lame-tinfo.patch
new file mode 100644
index 00000000..cb570e78
--- /dev/null
+++ b/subprojects/shared-modules/lame/lame-tinfo.patch
@@ -0,0 +1,23 @@
+initscr is not used anywhere in lame sourcetree, check for used tgetent instead
+check for separate tinfo library optionally built out from libncurses source tree,
+like used in debian and gentoo
+- ssuominen@g.o
+
+http://bugs.gentoo.org/454322
+
+--- configure.in
++++ configure.in
+@@ -372,9 +372,10 @@
+
+ AC_CHECK_HEADERS(termcap.h)
+ AC_CHECK_HEADERS(ncurses/termcap.h)
+-AC_CHECK_LIB(termcap, initscr, HAVE_TERMCAP="termcap")
+-AC_CHECK_LIB(curses, initscr, HAVE_TERMCAP="curses")
+-AC_CHECK_LIB(ncurses, initscr, HAVE_TERMCAP="ncurses")
++AC_CHECK_LIB(termcap, tgetent, HAVE_TERMCAP="termcap")
++AC_CHECK_LIB(curses, tgetent, HAVE_TERMCAP="curses")
++AC_CHECK_LIB(ncurses, tgetent, HAVE_TERMCAP="ncurses")
++AC_CHECK_LIB(tinfo, tgetent, HAVE_TERMCAP="tinfo")
+
+ AM_ICONV
+
diff --git a/subprojects/shared-modules/libappindicator/Makefile b/subprojects/shared-modules/libappindicator/Makefile
new file mode 100644
index 00000000..58192455
--- /dev/null
+++ b/subprojects/shared-modules/libappindicator/Makefile
@@ -0,0 +1,10 @@
+all: libappindicator-gtk3-introspection-12.10.json libappindicator-gtk3-12.10.json libappindicator-gtk2-12.10.json
+
+libappindicator-gtk3-introspection-12.10.json: libappindicator.json.in
+ sed -e 's/@GTK_VER@/3/g' -e 's/@INTROSPECTION@/yes/g' $< > $@
+
+libappindicator-gtk3-12.10.json: libappindicator.json.in
+ sed -e 's/@GTK_VER@/3/g' -e 's/@INTROSPECTION@/no/g' $< > $@
+
+libappindicator-gtk2-12.10.json: libappindicator.json.in
+ sed -e 's/@GTK_VER@/2/g' -e 's/@INTROSPECTION@/no/g' $< > $@ \ No newline at end of file
diff --git a/subprojects/shared-modules/libappindicator/libappindicator-fix-crash-from-incorrect-signal-emission.patch b/subprojects/shared-modules/libappindicator/libappindicator-fix-crash-from-incorrect-signal-emission.patch
new file mode 100644
index 00000000..28927a37
--- /dev/null
+++ b/subprojects/shared-modules/libappindicator/libappindicator-fix-crash-from-incorrect-signal-emission.patch
@@ -0,0 +1,74 @@
+--- libappindicator-12.10.0/src/app-indicator.c 2012-07-11 13:28:34.415113869 -0400
++++ wrk/src/app-indicator.c 2020-03-19 12:14:47.813191652 -0400
+@@ -443,7 +443,7 @@
+ G_STRUCT_OFFSET (AppIndicatorClass, new_icon),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+- G_TYPE_NONE, 0, G_TYPE_NONE);
++ G_TYPE_NONE, 0);
+
+ /**
+ * AppIndicator::new-attention-icon:
+@@ -457,7 +457,7 @@
+ G_STRUCT_OFFSET (AppIndicatorClass, new_attention_icon),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+- G_TYPE_NONE, 0, G_TYPE_NONE);
++ G_TYPE_NONE, 0);
+
+ /**
+ * AppIndicator::new-status:
+@@ -505,7 +505,7 @@
+ G_STRUCT_OFFSET (AppIndicatorClass, connection_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOOLEAN,
+- G_TYPE_NONE, 1, G_TYPE_BOOLEAN, G_TYPE_NONE);
++ G_TYPE_NONE, 1, G_TYPE_BOOLEAN);
+
+ /**
+ * AppIndicator::new-icon-theme-path:
+@@ -1175,7 +1175,7 @@
+ gchar * guide = priv->label_guide != NULL ? priv->label_guide : "";
+
+ g_signal_emit(G_OBJECT(self), signals[NEW_LABEL], 0,
+- label, guide, TRUE);
++ label, guide);
+ if (priv->dbus_registration != 0 && priv->connection != NULL) {
+ GError * error = NULL;
+
+@@ -1490,7 +1490,7 @@
+ static void
+ theme_changed_cb (GtkIconTheme * theme, gpointer user_data)
+ {
+- g_signal_emit (user_data, signals[NEW_ICON], 0, TRUE);
++ g_signal_emit (user_data, signals[NEW_ICON], 0);
+
+ AppIndicator * self = (AppIndicator *)user_data;
+ AppIndicatorPrivate *priv = self->priv;
+@@ -1904,7 +1904,7 @@
+ }
+
+ if (changed) {
+- g_signal_emit (self, signals[NEW_ATTENTION_ICON], 0, TRUE);
++ g_signal_emit (self, signals[NEW_ATTENTION_ICON], 0);
+
+ if (self->priv->dbus_registration != 0 && self->priv->connection != NULL) {
+ GError * error = NULL;
+@@ -1982,7 +1982,7 @@
+ }
+
+ if (changed) {
+- g_signal_emit (self, signals[NEW_ICON], 0, TRUE);
++ g_signal_emit (self, signals[NEW_ICON], 0);
+
+ if (self->priv->dbus_registration != 0 && self->priv->connection != NULL) {
+ GError * error = NULL;
+@@ -2048,7 +2048,7 @@
+
+ self->priv->icon_theme_path = g_strdup(icon_theme_path);
+
+- g_signal_emit (self, signals[NEW_ICON_THEME_PATH], 0, self->priv->icon_theme_path, TRUE);
++ g_signal_emit (self, signals[NEW_ICON_THEME_PATH], 0, self->priv->icon_theme_path);
+
+ if (self->priv->dbus_registration != 0 && self->priv->connection != NULL) {
+ GError * error = NULL;
diff --git a/subprojects/shared-modules/libappindicator/libappindicator-fix-crash-iterating-icon-themes.patch b/subprojects/shared-modules/libappindicator/libappindicator-fix-crash-iterating-icon-themes.patch
new file mode 100644
index 00000000..44f6fe48
--- /dev/null
+++ b/subprojects/shared-modules/libappindicator/libappindicator-fix-crash-iterating-icon-themes.patch
@@ -0,0 +1,11 @@
+--- libappindicator-12.10.0/src/app-indicator.c
++++ libappindicator-12.10.0/src/app-indicator.c
+@@ -1606,7 +1606,7 @@ status_icon_changes (AppIndicator * self, gpointer data)
+ gint n_elements, i;
+ gboolean found=FALSE;
+ gtk_icon_theme_get_search_path(icon_theme, &path, &n_elements);
+- for (i=0; i< n_elements || path[i] == NULL; i++) {
++ for (i=0; i< n_elements; i++) {
+ if(g_strcmp0(path[i], self->priv->icon_theme_path) == 0) {
+ found=TRUE;
+ break;
diff --git a/subprojects/shared-modules/libappindicator/libappindicator-ftbfs.patch b/subprojects/shared-modules/libappindicator/libappindicator-ftbfs.patch
new file mode 100644
index 00000000..93d31af6
--- /dev/null
+++ b/subprojects/shared-modules/libappindicator/libappindicator-ftbfs.patch
@@ -0,0 +1,20 @@
+From: Olivier Tilloy <olivier.tilloy@canonical.com>
+Date: Tue 2018-03-20 12:47:56 +0000
+Subject: [PATCH] libappindicator FTBFS on bionic
+
+Fix build failures on bionic,
+and update Vcs-* fields in debian/control. (LP: #1757121)
+
+Approved by: Marco Trevisan (Treviño)
+---
+--- libappindicator-12.10.0/src/app-indicator.c 2017-02-15 14:10:41 +0000
++++ libappindicator-12.10.0/src/app-indicator.c 2018-03-20 12:38:59 +0000
+@@ -2196,7 +2196,7 @@ app_indicator_set_secondary_activate_tar
+
+ g_return_if_fail (GTK_IS_WIDGET (menuitem));
+
+- priv->sec_activate_target = g_object_ref(G_OBJECT(menuitem));
++ priv->sec_activate_target = g_object_ref(menuitem);
+ priv->sec_activate_enabled = widget_is_menu_child(self, menuitem);
+ g_signal_connect(menuitem, "parent-set", G_CALLBACK(sec_activate_target_parent_changed), self);
+ }
diff --git a/subprojects/shared-modules/libappindicator/libappindicator-gtk2-12.10.json b/subprojects/shared-modules/libappindicator/libappindicator-gtk2-12.10.json
new file mode 100644
index 00000000..4e1d38fa
--- /dev/null
+++ b/subprojects/shared-modules/libappindicator/libappindicator-gtk2-12.10.json
@@ -0,0 +1,130 @@
+{
+ "name": "libappindicator",
+ "build-options": {
+ "cflags": "-Wno-error",
+ "make-args": [ "-j1" ]
+ },
+ "rm-configure": true,
+ "config-opts": [
+ "--disable-static",
+ "--disable-gtk-doc",
+ "--disable-tests",
+ "--disable-mono-tests",
+ "--enable-introspection=no",
+ "--with-gtk=2"
+ ],
+ "cleanup": [
+ "/include",
+ "/lib/pkgconfig",
+ "/lib/*.la",
+ "/share/gtk-doc",
+ "/share/gir-1.0"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://launchpad.net/libappindicator/12.10/12.10.0/+download/libappindicator-12.10.0.tar.gz",
+ "sha256": "d5907c1f98084acf28fd19593cb70672caa0ca1cf82d747ba6f4830d4cc3b49f"
+ },
+ {
+ "type": "patch",
+ "path": "libappindicator-ftbfs.patch"
+ },
+ {
+ "type": "patch",
+ "path": "libappindicator-no-python.patch"
+ },
+ {
+ "type": "patch",
+ "path": "libappindicator-fix-crash-from-incorrect-signal-emission.patch"
+ },
+ {
+ "type": "patch",
+ "path": "libappindicator-fix-crash-iterating-icon-themes.patch"
+ },
+ {
+ "type": "script",
+ "commands": ["autoreconf -sfi"],
+ "dest-filename": "autogen.sh"
+ }
+ ],
+ "modules": [
+ "../intltool/intltool-0.51.json",
+ "../dbus-glib/dbus-glib.json",
+ {
+ "name": "libdbusmenu",
+ "build-options": {
+ "cflags": "-Wno-error",
+ "env": {
+ "HAVE_VALGRIND_FALSE": "#",
+ "HAVE_VALGRIND_TRUE": ""
+ }
+ },
+ "cleanup": [
+ "/include",
+ "/libexec",
+ "/lib/pkgconfig",
+ "/lib/*.la",
+ "/share/doc",
+ "/share/libdbusmenu",
+ "/share/gtk-doc",
+ "/share/gir-1.0"
+ ],
+ "config-opts": [
+ "--disable-static",
+ "--disable-gtk-doc",
+ "--enable-introspection=no",
+ "--disable-vala",
+ "--disable-dumper",
+ "--disable-tests",
+ "--with-gtk=2"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://launchpad.net/libdbusmenu/16.04/16.04.0/+download/libdbusmenu-16.04.0.tar.gz",
+ "sha256": "b9cc4a2acd74509435892823607d966d424bd9ad5d0b00938f27240a1bfa878a"
+ }
+ ]
+ },
+ {
+ "name": "libindicator",
+ "build-options": {
+ "cflags": "-Wno-error"
+ },
+ "cleanup": [
+ "/include",
+ "/libexec",
+ "/lib/pkgconfig",
+ "/lib/*.la",
+ "/share/libindicator",
+ "/share/gtk-doc",
+ "/share/gir-1.0"
+ ],
+ "config-opts": [
+ "--disable-static",
+ "--disable-tests",
+ "--with-gtk=2"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://launchpad.net/libindicator/12.10/12.10.1/+download/libindicator-12.10.1.tar.gz",
+ "sha256": "b2d2e44c10313d5c9cd60db455d520f80b36dc39562df079a3f29495e8f9447f"
+ },
+ {
+ "type": "shell",
+ "commands": [
+ "# FTBFS fix",
+ "sed -e '/LIBINDICATOR_LIBS/ s/\\$LIBM/ $LIBM/' -i configure.ac"
+ ]
+ },
+ {
+ "type": "script",
+ "commands": ["autoreconf -sfi"],
+ "dest-filename": "autogen.sh"
+ }
+ ]
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/libappindicator/libappindicator-gtk3-12.10.json b/subprojects/shared-modules/libappindicator/libappindicator-gtk3-12.10.json
new file mode 100644
index 00000000..c613f8fb
--- /dev/null
+++ b/subprojects/shared-modules/libappindicator/libappindicator-gtk3-12.10.json
@@ -0,0 +1,130 @@
+{
+ "name": "libappindicator",
+ "build-options": {
+ "cflags": "-Wno-error",
+ "make-args": [ "-j1" ]
+ },
+ "rm-configure": true,
+ "config-opts": [
+ "--disable-static",
+ "--disable-gtk-doc",
+ "--disable-tests",
+ "--disable-mono-tests",
+ "--enable-introspection=no",
+ "--with-gtk=3"
+ ],
+ "cleanup": [
+ "/include",
+ "/lib/pkgconfig",
+ "/lib/*.la",
+ "/share/gtk-doc",
+ "/share/gir-1.0"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://launchpad.net/libappindicator/12.10/12.10.0/+download/libappindicator-12.10.0.tar.gz",
+ "sha256": "d5907c1f98084acf28fd19593cb70672caa0ca1cf82d747ba6f4830d4cc3b49f"
+ },
+ {
+ "type": "patch",
+ "path": "libappindicator-ftbfs.patch"
+ },
+ {
+ "type": "patch",
+ "path": "libappindicator-no-python.patch"
+ },
+ {
+ "type": "patch",
+ "path": "libappindicator-fix-crash-from-incorrect-signal-emission.patch"
+ },
+ {
+ "type": "patch",
+ "path": "libappindicator-fix-crash-iterating-icon-themes.patch"
+ },
+ {
+ "type": "script",
+ "commands": ["autoreconf -sfi"],
+ "dest-filename": "autogen.sh"
+ }
+ ],
+ "modules": [
+ "../intltool/intltool-0.51.json",
+ "../dbus-glib/dbus-glib.json",
+ {
+ "name": "libdbusmenu",
+ "build-options": {
+ "cflags": "-Wno-error",
+ "env": {
+ "HAVE_VALGRIND_FALSE": "#",
+ "HAVE_VALGRIND_TRUE": ""
+ }
+ },
+ "cleanup": [
+ "/include",
+ "/libexec",
+ "/lib/pkgconfig",
+ "/lib/*.la",
+ "/share/doc",
+ "/share/libdbusmenu",
+ "/share/gtk-doc",
+ "/share/gir-1.0"
+ ],
+ "config-opts": [
+ "--disable-static",
+ "--disable-gtk-doc",
+ "--enable-introspection=no",
+ "--disable-vala",
+ "--disable-dumper",
+ "--disable-tests",
+ "--with-gtk=3"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://launchpad.net/libdbusmenu/16.04/16.04.0/+download/libdbusmenu-16.04.0.tar.gz",
+ "sha256": "b9cc4a2acd74509435892823607d966d424bd9ad5d0b00938f27240a1bfa878a"
+ }
+ ]
+ },
+ {
+ "name": "libindicator",
+ "build-options": {
+ "cflags": "-Wno-error"
+ },
+ "cleanup": [
+ "/include",
+ "/libexec",
+ "/lib/pkgconfig",
+ "/lib/*.la",
+ "/share/libindicator",
+ "/share/gtk-doc",
+ "/share/gir-1.0"
+ ],
+ "config-opts": [
+ "--disable-static",
+ "--disable-tests",
+ "--with-gtk=3"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://launchpad.net/libindicator/12.10/12.10.1/+download/libindicator-12.10.1.tar.gz",
+ "sha256": "b2d2e44c10313d5c9cd60db455d520f80b36dc39562df079a3f29495e8f9447f"
+ },
+ {
+ "type": "shell",
+ "commands": [
+ "# FTBFS fix",
+ "sed -e '/LIBINDICATOR_LIBS/ s/\\$LIBM/ $LIBM/' -i configure.ac"
+ ]
+ },
+ {
+ "type": "script",
+ "commands": ["autoreconf -sfi"],
+ "dest-filename": "autogen.sh"
+ }
+ ]
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/libappindicator/libappindicator-gtk3-introspection-12.10.json b/subprojects/shared-modules/libappindicator/libappindicator-gtk3-introspection-12.10.json
new file mode 100644
index 00000000..c49742ed
--- /dev/null
+++ b/subprojects/shared-modules/libappindicator/libappindicator-gtk3-introspection-12.10.json
@@ -0,0 +1,130 @@
+{
+ "name": "libappindicator",
+ "build-options": {
+ "cflags": "-Wno-error",
+ "make-args": [ "-j1" ]
+ },
+ "rm-configure": true,
+ "config-opts": [
+ "--disable-static",
+ "--disable-gtk-doc",
+ "--disable-tests",
+ "--disable-mono-tests",
+ "--enable-introspection=yes",
+ "--with-gtk=3"
+ ],
+ "cleanup": [
+ "/include",
+ "/lib/pkgconfig",
+ "/lib/*.la",
+ "/share/gtk-doc",
+ "/share/gir-1.0"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://launchpad.net/libappindicator/12.10/12.10.0/+download/libappindicator-12.10.0.tar.gz",
+ "sha256": "d5907c1f98084acf28fd19593cb70672caa0ca1cf82d747ba6f4830d4cc3b49f"
+ },
+ {
+ "type": "patch",
+ "path": "libappindicator-ftbfs.patch"
+ },
+ {
+ "type": "patch",
+ "path": "libappindicator-no-python.patch"
+ },
+ {
+ "type": "patch",
+ "path": "libappindicator-fix-crash-from-incorrect-signal-emission.patch"
+ },
+ {
+ "type": "patch",
+ "path": "libappindicator-fix-crash-iterating-icon-themes.patch"
+ },
+ {
+ "type": "script",
+ "commands": ["autoreconf -sfi"],
+ "dest-filename": "autogen.sh"
+ }
+ ],
+ "modules": [
+ "../intltool/intltool-0.51.json",
+ "../dbus-glib/dbus-glib.json",
+ {
+ "name": "libdbusmenu",
+ "build-options": {
+ "cflags": "-Wno-error",
+ "env": {
+ "HAVE_VALGRIND_FALSE": "#",
+ "HAVE_VALGRIND_TRUE": ""
+ }
+ },
+ "cleanup": [
+ "/include",
+ "/libexec",
+ "/lib/pkgconfig",
+ "/lib/*.la",
+ "/share/doc",
+ "/share/libdbusmenu",
+ "/share/gtk-doc",
+ "/share/gir-1.0"
+ ],
+ "config-opts": [
+ "--disable-static",
+ "--disable-gtk-doc",
+ "--enable-introspection=yes",
+ "--disable-vala",
+ "--disable-dumper",
+ "--disable-tests",
+ "--with-gtk=3"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://launchpad.net/libdbusmenu/16.04/16.04.0/+download/libdbusmenu-16.04.0.tar.gz",
+ "sha256": "b9cc4a2acd74509435892823607d966d424bd9ad5d0b00938f27240a1bfa878a"
+ }
+ ]
+ },
+ {
+ "name": "libindicator",
+ "build-options": {
+ "cflags": "-Wno-error"
+ },
+ "cleanup": [
+ "/include",
+ "/libexec",
+ "/lib/pkgconfig",
+ "/lib/*.la",
+ "/share/libindicator",
+ "/share/gtk-doc",
+ "/share/gir-1.0"
+ ],
+ "config-opts": [
+ "--disable-static",
+ "--disable-tests",
+ "--with-gtk=3"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://launchpad.net/libindicator/12.10/12.10.1/+download/libindicator-12.10.1.tar.gz",
+ "sha256": "b2d2e44c10313d5c9cd60db455d520f80b36dc39562df079a3f29495e8f9447f"
+ },
+ {
+ "type": "shell",
+ "commands": [
+ "# FTBFS fix",
+ "sed -e '/LIBINDICATOR_LIBS/ s/\\$LIBM/ $LIBM/' -i configure.ac"
+ ]
+ },
+ {
+ "type": "script",
+ "commands": ["autoreconf -sfi"],
+ "dest-filename": "autogen.sh"
+ }
+ ]
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/libappindicator/libappindicator-no-python.patch b/subprojects/shared-modules/libappindicator/libappindicator-no-python.patch
new file mode 100644
index 00000000..587cddec
--- /dev/null
+++ b/subprojects/shared-modules/libappindicator/libappindicator-no-python.patch
@@ -0,0 +1,888 @@
+diff --git a/bindings/Makefile.am b/bindings/Makefile.am
+index d1f6d73..dccca6c 100644
+--- a/bindings/Makefile.am
++++ b/bindings/Makefile.am
+@@ -3,7 +3,6 @@ SUBDIRS = \
+ vala
+ else
+ SUBDIRS = \
+- python \
+ vala
+ endif
+
+diff --git a/bindings/python/Makefile.am b/bindings/python/Makefile.am
+deleted file mode 100644
+index fe95c02..0000000
+--- a/bindings/python/Makefile.am
++++ /dev/null
+@@ -1,39 +0,0 @@
+-defsdir = $(datadir)/pygtk/2.0/defs
+-defs_DATA = appindicator.defs
+-
+-#CFLAGS = -Wall -Werror
+-INCLUDES = \
+- -I$(top_srcdir)/src \
+- -DG_LOG_DOMAIN=\"appindicator-python\" \
+- -DDATADIR=\"$(datadir)\" \
+- -DLIBDIR=\"$(libdir)\" \
+- $(APPINDICATOR_PYTHON_CFLAGS) \
+- $(PYTHON_INCLUDES)
+-
+-pkgpythondir = $(pyexecdir)
+-pkgpyexecdir = $(pyexecdir)
+-
+-pkgappindicatordir = $(pkgpythondir)/appindicator
+-pkgappindicator_PYTHON = __init__.py
+-
+-appindicatordir = $(pkgpyexecdir)/appindicator
+-appindicator_LTLIBRARIES = _appindicator.la
+-
+-_appindicator_la_LDFLAGS = -module -avoid-version -export-symbols-regex init_appindicator
+-_appindicator_la_LIBADD = $(APPINDICATOR_PYTHON_LIBS) -L$(top_builddir)/src/.libs -lappindicator
+-_appindicator_la_SOURCES = appindicatormodule.c
+-nodist__appindicator_la_SOURCES = appindicator.c
+-
+-CLEANFILES = appindicator.c
+-EXTRA_DIST = appindicator.override.in appindicator-arg-types.py $(defs_DATA)
+-appindicator.c: $(defs_DATA) appindicator.override
+-
+-%.c: %.defs
+- ($(PYGTK_CODEGEN) \
+- --register $(PYGTK_DEFSDIR)/gtk-types.defs \
+- --register $(PYGTK_DEFSDIR)/gdk-types.defs \
+- --load-types $(srcdir)/appindicator-arg-types.py \
+- --override $*.override \
+- --prefix py$* $(srcdir)/$*.defs) > gen-$*.c \
+- && cp gen-$*.c $*.c \
+- && rm -f gen-$*.c
+diff --git a/bindings/python/__init__.py b/bindings/python/__init__.py
+deleted file mode 100644
+index 20e2140..0000000
+--- a/bindings/python/__init__.py
++++ /dev/null
+@@ -1,27 +0,0 @@
+-# Python bindings for libappindicator.
+-#
+-# Copyright 2009 Canonical Ltd.
+-#
+-# Authors:
+-# Eitan Isaacson <eitan@ascender.com>
+-# Neil Jagdish Patel <neil.patel@canonical.com>
+-#
+-# This program is free software: you can redistribute it and/or modify it
+-# under the terms of either or both of the following licenses:
+-#
+-# 1) the GNU Lesser General Public License version 3, as published by the
+-# Free Software Foundation; and/or
+-# 2) the GNU Lesser General Public License version 2.1, as published by
+-# the Free Software Foundation.
+-#
+-# This program is distributed in the hope that it will be useful, but
+-# WITHOUT ANY WARRANTY; without even the implied warranties of
+-# MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
+-# PURPOSE. See the applicable version of the GNU Lesser General Public
+-# License for more details.
+-#
+-# You should have received a copy of both the GNU Lesser General Public
+-# License version 3 and version 2.1 along with this program. If not, see
+-# <http://www.gnu.org/licenses/>
+-
+-from _appindicator import *
+diff --git a/bindings/python/appindicator-arg-types.py b/bindings/python/appindicator-arg-types.py
+deleted file mode 100644
+index 9d74aa0..0000000
+--- a/bindings/python/appindicator-arg-types.py
++++ /dev/null
+@@ -1,27 +0,0 @@
+-# Python bindings for libappindicator.
+-#
+-# Copyright 2009 Canonical Ltd.
+-#
+-# Authors:
+-# Eitan Isaacson <eitan@ascender.com>
+-#
+-# This program is free software: you can redistribute it and/or modify it
+-# under the terms of either or both of the following licenses:
+-#
+-# 1) the GNU Lesser General Public License version 3, as published by the
+-# Free Software Foundation; and/or
+-# 2) the GNU Lesser General Public License version 2.1, as published by
+-# the Free Software Foundation.
+-#
+-# This program is distributed in the hope that it will be useful, but
+-# WITHOUT ANY WARRANTY; without even the implied warranties of
+-# MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
+-# PURPOSE. See the applicable version of the GNU Lesser General Public
+-# License for more details.
+-#
+-# You should have received a copy of both the GNU Lesser General Public
+-# License version 3 and version 2.1 along with this program. If not, see
+-# <http://www.gnu.org/licenses/>
+-
+-import argtypes
+-
+diff --git a/bindings/python/appindicator.defs b/bindings/python/appindicator.defs
+deleted file mode 100644
+index 4fcc2d5..0000000
+--- a/bindings/python/appindicator.defs
++++ /dev/null
+@@ -1,200 +0,0 @@
+-;; -*- scheme -*-
+-; object definitions ...
+-(define-object Indicator
+- (in-module "App")
+- (parent "GObject")
+- (c-name "AppIndicator")
+- (gtype-id "APP_TYPE_INDICATOR")
+-)
+-
+-;; Enumerations and flags ...
+-
+-(define-enum IndicatorCategory
+- (in-module "App")
+- (c-name "AppIndicatorCategory")
+- (gtype-id "APP_INDICATOR_TYPE_INDICATOR_CATEGORY")
+- (values
+- '("ApplicationStatus" "APP_INDICATOR_CATEGORY_APPLICATION_STATUS")
+- '("Communications" "APP_INDICATOR_CATEGORY_COMMUNICATIONS")
+- '("SystemServices" "APP_INDICATOR_CATEGORY_SYSTEM_SERVICES")
+- '("Hardware" "APP_INDICATOR_CATEGORY_HARDWARE")
+- '("Other" "APP_INDICATOR_CATEGORY_OTHER")
+- )
+-)
+-
+-(define-enum IndicatorStatus
+- (in-module "App")
+- (c-name "AppIndicatorStatus")
+- (gtype-id "APP_INDICATOR_TYPE_INDICATOR_STATUS")
+- (values
+- '("Passive" "APP_INDICATOR_STATUS_PASSIVE")
+- '("Active" "APP_INDICATOR_STATUS_ACTIVE")
+- '("NeedsAttention" "APP_INDICATOR_STATUS_ATTENTION")
+- )
+-)
+-
+-;; From app-indicator.h
+-
+-(define-function app_indicator_get_type
+- (c-name "app_indicator_get_type")
+- (return-type "GType")
+-)
+-
+-(define-function app_indicator_new_with_path
+- (c-name "app_indicator_new_with_path")
+- (is-constructor-of "AppIndicator")
+- (return-type "AppIndicator*")
+- (parameters
+- '("const-gchar*" "id")
+- '("const-gchar*" "icon_name")
+- '("AppIndicatorCategory" "category")
+- '("const-gchar*" "icon_theme_path" (null-ok) (default "NULL"))
+- )
+-)
+-
+-(define-method set_status
+- (of-object "AppIndicator")
+- (c-name "app_indicator_set_status")
+- (return-type "none")
+- (parameters
+- '("AppIndicatorStatus" "status")
+- )
+-)
+-
+-(define-method set_attention_icon
+- (of-object "AppIndicator")
+- (c-name "app_indicator_set_attention_icon_full")
+- (return-type "none")
+- (parameters
+- '("const-gchar*" "icon_name")
+- '("const-gchar*" "icon_desc" (null-ok) (default "NULL"))
+- )
+-)
+-
+-(define-method set_menu
+- (of-object "AppIndicator")
+- (c-name "app_indicator_set_menu")
+- (return-type "none")
+- (parameters
+- '("GtkMenu*" "menu")
+- )
+-)
+-
+-(define-method set_icon
+- (of-object "AppIndicator")
+- (c-name "app_indicator_set_icon_full")
+- (return-type "none")
+- (parameters
+- '("const-gchar*" "icon_name")
+- '("const-gchar*" "icon_desc" (null-ok) (default "NULL"))
+- )
+-)
+-
+-(define-method set_label
+- (of-object "AppIndicator")
+- (c-name "app_indicator_set_label")
+- (return-type "none")
+- (parameters
+- '("const-gchar*" "label" (null-ok))
+- '("const-gchar*" "guide" (null-ok) (default "NULL"))
+- )
+-)
+-
+-(define-method set_ordering_index
+- (of-object "AppIndicator")
+- (c-name "app_indicator_set_ordering_index")
+- (parameters
+- '("guint32" "ordering_index")
+- )
+-)
+-
+-(define-method set_icon_theme_path
+- (of-object "AppIndicator")
+- (c-name "app_indicator_set_icon_theme_path")
+- (return-type "none")
+- (parameters
+- '("const-gchar*" "icon_theme_path" (null-ok))
+- )
+-)
+-
+-(define-method get_id
+- (of-object "AppIndicator")
+- (c-name "app_indicator_get_id")
+- (return-type "const-gchar*")
+-)
+-
+-(define-method get_category
+- (of-object "AppIndicator")
+- (c-name "app_indicator_get_category")
+- (return-type "AppIndicatorCategory")
+-)
+-
+-(define-method get_status
+- (of-object "AppIndicator")
+- (c-name "app_indicator_get_status")
+- (return-type "AppIndicatorStatus")
+-)
+-
+-(define-method get_icon
+- (of-object "AppIndicator")
+- (c-name "app_indicator_get_icon")
+- (return-type "const-gchar*")
+-)
+-
+-(define-method get_icon_desc
+- (of-object "AppIndicator")
+- (c-name "app_indicator_get_icon_desc")
+- (return-type "const-gchar*")
+-)
+-
+-(define-method get_icon_theme_path
+- (of-object "AppIndicator")
+- (c-name "app_indicator_get_icon_theme_path")
+- (return-type "const-gchar*")
+-)
+-
+-(define-method get_attention_icon
+- (of-object "AppIndicator")
+- (c-name "app_indicator_get_attention_icon")
+- (return-type "const-gchar*")
+-)
+-
+-(define-method get_attention_icon_desc
+- (of-object "AppIndicator")
+- (c-name "app_indicator_get_attention_icon_desc")
+- (return-type "const-gchar*")
+-)
+-
+-(define-method get_menu
+- (of-object "AppIndicator")
+- (c-name "app_indicator_get_menu")
+- (return-type "GtkMenu*")
+-)
+-
+-(define-method get_label
+- (of-object "AppIndicator")
+- (c-name "app_indicator_get_label")
+- (return-type "const-gchar*")
+-)
+-
+-(define-method get_label_guide
+- (of-object "AppIndicator")
+- (c-name "app_indicator_get_label_guide")
+- (return-type "const-gchar*")
+-)
+-
+-(define-method get_ordering_index
+- (of-object "AppIndicator")
+- (c-name "app_indicator_get_ordering_index")
+- (return-type "guint32")
+-)
+-
+-(define-method build_menu_from_desktop
+- (of-object "AppIndicator")
+- (c-name "app_indicator_build_menu_from_desktop")
+- (return-type "none")
+- (parameters
+- '("const-gchar*" "desktop_file")
+- '("const-gchar*" "desktop_profile")
+- )
+-)
+diff --git a/bindings/python/appindicator.override.in b/bindings/python/appindicator.override.in
+deleted file mode 100644
+index 84d3159..0000000
+--- a/bindings/python/appindicator.override.in
++++ /dev/null
+@@ -1,65 +0,0 @@
+-/*
+-Python bindings for libappindicator.
+-
+-Copyright 2009 Canonical Ltd.
+-
+-Authors:
+- Eitan Isaacson <eitan@ascender.com> (original)
+- Neil Jagdish Patel <neil.patel@canonical.com>
+-
+-This program is free software: you can redistribute it and/or modify it
+-under the terms of either or both of the following licenses:
+-
+-1) the GNU Lesser General Public License version 3, as published by the
+-Free Software Foundation; and/or
+-2) the GNU Lesser General Public License version 2.1, as published by
+-the Free Software Foundation.
+-
+-This program is distributed in the hope that it will be useful, but
+-WITHOUT ANY WARRANTY; without even the implied warranties of
+-MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
+-PURPOSE. See the applicable version of the GNU Lesser General Public
+-License for more details.
+-
+-You should have received a copy of both the GNU Lesser General Public
+-License version 3 and version 2.1 along with this program. If not, see
+-<http://www.gnu.org/licenses/>
+-*/
+-%%
+-headers
+-#include <Python.h>
+-#include "@top_srcdir@/src/app-indicator.h"
+-#include "@top_builddir@/src/app-indicator-enum-types.h"
+-#include <glib.h>
+-#include "pygobject.h"
+-#include "pyglib.h"
+-#include <pygtk/pygtk.h>
+-
+-typedef PyObject* (*to_pyobject_func) (gpointer data);
+-
+-#define APP_TYPE_INDICATOR APP_INDICATOR_TYPE
+-
+-void
+-_appindicator_add_constants(PyObject *module, const gchar *strip_prefix)
+-{
+-#ifdef VERSION
+- PyModule_AddStringConstant(module, "__version__", VERSION);
+-#endif
+- pyg_enum_add(module,
+- "IndicatorCategory",
+- strip_prefix,
+- APP_INDICATOR_TYPE_INDICATOR_CATEGORY);
+-
+- pyg_enum_add(module,
+- "IndicatorStatus",
+- strip_prefix,
+- APP_INDICATOR_TYPE_INDICATOR_STATUS);
+-
+- if (PyErr_Occurred())
+- PyErr_Print();
+-}
+-%%
+-modulename appindicator
+-%%
+-import gobject.GObject as PyGObject_Type
+-import gtk.Menu as PyGtkMenu_Type
+diff --git a/bindings/python/appindicatormodule.c b/bindings/python/appindicatormodule.c
+deleted file mode 100644
+index b66639c..0000000
+--- a/bindings/python/appindicatormodule.c
++++ /dev/null
+@@ -1,49 +0,0 @@
+-/*
+-Python bindings for libappindicator.
+-
+-Copyright 2009 Canonical Ltd.
+-
+-Authors:
+- Eitan Isaacson <eitan@ascender.com>
+- Neil Jagdish Patel <neil.patel@canonical.com>
+-
+-This program is free software: you can redistribute it and/or modify it
+-under the terms of either or both of the following licenses:
+-
+-1) the GNU Lesser General Public License version 3, as published by the
+-Free Software Foundation; and/or
+-2) the GNU Lesser General Public License version 2.1, as published by
+-the Free Software Foundation.
+-
+-This program is distributed in the hope that it will be useful, but
+-WITHOUT ANY WARRANTY; without even the implied warranties of
+-MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
+-PURPOSE. See the applicable version of the GNU Lesser General Public
+-License for more details.
+-
+-You should have received a copy of both the GNU Lesser General Public
+-License version 3 and version 2.1 along with this program. If not, see
+-<http://www.gnu.org/licenses/>
+-*/
+-#include <pygobject.h>
+-
+-void pyappindicator_register_classes (PyObject *d);
+-extern PyMethodDef pyappindicator_functions[];
+-
+-DL_EXPORT(void)
+-init_appindicator(void)
+-{
+- PyObject *m, *d;
+-
+- init_pygobject ();
+-
+- m = Py_InitModule ("_appindicator", pyappindicator_functions);
+- d = PyModule_GetDict (m);
+-
+- pyappindicator_register_classes (d);
+-
+- _appindicator_add_constants (m, "APP_INDICATOR_");
+- if (PyErr_Occurred ()) {
+- Py_FatalError ("can't initialise module appindicator");
+- }
+-}
+diff --git a/configure b/configure
+index 5174b3f..8ff732c 100755
+--- a/configure
++++ b/configure
+@@ -13703,363 +13703,6 @@ else
+ fi
+
+
+-###########################
+-# Python
+-###########################
+-
+-PYGTK_REQUIRED=2.14.0
+-PYGOBJECT_REQUIRED=0.22
+-
+-
+-
+-
+-
+- if test -n "$PYTHON"; then
+- # If the user set $PYTHON, use it and don't search something else.
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version >= 2.3.5" >&5
+-$as_echo_n "checking whether $PYTHON version >= 2.3.5... " >&6; }
+- prog="import sys, string
+-# split strings by '.' and convert to numeric. Append some zeros
+-# because we need at least 4 digits for the hex conversion.
+-minver = map(int, string.split('2.3.5', '.')) + [0, 0, 0]
+-minverhex = 0
+-for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[i]
+-sys.exit(sys.hexversion < minverhex)"
+- if { echo "$as_me:$LINENO: $PYTHON -c "$prog"" >&5
+- ($PYTHON -c "$prog") >&5 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; then :
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+-$as_echo "yes" >&6; }
+-else
+- as_fn_error $? "too old" "$LINENO" 5
+-fi
+- am_display_PYTHON=$PYTHON
+- else
+- # Otherwise, try each interpreter until we find one that satisfies
+- # VERSION.
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a Python interpreter with version >= 2.3.5" >&5
+-$as_echo_n "checking for a Python interpreter with version >= 2.3.5... " >&6; }
+-if ${am_cv_pathless_PYTHON+:} false; then :
+- $as_echo_n "(cached) " >&6
+-else
+-
+- for am_cv_pathless_PYTHON in python python2 python2.4 python2.3 python2.2 python2.1 python2.0 python1.6 python1.5 none; do
+- test "$am_cv_pathless_PYTHON" = none && break
+- prog="import sys, string
+-# split strings by '.' and convert to numeric. Append some zeros
+-# because we need at least 4 digits for the hex conversion.
+-minver = map(int, string.split('2.3.5', '.')) + [0, 0, 0]
+-minverhex = 0
+-for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[i]
+-sys.exit(sys.hexversion < minverhex)"
+- if { echo "$as_me:$LINENO: $am_cv_pathless_PYTHON -c "$prog"" >&5
+- ($am_cv_pathless_PYTHON -c "$prog") >&5 2>&5
+- ac_status=$?
+- echo "$as_me:$LINENO: \$? = $ac_status" >&5
+- (exit $ac_status); }; then :
+- break
+-fi
+- done
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_pathless_PYTHON" >&5
+-$as_echo "$am_cv_pathless_PYTHON" >&6; }
+- # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON.
+- if test "$am_cv_pathless_PYTHON" = none; then
+- PYTHON=:
+- else
+- # Extract the first word of "$am_cv_pathless_PYTHON", so it can be a program name with args.
+-set dummy $am_cv_pathless_PYTHON; ac_word=$2
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+-$as_echo_n "checking for $ac_word... " >&6; }
+-if ${ac_cv_path_PYTHON+:} false; then :
+- $as_echo_n "(cached) " >&6
+-else
+- case $PYTHON in
+- [\\/]* | ?:[\\/]*)
+- ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path.
+- ;;
+- *)
+- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
+- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext"
+- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+- break 2
+- fi
+-done
+- done
+-IFS=$as_save_IFS
+-
+- ;;
+-esac
+-fi
+-PYTHON=$ac_cv_path_PYTHON
+-if test -n "$PYTHON"; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5
+-$as_echo "$PYTHON" >&6; }
+-else
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+-$as_echo "no" >&6; }
+-fi
+-
+-
+- fi
+- am_display_PYTHON=$am_cv_pathless_PYTHON
+- fi
+-
+-
+- if test "$PYTHON" = :; then
+- as_fn_error $? "no suitable Python interpreter found" "$LINENO" 5
+- else
+-
+-
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5
+-$as_echo_n "checking for $am_display_PYTHON version... " >&6; }
+-if ${am_cv_python_version+:} false; then :
+- $as_echo_n "(cached) " >&6
+-else
+- am_cv_python_version=`$PYTHON -c "import sys; print sys.version[:3]"`
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5
+-$as_echo "$am_cv_python_version" >&6; }
+- PYTHON_VERSION=$am_cv_python_version
+-
+-
+-
+- PYTHON_PREFIX='${prefix}'
+-
+- PYTHON_EXEC_PREFIX='${exec_prefix}'
+-
+-
+-
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5
+-$as_echo_n "checking for $am_display_PYTHON platform... " >&6; }
+-if ${am_cv_python_platform+:} false; then :
+- $as_echo_n "(cached) " >&6
+-else
+- am_cv_python_platform=`$PYTHON -c "import sys; print sys.platform"`
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5
+-$as_echo "$am_cv_python_platform" >&6; }
+- PYTHON_PLATFORM=$am_cv_python_platform
+-
+-
+-
+-
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5
+-$as_echo_n "checking for $am_display_PYTHON script directory... " >&6; }
+-if ${am_cv_python_pythondir+:} false; then :
+- $as_echo_n "(cached) " >&6
+-else
+- am_cv_python_pythondir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(0,0,prefix='$PYTHON_PREFIX')" 2>/dev/null ||
+- echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"`
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5
+-$as_echo "$am_cv_python_pythondir" >&6; }
+- pythondir=$am_cv_python_pythondir
+-
+-
+-
+- pkgpythondir=\${pythondir}/$PACKAGE
+-
+-
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5
+-$as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; }
+-if ${am_cv_python_pyexecdir+:} false; then :
+- $as_echo_n "(cached) " >&6
+-else
+- am_cv_python_pyexecdir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(1,0,prefix='$PYTHON_EXEC_PREFIX')" 2>/dev/null ||
+- echo "${PYTHON_EXEC_PREFIX}/lib/python${PYTHON_VERSION}/site-packages"`
+-fi
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5
+-$as_echo "$am_cv_python_pyexecdir" >&6; }
+- pyexecdir=$am_cv_python_pyexecdir
+-
+-
+-
+- pkgpyexecdir=\${pyexecdir}/$PACKAGE
+-
+-
+-
+- fi
+-
+-
+-
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for headers required to compile python extensions" >&5
+-$as_echo_n "checking for headers required to compile python extensions... " >&6; }
+-py_prefix=`$PYTHON -c "import sys; print sys.prefix"`
+-py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"`
+-PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}"
+-if test "$py_prefix" != "$py_exec_prefix"; then
+- PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}"
+-fi
+-
+-save_CPPFLAGS="$CPPFLAGS"
+-CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES"
+-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-#include <Python.h>
+-_ACEOF
+-if ac_fn_c_try_cpp "$LINENO"; then :
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5
+-$as_echo "found" >&6; }
+-
+-else
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+-$as_echo "not found" >&6; }
+-as_fn_error $? "could not find Python headers" "$LINENO" 5
+-fi
+-rm -f conftest.err conftest.i conftest.$ac_ext
+-CPPFLAGS="$save_CPPFLAGS"
+-
+-
+-
+-pkg_failed=no
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for APPINDICATOR_PYTHON" >&5
+-$as_echo_n "checking for APPINDICATOR_PYTHON... " >&6; }
+-
+-if test -n "$APPINDICATOR_PYTHON_CFLAGS"; then
+- pkg_cv_APPINDICATOR_PYTHON_CFLAGS="$APPINDICATOR_PYTHON_CFLAGS"
+- elif test -n "$PKG_CONFIG"; then
+- if test -n "$PKG_CONFIG" && \
+- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"
+- pygtk-2.0 >= \$PYGTK_REQUIRED
+- gtk+-2.0 >= \$GTK_REQUIRED_VERSION
+- pygobject-2.0 >= \$PYGOBJECT_REQUIRED
+- \""; } >&5
+- ($PKG_CONFIG --exists --print-errors "
+- pygtk-2.0 >= $PYGTK_REQUIRED
+- gtk+-2.0 >= $GTK_REQUIRED_VERSION
+- pygobject-2.0 >= $PYGOBJECT_REQUIRED
+- ") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+- test $ac_status = 0; }; then
+- pkg_cv_APPINDICATOR_PYTHON_CFLAGS=`$PKG_CONFIG --cflags "
+- pygtk-2.0 >= $PYGTK_REQUIRED
+- gtk+-2.0 >= $GTK_REQUIRED_VERSION
+- pygobject-2.0 >= $PYGOBJECT_REQUIRED
+- " 2>/dev/null`
+- test "x$?" != "x0" && pkg_failed=yes
+-else
+- pkg_failed=yes
+-fi
+- else
+- pkg_failed=untried
+-fi
+-if test -n "$APPINDICATOR_PYTHON_LIBS"; then
+- pkg_cv_APPINDICATOR_PYTHON_LIBS="$APPINDICATOR_PYTHON_LIBS"
+- elif test -n "$PKG_CONFIG"; then
+- if test -n "$PKG_CONFIG" && \
+- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"
+- pygtk-2.0 >= \$PYGTK_REQUIRED
+- gtk+-2.0 >= \$GTK_REQUIRED_VERSION
+- pygobject-2.0 >= \$PYGOBJECT_REQUIRED
+- \""; } >&5
+- ($PKG_CONFIG --exists --print-errors "
+- pygtk-2.0 >= $PYGTK_REQUIRED
+- gtk+-2.0 >= $GTK_REQUIRED_VERSION
+- pygobject-2.0 >= $PYGOBJECT_REQUIRED
+- ") 2>&5
+- ac_status=$?
+- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+- test $ac_status = 0; }; then
+- pkg_cv_APPINDICATOR_PYTHON_LIBS=`$PKG_CONFIG --libs "
+- pygtk-2.0 >= $PYGTK_REQUIRED
+- gtk+-2.0 >= $GTK_REQUIRED_VERSION
+- pygobject-2.0 >= $PYGOBJECT_REQUIRED
+- " 2>/dev/null`
+- test "x$?" != "x0" && pkg_failed=yes
+-else
+- pkg_failed=yes
+-fi
+- else
+- pkg_failed=untried
+-fi
+-
+-
+-
+-if test $pkg_failed = yes; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+-$as_echo "no" >&6; }
+-
+-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+- _pkg_short_errors_supported=yes
+-else
+- _pkg_short_errors_supported=no
+-fi
+- if test $_pkg_short_errors_supported = yes; then
+- APPINDICATOR_PYTHON_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "
+- pygtk-2.0 >= $PYGTK_REQUIRED
+- gtk+-2.0 >= $GTK_REQUIRED_VERSION
+- pygobject-2.0 >= $PYGOBJECT_REQUIRED
+- " 2>&1`
+- else
+- APPINDICATOR_PYTHON_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "
+- pygtk-2.0 >= $PYGTK_REQUIRED
+- gtk+-2.0 >= $GTK_REQUIRED_VERSION
+- pygobject-2.0 >= $PYGOBJECT_REQUIRED
+- " 2>&1`
+- fi
+- # Put the nasty error message in config.log where it belongs
+- echo "$APPINDICATOR_PYTHON_PKG_ERRORS" >&5
+-
+- as_fn_error $? "Package requirements (
+- pygtk-2.0 >= $PYGTK_REQUIRED
+- gtk+-2.0 >= $GTK_REQUIRED_VERSION
+- pygobject-2.0 >= $PYGOBJECT_REQUIRED
+- ) were not met:
+-
+-$APPINDICATOR_PYTHON_PKG_ERRORS
+-
+-Consider adjusting the PKG_CONFIG_PATH environment variable if you
+-installed software in a non-standard prefix.
+-
+-Alternatively, you may set the environment variables APPINDICATOR_PYTHON_CFLAGS
+-and APPINDICATOR_PYTHON_LIBS to avoid the need to call pkg-config.
+-See the pkg-config man page for more details." "$LINENO" 5
+-elif test $pkg_failed = untried; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+-$as_echo "no" >&6; }
+- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+-as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
+-is in your PATH or set the PKG_CONFIG environment variable to the full
+-path to pkg-config.
+-
+-Alternatively, you may set the environment variables APPINDICATOR_PYTHON_CFLAGS
+-and APPINDICATOR_PYTHON_LIBS to avoid the need to call pkg-config.
+-See the pkg-config man page for more details.
+-
+-To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+-See \`config.log' for more details" "$LINENO" 5; }
+-else
+- APPINDICATOR_PYTHON_CFLAGS=$pkg_cv_APPINDICATOR_PYTHON_CFLAGS
+- APPINDICATOR_PYTHON_LIBS=$pkg_cv_APPINDICATOR_PYTHON_LIBS
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+-$as_echo "yes" >&6; }
+-
+-fi
+-
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pygtk defs" >&5
+-$as_echo_n "checking for pygtk defs... " >&6; }
+-PYGTK_DEFSDIR=`$PKG_CONFIG --variable=defsdir pygtk-2.0`
+-
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYGTK_DEFSDIR" >&5
+-$as_echo "$PYGTK_DEFSDIR" >&6; }
+-
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pygtk codegen" >&5
+-$as_echo_n "checking for pygtk codegen... " >&6; }
+-PYGTK_CODEGEN="$PYTHON `$PKG_CONFIG --variable=codegendir pygtk-2.0`/codegen.py"
+-
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYGTK_CODEGEN" >&5
+-$as_echo "$PYGTK_CODEGEN" >&6; }
+
+ #########################
+ # Check if build tests
+@@ -14358,7 +14001,7 @@ fi
+ # Files
+ ###########################
+
+-ac_config_files="$ac_config_files Makefile src/Makefile src/appindicator-0.1.pc src/appindicator3-0.1.pc bindings/Makefile bindings/python/Makefile bindings/python/appindicator.override bindings/vala/Makefile bindings/vala/examples/Makefile tests/Makefile example/Makefile docs/Makefile docs/reference/Makefile docs/reference/version.xml docs/reference/libappindicator-docs.sgml"
++ac_config_files="$ac_config_files Makefile src/Makefile src/appindicator-0.1.pc src/appindicator3-0.1.pc bindings/Makefile bindings/vala/Makefile bindings/vala/examples/Makefile tests/Makefile example/Makefile docs/Makefile docs/reference/Makefile docs/reference/version.xml docs/reference/libappindicator-docs.sgml"
+
+
+ if test "x$has_mono" = "xtrue" ; then
+@@ -15437,8 +15080,6 @@ do
+ "src/appindicator-0.1.pc") CONFIG_FILES="$CONFIG_FILES src/appindicator-0.1.pc" ;;
+ "src/appindicator3-0.1.pc") CONFIG_FILES="$CONFIG_FILES src/appindicator3-0.1.pc" ;;
+ "bindings/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/Makefile" ;;
+- "bindings/python/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/python/Makefile" ;;
+- "bindings/python/appindicator.override") CONFIG_FILES="$CONFIG_FILES bindings/python/appindicator.override" ;;
+ "bindings/vala/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/vala/Makefile" ;;
+ "bindings/vala/examples/Makefile") CONFIG_FILES="$CONFIG_FILES bindings/vala/examples/Makefile" ;;
+ "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
+diff --git a/configure.ac b/configure.ac
+index ee03390..4713b22 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -181,33 +181,6 @@ AM_CONDITIONAL(BUILD_MONO_TEST, test x${have_nunit} = xyes)
+ with_localinstall="no"
+ AC_ARG_ENABLE(localinstall, AS_HELP_STRING([--enable-localinstall], [install all of the files localy instead of system directories (for distcheck)]), with_localinstall=$enableval, with_localinstall=no)
+
+-###########################
+-# Python
+-###########################
+-
+-PYGTK_REQUIRED=2.14.0
+-PYGOBJECT_REQUIRED=0.22
+-
+-AM_PATH_PYTHON(2.3.5)
+-AM_CHECK_PYTHON_HEADERS(,[AC_MSG_ERROR(could not find Python headers)])
+-
+-PKG_CHECK_MODULES(APPINDICATOR_PYTHON,
+- [
+- pygtk-2.0 >= $PYGTK_REQUIRED
+- gtk+-2.0 >= $GTK_REQUIRED_VERSION
+- pygobject-2.0 >= $PYGOBJECT_REQUIRED
+- ])
+-
+-AC_MSG_CHECKING(for pygtk defs)
+-PYGTK_DEFSDIR=`$PKG_CONFIG --variable=defsdir pygtk-2.0`
+-AC_SUBST(PYGTK_DEFSDIR)
+-AC_MSG_RESULT($PYGTK_DEFSDIR)
+-
+-AC_MSG_CHECKING(for pygtk codegen)
+-PYGTK_CODEGEN="$PYTHON `$PKG_CONFIG --variable=codegendir pygtk-2.0`/codegen.py"
+-AC_SUBST(PYGTK_CODEGEN)
+-AC_MSG_RESULT($PYGTK_CODEGEN)
+-
+ #########################
+ # Check if build tests
+ #########################
+@@ -239,8 +212,6 @@ src/Makefile
+ src/appindicator-0.1.pc
+ src/appindicator3-0.1.pc
+ bindings/Makefile
+-bindings/python/Makefile
+-bindings/python/appindicator.override
+ bindings/vala/Makefile
+ bindings/vala/examples/Makefile
+ tests/Makefile \ No newline at end of file
diff --git a/subprojects/shared-modules/libappindicator/libappindicator.json.in b/subprojects/shared-modules/libappindicator/libappindicator.json.in
new file mode 100644
index 00000000..3e53a81a
--- /dev/null
+++ b/subprojects/shared-modules/libappindicator/libappindicator.json.in
@@ -0,0 +1,130 @@
+{
+ "name": "libappindicator",
+ "build-options": {
+ "cflags": "-Wno-error",
+ "make-args": [ "-j1" ]
+ },
+ "rm-configure": true,
+ "config-opts": [
+ "--disable-static",
+ "--disable-gtk-doc",
+ "--disable-tests",
+ "--disable-mono-tests",
+ "--enable-introspection=@INTROSPECTION@",
+ "--with-gtk=@GTK_VER@"
+ ],
+ "cleanup": [
+ "/include",
+ "/lib/pkgconfig",
+ "/lib/*.la",
+ "/share/gtk-doc",
+ "/share/gir-1.0"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://launchpad.net/libappindicator/12.10/12.10.0/+download/libappindicator-12.10.0.tar.gz",
+ "sha256": "d5907c1f98084acf28fd19593cb70672caa0ca1cf82d747ba6f4830d4cc3b49f"
+ },
+ {
+ "type": "patch",
+ "path": "libappindicator-ftbfs.patch"
+ },
+ {
+ "type": "patch",
+ "path": "libappindicator-no-python.patch"
+ },
+ {
+ "type": "patch",
+ "path": "libappindicator-fix-crash-from-incorrect-signal-emission.patch"
+ },
+ {
+ "type": "patch",
+ "path": "libappindicator-fix-crash-iterating-icon-themes.patch"
+ },
+ {
+ "type": "script",
+ "commands": ["autoreconf -sfi"],
+ "dest-filename": "autogen.sh"
+ }
+ ],
+ "modules": [
+ "../intltool/intltool-0.51.json",
+ "../dbus-glib/dbus-glib.json",
+ {
+ "name": "libdbusmenu",
+ "build-options": {
+ "cflags": "-Wno-error",
+ "env": {
+ "HAVE_VALGRIND_FALSE": "#",
+ "HAVE_VALGRIND_TRUE": ""
+ }
+ },
+ "cleanup": [
+ "/include",
+ "/libexec",
+ "/lib/pkgconfig",
+ "/lib/*.la",
+ "/share/doc",
+ "/share/libdbusmenu",
+ "/share/gtk-doc",
+ "/share/gir-1.0"
+ ],
+ "config-opts": [
+ "--disable-static",
+ "--disable-gtk-doc",
+ "--enable-introspection=@INTROSPECTION@",
+ "--disable-vala",
+ "--disable-dumper",
+ "--disable-tests",
+ "--with-gtk=@GTK_VER@"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://launchpad.net/libdbusmenu/16.04/16.04.0/+download/libdbusmenu-16.04.0.tar.gz",
+ "sha256": "b9cc4a2acd74509435892823607d966d424bd9ad5d0b00938f27240a1bfa878a"
+ }
+ ]
+ },
+ {
+ "name": "libindicator",
+ "build-options": {
+ "cflags": "-Wno-error"
+ },
+ "cleanup": [
+ "/include",
+ "/libexec",
+ "/lib/pkgconfig",
+ "/lib/*.la",
+ "/share/libindicator",
+ "/share/gtk-doc",
+ "/share/gir-1.0"
+ ],
+ "config-opts": [
+ "--disable-static",
+ "--disable-tests",
+ "--with-gtk=@GTK_VER@"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://launchpad.net/libindicator/12.10/12.10.1/+download/libindicator-12.10.1.tar.gz",
+ "sha256": "b2d2e44c10313d5c9cd60db455d520f80b36dc39562df079a3f29495e8f9447f"
+ },
+ {
+ "type": "shell",
+ "commands": [
+ "# FTBFS fix",
+ "sed -e '/LIBINDICATOR_LIBS/ s/\\$LIBM/ $LIBM/' -i configure.ac"
+ ]
+ },
+ {
+ "type": "script",
+ "commands": ["autoreconf -sfi"],
+ "dest-filename": "autogen.sh"
+ }
+ ]
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/libcanberra/0001-gtk-Don-t-assume-all-GdkDisplays-are-GdkX11Displays-.patch b/subprojects/shared-modules/libcanberra/0001-gtk-Don-t-assume-all-GdkDisplays-are-GdkX11Displays-.patch
new file mode 100644
index 00000000..763c3a99
--- /dev/null
+++ b/subprojects/shared-modules/libcanberra/0001-gtk-Don-t-assume-all-GdkDisplays-are-GdkX11Displays-.patch
@@ -0,0 +1,123 @@
+From d6dd5cdf45c1aac6c0519c8a4f5f89321770fb53 Mon Sep 17 00:00:00 2001
+From: Michael Meeks <michael.meeks@suse.com>
+Date: Fri, 9 Nov 2012 16:16:40 +0000
+Subject: [PATCH] gtk: Don't assume all GdkDisplays are GdkX11Displays:
+ broadway/wayland
+
+Co-Authored-By: Bastien Nocera <hadess@hadess.net>
+---
+ src/canberra-gtk-module.c | 15 +++++++++++++++
+ src/canberra-gtk.c | 28 ++++++++++++++++++++++------
+ 2 files changed, 37 insertions(+), 6 deletions(-)
+
+diff --git a/src/canberra-gtk-module.c b/src/canberra-gtk-module.c
+index 67791f0..c1532ab 100644
+--- a/src/canberra-gtk-module.c
++++ b/src/canberra-gtk-module.c
+@@ -307,6 +307,11 @@ static gint window_get_desktop(GdkDisplay *d, GdkWindow *w) {
+ guchar *data = NULL;
+ gint ret = -1;
+
++#ifdef GDK_IS_X11_DISPLAY
++ if (!GDK_IS_X11_DISPLAY(d))
++ return 0;
++#endif
++
+ if (XGetWindowProperty(GDK_DISPLAY_XDISPLAY(d), GDK_WINDOW_XID(w),
+ gdk_x11_get_xatom_by_name_for_display(d, "_NET_WM_DESKTOP"),
+ 0, G_MAXLONG, False, XA_CARDINAL, &type_return,
+@@ -335,6 +340,11 @@ static gint display_get_desktop(GdkDisplay *d) {
+ guchar *data = NULL;
+ gint ret = -1;
+
++#ifdef GDK_IS_X11_DISPLAY
++ if (!GDK_IS_X11_DISPLAY(d))
++ return 0;
++#endif
++
+ if (XGetWindowProperty(GDK_DISPLAY_XDISPLAY(d), DefaultRootWindow(GDK_DISPLAY_XDISPLAY(d)),
+ gdk_x11_get_xatom_by_name_for_display(d, "_NET_CURRENT_DESKTOP"),
+ 0, G_MAXLONG, False, XA_CARDINAL, &type_return,
+@@ -365,6 +375,11 @@ static gboolean window_is_xembed(GdkDisplay *d, GdkWindow *w) {
+ gboolean ret = FALSE;
+ Atom xembed;
+
++#ifdef GDK_IS_X11_DISPLAY
++ if (!GDK_IS_X11_DISPLAY(d))
++ return FALSE;
++#endif
++
+ /* Gnome Panel applets are XEMBED windows. We need to make sure we
+ * ignore them */
+
+diff --git a/src/canberra-gtk.c b/src/canberra-gtk.c
+index 34446f5..47285f8 100644
+--- a/src/canberra-gtk.c
++++ b/src/canberra-gtk.c
+@@ -185,6 +185,11 @@ static gint window_get_desktop(GdkDisplay *d, GdkWindow *w) {
+ guchar *data = NULL;
+ gint ret = -1;
+
++#ifdef GDK_IS_X11_DISPLAY
++ if (!GDK_IS_X11_DISPLAY(d))
++ return 0;
++#endif
++
+ if (XGetWindowProperty(GDK_DISPLAY_XDISPLAY(d), GDK_WINDOW_XID(w),
+ gdk_x11_get_xatom_by_name_for_display(d, "_NET_WM_DESKTOP"),
+ 0, G_MAXLONG, False, XA_CARDINAL, &type_return,
+@@ -254,18 +259,28 @@ int ca_gtk_proplist_set_for_widget(ca_proplist *p, GtkWidget *widget) {
+
+ if (gtk_widget_get_realized(GTK_WIDGET(w))) {
+ GdkWindow *dw = NULL;
++#ifdef GDK_IS_X11_DISPLAY
+ GdkScreen *screen = NULL;
++#endif
+ GdkDisplay *display = NULL;
+ gint x = -1, y = -1, width = -1, height = -1, screen_width = -1, screen_height = -1;
+
+- if ((dw = gtk_widget_get_window(GTK_WIDGET(w))))
+- if ((ret = ca_proplist_setf(p, CA_PROP_WINDOW_X11_XID, "%lu", (unsigned long) GDK_WINDOW_XID(dw))) < 0)
+- return ret;
++ if ((dw = gtk_widget_get_window(GTK_WIDGET(w)))) {
++#ifdef GDK_IS_X11_DISPLAY
++ if (GDK_IS_X11_DISPLAY(display)) {
++ if ((ret = ca_proplist_setf(p, CA_PROP_WINDOW_X11_XID, "%lu", (unsigned long) GDK_WINDOW_XID(dw))) < 0)
++ return ret;
++ }
++#endif
++ }
+
+ if ((display = gtk_widget_get_display(GTK_WIDGET(w)))) {
+- if ((t = gdk_display_get_name(display)))
++#ifdef GDK_IS_X11_DISPLAY
++ if (GDK_IS_X11_DISPLAY(display) && (t = gdk_display_get_name(display))) {
+ if ((ret = ca_proplist_sets(p, CA_PROP_WINDOW_X11_DISPLAY, t)) < 0)
+ return ret;
++ }
++#endif
+
+ if (dw) {
+ gint desktop = window_get_desktop(display, dw);
+@@ -276,7 +291,8 @@ int ca_gtk_proplist_set_for_widget(ca_proplist *p, GtkWidget *widget) {
+ }
+ }
+
+- if ((screen = gtk_widget_get_screen(GTK_WIDGET(w)))) {
++#ifdef GDK_IS_X11_DISPLAY
++ if (GDK_IS_X11_DISPLAY(display) && (screen = gtk_widget_get_screen(GTK_WIDGET(w)))) {
+
+ if ((ret = ca_proplist_setf(p, CA_PROP_WINDOW_X11_SCREEN, "%i", gdk_screen_get_number(screen))) < 0)
+ return ret;
+@@ -285,7 +301,7 @@ int ca_gtk_proplist_set_for_widget(ca_proplist *p, GtkWidget *widget) {
+ if ((ret = ca_proplist_setf(p, CA_PROP_WINDOW_X11_MONITOR, "%i", gdk_screen_get_monitor_at_window(screen, dw))) < 0)
+ return ret;
+ }
+-
++#endif
+ /* FIXME, this might cause a round trip */
+
+ if (dw) {
+--
+2.34.1
+
diff --git a/subprojects/shared-modules/libcanberra/libcanberra.json b/subprojects/shared-modules/libcanberra/libcanberra.json
new file mode 100644
index 00000000..ac441941
--- /dev/null
+++ b/subprojects/shared-modules/libcanberra/libcanberra.json
@@ -0,0 +1,35 @@
+{
+ "name": "libcanberra",
+ "cleanup": [
+ "*.la",
+ "/bin",
+ "/etc",
+ "/include",
+ "/libexec",
+ "/share/gtk-doc",
+ "/share/man"
+ ],
+ "config-opts": [
+ "--disable-static",
+ "--disable-gtk-doc",
+ "--disable-oss",
+ "--enable-pulse",
+ "--disable-udev",
+ "--disable-gtk",
+ "--enable-gtk3",
+ "--disable-lynx"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "http://0pointer.de/lennart/projects/libcanberra/libcanberra-0.30.tar.xz",
+ "sha256": "c2b671e67e0c288a69fc33dc1b6f1b534d07882c2aceed37004bf48c601afa72",
+ "git-init" : true
+ },
+ {
+ "type": "patch",
+ "path": "0001-gtk-Don-t-assume-all-GdkDisplays-are-GdkX11Displays-.patch",
+ "use-git-am": true
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/libmad/Provide-Thumb-2-alternative-code-for-MAD_F_MLN.diff b/subprojects/shared-modules/libmad/Provide-Thumb-2-alternative-code-for-MAD_F_MLN.diff
new file mode 100644
index 00000000..46415107
--- /dev/null
+++ b/subprojects/shared-modules/libmad/Provide-Thumb-2-alternative-code-for-MAD_F_MLN.diff
@@ -0,0 +1,34 @@
+From: Dave Martin
+Subject: "rsc" doesnt exist anymore in thumb2
+
+diff --git a/fixed.h b/fixed.h
+index 4b58abf..ba4bc26 100644
+--- a/fixed.h
++++ b/fixed.h
+@@ -275,12 +275,25 @@ mad_fixed_t mad_f_mul_inline(mad_fixed_t x, mad_fixed_t y)
+ : "+r" (lo), "+r" (hi) \
+ : "%r" (x), "r" (y))
+
++#ifdef __thumb__
++/* In Thumb-2, the RSB-immediate instruction is only allowed with a zero
++ operand. If needed this code can also support Thumb-1
++ (simply append "s" to the end of the second two instructions). */
++# define MAD_F_MLN(hi, lo) \
++ asm ("rsbs %0, %0, #0\n\t" \
++ "sbc %1, %1, %1\n\t" \
++ "sub %1, %1, %2" \
++ : "+&r" (lo), "=&r" (hi) \
++ : "r" (hi) \
++ : "cc")
++#else /* ! __thumb__ */
+ # define MAD_F_MLN(hi, lo) \
+ asm ("rsbs %0, %2, #0\n\t" \
+ "rsc %1, %3, #0" \
+- : "=r" (lo), "=r" (hi) \
++ : "=&r" (lo), "=r" (hi) \
+ : "0" (lo), "1" (hi) \
+ : "cc")
++#endif /* __thumb__ */
+
+ # define mad_f_scale64(hi, lo) \
+ ({ mad_fixed_t __result; \
diff --git a/subprojects/shared-modules/libmad/libmad-0.15.1b-cflags-O2.patch b/subprojects/shared-modules/libmad/libmad-0.15.1b-cflags-O2.patch
new file mode 100644
index 00000000..61b4b13b
--- /dev/null
+++ b/subprojects/shared-modules/libmad/libmad-0.15.1b-cflags-O2.patch
@@ -0,0 +1,12 @@
+diff -Naur libmad-0.15.1b-orig/configure.ac libmad-0.15.1b/configure.ac
+--- libmad-0.15.1b-orig/configure.ac 2007-07-01 12:58:13.000000000 -0600
++++ libmad-0.15.1b/configure.ac 2007-07-01 12:59:13.000000000 -0600
+@@ -105,7 +105,7 @@
+ shift
+ ;;
+ -O2)
+- optimize="-O"
++ optimize="-O2"
+ shift
+ ;;
+ -fomit-frame-pointer)
diff --git a/subprojects/shared-modules/libmad/libmad-0.15.1b-cflags.patch b/subprojects/shared-modules/libmad/libmad-0.15.1b-cflags.patch
new file mode 100644
index 00000000..2ec44e34
--- /dev/null
+++ b/subprojects/shared-modules/libmad/libmad-0.15.1b-cflags.patch
@@ -0,0 +1,146 @@
+diff -Naur libmad-0.15.1b-orig/configure.ac libmad-0.15.1b/configure.ac
+--- libmad-0.15.1b-orig/configure.ac 2007-06-30 20:22:31.000000000 -0600
++++ libmad-0.15.1b/configure.ac 2007-06-30 20:25:31.000000000 -0600
+@@ -122,74 +122,74 @@
+ esac
+ done
+
+-if test "$GCC" = yes
+-then
+- if test -z "$arch"
+- then
+- case "$host" in
+- i386-*) ;;
+- i?86-*) arch="-march=i486" ;;
+- arm*-empeg-*) arch="-march=armv4 -mtune=strongarm1100" ;;
+- armv4*-*) arch="-march=armv4 -mtune=strongarm" ;;
+- powerpc-*) ;;
+- mips*-agenda-*) arch="-mcpu=vr4100" ;;
+- mips*-luxsonor-*) arch="-mips1 -mcpu=r3000 -Wa,-m4010" ;;
+- esac
+- fi
+-
+- case "$optimize" in
+- -O|"-O "*)
+- optimize="-O"
+- optimize="$optimize -fforce-mem"
+- optimize="$optimize -fforce-addr"
+- : #x optimize="$optimize -finline-functions"
+- : #- optimize="$optimize -fstrength-reduce"
+- optimize="$optimize -fthread-jumps"
+- optimize="$optimize -fcse-follow-jumps"
+- optimize="$optimize -fcse-skip-blocks"
+- : #x optimize="$optimize -frerun-cse-after-loop"
+- : #x optimize="$optimize -frerun-loop-opt"
+- : #x optimize="$optimize -fgcse"
+- optimize="$optimize -fexpensive-optimizations"
+- optimize="$optimize -fregmove"
+- : #* optimize="$optimize -fdelayed-branch"
+- : #x optimize="$optimize -fschedule-insns"
+- optimize="$optimize -fschedule-insns2"
+- : #? optimize="$optimize -ffunction-sections"
+- : #? optimize="$optimize -fcaller-saves"
+- : #> optimize="$optimize -funroll-loops"
+- : #> optimize="$optimize -funroll-all-loops"
+- : #x optimize="$optimize -fmove-all-movables"
+- : #x optimize="$optimize -freduce-all-givs"
+- : #? optimize="$optimize -fstrict-aliasing"
+- : #* optimize="$optimize -fstructure-noalias"
+-
+- case "$host" in
+- arm*-*)
+- optimize="$optimize -fstrength-reduce"
+- ;;
+- mips*-*)
+- optimize="$optimize -fstrength-reduce"
+- optimize="$optimize -finline-functions"
+- ;;
+- i?86-*)
+- optimize="$optimize -fstrength-reduce"
+- ;;
+- powerpc-apple-*)
+- # this triggers an internal compiler error with gcc2
+- : #optimize="$optimize -fstrength-reduce"
+-
+- # this is really only beneficial with gcc3
+- : #optimize="$optimize -finline-functions"
+- ;;
+- *)
+- # this sometimes provokes bugs in gcc 2.95.2
+- : #optimize="$optimize -fstrength-reduce"
+- ;;
+- esac
+- ;;
+- esac
+-fi
++#if test "$GCC" = yes
++#then
++# if test -z "$arch"
++# then
++# case "$host" in
++# i386-*) ;;
++# i?86-*) arch="-march=i486" ;;
++# arm*-empeg-*) arch="-march=armv4 -mtune=strongarm1100" ;;
++# armv4*-*) arch="-march=armv4 -mtune=strongarm" ;;
++# powerpc-*) ;;
++# mips*-agenda-*) arch="-mcpu=vr4100" ;;
++# mips*-luxsonor-*) arch="-mips1 -mcpu=r3000 -Wa,-m4010" ;;
++# esac
++# fi
++#
++# case "$optimize" in
++# -O|"-O "*)
++# optimize="-O"
++# optimize="$optimize -fforce-mem"
++# optimize="$optimize -fforce-addr"
++# : #x optimize="$optimize -finline-functions"
++# : #- optimize="$optimize -fstrength-reduce"
++# optimize="$optimize -fthread-jumps"
++# optimize="$optimize -fcse-follow-jumps"
++# optimize="$optimize -fcse-skip-blocks"
++# : #x optimize="$optimize -frerun-cse-after-loop"
++# : #x optimize="$optimize -frerun-loop-opt"
++# : #x optimize="$optimize -fgcse"
++# optimize="$optimize -fexpensive-optimizations"
++# optimize="$optimize -fregmove"
++# : #* optimize="$optimize -fdelayed-branch"
++# : #x optimize="$optimize -fschedule-insns"
++# optimize="$optimize -fschedule-insns2"
++# : #? optimize="$optimize -ffunction-sections"
++# : #? optimize="$optimize -fcaller-saves"
++# : #> optimize="$optimize -funroll-loops"
++# : #> optimize="$optimize -funroll-all-loops"
++# : #x optimize="$optimize -fmove-all-movables"
++# : #x optimize="$optimize -freduce-all-givs"
++# : #? optimize="$optimize -fstrict-aliasing"
++# : #* optimize="$optimize -fstructure-noalias"
++#
++# case "$host" in
++# arm*-*)
++# optimize="$optimize -fstrength-reduce"
++# ;;
++# mips*-*)
++# optimize="$optimize -fstrength-reduce"
++# optimize="$optimize -finline-functions"
++# ;;
++# i?86-*)
++# optimize="$optimize -fstrength-reduce"
++# ;;
++# powerpc-apple-*)
++# # this triggers an internal compiler error with gcc2
++# : #optimize="$optimize -fstrength-reduce"
++#
++# # this is really only beneficial with gcc3
++# : #optimize="$optimize -finline-functions"
++# ;;
++# *)
++# # this sometimes provokes bugs in gcc 2.95.2
++# : #optimize="$optimize -fstrength-reduce"
++# ;;
++# esac
++# ;;
++# esac
++#fi
+
+ case "$host" in
+ mips*-agenda-*)
diff --git a/subprojects/shared-modules/libmad/libmad-0.15.1b-multiarch.patch b/subprojects/shared-modules/libmad/libmad-0.15.1b-multiarch.patch
new file mode 100644
index 00000000..51bf663b
--- /dev/null
+++ b/subprojects/shared-modules/libmad/libmad-0.15.1b-multiarch.patch
@@ -0,0 +1,37 @@
+diff -up libmad-0.15.1b/Makefile.am.orig libmad-0.15.1b/Makefile.am
+--- libmad-0.15.1b/Makefile.am.orig 2009-01-25 14:35:56.000000000 +0200
++++ libmad-0.15.1b/Makefile.am 2009-01-25 18:35:07.000000000 +0200
+@@ -110,15 +110,28 @@ mad.h: config.status config.h Makefile.a
+ echo "# ifdef __cplusplus"; \
+ echo 'extern "C" {'; \
+ echo "# endif"; echo; \
+- if [ ".$(FPM)" != "." ]; then \
+- echo ".$(FPM)" | sed -e 's|^\.-D|# define |'; echo; \
+- fi; \
++ echo "# ifdef __i386__"; \
++ echo "# define FPM_INTEL"; \
++ echo "# define SIZEOF_LONG 4"; \
++ echo "# endif"; \
++ echo "#ifdef __x86_64__";\
++ echo "# define FPM_64BIT"; \
++ echo "# define SIZEOF_LONG 8"; \
++ echo "# endif"; \
++ echo "#ifdef __powerpc__"; \
++ echo "#define FPM_PPC"; \
++ echo "#define SIZEOF_LONG 4"; \
++ echo "#endif"; \
++ echo "#ifdef __powerpc64__"; \
++ echo "#define FPM_PPC"; \
++ echo "#define SIZEOF_LONG 8"; \
++ echo "#endif"; echo; \
+ sed -ne 's/^# *define *\(HAVE_.*_ASM\).*/# define \1/p' \
+ config.h; echo; \
+ sed -ne 's/^# *define *OPT_\(SPEED\|ACCURACY\).*/# define OPT_\1/p' \
+ config.h; echo; \
+- sed -ne 's/^# *define *\(SIZEOF_.*\)/# define \1/p' \
+- config.h; echo; \
++ echo "# define SIZEOF_INT 4"; \
++ echo "# define SIZEOF_LONG_LONG 8"; echo; \
+ for header in $(exported_headers); do \
+ echo; \
+ sed -n -f $(srcdir)/mad.h.sed $(srcdir)/$$header; \
diff --git a/subprojects/shared-modules/libmad/libmad-0.15.1b-ppc.patch b/subprojects/shared-modules/libmad/libmad-0.15.1b-ppc.patch
new file mode 100644
index 00000000..fa6ee383
--- /dev/null
+++ b/subprojects/shared-modules/libmad/libmad-0.15.1b-ppc.patch
@@ -0,0 +1,13 @@
+--- libmad-0.15.1b/fixed.h~ 2004-02-17 02:02:03.000000000 +0000
++++ libmad-0.15.1b/fixed.h 2009-07-19 13:03:08.000000000 +0100
+@@ -379,8 +379,8 @@ mad_fixed_t mad_f_mul_inline(mad_fixed_t
+ asm ("addc %0,%2,%3\n\t" \
+ "adde %1,%4,%5" \
+ : "=r" (lo), "=r" (hi) \
+- : "%r" (lo), "r" (__lo), \
+- "%r" (hi), "r" (__hi) \
++ : "0" (lo), "r" (__lo), \
++ "1" (hi), "r" (__hi) \
+ : "xer"); \
+ })
+ # endif
diff --git a/subprojects/shared-modules/libmad/libmad.json b/subprojects/shared-modules/libmad/libmad.json
new file mode 100644
index 00000000..cfebd20e
--- /dev/null
+++ b/subprojects/shared-modules/libmad/libmad.json
@@ -0,0 +1,49 @@
+{
+ "name" : "libmad",
+ "post-install": [
+ "install -d $FLATPAK_DEST/lib/pkgconfig",
+ "install -Dm644 -t $FLATPAK_DEST/lib/pkgconfig mad.pc"
+ ],
+ "sources" : [
+ {
+ "type" : "archive",
+ "url" : "https://downloads.sourceforge.net/project/mad/libmad/0.15.1b/libmad-0.15.1b.tar.gz",
+ "sha256" : "bbfac3ed6bfbc2823d3775ebb931087371e142bb0e9bb1bee51a76a6e0078690"
+ },
+ {
+ "type": "patch",
+ "path": "libmad-0.15.1b-multiarch.patch"
+ },
+ {
+ "type": "patch",
+ "path": "libmad-0.15.1b-ppc.patch"
+ },
+ {
+ "type": "patch",
+ "path": "Provide-Thumb-2-alternative-code-for-MAD_F_MLN.diff"
+ },
+ {
+ "type": "patch",
+ "path": "libmad.thumb.diff"
+ },
+ {
+ "type": "patch",
+ "path": "libmad-0.15.1b-cflags.patch"
+ },
+ {
+ "type": "patch",
+ "path": "libmad-0.15.1b-cflags-O2.patch"
+ },
+ {
+ "type": "file",
+ "path": "mad.pc"
+ },
+ {
+ "type": "shell",
+ "commands": [
+ "cp /usr/share/gnu-config/config.sub .",
+ "cp /usr/share/gnu-config/config.guess ."
+ ]
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/libmad/libmad.thumb.diff b/subprojects/shared-modules/libmad/libmad.thumb.diff
new file mode 100644
index 00000000..13edde21
--- /dev/null
+++ b/subprojects/shared-modules/libmad/libmad.thumb.diff
@@ -0,0 +1,12 @@
+--- ./imdct_l_arm.S.orig 2010-02-25 13:25:23.000000000 +0100
++++ ./imdct_l_arm.S 2010-02-25 13:27:26.000000000 +0100
+@@ -468,7 +468,7 @@
+
+ @----
+
+- add r2, pc, #(imdct36_long_karray-.-8) @ r2 = base address of Knn array (PIC safe ?)
++ adr r2, imdct36_long_karray
+
+
+ loop:
+
diff --git a/subprojects/shared-modules/libmad/mad.pc b/subprojects/shared-modules/libmad/mad.pc
new file mode 100644
index 00000000..15d85311
--- /dev/null
+++ b/subprojects/shared-modules/libmad/mad.pc
@@ -0,0 +1,11 @@
+prefix=/app
+exec_prefix=/app
+libdir=/app/lib
+includedir=/app/include
+
+Name: mad
+Description: MPEG Audio Decoder
+Requires:
+Version: 0.15.1b
+Libs: -L/app/lib} -lmad -lm
+Cflags: -I/app/include \ No newline at end of file
diff --git a/subprojects/shared-modules/libsecret/libsecret.json b/subprojects/shared-modules/libsecret/libsecret.json
new file mode 100644
index 00000000..ae347bba
--- /dev/null
+++ b/subprojects/shared-modules/libsecret/libsecret.json
@@ -0,0 +1,23 @@
+{
+ "name": "libsecret",
+ "buildsystem": "meson",
+ "config-opts": [
+ "-Dmanpage=false",
+ "-Dvapi=false",
+ "-Dgtk_doc=false",
+ "-Dintrospection=false"
+ ],
+ "cleanup": [
+ "/bin",
+ "/include",
+ "/lib/pkgconfig",
+ "/share/man"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://download.gnome.org/sources/libsecret/0.20/libsecret-0.20.5.tar.xz",
+ "sha256": "3fb3ce340fcd7db54d87c893e69bfc2b1f6e4d4b279065ffe66dac9f0fd12b4d"
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/libusb/libusb.json b/subprojects/shared-modules/libusb/libusb.json
new file mode 100644
index 00000000..21dddf80
--- /dev/null
+++ b/subprojects/shared-modules/libusb/libusb.json
@@ -0,0 +1,19 @@
+{
+ "name": "libusb",
+ "config-opts": [ "--disable-static" ],
+ "cleanup": [
+ "/lib/*.la",
+ "/lib/pkgconfig",
+ "/include"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/libusb/libusb/releases/download/v1.0.26/libusb-1.0.26.tar.bz2",
+ "sha256": "12ce7a61fc9854d1d2a1ffe095f7b5fac19ddba095c259e6067a46500381b5a5"
+ }
+ ],
+ "post-install": [
+ "install -Dm644 COPYING /app/share/licenses/libusb/COPYING"
+ ]
+}
diff --git a/subprojects/shared-modules/linux-audio/dssi.json b/subprojects/shared-modules/linux-audio/dssi.json
new file mode 100644
index 00000000..ec33fd37
--- /dev/null
+++ b/subprojects/shared-modules/linux-audio/dssi.json
@@ -0,0 +1,29 @@
+{
+ "name": "dssi",
+ "rm-configure": true,
+ "config-opts": [
+ "--disable-static"
+ ],
+ "cleanup": [
+ "/bin",
+ "/include",
+ "/lib/dssi",
+ "/lib/pkgconfig",
+ "/share/man",
+ "*.la"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "http://download.sf.net/sourceforge/dssi/dssi-1.1.1.tar.gz",
+ "sha256": "f2c82b073a947c8255284249097667f9b14e660bf86186f3fcd3b3b3e087814e"
+ },
+ {
+ "type": "script",
+ "commands": [
+ "autoreconf -fiv"
+ ],
+ "dest-filename": "autogen.sh"
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/linux-audio/fftw3f-static.json b/subprojects/shared-modules/linux-audio/fftw3f-static.json
new file mode 100644
index 00000000..66757499
--- /dev/null
+++ b/subprojects/shared-modules/linux-audio/fftw3f-static.json
@@ -0,0 +1,44 @@
+{
+ "name": "fftw3f",
+ "config-opts": [
+ "--enable-threads",
+ "--enable-static",
+ "--disable-shared",
+ "--enable-float"
+ ],
+ "build-options": {
+ "cflags": "-fPIC",
+ "arch": {
+ "x86_64": {
+ "config-opts": [
+ "--enable-sse2",
+ "--enable-avx",
+ "--enable-avx-128-fma"
+ ]
+ },
+ "aarch64": {
+ "config-opts": [
+ "--enable-neon"
+ ]
+ }
+ }
+ },
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://www.fftw.org/fftw-3.3.10.tar.gz",
+ "sha256": "56c932549852cddcfafdab3820b0200c7742675be92179e59e6215b340e26467"
+ }
+ ],
+ "cleanup": [
+ "/bin",
+ "/include",
+ "/lib/cmake",
+ "/lib/pkgconfig",
+ "/share/info",
+ "/share/man",
+ "*.a",
+ "*.la",
+ "*.so"
+ ]
+}
diff --git a/subprojects/shared-modules/linux-audio/fftw3f.json b/subprojects/shared-modules/linux-audio/fftw3f.json
new file mode 100644
index 00000000..ee10c757
--- /dev/null
+++ b/subprojects/shared-modules/linux-audio/fftw3f.json
@@ -0,0 +1,41 @@
+{
+ "name": "fftw3f",
+ "config-opts": [
+ "--enable-threads",
+ "--enable-shared",
+ "--disable-static",
+ "--enable-float"
+ ],
+ "build-options": {
+ "arch": {
+ "x86_64": {
+ "config-opts": [
+ "--enable-sse2",
+ "--enable-avx",
+ "--enable-avx-128-fma"
+ ]
+ },
+ "aarch64": {
+ "config-opts": [
+ "--enable-neon"
+ ]
+ }
+ }
+ },
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://www.fftw.org/fftw-3.3.10.tar.gz",
+ "sha256": "56c932549852cddcfafdab3820b0200c7742675be92179e59e6215b340e26467"
+ }
+ ],
+ "cleanup": [
+ "/bin",
+ "/include",
+ "/lib/cmake",
+ "/lib/pkgconfig",
+ "/share/man",
+ "*.la",
+ "*.so"
+ ]
+}
diff --git a/subprojects/shared-modules/linux-audio/fluidsynth2-static.json b/subprojects/shared-modules/linux-audio/fluidsynth2-static.json
new file mode 100644
index 00000000..67cea185
--- /dev/null
+++ b/subprojects/shared-modules/linux-audio/fluidsynth2-static.json
@@ -0,0 +1,27 @@
+{
+ "name": "fluidsynth",
+ "buildsystem": "cmake-ninja",
+ "build-options": {
+ "cflags": "-fPIC",
+ "cxxflags": "-fPIC"
+ },
+ "config-opts": [
+ "-DLIB_SUFFIX=",
+ "-DBUILD_SHARED_LIBS=OFF"
+ ],
+ "cleanup": [
+ "/bin",
+ "/include",
+ "/lib/pkgconfig",
+ "/share/man",
+ "*.so",
+ "*.a"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/FluidSynth/fluidsynth/archive/v2.2.8.tar.gz",
+ "sha256": "7c29a5cb7a2755c8012d941d1335da7bda957bbb0a86b7c59215d26773bb51fe"
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/linux-audio/fluidsynth2.json b/subprojects/shared-modules/linux-audio/fluidsynth2.json
new file mode 100644
index 00000000..a22a060b
--- /dev/null
+++ b/subprojects/shared-modules/linux-audio/fluidsynth2.json
@@ -0,0 +1,21 @@
+{
+ "name": "fluidsynth",
+ "buildsystem": "cmake-ninja",
+ "config-opts": [
+ "-DLIB_SUFFIX="
+ ],
+ "cleanup": [
+ "/bin",
+ "/include",
+ "/lib/pkgconfig",
+ "/share/man",
+ "*.so"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/FluidSynth/fluidsynth/archive/v2.2.8.tar.gz",
+ "sha256": "7c29a5cb7a2755c8012d941d1335da7bda957bbb0a86b7c59215d26773bb51fe"
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/linux-audio/jack2.json b/subprojects/shared-modules/linux-audio/jack2.json
new file mode 100644
index 00000000..9077fea3
--- /dev/null
+++ b/subprojects/shared-modules/linux-audio/jack2.json
@@ -0,0 +1,23 @@
+{
+ "name": "jack2",
+ "buildsystem": "simple",
+ "build-commands": [
+ "./waf configure --prefix=$FLATPAK_DEST --htmldir=$FLATPAK_DEST/share/doc/jack/ --classic",
+ "./waf build -j $FLATPAK_BUILDER_N_JOBS",
+ "./waf install"
+ ],
+ "cleanup": [
+ "/include",
+ "/lib/jack",
+ "/lib/libjack*",
+ "/lib/pkgconfig",
+ "/share/man"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/jackaudio/jack2/archive/v1.9.17.tar.gz",
+ "sha256": "38f674bbc57852a8eb3d9faa1f96a0912d26f7d5df14c11005ad499c8ae352f2"
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/linux-audio/ladspa.json b/subprojects/shared-modules/linux-audio/ladspa.json
new file mode 100644
index 00000000..d3637fff
--- /dev/null
+++ b/subprojects/shared-modules/linux-audio/ladspa.json
@@ -0,0 +1,17 @@
+{
+ "name": "ladspa",
+ "no-autogen": true,
+ "subdir": "src",
+ "make-install-args": [
+ "INSTALL_PLUGINS_DIR=/app/lib/ladspa",
+ "INSTALL_INCLUDE_DIR=/app/include",
+ "INSTALL_BINARY_DIR=/app/bin"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "http://www.ladspa.org/download/ladspa_sdk_1.17.tgz",
+ "sha256": "27d24f279e4b81bd17ecbdcc38e4c42991bb388826c0b200067ce0eb59d3da5b"
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/linux-audio/lash.json b/subprojects/shared-modules/linux-audio/lash.json
new file mode 100644
index 00000000..4d0ccb28
--- /dev/null
+++ b/subprojects/shared-modules/linux-audio/lash.json
@@ -0,0 +1,41 @@
+{
+ "name": "lash",
+ "rm-configure": true,
+ "config-opts": [
+ "--disable-static",
+ "--disable-serv-inst",
+ "CFLAGS=-D_GNU_SOURCE"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://download.savannah.gnu.org/releases/lash/lash-0.5.4.tar.gz",
+ "sha256": "105a7da84415c4725c6bcad28e70f23aeb4534f94fc80ca262b6a2cef2226c16"
+ },
+ {
+ "type": "patch",
+ "strip-components": 0,
+ "path": "patches/lash-0.5.3-no-static-lib.patch"
+ },
+ {
+ "type": "patch",
+ "path": "patches/lash-gcc47.patch"
+ },
+ {
+ "type": "patch",
+ "path": "patches/lash-linking.patch"
+ },
+ {
+ "type": "patch",
+ "strip-components": 0,
+ "path": "patches/lash-configure.patch"
+ },
+ {
+ "type": "script",
+ "commands": [
+ "autoreconf -fiv"
+ ],
+ "dest-filename": "autogen.sh"
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/linux-audio/libinstpatch.json b/subprojects/shared-modules/linux-audio/libinstpatch.json
new file mode 100644
index 00000000..fb00c206
--- /dev/null
+++ b/subprojects/shared-modules/linux-audio/libinstpatch.json
@@ -0,0 +1,17 @@
+{
+ "name": "libinstpatch",
+ "buildsystem": "cmake-ninja",
+ "config-opts": [
+ "-DLIB_SUFFIX="
+ ],
+ "cleanup": [
+ "/share/doc"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/swami/libinstpatch/archive/v1.1.6.tar.gz",
+ "sha256": "8e9861b04ede275d712242664dab6ffa9166c7940fea3b017638681d25e10299"
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/linux-audio/liblo-static.json b/subprojects/shared-modules/linux-audio/liblo-static.json
new file mode 100644
index 00000000..4ca2eb77
--- /dev/null
+++ b/subprojects/shared-modules/linux-audio/liblo-static.json
@@ -0,0 +1,25 @@
+{
+ "name": "liblo",
+ "cleanup": [
+ "/bin",
+ "/include",
+ "/lib/pkgconfig",
+ "*.la",
+ "*.a",
+ "*.so"
+ ],
+ "build-options": {
+ "cflags": "-fPIC"
+ },
+ "config-opts": [
+ "--enable-static",
+ "--disable-shared"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "http://download.sf.net/sourceforge/liblo/liblo-0.31.tar.gz",
+ "sha256": "2b4f446e1220dcd624ecd8405248b08b7601e9a0d87a0b94730c2907dbccc750"
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/linux-audio/liblo.json b/subprojects/shared-modules/linux-audio/liblo.json
new file mode 100644
index 00000000..17de750e
--- /dev/null
+++ b/subprojects/shared-modules/linux-audio/liblo.json
@@ -0,0 +1,17 @@
+{
+ "name": "liblo",
+ "cleanup": [
+ "/bin",
+ "/include",
+ "/lib/pkgconfig",
+ "*.la",
+ "*.so"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "http://download.sf.net/sourceforge/liblo/liblo-0.31.tar.gz",
+ "sha256": "2b4f446e1220dcd624ecd8405248b08b7601e9a0d87a0b94730c2907dbccc750"
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/linux-audio/lilv.json b/subprojects/shared-modules/linux-audio/lilv.json
new file mode 100644
index 00000000..2c080535
--- /dev/null
+++ b/subprojects/shared-modules/linux-audio/lilv.json
@@ -0,0 +1,100 @@
+{
+ "name": "lilv",
+ "buildsystem": "simple",
+ "build-commands": [
+ "python3 ./waf configure --prefix=$FLATPAK_DEST",
+ "python3 ./waf build -j $FLATPAK_BUILDER_N_JOBS",
+ "python3 ./waf install"
+ ],
+ "modules": [
+ {
+ "name": "serd",
+ "buildsystem": "simple",
+ "build-commands": [
+ "python3 ./waf configure --prefix=$FLATPAK_DEST",
+ "python3 ./waf build -j $FLATPAK_BUILDER_N_JOBS",
+ "python3 ./waf install"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://download.drobilla.net/serd-0.30.10.tar.bz2",
+ "sha256": "affa80deec78921f86335e6fc3f18b80aefecf424f6a5755e9f2fa0eb0710edf"
+ }
+ ],
+ "post-install": [
+ "install -Dm644 -t /app/share/licenses/serd COPYING"
+ ],
+ "cleanup": [
+ "/bin",
+ "/include",
+ "/lib/pkgconfig",
+ "/share/man"
+ ]
+ },
+ {
+ "name": "sord",
+ "buildsystem": "simple",
+ "build-commands": [
+ "python3 ./waf configure --prefix=$FLATPAK_DEST",
+ "python3 ./waf build -j $FLATPAK_BUILDER_N_JOBS",
+ "python3 ./waf install"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://download.drobilla.net/sord-0.16.8.tar.bz2",
+ "sha256": "7c289d2eaabf82fa6ac219107ce632d704672dcfb966e1a7ff0bbc4ce93f5e14"
+ }
+ ],
+ "post-install": [
+ "install -Dm644 -t /app/share/licenses/sord COPYING"
+ ],
+ "cleanup": [
+ "/bin",
+ "/include",
+ "/lib/pkgconfig",
+ "/share/man"
+ ]
+ },
+ {
+ "name": "sratom",
+ "buildsystem": "simple",
+ "build-commands": [
+ "python3 ./waf configure --prefix=$FLATPAK_DEST",
+ "python3 ./waf build -j $FLATPAK_BUILDER_N_JOBS",
+ "python3 ./waf install"
+ ],
+ "cleanup": [
+ "/include",
+ "/lib/pkgconfig"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://download.drobilla.net/sratom-0.6.8.tar.bz2",
+ "sha256": "3acb32b1adc5a2b7facdade2e0818bcd6c71f23f84a1ebc17815bb7a0d2d02df"
+ }
+ ],
+ "post-install": [
+ "install -Dm644 -t /app/share/licenses/sratom COPYING"
+ ]
+ }
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://download.drobilla.net/lilv-0.24.12.tar.bz2",
+ "sha256": "26a37790890c9c1f838203b47f5b2320334fe92c02a4d26ebbe2669dbd769061"
+ }
+ ],
+ "post-install": [
+ "install -Dm644 -t /app/share/licenses/lilv COPYING"
+ ],
+ "cleanup": [
+ "/bin",
+ "/etc",
+ "/lib/pkgconfig",
+ "/share/man"
+ ]
+}
diff --git a/subprojects/shared-modules/linux-audio/lrdf.json b/subprojects/shared-modules/linux-audio/lrdf.json
new file mode 100644
index 00000000..29d19dd5
--- /dev/null
+++ b/subprojects/shared-modules/linux-audio/lrdf.json
@@ -0,0 +1,50 @@
+{
+ "name": "lrdf",
+ "rm-configure": true,
+ "cleanup": [
+ "/include",
+ "/lib/pkgconfig",
+ "*.so"
+ ],
+ "config-opts": [
+ "--disable-static"
+ ],
+ "modules": [
+ "ladspa.json",
+ {
+ "name": "raptor2",
+ "cleanup": [
+ "/include",
+ "/lib/pkgconfig",
+ "/share/gtk-doc",
+ "*.so"
+ ],
+ "config-opts": [
+ "--disable-documentation",
+ "--disable-static"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "http://download.librdf.org/source/raptor2-2.0.15.tar.gz",
+ "sha256": "ada7f0ba54787b33485d090d3d2680533520cd4426d2f7fb4782dd4a6a1480ed"
+ }
+ ]
+ }
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/swh/LRDF/tarball/0.5.0",
+ "dest-filename": "swh-LRDF-0.5.0-0-g7ebc032.tar.gz",
+ "sha256": "013002b91ef209827fe99552b8c7f0b569cddb3d6f1439bedbd8bafe1956a93c"
+ },
+ {
+ "type": "script",
+ "commands": [
+ "autoreconf -fiv"
+ ],
+ "dest-filename": "autogen.sh"
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/linux-audio/lv2.json b/subprojects/shared-modules/linux-audio/lv2.json
new file mode 100644
index 00000000..5cf5a67c
--- /dev/null
+++ b/subprojects/shared-modules/linux-audio/lv2.json
@@ -0,0 +1,26 @@
+{
+ "name": "lv2",
+ "buildsystem": "simple",
+ "build-commands": [
+ "python3 ./waf configure --prefix=$FLATPAK_DEST --lv2dir=$FLATPAK_DEST/lib/lv2 --copy-headers",
+ "python3 ./waf build -j $FLATPAK_BUILDER_N_JOBS",
+ "python3 ./waf install"
+ ],
+ "cleanup": [
+ "/bin",
+ "/include",
+ "/lib/pkgconfig",
+ "/share"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://lv2plug.in/spec/lv2-1.18.2.tar.bz2",
+ "sha256": "4e891fbc744c05855beb5dfa82e822b14917dd66e98f82b8230dbd1c7ab2e05e"
+ }
+ ],
+ "post-install": [
+ "install -Dm644 -t $FLATPAK_DEST/share/licenses/lv2 COPYING",
+ "ln -sf lv2.pc $FLATPAK_DEST/lib/pkgconfig/lv2core.pc"
+ ]
+}
diff --git a/subprojects/shared-modules/linux-audio/patches/lash-0.5.3-no-static-lib.patch b/subprojects/shared-modules/linux-audio/patches/lash-0.5.3-no-static-lib.patch
new file mode 100644
index 00000000..54d1cd7b
--- /dev/null
+++ b/subprojects/shared-modules/linux-audio/patches/lash-0.5.3-no-static-lib.patch
@@ -0,0 +1,10 @@
+--- lash-1.0.pc.in~ 2007-10-07 06:33:27.000000000 -0700
++++ lash-1.0.pc.in 2007-10-07 06:35:00.000000000 -0700
+@@ -7,6 +7,5 @@
+ Description: Audio session management
+ Requires: @PC_REQUIRES@
+ Version: @PACKAGE_VERSION@
+-Libs: -llash
+-Libs.static: -lpthread -luuid
++Libs: -llash -lpthread -luuid
+ Cflags: -I${includedir}/lash-1.0
diff --git a/subprojects/shared-modules/linux-audio/patches/lash-configure.patch b/subprojects/shared-modules/linux-audio/patches/lash-configure.patch
new file mode 100644
index 00000000..ba9bb8ba
--- /dev/null
+++ b/subprojects/shared-modules/linux-audio/patches/lash-configure.patch
@@ -0,0 +1,11 @@
+--- configure.ac 2007-11-14 16:58:51.000000000 -0500
++++ configure.ac.new 2019-01-24 13:48:46.284377086 -0500
+@@ -2,7 +2,7 @@
+ AC_CONFIG_SRCDIR([lash/types.h])
+ AC_CONFIG_HEADER([config.h])
+ AM_INIT_AUTOMAKE
+-AM_ACLOCAL_INCLUDE([m4])
++dnl AM_ACLOCAL_INCLUDE([m4])
+
+ ### Check for programs ###
+ AC_LANG([C])
diff --git a/subprojects/shared-modules/linux-audio/patches/lash-gcc47.patch b/subprojects/shared-modules/linux-audio/patches/lash-gcc47.patch
new file mode 100644
index 00000000..41710ca5
--- /dev/null
+++ b/subprojects/shared-modules/linux-audio/patches/lash-gcc47.patch
@@ -0,0 +1,11 @@
+diff -rupN lash-0.5.4.old/liblash/lash.c lash-0.5.4/liblash/lash.c
+--- lash-0.5.4.old/liblash/lash.c 2007-03-09 10:34:40.000000000 -0500
++++ lash-0.5.4/liblash/lash.c 2012-07-22 18:17:46.003963521 -0400
+@@ -22,6 +22,7 @@
+ #include <string.h>
+ #include <strings.h>
+ #include <pthread.h>
++#include <sys/resource.h>
+ #include <sys/types.h>
+ #include <sys/wait.h>
+ #include <sys/socket.h>
diff --git a/subprojects/shared-modules/linux-audio/patches/lash-linking.patch b/subprojects/shared-modules/linux-audio/patches/lash-linking.patch
new file mode 100644
index 00000000..e46d1647
--- /dev/null
+++ b/subprojects/shared-modules/linux-audio/patches/lash-linking.patch
@@ -0,0 +1,90 @@
+diff -rupN lash-0.5.4.old/clients/control/Makefile.am lash-0.5.4/clients/control/Makefile.am
+--- lash-0.5.4.old/clients/control/Makefile.am 2007-01-13 13:20:03.000000000 -0500
++++ lash-0.5.4/clients/control/Makefile.am 2010-02-10 03:08:04.000000000 -0500
+@@ -18,6 +18,6 @@ lash_control_CFLAGS = $(LASH_CFLAGS)
+
+ lash_control_LDADD = \
+ $(top_builddir)/liblash/liblash.la \
+- $(LASH_LIBS) @READLINE_LIBS@
++ $(LASH_LIBS) @READLINE_LIBS@ -luuid
+
+ endif
+diff -rupN lash-0.5.4.old/clients/control/Makefile.in lash-0.5.4/clients/control/Makefile.in
+--- lash-0.5.4.old/clients/control/Makefile.in 2007-11-14 17:00:09.000000000 -0500
++++ lash-0.5.4/clients/control/Makefile.in 2010-02-10 03:09:26.000000000 -0500
+@@ -236,7 +236,7 @@ AM_CPPFLAGS = -I$(top_srcdir)
+ @HAVE_READLINE_TRUE@lash_control_CFLAGS = $(LASH_CFLAGS)
+ @HAVE_READLINE_TRUE@lash_control_LDADD = \
+ @HAVE_READLINE_TRUE@ $(top_builddir)/liblash/liblash.la \
+-@HAVE_READLINE_TRUE@ $(LASH_LIBS) @READLINE_LIBS@
++@HAVE_READLINE_TRUE@ $(LASH_LIBS) @READLINE_LIBS@ -luuid
+
+ all: all-am
+
+diff -rupN lash-0.5.4.old/clients/panel/Makefile.am lash-0.5.4/clients/panel/Makefile.am
+--- lash-0.5.4.old/clients/panel/Makefile.am 2005-09-13 01:22:59.000000000 -0400
++++ lash-0.5.4/clients/panel/Makefile.am 2010-02-10 03:17:10.000000000 -0500
+@@ -13,7 +13,7 @@ lash_panel_CFLAGS = \
+
+ lash_panel_LDADD = \
+ $(top_builddir)/liblash/liblash.la \
+- $(GTK2_LIBS)
++ $(GTK2_LIBS) -luuid
+
+ if HAVE_GTK2
+ bin_PROGRAMS = lash_panel
+diff -rupN lash-0.5.4.old/clients/panel/Makefile.in lash-0.5.4/clients/panel/Makefile.in
+--- lash-0.5.4.old/clients/panel/Makefile.in 2007-11-14 17:00:09.000000000 -0500
++++ lash-0.5.4/clients/panel/Makefile.in 2010-02-10 03:17:23.000000000 -0500
+@@ -230,7 +230,7 @@ lash_panel_CFLAGS = \
+
+ lash_panel_LDADD = \
+ $(top_builddir)/liblash/liblash.la \
+- $(GTK2_LIBS)
++ $(GTK2_LIBS) -luuid
+
+ all: all-am
+
+diff -rupN lash-0.5.4.old/clients/synth/Makefile.am lash-0.5.4/clients/synth/Makefile.am
+--- lash-0.5.4.old/clients/synth/Makefile.am 2005-09-13 01:22:59.000000000 -0400
++++ lash-0.5.4/clients/synth/Makefile.am 2010-02-10 03:22:39.000000000 -0500
+@@ -20,4 +20,4 @@ lash_synth_LDADD = \
+ $(JACK_LIBS) \
+ $(ALSA_LIBS) \
+ $(GTK2_LIBS) \
+- -lpthread
++ -lpthread -lm
+diff -rupN lash-0.5.4.old/clients/synth/Makefile.in lash-0.5.4/clients/synth/Makefile.in
+--- lash-0.5.4.old/clients/synth/Makefile.in 2007-11-14 17:00:10.000000000 -0500
++++ lash-0.5.4/clients/synth/Makefile.in 2010-02-10 03:22:51.000000000 -0500
+@@ -238,7 +238,7 @@ lash_synth_LDADD = \
+ $(JACK_LIBS) \
+ $(ALSA_LIBS) \
+ $(GTK2_LIBS) \
+- -lpthread
++ -lpthread -lm
+
+ all: all-am
+
+diff -rupN lash-0.5.4.old/lashd/Makefile.am lash-0.5.4/lashd/Makefile.am
+--- lash-0.5.4.old/lashd/Makefile.am 2006-09-16 16:27:46.000000000 -0400
++++ lash-0.5.4/lashd/Makefile.am 2010-07-23 15:13:59.000000000 -0400
+@@ -32,6 +32,7 @@ lashd_LDADD = \
+ $(ALSA_LIBS) \
+ $(XML2_LIBS) \
+ $(UUID_LIBS) \
++ -lpthread \
+ $(top_builddir)/liblash/liblash.la
+
+ lashd_CFLAGS = \
+diff -rupN lash-0.5.4.old/lashd/Makefile.in lash-0.5.4/lashd/Makefile.in
+--- lash-0.5.4.old/lashd/Makefile.in 2007-11-14 17:00:10.000000000 -0500
++++ lash-0.5.4/lashd/Makefile.in 2010-07-23 15:14:29.000000000 -0400
+@@ -262,6 +262,7 @@ lashd_LDADD = \
+ $(ALSA_LIBS) \
+ $(XML2_LIBS) \
+ $(UUID_LIBS) \
++ -lpthread \
+ $(top_builddir)/liblash/liblash.la
+
+ lashd_CFLAGS = \
diff --git a/subprojects/shared-modules/linux-audio/patches/stk-install.sh b/subprojects/shared-modules/linux-audio/patches/stk-install.sh
new file mode 100644
index 00000000..e2d9c9b7
--- /dev/null
+++ b/subprojects/shared-modules/linux-audio/patches/stk-install.sh
@@ -0,0 +1,54 @@
+
+INCLUDE_DIR=/app/include
+DATA_DIR=/app/share
+LIB_DIR=/app/lib
+BIN_DIR=/app/bin
+
+
+
+
+install -Dm644 -t $INCLUDE_DIR/stk include/*
+install -Dm644 -t $LIB_DIR src/libstk.*
+install -Dm644 -t $DATA_DIR/stk/rawwaves rawwaves/*.raw
+
+#cp -pr projects/demo/tcl $DATA_DIR/stk/demo
+#cp -pr projects/demo/scores $DATA_DIR/stk/demo
+#cp -p projects/demo/demo $BIN_DIR/stk-demo
+#cp -p projects/demo/Md2Skini $BIN_DIR/Md2Skini
+#for f in Banded Drums Modal Physical Shakers StkDemo Voice ; do
+# chmod +x projects/demo/$f
+# sed -e 's,\./demo,$BIN_DIR/stk-demo,' -e '1i#! /bin/sh' \
+# -i projects/demo/$f
+# cp -p projects/demo/$f $DATA_DIR/stk/demo
+#done
+
+#cp -pr projects/examples/midifiles $DATA_DIR/stk/examples
+#cp -pr projects/examples/rawwaves $DATA_DIR/stk/examples
+#cp -pr projects/examples/scores $DATA_DIR/stk/examples
+#for f in sine sineosc foursine audioprobe midiprobe duplex play \
+# record inetIn inetOut rtsine crtsine bethree controlbee \
+# threebees playsmf grains ; do
+# cp -p projects/examples/$f $BIN_DIR/stk-$f
+# # absolute links, will be shortened later
+# ln -s $BIN_DIR/stk-$f $DATA_DIR/stk/examples/$f
+#done
+
+install -Dm644 -t $DATA_DIR/stk/effects projects/effects/tcl
+install -Dm644 -t $BIN_DIR/stk-effects projects/effects/effects
+sed -e 's,\./effects,$BIN_DIR/stk-effects,' -e '1i#! /bin/sh' \
+ -i projects/effects/StkEffects
+install -Dm644 -t $DATA_DIR/stk/effects projects/effects/StkEffects
+
+install -Dm644 -t $DATA_DIR/stk/ragamatic projects/ragamatic/tcl
+install -Dm644 -t $DATA_DIR/stk/ragamatic projects/ragamatic/rawwaves
+install -Dm644 -t $BIN_DIR/stk-ragamat projects/ragamatic/ragamat
+sed -e 's,\./ragamat,$BIN_DIR/stk-ragamat,' -e '1i#! /bin/sh' \
+ -i projects/ragamatic/Raga
+install -Dm644 -t $DATA_DIR/stk/ragamatic projects/ragamatic/Raga
+
+install -Dm644 -t $DATA_DIR/stk/eguitar projects/eguitar/tcl
+install -Dm644 -t $DATA_DIR/stk/eguitar projects/eguitar/scores
+install -Dm644 -t $BIN_DIR/stk-eguitar projects/eguitar/eguitar
+sed -e 's,\./eguitar,$BIN_DIR/stk-eguitar,' -e '1i#! /bin/sh' \
+ -i projects/eguitar/ElectricGuitar
+install -Dm644 -t $DATA_DIR/stk/eguitar projects/eguitar/ElectricGuitar
diff --git a/subprojects/shared-modules/linux-audio/stk.json b/subprojects/shared-modules/linux-audio/stk.json
new file mode 100644
index 00000000..cf4d8f93
--- /dev/null
+++ b/subprojects/shared-modules/linux-audio/stk.json
@@ -0,0 +1,28 @@
+{
+ "name": "stk",
+ "build-commands": [
+ "make -j $FLATPAK_BUILDER_N_JOBS -C src",
+ "make -j $FLATPAK_BUILDER_N_JOBS -C projects/effects libeffects",
+ "make -j $FLATPAK_BUILDER_N_JOBS -C projects/ragamatic libragamat",
+ "make -j $FLATPAK_BUILDER_N_JOBS -C projects/eguitar libeguitar"
+ ],
+ "post-install": [
+ "sh ./stk-install.sh"
+ ],
+ "cleanup": [
+ "/bin/*",
+ "/include",
+ "*.a"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "http://ccrma.stanford.edu/software/stk/release/stk-4.6.1.tar.gz",
+ "sha256": "e77ba3c80cdd93ca02c34098b9b7f918df3d648c87f1ed5d94fe854debd6d101"
+ },
+ {
+ "type": "file",
+ "path": "patches/stk-install.sh"
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/lua5.1/lua-5.1.5-so.patch b/subprojects/shared-modules/lua5.1/lua-5.1.5-so.patch
new file mode 100644
index 00000000..5fc61a08
--- /dev/null
+++ b/subprojects/shared-modules/lua5.1/lua-5.1.5-so.patch
@@ -0,0 +1,43 @@
+diff -ur lua-5.1.4/src/Makefile lua-5.1.4-new/src/Makefile
+--- lua-5.1.4/src/Makefile 2008-01-19 20:37:58.000000000 +0100
++++ lua-5.1.4-new/src/Makefile 2012-02-23 18:26:43.000000000 +0100
+@@ -23,6 +23,7 @@
+ PLATS= aix ansi bsd freebsd generic linux macosx mingw posix solaris
+
+ LUA_A= liblua.a
++LUA_SO= liblua.so
+ CORE_O= lapi.o lcode.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o \
+ lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o \
+ lundump.o lvm.o lzio.o
+@@ -36,7 +37,7 @@
+ LUAC_O= luac.o print.o
+
+ ALL_O= $(CORE_O) $(LIB_O) $(LUA_O) $(LUAC_O)
+-ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T)
++ALL_T= $(LUA_A) $(LUA_SO) $(LUA_T) $(LUAC_T)
+ ALL_A= $(LUA_A)
+
+ default: $(PLAT)
+@@ -51,6 +52,11 @@
+ $(AR) $@ $?
+ $(RANLIB) $@
+
++$(LUA_SO): $(CORE_O) $(LIB_O)
++ $(CC) -shared -ldl -Wl,-soname,$(LUA_SO).$(V) -o $@.$(R) $? -lm $(MYLDFLAGS)
++ ln -sf $(LUA_SO).$(R) $(LUA_SO).$(V)
++ ln -sf $(LUA_SO).$(R) $(LUA_SO)
++
+ $(LUA_T): $(LUA_O) $(LUA_A)
+ $(CC) -o $@ $(MYLDFLAGS) $(LUA_O) $(LUA_A) $(LIBS)
+
+--- lua-5.1.4/Makefile 2008-08-12 02:40:48.000000000 +0200
++++ lua-5.1.4-new/Makefile 2012-02-23 19:06:32.000000000 +0100
+@@ -53,7 +53,7 @@
+ all: $(PLAT)
+
+ $(PLATS) clean:
+- cd src && $(MAKE) $@
++ cd src && $(MAKE) $@ V=$(V) R=$(R)
+
+ test: dummy
+ src/lua test/hello.lua
diff --git a/subprojects/shared-modules/lua5.1/lua-5.1.5.json b/subprojects/shared-modules/lua5.1/lua-5.1.5.json
new file mode 100644
index 00000000..896cadb9
--- /dev/null
+++ b/subprojects/shared-modules/lua5.1/lua-5.1.5.json
@@ -0,0 +1,38 @@
+{
+ "name": "lua-5.1",
+ "buildsystem": "simple",
+ "build-commands": [
+ "make -j $FLATPAK_BUILDER_N_JOBS CFLAGS=\"$CFLAGS -fPIC -DLUA_USE_LINUX\" linux",
+ "make INSTALL_TOP=$FLATPAK_DEST TO_LIB='liblua.a liblua.so.5.1.5' install",
+ "ln -sf liblua.so.5.1.5 $FLATPAK_DEST/lib/liblua.so",
+ "ln -sf liblua.so.5.1.5 $FLATPAK_DEST/lib/liblua.so.5.1",
+ "install -Dm0644 etc/lua.pc $FLATPAK_DEST/lib/pkgconfig/lua.pc",
+ "ln -sf lua.pc $FLATPAK_DEST/lib/pkgconfig/lua51.pc",
+ "ln -sf lua.pc $FLATPAK_DEST/lib/pkgconfig/lua5.1.pc",
+ "ln -sf lua.pc $FLATPAK_DEST/lib/pkgconfig/lua-5.1.pc"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://www.lua.org/ftp/lua-5.1.5.tar.gz",
+ "sha256": "2640fc56a795f29d28ef15e13c34a47e223960b0240e8cb0a82d9b0738695333"
+ },
+ {
+ "type": "patch",
+ "path": "lua-5.1.5-so.patch"
+ },
+ {
+ "type": "shell",
+ "commands": [
+ "sed -i \"s|/usr/local|$FLATPAK_DEST|\" etc/lua.pc src/luaconf.h"
+ ]
+ }
+ ],
+ "cleanup": [
+ "*.a",
+ "/bin",
+ "/include",
+ "/lib/pkgconfig",
+ "/man"
+ ]
+}
diff --git a/subprojects/shared-modules/lua5.3/lua-5.3.5.json b/subprojects/shared-modules/lua5.3/lua-5.3.5.json
new file mode 100644
index 00000000..c789fd65
--- /dev/null
+++ b/subprojects/shared-modules/lua5.3/lua-5.3.5.json
@@ -0,0 +1,46 @@
+{
+ "name": "lua-5.3",
+ "buildsystem": "simple",
+ "build-commands": [
+ "make -j $FLATPAK_BUILDER_N_JOBS CFLAGS=\"$CFLAGS -fPIC -DLUA_USE_LINUX\" linux",
+ "make TO_LIB=liblua.so.5.3.5 INSTALL_TOP=$FLATPAK_DEST install",
+ "ln -sf liblua.so.5.3.5 $FLATPAK_DEST/lib/liblua.so",
+ "ln -sf liblua.so.5.3.5 $FLATPAK_DEST/lib/liblua.so.5.3",
+ "make INSTALL_TOP=${FLATPAK_DEST} pc > lua.pc",
+ "cat lua.pc.in >> lua.pc",
+ "install -Dm644 lua.pc $FLATPAK_DEST/lib/pkgconfig/lua.pc",
+ "ln -sf lua.pc $FLATPAK_DEST/lib/pkgconfig/lua53.pc",
+ "ln -sf lua.pc $FLATPAK_DEST/lib/pkgconfig/lua5.3.pc",
+ "ln -sf lua.pc $FLATPAK_DEST/lib/pkgconfig/lua-5.3.pc"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://www.lua.org/ftp/lua-5.3.5.tar.gz",
+ "sha256": "0c2eed3f960446e1a3e4b9a1ca2f3ff893b6ce41942cf54d5dd59ab4b3b058ac"
+ },
+ {
+ "type": "patch",
+ "path": "makefile-add-liblua.so-rule.patch"
+ },
+ {
+ "type": "file",
+ "path": "lua.pc.in"
+ },
+ {
+ "type": "shell",
+ "commands": [
+ "sed -i \"s|/usr/local/|$FLATPAK_DEST/|;s|LUA_IDSIZE 60|LUA_IDSIZE 512|\" src/luaconf.h",
+ "# Lua 5.3.5 has wrong release version in its Makefile. Fix it.",
+ "sed 's/^R= \$V.4/R= \$V.5/' -i Makefile",
+ "sed -i '12 a\\\\n#define LUA_COMPAT_5_1\\n#define LUA_COMPAT_5_2' src/luaconf.h"
+ ]
+ }
+ ],
+ "cleanup": [
+ "/bin",
+ "/include",
+ "/lib/pkgconfig",
+ "/share/man"
+ ]
+}
diff --git a/subprojects/shared-modules/lua5.3/lua.pc.in b/subprojects/shared-modules/lua5.3/lua.pc.in
new file mode 100644
index 00000000..6698f8bc
--- /dev/null
+++ b/subprojects/shared-modules/lua5.3/lua.pc.in
@@ -0,0 +1,8 @@
+exec_prefix=${prefix}
+
+Name: Lua
+Description: An Extensible Extension Language
+Version: ${version}
+Requires:
+Libs: -L${libdir} -llua -lm
+Cflags: -I${includedir} \ No newline at end of file
diff --git a/subprojects/shared-modules/lua5.3/makefile-add-liblua.so-rule.patch b/subprojects/shared-modules/lua5.3/makefile-add-liblua.so-rule.patch
new file mode 100644
index 00000000..f675d4d4
--- /dev/null
+++ b/subprojects/shared-modules/lua5.3/makefile-add-liblua.so-rule.patch
@@ -0,0 +1,47 @@
+diff --git a/Makefile b/Makefile
+index 7fa91c8..dccf485 100644
+--- a/Makefile
++++ b/Makefile
+@@ -52,7 +52,7 @@ R= $V.0
+ all: $(PLAT)
+
+ $(PLATS) clean:
+- cd src && $(MAKE) $@
++ cd src && $(MAKE) $@ V=$(V) R=$(R)
+
+ test: dummy
+ src/lua -v
+diff --git a/src/Makefile b/src/Makefile
+index 2e7a412..fa5769f 100644
+--- a/src/Makefile
++++ b/src/Makefile
+@@ -29,6 +29,7 @@ MYOBJS=
+ PLATS= aix bsd c89 freebsd generic linux macosx mingw posix solaris
+
+ LUA_A= liblua.a
++LUA_SO= liblua.so
+ CORE_O= lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o \
+ lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o \
+ ltm.o lundump.o lvm.o lzio.o
+@@ -43,7 +44,7 @@ LUAC_T= luac
+ LUAC_O= luac.o
+
+ ALL_O= $(BASE_O) $(LUA_O) $(LUAC_O)
+-ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T)
++ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) $(LUA_SO)
+ ALL_A= $(LUA_A)
+
+ # Targets start here.
+@@ -59,6 +60,12 @@ $(LUA_A): $(BASE_O)
+ $(AR) $@ $(BASE_O)
+ $(RANLIB) $@
+
++$(LUA_SO): $(CORE_O) $(LIB_O)
++ $(CC) -shared -ldl -Wl,-soname,$(LUA_SO).$(V) -o $@.$(R) $? -lm $(MYLDFLAGS)
++ ln -sf $(LUA_SO).$(R) $(LUA_SO).$(V)
++ ln -sf $(LUA_SO).$(R) $(LUA_SO)
++
++
+ $(LUA_T): $(LUA_O) $(LUA_A)
+ $(CC) -o $@ $(LDFLAGS) $(LUA_O) $(LUA_A) $(LIBS)
+ \ No newline at end of file
diff --git a/subprojects/shared-modules/lua5.4/lua-5.4.json b/subprojects/shared-modules/lua5.4/lua-5.4.json
new file mode 100644
index 00000000..a164fb83
--- /dev/null
+++ b/subprojects/shared-modules/lua5.4/lua-5.4.json
@@ -0,0 +1,44 @@
+{
+ "name": "lua-5.4",
+ "buildsystem": "simple",
+ "build-commands": [
+ "make -j $FLATPAK_BUILDER_N_JOBS CFLAGS=\"$CFLAGS -fPIC -DLUA_USE_LINUX\" linux",
+ "make TO_LIB=liblua.so.5.4.4 INSTALL_TOP=$FLATPAK_DEST install",
+ "ln -sf liblua.so.5.4.4 $FLATPAK_DEST/lib/liblua.so",
+ "ln -sf liblua.so.5.4.4 $FLATPAK_DEST/lib/liblua.so.5.4",
+ "make INSTALL_TOP=${FLATPAK_DEST} pc > lua.pc",
+ "cat lua.pc.in >> lua.pc",
+ "install -Dm644 lua.pc $FLATPAK_DEST/lib/pkgconfig/lua.pc",
+ "ln -sf lua.pc $FLATPAK_DEST/lib/pkgconfig/lua54.pc",
+ "ln -sf lua.pc $FLATPAK_DEST/lib/pkgconfig/lua5.4.pc",
+ "ln -sf lua.pc $FLATPAK_DEST/lib/pkgconfig/lua-5.4.pc"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://www.lua.org/ftp/lua-5.4.4.tar.gz",
+ "sha256": "164c7849653b80ae67bec4b7473b884bf5cc8d2dca05653475ec2ed27b9ebf61"
+ },
+ {
+ "type": "patch",
+ "path": "makefile-add-liblua.so-rule.patch"
+ },
+ {
+ "type": "file",
+ "path": "lua.pc.in"
+ },
+ {
+ "type": "shell",
+ "commands": [
+ "sed -i \"s|/usr/local/|$FLATPAK_DEST/|;s|LUA_IDSIZE 60|LUA_IDSIZE 512|\" src/luaconf.h",
+ "sed -i '12 a\\\\n#define LUA_COMPAT_5_1\\n#define LUA_COMPAT_5_2' src/luaconf.h"
+ ]
+ }
+ ],
+ "cleanup": [
+ "/bin",
+ "/include",
+ "/lib/pkgconfig",
+ "/share/man"
+ ]
+}
diff --git a/subprojects/shared-modules/lua5.4/lua.pc.in b/subprojects/shared-modules/lua5.4/lua.pc.in
new file mode 100644
index 00000000..6698f8bc
--- /dev/null
+++ b/subprojects/shared-modules/lua5.4/lua.pc.in
@@ -0,0 +1,8 @@
+exec_prefix=${prefix}
+
+Name: Lua
+Description: An Extensible Extension Language
+Version: ${version}
+Requires:
+Libs: -L${libdir} -llua -lm
+Cflags: -I${includedir} \ No newline at end of file
diff --git a/subprojects/shared-modules/lua5.4/makefile-add-liblua.so-rule.patch b/subprojects/shared-modules/lua5.4/makefile-add-liblua.so-rule.patch
new file mode 100644
index 00000000..7452f106
--- /dev/null
+++ b/subprojects/shared-modules/lua5.4/makefile-add-liblua.so-rule.patch
@@ -0,0 +1,42 @@
+--- a/Makefile 2021-12-24 10:55:05.836294155 -0500
++++ b/Makefile 2021-03-02 15:04:35.000000000 -0500
+@@ -52,7 +52,7 @@
+ all: $(PLAT)
+
+ $(PLATS) help test clean:
+- @cd src && $(MAKE) $@
++ @cd src && $(MAKE) $@ V=$(V) R=$(R)
+
+ install: dummy
+ cd src && $(MKDIR) $(INSTALL_BIN) $(INSTALL_INC) $(INSTALL_LIB) $(INSTALL_MAN) $(INSTALL_LMOD) $(INSTALL_CMOD)
+--- a/src/Makefile 2021-12-24 10:56:23.279935521 -0500
++++ b/src/Makefile 2021-02-09 13:47:17.000000000 -0500
+@@ -32,6 +32,7 @@
+ PLATS= guess aix bsd c89 freebsd generic linux linux-readline macosx mingw posix solaris
+
+ LUA_A= liblua.a
++LUA_SO= liblua.so
+ CORE_O= lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o
+ LIB_O= lauxlib.o lbaselib.o lcorolib.o ldblib.o liolib.o lmathlib.o loadlib.o loslib.o lstrlib.o ltablib.o lutf8lib.o linit.o
+ BASE_O= $(CORE_O) $(LIB_O) $(MYOBJS)
+@@ -44,7 +44,7 @@
+ LUAC_O= luac.o
+
+ ALL_O= $(BASE_O) $(LUA_O) $(LUAC_O)
+-ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T)
++ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) $(LUA_SO)
+ ALL_A= $(LUA_A)
+
+ # Targets start here.
+@@ -60,6 +60,11 @@
+ $(AR) $@ $(BASE_O)
+ $(RANLIB) $@
+
++$(LUA_SO): $(CORE_O) $(LIB_O)
++ $(CC) -shared -ldl -Wl,-soname,$(LUA_SO).$(V) -o $@.$(R) $? -lm $(MYLDFLAGS)
++ ln -sf $(LUA_SO).$(R) $(LUA_SO).$(V)
++ ln -sf $(LUA_SO).$(R) $(LUA_SO)
++
+ $(LUA_T): $(LUA_O) $(LUA_A)
+ $(CC) -o $@ $(LDFLAGS) $(LUA_O) $(LUA_A) $(LIBS)
+
diff --git a/subprojects/shared-modules/mac/mac.json b/subprojects/shared-modules/mac/mac.json
new file mode 100644
index 00000000..101b3dc2
--- /dev/null
+++ b/subprojects/shared-modules/mac/mac.json
@@ -0,0 +1,19 @@
+{
+ "name": "libmac",
+ "subdir": "Source/Projects/NonWindows",
+ "no-autogen": true,
+ "make-install-args": [
+ "prefix=/app"
+ ],
+ "cleanup": [
+ "/include/MAC"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://freac.org/patches/MAC_SDK_723.zip",
+ "sha256": "1d17d469dd2b4652e19cb91aa7cf76786fec999871a8f5729cd24064f989e9ae",
+ "strip-components": 0
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/physfs/physfs.json b/subprojects/shared-modules/physfs/physfs.json
new file mode 100644
index 00000000..5cc06271
--- /dev/null
+++ b/subprojects/shared-modules/physfs/physfs.json
@@ -0,0 +1,18 @@
+{
+ "name": "PhysicsFS",
+ "buildsystem": "cmake-ninja",
+ "config-opts": [ "-DPHYSFS_BUILD_TEST=OFF", "-DPHYSFS_BUILD_STATIC=OFF" ],
+ "cleanup": [
+ "/include",
+ "/lib/pkgconfig",
+ "/bin"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://icculus.org/physfs/downloads/physfs-3.0.2.tar.bz2",
+ "sha256": "304df76206d633df5360e738b138c94e82ccf086e50ba84f456d3f8432f9f863",
+ "size": 194888
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/pygame/audiofile-gcc6.patch b/subprojects/shared-modules/pygame/audiofile-gcc6.patch
new file mode 100644
index 00000000..89afb6d8
--- /dev/null
+++ b/subprojects/shared-modules/pygame/audiofile-gcc6.patch
@@ -0,0 +1,21 @@
+From b62c902dd258125cac86cd2df21fc898035a43d3 Mon Sep 17 00:00:00 2001
+From: Michael Pruett <michael@68k.org>
+Date: Mon, 29 Aug 2016 23:08:26 -0500
+Subject: [PATCH] Fix undefined behavior in sign conversion.
+Origin: https://github.com/mpruett/audiofile/commit/b62c902dd258125cac86cd2df21fc898035a43d3
+
+---
+diff --git a/libaudiofile/modules/SimpleModule.h b/libaudiofile/modules/SimpleModule.h
+index 03c6c69..bad85ad 100644
+--- a/libaudiofile/modules/SimpleModule.h
++++ b/libaudiofile/modules/SimpleModule.h
+@@ -123,7 +123,8 @@ struct signConverter
+ typedef typename IntTypes<Format>::UnsignedType UnsignedType;
+
+ static const int kScaleBits = (Format + 1) * CHAR_BIT - 1;
+- static const int kMinSignedValue = -1 << kScaleBits;
++ static const int kMaxSignedValue = (((1 << (kScaleBits - 1)) - 1) << 1) + 1;
++ static const int kMinSignedValue = -kMaxSignedValue - 1;
+
+ struct signedToUnsigned : public std::unary_function<SignedType, UnsignedType>
+ {
diff --git a/subprojects/shared-modules/pygame/fluidsynth-no-rawmidi.patch b/subprojects/shared-modules/pygame/fluidsynth-no-rawmidi.patch
new file mode 100644
index 00000000..88a89742
--- /dev/null
+++ b/subprojects/shared-modules/pygame/fluidsynth-no-rawmidi.patch
@@ -0,0 +1,69 @@
+diff -rupN fluidsynth-1.1.6.orig/src/drivers/fluid_alsa.c fluidsynth-1.1.6/src/drivers/fluid_alsa.c
+--- fluidsynth-1.1.6.orig/src/drivers/fluid_alsa.c 2012-08-16 05:01:13.000000000 +0100
++++ fluidsynth-1.1.6/src/drivers/fluid_alsa.c 2017-02-28 21:26:57.033244239 +0000
+@@ -96,7 +96,7 @@ struct fluid_alsa_formats_t fluid_alsa_f
+ };
+
+
+-
++#if 0
+ /*
+ * fluid_alsa_rawmidi_driver_t
+ *
+@@ -119,7 +119,7 @@ fluid_midi_driver_t* new_fluid_alsa_rawm
+
+ int delete_fluid_alsa_rawmidi_driver(fluid_midi_driver_t* p);
+ static void fluid_alsa_midi_run(void* d);
+-
++#endif
+
+ /*
+ * fluid_alsa_seq_driver_t
+@@ -535,7 +535,7 @@ static void fluid_alsa_audio_run_s16 (vo
+ *
+ */
+
+-
++#if 0
+ void fluid_alsa_rawmidi_driver_settings(fluid_settings_t* settings)
+ {
+ fluid_settings_register_str(settings, "midi.alsa.device", "default", 0, NULL, NULL);
+@@ -698,7 +698,7 @@ fluid_alsa_midi_run(void* d)
+ }
+ }
+ }
+-
++#endif
+ /**************************************************************
+ *
+ * Alsa sequencer
+diff -rupN fluidsynth-1.1.6.orig/src/drivers/fluid_mdriver.c fluidsynth-1.1.6/src/drivers/fluid_mdriver.c
+--- fluidsynth-1.1.6.orig/src/drivers/fluid_mdriver.c 2012-08-16 05:01:13.000000000 +0100
++++ fluidsynth-1.1.6/src/drivers/fluid_mdriver.c 2017-02-28 21:24:43.887833321 +0000
+@@ -24,11 +24,13 @@
+
+ /* ALSA */
+ #if ALSA_SUPPORT
++#if 0
+ fluid_midi_driver_t* new_fluid_alsa_rawmidi_driver(fluid_settings_t* settings,
+ handle_midi_event_func_t handler,
+ void* event_handler_data);
+ int delete_fluid_alsa_rawmidi_driver(fluid_midi_driver_t* p);
+ void fluid_alsa_rawmidi_driver_settings(fluid_settings_t* settings);
++#endif
+
+ fluid_midi_driver_t* new_fluid_alsa_seq_driver(fluid_settings_t* settings,
+ handle_midi_event_func_t handler,
+@@ -109,10 +111,12 @@ struct fluid_mdriver_definition_t fluid_
+ fluid_oss_midi_driver_settings },
+ #endif
+ #if ALSA_SUPPORT
++#if 0
+ { "alsa_raw",
+ new_fluid_alsa_rawmidi_driver,
+ delete_fluid_alsa_rawmidi_driver,
+ fluid_alsa_rawmidi_driver_settings },
++#endif
+ { "alsa_seq",
+ new_fluid_alsa_seq_driver,
+ delete_fluid_alsa_seq_driver,
diff --git a/subprojects/shared-modules/pygame/portmidi-no-java.patch b/subprojects/shared-modules/pygame/portmidi-no-java.patch
new file mode 100644
index 00000000..00ef8eaa
--- /dev/null
+++ b/subprojects/shared-modules/pygame/portmidi-no-java.patch
@@ -0,0 +1,105 @@
+diff -rupN portmidi.orig/CMakeLists.txt portmidi/CMakeLists.txt
+--- portmidi.orig/CMakeLists.txt 2010-09-20 15:57:48.000000000 +0100
++++ portmidi/CMakeLists.txt 2017-03-03 13:50:58.494561245 +0000
+@@ -71,7 +71,3 @@ add_subdirectory(pm_common)
+ add_subdirectory(pm_test)
+
+ add_subdirectory(pm_dylib)
+-
+-# Cannot figure out how to make an xcode Java application with CMake
+-add_subdirectory(pm_java)
+-
+diff -rupN portmidi.orig/pm_common/CMakeLists.txt portmidi/pm_common/CMakeLists.txt
+--- portmidi.orig/pm_common/CMakeLists.txt 2010-09-20 15:57:48.000000000 +0100
++++ portmidi/pm_common/CMakeLists.txt 2017-03-03 14:02:32.851938051 +0000
+@@ -67,14 +67,6 @@ if(UNIX)
+ message(STATUS "SYSROOT: " ${CMAKE_OSX_SYSROOT})
+ else(APPLE)
+ # LINUX settings...
+- include(FindJNI)
+- message(STATUS "JAVA_JVM_LIB_PATH is " ${JAVA_JVM_LIB_PATH})
+- message(STATUS "JAVA_INCLUDE_PATH is " ${JAVA_INCLUDE_PATH})
+- message(STATUS "JAVA_INCLUDE_PATH2 is " ${JAVA_INCLUDE_PATH2})
+- message(STATUS "JAVA_JVM_LIBRARY is " ${JAVA_JVM_LIBRARY})
+- set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
+- # libjvm.so is found relative to JAVA_INCLUDE_PATH:
+- set(JAVAVM_LIB ${JAVA_JVM_LIBRARY}/libjvm.so)
+
+ set(LINUXSRC pmlinuxalsa pmlinux finddefault)
+ prepend_path(LIBSRC ../pm_linux/ ${LINUXSRC})
+@@ -99,7 +91,6 @@ else(UNIX)
+ set(PM_NEEDED_LIBS winmm.lib)
+ endif(WIN32)
+ endif(UNIX)
+-set(JNI_EXTRA_LIBS ${PM_NEEDED_LIBS} ${JAVA_JVM_LIBRARY})
+
+ # this completes the list of library sources by adding shared code
+ list(APPEND LIBSRC pmutil portmidi)
+@@ -109,19 +100,11 @@ add_library(portmidi-static ${LIBSRC})
+ set_target_properties(portmidi-static PROPERTIES OUTPUT_NAME "portmidi_s")
+ target_link_libraries(portmidi-static ${PM_NEEDED_LIBS})
+
+-# define the jni library
+-include_directories(${JAVA_INCLUDE_PATHS})
+-
+-set(JNISRC ${LIBSRC} ../pm_java/pmjni/pmjni.c)
+-add_library(pmjni SHARED ${JNISRC})
+-target_link_libraries(pmjni ${JNI_EXTRA_LIBS})
+-set_target_properties(pmjni PROPERTIES EXECUTABLE_EXTENSION "jnilib")
+-
+ # install the libraries (Linux and Mac OS X command line)
+ if(UNIX)
+- INSTALL(TARGETS portmidi-static pmjni
+- LIBRARY DESTINATION /usr/local/lib
+- ARCHIVE DESTINATION /usr/local/lib)
++ INSTALL(TARGETS portmidi-static
++ LIBRARY DESTINATION /app/lib
++ ARCHIVE DESTINATION /app/lib)
+ # .h files installed by pm_dylib/CMakeLists.txt, so don't need them here
+ # INSTALL(FILES portmidi.h ../porttime/porttime.h
+ # DESTINATION /usr/local/include)
+diff -rupN portmidi.orig/pm_dylib/CMakeLists.txt portmidi/pm_dylib/CMakeLists.txt
+--- portmidi.orig/pm_dylib/CMakeLists.txt 2009-11-20 00:41:10.000000000 +0000
++++ portmidi/pm_dylib/CMakeLists.txt 2017-03-03 14:03:56.807104521 +0000
+@@ -63,7 +63,6 @@ if(UNIX)
+ message(STATUS "SYSROOT: " ${CMAKE_OSX_SYSROOT})
+ else(APPLE)
+ # LINUX settings...
+- include(FindJNI)
+ # message(STATUS "JAVA_JVM_LIB_PATH is " ${JAVA_JVM_LIB_PATH})
+ # message(STATUS "JAVA_INCLUDE_PATH is " ${JAVA_INCLUDE_PATH})
+ # note: should use JAVA_JVM_LIB_PATH, but it is not set properly
+@@ -75,12 +74,7 @@ if(UNIX)
+ # JAVA_INCLUDE_PATH2; if no, then we need to make both JAVA_INCLUDE_PATH
+ # and JAVA_INCLUDE_PATH2 set by user (will need clear documentation
+ # because JAVA_INCLUDE_PATH2 is pretty obscure)
+- set(JAVA_INCLUDE_PATH ${JAVA_INCLUDE_PATH-UNKNOWN}
+- CACHE STRING "where to find Java SDK include directory")
+- set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH}/linux)
+- # libjvm.so is found relative to JAVA_INCLUDE_PATH:
+- set(JAVAVM_LIB ${JAVA_INCLUDE_PATH}/../jre/lib/i386/client/libjvm.so)
+-
++
+ set(LINUXSRC pmlinuxalsa pmlinux finddefault)
+ prepend_path(LIBSRC ../pm_linux/ ${LINUXSRC})
+ list(APPEND LIBSRC ../porttime/ptlinux)
+@@ -106,7 +100,6 @@ else(UNIX)
+ # message(STATUS "JAVAVM_LIB: " ${JAVAVM_LIB})
+ endif(WIN32)
+ endif(UNIX)
+-set(JNI_EXTRA_LIBS ${PM_NEEDED_LIBS} ${JAVAVM_LIB})
+
+ # this completes the list of library sources by adding shared code
+ set(SHARED_FILES pmutil portmidi)
+@@ -120,8 +113,8 @@ target_link_libraries(portmidi-dynamic $
+ # install the libraries (Linux and Mac OS X command line)
+ if(UNIX)
+ INSTALL(TARGETS portmidi-dynamic
+- LIBRARY DESTINATION /usr/local/lib
+- ARCHIVE DESTINATION /usr/local/lib)
++ LIBRARY DESTINATION /app/lib
++ ARCHIVE DESTINATION /app/lib)
+ INSTALL(FILES ../pm_common/portmidi.h ../porttime/porttime.h
+- DESTINATION /usr/local/include)
++ DESTINATION /app/include)
+ endif(UNIX)
diff --git a/subprojects/shared-modules/pygame/pygame-1.9.6.json b/subprojects/shared-modules/pygame/pygame-1.9.6.json
new file mode 100644
index 00000000..d3c84c77
--- /dev/null
+++ b/subprojects/shared-modules/pygame/pygame-1.9.6.json
@@ -0,0 +1,112 @@
+{
+ "name": "pygame",
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://files.pythonhosted.org/packages/0f/9c/78626be04e193c0624842090fe5555b3805c050dfaa81c8094d6441db2be/pygame-1.9.6.tar.gz",
+ "sha256": "301c6428c0880ecd4a9e3951b80e539c33863b6ff356a443db1758de4f297957"
+ }
+ ],
+ "buildsystem": "simple",
+ "build-commands": [
+ "pip3 install --ignore-installed --no-deps --prefix=/app ."
+ ],
+ "build-options": {
+ "env": {
+ "PORTMIDI_INC_PORTTIME": "1",
+ "PYGAME_EXTRA_BASE": "/app"
+ },
+ "arch": {
+ "aarch64": {
+ "env": {
+ "ORIGLIBDIRS": "/lib:/lib64:/lib/aarch64-linux-gnu"
+ }
+ },
+ "arm": {
+ "env": {
+ "ORIGLIBDIRS": "/lib:/lib/arm-linux-gnueabihf"
+ }
+ },
+ "i386": {
+ "env": {
+ "ORIGLIBDIRS": "/lib:/lib/i386-linux-gnu"
+ }
+ },
+ "x86_64": {
+ "env": {
+ "ORIGLIBDIRS": "/lib:/lib64:/lib/x86_64-linux-gnu"
+ }
+ }
+ }
+ },
+ "modules": [
+ "../SDL/SDL-1.2.15.json",
+ "../SDL/SDL_image-1.2.12.json",
+ "../SDL/SDL_ttf-2.0.11.json",
+ "../smpeg/smpeg-0.4.5.json",
+ "../SDL/SDL_mixer-1.2.12.json",
+ {
+ "name": "audiofile",
+ "sources": [
+ {
+ "type": "archive",
+ "url": "http://audiofile.68k.org/audiofile-0.3.6.tar.gz",
+ "sha256": "cdc60df19ab08bfe55344395739bb08f50fc15c92da3962fac334d3bff116965"
+ },
+ {
+ "type": "patch",
+ "path": "audiofile-gcc6.patch"
+ }
+ ]
+ },
+ {
+ "name": "libmikmod",
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://sourceforge.net/projects/mikmod/files/libmikmod/3.3.11.1/libmikmod-3.3.11.1.tar.gz",
+ "sha256": "ad9d64dfc8f83684876419ea7cd4ff4a41d8bcd8c23ef37ecb3a200a16b46d19"
+ }
+ ]
+ },
+ {
+ "name": "fluidsynth",
+ "buildsystem": "cmake-ninja",
+ "config-opts": [
+ "-DCMAKE_BUILD_TYPE=Release"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/FluidSynth/fluidsynth/archive/refs/tags/v1.1.11.tar.gz",
+ "sha256": "da8878ff374d12392eecf87e96bad8711b8e76a154c25a571dd8614d1af80de8"
+ },
+ {
+ "type": "patch",
+ "path": "fluidsynth-no-rawmidi.patch"
+ }
+ ]
+ },
+ {
+ "name": "portmidi",
+ "buildsystem": "cmake-ninja",
+ "config-opts": [
+ "-DCMAKE_BUILD_TYPE=Release",
+ "-DCMAKE_LIBRARY_OUTPUT_DIRECTORY:STRING=/app/lib",
+ "-DCMAKE_ARCHIVE_OUTPUT_DIRECTORY:STRING=/app/lib",
+ "-DCMAKE_RUNTIME_OUTPUT_DIRECTORY:STRING=/app/bin"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "http://downloads.sourceforge.net/project/portmedia/portmidi/217/portmidi-src-217.zip",
+ "sha256": "08e9a892bd80bdb1115213fb72dc29a7bf2ff108b378180586aa65f3cfd42e0f"
+ },
+ {
+ "type": "patch",
+ "path": "portmidi-no-java.patch"
+ }
+ ]
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/pygtk/pygtk.json b/subprojects/shared-modules/pygtk/pygtk.json
new file mode 100644
index 00000000..5319e4b3
--- /dev/null
+++ b/subprojects/shared-modules/pygtk/pygtk.json
@@ -0,0 +1,107 @@
+{
+ "name": "pygtk",
+ "config-opts": [
+ "--disable-docs"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://download.gnome.org/sources/pygtk/2.24/pygtk-2.24.0.tar.gz",
+ "sha256": "6e3e54fa6e65a69ac60bd58cb2e60a57f3346ac52efe995f3d10b6c38c972fd8"
+ },
+ {
+ "type": "patch",
+ "path": "pygtk.patch"
+ },
+ {
+ "type": "shell",
+ "commands": [
+ "cp -p /usr/share/automake-*/config.{sub,guess} ."
+ ]
+ }
+ ],
+ "cleanup": [
+ "/bin",
+ "/include/pygtk-2.0",
+ "*.la",
+ "/lib/pkgconfig",
+ "/lib/pygtk",
+ "/share/gtk-doc",
+ "/share/pygtk"
+ ],
+ "modules": [
+ {
+ "name": "python2-pycairo",
+ "buildsystem": "meson",
+ "config-opts": [
+ "-Dpython=python2"
+ ],
+ "cleanup": [
+ "/include/pycairo",
+ "/lib/pkgconfig",
+ "/lib/python2.7/site-packages/cairo/include"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://github.com/pygobject/pycairo/releases/download/v1.18.2/pycairo-1.18.2.tar.gz",
+ "sha256": "dcb853fd020729516e8828ad364084e752327d4cff8505d20b13504b32b16531"
+ }
+ ]
+ },
+ {
+ "name": "pygobject",
+ "config-opts": [
+ "--disable-glibtest"
+ ],
+ "cleanup": [
+ "/bin",
+ "/include/pygtk-2.0",
+ "*.la",
+ "/lib/pkgconfig",
+ "/share/gtk-doc",
+ "/share/pygobject"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://download.gnome.org/sources/pygobject/2.28/pygobject-2.28.7.tar.xz",
+ "sha256": "bb9d25a3442ca7511385a7c01b057492095c263784ef31231ffe589d83a96a5a"
+ }
+ ]
+ },
+ {
+ "name": "libglade",
+ "rm-configure": true,
+ "cleanup": [
+ "/bin",
+ "/include/libglade-2.0",
+ "*.a",
+ "*.la",
+ "/lib/pkgconfig",
+ "/share/gtk-doc",
+ "/share/xml/libglade"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://download.gnome.org/sources/libglade/2.6/libglade-2.6.4.tar.gz",
+ "sha256": "c41d189b68457976069073e48d6c14c183075d8b1d8077cb6dfb8b7c5097add3"
+ },
+ {
+ "type": "shell",
+ "commands": [
+ "rm -f config.guess"
+ ]
+ },
+ {
+ "type": "script",
+ "commands": [
+ "autoreconf -fiv"
+ ],
+ "dest-filename": "autogen.sh"
+ }
+ ]
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/pygtk/pygtk.patch b/subprojects/shared-modules/pygtk/pygtk.patch
new file mode 100644
index 00000000..ba4141e3
--- /dev/null
+++ b/subprojects/shared-modules/pygtk/pygtk.patch
@@ -0,0 +1,39 @@
+From 877164b6b70780468a31d8211f29421b6f34b0c8 Mon Sep 17 00:00:00 2001
+From: Mathieu Bridon <bochecha@daitauha.fr>
+Date: Thu, 24 Oct 2019 22:58:36 +0200
+Subject: [PATCH] Drop the PangoFont find_shaper virtual method
+
+This API has been removed from Pango 1.44.6, because it was completely
+unused by anything.
+
+However, PyGTK tries to bind everything, even unused API.
+
+Removing this from PyGTK means we can build it against the latest Pango
+again.
+---
+ pango.defs | 9 ---------
+ 1 file changed, 9 deletions(-)
+
+diff --git a/pango.defs b/pango.defs
+index 2a79ecc..862667a 100644
+--- a/pango.defs
++++ b/pango.defs
+@@ -1391,15 +1391,6 @@
+ )
+ )
+
+-(define-virtual find_shaper
+- (of-object "PangoFont")
+- (return-type "PangoEngineShape*")
+- (parameters
+- '("PangoLanguage*" "lang")
+- '("guint32" "ch")
+- )
+-)
+-
+ (define-virtual get_glyph_extents
+ (of-object "PangoFont")
+ (return-type "none")
+--
+2.21.0
+
diff --git a/subprojects/shared-modules/python2.7/python-2.7.json b/subprojects/shared-modules/python2.7/python-2.7.json
new file mode 100644
index 00000000..afdef902
--- /dev/null
+++ b/subprojects/shared-modules/python2.7/python-2.7.json
@@ -0,0 +1,52 @@
+{
+ "name": "python-2.7",
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tar.xz",
+ "sha256": "b62c0e7937551d0cc02b8fd5cb0f544f9405bafc9a54d3808ed4594812edef43"
+ }
+ ],
+ "config-opts": [
+ "--enable-shared",
+ "--with-ensurepip=yes",
+ "--with-system-expat",
+ "--with-system-ffi",
+ "--enable-loadable-sqlite-extensions",
+ "--with-dbmliborder=gdbm",
+ "--enable-unicode=ucs4"
+ ],
+ "post-install": [
+ /* Theres seem to be a permissions missmatch that causes the debug stripping to fail */
+ "chmod 644 $FLATPAK_DEST/lib/libpython2.7.so.1.0"
+ ],
+ "cleanup": [
+ "/bin/2to3*",
+ "/bin/easy_install*",
+ "/bin/idle*",
+ "/bin/pydoc*",
+ "/bin/python*-config",
+ "/bin/pyvenv*",
+ "/include",
+ "/lib/pkgconfig",
+ "/lib/python*/config",
+ "/share",
+
+ /* Test scripts */
+ "/lib/python*/test",
+ "/lib/python*/*/test",
+ "/lib/python*/*/tests",
+ "/lib/python*/lib-tk/test",
+ "/lib/python*/lib-dynload/_*_test.*.so",
+ "/lib/python*/lib-dynload/_test*.*.so",
+
+ /* Unused modules */
+ "/lib/python*/idlelib",
+ "/lib/python*/tkinter*",
+ "/lib/python*/turtle*",
+ "/lib/python*/lib2to3*",
+
+ /* Static library */
+ "/lib/python2.7/config/libpython2.7.a"
+ ]
+}
diff --git a/subprojects/shared-modules/qt4/disable-sslv3.patch b/subprojects/shared-modules/qt4/disable-sslv3.patch
new file mode 100644
index 00000000..5ebd9741
--- /dev/null
+++ b/subprojects/shared-modules/qt4/disable-sslv3.patch
@@ -0,0 +1,54 @@
+diff -u -r qt-everywhere-opensource-src-4.8.7/src/network/ssl/qsslsocket_openssl.cpp qt-everywhere-opensource-src-4.8.7-nossl3/src/network/ssl/qsslsocket_openssl.cpp
+--- qt-everywhere-opensource-src-4.8.7/src/network/ssl/qsslsocket_openssl.cpp 2015-05-07 16:14:44.000000000 +0200
++++ qt-everywhere-opensource-src-4.8.7-nossl3/src/network/ssl/qsslsocket_openssl.cpp 2016-03-04 11:29:17.119300898 +0100
+@@ -267,7 +267,11 @@
+ #endif
+ break;
+ case QSsl::SslV3:
++#ifndef OPENSSL_NO_SSL3
+ ctx = q_SSL_CTX_new(client ? q_SSLv3_client_method() : q_SSLv3_server_method());
++#else
++ ctx = 0; // SSL 3 not supported by the system, but chosen deliberately -> error
++#endif
+ break;
+ case QSsl::SecureProtocols: // SslV2 will be disabled below
+ case QSsl::TlsV1SslV3: // SslV2 will be disabled below
+diff -u -r qt-everywhere-opensource-src-4.8.7/src/network/ssl/qsslsocket_openssl_symbols.cpp qt-everywhere-opensource-src-4.8.7-nossl3/src/network/ssl/qsslsocket_openssl_symbols.cpp
+--- qt-everywhere-opensource-src-4.8.7/src/network/ssl/qsslsocket_openssl_symbols.cpp 2015-05-07 16:14:44.000000000 +0200
++++ qt-everywhere-opensource-src-4.8.7-nossl3/src/network/ssl/qsslsocket_openssl_symbols.cpp 2016-03-04 11:28:52.806050135 +0100
+@@ -228,13 +228,17 @@
+ #ifndef OPENSSL_NO_SSL2
+ DEFINEFUNC(const SSL_METHOD *, SSLv2_client_method, DUMMYARG, DUMMYARG, return 0, return)
+ #endif
++#ifndef OPENSSL_NO_SSL3
+ DEFINEFUNC(const SSL_METHOD *, SSLv3_client_method, DUMMYARG, DUMMYARG, return 0, return)
++#endif
+ DEFINEFUNC(const SSL_METHOD *, SSLv23_client_method, DUMMYARG, DUMMYARG, return 0, return)
+ DEFINEFUNC(const SSL_METHOD *, TLSv1_client_method, DUMMYARG, DUMMYARG, return 0, return)
+ #ifndef OPENSSL_NO_SSL2
+ DEFINEFUNC(const SSL_METHOD *, SSLv2_server_method, DUMMYARG, DUMMYARG, return 0, return)
+ #endif
++#ifndef OPENSSL_NO_SSL3
+ DEFINEFUNC(const SSL_METHOD *, SSLv3_server_method, DUMMYARG, DUMMYARG, return 0, return)
++#endif
+ DEFINEFUNC(const SSL_METHOD *, SSLv23_server_method, DUMMYARG, DUMMYARG, return 0, return)
+ DEFINEFUNC(const SSL_METHOD *, TLSv1_server_method, DUMMYARG, DUMMYARG, return 0, return)
+ #else
+@@ -822,13 +826,17 @@
+ #ifndef OPENSSL_NO_SSL2
+ RESOLVEFUNC(SSLv2_client_method)
+ #endif
++#ifndef OPENSSL_NO_SSL3
+ RESOLVEFUNC(SSLv3_client_method)
++#endif
+ RESOLVEFUNC(SSLv23_client_method)
+ RESOLVEFUNC(TLSv1_client_method)
+ #ifndef OPENSSL_NO_SSL2
+ RESOLVEFUNC(SSLv2_server_method)
+ #endif
++#ifndef OPENSSL_NO_SSL3
+ RESOLVEFUNC(SSLv3_server_method)
++#endif
+ RESOLVEFUNC(SSLv23_server_method)
+ RESOLVEFUNC(TLSv1_server_method)
+ RESOLVEFUNC(X509_NAME_entry_count)
diff --git a/subprojects/shared-modules/qt4/fixgcc11.patch b/subprojects/shared-modules/qt4/fixgcc11.patch
new file mode 100644
index 00000000..b0fd3d1b
--- /dev/null
+++ b/subprojects/shared-modules/qt4/fixgcc11.patch
@@ -0,0 +1,11 @@
+--- a/tools/linguist/linguist/messagemodel.cpp 2021-06-07 12:18:43.713434493 +0200
++++ b/tools/linguist/linguist/messagemodel.cpp 2021-06-07 12:24:24.828016548 +0200
+@@ -183,7 +183,7 @@
+ if (ContextItem *c = one->findContext(oc->context())) {
+ for (int j = 0; j < oc->messageCount(); ++j) {
+ MessageItem *m = oc->messageItem(j);
+- if (c->findMessage(m->text(), m->comment()) >= 0)
++ if (c->findMessage(m->text(), m->comment()))
+ ++inBoth;
+ }
+ }
diff --git a/subprojects/shared-modules/qt4/fixgcc9.patch b/subprojects/shared-modules/qt4/fixgcc9.patch
new file mode 100644
index 00000000..6501a83c
--- /dev/null
+++ b/subprojects/shared-modules/qt4/fixgcc9.patch
@@ -0,0 +1,31 @@
+--- qt-everywhere-opensource-src-4.8.7/src/corelib/global/qglobal.h 2015-05-07 16:14:48.000000000 +0200
++++ qt-everywhere-opensource-src-4.8.7-gcc9/src/corelib/global/qglobal.h 2020-05-28 16:24:45.160340385 +0200
+@@ -2482,22 +2482,22 @@
+
+ #endif /* Q_NO_TYPESAFE_FLAGS */
+
+-#if defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && !defined(Q_CC_RVCT)
++#if (defined(Q_CC_GNU) && !defined(Q_CC_RVCT))
+ /* make use of typeof-extension */
+ template <typename T>
+ class QForeachContainer {
+ public:
+- inline QForeachContainer(const T& t) : c(t), brk(0), i(c.begin()), e(c.end()) { }
++ inline QForeachContainer(const T& t) : c(t), i(c.begin()), e(c.end()), control(1) { }
+ const T c;
+- int brk;
+ typename T::const_iterator i, e;
++ int control;
+ };
+
+ #define Q_FOREACH(variable, container) \
+ for (QForeachContainer<__typeof__(container)> _container_(container); \
+- !_container_.brk && _container_.i != _container_.e; \
+- __extension__ ({ ++_container_.brk; ++_container_.i; })) \
+- for (variable = *_container_.i;; __extension__ ({--_container_.brk; break;}))
++ _container_.control && _container_.i != _container_.e; \
++ ++_container_.i, _container_.control ^= 1) \
++ for (variable = *_container_.i; _container_.control; _container_.control = 0)
+
+ #else
+
diff --git a/subprojects/shared-modules/qt4/qt4-4.8.7-minimal.json b/subprojects/shared-modules/qt4/qt4-4.8.7-minimal.json
new file mode 100644
index 00000000..00cc5706
--- /dev/null
+++ b/subprojects/shared-modules/qt4/qt4-4.8.7-minimal.json
@@ -0,0 +1,118 @@
+{
+ "name": "qt4",
+ "config-opts": [
+ "-verbose",
+ "-confirm-license",
+ "-opensource",
+ "-release",
+ "-shared",
+ "-no-static",
+ "-fast",
+ "-datadir", "/app/lib/qt4",
+ "-importdir", "/app/lib/qt4/imports",
+ "-plugindir", "/app/lib/qt4/plugins",
+ "-translationdir", "/app/share/qt4/translations",
+ "-accessibility",
+ "-exceptions",
+ "-fontconfig",
+ "-glib",
+ "-dbus-linked",
+ "-openssl-linked",
+ "-optimized-qmake",
+ "-system-libjpeg",
+ "-system-libpng",
+ "-system-libtiff",
+ "-system-proxies",
+ "-system-zlib",
+ "-no-cups",
+ "-no-declarative",
+ "-no-gtkstyle",
+ "-no-javascript-jit",
+ "-no-libmng",
+ "-no-multimedia",
+ "-no-nis",
+ "-no-opengl",
+ "-no-phonon",
+ "-no-phonon-backend",
+ "-no-qt3support",
+ "-no-rpath",
+ "-no-script",
+ "-no-scripttools",
+ "-no-sql-db2",
+ "-no-sql-ibase",
+ "-no-sql-mysql",
+ "-no-sql-oci",
+ "-no-sql-odbc",
+ "-no-sql-psql",
+ "-no-sql-sqlite",
+ "-no-sql-sqlite2",
+ "-no-sql-sqlite_symbian",
+ "-no-sql-symsql",
+ "-no-sql-tds",
+ "-no-svg",
+ "-no-webkit",
+ "-no-xmlpatterns",
+ "-nomake", "demos",
+ "-nomake", "docs",
+ "-nomake", "examples"
+ ],
+ "build-options": {
+ "env": {
+ "CXXFLAGS": "-std=gnu++98 -O2",
+ "LD_LIBRARY_PATH": "/run/build/qt4/lib/"
+ }
+ },
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://download.qt.io/archive/qt/4.8/4.8.7/qt-everywhere-opensource-src-4.8.7.tar.gz",
+ "sha256": "e2882295097e47fe089f8ac741a95fef47e0a73a3f3cdf21b56990638f626ea0"
+ },
+ {
+ "type": "patch",
+ "path": "qt4-aarch64.patch"
+ },
+ {
+ "type": "patch",
+ "path": "disable-sslv3.patch"
+ },
+ {
+ "type": "patch",
+ "path": "fixgcc9.patch"
+ },
+ {
+ "type": "patch",
+ "path": "fixgcc11.patch"
+ },
+ {
+ "type": "shell",
+ "commands": [
+ "sed -i \"s|-O2|${CXXFLAGS}|\" mkspecs/common/{g++,gcc}-base.conf",
+ "sed -i \"/^QMAKE_LFLAGS_RPATH/s| -Wl,-rpath,||g\" mkspecs/common/gcc-base-unix.conf",
+ "sed -i \"/^QMAKE_LFLAGS\s/s|+=|+= ${LDFLAGS}|g\" mkspecs/common/gcc-base.conf"
+ ]
+ },
+ {
+ "type": "file",
+ "path": "qt4-openssl-1.1.patch"
+ },
+ {
+ "type": "shell",
+ "commands": [
+ "echo -e '#include<openssl/opensslv.h>\nint main(){return OPENSSL_VERSION_NUMBER>=0x010100000L?0:1;}' >has_openssl_1_1.c",
+ "gcc ${CFLAGS} has_openssl_1_1.c -o has_openssl_1_1",
+ "if ./has_openssl_1_1; then patch -p1 -i qt4-openssl-1.1.patch; fi"
+ ]
+ }
+ ],
+ "cleanup": [
+ "/bin",
+ "/include",
+ "/lib/*.a",
+ "/lib/*.la",
+ "/lib/*.prl",
+ "/lib/pkgconfig",
+ "/lib/qt4/mkspecs",
+ "/lib/qt4/q3porting.xml"
+ ]
+}
diff --git a/subprojects/shared-modules/qt4/qt4-aarch64.patch b/subprojects/shared-modules/qt4/qt4-aarch64.patch
new file mode 100644
index 00000000..cbe815de
--- /dev/null
+++ b/subprojects/shared-modules/qt4/qt4-aarch64.patch
@@ -0,0 +1,514 @@
+diff -up qt-everywhere-opensource-src-4.8.7/include/QtCore/headers.pri.aarch64 qt-everywhere-opensource-src-4.8.7/include/QtCore/headers.pri
+--- qt-everywhere-opensource-src-4.8.7/include/QtCore/headers.pri.aarch64 2015-05-08 21:48:32.714057739 -0500
++++ qt-everywhere-opensource-src-4.8.7/include/QtCore/headers.pri 2015-05-08 21:53:21.088761971 -0500
+@@ -1,3 +1,3 @@
+-SYNCQT.HEADER_FILES = ../corelib/kernel/qabstracteventdispatcher.h ../corelib/kernel/qabstractitemmodel.h ../corelib/kernel/qbasictimer.h ../corelib/kernel/qcoreapplication.h ../corelib/kernel/qcoreevent.h ../corelib/kernel/qeventloop.h ../corelib/kernel/qfunctions_nacl.h ../corelib/kernel/qfunctions_vxworks.h ../corelib/kernel/qfunctions_wince.h ../corelib/kernel/qmath.h ../corelib/kernel/qmetaobject.h ../corelib/kernel/qmetatype.h ../corelib/kernel/qmimedata.h ../corelib/kernel/qobject.h ../corelib/kernel/qobjectcleanuphandler.h ../corelib/kernel/qobjectdefs.h ../corelib/kernel/qpointer.h ../corelib/kernel/qsharedmemory.h ../corelib/kernel/qsignalmapper.h ../corelib/kernel/qsocketnotifier.h ../corelib/kernel/qsystemsemaphore.h ../corelib/kernel/qtimer.h ../corelib/kernel/qtranslator.h ../corelib/kernel/qvariant.h ../corelib/animation/qabstractanimation.h ../corelib/animation/qanimationgroup.h ../corelib/animation/qparallelanimationgroup.h ../corelib/animation/qpauseanimation.h ../corelib/animation/qpropertyanimation.h ../corelib/animation/qsequentialanimationgroup.h ../corelib/animation/qvariantanimation.h ../corelib/arch/qatomic_alpha.h ../corelib/arch/qatomic_arch.h ../corelib/arch/qatomic_arm.h ../corelib/arch/qatomic_armv5.h ../corelib/arch/qatomic_armv6.h ../corelib/arch/qatomic_armv7.h ../corelib/arch/qatomic_avr32.h ../corelib/arch/qatomic_bfin.h ../corelib/arch/qatomic_bootstrap.h ../corelib/arch/qatomic_generic.h ../corelib/arch/qatomic_i386.h ../corelib/arch/qatomic_ia64.h ../corelib/arch/qatomic_integrity.h ../corelib/arch/qatomic_m68k.h ../corelib/arch/qatomic_macosx.h ../corelib/arch/qatomic_mips.h ../corelib/arch/qatomic_parisc.h ../corelib/arch/qatomic_powerpc.h ../corelib/arch/qatomic_s390.h ../corelib/arch/qatomic_sh.h ../corelib/arch/qatomic_sh4a.h ../corelib/arch/qatomic_sparc.h ../corelib/arch/qatomic_symbian.h ../corelib/arch/qatomic_vxworks.h ../corelib/arch/qatomic_windows.h ../corelib/arch/qatomic_windowsce.h ../corelib/arch/qatomic_x86_64.h ../corelib/tools/qalgorithms.h ../corelib/tools/qbitarray.h ../corelib/tools/qbytearray.h ../corelib/tools/qbytearraymatcher.h ../corelib/tools/qcache.h ../corelib/tools/qchar.h ../corelib/tools/qcontainerfwd.h ../corelib/tools/qcontiguouscache.h ../corelib/tools/qcryptographichash.h ../corelib/tools/qdatetime.h ../corelib/tools/qeasingcurve.h ../corelib/tools/qelapsedtimer.h ../corelib/tools/qhash.h ../corelib/tools/qiterator.h ../corelib/tools/qline.h ../corelib/tools/qlinkedlist.h ../corelib/tools/qlist.h ../corelib/tools/qlocale.h ../corelib/tools/qlocale_blackberry.h ../corelib/tools/qmap.h ../corelib/tools/qmargins.h ../corelib/tools/qpair.h ../corelib/tools/qpoint.h ../corelib/tools/qqueue.h ../corelib/tools/qrect.h ../corelib/tools/qregexp.h ../corelib/tools/qscopedpointer.h ../corelib/tools/qscopedvaluerollback.h ../corelib/tools/qset.h ../corelib/tools/qshareddata.h ../corelib/tools/qsharedpointer.h ../corelib/tools/qsharedpointer_impl.h ../corelib/tools/qsize.h ../corelib/tools/qstack.h ../corelib/tools/qstring.h ../corelib/tools/qstringbuilder.h ../corelib/tools/qstringlist.h ../corelib/tools/qstringmatcher.h ../corelib/tools/qtextboundaryfinder.h ../corelib/tools/qtimeline.h ../corelib/tools/qvarlengtharray.h ../corelib/tools/qvector.h ../corelib/plugin/qfactoryinterface.h ../corelib/plugin/qlibrary.h ../corelib/plugin/qplugin.h ../corelib/plugin/qpluginloader.h ../corelib/plugin/quuid.h ../corelib/xml/qxmlstream.h ../corelib/thread/qatomic.h ../corelib/thread/qbasicatomic.h ../corelib/thread/qmutex.h ../corelib/thread/qreadwritelock.h ../corelib/thread/qsemaphore.h ../corelib/thread/qthread.h ../corelib/thread/qthreadstorage.h ../corelib/thread/qwaitcondition.h ../corelib/statemachine/qabstractstate.h ../corelib/statemachine/qabstracttransition.h ../corelib/statemachine/qeventtransition.h ../corelib/statemachine/qfinalstate.h ../corelib/statemachine/qhistorystate.h ../corelib/statemachine/qsignaltransition.h ../corelib/statemachine/qstate.h ../corelib/statemachine/qstatemachine.h ../corelib/concurrent/qfuture.h ../corelib/concurrent/qfutureinterface.h ../corelib/concurrent/qfuturesynchronizer.h ../corelib/concurrent/qfuturewatcher.h ../corelib/concurrent/qrunnable.h ../corelib/concurrent/qtconcurrentcompilertest.h ../corelib/concurrent/qtconcurrentexception.h ../corelib/concurrent/qtconcurrentfilter.h ../corelib/concurrent/qtconcurrentfilterkernel.h ../corelib/concurrent/qtconcurrentfunctionwrappers.h ../corelib/concurrent/qtconcurrentiteratekernel.h ../corelib/concurrent/qtconcurrentmap.h ../corelib/concurrent/qtconcurrentmapkernel.h ../corelib/concurrent/qtconcurrentmedian.h ../corelib/concurrent/qtconcurrentreducekernel.h ../corelib/concurrent/qtconcurrentresultstore.h ../corelib/concurrent/qtconcurrentrun.h ../corelib/concurrent/qtconcurrentrunbase.h ../corelib/concurrent/qtconcurrentstoredfunctioncall.h ../corelib/concurrent/qtconcurrentthreadengine.h ../corelib/concurrent/qthreadpool.h ../corelib/io/qabstractfileengine.h ../corelib/io/qbuffer.h ../corelib/io/qdatastream.h ../corelib/io/qdebug.h ../corelib/io/qdir.h ../corelib/io/qdiriterator.h ../corelib/io/qfile.h ../corelib/io/qfileinfo.h ../corelib/io/qfilesystemwatcher.h ../corelib/io/qfsfileengine.h ../corelib/io/qiodevice.h ../corelib/io/qprocess.h ../corelib/io/qresource.h ../corelib/io/qsettings.h ../corelib/io/qtemporaryfile.h ../corelib/io/qtextstream.h ../corelib/io/qurl.h ../corelib/global/qconfig-dist.h ../corelib/global/qconfig-large.h ../corelib/global/qconfig-medium.h ../corelib/global/qconfig-minimal.h ../corelib/global/qconfig-nacl.h ../corelib/global/qconfig-small.h ../corelib/global/qendian.h ../corelib/global/qfeatures.h ../corelib/global/qglobal.h ../corelib/global/qlibraryinfo.h ../corelib/global/qnamespace.h ../corelib/global/qnumeric.h ../corelib/global/qt_windows.h ../corelib/global/qconfig.h ../corelib/codecs/qtextcodec.h ../corelib/codecs/qtextcodecplugin.h ../../include/QtCore/QtCore
++SYNCQT.HEADER_FILES = ../corelib/kernel/qabstracteventdispatcher.h ../corelib/kernel/qabstractitemmodel.h ../corelib/kernel/qbasictimer.h ../corelib/kernel/qcoreapplication.h ../corelib/kernel/qcoreevent.h ../corelib/kernel/qeventloop.h ../corelib/kernel/qfunctions_nacl.h ../corelib/kernel/qfunctions_vxworks.h ../corelib/kernel/qfunctions_wince.h ../corelib/kernel/qmath.h ../corelib/kernel/qmetaobject.h ../corelib/kernel/qmetatype.h ../corelib/kernel/qmimedata.h ../corelib/kernel/qobject.h ../corelib/kernel/qobjectcleanuphandler.h ../corelib/kernel/qobjectdefs.h ../corelib/kernel/qpointer.h ../corelib/kernel/qsharedmemory.h ../corelib/kernel/qsignalmapper.h ../corelib/kernel/qsocketnotifier.h ../corelib/kernel/qsystemsemaphore.h ../corelib/kernel/qtimer.h ../corelib/kernel/qtranslator.h ../corelib/kernel/qvariant.h ../corelib/animation/qabstractanimation.h ../corelib/animation/qanimationgroup.h ../corelib/animation/qparallelanimationgroup.h ../corelib/animation/qpauseanimation.h ../corelib/animation/qpropertyanimation.h ../corelib/animation/qsequentialanimationgroup.h ../corelib/animation/qvariantanimation.h ../corelib/arch/qatomic_aarch64.h ../corelib/arch/qatomic_alpha.h ../corelib/arch/qatomic_arch.h ../corelib/arch/qatomic_arm.h ../corelib/arch/qatomic_armv5.h ../corelib/arch/qatomic_armv6.h ../corelib/arch/qatomic_armv7.h ../corelib/arch/qatomic_avr32.h ../corelib/arch/qatomic_bfin.h ../corelib/arch/qatomic_bootstrap.h ../corelib/arch/qatomic_generic.h ../corelib/arch/qatomic_i386.h ../corelib/arch/qatomic_ia64.h ../corelib/arch/qatomic_integrity.h ../corelib/arch/qatomic_m68k.h ../corelib/arch/qatomic_macosx.h ../corelib/arch/qatomic_mips.h ../corelib/arch/qatomic_parisc.h ../corelib/arch/qatomic_powerpc.h ../corelib/arch/qatomic_s390.h ../corelib/arch/qatomic_sh.h ../corelib/arch/qatomic_sh4a.h ../corelib/arch/qatomic_sparc.h ../corelib/arch/qatomic_symbian.h ../corelib/arch/qatomic_vxworks.h ../corelib/arch/qatomic_windows.h ../corelib/arch/qatomic_windowsce.h ../corelib/arch/qatomic_x86_64.h ../corelib/tools/qalgorithms.h ../corelib/tools/qbitarray.h ../corelib/tools/qbytearray.h ../corelib/tools/qbytearraymatcher.h ../corelib/tools/qcache.h ../corelib/tools/qchar.h ../corelib/tools/qcontainerfwd.h ../corelib/tools/qcontiguouscache.h ../corelib/tools/qcryptographichash.h ../corelib/tools/qdatetime.h ../corelib/tools/qeasingcurve.h ../corelib/tools/qelapsedtimer.h ../corelib/tools/qhash.h ../corelib/tools/qiterator.h ../corelib/tools/qline.h ../corelib/tools/qlinkedlist.h ../corelib/tools/qlist.h ../corelib/tools/qlocale.h ../corelib/tools/qlocale_blackberry.h ../corelib/tools/qmap.h ../corelib/tools/qmargins.h ../corelib/tools/qpair.h ../corelib/tools/qpoint.h ../corelib/tools/qqueue.h ../corelib/tools/qrect.h ../corelib/tools/qregexp.h ../corelib/tools/qscopedpointer.h ../corelib/tools/qscopedvaluerollback.h ../corelib/tools/qset.h ../corelib/tools/qshareddata.h ../corelib/tools/qsharedpointer.h ../corelib/tools/qsharedpointer_impl.h ../corelib/tools/qsize.h ../corelib/tools/qstack.h ../corelib/tools/qstring.h ../corelib/tools/qstringbuilder.h ../corelib/tools/qstringlist.h ../corelib/tools/qstringmatcher.h ../corelib/tools/qtextboundaryfinder.h ../corelib/tools/qtimeline.h ../corelib/tools/qvarlengtharray.h ../corelib/tools/qvector.h ../corelib/plugin/qfactoryinterface.h ../corelib/plugin/qlibrary.h ../corelib/plugin/qplugin.h ../corelib/plugin/qpluginloader.h ../corelib/plugin/quuid.h ../corelib/xml/qxmlstream.h ../corelib/thread/qatomic.h ../corelib/thread/qbasicatomic.h ../corelib/thread/qmutex.h ../corelib/thread/qreadwritelock.h ../corelib/thread/qsemaphore.h ../corelib/thread/qthread.h ../corelib/thread/qthreadstorage.h ../corelib/thread/qwaitcondition.h ../corelib/statemachine/qabstractstate.h ../corelib/statemachine/qabstracttransition.h ../corelib/statemachine/qeventtransition.h ../corelib/statemachine/qfinalstate.h ../corelib/statemachine/qhistorystate.h ../corelib/statemachine/qsignaltransition.h ../corelib/statemachine/qstate.h ../corelib/statemachine/qstatemachine.h ../corelib/concurrent/qfuture.h ../corelib/concurrent/qfutureinterface.h ../corelib/concurrent/qfuturesynchronizer.h ../corelib/concurrent/qfuturewatcher.h ../corelib/concurrent/qrunnable.h ../corelib/concurrent/qtconcurrentcompilertest.h ../corelib/concurrent/qtconcurrentexception.h ../corelib/concurrent/qtconcurrentfilter.h ../corelib/concurrent/qtconcurrentfilterkernel.h ../corelib/concurrent/qtconcurrentfunctionwrappers.h ../corelib/concurrent/qtconcurrentiteratekernel.h ../corelib/concurrent/qtconcurrentmap.h ../corelib/concurrent/qtconcurrentmapkernel.h ../corelib/concurrent/qtconcurrentmedian.h ../corelib/concurrent/qtconcurrentreducekernel.h ../corelib/concurrent/qtconcurrentresultstore.h ../corelib/concurrent/qtconcurrentrun.h ../corelib/concurrent/qtconcurrentrunbase.h ../corelib/concurrent/qtconcurrentstoredfunctioncall.h ../corelib/concurrent/qtconcurrentthreadengine.h ../corelib/concurrent/qthreadpool.h ../corelib/io/qabstractfileengine.h ../corelib/io/qbuffer.h ../corelib/io/qdatastream.h ../corelib/io/qdebug.h ../corelib/io/qdir.h ../corelib/io/qdiriterator.h ../corelib/io/qfile.h ../corelib/io/qfileinfo.h ../corelib/io/qfilesystemwatcher.h ../corelib/io/qfsfileengine.h ../corelib/io/qiodevice.h ../corelib/io/qprocess.h ../corelib/io/qresource.h ../corelib/io/qsettings.h ../corelib/io/qtemporaryfile.h ../corelib/io/qtextstream.h ../corelib/io/qurl.h ../corelib/global/qconfig-dist.h ../corelib/global/qconfig-large.h ../corelib/global/qconfig-medium.h ../corelib/global/qconfig-minimal.h ../corelib/global/qconfig-nacl.h ../corelib/global/qconfig-small.h ../corelib/global/qendian.h ../corelib/global/qfeatures.h ../corelib/global/qglobal.h ../corelib/global/qlibraryinfo.h ../corelib/global/qnamespace.h ../corelib/global/qnumeric.h ../corelib/global/qt_windows.h ../corelib/global/qconfig.h ../corelib/codecs/qtextcodec.h ../corelib/codecs/qtextcodecplugin.h ../../include/QtCore/QtCore
+ SYNCQT.HEADER_CLASSES = ../../include/QtCore/QAbstractEventDispatcher ../../include/QtCore/QModelIndex ../../include/QtCore/QPersistentModelIndex ../../include/QtCore/QModelIndexList ../../include/QtCore/QAbstractItemModel ../../include/QtCore/QAbstractTableModel ../../include/QtCore/QAbstractListModel ../../include/QtCore/QBasicTimer ../../include/QtCore/QCoreApplication ../../include/QtCore/QtCleanUpFunction ../../include/QtCore/QEvent ../../include/QtCore/QTimerEvent ../../include/QtCore/QChildEvent ../../include/QtCore/QCustomEvent ../../include/QtCore/QDynamicPropertyChangeEvent ../../include/QtCore/QEventLoop ../../include/QtCore/QMetaMethod ../../include/QtCore/QMetaEnum ../../include/QtCore/QMetaProperty ../../include/QtCore/QMetaClassInfo ../../include/QtCore/QMetaType ../../include/QtCore/QMetaTypeId ../../include/QtCore/QMetaTypeId2 ../../include/QtCore/QMimeData ../../include/QtCore/QObjectList ../../include/QtCore/QObjectData ../../include/QtCore/QObject ../../include/QtCore/QObjectUserData ../../include/QtCore/QObjectCleanupHandler ../../include/QtCore/QGenericArgument ../../include/QtCore/QGenericReturnArgument ../../include/QtCore/QArgument ../../include/QtCore/QReturnArgument ../../include/QtCore/QMetaObject ../../include/QtCore/QMetaObjectAccessor ../../include/QtCore/QMetaObjectExtraData ../../include/QtCore/QPointer ../../include/QtCore/QSharedMemory ../../include/QtCore/QSignalMapper ../../include/QtCore/QSocketNotifier ../../include/QtCore/QSystemSemaphore ../../include/QtCore/QTimer ../../include/QtCore/QTranslator ../../include/QtCore/QVariant ../../include/QtCore/QVariantList ../../include/QtCore/QVariantMap ../../include/QtCore/QVariantHash ../../include/QtCore/QVariantComparisonHelper ../../include/QtCore/QAbstractAnimation ../../include/QtCore/QAnimationDriver ../../include/QtCore/QAnimationGroup ../../include/QtCore/QParallelAnimationGroup ../../include/QtCore/QPauseAnimation ../../include/QtCore/QPropertyAnimation ../../include/QtCore/QSequentialAnimationGroup ../../include/QtCore/QVariantAnimation ../../include/QtCore/QtAlgorithms ../../include/QtCore/QBitArray ../../include/QtCore/QBitRef ../../include/QtCore/QByteArray ../../include/QtCore/QByteRef ../../include/QtCore/QByteArrayMatcher ../../include/QtCore/QCache ../../include/QtCore/QLatin1Char ../../include/QtCore/QChar ../../include/QtCore/QtContainerFwd ../../include/QtCore/QContiguousCacheData ../../include/QtCore/QContiguousCacheTypedData ../../include/QtCore/QContiguousCache ../../include/QtCore/QCryptographicHash ../../include/QtCore/QDate ../../include/QtCore/QTime ../../include/QtCore/QDateTime ../../include/QtCore/QEasingCurve ../../include/QtCore/QElapsedTimer ../../include/QtCore/QHashData ../../include/QtCore/QHashDummyValue ../../include/QtCore/QHashDummyNode ../../include/QtCore/QHashNode ../../include/QtCore/QHash ../../include/QtCore/QMultiHash ../../include/QtCore/QHashIterator ../../include/QtCore/QMutableHashIterator ../../include/QtCore/QLine ../../include/QtCore/QLineF ../../include/QtCore/QLinkedListData ../../include/QtCore/QLinkedListNode ../../include/QtCore/QLinkedList ../../include/QtCore/QLinkedListIterator ../../include/QtCore/QMutableLinkedListIterator ../../include/QtCore/QListData ../../include/QtCore/QList ../../include/QtCore/QListIterator ../../include/QtCore/QMutableListIterator ../../include/QtCore/QSystemLocale ../../include/QtCore/QLocale ../../include/QtCore/QBBSystemLocaleData ../../include/QtCore/QMapData ../../include/QtCore/QMapNode ../../include/QtCore/QMapPayloadNode ../../include/QtCore/QMap ../../include/QtCore/QMultiMap ../../include/QtCore/QMapIterator ../../include/QtCore/QMutableMapIterator ../../include/QtCore/QMargins ../../include/QtCore/QPair ../../include/QtCore/QPoint ../../include/QtCore/QPointF ../../include/QtCore/QQueue ../../include/QtCore/QRect ../../include/QtCore/QRectF ../../include/QtCore/QRegExp ../../include/QtCore/QScopedPointerDeleter ../../include/QtCore/QScopedPointerArrayDeleter ../../include/QtCore/QScopedPointerPodDeleter ../../include/QtCore/QScopedPointer ../../include/QtCore/QScopedArrayPointer ../../include/QtCore/QScopedValueRollback ../../include/QtCore/QSet ../../include/QtCore/QSetIterator ../../include/QtCore/QMutableSetIterator ../../include/QtCore/QSharedData ../../include/QtCore/QSharedDataPointer ../../include/QtCore/QExplicitlySharedDataPointer ../../include/QtCore/QSharedPointer ../../include/QtCore/QWeakPointer ../../include/QtCore/QSize ../../include/QtCore/QSizeF ../../include/QtCore/QStack ../../include/QtCore/QStdWString ../../include/QtCore/QString ../../include/QtCore/QLatin1String ../../include/QtCore/QCharRef ../../include/QtCore/QConstString ../../include/QtCore/QStringRef ../../include/QtCore/QLatin1Literal ../../include/QtCore/QAbstractConcatenable ../../include/QtCore/QConcatenable ../../include/QtCore/QStringBuilder ../../include/QtCore/QStringListIterator ../../include/QtCore/QMutableStringListIterator ../../include/QtCore/QStringList ../../include/QtCore/QStringMatcher ../../include/QtCore/QTextBoundaryFinder ../../include/QtCore/QTimeLine ../../include/QtCore/QVarLengthArray ../../include/QtCore/QVectorData ../../include/QtCore/QVectorTypedData ../../include/QtCore/QVector ../../include/QtCore/QVectorIterator ../../include/QtCore/QMutableVectorIterator ../../include/QtCore/QFactoryInterface ../../include/QtCore/QLibrary ../../include/QtCore/QtPlugin ../../include/QtCore/QtPluginInstanceFunction ../../include/QtCore/QPluginLoader ../../include/QtCore/QUuid ../../include/QtCore/QXmlStreamStringRef ../../include/QtCore/QXmlStreamAttribute ../../include/QtCore/QXmlStreamAttributes ../../include/QtCore/QXmlStreamNamespaceDeclaration ../../include/QtCore/QXmlStreamNamespaceDeclarations ../../include/QtCore/QXmlStreamNotationDeclaration ../../include/QtCore/QXmlStreamNotationDeclarations ../../include/QtCore/QXmlStreamEntityDeclaration ../../include/QtCore/QXmlStreamEntityDeclarations ../../include/QtCore/QXmlStreamEntityResolver ../../include/QtCore/QXmlStreamReader ../../include/QtCore/QXmlStreamWriter ../../include/QtCore/QAtomicInt ../../include/QtCore/QAtomicPointer ../../include/QtCore/QBasicAtomicInt ../../include/QtCore/QBasicAtomicPointer ../../include/QtCore/QMutex ../../include/QtCore/QMutexLocker ../../include/QtCore/QMutexData ../../include/QtCore/QReadWriteLock ../../include/QtCore/QReadLocker ../../include/QtCore/QWriteLocker ../../include/QtCore/QSemaphore ../../include/QtCore/QThread ../../include/QtCore/QThreadStorageData ../../include/QtCore/QThreadStorage ../../include/QtCore/QWaitCondition ../../include/QtCore/QAbstractState ../../include/QtCore/QAbstractTransition ../../include/QtCore/QEventTransition ../../include/QtCore/QFinalState ../../include/QtCore/QHistoryState ../../include/QtCore/QSignalTransition ../../include/QtCore/QState ../../include/QtCore/QStateMachine ../../include/QtCore/QFuture ../../include/QtCore/QFutureIterator ../../include/QtCore/QMutableFutureIterator ../../include/QtCore/QFutureInterfaceBase ../../include/QtCore/QFutureInterface ../../include/QtCore/QFutureSynchronizer ../../include/QtCore/QFutureWatcherBase ../../include/QtCore/QFutureWatcher ../../include/QtCore/QRunnable ../../include/QtCore/QtConcurrentFilter ../../include/QtCore/QtConcurrentMap ../../include/QtCore/QtConcurrentRun ../../include/QtCore/QThreadPool ../../include/QtCore/QAbstractFileEngine ../../include/QtCore/QAbstractFileEngineHandler ../../include/QtCore/QAbstractFileEngineIterator ../../include/QtCore/QBuffer ../../include/QtCore/QDataStream ../../include/QtCore/QtDebug ../../include/QtCore/QDebug ../../include/QtCore/QNoDebug ../../include/QtCore/QDir ../../include/QtCore/QDirIterator ../../include/QtCore/QFile ../../include/QtCore/QFileInfo ../../include/QtCore/QFileInfoList ../../include/QtCore/QFileInfoListIterator ../../include/QtCore/QFileSystemWatcher ../../include/QtCore/QFSFileEngine ../../include/QtCore/QIODevice ../../include/QtCore/Q_PID ../../include/QtCore/QProcessEnvironment ../../include/QtCore/QProcess ../../include/QtCore/QResource ../../include/QtCore/QSettings ../../include/QtCore/QTemporaryFile ../../include/QtCore/QTextStream ../../include/QtCore/QTextStreamFunction ../../include/QtCore/QTextStreamManipulator ../../include/QtCore/QTS ../../include/QtCore/QTextIStream ../../include/QtCore/QTextOStream ../../include/QtCore/QUrl ../../include/QtCore/QtEndian ../../include/QtCore/QtGlobal ../../include/QtCore/QIntegerForSize ../../include/QtCore/QNoImplicitBoolCast ../../include/QtCore/Q_INT8 ../../include/QtCore/Q_UINT8 ../../include/QtCore/Q_INT16 ../../include/QtCore/Q_UINT16 ../../include/QtCore/Q_INT32 ../../include/QtCore/Q_UINT32 ../../include/QtCore/Q_INT64 ../../include/QtCore/Q_UINT64 ../../include/QtCore/Q_LLONG ../../include/QtCore/Q_ULLONG ../../include/QtCore/Q_LONG ../../include/QtCore/Q_ULONG ../../include/QtCore/QSysInfo ../../include/QtCore/QtMsgHandler ../../include/QtCore/QGlobalStatic ../../include/QtCore/QGlobalStaticDeleter ../../include/QtCore/QBool ../../include/QtCore/QTypeInfo ../../include/QtCore/QFlag ../../include/QtCore/QIncompatibleFlag ../../include/QtCore/QFlags ../../include/QtCore/QForeachContainer ../../include/QtCore/QForeachContainerBase ../../include/QtCore/QLibraryInfo ../../include/QtCore/Qt ../../include/QtCore/QInternal ../../include/QtCore/QCOORD ../../include/QtCore/QtConfig ../../include/QtCore/QTextCodec ../../include/QtCore/QTextEncoder ../../include/QtCore/QTextDecoder ../../include/QtCore/QTextCodecFactoryInterface ../../include/QtCore/QTextCodecPlugin
+ SYNCQT.PRIVATE_HEADER_FILES = ../corelib/kernel/qabstracteventdispatcher_p.h ../corelib/kernel/qabstractitemmodel_p.h ../corelib/kernel/qcore_mac_p.h ../corelib/kernel/qcore_symbian_p.h ../corelib/kernel/qcore_unix_p.h ../corelib/kernel/qcoreapplication_p.h ../corelib/kernel/qcorecmdlineargs_p.h ../corelib/kernel/qcoreglobaldata_p.h ../corelib/kernel/qcrashhandler_p.h ../corelib/kernel/qeventdispatcher_blackberry_p.h ../corelib/kernel/qeventdispatcher_glib_p.h ../corelib/kernel/qeventdispatcher_symbian_p.h ../corelib/kernel/qeventdispatcher_unix_p.h ../corelib/kernel/qeventdispatcher_win_p.h ../corelib/kernel/qfunctions_p.h ../corelib/kernel/qmetaobject_p.h ../corelib/kernel/qobject_p.h ../corelib/kernel/qsharedmemory_p.h ../corelib/kernel/qsystemerror_p.h ../corelib/kernel/qsystemsemaphore_p.h ../corelib/kernel/qtranslator_p.h ../corelib/kernel/qvariant_p.h ../corelib/kernel/qwineventnotifier_p.h ../corelib/animation/qabstractanimation_p.h ../corelib/animation/qanimationgroup_p.h ../corelib/animation/qparallelanimationgroup_p.h ../corelib/animation/qpropertyanimation_p.h ../corelib/animation/qsequentialanimationgroup_p.h ../corelib/animation/qvariantanimation_p.h ../corelib/tools/qbytedata_p.h ../corelib/tools/qdatetime_p.h ../corelib/tools/qharfbuzz_p.h ../corelib/tools/qlocale_data_p.h ../corelib/tools/qlocale_p.h ../corelib/tools/qlocale_tools_p.h ../corelib/tools/qpodlist_p.h ../corelib/tools/qringbuffer_p.h ../corelib/tools/qscopedpointer_p.h ../corelib/tools/qsimd_p.h ../corelib/tools/qtools_p.h ../corelib/tools/qunicodetables_p.h ../corelib/plugin/qelfparser_p.h ../corelib/plugin/qfactoryloader_p.h ../corelib/plugin/qlibrary_p.h ../corelib/plugin/qsystemlibrary_p.h ../corelib/xml/qxmlstream_p.h ../corelib/xml/qxmlutils_p.h ../corelib/thread/qmutex_p.h ../corelib/thread/qmutexpool_p.h ../corelib/thread/qorderedmutexlocker_p.h ../corelib/thread/qreadwritelock_p.h ../corelib/thread/qthread_p.h ../corelib/statemachine/qabstractstate_p.h ../corelib/statemachine/qabstracttransition_p.h ../corelib/statemachine/qeventtransition_p.h ../corelib/statemachine/qhistorystate_p.h ../corelib/statemachine/qsignaleventgenerator_p.h ../corelib/statemachine/qsignaltransition_p.h ../corelib/statemachine/qstate_p.h ../corelib/statemachine/qstatemachine_p.h ../corelib/concurrent/qfutureinterface_p.h ../corelib/concurrent/qfuturewatcher_p.h ../corelib/concurrent/qthreadpool_p.h ../corelib/io/qabstractfileengine_p.h ../corelib/io/qdatastream_p.h ../corelib/io/qdataurl_p.h ../corelib/io/qdir_p.h ../corelib/io/qfile_p.h ../corelib/io/qfileinfo_p.h ../corelib/io/qfilesystemengine_p.h ../corelib/io/qfilesystementry_p.h ../corelib/io/qfilesystemiterator_p.h ../corelib/io/qfilesystemmetadata_p.h ../corelib/io/qfilesystemwatcher_dnotify_p.h ../corelib/io/qfilesystemwatcher_fsevents_p.h ../corelib/io/qfilesystemwatcher_inotify_p.h ../corelib/io/qfilesystemwatcher_kqueue_p.h ../corelib/io/qfilesystemwatcher_p.h ../corelib/io/qfilesystemwatcher_symbian_p.h ../corelib/io/qfilesystemwatcher_win_p.h ../corelib/io/qfsfileengine_iterator_p.h ../corelib/io/qfsfileengine_p.h ../corelib/io/qiodevice_p.h ../corelib/io/qnoncontiguousbytedevice_p.h ../corelib/io/qprocess_p.h ../corelib/io/qresource_iterator_p.h ../corelib/io/qresource_p.h ../corelib/io/qsettings_p.h ../corelib/io/qtldurl_p.h ../corelib/io/qurltlds_p.h ../corelib/io/qwindowspipewriter_p.h ../corelib/global/qnumeric_p.h ../corelib/global/qt_pch.h ../corelib/codecs/qfontlaocodec_p.h ../corelib/codecs/qiconvcodec_p.h ../corelib/codecs/qisciicodec_p.h ../corelib/codecs/qlatincodec_p.h ../corelib/codecs/qsimplecodec_p.h ../corelib/codecs/qtextcodec_p.h ../corelib/codecs/qtsciicodec_p.h ../corelib/codecs/qutfcodec_p.h
+diff -up qt-everywhere-opensource-src-4.8.7/include/QtCore/qatomic_aarch64.h.aarch64 qt-everywhere-opensource-src-4.8.7/include/QtCore/qatomic_aarch64.h
+--- qt-everywhere-opensource-src-4.8.7/include/QtCore/qatomic_aarch64.h.aarch64 2015-05-08 21:48:32.715057744 -0500
++++ qt-everywhere-opensource-src-4.8.7/include/QtCore/qatomic_aarch64.h 2015-05-08 21:48:32.715057744 -0500
+@@ -0,0 +1 @@
++#include "../../src/corelib/arch/qatomic_aarch64.h"
+diff -up qt-everywhere-opensource-src-4.8.7/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pri.aarch64 qt-everywhere-opensource-src-4.8.7/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pri
+--- qt-everywhere-opensource-src-4.8.7/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pri.aarch64 2015-05-07 09:14:47.000000000 -0500
++++ qt-everywhere-opensource-src-4.8.7/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pri 2015-05-08 21:48:33.268061013 -0500
+@@ -66,6 +66,12 @@ contains(JAVASCRIPTCORE_JIT,no) {
+ }
+ }
+
++# Hack around AARCH64 fail wrt JSValue.h
++equals(QT_ARCH, aarch64) {
++ message("JavaScriptCore aarch64 hack: -fpermissive")
++ QMAKE_CXXFLAGS += -fpermissive
++}
++
+ wince* {
+ INCLUDEPATH += $$QT_SOURCE_TREE/src/3rdparty/ce-compat
+ SOURCES += $$QT_SOURCE_TREE/src/3rdparty/ce-compat/ce_time.c
+diff -up qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/JavaScriptCore/JavaScriptCore.pri.aarch64 qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/JavaScriptCore/JavaScriptCore.pri
+--- qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/JavaScriptCore/JavaScriptCore.pri.aarch64 2015-05-07 09:14:45.000000000 -0500
++++ qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/JavaScriptCore/JavaScriptCore.pri 2015-05-08 21:48:33.268061013 -0500
+@@ -63,6 +63,12 @@ contains (CONFIG, text_breaking_with_icu
+ DEFINES += WTF_USE_QT_ICU_TEXT_BREAKING=1
+ }
+
++# Hack around AARCH64 fail wrt JSValue.h
++equals(QT_ARCH, aarch64) {
++ message("JavaScriptCore aarch64 hack: -fpermissive")
++ QMAKE_CXXFLAGS += -fpermissive
++}
++
+ wince* {
+ INCLUDEPATH += $$QT_SOURCE_TREE/src/3rdparty/ce-compat
+ INCLUDEPATH += $$PWD/../JavaScriptCore/os-win32
+diff -up qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h.aarch64 qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h
+--- qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h.aarch64 2015-05-07 09:14:45.000000000 -0500
++++ qt-everywhere-opensource-src-4.8.7/src/3rdparty/webkit/Source/JavaScriptCore/wtf/Platform.h 2015-05-08 21:48:33.269061019 -0500
+@@ -369,7 +369,16 @@
+
+ #endif /* ARM */
+
+-#if CPU(ARM) || CPU(MIPS) || CPU(SH4)
++/* CPU(AARCH64) - AArch64 */
++#if defined(__aarch64__)
++#define WTF_CPU_AARCH64 1
++#if defined(__AARCH64EB__)
++#define WTF_CPU_BIG_ENDIAN 1
++#endif
++#endif
++
++/* Not sure about this one, qt5-qtwebkit doesn't include it -- rex */
++#if CPU(ARM) || CPU(MIPS) || CPU(SH4) || CPU(AARCH64)
+ #define WTF_CPU_NEEDS_ALIGNED_ACCESS 1
+ #endif
+
+@@ -1003,7 +1012,7 @@
+ || CPU(SPARC64) \
+ || CPU(S390X) \
+ || CPU(PPC64) \
+- || CPU(MIPS64)
++ || CPU(MIPS64) || CPU(AARCH64)
+ #define WTF_USE_JSVALUE64 1
+ #else
+ #define WTF_USE_JSVALUE32_64 1
+diff -up qt-everywhere-opensource-src-4.8.7/src/corelib/arch/aarch64/qatomic_aarch64.cpp.aarch64 qt-everywhere-opensource-src-4.8.7/src/corelib/arch/aarch64/qatomic_aarch64.cpp
+--- qt-everywhere-opensource-src-4.8.7/src/corelib/arch/aarch64/qatomic_aarch64.cpp.aarch64 2015-05-08 21:48:33.269061019 -0500
++++ qt-everywhere-opensource-src-4.8.7/src/corelib/arch/aarch64/qatomic_aarch64.cpp 2015-05-08 21:48:33.269061019 -0500
+@@ -0,0 +1,70 @@
++/****************************************************************************
++**
++** Copyright (C) 2012, 2013 Digia Plc and/or its subsidiary(-ies).
++** Contact: http://www.qt-project.org/legal
++**
++** This file is part of the QtCore module of the Qt Toolkit.
++**
++** $QT_BEGIN_LICENSE:LGPL$
++** Commercial License Usage
++** Licensees holding valid commercial Qt licenses may use this file in
++** accordance with the commercial license agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and Digia. For licensing terms and
++** conditions see http://qt.digia.com/licensing. For further information
++** use the contact form at http://qt.digia.com/contact-us.
++**
++** GNU Lesser General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU Lesser
++** General Public License version 2.1 as published by the Free Software
++** Foundation and appearing in the file LICENSE.LGPL included in the
++** packaging of this file. Please review the following information to
++** ensure the GNU Lesser General Public License version 2.1 requirements
++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
++**
++** In addition, as a special exception, Digia gives you certain additional
++** rights. These rights are described in the Digia Qt LGPL Exception
++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
++**
++** GNU General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU
++** General Public License version 3.0 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file. Please review the following information to
++** ensure the GNU General Public License version 3.0 requirements will be
++** met: http://www.gnu.org/copyleft/gpl.html.
++**
++**
++** $QT_END_LICENSE$
++**
++****************************************************************************/
++
++#include <QtCore/qglobal.h>
++
++#include <unistd.h>
++#ifdef _POSIX_PRIORITY_SCHEDULING
++# include <sched.h>
++#endif
++#include <time.h>
++
++QT_BEGIN_NAMESPACE
++
++QT_USE_NAMESPACE
++
++Q_CORE_EXPORT void qt_atomic_yield(int *count)
++{
++#ifdef _POSIX_PRIORITY_SCHEDULING
++ if((*count)++ < 50) {
++ sched_yield();
++ } else
++#endif
++ {
++ struct timespec tm;
++ tm.tv_sec = 0;
++ tm.tv_nsec = 2000001;
++ nanosleep(&tm, NULL);
++ *count = 0;
++ }
++}
++
++QT_END_NAMESPACE
+diff -up qt-everywhere-opensource-src-4.8.7/src/corelib/arch/arch.pri.aarch64 qt-everywhere-opensource-src-4.8.7/src/corelib/arch/arch.pri
+--- qt-everywhere-opensource-src-4.8.7/src/corelib/arch/arch.pri.aarch64 2015-05-07 09:14:48.000000000 -0500
++++ qt-everywhere-opensource-src-4.8.7/src/corelib/arch/arch.pri 2015-05-08 21:48:33.270061025 -0500
+@@ -31,7 +31,9 @@ integrity:HEADERS += arch/qatomic_integr
+ arch/qatomic_s390.h \
+ arch/qatomic_x86_64.h \
+ arch/qatomic_sh.h \
+- arch/qatomic_sh4a.h
++ arch/qatomic_sh4a.h \
++ arch/qatomic_aarch64.h \
++
+
+ QT_ARCH_CPP = $$QT_SOURCE_TREE/src/corelib/arch/$$QT_ARCH
+ DEPENDPATH += $$QT_ARCH_CPP
+diff -up qt-everywhere-opensource-src-4.8.7/src/corelib/arch/qatomic_aarch64.h.aarch64 qt-everywhere-opensource-src-4.8.7/src/corelib/arch/qatomic_aarch64.h
+--- qt-everywhere-opensource-src-4.8.7/src/corelib/arch/qatomic_aarch64.h.aarch64 2015-05-08 21:48:33.270061025 -0500
++++ qt-everywhere-opensource-src-4.8.7/src/corelib/arch/qatomic_aarch64.h 2015-05-08 21:48:33.270061025 -0500
+@@ -0,0 +1,335 @@
++/****************************************************************************
++**
++** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
++** Contact: http://www.qt-project.org/legal
++**
++** This file is part of the QtCore module of the Qt Toolkit.
++**
++** $QT_BEGIN_LICENSE:LGPL$
++** Commercial License Usage
++** Licensees holding valid commercial Qt licenses may use this file in
++** accordance with the commercial license agreement provided with the
++** Software or, alternatively, in accordance with the terms contained in
++** a written agreement between you and Digia. For licensing terms and
++** conditions see http://qt.digia.com/licensing. For further information
++** use the contact form at http://qt.digia.com/contact-us.
++**
++** GNU Lesser General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU Lesser
++** General Public License version 2.1 as published by the Free Software
++** Foundation and appearing in the file LICENSE.LGPL included in the
++** packaging of this file. Please review the following information to
++** ensure the GNU Lesser General Public License version 2.1 requirements
++** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
++**
++** In addition, as a special exception, Digia gives you certain additional
++** rights. These rights are described in the Digia Qt LGPL Exception
++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
++**
++** GNU General Public License Usage
++** Alternatively, this file may be used under the terms of the GNU
++** General Public License version 3.0 as published by the Free Software
++** Foundation and appearing in the file LICENSE.GPL included in the
++** packaging of this file. Please review the following information to
++** ensure the GNU General Public License version 3.0 requirements will be
++** met: http://www.gnu.org/copyleft/gpl.html.
++**
++**
++** $QT_END_LICENSE$
++**
++****************************************************************************/
++
++#ifndef QATOMIC_AARCH64_H
++#define QATOMIC_AARCH64_H
++
++QT_BEGIN_HEADER
++
++QT_BEGIN_NAMESPACE
++
++#define Q_ATOMIC_INT_REFERENCE_COUNTING_IS_ALWAYS_NATIVE
++
++inline bool QBasicAtomicInt::isReferenceCountingNative()
++{ return true; }
++inline bool QBasicAtomicInt::isReferenceCountingWaitFree()
++{ return false; }
++
++#define Q_ATOMIC_INT_TEST_AND_SET_IS_ALWAYS_NATIVE
++
++inline bool QBasicAtomicInt::isTestAndSetNative()
++{ return true; }
++inline bool QBasicAtomicInt::isTestAndSetWaitFree()
++{ return false; }
++
++#define Q_ATOMIC_INT_FETCH_AND_STORE_IS_ALWAYS_NATIVE
++
++inline bool QBasicAtomicInt::isFetchAndStoreNative()
++{ return true; }
++inline bool QBasicAtomicInt::isFetchAndStoreWaitFree()
++{ return false; }
++
++#define Q_ATOMIC_INT_FETCH_AND_ADD_IS_ALWAYS_NATIVE
++
++inline bool QBasicAtomicInt::isFetchAndAddNative()
++{ return true; }
++inline bool QBasicAtomicInt::isFetchAndAddWaitFree()
++{ return false; }
++
++#define Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE
++
++template <typename T>
++Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isTestAndSetNative()
++{ return true; }
++template <typename T>
++Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isTestAndSetWaitFree()
++{ return false; }
++
++#define Q_ATOMIC_POINTER_FETCH_AND_STORE_IS_ALWAYS_NATIVE
++
++template <typename T>
++Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndStoreNative()
++{ return true; }
++template <typename T>
++Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndStoreWaitFree()
++{ return false; }
++
++#define Q_ATOMIC_POINTER_FETCH_AND_ADD_IS_ALWAYS_NATIVE
++
++template <typename T>
++Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndAddNative()
++{ return true; }
++template <typename T>
++Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndAddWaitFree()
++{ return false; }
++
++#ifndef Q_DATA_MEMORY_BARRIER
++# define Q_DATA_MEMORY_BARRIER asm volatile("dmb sy\n":::"memory")
++#endif
++#ifndef Q_COMPILER_MEMORY_BARRIER
++# define Q_COMPILER_MEMORY_BARRIER asm volatile("":::"memory")
++#endif
++
++inline bool QBasicAtomicInt::ref()
++{
++ int newValue;
++
++ Q_COMPILER_MEMORY_BARRIER;
++ newValue = __atomic_add_fetch(&_q_value, 1, __ATOMIC_ACQ_REL);
++ Q_COMPILER_MEMORY_BARRIER;
++
++ return newValue != 0;
++}
++
++inline bool QBasicAtomicInt::deref()
++{
++ int newValue;
++
++ Q_COMPILER_MEMORY_BARRIER;
++ newValue = __atomic_sub_fetch(&_q_value, 1, __ATOMIC_ACQ_REL);
++ Q_COMPILER_MEMORY_BARRIER;
++
++ return newValue != 0;
++}
++
++inline bool QBasicAtomicInt::testAndSetRelaxed(int expectedValue, int newValue)
++{
++ bool val;
++
++ Q_COMPILER_MEMORY_BARRIER;
++ val = __atomic_compare_exchange_n (&_q_value, &expectedValue, newValue,
++ false, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
++ Q_COMPILER_MEMORY_BARRIER;
++ return val;
++}
++
++inline int QBasicAtomicInt::fetchAndStoreRelaxed(int newValue)
++{
++ int val;
++ Q_COMPILER_MEMORY_BARRIER;
++ val = __atomic_exchange_n(&_q_value, newValue, __ATOMIC_RELAXED);
++ Q_COMPILER_MEMORY_BARRIER;
++ return val;
++}
++
++inline int QBasicAtomicInt::fetchAndAddRelaxed(int valueToAdd)
++{
++ int val;
++ Q_COMPILER_MEMORY_BARRIER;
++ val = __atomic_fetch_add(&_q_value, valueToAdd, __ATOMIC_RELAXED);
++ Q_COMPILER_MEMORY_BARRIER;
++ return val;
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelaxed(T *expectedValue, T *newValue)
++{
++ bool val;
++ Q_COMPILER_MEMORY_BARRIER;
++ val = __atomic_compare_exchange_n (&_q_value, &expectedValue, newValue,
++ false, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
++ Q_COMPILER_MEMORY_BARRIER;
++ return val;
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelaxed(T *newValue)
++{
++ T *val;
++ Q_COMPILER_MEMORY_BARRIER;
++ val = __atomic_exchange_n(&_q_value, newValue, __ATOMIC_RELAXED);
++ Q_COMPILER_MEMORY_BARRIER;
++ return val;
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelaxed(qptrdiff valueToAdd)
++{
++ T *val;
++ Q_COMPILER_MEMORY_BARRIER;
++ val = __atomic_fetch_add(&_q_value, valueToAdd, __ATOMIC_RELAXED);
++ Q_COMPILER_MEMORY_BARRIER;
++ return val;
++}
++
++inline bool QBasicAtomicInt::testAndSetAcquire(int expectedValue, int newValue)
++{
++ bool returnValue = testAndSetRelaxed(expectedValue, newValue);
++ Q_DATA_MEMORY_BARRIER;
++ return returnValue;
++}
++
++inline bool QBasicAtomicInt::testAndSetRelease(int expectedValue, int newValue)
++{
++ Q_DATA_MEMORY_BARRIER;
++ return testAndSetRelaxed(expectedValue, newValue);
++}
++
++inline bool QBasicAtomicInt::testAndSetOrdered(int expectedValue, int newValue)
++{
++ Q_DATA_MEMORY_BARRIER;
++ bool returnValue = testAndSetRelaxed(expectedValue, newValue);
++ Q_COMPILER_MEMORY_BARRIER;
++ return returnValue;
++}
++
++inline int QBasicAtomicInt::fetchAndStoreAcquire(int newValue)
++{
++ int returnValue = fetchAndStoreRelaxed(newValue);
++ Q_DATA_MEMORY_BARRIER;
++ return returnValue;
++}
++
++inline int QBasicAtomicInt::fetchAndStoreRelease(int newValue)
++{
++ Q_DATA_MEMORY_BARRIER;
++ return fetchAndStoreRelaxed(newValue);
++}
++
++inline int QBasicAtomicInt::fetchAndStoreOrdered(int newValue)
++{
++ Q_DATA_MEMORY_BARRIER;
++ int returnValue = fetchAndStoreRelaxed(newValue);
++ Q_COMPILER_MEMORY_BARRIER;
++ return returnValue;
++}
++
++inline int QBasicAtomicInt::fetchAndAddAcquire(int valueToAdd)
++{
++ int returnValue = fetchAndAddRelaxed(valueToAdd);
++ Q_DATA_MEMORY_BARRIER;
++ return returnValue;
++}
++
++inline int QBasicAtomicInt::fetchAndAddRelease(int valueToAdd)
++{
++ Q_DATA_MEMORY_BARRIER;
++ return fetchAndAddRelaxed(valueToAdd);
++}
++
++inline int QBasicAtomicInt::fetchAndAddOrdered(int valueToAdd)
++{
++ Q_DATA_MEMORY_BARRIER;
++ int returnValue = fetchAndAddRelaxed(valueToAdd);
++ Q_COMPILER_MEMORY_BARRIER;
++ return returnValue;
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetAcquire(T *expectedValue, T *newValue)
++{
++ bool returnValue = testAndSetRelaxed(expectedValue, newValue);
++ Q_DATA_MEMORY_BARRIER;
++ return returnValue;
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetRelease(T *expectedValue, T *newValue)
++{
++ Q_DATA_MEMORY_BARRIER;
++ return testAndSetRelaxed(expectedValue, newValue);
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::testAndSetOrdered(T *expectedValue, T *newValue)
++{
++ Q_DATA_MEMORY_BARRIER;
++ bool returnValue = testAndSetAcquire(expectedValue, newValue);
++ Q_COMPILER_MEMORY_BARRIER;
++ return returnValue;
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreAcquire(T *newValue)
++{
++ T *returnValue = fetchAndStoreRelaxed(newValue);
++ Q_DATA_MEMORY_BARRIER;
++ return returnValue;
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreRelease(T *newValue)
++{
++ Q_DATA_MEMORY_BARRIER;
++ return fetchAndStoreRelaxed(newValue);
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndStoreOrdered(T *newValue)
++{
++ Q_DATA_MEMORY_BARRIER;
++ T *returnValue = fetchAndStoreRelaxed(newValue);
++ Q_COMPILER_MEMORY_BARRIER;
++ return returnValue;
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddAcquire(qptrdiff valueToAdd)
++{
++ T *returnValue = fetchAndAddRelaxed(valueToAdd);
++ Q_DATA_MEMORY_BARRIER;
++ return returnValue;
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddRelease(qptrdiff valueToAdd)
++{
++ Q_DATA_MEMORY_BARRIER;
++ return fetchAndAddRelaxed(valueToAdd);
++}
++
++template <typename T>
++Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueToAdd)
++{
++ Q_DATA_MEMORY_BARRIER;
++ T *returnValue = fetchAndAddRelaxed(valueToAdd);
++ Q_COMPILER_MEMORY_BARRIER;
++ return returnValue;
++}
++
++#undef Q_DATA_MEMORY_BARRIER
++#undef Q_COMPILER_MEMORY_BARRIER
++
++QT_END_NAMESPACE
++
++QT_END_HEADER
++
++#endif // QATOMIC_AARCH64_H
+diff -up qt-everywhere-opensource-src-4.8.7/src/corelib/arch/qatomic_arch.h.aarch64 qt-everywhere-opensource-src-4.8.7/src/corelib/arch/qatomic_arch.h
+--- qt-everywhere-opensource-src-4.8.7/src/corelib/arch/qatomic_arch.h.aarch64 2015-05-07 09:14:48.000000000 -0500
++++ qt-everywhere-opensource-src-4.8.7/src/corelib/arch/qatomic_arch.h 2015-05-08 21:48:33.271061031 -0500
+@@ -94,6 +94,8 @@ QT_BEGIN_HEADER
+ # include "QtCore/qatomic_sh4a.h"
+ #elif defined(QT_ARCH_NACL)
+ # include "QtCore/qatomic_generic.h"
++#elif defined(QT_ARCH_AARCH64)
++# include "QtCore/qatomic_aarch64.h"
+ #else
+ # error "Qt has not been ported to this architecture"
+ #endif
diff --git a/subprojects/shared-modules/qt4/qt4-openssl-1.1.patch b/subprojects/shared-modules/qt4/qt4-openssl-1.1.patch
new file mode 100644
index 00000000..87baef87
--- /dev/null
+++ b/subprojects/shared-modules/qt4/qt4-openssl-1.1.patch
@@ -0,0 +1,409 @@
+Description: Compile with openssl-1.1.0
+ * Most changes are related to openssl structures are now opaque.
+ * The network/ssl threading setup has been disabled because the
+ old openssl threading model has been removed and is apparently
+ no longer needed.
+ * A number of new functions had to be imported (see changes to
+ src/network/ssl/qsslsocket_openssl_symbols.cpp)
+Author: Gert Wollny <gw.fossdev@gmail.com>
+Last-Update: 2016-06-28
+Bug-Debian: http://bugs.debian.org/828522
+
+--- a/src/network/ssl/qsslcertificate.cpp
++++ b/src/network/ssl/qsslcertificate.cpp
+@@ -259,10 +259,10 @@
+ QByteArray QSslCertificate::version() const
+ {
+ QMutexLocker lock(QMutexPool::globalInstanceGet(d.data()));
+- if (d->versionString.isEmpty() && d->x509)
++ if (d->versionString.isEmpty() && d->x509) {
+ d->versionString =
+- QByteArray::number(qlonglong(q_ASN1_INTEGER_get(d->x509->cert_info->version)) + 1);
+-
++ QByteArray::number(qlonglong(q_X509_get_version(d->x509)) + 1);
++ }
+ return d->versionString;
+ }
+
+@@ -276,7 +276,7 @@
+ {
+ QMutexLocker lock(QMutexPool::globalInstanceGet(d.data()));
+ if (d->serialNumberString.isEmpty() && d->x509) {
+- ASN1_INTEGER *serialNumber = d->x509->cert_info->serialNumber;
++ ASN1_INTEGER *serialNumber = q_X509_get_serialNumber(d->x509);
+ // if we cannot convert to a long, just output the hexadecimal number
+ if (serialNumber->length > 4) {
+ QByteArray hexString;
+@@ -489,24 +489,33 @@
+ QSslKey key;
+
+ key.d->type = QSsl::PublicKey;
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ X509_PUBKEY *xkey = d->x509->cert_info->key;
++#else
++ X509_PUBKEY *xkey = q_X509_get_X509_PUBKEY(d->x509);
++#endif
+ EVP_PKEY *pkey = q_X509_PUBKEY_get(xkey);
+ Q_ASSERT(pkey);
+
+- if (q_EVP_PKEY_type(pkey->type) == EVP_PKEY_RSA) {
++ int key_id;
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
++ key_id = q_EVP_PKEY_type(pkey->type);
++#else
++ key_id = q_EVP_PKEY_base_id(pkey);
++#endif
++ if (key_id == EVP_PKEY_RSA) {
+ key.d->rsa = q_EVP_PKEY_get1_RSA(pkey);
+ key.d->algorithm = QSsl::Rsa;
+ key.d->isNull = false;
+- } else if (q_EVP_PKEY_type(pkey->type) == EVP_PKEY_DSA) {
++ } else if (key_id == EVP_PKEY_DSA) {
+ key.d->dsa = q_EVP_PKEY_get1_DSA(pkey);
+ key.d->algorithm = QSsl::Dsa;
+ key.d->isNull = false;
+- } else if (q_EVP_PKEY_type(pkey->type) == EVP_PKEY_DH) {
++ } else if (key_id == EVP_PKEY_DH) {
+ // DH unsupported
+ } else {
+ // error?
+ }
+-
+ q_EVP_PKEY_free(pkey);
+ return key;
+ }
+--- a/src/network/ssl/qsslkey.cpp
++++ b/src/network/ssl/qsslkey.cpp
+@@ -321,8 +321,19 @@
+ {
+ if (d->isNull)
+ return -1;
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ return (d->algorithm == QSsl::Rsa)
+ ? q_BN_num_bits(d->rsa->n) : q_BN_num_bits(d->dsa->p);
++#else
++ if (d->algorithm == QSsl::Rsa) {
++ return q_RSA_bits(d->rsa);
++ }else{
++ BIGNUM *p = NULL;
++ q_DSA_get0_pqg(d->dsa, &p, NULL, NULL);
++ return q_BN_num_bits(p);
++ }
++#endif
++
+ }
+
+ /*!
+--- a/src/network/ssl/qsslsocket_openssl.cpp
++++ b/src/network/ssl/qsslsocket_openssl.cpp
+@@ -93,6 +93,7 @@
+ bool QSslSocketPrivate::s_loadedCiphersAndCerts = false;
+ bool QSslSocketPrivate::s_loadRootCertsOnDemand = false;
+
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ /* \internal
+
+ From OpenSSL's thread(3) manual page:
+@@ -174,6 +175,8 @@
+ }
+ } // extern "C"
+
++#endif //OPENSSL_VERSION_NUMBER >= 0x10100000L
++
+ QSslSocketBackendPrivate::QSslSocketBackendPrivate()
+ : ssl(0),
+ ctx(0),
+@@ -222,9 +225,12 @@
+ ciph.d->encryptionMethod = descriptionList.at(4).mid(4);
+ ciph.d->exportable = (descriptionList.size() > 6 && descriptionList.at(6) == QLatin1String("export"));
+
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ ciph.d->bits = cipher->strength_bits;
+ ciph.d->supportedBits = cipher->alg_bits;
+-
++#else
++ ciph.d->bits = q_SSL_CIPHER_get_bits(cipher, &ciph.d->supportedBits);
++#endif
+ }
+ return ciph;
+ }
+@@ -367,7 +373,7 @@
+ //
+ // See also: QSslContext::fromConfiguration()
+ if (caCertificate.expiryDate() >= QDateTime::currentDateTime()) {
+- q_X509_STORE_add_cert(ctx->cert_store, (X509 *)caCertificate.handle());
++ q_X509_STORE_add_cert(q_SSL_CTX_get_cert_store(ctx), (X509 *)caCertificate.handle());
+ }
+ }
+
+@@ -504,8 +510,10 @@
+ */
+ void QSslSocketPrivate::deinitialize()
+ {
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ q_CRYPTO_set_id_callback(0);
+ q_CRYPTO_set_locking_callback(0);
++#endif
+ }
+
+ /*!
+@@ -526,13 +534,17 @@
+ return false;
+
+ // Check if the library itself needs to be initialized.
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ QMutexLocker locker(openssl_locks()->initLock());
++#endif
+ if (!s_libraryLoaded) {
+ s_libraryLoaded = true;
+
+ // Initialize OpenSSL.
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ q_CRYPTO_set_id_callback(id_function);
+ q_CRYPTO_set_locking_callback(locking_function);
++#endif
+ if (q_SSL_library_init() != 1)
+ return false;
+ q_SSL_load_error_strings();
+@@ -571,7 +583,9 @@
+
+ void QSslSocketPrivate::ensureCiphersAndCertsLoaded()
+ {
+- QMutexLocker locker(openssl_locks()->initLock());
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
++ QMutexLocker locker(openssl_locks()->initLock());
++#endif
+ if (s_loadedCiphersAndCerts)
+ return;
+ s_loadedCiphersAndCerts = true;
+@@ -663,13 +677,18 @@
+ STACK_OF(SSL_CIPHER) *supportedCiphers = q_SSL_get_ciphers(mySsl);
+ for (int i = 0; i < q_sk_SSL_CIPHER_num(supportedCiphers); ++i) {
+ if (SSL_CIPHER *cipher = q_sk_SSL_CIPHER_value(supportedCiphers, i)) {
+- if (cipher->valid) {
++
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
++ if (cipher->valid) {
++#endif
+ QSslCipher ciph = QSslSocketBackendPrivate::QSslCipher_from_SSL_CIPHER(cipher);
+ if (!ciph.isNull()) {
+ if (!ciph.name().toLower().startsWith(QLatin1String("adh")))
+ ciphers << ciph;
+ }
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ }
++#endif
+ }
+ }
+
+--- a/src/network/ssl/qsslsocket_openssl_symbols_p.h
++++ b/src/network/ssl/qsslsocket_openssl_symbols_p.h
+@@ -399,7 +399,25 @@
+ PEM_ASN1_write_bio((int (*)(void*, unsigned char**))q_i2d_DSAPrivateKey,PEM_STRING_DSA,\
+ bp,(char *)x,enc,kstr,klen,cb,u)
+ #endif
++
++X509_STORE * q_SSL_CTX_get_cert_store(const SSL_CTX *ctx);
++ASN1_INTEGER * q_X509_get_serialNumber(X509 *x);
++
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ #define q_SSL_CTX_set_options(ctx,op) q_SSL_CTX_ctrl((ctx),SSL_CTRL_OPTIONS,(op),NULL)
++#define q_X509_get_version(x) X509_get_version(x)
++#else
++int q_EVP_PKEY_id(const EVP_PKEY *pkey);
++int q_EVP_PKEY_base_id(const EVP_PKEY *pkey);
++int q_SSL_CIPHER_get_bits(const SSL_CIPHER *cipher, int *alg_bits);
++long q_SSL_CTX_set_options(SSL_CTX *ctx, long options);
++long q_X509_get_version(X509 *x);
++X509_PUBKEY * q_X509_get_X509_PUBKEY(X509 *x);
++int q_RSA_bits(const RSA *rsa);
++int q_DSA_security_bits(const DSA *dsa);
++void q_DSA_get0_pqg(const DSA *d, BIGNUM **p, BIGNUM **q, BIGNUM **g);
++#endif
++
+ #define q_SKM_sk_num(type, st) ((int (*)(const STACK_OF(type) *))q_sk_num)(st)
+ #define q_SKM_sk_value(type, st,i) ((type * (*)(const STACK_OF(type) *, int))q_sk_value)(st, i)
+ #define q_sk_GENERAL_NAME_num(st) q_SKM_sk_num(GENERAL_NAME, (st))
+@@ -410,8 +428,15 @@
+ #define q_sk_SSL_CIPHER_value(st, i) q_SKM_sk_value(SSL_CIPHER, (st), (i))
+ #define q_SSL_CTX_add_extra_chain_cert(ctx,x509) \
+ q_SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509)
++
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ #define q_X509_get_notAfter(x) X509_get_notAfter(x)
+ #define q_X509_get_notBefore(x) X509_get_notBefore(x)
++#else
++ASN1_TIME *q_X509_get_notAfter(X509 *x);
++ASN1_TIME *q_X509_get_notBefore(X509 *x);
++#endif
++
+ #define q_EVP_PKEY_assign_RSA(pkey,rsa) q_EVP_PKEY_assign((pkey),EVP_PKEY_RSA,\
+ (char *)(rsa))
+ #define q_EVP_PKEY_assign_DSA(pkey,dsa) q_EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\
+--- a/src/network/ssl/qsslsocket_openssl_symbols.cpp
++++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp
+@@ -290,6 +290,22 @@
+ DEFINEFUNC(void, OPENSSL_add_all_algorithms_conf, void, DUMMYARG, return, DUMMYARG)
+ DEFINEFUNC3(int, SSL_CTX_load_verify_locations, SSL_CTX *ctx, ctx, const char *CAfile, CAfile, const char *CApath, CApath, return 0, return)
+ DEFINEFUNC(long, SSLeay, void, DUMMYARG, return 0, return)
++DEFINEFUNC(X509_STORE *, SSL_CTX_get_cert_store, const SSL_CTX *ctx, ctx, return 0, return)
++
++DEFINEFUNC(ASN1_INTEGER *, X509_get_serialNumber, X509 *x, x, return 0, return)
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++DEFINEFUNC(int, EVP_PKEY_id, const EVP_PKEY *pkey, pkey, return 0, return)
++DEFINEFUNC(int, EVP_PKEY_base_id, const EVP_PKEY *pkey, pkey, return 0, return)
++DEFINEFUNC2(int, SSL_CIPHER_get_bits, const SSL_CIPHER *cipher, cipher, int *alg_bits, alg_bits, return 0, return)
++DEFINEFUNC2(long, SSL_CTX_set_options, SSL_CTX *ctx, ctx, long options, options, return 0, return)
++DEFINEFUNC(long, X509_get_version, X509 *x, x, return 0, return)
++DEFINEFUNC(X509_PUBKEY *, X509_get_X509_PUBKEY, X509 *x, x, return 0, return)
++DEFINEFUNC(int, RSA_bits, const RSA *rsa, rsa, return 0, return)
++DEFINEFUNC(int, DSA_security_bits, const DSA *dsa, dsa, return 0, return)
++DEFINEFUNC(ASN1_TIME *, X509_get_notAfter, X509 *x, x, return 0, return)
++DEFINEFUNC(ASN1_TIME *, X509_get_notBefore, X509 *x, x, return 0, return)
++DEFINEFUNC4(void, DSA_get0_pqg, const DSA *d, d, BIGNUM **p, p, BIGNUM **q, q, BIGNUM **g, g, return, return)
++#endif
+
+ #ifdef Q_OS_SYMBIAN
+ #define RESOLVEFUNC(func, ordinal, lib) \
+@@ -801,6 +817,7 @@
+ RESOLVEFUNC(SSL_CTX_use_PrivateKey)
+ RESOLVEFUNC(SSL_CTX_use_RSAPrivateKey)
+ RESOLVEFUNC(SSL_CTX_use_PrivateKey_file)
++ RESOLVEFUNC(SSL_CTX_get_cert_store)
+ RESOLVEFUNC(SSL_accept)
+ RESOLVEFUNC(SSL_clear)
+ RESOLVEFUNC(SSL_connect)
+@@ -823,6 +840,23 @@
+ RESOLVEFUNC(SSL_set_connect_state)
+ RESOLVEFUNC(SSL_shutdown)
+ RESOLVEFUNC(SSL_write)
++
++ RESOLVEFUNC(X509_get_serialNumber)
++#if OPENSSL_VERSION_NUMBER >= 0x10100000L
++ RESOLVEFUNC(SSL_CTX_ctrl)
++ RESOLVEFUNC(EVP_PKEY_id)
++ RESOLVEFUNC(EVP_PKEY_base_id)
++ RESOLVEFUNC(SSL_CIPHER_get_bits)
++ RESOLVEFUNC(SSL_CTX_set_options)
++ RESOLVEFUNC(X509_get_version)
++ RESOLVEFUNC(X509_get_X509_PUBKEY)
++ RESOLVEFUNC(RSA_bits)
++ RESOLVEFUNC(DSA_security_bits)
++ RESOLVEFUNC(DSA_get0_pqg)
++ RESOLVEFUNC(X509_get_notAfter)
++ RESOLVEFUNC(X509_get_notBefore)
++#endif
++
+ #ifndef OPENSSL_NO_SSL2
+ RESOLVEFUNC(SSLv2_client_method)
+ #endif
+--- qt-everywhere-opensource-src-4.8.7/src/network/ssl/qsslkey.cpp.0131~ 2017-03-15 02:22:37.053244125 +0100
++++ qt-everywhere-opensource-src-4.8.7/src/network/ssl/qsslkey.cpp 2017-03-15 02:22:37.055244057 +0100
+@@ -328,7 +328,7 @@ int QSslKey::length() const
+ if (d->algorithm == QSsl::Rsa) {
+ return q_RSA_bits(d->rsa);
+ }else{
+- BIGNUM *p = NULL;
++ const BIGNUM *p = NULL;
+ q_DSA_get0_pqg(d->dsa, &p, NULL, NULL);
+ return q_BN_num_bits(p);
+ }
+--- qt-everywhere-opensource-src-4.8.7/src/network/ssl/qsslsocket_openssl_symbols.cpp.0131~ 2017-03-15 02:22:37.054244091 +0100
++++ qt-everywhere-opensource-src-4.8.7/src/network/ssl/qsslsocket_openssl_symbols.cpp 2017-03-15 02:29:41.155236836 +0100
+@@ -111,16 +111,16 @@ DEFINEFUNC(int, ASN1_STRING_length, ASN1
+ DEFINEFUNC2(int, ASN1_STRING_to_UTF8, unsigned char **a, a, ASN1_STRING *b, b, return 0, return);
+ DEFINEFUNC4(long, BIO_ctrl, BIO *a, a, int b, b, long c, c, void *d, d, return -1, return)
+ DEFINEFUNC(int, BIO_free, BIO *a, a, return 0, return)
+-DEFINEFUNC(BIO *, BIO_new, BIO_METHOD *a, a, return 0, return)
++DEFINEFUNC(BIO *, BIO_new, const BIO_METHOD *a, a, return 0, return)
+ DEFINEFUNC2(BIO *, BIO_new_mem_buf, void *a, a, int b, b, return 0, return)
+ DEFINEFUNC3(int, BIO_read, BIO *a, a, void *b, b, int c, c, return -1, return)
+-DEFINEFUNC(BIO_METHOD *, BIO_s_mem, void, DUMMYARG, return 0, return)
++DEFINEFUNC(const BIO_METHOD *, BIO_s_mem, void, DUMMYARG, return 0, return)
+ DEFINEFUNC3(int, BIO_write, BIO *a, a, const void *b, b, int c, c, return -1, return)
+ DEFINEFUNC(int, BN_num_bits, const BIGNUM *a, a, return 0, return)
+ DEFINEFUNC(int, CRYPTO_num_locks, DUMMYARG, DUMMYARG, return 0, return)
+ DEFINEFUNC(void, CRYPTO_set_locking_callback, void (*a)(int, int, const char *, int), a, return, DUMMYARG)
+ DEFINEFUNC(void, CRYPTO_set_id_callback, unsigned long (*a)(), a, return, DUMMYARG)
+-DEFINEFUNC(void, CRYPTO_free, void *a, a, return, DUMMYARG)
++DEFINEFUNC(void, OPENSSL_free, void *a, a, return, DUMMYARG)
+ DEFINEFUNC(void, DSA_free, DSA *a, a, return, DUMMYARG)
+ #if OPENSSL_VERSION_NUMBER < 0x00908000L
+ DEFINEFUNC3(X509 *, d2i_X509, X509 **a, a, unsigned char **b, b, long c, c, return 0, return)
+@@ -300,7 +300,7 @@ DEFINEFUNC(int, RSA_bits, const RSA *rs
+ DEFINEFUNC(int, DSA_security_bits, const DSA *dsa, dsa, return 0, return)
+ DEFINEFUNC(ASN1_TIME *, X509_get_notAfter, X509 *x, x, return 0, return)
+ DEFINEFUNC(ASN1_TIME *, X509_get_notBefore, X509 *x, x, return 0, return)
+-DEFINEFUNC4(void, DSA_get0_pqg, const DSA *d, d, BIGNUM **p, p, BIGNUM **q, q, BIGNUM **g, g, return, return)
++DEFINEFUNC4(void, DSA_get0_pqg, const DSA *d, d, const BIGNUM **p, p, const BIGNUM **q, q, const BIGNUM **g, g, return, return)
+ #endif
+
+ #ifdef Q_OS_SYMBIAN
+--- qt-everywhere-opensource-src-4.8.7/src/network/ssl/qsslsocket_openssl_symbols_p.h.0131~ 2017-03-15 02:22:37.054244091 +0100
++++ qt-everywhere-opensource-src-4.8.7/src/network/ssl/qsslsocket_openssl_symbols_p.h 2017-03-15 02:29:50.192986268 +0100
+@@ -59,6 +59,9 @@
+ QT_BEGIN_NAMESPACE
+
+ #define DUMMYARG
++#ifndef OPENSSL_NO_SSL2
++#define OPENSSL_NO_SSL2 1
++#endif
+
+ #if !defined QT_LINKED_OPENSSL
+ // **************** Shared declarations ******************
+@@ -207,16 +210,16 @@ int q_ASN1_STRING_length(ASN1_STRING *a)
+ int q_ASN1_STRING_to_UTF8(unsigned char **a, ASN1_STRING *b);
+ long q_BIO_ctrl(BIO *a, int b, long c, void *d);
+ int q_BIO_free(BIO *a);
+-BIO *q_BIO_new(BIO_METHOD *a);
++BIO *q_BIO_new(const BIO_METHOD *a);
+ BIO *q_BIO_new_mem_buf(void *a, int b);
+ int q_BIO_read(BIO *a, void *b, int c);
+-BIO_METHOD *q_BIO_s_mem();
++const BIO_METHOD *q_BIO_s_mem();
+ int q_BIO_write(BIO *a, const void *b, int c);
+ int q_BN_num_bits(const BIGNUM *a);
+ int q_CRYPTO_num_locks();
+ void q_CRYPTO_set_locking_callback(void (*a)(int, int, const char *, int));
+ void q_CRYPTO_set_id_callback(unsigned long (*a)());
+-void q_CRYPTO_free(void *a);
++void q_OPENSSL_free(void *a);
+ void q_DSA_free(DSA *a);
+ #if OPENSSL_VERSION_NUMBER >= 0x00908000L
+ // 0.9.8 broke SC and BC by changing this function's signature.
+@@ -326,7 +329,6 @@ void q_SSL_set_accept_state(SSL *a);
+ void q_SSL_set_connect_state(SSL *a);
+ int q_SSL_shutdown(SSL *a);
+ #if OPENSSL_VERSION_NUMBER >= 0x10000000L
+-const SSL_METHOD *q_SSLv2_client_method();
+ const SSL_METHOD *q_SSLv3_client_method();
+ const SSL_METHOD *q_SSLv23_client_method();
+ const SSL_METHOD *q_TLSv1_client_method();
+@@ -335,7 +337,6 @@ const SSL_METHOD *q_SSLv3_server_method(
+ const SSL_METHOD *q_SSLv23_server_method();
+ const SSL_METHOD *q_TLSv1_server_method();
+ #else
+-SSL_METHOD *q_SSLv2_client_method();
+ SSL_METHOD *q_SSLv3_client_method();
+ SSL_METHOD *q_SSLv23_client_method();
+ SSL_METHOD *q_TLSv1_client_method();
+@@ -415,7 +416,7 @@ long q_X509_get_version(X509 *x);
+ X509_PUBKEY * q_X509_get_X509_PUBKEY(X509 *x);
+ int q_RSA_bits(const RSA *rsa);
+ int q_DSA_security_bits(const DSA *dsa);
+-void q_DSA_get0_pqg(const DSA *d, BIGNUM **p, BIGNUM **q, BIGNUM **g);
++void q_DSA_get0_pqg(const DSA *d, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g);
+ #endif
+
+ #define q_SKM_sk_num(type, st) ((int (*)(const STACK_OF(type) *))q_sk_num)(st)
+--- qt-everywhere-opensource-src-4.8.7/src/network/ssl/qsslcertificate.cpp.omv~ 2017-03-15 02:27:18.143322736 +0100
++++ qt-everywhere-opensource-src-4.8.7/src/network/ssl/qsslcertificate.cpp 2017-03-15 02:29:56.215819741 +0100
+@@ -696,7 +696,7 @@
+ unsigned char *data = 0;
+ int size = q_ASN1_STRING_to_UTF8(&data, q_X509_NAME_ENTRY_get_data(e));
+ info[QString::fromUtf8(obj)] = QString::fromUtf8((char*)data, size);
+- q_CRYPTO_free(data);
++ q_OPENSSL_free(data);
+ }
+ return info;
+ }
diff --git a/subprojects/shared-modules/smpeg/smpeg-0.4.5.json b/subprojects/shared-modules/smpeg/smpeg-0.4.5.json
new file mode 100644
index 00000000..a931bac9
--- /dev/null
+++ b/subprojects/shared-modules/smpeg/smpeg-0.4.5.json
@@ -0,0 +1,45 @@
+{
+ "name": "smpeg",
+ "config-opts": ["--disable-static"],
+ "cleanup": [
+ "/bin",
+ "/man"
+ ],
+ "rm-configure": true,
+ "sources": [
+ {
+ "type": "archive",
+ "url": "http://http.debian.net/debian/pool/main/s/smpeg/smpeg_0.4.5+cvs20030824.orig.tar.gz",
+ "sha256": "1276ea797dd9fde8a12dd3f33f180153922544c28ca9fc7b477c018876be1916"
+ },
+ {
+ "type": "shell",
+ "commands": [
+ "sed -i '/^## libtool.m4/,/^#####/d' acinclude.m4"
+ ]
+ },
+ {
+ "type": "script",
+ "dest-filename": "autogen.sh",
+ "commands": [
+ "AUTOMAKE=\"automake --foreign --add-missing --force-missing\" autoreconf -vfi"
+ ]
+ },
+ {
+ "type": "patch",
+ "path": "smpeg-am-prog-as.patch"
+ },
+ {
+ "type": "patch",
+ "path": "smpeg-export-mpegaudio-class.patch"
+ },
+ {
+ "type": "patch",
+ "path": "smpeg-no-gtk.patch"
+ },
+ {
+ "type": "patch",
+ "path": "smpeg-gcc6.patch"
+ }
+ ]
+}
diff --git a/subprojects/shared-modules/smpeg/smpeg-am-prog-as.patch b/subprojects/shared-modules/smpeg/smpeg-am-prog-as.patch
new file mode 100644
index 00000000..36197d71
--- /dev/null
+++ b/subprojects/shared-modules/smpeg/smpeg-am-prog-as.patch
@@ -0,0 +1,12 @@
+Index: smpeg-0.4.5+cvs20030824/configure.in
+===================================================================
+--- smpeg-0.4.5+cvs20030824.orig/configure.in
++++ smpeg-0.4.5+cvs20030824/configure.in
+@@ -57,6 +57,7 @@
+ AC_LIBTOOL_WIN32_DLL
+ AM_PROG_LIBTOOL
+ AC_PROG_INSTALL
++AM_PROG_AS
+
+ dnl Ugh.
+ AS="$CC"
diff --git a/subprojects/shared-modules/smpeg/smpeg-export-mpegaudio-class.patch b/subprojects/shared-modules/smpeg/smpeg-export-mpegaudio-class.patch
new file mode 100644
index 00000000..9ecb9b58
--- /dev/null
+++ b/subprojects/shared-modules/smpeg/smpeg-export-mpegaudio-class.patch
@@ -0,0 +1,17 @@
+--- smpeg-0.4.5+cvs20030824.orig/MPEGaudio.h
++++ smpeg-0.4.5+cvs20030824/MPEGaudio.h
+@@ -149,6 +149,14 @@
+ };
+
+ /* The actual MPEG audio class */
++
++class MPEGaudio;
++void Play_MPEGaudioSDL(void *udata, Uint8 *stream, int len);
++int Play_MPEGaudio(MPEGaudio *audio, Uint8 *stream, int len);
++#ifdef THREADED_AUDIO
++int Decode_MPEGaudio(void *udata);
++#endif
++
+ class MPEGaudio : public MPEGerror, public MPEGaudioaction {
+
+ friend void Play_MPEGaudioSDL(void *udata, Uint8 *stream, int len);
diff --git a/subprojects/shared-modules/smpeg/smpeg-gcc6.patch b/subprojects/shared-modules/smpeg/smpeg-gcc6.patch
new file mode 100644
index 00000000..21b30da5
--- /dev/null
+++ b/subprojects/shared-modules/smpeg/smpeg-gcc6.patch
@@ -0,0 +1,40 @@
+Description: Fix compiling with GCC 6.
+Author: Johannes Brandstätter <jbrandst@2ds.eu>
+Bug-Debian: https://bugs.debian.org/811742
+Last-Update: <2016-09-24>
+
+Index: smpeg-0.4.5+cvs20030824/audio/huffmantable.cpp
+===================================================================
+--- smpeg-0.4.5+cvs20030824.orig/audio/huffmantable.cpp
++++ smpeg-0.4.5+cvs20030824/audio/huffmantable.cpp
+@@ -9,6 +9,7 @@
+ #include "config.h"
+ #endif
+
++#include <climits>
+ #include "MPEGaudio.h"
+
+ static const unsigned int
+@@ -550,11 +551,11 @@ htd33[ 31][2]={{ 16, 1},{ 8, 1},{ 4,
+
+ const HUFFMANCODETABLE MPEGaudio::ht[HTN]=
+ {
+- { 0, 0-1, 0-1, 0, 0, htd33},
++ { 0, UINT_MAX, UINT_MAX, 0, 0, htd33},
+ { 1, 2-1, 2-1, 0, 7,htd01},
+ { 2, 3-1, 3-1, 0, 17,htd02},
+ { 3, 3-1, 3-1, 0, 17,htd03},
+- { 4, 0-1, 0-1, 0, 0, htd33},
++ { 4, UINT_MAX, UINT_MAX, 0, 0, htd33},
+ { 5, 4-1, 4-1, 0, 31,htd05},
+ { 6, 4-1, 4-1, 0, 31,htd06},
+ { 7, 6-1, 6-1, 0, 71,htd07},
+@@ -564,7 +565,7 @@ const HUFFMANCODETABLE MPEGaudio::ht[HTN
+ {11, 8-1, 8-1, 0,127,htd11},
+ {12, 8-1, 8-1, 0,127,htd12},
+ {13,16-1,16-1, 0,511,htd13},
+- {14, 0-1, 0-1, 0, 0, htd33},
++ {14, UINT_MAX, UINT_MAX, 0, 0, htd33},
+ {15,16-1,16-1, 0,511,htd15},
+ {16,16-1,16-1, 1,511,htd16},
+ {17,16-1,16-1, 2,511,htd16},
diff --git a/subprojects/shared-modules/smpeg/smpeg-no-gtk.patch b/subprojects/shared-modules/smpeg/smpeg-no-gtk.patch
new file mode 100644
index 00000000..792596cf
--- /dev/null
+++ b/subprojects/shared-modules/smpeg/smpeg-no-gtk.patch
@@ -0,0 +1,37 @@
+From 62cda978596a323cd7042722f906df906007e5b5 Mon Sep 17 00:00:00 2001
+From: Cosimo Cecchi <cosimoc@gnome.org>
+Date: Sat, 15 Apr 2017 13:24:39 -0700
+Subject: [PATCH] Comment out GTK detection
+
+---
+ configure.in | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/configure.in b/configure.in
+index 20b1355..2cb4753 100644
+--- a/configure.in
++++ b/configure.in
+@@ -208,13 +208,13 @@ AC_ARG_ENABLE(gtk_player,
+ [ --enable-gtk-player build a GTk sample SMPEG player [default=yes]],
+ , enable_gtk_player=yes)
+ have_gtk=no
+-if test x$enable_gtk_player = xyes; then
+- AM_PATH_GTK(1.2.1, have_gtk=yes)
+- if test x$have_gtk = xyes; then
+- CFLAGS="$CFLAGS $GTK_CFLAGS"
+- fi
+- AC_SUBST(GTK_LIBS)
+-fi
++dnl if test x$enable_gtk_player = xyes; then
++dnl AM_PATH_GTK(1.2.1, have_gtk=yes)
++dnl if test x$have_gtk = xyes; then
++dnl CFLAGS="$CFLAGS $GTK_CFLAGS"
++dnl fi
++dnl AC_SUBST(GTK_LIBS)
++dnl fi
+ AM_CONDITIONAL(HAVE_GTK, test x$have_gtk = xyes)
+
+ dnl See if we can build the Mesa player
+--
+2.12.2
+
diff --git a/subprojects/shared-modules/vorbisgain/0001-temp_files.patch b/subprojects/shared-modules/vorbisgain/0001-temp_files.patch
new file mode 100644
index 00000000..4e6d6706
--- /dev/null
+++ b/subprojects/shared-modules/vorbisgain/0001-temp_files.patch
@@ -0,0 +1,75 @@
+Description: Apply patch to use temp files, which are dependent
+ on the file which is beeing processed, instead always using the same
+ filename, which can result to data loss in scenarios where two or more
+ vorbis processes are running parallel.
+Author: Pavel N. Krivitsky <pavel@krivitsky.name>
+Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=505164
+Forwarded: no
+---
+ vorbis.c | 17 +++++++++--------
+ 1 file changed, 9 insertions(+), 8 deletions(-)
+
+--- a/vorbis.c
++++ b/vorbis.c
+@@ -56,7 +56,7 @@
+ #define PROGRESS_FORMAT_SIZE 8
+ #define MIN_FILENAME_SIZE 5
+ #define MIN_MIDDLE_TRUNCATE_SIZE 20
+-#define TEMP_NAME "vorbisgain.tmpXXXXXX"
++#define TEMP_EXT ".vgain.tmpXXXXXX"
+
+
+ /**
+@@ -684,11 +684,10 @@
+ }
+ }
+
+- /* Make sure temp is in same folder as file. And yes, the malloc is larger
+- * than necessary (and not always needed). Lets keep it simple though (at
+- * the expense of a few bytes)...
++ /* Construct a temporary file name by appending TEMP_EXT to
++ * the name of the file being modified.
+ */
+- temp_name = malloc(strlen(filename) + sizeof(TEMP_NAME));
++ temp_name = malloc(strlen(filename)*sizeof(char) + sizeof(TEMP_EXT));
+
+ if (temp_name == NULL)
+ {
+@@ -697,7 +696,7 @@
+ }
+
+ strcpy(temp_name, filename);
+- strcpy((char *) last_path(temp_name), TEMP_NAME);
++ strcat(temp_name, TEMP_EXT);
+
+ #ifdef WIN32
+ temp_name = _mktemp(temp_name);
+@@ -779,6 +778,7 @@
+ file_error(_("Note: Couldn't set mode for file '%s': "), filename);
+ }
+
++#if 0 /* Disable for Debian, this surprises people and is not useful --liw */
+ utime_buf.actime = stat_buf.st_atime;
+ utime_buf.modtime = stat_buf.st_mtime;
+
+@@ -786,6 +786,7 @@
+ {
+ file_error(_("Note: Couldn't set time for file '%s': "), filename);
+ }
++#endif
+
+ result = 0;
+
+@@ -817,10 +818,10 @@
+
+ if (delete_temp)
+ {
+- if (remove(TEMP_NAME) != 0)
++ if (remove(temp_name) != 0)
+ {
+ file_error(_("Note: Couldn't remove temporary file '%s': "),
+- TEMP_NAME);
++ temp_name);
+ }
+ }
+
diff --git a/subprojects/shared-modules/vorbisgain/0002-errno.patch b/subprojects/shared-modules/vorbisgain/0002-errno.patch
new file mode 100644
index 00000000..b01f2ad8
--- /dev/null
+++ b/subprojects/shared-modules/vorbisgain/0002-errno.patch
@@ -0,0 +1,33 @@
+Description: Zero errno before readdir call.
+From: http://bugs.debian.org/375110
+Forwarded: no
+---
+ recurse.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/recurse.c
++++ b/recurse.c
+@@ -408,6 +408,7 @@
+ */
+ static int read_dir(DIRECTORY *directory)
+ {
++ errno = 0;
+ directory->entry = readdir(directory->dir);
+
+ if (directory->entry != NULL)
+@@ -622,6 +623,7 @@
+ /* Check for wildcards */
+ settings->pattern = last_path(my_path);
+
++#if 0 /* Disable for Debian, as it suprises people. --liw */
+ if (contains_pattern(settings->pattern))
+ {
+ /* Strip last part of path */
+@@ -637,6 +639,7 @@
+ }
+ }
+ else
++#endif
+ {
+ settings->pattern = NULL;
+ }
diff --git a/subprojects/shared-modules/vorbisgain/0003-manpage.patch b/subprojects/shared-modules/vorbisgain/0003-manpage.patch
new file mode 100644
index 00000000..8aaeaf1c
--- /dev/null
+++ b/subprojects/shared-modules/vorbisgain/0003-manpage.patch
@@ -0,0 +1,248 @@
+Description: Man page says --silent, should be --skip
+From: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=355783
+Forwarded: no
+---
+ vorbisgain.1 | 60 ++++++++++++-----------------------------------------------
+ 1 file changed, 13 insertions(+), 47 deletions(-)
+
+--- a/vorbisgain.1
++++ b/vorbisgain.1
+@@ -2,10 +2,8 @@
+ .\" groff -man -Tascii vorbisgain.1
+ .\"
+ .TH vorbisgain 1 "2004 Jan 3" "" "VorbisGain"
+-
+ .SH NAME
+ vorbisgain \- calculate the replay gain for Ogg Vorbis files
+-
+ .SH SYNOPSIS
+ .B vorbisgain
+ [
+@@ -16,7 +14,6 @@
+ .I album gain
+ ]
+ .I input_files \fR...
+-
+ .SH DESCRIPTION
+ .B vorbisgain
+ calculates the ReplayGain values for the named Ogg Vorbis input files and
+@@ -27,7 +24,6 @@
+ uses a default target level of 89 dB, rather than the 83 dB recommended by the
+ ReplayGain standard, when calculating the gain to apply. (Some players include
+ a pre-amplification setting with which the target level can be changed.)
+-
+ .PP
+ .B vorbisgain
+ input files must be Ogg Vorbis I files with 1 or 2 channels and a sample rate
+@@ -35,21 +31,16 @@
+ kHz. If an input file contains multiple streams (i.e., it is chained), the
+ streams must all have the same format, in terms of sampling frequency and
+ number of channels.
+-
+ .PP
+ All streams in a chained file are processed, but the ReplayGain tags are
+ only written to (or removed from) the first stream.
+-
+ .SH OPTIONS
+-
+ .IP "-h, --help"
+ Show command help.
+-
+ .IP "-a, --album"
+ Activates album mode, in which the album gain (sometimes called the audiophile
+ gain) is calculated in addition to the track gain (sometimes called the radio
+ gain).
+-
+ .IP "-g n, --album-gain=n"
+ Sets the album gain value to use. Default is to calculate it, if
+ .I -a
+@@ -59,38 +50,31 @@
+ dB, specifying the
+ .B change
+ in volume that should be applied.
+-
+ .IP "-c, --clean"
+ Remove any ReplayGain tags from the specified files. If a file does not
+ contain any ReplayGain tags, the file is not modified.
+-
+ .IP "-C, --convert"
+ Convert old format ReplayGain tags to a new format (see section TAG FORMAT
+ below for details). If a file does not contain all ReplayGain tags that are
+ needed for a conversion, the file is not modified. The album peak tag is
+ only created if
+ .I -a
+-is specified, and the album gain value is then checked for concistency.
++is specified, and the album gain value is then checked for consistency.
+ Otherwise any album gain is converted without any checks.
+-
+ .IP "-d, --display-only"
+ Display the result only; do not write anything to disk. This applies to all
+ options.
+-
+ .IP "-f, --fast"
+ Only calculate the gain for files that do not contain all replay gain tags
+ needed (the album gain and peak tags are only considered if
+ .I -a
+ has been specified).
+-
+ .IP "-n, --no-progress"
+ Only display results, but don't show progress in percentages and times. This
+ can be useful if the output is piped into other programs.
+-
+ .IP "-q, --quiet"
+ Do not display any output while processing. Only error and warning messages will
+ be printed.
+-
+ .IP "-r, --recursive"
+ Enter directories (recursively) and search for files, if directories or file
+ patterns are specified.
+@@ -98,65 +82,51 @@
+ Only available if
+ .B vorbisgain
+ was configured with --enable-recursive.
+-
+-.IP "-s, --silent"
+-Sliently skip any non-Vorbis files found. Vorbis files that can't be processed
++.IP "-s, --skip"
++Silently skip any non-Vorbis files found. Vorbis files that can't be processed
+ for some reason are skipped as well, though not silently. Default is to stop
+ when such files are encountered.
+-
+ .IP "-v, --version"
+ Display the version of the program.
+-
+ .SH EXAMPLES
+-
+ Simplest version. Calculate the track gain and peak only.
+ .PP
+ .RS
+ vorbisgain somefile.ogg
+ .RE
+-
+ .PP
+ Note that the following examples are only possible if
+ .B vorbisgain
+ was configured with --enable-recursive.
+-
+ .PP
+ Calculate the album gain and peak, in addition to the track gain and peak, for
+ all .ogg files in the directory "music" (and all subdirectories). All files in
+ one directory are treated as belonging to the same album. Files that already
+ have ReplayGain tags are not re-calculated. Note the quotes, as they cause the
+ shell to not do any filename globbing:
+-
+ .PP
+ .RS
+ vorbisgain -a -f -r "music/*.ogg"
+ .RE
+-
+ .PP
+ Calculate the album gain. The files specified before the directory "album"
+ are treated as one album, the files in the directory "album" as another
+ album and the remaining files as a third album:
+-
+ .PP
+ .RS
+ vorbisgain -a -r a.ogg b.ogg c.ogg album d.ogg e.ogg f.ogg
+ .RE
+-
+ .PP
+ Remove all replaygain tags from a collection of oggs:
+-
+ .PP
+ .RS
+ vorbisgain -c -r "music/*.ogg"
+ .RE
+-
+ .SH TAG FORMAT
+-
+ .B vorbisgain
+ creates tags like these (when in
+ .I -a
+ mode):
+-
+ .PP
+ .RS
+ REPLAYGAIN_TRACK_GAIN=-7.03 dB
+@@ -170,18 +140,15 @@
+ .RS
+ REPLAYGAIN_ALBUM_PEAK=1.21822226
+ .RE
+-
+ .PP
+ Gain specifies how much the volume should be changed before playback, in dB.
+ Peak is the maximum sample value of the file before any gain has been
+ applied, where 1.0 means "full sample value" (32,767 when decoding to signed
+ 16 bit samples).
+-
+ .PP
+ Earlier versions of
+ .B vorbisgain
+ (before 0.30) created the following tags:
+-
+ .PP
+ .RS
+ RG_RADIO
+@@ -192,7 +159,6 @@
+ .RS
+ RG_AUDIOPHILE
+ .RE
+-
+ .PP
+ When
+ .I -c
+@@ -200,44 +166,44 @@
+ REPLAYGAIN_TRACK_PEAK, RG_AUDIOPHILE to REPLAYGAIN_ALBUM_GAIN and
+ REPLAYGAIN_ALBUM_PEAK is calculated as the maximum of all RG_PEAK tags in
+ the album.
+-
+ .SH AUTHORS
+-
+ .TP
+ Program Code:
+ .br
+ Gian-Carlo Pascutto <gcp@sjeng.org>
+ .br
+ Magnus Holmgren <lear@algonet.se>
+-
+ .TP
+ ReplayGain Analysis Code:
+ .br
+ Glen Sawyer <glensawyer@hotmail.com>
+ .br
+ Frank Klemm (http://www.uni-jena.de/~pfk/)
+-
+ .TP
+ Man Page:
+ .br
+ Magnus Holmgren <lear@algonet.se>
+-
+ .SH BUGS
+-
+ None known.
+-
+ .SH SEE ALSO
+-
+ .TP
+ http://sjeng.org/vorbisgain.html
+ Home page for VorbisGain. The latest version, and a Windows executable,
+ can be found here.
+-
+ .TP
+ http://www.replaygain.org/
+ Contains detailed information about ReplayGain and how it is calculated.
+-
+ .TP
+ http://www.hydrogenaudio.org/
+ Discussion forum for audio compression and related issues, including Ogg
+ Vorbis and VorbisGain.
++.SH NOTE
++The version of vorbisgain packaged for Debian differs in two ways from
++the upstream version. First, it does not retain the modification time
++of the input file: if tags are changed in a file, the mtime will change.
++Second, it does not try to process wildcards in filenames. This makes
++it impossible to say "process all foo*.ogg in all subdirectories", but
++also avoids problems with filenames that actually contain wildcards.
++Without this change, "vorbisgain *.ogg" in a directory with a file that
++contains a question mark would result in that file being treated as
++being in a different album.
diff --git a/subprojects/shared-modules/vorbisgain/0004-vorbisgain_mtime.patch b/subprojects/shared-modules/vorbisgain/0004-vorbisgain_mtime.patch
new file mode 100644
index 00000000..0abd7ce1
--- /dev/null
+++ b/subprojects/shared-modules/vorbisgain/0004-vorbisgain_mtime.patch
@@ -0,0 +1,183 @@
+Description: When a file's metadata is updated, the mtime is changed
+ to the current time. Whether this is correct or not is often a
+ religious issue (metadata-vs-data), but, generally, all other
+ tag-editing software choose to keep the timestamp.
+ .
+ Since the upstream fixed the issue, it is bad to ignore the fix
+ altogether. At the very least, there should be a command-line
+ option to follow the upstream and The Only Right(tm) behaviour.
+Author: Adam Borowski <kilobyte@angband.pl>
+Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=445958
+---
+ vorbis.c | 18 ++++++++++--------
+ vorbis.h | 2 +-
+ vorbisgain.1 | 7 ++++++-
+ vorbisgain.c | 20 ++++++++++++++------
+ vorbisgain.h | 1 +
+ 5 files changed, 32 insertions(+), 16 deletions(-)
+
+--- a/vorbis.c
++++ b/vorbis.c
+@@ -557,7 +557,8 @@
+ * message has been printed).
+ */
+ int write_gains(const char *filename, float track_peak, float track_gain,
+- float album_peak, float album_gain, int verbose, int remove_tags)
++ float album_peak, float album_gain, int verbose, int remove_tags,
++ SETTINGS* settings)
+ {
+ struct stat stat_buf;
+ struct utimbuf utime_buf;
+@@ -778,15 +779,16 @@
+ file_error(_("Note: Couldn't set mode for file '%s': "), filename);
+ }
+
+-#if 0 /* Disable for Debian, this surprises people and is not useful --liw */
+- utime_buf.actime = stat_buf.st_atime;
+- utime_buf.modtime = stat_buf.st_mtime;
+-
+- if (utime(filename, &utime_buf) != 0)
++ if (!settings->trample_mtime)
+ {
+- file_error(_("Note: Couldn't set time for file '%s': "), filename);
++ utime_buf.actime = stat_buf.st_atime;
++ utime_buf.modtime = stat_buf.st_mtime;
++
++ if (utime(filename, &utime_buf) != 0)
++ {
++ file_error(_("Note: Couldn't set time for file '%s': "), filename);
++ }
+ }
+-#endif
+
+ result = 0;
+
+--- a/vorbisgain.1
++++ b/vorbisgain.1
+@@ -72,6 +72,10 @@
+ .IP "-n, --no-progress"
+ Only display results, but don't show progress in percentages and times. This
+ can be useful if the output is piped into other programs.
++.IP "-p, --preserve-mtime"
++Do not trample upon the timestamps of any files being worked on. This obeys
++the expected data-vs-metadata behaviour, but can confuse some naive
++archivers.
+ .IP "-q, --quiet"
+ Do not display any output while processing. Only error and warning messages will
+ be printed.
+@@ -200,7 +204,8 @@
+ .SH NOTE
+ The version of vorbisgain packaged for Debian differs in two ways from
+ the upstream version. First, it does not retain the modification time
+-of the input file: if tags are changed in a file, the mtime will change.
++of the input file by default: if tags are changed in a file, the mtime will
++change; you can specify "-p" to get the normal behaviour.
+ Second, it does not try to process wildcards in filenames. This makes
+ it impossible to say "process all foo*.ogg in all subdirectories", but
+ also avoids problems with filenames that actually contain wildcards.
+--- a/vorbisgain.c
++++ b/vorbisgain.c
+@@ -235,7 +235,7 @@
+ {
+ if (write_gains(file->filename, file->track_peak,
+ file->track_gain, album_peak, file->album_gain,
+- !settings->quiet, 0) < 0)
++ !settings->quiet, 0, settings) < 0)
+ {
+ return -1;
+ }
+@@ -288,7 +288,7 @@
+ else
+ {
+ if (write_gains(file->filename, NO_PEAK, NO_GAIN,
+- NO_PEAK, NO_GAIN, !settings->quiet, 1) < 0)
++ NO_PEAK, NO_GAIN, !settings->quiet, 1, settings) < 0)
+ {
+ return -1;
+ }
+@@ -425,7 +425,8 @@
+ if (!settings->album)
+ {
+ if (!settings->display_only && write_gains(file->filename,
+- file->track_peak, file->track_gain, NO_PEAK, NO_GAIN, 0, 0) < 0)
++ file->track_peak, file->track_gain, NO_PEAK, NO_GAIN, 0, 0,
++ settings) < 0)
+ {
+ return -1;
+ }
+@@ -466,7 +467,7 @@
+
+ if (write_gains(file->filename, file->track_peak,
+ file->track_gain, album_peak, album_gain,
+- !settings->quiet, 0) < 0)
++ !settings->quiet, 0, settings) < 0)
+ {
+ return -1;
+ }
+@@ -497,6 +498,7 @@
+ fprintf(stderr, _(" -h, --help Print this help text\n"));
+ fprintf(stderr, _(" -n, --no-progress Don't show progress, just print results\n"));
+ fprintf(stderr, _(" -q, --quiet Don't print any output (except errors)\n"));
++ fprintf(stderr, _(" -p, --preserve-mtime Don't change the timestamps\n"));
+ #ifdef ENABLE_RECURSIVE
+ fprintf(stderr, _(" -r, --recursive Search for files recursivly, each folder as an album\n"));
+ #endif
+@@ -522,6 +524,7 @@
+ {"fast", 0, NULL, 'f'},
+ {"help", 0, NULL, 'h'},
+ {"no-progress", 0, NULL, 'n'},
++ {"preserve-mtime",0,NULL, 'p'},
+ {"quiet", 0, NULL, 'q'},
+ #ifdef ENABLE_RECURSIVE
+ {"recursive", 0, NULL, 'r'},
+@@ -533,9 +536,9 @@
+
+
+ #ifdef ENABLE_RECURSIVE
+-#define ARG_STRING "acCdfg:hnqrst:v"
++#define ARG_STRING "acCdfg:hnpqrst:v"
+ #else
+-#define ARG_STRING "acCdfg:hnqst:v"
++#define ARG_STRING "acCdfg:hnpqst:v"
+ #endif
+
+
+@@ -549,6 +552,7 @@
+ memset(&settings, 0, sizeof(settings));
+ settings.first_file = 1;
+ settings.album_gain = NO_GAIN;
++ settings.trample_mtime = 1;
+ settings.show_progress = 1;
+
+ #ifdef WIN32
+@@ -623,6 +627,10 @@
+ settings.show_progress = 0;
+ break;
+
++ case 'p':
++ settings.trample_mtime = 0;
++ break;
++
+ case 'q':
+ settings.quiet = 1;
+ break;
+--- a/vorbisgain.h
++++ b/vorbisgain.h
+@@ -31,6 +31,7 @@
+ int convert; /**< Convert old format tags to new format */
+ int display_only;
+ int fast; /**< Skip files that already have all needed tags */
++ int trample_mtime;
+ int quiet;
+ #ifdef ENABLE_RECURSIVE
+ int recursive;
+--- a/vorbis.h
++++ b/vorbis.h
+@@ -15,6 +15,6 @@
+ SETTINGS *settings);
+ extern int write_gains(const char *filename, float track_peak,
+ float track_gain, float album_gain, float album_peak, int verbose,
+- int remove_tags);
++ int remove_tags, SETTINGS *settings);
+
+ #endif /* VG_VORBIS_H */
diff --git a/subprojects/shared-modules/vorbisgain/0005-double_fclose.patch b/subprojects/shared-modules/vorbisgain/0005-double_fclose.patch
new file mode 100644
index 00000000..2a183292
--- /dev/null
+++ b/subprojects/shared-modules/vorbisgain/0005-double_fclose.patch
@@ -0,0 +1,21 @@
+Description: Don't call fclose() twice.
+Author: Jonathan Neuschäfer <j.neuschaefer@gmx.net>
+Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=632947
+---
+ vorbis.c | 5 -----
+ 1 file changed, 5 deletions(-)
+
+--- a/vorbis.c
++++ b/vorbis.c
+@@ -813,11 +813,6 @@
+ fclose(infile);
+ }
+
+- if (infile != NULL)
+- {
+- fclose(infile);
+- }
+-
+ if (delete_temp)
+ {
+ if (remove(temp_name) != 0)
diff --git a/subprojects/shared-modules/vorbisgain/0006-manpage_hyphens.patch b/subprojects/shared-modules/vorbisgain/0006-manpage_hyphens.patch
new file mode 100644
index 00000000..cb518e69
--- /dev/null
+++ b/subprojects/shared-modules/vorbisgain/0006-manpage_hyphens.patch
@@ -0,0 +1,56 @@
+Description: Resolved hyphen-used-as-minus-sign lintian complaints.
+Forwarded: no
+--- a/vorbisgain.1
++++ b/vorbisgain.1
+@@ -85,7 +85,7 @@
+ .I Note:
+ Only available if
+ .B vorbisgain
+-was configured with --enable-recursive.
++was configured with \-\-enable\-recursive.
+ .IP "-s, --skip"
+ Silently skip any non-Vorbis files found. Vorbis files that can't be processed
+ for some reason are skipped as well, though not silently. Default is to stop
+@@ -101,7 +101,7 @@
+ .PP
+ Note that the following examples are only possible if
+ .B vorbisgain
+-was configured with --enable-recursive.
++was configured with \-\-enable\-recursive.
+ .PP
+ Calculate the album gain and peak, in addition to the track gain and peak, for
+ all .ogg files in the directory "music" (and all subdirectories). All files in
+@@ -110,7 +110,7 @@
+ shell to not do any filename globbing:
+ .PP
+ .RS
+-vorbisgain -a -f -r "music/*.ogg"
++vorbisgain \-a \-f \-r "music/*.ogg"
+ .RE
+ .PP
+ Calculate the album gain. The files specified before the directory "album"
+@@ -118,13 +118,13 @@
+ album and the remaining files as a third album:
+ .PP
+ .RS
+-vorbisgain -a -r a.ogg b.ogg c.ogg album d.ogg e.ogg f.ogg
++vorbisgain \-a \-r a.ogg b.ogg c.ogg album d.ogg e.ogg f.ogg
+ .RE
+ .PP
+ Remove all replaygain tags from a collection of oggs:
+ .PP
+ .RS
+-vorbisgain -c -r "music/*.ogg"
++vorbisgain \-c \-r "music/*.ogg"
+ .RE
+ .SH TAG FORMAT
+ .B vorbisgain
+@@ -205,7 +205,7 @@
+ The version of vorbisgain packaged for Debian differs in two ways from
+ the upstream version. First, it does not retain the modification time
+ of the input file by default: if tags are changed in a file, the mtime will
+-change; you can specify "-p" to get the normal behaviour.
++change; you can specify "\-p" to get the normal behaviour.
+ Second, it does not try to process wildcards in filenames. This makes
+ it impossible to say "process all foo*.ogg in all subdirectories", but
+ also avoids problems with filenames that actually contain wildcards.
diff --git a/subprojects/shared-modules/vorbisgain/0007-recursively_spelling.patch b/subprojects/shared-modules/vorbisgain/0007-recursively_spelling.patch
new file mode 100644
index 00000000..4a6fbf9c
--- /dev/null
+++ b/subprojects/shared-modules/vorbisgain/0007-recursively_spelling.patch
@@ -0,0 +1,14 @@
+Description: "recursivly" should be spelled "recursively". Thanks Adam.
+From: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=661999
+Forwarded: no
+--- a/vorbisgain.c
++++ b/vorbisgain.c
+@@ -500,7 +500,7 @@
+ fprintf(stderr, _(" -q, --quiet Don't print any output (except errors)\n"));
+ fprintf(stderr, _(" -p, --preserve-mtime Don't change the timestamps\n"));
+ #ifdef ENABLE_RECURSIVE
+- fprintf(stderr, _(" -r, --recursive Search for files recursivly, each folder as an album\n"));
++ fprintf(stderr, _(" -r, --recursive Search for files recursively, each folder as an album\n"));
+ #endif
+ fprintf(stderr, _(" -s, --skip Skip non-Vorbis or faulty files\n"));
+ fprintf(stderr, _(" -v, --version Display version number and exit\n\n"));
diff --git a/subprojects/shared-modules/vorbisgain/0008-manpage_recursion_mistake.patch b/subprojects/shared-modules/vorbisgain/0008-manpage_recursion_mistake.patch
new file mode 100644
index 00000000..81792532
--- /dev/null
+++ b/subprojects/shared-modules/vorbisgain/0008-manpage_recursion_mistake.patch
@@ -0,0 +1,23 @@
+Description: The manpage shows methods that don't work. They have been replaced.
+From: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=447402
+Forwarded: no
+--- a/vorbisgain.1
++++ b/vorbisgain.1
+@@ -110,7 +110,7 @@
+ shell to not do any filename globbing:
+ .PP
+ .RS
+-vorbisgain \-a \-f \-r "music/*.ogg"
++vorbisgain \-a \-f \-r music/
+ .RE
+ .PP
+ Calculate the album gain. The files specified before the directory "album"
+@@ -124,7 +124,7 @@
+ Remove all replaygain tags from a collection of oggs:
+ .PP
+ .RS
+-vorbisgain \-c \-r "music/*.ogg"
++vorbisgain \-c \-r music/
+ .RE
+ .SH TAG FORMAT
+ .B vorbisgain
diff --git a/subprojects/shared-modules/vorbisgain/0009-hardening.patch b/subprojects/shared-modules/vorbisgain/0009-hardening.patch
new file mode 100644
index 00000000..67f50a03
--- /dev/null
+++ b/subprojects/shared-modules/vorbisgain/0009-hardening.patch
@@ -0,0 +1,13 @@
+Description: Allow build with dh compat level 9 (debian build flags)
+Forwarded: no
+--- a/misc.c
++++ b/misc.c
+@@ -56,7 +56,7 @@
+ vfprintf(stderr, message, args);
+ va_end(args);
+
+- fprintf(stderr, strerror(err_num));
++ fputs(strerror(err_num), stderr);
+ fprintf(stderr, "\n");
+ }
+
diff --git a/subprojects/shared-modules/vorbisgain/0010-fclose.patch b/subprojects/shared-modules/vorbisgain/0010-fclose.patch
new file mode 100644
index 00000000..12378987
--- /dev/null
+++ b/subprojects/shared-modules/vorbisgain/0010-fclose.patch
@@ -0,0 +1,13 @@
+Solve "too many open files" by closing those which are not compatible with vorbisgain. Thanks to Marcel Rehberg for the patch.
+--- a/vorbis.c
++++ b/vorbis.c
+@@ -357,7 +357,8 @@
+ {
+ vorbis_error(result, _("Couldn't process '%s': "), filename);
+ }
+-
++ // make sure file is closed, since ov_open failed we are still responsible
++ fclose(file);
+ return -1;
+ }
+
diff --git a/subprojects/shared-modules/vorbisgain/README.md b/subprojects/shared-modules/vorbisgain/README.md
new file mode 100644
index 00000000..42d83947
--- /dev/null
+++ b/subprojects/shared-modules/vorbisgain/README.md
@@ -0,0 +1,23 @@
+Vorbisgain comes in two version;
+- The main source: https://sjeng.org/ftp/vorbis/
+- The Debian version: http://deb.debian.org/debian/pool/main/v/vorbisgain/
+
+The catch is... Debian has 10 patches:
+- 0001-temp_files.patch
+- 0002-errno.patch
+- 0003-manpage.patch
+- 0004-vorbisgain_mtime.patch
+- 0005-double_fclose.patch
+- 0006-manpage_hyphens.patch
+- 0007-recursively_spelling.patch
+- 0008-manpage_recursion_mistake.patch
+- 0009-hardening.patch
+- 0010-fclose.patch
+
+Of particular concern are 0005, 0009 and 0010 which might have implications for memory-leaks and string inputs.
+
+## Other points of concern
+
+https://pkgs.org/download/vorbisgain
+
+Lots of distributions don't include these patches as well, but I prefer to stick with the tried and tested package from Debian.
diff --git a/subprojects/shared-modules/vorbisgain/vorbisgain_0.37-2.json b/subprojects/shared-modules/vorbisgain/vorbisgain_0.37-2.json
new file mode 100644
index 00000000..0a9a40da
--- /dev/null
+++ b/subprojects/shared-modules/vorbisgain/vorbisgain_0.37-2.json
@@ -0,0 +1,29 @@
+{
+ "name": "vorbisgain",
+ "buildsystem": "autotools",
+ "cleanup": [
+ "/man"
+ ],
+ "sources": [
+ {
+ "type": "archive",
+ "url": "http://deb.debian.org/debian/pool/main/v/vorbisgain/vorbisgain_0.37.orig.tar.gz",
+ "sha256": "dd6db051cad972bcac25d47b4a9e40e217bb548a1f16328eddbb4e66613530ec"
+ },
+ {
+ "type": "patch",
+ "paths": [
+ "0001-temp_files.patch",
+ "0002-errno.patch",
+ "0003-manpage.patch",
+ "0004-vorbisgain_mtime.patch",
+ "0005-double_fclose.patch",
+ "0006-manpage_hyphens.patch",
+ "0007-recursively_spelling.patch",
+ "0008-manpage_recursion_mistake.patch",
+ "0009-hardening.patch",
+ "0010-fclose.patch"
+ ]
+ }
+ ]
+}