From 469438707dd61711540f7277ac43f65ac399a51b Mon Sep 17 00:00:00 2001 From: Monty Brandenberg Date: Fri, 4 Apr 2014 16:30:50 -0400 Subject: Library updates and switch to 3d-llqtwebkit2 build products. SDL to 1.2.15, c-ares to latest 1.10.0 build, Boost to 1.55.0 with coroutine updates/fixes, curl to 7.34.0, libpng to 1.6.8, openssl to 1.0.1e, zlib to latest 1.2.8 build, llqtwebkit built from 4.7.1 sources refactored and tested in 3p-llqtwebkit2 repository. Windows is functional with a good number of warning messages at runtime from libpng and KDU. MoaP/slplugin functioning. --- indra/newview/viewer_manifest.py | 1 + 1 file changed, 1 insertion(+) (limited to 'indra/newview/viewer_manifest.py') diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index f7b3a45e8d..2ce557fb8d 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -1074,6 +1074,7 @@ class Linux_i686_Manifest(LinuxManifest): self.path("libaprutil-1.so.0") self.path("libaprutil-1.so.0.4.1") self.path("libboost_context-mt.so.*") + self.path("libboost_coroutine-mt.so.*") self.path("libboost_filesystem-mt.so.*") self.path("libboost_program_options-mt.so.*") self.path("libboost_regex-mt.so.*") -- cgit v1.2.3 From 50d1ca325f2acc6e803f5385c9c58d7cd9314b3e Mon Sep 17 00:00:00 2001 From: Monty Brandenberg Date: Fri, 4 Apr 2014 23:48:20 +0000 Subject: Linux: Building some .so's with 0555 permissions now but viewer wants to strip those down for packaging. So we'll target those .so's for a chmod. --- indra/newview/viewer_manifest.py | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'indra/newview/viewer_manifest.py') diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 2ce557fb8d..a9c2ab7437 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -1022,6 +1022,10 @@ class LinuxManifest(ViewerManifest): def package_finish(self): installer_name = self.installer_base_name() + # Some .so's are packaged without write permissions and fail during strip. So this... + self.run_command(r"find %(dst)r/lib -type f -perm 0555 | xargs --no-run-if-empty chmod 0755; true" + % {'dst' : self.get_dst_prefix()} ) + self.strip_binaries() # Fix access permissions -- cgit v1.2.3 From 30eb6d13f56534695076b2f159ea93569af6d14c Mon Sep 17 00:00:00 2001 From: Monty Brandenberg Date: Mon, 7 Apr 2014 14:01:34 -0400 Subject: Linux/Mac: Update to latest OpenSSL 1.0.1e build. Fix manifest for openssl on Mac (copy, deploy). Revert Linux manifest work which tried to work around 0555 permissions on .sos (and didn't work). --- indra/newview/viewer_manifest.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'indra/newview/viewer_manifest.py') diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index a9c2ab7437..f077cd466b 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -768,13 +768,21 @@ class Darwin_i386_Manifest(ViewerManifest): # dylibs that vary based on configuration if self.args['configuration'].lower() == 'debug': for libfile in ( + "libcrypto.1.0.0.dylib", + "libcrypto.dylib", "libfmodexL.dylib", + "libssl.1.0.0.dylib", + "libssl.dylib", ): dylibs += path_optional(os.path.join("../packages/lib/debug", libfile), libfile) else: for libfile in ( + "libcrypto.1.0.0.dylib", + "libcrypto.dylib", "libfmodex.dylib", + "libssl.1.0.0.dylib", + "libssl.dylib", ): dylibs += path_optional(os.path.join("../packages/lib/release", libfile), libfile) @@ -1022,10 +1030,6 @@ class LinuxManifest(ViewerManifest): def package_finish(self): installer_name = self.installer_base_name() - # Some .so's are packaged without write permissions and fail during strip. So this... - self.run_command(r"find %(dst)r/lib -type f -perm 0555 | xargs --no-run-if-empty chmod 0755; true" - % {'dst' : self.get_dst_prefix()} ) - self.strip_binaries() # Fix access permissions -- cgit v1.2.3 From 6631dc22f0513b5ffe28ca48f95ee31fc684d195 Mon Sep 17 00:00:00 2001 From: Monty Brandenberg Date: Wed, 9 Apr 2014 21:05:55 +0000 Subject: All/Linux: Update llqtwebkit to latest all-shared lib build. Linux package assembly updated to deal with Qt libraries and discrete codec and imageformat plugins (which live under bin/llplugin). Functioning Linux viewer with MoaP support with a few image problems (sRGB profile, zlib errors). Much of this expected to be due to the new 1.6.8/1.2.8 libpng/libz and we'll fix as needed. --- indra/newview/viewer_manifest.py | 54 ++++++++++++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 13 deletions(-) (limited to 'indra/newview/viewer_manifest.py') diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index f077cd466b..3ba2e53cca 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -1016,6 +1016,7 @@ class LinuxManifest(ViewerManifest): self.path("../media_plugins/gstreamer010/libmedia_plugin_gstreamer010.so", "libmedia_plugin_gstreamer.so") self.end_prefix("bin/llplugin") + # llcommon if not self.path("../llcommon/libllcommon.so", "lib/libllcommon.so"): print "Skipping llcommon.so (assuming llcommon was linked statically)" @@ -1135,26 +1136,53 @@ class Linux_i686_Manifest(LinuxManifest): pass try: - self.path("libfmodex-*.so") - self.path("libfmodex.so") - pass + self.path("libfmodex-*.so") + self.path("libfmodex.so") + pass except: - print "Skipping libfmodex.so - not found" - pass + print "Skipping libfmodex.so - not found" + pass self.end_prefix("lib") # Vivox runtimes if self.prefix(src="../packages/lib/release", dst="bin"): - self.path("SLVoice") - self.end_prefix() + self.path("SLVoice") + self.end_prefix() + if self.prefix(src="../packages/lib/release", dst="lib"): + self.path("libortp.so") + self.path("libsndfile.so.1") + #self.path("libvivoxoal.so.1") # no - we'll re-use the viewer's own OpenAL lib + self.path("libvivoxsdk.so") + self.path("libvivoxplatform.so") + self.end_prefix("lib") + + # plugin runtime if self.prefix(src="../packages/lib/release", dst="lib"): - self.path("libortp.so") - self.path("libsndfile.so.1") - #self.path("libvivoxoal.so.1") # no - we'll re-use the viewer's own OpenAL lib - self.path("libvivoxsdk.so") - self.path("libvivoxplatform.so") - self.end_prefix("lib") + self.path("libQtCore.so*") + self.path("libQtGui.so*") + self.path("libQtNetwork.so*") + self.path("libQtOpenGL.so*") + self.path("libQtWebKit.so*") + self.end_prefix("lib") + + # For WebKit/Qt plugin runtimes (image format plugins) + if self.prefix(src="../packages/plugins/imageformats", dst="bin/llplugin/imageformats"): + self.path("libqgif.so") + self.path("libqico.so") + self.path("libqjpeg.so") + self.path("libqmng.so") + self.path("libqsvg.so") + self.path("libqtiff.so") + self.end_prefix("bin/llplugin/imageformats") + + # For WebKit/Qt plugin runtimes (codec/character encoding plugins) + if self.prefix(src="../packages/plugins/codecs", dst="bin/llplugin/codecs"): + self.path("libqcncodecs.so") + self.path("libqjpcodecs.so") + self.path("libqkrcodecs.so") + self.path("libqtwcodecs.so") + self.end_prefix("bin/llplugin/codecs") self.strip_binaries() -- cgit v1.2.3 From e72d546fe36ffb262a6a844ac4aae432df357ed5 Mon Sep 17 00:00:00 2001 From: Monty Brandenberg Date: Fri, 11 Apr 2014 19:19:22 -0400 Subject: Mac: Update llqtwebkit build, build and package dylib Qt4 pieces. Part of the switchover to dynamic Qt4. This mostly completes the Mac side. Webkit is functional on Mac, plugins work. The two test programs, llfbconnectest and llplugintest, need a little more work to run without manual fixup ('.' on PATH and maybe a symlink to libz.1.dylib and they run and function on Mac). Also need to address libz.dylib vs libz.a. Currently resolving against dylib which is not what I want. --- indra/newview/viewer_manifest.py | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) (limited to 'indra/newview/viewer_manifest.py') diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 3ba2e53cca..e85f4929ae 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -804,14 +804,42 @@ class Darwin_i386_Manifest(ViewerManifest): symlinkf(os.path.join(os.pardir, os.pardir, os.pardir, libfile), os.path.join(resource_path, libfile)) - # plugins + # SLPlugin.app/Contents/Resources gets those Qt4 libraries it needs. + if self.prefix(src="", dst="SLPlugin.app/Contents/Resources"): + for libfile in ('libQtCore.4.dylib', + 'libQtCore.4.7.1.dylib', + 'libQtGui.4.dylib', + 'libQtGui.4.7.1.dylib', + 'libQtNetwork.4.dylib', + 'libQtNetwork.4.7.1.dylib', + 'libQtOpenGL.4.dylib', + 'libQtOpenGL.4.7.1.dylib', + 'libQtSvg.4.dylib', + 'libQtSvg.4.7.1.dylib', + 'libQtWebKit.4.dylib', + 'libQtWebKit.4.7.1.dylib', + 'libQtXml.4.dylib', + 'libQtXml.4.7.1.dylib'): + self.path2basename("../packages/lib/release", libfile) + self.end_prefix("SLPlugin.app/Contents/Resources") + + # Qt4 codecs go to llplugin. Not certain why but this is the first + # location probed according to dtruss so we'll go with that. + if self.prefix(src="../packages/plugins/codecs/", dst="llplugin/codecs"): + self.path("libq*.dylib") + self.end_prefix("llplugin/codecs") + + # Similarly for imageformats. + if self.prefix(src="../packages/plugins/imageformats/", dst="llplugin/imageformats"): + self.path("libq*.dylib") + self.end_prefix("llplugin/imageformats") + + # SLPlugin plugins proper if self.prefix(src="", dst="llplugin"): self.path2basename("../media_plugins/quicktime/" + self.args['configuration'], "media_plugin_quicktime.dylib") self.path2basename("../media_plugins/webkit/" + self.args['configuration'], "media_plugin_webkit.dylib") - self.path2basename("../packages/lib/release", "libllqtwebkit.dylib") - self.end_prefix("llplugin") self.end_prefix("Resources") -- cgit v1.2.3 From 403ec62e3ce9c32961d50ff13b38a48c24a5cc4b Mon Sep 17 00:00:00 2001 From: Monty Brandenberg Date: Wed, 28 May 2014 19:40:45 +0000 Subject: All: Update library SDL to 290309, c-ares to 290089, boost to 290191, colladadom to 290229, curl to 290186, fontconfig to 290258, freetype to 290255, google-mock/gmock/gtest to 290199, libpng to 290081, libxml2 to 290157, llqtwebkit to 290262/250147 (to be fixed shortly), openssl to 290083, pcre to 290150, zlib to 290080. The freetype2 headers are now normalized to what they would normally be on a unix-type system. Libxml2 and pcre are available on all platforms. Libraries generally move in the direction of static archives rather than shared libraries (e.g. openssl). The llqtwebkit side is a step back from the more ambitious goal. What will be used (290262) will be a simple rebuild of the existing 4.7.1 library with updated package dependencies. The bigger work will be in the future. --- indra/newview/viewer_manifest.py | 71 +++------------------------------------- 1 file changed, 4 insertions(+), 67 deletions(-) (limited to 'indra/newview/viewer_manifest.py') diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index e85f4929ae..6729cd617a 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -768,21 +768,13 @@ class Darwin_i386_Manifest(ViewerManifest): # dylibs that vary based on configuration if self.args['configuration'].lower() == 'debug': for libfile in ( - "libcrypto.1.0.0.dylib", - "libcrypto.dylib", "libfmodexL.dylib", - "libssl.1.0.0.dylib", - "libssl.dylib", ): dylibs += path_optional(os.path.join("../packages/lib/debug", libfile), libfile) else: for libfile in ( - "libcrypto.1.0.0.dylib", - "libcrypto.dylib", "libfmodex.dylib", - "libssl.1.0.0.dylib", - "libssl.dylib", ): dylibs += path_optional(os.path.join("../packages/lib/release", libfile), libfile) @@ -804,42 +796,14 @@ class Darwin_i386_Manifest(ViewerManifest): symlinkf(os.path.join(os.pardir, os.pardir, os.pardir, libfile), os.path.join(resource_path, libfile)) - # SLPlugin.app/Contents/Resources gets those Qt4 libraries it needs. - if self.prefix(src="", dst="SLPlugin.app/Contents/Resources"): - for libfile in ('libQtCore.4.dylib', - 'libQtCore.4.7.1.dylib', - 'libQtGui.4.dylib', - 'libQtGui.4.7.1.dylib', - 'libQtNetwork.4.dylib', - 'libQtNetwork.4.7.1.dylib', - 'libQtOpenGL.4.dylib', - 'libQtOpenGL.4.7.1.dylib', - 'libQtSvg.4.dylib', - 'libQtSvg.4.7.1.dylib', - 'libQtWebKit.4.dylib', - 'libQtWebKit.4.7.1.dylib', - 'libQtXml.4.dylib', - 'libQtXml.4.7.1.dylib'): - self.path2basename("../packages/lib/release", libfile) - self.end_prefix("SLPlugin.app/Contents/Resources") - - # Qt4 codecs go to llplugin. Not certain why but this is the first - # location probed according to dtruss so we'll go with that. - if self.prefix(src="../packages/plugins/codecs/", dst="llplugin/codecs"): - self.path("libq*.dylib") - self.end_prefix("llplugin/codecs") - - # Similarly for imageformats. - if self.prefix(src="../packages/plugins/imageformats/", dst="llplugin/imageformats"): - self.path("libq*.dylib") - self.end_prefix("llplugin/imageformats") - - # SLPlugin plugins proper + # plugins if self.prefix(src="", dst="llplugin"): self.path2basename("../media_plugins/quicktime/" + self.args['configuration'], "media_plugin_quicktime.dylib") self.path2basename("../media_plugins/webkit/" + self.args['configuration'], "media_plugin_webkit.dylib") + self.path2basename("../packages/lib/release", "libllqtwebkit.dylib") + self.end_prefix("llplugin") self.end_prefix("Resources") @@ -1111,7 +1075,6 @@ class Linux_i686_Manifest(LinuxManifest): self.path("libaprutil-1.so.0") self.path("libaprutil-1.so.0.4.1") self.path("libboost_context-mt.so.*") - self.path("libboost_coroutine-mt.so.*") self.path("libboost_filesystem-mt.so.*") self.path("libboost_program_options-mt.so.*") self.path("libboost_regex-mt.so.*") @@ -1156,6 +1119,7 @@ class Linux_i686_Manifest(LinuxManifest): # previous call did, without having to explicitly state the # version number. self.path("libfontconfig.so.*.*") + self.path("libfreetype.so.*.*") try: self.path("libtcmalloc.so*") #formerly called google perf tools pass @@ -1185,33 +1149,6 @@ class Linux_i686_Manifest(LinuxManifest): self.path("libvivoxplatform.so") self.end_prefix("lib") - # plugin runtime - if self.prefix(src="../packages/lib/release", dst="lib"): - self.path("libQtCore.so*") - self.path("libQtGui.so*") - self.path("libQtNetwork.so*") - self.path("libQtOpenGL.so*") - self.path("libQtWebKit.so*") - self.end_prefix("lib") - - # For WebKit/Qt plugin runtimes (image format plugins) - if self.prefix(src="../packages/plugins/imageformats", dst="bin/llplugin/imageformats"): - self.path("libqgif.so") - self.path("libqico.so") - self.path("libqjpeg.so") - self.path("libqmng.so") - self.path("libqsvg.so") - self.path("libqtiff.so") - self.end_prefix("bin/llplugin/imageformats") - - # For WebKit/Qt plugin runtimes (codec/character encoding plugins) - if self.prefix(src="../packages/plugins/codecs", dst="bin/llplugin/codecs"): - self.path("libqcncodecs.so") - self.path("libqjpcodecs.so") - self.path("libqkrcodecs.so") - self.path("libqtwcodecs.so") - self.end_prefix("bin/llplugin/codecs") - self.strip_binaries() -- cgit v1.2.3 From 5b542e227bb952f1517c32c2de8c8af0294ec617 Mon Sep 17 00:00:00 2001 From: Monty Brandenberg Date: Tue, 3 Jun 2014 19:37:58 -0400 Subject: All: Committing to llqtwebkit2 and the future. Updating all libraries. Updating SDL to 290561, c-ares to 290399, Boost to 290566, colladadom to 290576, curl to 290567, fontconfig to 290569, freetype to 290557, google-mock to 290574, libpng to 290558, libxml2 to 290562, llqtwebkit to 290578, openssl to 290560, PCRE to 290406, zlib to 290556. Document compiling and linking in new 00-COMPILE-LINK-RUN.txt in indra/cmake. It is the README for the building process based on things learned during this library project. Switch building process back to style used for new llqtwebkit2 repo. This builds shared libraries for Qt4 products on all platforms using current build machines and TC task templates. All platforms are building. All have comparable FPS rates. Builds are getting quieter. Forward, comrades! --- indra/newview/viewer_manifest.py | 76 ++++++++++++++++++++++++++++++++-------- 1 file changed, 61 insertions(+), 15 deletions(-) (limited to 'indra/newview/viewer_manifest.py') diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 6729cd617a..2c173d9aaa 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -795,15 +795,42 @@ class Darwin_i386_Manifest(ViewerManifest): for libfile in dylibs: symlinkf(os.path.join(os.pardir, os.pardir, os.pardir, libfile), os.path.join(resource_path, libfile)) - - # plugins + # SLPlugin.app/Contents/Resources gets those Qt4 libraries it needs. + if self.prefix(src="", dst="SLPlugin.app/Contents/Resources"): + for libfile in ('libQtCore.4.dylib', + 'libQtCore.4.7.1.dylib', + 'libQtGui.4.dylib', + 'libQtGui.4.7.1.dylib', + 'libQtNetwork.4.dylib', + 'libQtNetwork.4.7.1.dylib', + 'libQtOpenGL.4.dylib', + 'libQtOpenGL.4.7.1.dylib', + 'libQtSvg.4.dylib', + 'libQtSvg.4.7.1.dylib', + 'libQtWebKit.4.dylib', + 'libQtWebKit.4.7.1.dylib', + 'libQtXml.4.dylib', + 'libQtXml.4.7.1.dylib'): + self.path2basename("../packages/lib/release", libfile) + self.end_prefix("SLPlugin.app/Contents/Resources") + + # Qt4 codecs go to llplugin. Not certain why but this is the first + # location probed according to dtruss so we'll go with that. + if self.prefix(src="../packages/plugins/codecs/", dst="llplugin/codecs"): + self.path("libq*.dylib") + self.end_prefix("llplugin/codecs") + + # Similarly for imageformats. + if self.prefix(src="../packages/plugins/imageformats/", dst="llplugin/imageformats"): + self.path("libq*.dylib") + self.end_prefix("llplugin/imageformats") + + # SLPlugin plugins proper if self.prefix(src="", dst="llplugin"): self.path2basename("../media_plugins/quicktime/" + self.args['configuration'], "media_plugin_quicktime.dylib") self.path2basename("../media_plugins/webkit/" + self.args['configuration'], "media_plugin_webkit.dylib") - self.path2basename("../packages/lib/release", "libllqtwebkit.dylib") - self.end_prefix("llplugin") self.end_prefix("Resources") @@ -1074,20 +1101,9 @@ class Linux_i686_Manifest(LinuxManifest): self.path("libaprutil-1.so") self.path("libaprutil-1.so.0") self.path("libaprutil-1.so.0.4.1") - self.path("libboost_context-mt.so.*") - self.path("libboost_filesystem-mt.so.*") - self.path("libboost_program_options-mt.so.*") - self.path("libboost_regex-mt.so.*") - self.path("libboost_signals-mt.so.*") - self.path("libboost_system-mt.so.*") - self.path("libboost_thread-mt.so.*") - self.path("libcollada14dom.so") self.path("libdb*.so") - self.path("libcrypto.so.*") self.path("libexpat.so.*") - self.path("libssl.so.1.0.0") self.path("libGLOD.so") - self.path("libminizip.so") self.path("libuuid.so*") self.path("libSDL-1.2.so.*") self.path("libdirectfb-1.*.so.*") @@ -1119,7 +1135,10 @@ class Linux_i686_Manifest(LinuxManifest): # previous call did, without having to explicitly state the # version number. self.path("libfontconfig.so.*.*") + + # Include libfreetype.so. but have it work as libfontconfig does. self.path("libfreetype.so.*.*") + try: self.path("libtcmalloc.so*") #formerly called google perf tools pass @@ -1149,6 +1168,33 @@ class Linux_i686_Manifest(LinuxManifest): self.path("libvivoxplatform.so") self.end_prefix("lib") + # plugin runtime + if self.prefix(src="../packages/lib/release", dst="lib"): + self.path("libQtCore.so*") + self.path("libQtGui.so*") + self.path("libQtNetwork.so*") + self.path("libQtOpenGL.so*") + self.path("libQtWebKit.so*") + self.end_prefix("lib") + + # For WebKit/Qt plugin runtimes (image format plugins) + if self.prefix(src="../packages/plugins/imageformats", dst="bin/llplugin/imageformats"): + self.path("libqgif.so") + self.path("libqico.so") + self.path("libqjpeg.so") + self.path("libqmng.so") + self.path("libqsvg.so") + self.path("libqtiff.so") + self.end_prefix("bin/llplugin/imageformats") + + # For WebKit/Qt plugin runtimes (codec/character encoding plugins) + if self.prefix(src="../packages/plugins/codecs", dst="bin/llplugin/codecs"): + self.path("libqcncodecs.so") + self.path("libqjpcodecs.so") + self.path("libqkrcodecs.so") + self.path("libqtwcodecs.so") + self.end_prefix("bin/llplugin/codecs") + self.strip_binaries() -- cgit v1.2.3 From 2ccbef39a69a0b7aeacff7d99eaa757be51d6a77 Mon Sep 17 00:00:00 2001 From: Monty Brandenberg Date: Thu, 5 Jun 2014 18:37:24 -0400 Subject: All: Update openssl to 1.0.1h/290662, curl to 290664, llqtwebkit to 290663. Linux: Include libQtXml and libQtSvg in manifest for libqsvg.so. More documentation thoughts for library package structure. --- indra/newview/viewer_manifest.py | 2 ++ 1 file changed, 2 insertions(+) (limited to 'indra/newview/viewer_manifest.py') diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 2c173d9aaa..926a6d1a08 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -1174,7 +1174,9 @@ class Linux_i686_Manifest(LinuxManifest): self.path("libQtGui.so*") self.path("libQtNetwork.so*") self.path("libQtOpenGL.so*") + self.path("libQtSvg.so*") self.path("libQtWebKit.so*") + self.path("libQtXml.so*") self.end_prefix("lib") # For WebKit/Qt plugin runtimes (image format plugins) -- cgit v1.2.3