[gdk-pixbuf/wip/ebassi/meson: 5/5] WIP: Add Meson build system



commit f2ef8d517d74df73e63cec68843e373ffbf3b821
Author: Emmanuele Bassi <ebassi gnome org>
Date:   Wed May 24 23:47:12 2017 +0100

    WIP: Add Meson build system

 gdk-pixbuf/meson.build        |  177 ++++++++++++++++++++++++
 gdk-pixbuf/pixops/meson.build |    7 +
 meson.build                   |  296 +++++++++++++++++++++++++++++++++++++++++
 meson_options.txt             |   20 +++
 tests/meson.build             |   40 ++++++
 5 files changed, 540 insertions(+), 0 deletions(-)
---
diff --git a/gdk-pixbuf/meson.build b/gdk-pixbuf/meson.build
new file mode 100644
index 0000000..bb46965
--- /dev/null
+++ b/gdk-pixbuf/meson.build
@@ -0,0 +1,177 @@
+subdir('pixops')
+
+# Loader libs
+#  - name
+#  - sources
+#  - conditional, otherwise always built
+loaders = [
+  [ 'png', [ 'io-png.c' ], enabled_loaders.contains('png') ],
+  [ 'bmp', [ 'io-bmp.c' ] ],
+  [ 'gif', [ 'io-gif.c', 'io-gif-animation.c' ] ],
+  [ 'ico', [ 'io-ico.c' ] ],
+  [ 'ani', [ 'io-ani.c', 'io-ani-animation.c' ] ],
+  [ 'jpeg', [ 'io-jpeg.c' ], enabled_loaders.contains('jpeg') ],
+  [ 'pnm', [ 'io-pnm.c' ] ],
+  [ 'tiff', [ 'io-tiff.c' ], enabled_loaders.contains('tiff') ],
+  [ 'xpm', [ 'io-xpm.c' ] ],
+  [ 'xbm', [ 'io-xbm.c' ] ],
+  [ 'tga', [ 'io-tga.c', 'gdk-pixbuf-buffer-queue.c' ] ],
+  [ 'icns', [ 'io-icns.c' ] ],
+  [ 'jasper', [ 'io-jasper.c' ], enabled_loaders.contains('jasper') ],
+  [ 'qtif', [ 'io-qtif.c' ] ]
+]
+
+gdk_pixbuf_cflags = [
+  '-DG_LOG_STRUCTURED=1',
+  '-DG_LOG_DOMAIN="GdkPixbuf"',
+  '-DGDK_PIXBUF_COMPILATION',
+  '-DGDK_PIXBUF_PREFIX="@0@"'.format(gdk_pixbuf_prefix),
+  '-DGDK_PIXBUF_LOCALEDIR="@0@"'.format(gdk_pixbuf_localedir),
+  '-DGDK_PIXBUF_LIBDIR="@0@"'.format(gdk_pixbuf_libdir),
+  '-DGDK_PIXBUF_BINARY_VERSION="@0@"'.format(gdk_pixbuf_binary_version),
+  '-DGDK_PIXBUF_ENABLE_BACKEND',
+  '-DPIXBUF_LIBDIR="@0@"'.format(gdk_pixbuf_loaderdir),
+  '-DBUILT_MODULES_DIR="@0@"'.format(meson.current_build_dir()),
+]
+
+gdk_pixbuf_api_path = 'gdk-pixbuf-@0@/gdk-pixbuf'.format(gdk_pixbuf_api_version)
+
+gdkpixbuf_features_conf = configuration_data()
+gdkpixbuf_features_conf.set('GDK_PIXBUF_MAJOR', gdk_pixbuf_version_major)
+gdkpixbuf_features_conf.set('GDK_PIXBUF_MINOR', gdk_pixbuf_version_minor)
+gdkpixbuf_features_conf.set('GDK_PIXBUF_MICRO', gdk_pixbuf_version_micro)
+gdkpixbuf_features_conf.set('GDK_PIXBUF_VERSION', meson.project_version())
+configure_file(input: 'gdk-pixbuf-features.h.in',
+               output: 'gdk-pixbuf-features.h',
+               configuration: gdkpixbuf_features_conf,
+               install: true,
+               install_dir: join_paths(gdk_pixbuf_includedir, gdk_pixbuf_api_path))
+
+gdkpixbuf_headers = [
+  'gdk-pixbuf.h',
+  'gdk-pixbuf-autocleanups.h',
+  'gdk-pixbuf-core.h',
+  'gdk-pixbuf-transform.h',
+  'gdk-pixbuf-io.h',
+  'gdk-pixbuf-animation.h',
+  'gdk-pixbuf-simple-anim.h',
+  'gdk-pixbuf-loader.h',
+]
+
+install_headers(gdkpixbuf_headers, subdir: gdk_pixbuf_api_path)
+
+gdkpixbuf_sources = [
+  'gdk-pixbuf.c',
+  'gdk-pixbuf-animation.c',
+  'gdk-pixbuf-data.c',
+  'gdk-pixbuf-io.c',
+  'gdk-pixbuf-loader.c',
+  'gdk-pixbuf-scale.c',
+  'gdk-pixbuf-simple-anim.c',
+  'gdk-pixbuf-scaled-anim.c',
+  'gdk-pixbuf-util.c',
+  'gdk-pixdata.c',
+]
+
+gdkpixbuf_marshals = gnome.genmarshal('gdk-pixbuf-marshal',
+                                      sources: 'gdk-pixbuf-marshal.list',
+                                      prefix: '_gdk_pixbuf_marshal')
+
+gdkpixbuf_enums = gnome.mkenums('gdk-pixbuf-enum-types',
+                                sources: gdkpixbuf_headers,
+                                c_template: 'gdk-pixbuf-enum-types.c.template',
+                                h_template: 'gdk-pixbuf-enum-types.h.template',
+                                install_header: true)
+gdkpixbuf_enum_h = gdkpixbuf_enums[1]
+
+# Check if we need to build loaders as built-in functionality
+included_loaders_cflags = []
+included_loaders_deps = []
+
+foreach l: loaders
+  name = l[0]
+  sources = l[1]
+  cond = l.get(2, true)
+
+  if cond and builtin_loaders.contains(name)
+    included_loaders_cflags += '-DINCLUDED_@0@'.format(name)
+
+    mod = static_library('staticpixbufloader-@0@'.format(name),
+                         sources,
+                         dependencies: loaders_deps + gdk_pixbuf_deps,
+                         include_directories: [ root_inc, include_directories('.') ],
+                         c_args: common_cflags + gdk_pixbuf_cflags)
+
+    included_loaders_deps += declare_dependency(link_with: mod)
+  endif
+endforeach
+
+# The main gdk-pixbuf shared library
+gdkpixbuf = shared_library('gdk-pixbuf-2.0',
+                           gdkpixbuf_sources + gdkpixbuf_enums + gdkpixbuf_marshals,
+                           soversion: soversion,
+                           version: libversion,
+                           c_args: common_cflags + gdk_pixbuf_cflags + included_loaders_cflags,
+                           link_args: common_ldflags,
+                           include_directories: root_inc,
+                           dependencies: gdk_pixbuf_deps + included_loaders_deps + [ pixops_dep ],
+                           install: true)
+
+gdkpixbuf_dep = declare_dependency(link_with: gdkpixbuf,
+                                   include_directories: root_inc,
+                                   dependencies: gdk_pixbuf_deps,
+                                   sources: gdkpixbuf_enum_h)
+
+# Now check if we are building loaders as installed shared modules
+# We do this here because shared modules depend on libgdk-pixbuf
+dynamic_loaders = []
+
+foreach l: loaders
+  name = l[0]
+  sources = l[1]
+  cond = l.get(2, true)
+
+  if cond and not builtin_loaders.contains(name)
+    mod = shared_module('pixbufloader-@0@'.format(name),
+                        sources,
+                        dependencies: loaders_deps + gdk_pixbuf_deps + [ gdkpixbuf_dep ],
+                        include_directories: [ root_inc, include_directories('.') ],
+                        c_args: common_cflags + gdk_pixbuf_cflags,
+                        install: true,
+                        install_dir: gdk_pixbuf_loaderdir)
+
+    # We need the path to build loaders.cache for tests
+    dynamic_loaders += mod.full_path()
+  endif
+endforeach
+
+gdkpixbuf_bin = [
+  [ 'gdk-pixbuf-csource' ],
+  [ 'gdk-pixbuf-pixdata' ],
+  [ 'gdk-pixbuf-query-loaders', [ 'queryloaders.c' ] ],
+]
+
+foreach bin: gdkpixbuf_bin
+  bin_name = bin[0]
+  bin_source = bin.get(1, bin_name + '.c')
+
+  bin = executable(bin_name, bin_source,
+                   dependencies: gdk_pixbuf_deps + [ gdkpixbuf_dep ],
+                   include_directories: [ root_inc, include_directories('.') ],
+                   c_args: common_cflags + gdk_pixbuf_cflags,
+                   install: true)
+
+  # Used in tests
+  set_variable(bin_name.underscorify(), bin)
+endforeach
+
+# The 'loaders.cache' used for testing, so we don't accidentally
+# load the installed cache; we always build it by default
+loaders_cache = custom_target('loaders.cache',
+                              output: 'loaders.cache',
+                              capture: true,
+                              command: [
+                                gdk_pixbuf_query_loaders,
+                                dynamic_loaders,
+                              ],
+                              build_by_default: true)
diff --git a/gdk-pixbuf/pixops/meson.build b/gdk-pixbuf/pixops/meson.build
new file mode 100644
index 0000000..62acbe6
--- /dev/null
+++ b/gdk-pixbuf/pixops/meson.build
@@ -0,0 +1,7 @@
+pixops = static_library('pixops', 'pixops.c',
+                        include_directories: root_inc,
+                        dependencies: gdk_pixbuf_deps)
+
+pixops_dep = declare_dependency(link_with: pixops,
+                                include_directories: [ root_inc, include_directories('.') ],
+                                dependencies: gdk_pixbuf_deps)
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..75463eb
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,296 @@
+project('gdk-pixbuf', 'c',
+        version: '2.36.6',
+        license: 'LGPLv2.1+',
+        default_options: [
+          'buildtype=debugoptimized',
+          'warning_level=1',
+          'c_std=c99',
+        ],
+        meson_version: '>= 0.40.1')
+
+add_project_arguments([ '-D_POSIX_C_SOURCE', '-D_DEFAULT_SOURCE' ], language: 'c')
+
+cc = meson.get_compiler('c')
+host_system = host_machine.system()
+
+# Versioning
+gdk_pixbuf_version = meson.project_version()
+version_arr = gdk_pixbuf_version.split('.')
+gdk_pixbuf_version_major = version_arr[0].to_int()
+gdk_pixbuf_version_minor = version_arr[1].to_int()
+gdk_pixbuf_version_micro = version_arr[2].to_int()
+
+gdk_pixbuf_api_version = '2.0'
+gdk_pixbuf_binary_version = '2.10.0'
+
+if gdk_pixbuf_version_minor.is_odd()
+  gdk_pixbuf_interface_age = 0
+else
+  gdk_pixbuf_interface_age = gdk_pixbuf_version_micro
+endif
+
+gdk_pixbuf_binary_age = 100 * gdk_pixbuf_version_minor + gdk_pixbuf_version_micro
+
+# maintaining compatibility with the previous libtool versioning
+# current = binary - interface
+# revision = interface
+soversion = 0
+current = gdk_pixbuf_binary_age - gdk_pixbuf_interface_age
+revision = gdk_pixbuf_interface_age
+libversion = '@0@.@1@.@2@'.format(soversion, current, revision)
+
+# Paths
+gdk_pixbuf_prefix = get_option('prefix')
+gdk_pixbuf_libdir = join_paths(gdk_pixbuf_prefix, get_option('libdir'))
+gdk_pixbuf_includedir = join_paths(gdk_pixbuf_prefix, get_option('includedir'))
+gdk_pixbuf_datadir = join_paths(gdk_pixbuf_prefix, get_option('datadir'))
+gdk_pixbuf_mandir = join_paths(gdk_pixbuf_prefix, get_option('mandir'))
+gdk_pixbuf_localedir = join_paths(gdk_pixbuf_prefix, get_option('localedir'))
+gdk_pixbuf_libexecdir = join_paths(gdk_pixbuf_prefix, get_option('libexecdir'))
+gdk_pixbuf_loaderdir = join_paths(gdk_pixbuf_libdir, 
'gdk-pixbuf-@0@/@1@/loaders'.format(gdk_pixbuf_api_version, gdk_pixbuf_binary_version))
+
+# Dependencies
+glib_req_version = '>= 2.38.0'
+gio_dep = dependency('gio-2.0', version: glib_req_version)
+
+# Configurations
+gdk_pixbuf_conf = configuration_data()
+
+check_headers = [
+  'unistd.h'
+]
+
+foreach h: check_headers
+  if cc.has_header(h)
+    gdk_pixbuf_conf.set('HAVE_' + h.underscorify().to_upper(), 1)
+  endif
+endforeach
+
+# We use links() because sigsetjmp() is often a macro hidden behind other macros
+gdk_pixbuf_conf.set('HAVE_SIGSETJMP',
+                    cc.links('''#define _POSIX_SOURCE
+                                #include <setjmp.h>
+                                int main (void) {
+                                  sigjmp_buf env;
+                                  sigsetjmp (env, 0);
+                                  return 0;
+                                }''', name: 'sigsetjmp'))
+
+# XXX: Remove once we declare gdk-pixbuf C99-only
+if cc.get_id() != 'msvc'
+  gdk_pixbuf_conf.set('HAVE_ROUND', 1)
+  gdk_pixbuf_conf.set('HAVE_LRINT', 1)
+endif
+
+# Common compiler and linker flags
+common_cflags = []
+common_ldflags = []
+
+if cc.get_id() == 'msvc'
+  # Compiler options taken from msvc_recommended_pragmas.h
+  # in GLib, based on _Win32_Programming_ by Rector and Newcomer
+  test_cflags = [
+    '-we4002', # too many actual parameters for macro
+    '-we4003', # not enough actual parameters for macro
+    '-w14010', # single-line comment contains line-continuation character
+    '-we4013', # 'function' undefined; assuming extern returning int
+    '-w14016', # no function return type; using int as default
+    '-we4020', # too many actual parameters
+    '-we4021', # too few actual parameters
+    '-we4027', # function declared without formal parameter list
+    '-we4029', # declared formal parameter list different from definition
+    '-we4033', # 'function' must return a value
+    '-we4035', # 'function' : no return value
+    '-we4045', # array bounds overflow
+    '-we4047', # different levels of indirection
+    '-we4049', # terminating line number emission
+    '-we4053', # an expression of type void was used as an operand
+    '-we4071', # no function prototype given
+    '-we4819', # the file contains a character that cannot be represented in the current code page
+  ]
+elif cc.get_id() == 'gcc' or cc.get_id() == 'clang'
+  test_cflags = [
+    '-Wpointer-arith',
+    '-Wformat=2',
+    '-Wstrict-prototypes',
+    '-Wnested-externs',
+    '-Wold-style-definition',
+    '-Wdeclaration-after-statement',
+    '-Wunused',
+    '-Wcast-align',
+    '-Wmissing-noreturn',
+    '-Wmissing-format-attribute',
+    '-Wlogical-op',
+    '-fno-strict-aliasing',
+    '-Wno-int-conversion',
+    '-Wno-uninitialized',
+    '-Wno-discarded-qualifiers',
+    '-Werror=implicit',
+    '-Werror=nonnull',
+    '-Werror=init-self',
+    '-Werror=main',
+    '-Werror=missing-braces',
+    '-Werror=sequence-point',
+    '-Werror=return-type',
+    '-Werror=trigraphs',
+    '-Werror=array-bounds',
+    '-Werror=write-strings',
+    '-Werror=address',
+    '-Werror=int-to-pointer-cast',
+    '-Werror=pointer-to-int-cast',
+    '-Werror=empty-body',
+  ]
+
+  # Ensure we have the correct bit packing on Windows
+  if host_system == 'windows'
+    test_cflags += '-mms-bitfields'
+  endif
+else
+  test_cflags = []
+endif
+
+# Symbol visibility
+if get_option('default_library') != 'static'
+  if host_system == 'windows'
+    gdk_pixbuf_conf.set('DLL_EXPORT', true)
+    gdk_pixbuf_conf.set('_GDK_PIXBUF_EXTERN', '__declspec(dllexport) extern')
+    if cc.get_id() != 'msvc'
+      test_cflags += ['-fvisibility=hidden']
+    endif
+  else
+    gdk_pixbuf_conf.set('_GDK_PIXBUF_EXTERN', '__attribute__((visibility("default"))) extern')
+    test_cflags += ['-fvisibility=hidden']
+  endif
+endif
+
+foreach cflag: test_cflags
+  if cc.has_argument(cflag)
+    common_cflags += [ cflag ]
+  endif
+endforeach
+
+# Linker flags
+if host_machine.system() == 'linux'
+  foreach ldflag: [ '-Wl,-Bsymbolic', '-Wl,-z,relro', '-Wl,-z,now', ]
+    if cc.has_argument(ldflag)
+      common_ldflags += [ ldflag ]
+    endif
+  endforeach
+endif
+
+# Maintain compatibility with autotools on macOS
+if host_machine.system() == 'darwin'
+  common_ldflags += [ '-compatibility_version=1', '-current_version=1.0', ]
+endif
+
+# Dependencies
+mathlib_dep = cc.find_library('m', required: false)
+gobject_dep = dependency('gobject-2.0', version: glib_req_version)
+gmodule_dep = dependency('gmodule-no-export-2.0')
+gio_dep = dependency('gio-2.0')
+
+gdk_pixbuf_deps = [ mathlib_dep, gobject_dep, gmodule_dep, gio_dep ]
+
+# Check if we can build shared modules
+build_modules = gmodule_dep.get_pkgconfig_variable('gmodule_supported') == true
+gdk_pixbuf_conf.set10('USE_GMODULE', build_modules)
+
+# Check which loaders should be built into gdk-pixbuf
+builtin_loaders = get_option('builtin_loaders').split(',')
+
+# Loader dependencies
+enabled_loaders = []
+loaders_deps = []
+
+if get_option('enable_png')
+  # We have a vast selection of libpng versions to choose from
+  foreach png: [ 'libpng16', 'libpng15', 'libpng14', 'libpng12', 'libpng13', 'libpng10' ]
+    if not enabled_loaders.contains('png')
+      png_dep = dependency(png, required: false)
+      if png_dep.found()
+        enabled_loaders += 'png'
+        loaders_deps += png_dep
+      endif
+    endif
+  endforeach
+endif
+
+if get_option('enable_tiff')
+  if cc.has_header('tiffio.h')
+    tiff_dep = cc.find_library('tiff', required: false)
+    if tiff_dep.found() and cc.has_function('TIFFReadRGBAImageOriented', dependencies: tiff_dep)
+      enabled_loaders += 'tiff'
+      loaders_deps += tiff_dep
+    elif tiff_dep.found() and cc.has_function('TIFFWriteScanline', dependencies: tiff_dep)
+      enabled_loaders += 'tiff'
+      loaders_deps += tiff_dep
+    else
+      tiff_dep = cc.find_library('tiff34', required: false)
+      if tiff_dep.found() and cc.has_function('TIFFFlushData', dependencies: tiff_dep)
+        enabled_loaders += 'tiff'
+        loaders_deps += tiff_dep
+      endif
+    endif
+  endif
+endif
+
+if get_option('enable_jpeg')
+  if cc.has_header('jpeglib.h')
+    jpeg_dep = cc.find_library('jpeg', required: false)
+    if jpeg_dep.found() and cc.has_function('jpeg_destroy_decompress', dependencies: jpeg_dep)
+      enabled_loaders += 'jpeg'
+      loaders_deps += jpeg_dep
+
+      gdk_pixbuf_conf.set('HAVE_PROGRESSIVE_JPEG', cc.has_function('jpeg_simple_progression', dependencies: 
jpeg_dep))
+    endif
+  endif
+endif
+
+if get_option('enable_jasper')
+  if cc.has_header('jasper/jasper.h')
+    jasper_dep = cc.find_library('jasper', required: false)
+    if jasper_dep.found() and cc.has_function('jas_init', dependencies: jasper_dep)
+      enabled_loaders += 'jasper'
+      loaders_deps += jasper_dep
+    endif
+  endif
+endif
+
+gdk_pixbuf_conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
+
+configure_file(output: 'config.h', configuration: gdk_pixbuf_conf)
+
+# Compat variables for pkgconfig
+pkgconf = configuration_data()
+pkgconf.set('prefix', gdk_pixbuf_prefix)
+pkgconf.set('exec_prefix', gdk_pixbuf_prefix)
+pkgconf.set('libdir', gdk_pixbuf_libdir)
+pkgconf.set('includedir', gdk_pixbuf_includedir)
+pkgconf.set('GDK_PIXBUF_API_VERSION', gdk_pixbuf_api_version)
+pkgconf.set('GDK_PIXBUF_BINARY_VERSION', gdk_pixbuf_binary_version)
+pkgconf.set('GDK_PIXBUF_EXTRA_CFLAGS', '')
+pkgconf.set('GDK_PIXBUF_EXTRA_LIBS', '')
+pkgconf.set('PNG_DEP_CFLAGS_PACKAGES', '')
+pkgconf.set('VERSION', meson.project_version())
+
+configure_file(input: 'gdk-pixbuf-2.0.pc.in',
+               output: 'gdk-pixbuf-2.0.pc',
+               configuration: pkgconf,
+               install: true,
+               install_dir: join_paths(gdk_pixbuf_libdir, 'pkgconfig'))
+
+root_inc = include_directories('.')
+
+gnome = import('gnome')
+
+subdir('gdk-pixbuf')
+
+# i18n
+#subdir('po')
+
+subdir('tests')
+
+# Documentation
+#if get_option('enable-gtk-doc')
+#  subdir('doc')
+#endif
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000..a8c3842
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,20 @@
+option('enable_png',
+       description: 'Enable PNG loader (requires libpng)',
+       type: 'boolean',
+       value: true)
+option('enable_tiff',
+       description: 'Enable TIFF loader (requires libtiff)',
+       type: 'boolean',
+       value: true)
+option('enable_jpeg',
+       description: 'Enable JPEG loader (requires libjpeg)',
+       type: 'boolean',
+       value: true)
+option('enable_jasper',
+       description: 'Enable JPEG2000 loader (requires libjasper)',
+       type: 'boolean',
+       value: true)
+option('builtin_loaders',
+       description: 'Comma-separated list of loaders to build into gdk-pixbuf',
+       type: 'string',
+       value: 'none')
diff --git a/tests/meson.build b/tests/meson.build
new file mode 100644
index 0000000..0d7681e
--- /dev/null
+++ b/tests/meson.build
@@ -0,0 +1,40 @@
+installed_tests = [
+  [ 'animation' ],
+#  [ 'cve-2015-4491' ], # FIXME: Needs resources
+  [ 'pixbuf-fail' ],
+  [ 'pixbuf-icon-serialize' ],
+  [ 'pixbuf-randomly-modified' ],
+  [ 'pixbuf-threads' ],
+  [ 'pixbuf-icc' ],
+  [ 'pixbuf-jpeg' ],
+  [ 'pixbuf-dpi' ],
+#  [ 'pixbuf-pixdata' ], # FIXME: Needs resources
+  [ 'pixbuf-stream' ],
+  [ 'pixbuf-reftest' ],
+#  [ 'pixbuf-resource' ], # FIXME: Needs resources
+  [ 'pixbuf-scale' ],
+  [ 'pixbuf-scale-two-step' ],
+  [ 'pixbuf-short-gif-write' ],
+  [ 'pixbuf-save' ],
+  [ 'pixbuf-readonly-to-mutable' ],
+  [ 'pixbuf-composite' ],
+  [ 'pixbuf-area-updated' ],
+]
+
+foreach t: installed_tests
+  test_name = t[0]
+  test_sources = [ test_name + '.c', 'test-common.c' ]
+
+  test_bin = executable(test_name, test_sources,
+                        dependencies: gdk_pixbuf_deps + [ gdkpixbuf_dep ],
+                        include_directories: [ root_inc, include_directories('../gdk-pixbuf') ],
+                        c_args: common_cflags)
+
+  test(test_name, test_bin,
+       args: [ '-k', '--tap' ],
+       env: [
+         'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()),
+         'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()),
+         'GDK_PIXBUF_MODULE_FILE=@0@'.format(join_paths(meson.current_build_dir(), 
'../gdk-pixbuf/loaders.cache'))
+       ])
+endforeach


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]