diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e3019b4a1f..f0002a871c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -508,6 +508,7 @@ gimp-win:
- _build-$MSYSTEM_PREFIX/done-dll.list
# Needed by dist-installer-weekly and dist-store-weekly
- _build-$MSYSTEM_PREFIX/config.h
+ - _build-$MSYSTEM_PREFIX/plug-ins/file_associations.list
- _build-$MSYSTEM_PREFIX/build/windows/installer/
- _build-$MSYSTEM_PREFIX/build/windows/store/
expire_in: 2 days
diff --git a/build/windows/installer/base_gimp3264.iss b/build/windows/installer/base_gimp3264.iss
index b61a55ce09..4102bcf608 100644
--- a/build/windows/installer/base_gimp3264.iss
+++ b/build/windows/installer/base_gimp3264.iss
@@ -463,7 +463,7 @@ Root: HKA; Subkey: "Software\RegisteredApplications"; ValueType: string; ValueNa
#if Copy(FileLine,1,1)=="#" || FileLine==""
//skip comments and empty lines
#else
- #pragma message "Processing data_associations.list: " + FileLine
+ #pragma message "Processing file_associations.list: " + FileLine
Root: HKA; Subkey: "Software\Classes\.{#FileLine}\OpenWithProgids"; ValueType: string; ValueName: "GIMP{#GIMP_MUTEX_VERSION}.{#FileLine}"; ValueData: ""; Flags: uninsdeletevalue
Root: HKA; Subkey: "Software\Classes\GIMP{#GIMP_MUTEX_VERSION}.{#FileLine}"; ValueType: string; ValueName: ""; ValueData: "GIMP {#CUSTOM_GIMP_VERSION} {#UpperCase(FileLine)}"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\GIMP{#GIMP_MUTEX_VERSION}.{#FileLine}\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\gimp-{#GIMP_MUTEX_VERSION}.exe,2"
@@ -474,7 +474,7 @@ Root: HKA; Subkey: "Software\GIMP {#GIMP_MUTEX_VERSION}\Capabilities\FileAssocia
#endif
#endsub
#define FileHandle
-#for {FileHandle = FileOpen(AddBackslash(SourcePath)+"data_associations.list"); \
+#for {FileHandle = FileOpen(AddBackslash(BUILD_DIR)+"plug-ins\file_associations.list"); \
FileHandle && !FileEof(FileHandle); FileLine = FileRead(FileHandle)} \
ProcessAssociation
#if FileHandle
diff --git a/build/windows/installer/data_associations.list b/build/windows/installer/data_associations.list
deleted file mode 100644
index 632d517258..0000000000
--- a/build/windows/installer/data_associations.list
+++ /dev/null
@@ -1,80 +0,0 @@
-ani
-avif
-bmp
-dds
-g3
-cel
-cur
-dcm
-dcx
-dicom
-exr
-gif
-heif
-heic
-hej2
-icns
-jp2
-j2k
-j2c
-jpc
-jxl
-pcx
-pcc
-pdf
-png
-pnm
-ppm
-pgm
-pbm
-pfm
-pam
-ps
-eps
-psp
-tub
-pspimage
-im1
-im8
-im24
-im32
-rs
-ras
-svg
-tga
-vda
-icb
-vst
-tif
-tiff
-webp
-wmf
-apm
-xpm
-xwd
-fit
-fits
-fli
-flc
-jpg
-jpeg
-jpe
-psd
-sgi
-rgb
-rgba
-bw
-icon
-pix
-matte
-mask
-alpha
-als
-xbm
-ora
-qoi
-wbmp
-acbm
-iff
-ilbm
-lbm
diff --git a/build/windows/store/3_dist-gimp-winsdk.ps1 b/build/windows/store/3_dist-gimp-winsdk.ps1
index 12e54ccc54..0b75529579 100644
--- a/build/windows/store/3_dist-gimp-winsdk.ps1
+++ b/build/windows/store/3_dist-gimp-winsdk.ps1
@@ -241,8 +241,8 @@ foreach ($bundle in $supported_archs)
Foreach-Object {$_ -replace "@CHANNEL_SUFFIX@","$channel_suffix"} | Foreach-Object {$_ -replace "@MUTEX_SUFFIX@","$mutex_suffix"} |
Set-Content $msix_arch\AppxManifest.xml
### Match supported filetypes
- $file_types = Get-Content 'build\windows\installer\data_associations.list' | Foreach-Object {" ." + $_} |
- Foreach-Object {$_ + ""} | Where-Object {$_ -notmatch 'xcf'}
+ $file_types = Get-Content "$build_dir\plug-ins\file_associations.list" | Foreach-Object {" ." + $_} |
+ Foreach-Object {$_ + ""} | Where-Object {$_ -notmatch 'xcf'}
(Get-Content $msix_arch\AppxManifest.xml) | Foreach-Object {$_ -replace "@FILE_TYPES@","$file_types"} |
Set-Content $msix_arch\AppxManifest.xml
diff --git a/plug-ins/file-bmp/meson.build b/plug-ins/file-bmp/meson.build
index 80e5ae11bb..cb7303ddf7 100644
--- a/plug-ins/file-bmp/meson.build
+++ b/plug-ins/file-bmp/meson.build
@@ -10,12 +10,12 @@ huffman = custom_target('huffman.h',
command: [gen_huffman, '@OUTPUT@'],
)
-plugin_sources = [
+plugin_sourcecode = [
'bmp-load.c',
'bmp-export.c',
'bmp.c',
- huffman,
]
+plugin_sources = plugin_sourcecode + huffman
if platform_windows
plugin_sources += windows.compile_resources(
diff --git a/plug-ins/file-dds/meson.build b/plug-ins/file-dds/meson.build
index 4c06e07767..d72cd83d02 100644
--- a/plug-ins/file-dds/meson.build
+++ b/plug-ins/file-dds/meson.build
@@ -1,6 +1,6 @@
plugin_name = 'file-dds'
-plugin_sources = [
+plugin_sourcecode = [
'bc7.c',
'dds.c',
'ddsread.c',
@@ -10,6 +10,7 @@ plugin_sources = [
'misc.c',
'formats.c',
]
+plugin_sources = plugin_sourcecode
if platform_windows
plugin_sources += windows.compile_resources(
diff --git a/plug-ins/file-exr/meson.build b/plug-ins/file-exr/meson.build
index ba94f7cb66..e5d483af9f 100644
--- a/plug-ins/file-exr/meson.build
+++ b/plug-ins/file-exr/meson.build
@@ -2,10 +2,11 @@ if openexr.found()
plugin_name = 'file-exr'
-plugin_sources = [
+plugin_sourcecode = [
'file-exr.c',
'openexr-wrapper.cc',
]
+plugin_sources = plugin_sourcecode
if platform_windows
plugin_sources += windows.compile_resources(
diff --git a/plug-ins/file-faxg3/meson.build b/plug-ins/file-faxg3/meson.build
index 972b611bce..48ff38b2c7 100644
--- a/plug-ins/file-faxg3/meson.build
+++ b/plug-ins/file-faxg3/meson.build
@@ -1,9 +1,10 @@
plugin_name = 'file-faxg3'
-plugin_sources = [
+plugin_sourcecode = [
'faxg3.c',
'g3.c',
]
+plugin_sources = plugin_sourcecode
if platform_windows
plugin_sources += windows.compile_resources(
diff --git a/plug-ins/file-fits/meson.build b/plug-ins/file-fits/meson.build
index 585bfb292d..aced4f971a 100644
--- a/plug-ins/file-fits/meson.build
+++ b/plug-ins/file-fits/meson.build
@@ -1,9 +1,10 @@
if cfitsio_dep.found()
plugin_name = 'file-fits'
- plugin_sources = [
+ plugin_sourcecode = [
'fits.c',
]
+ plugin_sources = plugin_sourcecode
if platform_windows
plugin_sources += windows.compile_resources(
diff --git a/plug-ins/file-fli/meson.build b/plug-ins/file-fli/meson.build
index 70a242ec15..3785aeeb19 100644
--- a/plug-ins/file-fli/meson.build
+++ b/plug-ins/file-fli/meson.build
@@ -1,9 +1,10 @@
plugin_name = 'file-fli'
-plugin_sources = [
+plugin_sourcecode = [
'fli-gimp.c',
'fli.c',
]
+plugin_sources = plugin_sourcecode
if platform_windows
plugin_sources += windows.compile_resources(
diff --git a/plug-ins/file-icns/meson.build b/plug-ins/file-icns/meson.build
index 68345633ba..cda5e890e8 100644
--- a/plug-ins/file-icns/meson.build
+++ b/plug-ins/file-icns/meson.build
@@ -1,11 +1,12 @@
plugin_name = 'file-icns'
-plugin_sources = [
+plugin_sourcecode = [
'file-icns-data.c',
'file-icns-load.c',
'file-icns-export.c',
'file-icns.c',
]
+plugin_sources = plugin_sourcecode
if platform_windows
plugin_sources += windows.compile_resources(
diff --git a/plug-ins/file-ico/meson.build b/plug-ins/file-ico/meson.build
index f3f965d11e..2bff388e22 100644
--- a/plug-ins/file-ico/meson.build
+++ b/plug-ins/file-ico/meson.build
@@ -1,11 +1,12 @@
plugin_name = 'file-ico'
-plugin_sources = [
+plugin_sourcecode = [
'ico-dialog.c',
'ico-load.c',
'ico-export.c',
'ico.c',
]
+plugin_sources = plugin_sourcecode
if platform_windows
plugin_sources += windows.compile_resources(
diff --git a/plug-ins/file-jpeg/meson.build b/plug-ins/file-jpeg/meson.build
index 09a3b1dceb..5bbec5af6e 100644
--- a/plug-ins/file-jpeg/meson.build
+++ b/plug-ins/file-jpeg/meson.build
@@ -1,6 +1,6 @@
plugin_name = 'file-jpeg'
-plugin_sources = [
+plugin_sourcecode = [
'jpeg-icc.c',
'jpeg-load.c',
'jpeg-quality.c',
@@ -8,6 +8,7 @@ plugin_sources = [
'jpeg-settings.c',
'jpeg.c',
]
+plugin_sources = plugin_sourcecode
if platform_windows
plugin_sources += windows.compile_resources(
diff --git a/plug-ins/file-psd/meson.build b/plug-ins/file-psd/meson.build
index cea16f37f9..2e7fe73976 100644
--- a/plug-ins/file-psd/meson.build
+++ b/plug-ins/file-psd/meson.build
@@ -1,6 +1,6 @@
plugin_name = 'file-psd'
-plugin_sources = [
+plugin_sourcecode = [
'psd-image-res-load.c',
'psd-layer-res-load.c',
'psd-load.c',
@@ -9,6 +9,7 @@ plugin_sources = [
'psd-util.c',
'psd.c',
]
+plugin_sources = plugin_sourcecode
if platform_windows
plugin_sources += windows.compile_resources(
diff --git a/plug-ins/file-raw/meson.build b/plug-ins/file-raw/meson.build
index bd3f19f7c3..f896c2fed6 100644
--- a/plug-ins/file-raw/meson.build
+++ b/plug-ins/file-raw/meson.build
@@ -8,10 +8,11 @@ file_raw_exes = [
foreach plugin_name : file_raw_exes
- plugin_sources = [
+ plugin_sourcecode = [
plugin_name +'.c',
'file-raw-utils.c',
]
+ plugin_sources = plugin_sourcecode
if platform_windows
plugin_rc = configure_file(
diff --git a/plug-ins/file-sgi/meson.build b/plug-ins/file-sgi/meson.build
index ec529e678b..038bb292b8 100644
--- a/plug-ins/file-sgi/meson.build
+++ b/plug-ins/file-sgi/meson.build
@@ -1,9 +1,10 @@
plugin_name = 'file-sgi'
-plugin_sources = [
+plugin_sourcecode = [
'sgi-lib.c',
'sgi.c',
]
+plugin_sources = plugin_sourcecode
if platform_windows
plugin_sources += windows.compile_resources(
diff --git a/plug-ins/file-tiff/meson.build b/plug-ins/file-tiff/meson.build
index 5d2a6a779f..a525f471f1 100644
--- a/plug-ins/file-tiff/meson.build
+++ b/plug-ins/file-tiff/meson.build
@@ -1,11 +1,12 @@
plugin_name = 'file-tiff'
-plugin_sources = [
+plugin_sourcecode = [
'file-tiff-io.c',
'file-tiff-export.c',
'file-tiff.c',
'file-tiff-load.c',
]
+plugin_sources = plugin_sourcecode
if platform_windows
plugin_sources += windows.compile_resources(
diff --git a/plug-ins/file-webp/meson.build b/plug-ins/file-webp/meson.build
index 3206d12f59..d5f90a2964 100644
--- a/plug-ins/file-webp/meson.build
+++ b/plug-ins/file-webp/meson.build
@@ -2,12 +2,13 @@ if webp_found
plugin_name = 'file-webp'
-plugin_sources = [
+plugin_sourcecode = [
'file-webp-dialog.c',
'file-webp-load.c',
'file-webp-export.c',
'file-webp.c',
]
+plugin_sources = plugin_sourcecode
if platform_windows
plugin_sources += windows.compile_resources(
diff --git a/plug-ins/flame/meson.build b/plug-ins/flame/meson.build
index 87f2f0d81a..2bb55d794f 100644
--- a/plug-ins/flame/meson.build
+++ b/plug-ins/flame/meson.build
@@ -1,11 +1,12 @@
plugin_name = 'flame'
-plugin_sources = [
+plugin_sourcecode = [
'cmap.c',
'flame.c',
'libifs.c',
'rect.c',
]
+plugin_sources = plugin_sourcecode
if platform_windows
plugin_sources += windows.compile_resources(
diff --git a/plug-ins/fractal-explorer/meson.build b/plug-ins/fractal-explorer/meson.build
index baf80bf286..808db1e504 100644
--- a/plug-ins/fractal-explorer/meson.build
+++ b/plug-ins/fractal-explorer/meson.build
@@ -2,10 +2,11 @@ subdir('examples')
plugin_name = 'fractal-explorer'
-plugin_sources = [
+plugin_sourcecode = [
'fractal-explorer-dialogs.c',
'fractal-explorer.c',
]
+plugin_sources = plugin_sourcecode
if platform_windows
plugin_sources += windows.compile_resources(
diff --git a/plug-ins/generate_associations.py b/plug-ins/generate_associations.py
new file mode 100644
index 0000000000..324021174f
--- /dev/null
+++ b/plug-ins/generate_associations.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python3
+import sys
+import os
+import re
+
+associations = set()
+
+#Read file loading plug-ins sourcecode
+source_files = sys.argv[2:]
+for source_file in source_files:
+ try:
+ with open(source_file, 'r', encoding='utf-8') as f:
+ content = f.read()
+ except Exception as e:
+ sys.stderr.write(f"(WARNING): Unable to open file {source_file}: {e}\n")
+ continue
+
+ #Parse extensions declared in the sourcecode
+ source_file_ext = os.path.splitext(source_file)[1].lower()
+ if source_file_ext == '.c':
+ if "LOAD_PROC" not in content and "load_procedure" not in content:
+ continue
+ regex = (r'gimp_file_procedure_set_extensions\s*'
+ r'\(\s*GIMP_FILE_PROCEDURE\s*\(\s*procedure\s*\)\s*,\s*"([^"]+)"')
+ elif source_file_ext == '.py':
+ if "LoadProcedure" not in content:
+ continue
+ regex = r'procedure\.set_extensions\s*\(\s*"([^"]+)"\s*\)'
+ else:
+ continue
+ for match in re.findall(regex, content, re.DOTALL):
+ #(Take care of extensions separated by commas)
+ for extension in match.split(','):
+ trimmed = extension.strip()
+ if trimmed:
+ associations.add(trimmed)
+
+#Create list of associations with the parsed extensions
+output_file = sys.argv[1]
+try:
+ with open(output_file, 'w', encoding='utf-8') as outf:
+ outf.writelines(f"{assoc}\n" for assoc in sorted(associations))
+except Exception as e:
+ sys.stderr.write(f"(ERROR): When writing output file {output_file}: {e}\n")
+ sys.exit(1)
diff --git a/plug-ins/gfig/meson.build b/plug-ins/gfig/meson.build
index 0a1a8b1a35..58e630a19f 100644
--- a/plug-ins/gfig/meson.build
+++ b/plug-ins/gfig/meson.build
@@ -3,7 +3,7 @@ subdir('images')
plugin_name = 'gfig'
-plugin_sources = [
+plugin_sourcecode = [
'gfig-arc.c',
'gfig-bezier.c',
'gfig-circle.c',
@@ -20,8 +20,8 @@ plugin_sources = [
'gfig-star.c',
'gfig-style.c',
'gfig.c',
- gfig_icon_sources,
]
+plugin_sources = plugin_sourcecode + gfig_icon_sources
plugin_sources += gnome.compile_resources(
'gfig-menus',
diff --git a/plug-ins/gimpressionist/meson.build b/plug-ins/gimpressionist/meson.build
index 44f283a83a..819041f863 100644
--- a/plug-ins/gimpressionist/meson.build
+++ b/plug-ins/gimpressionist/meson.build
@@ -4,7 +4,7 @@ subdir('Presets')
plugin_name = 'gimpressionist'
-plugin_sources = [
+plugin_sourcecode = [
'brush.c',
'color.c',
'general.c',
@@ -24,6 +24,7 @@ plugin_sources = [
'sizemap.c',
'utils.c',
]
+plugin_sources = plugin_sourcecode
if platform_windows
plugin_sources += windows.compile_resources(
diff --git a/plug-ins/gradient-flare/meson.build b/plug-ins/gradient-flare/meson.build
index 44f4012f53..fefe3d3423 100644
--- a/plug-ins/gradient-flare/meson.build
+++ b/plug-ins/gradient-flare/meson.build
@@ -2,9 +2,10 @@ subdir('flares')
plugin_name = 'gradient-flare'
-plugin_sources = [
+plugin_sourcecode = [
'gradient-flare.c',
]
+plugin_sources = plugin_sourcecode
if platform_windows
plugin_sources += windows.compile_resources(
diff --git a/plug-ins/help-browser/meson.build b/plug-ins/help-browser/meson.build
index a148ad518a..8a925e6dd7 100644
--- a/plug-ins/help-browser/meson.build
+++ b/plug-ins/help-browser/meson.build
@@ -2,11 +2,12 @@ if get_option('webkit-unmaintained')
plugin_name = 'help-browser'
-plugin_sources = [
+plugin_sourcecode = [
'dialog.c',
'help-browser.c',
'uri.c',
]
+plugin_sources = plugin_sourcecode
plugin_sources += gnome.compile_resources(
'help-menus',
diff --git a/plug-ins/help/meson.build b/plug-ins/help/meson.build
index fcf6ff9fa0..e7d689d607 100644
--- a/plug-ins/help/meson.build
+++ b/plug-ins/help/meson.build
@@ -1,6 +1,6 @@
plugin_name = 'help'
-plugin_sources = [
+plugin_sourcecode = [
# 'gimp-help-lookup.c',
'gimphelp.c',
'gimphelpdomain.c',
@@ -8,6 +8,7 @@ plugin_sources = [
'gimphelplocale.c',
'gimphelpprogress.c',
]
+plugin_sources = plugin_sourcecode
if platform_windows
plugin_sources += windows.compile_resources(
diff --git a/plug-ins/ifs-compose/meson.build b/plug-ins/ifs-compose/meson.build
index ae52e25ef4..fb48f375be 100644
--- a/plug-ins/ifs-compose/meson.build
+++ b/plug-ins/ifs-compose/meson.build
@@ -1,10 +1,11 @@
plugin_name = 'ifs-compose'
-plugin_sources = [
+plugin_sourcecode = [
'ifs-compose-storage.c',
'ifs-compose-utils.c',
'ifs-compose.c',
]
+plugin_sources = plugin_sourcecode
plugin_sources += gnome.compile_resources(
'ifs-menus',
diff --git a/plug-ins/imagemap/meson.build b/plug-ins/imagemap/meson.build
index a4524deda0..cf9a404f6f 100644
--- a/plug-ins/imagemap/meson.build
+++ b/plug-ins/imagemap/meson.build
@@ -2,7 +2,7 @@ subdir('images')
plugin_name = 'imagemap'
-plugin_sources = [
+plugin_sourcecode = [
'imap_about.c',
'imap_browse.c',
'imap_circle.c',
@@ -60,8 +60,8 @@ plugin_sources = [
'imap_string.c',
'imap_taglist.c',
'imap_ui_grid.c',
- imagemap_icon_sources,
]
+plugin_sources = plugin_sourcecode + imagemap_icon_sources
plugin_sources += gnome.compile_resources(
'imagemap-menus',
diff --git a/plug-ins/lighting/meson.build b/plug-ins/lighting/meson.build
index 44e3f3213d..11a107211d 100644
--- a/plug-ins/lighting/meson.build
+++ b/plug-ins/lighting/meson.build
@@ -2,7 +2,7 @@ subdir('images')
plugin_name = 'lighting'
-plugin_sources = [
+plugin_sourcecode = [
'lighting-apply.c',
'lighting-icons.c',
'lighting-image.c',
@@ -10,8 +10,8 @@ plugin_sources = [
'lighting-preview.c',
'lighting-shade.c',
'lighting-ui.c',
- lighting_icon_sources,
]
+plugin_sources = plugin_sourcecode + lighting_icon_sources
if platform_windows
plugin_sources += windows.compile_resources(
diff --git a/plug-ins/map-object/meson.build b/plug-ins/map-object/meson.build
index e17776b40d..3ab6110eba 100644
--- a/plug-ins/map-object/meson.build
+++ b/plug-ins/map-object/meson.build
@@ -1,6 +1,6 @@
plugin_name = 'map-object'
-plugin_sources = [
+plugin_sourcecode = [
'arcball.c',
'map-object-apply.c',
'map-object-icons.c',
@@ -9,8 +9,8 @@ plugin_sources = [
'map-object-preview.c',
'map-object-shade.c',
'map-object-ui.c',
- lighting_icon_sources,
]
+plugin_sources = plugin_sourcecode + lighting_icon_sources
if platform_windows
plugin_sources += windows.compile_resources(
diff --git a/plug-ins/meson.build b/plug-ins/meson.build
index e1c6ad8afd..ad7b43901c 100644
--- a/plug-ins/meson.build
+++ b/plug-ins/meson.build
@@ -1,34 +1,113 @@
subdir('common')
-subdir('file-bmp')
-subdir('file-dds')
-subdir('file-exr')
-subdir('file-faxg3')
-subdir('file-fits')
-subdir('file-fli')
-subdir('file-icns')
-subdir('file-ico')
-subdir('file-jpeg')
-subdir('file-psd')
-subdir('file-raw')
-subdir('file-sgi')
-subdir('file-tiff')
-subdir('file-webp')
-subdir('flame')
-subdir('fractal-explorer')
-subdir('gfig')
-subdir('gimpressionist')
-subdir('gradient-flare')
-subdir('help')
-subdir('help-browser')
-subdir('ifs-compose')
-subdir('imagemap')
-subdir('lighting')
-subdir('map-object')
-subdir('metadata')
-subdir('pagecurl')
-subdir('print')
+
+if get_option('windows-installer') or get_option('ms-store')
+ all_plugins_sources = []
+ foreach plugin : common_plugins_list
+ if plugin.get('name').startswith('file-') and plugin.get('name') != 'file-desktop-link' and plugin.get('name') != 'file-lnk'
+ all_plugins_sources += [ meson.current_source_dir() / 'common' / plugin.get('name') + '.c' ]
+ endif
+ endforeach
+endif
+
+
+complex_plugins_list = [
+ { 'name': 'file-bmp', },
+ { 'name': 'file-dds', },
+ { 'name': 'file-faxg3', },
+ { 'name': 'file-fli', },
+ { 'name': 'file-icns', },
+ { 'name': 'file-ico', },
+ { 'name': 'file-jpeg', },
+ { 'name': 'file-psd', },
+ { 'name': 'file-raw', },
+ { 'name': 'file-sgi', },
+ { 'name': 'file-tiff', },
+ { 'name': 'flame', },
+ { 'name': 'fractal-explorer', },
+ { 'name': 'gfig', },
+ { 'name': 'gimpressionist', },
+ { 'name': 'gradient-flare', },
+ { 'name': 'help', },
+ { 'name': 'ifs-compose', },
+ { 'name': 'imagemap', },
+ { 'name': 'lighting', },
+ { 'name': 'map-object', },
+ { 'name': 'metadata', },
+ { 'name': 'pagecurl', },
+ { 'name': 'print', },
+ { 'name': 'screenshot', },
+ { 'name': 'script-fu', },
+ { 'name': 'selection-to-path', }
+]
+
+if openexr.found()
+ complex_plugins_list += {
+ 'name': 'file-exr',
+ }
+endif
+
+if cfitsio_dep.found()
+ complex_plugins_list += {
+ 'name': 'file-fits',
+ }
+endif
+
+if webp_found
+ complex_plugins_list += {
+ 'name': 'file-webp',
+ }
+endif
+
+if get_option('webkit-unmaintained')
+ complex_plugins_list += {
+ 'name': 'help-browser',
+ }
+endif
+
+if platform_windows and host_cpu_family == 'x86'
+ complex_plugins_list += {
+ 'name': 'twain',
+ }
+endif
+
+foreach plugin : complex_plugins_list
+ subdir(plugin.get('name'))
+ if get_option('windows-installer') or get_option('ms-store')
+ foreach sourcecode : plugin_sourcecode
+ if plugin.get('name').startswith('file-')
+ #.ico files are handled in a special way by installer and msix scripts
+ if plugin.get('name') == 'file-ico' and platform_windows
+ continue
+ else
+ all_plugins_sources += [ meson.current_source_dir() / plugin.get('name') / sourcecode ]
+ endif
+ endif
+ endforeach
+ endif
+endforeach
+
+
subdir('python')
-subdir('screenshot')
-subdir('script-fu')
-subdir('selection-to-path')
-subdir('twain')
+
+#if get_option('windows-installer') or get_option('ms-store')
+# foreach plugin : python_plugins
+# if plugin.get('name').startswith('file-')
+# all_plugins_sources += [ meson.current_source_dir() / python/ plugin.get('name') + '.py' ]
+# endif
+# endforeach
+#endif
+
+
+if get_option('windows-installer') or get_option('ms-store')
+ #List of file associations dynamically created with the plugins lists above
+ custom_target('file_associations',
+ input : all_plugins_sources,
+ output : 'file_associations.list',
+ command : [
+ python,
+ meson.current_source_dir() / 'generate_associations.py',
+ '@OUTPUT@'
+ ] + all_plugins_sources,
+ build_by_default: true
+ )
+endif
diff --git a/plug-ins/metadata/meson.build b/plug-ins/metadata/meson.build
index cc7ec1b72b..a02d1a7ce9 100644
--- a/plug-ins/metadata/meson.build
+++ b/plug-ins/metadata/meson.build
@@ -1,12 +1,13 @@
plugin_name = 'metadata-editor'
-plugin_sources = [
+plugin_sourcecode = [
'metadata-editor.c',
'metadata-impexp.c',
'metadata-tags.c',
'metadata-xml.c',
]
+plugin_sources = plugin_sourcecode
if platform_windows
plugin_rc = configure_file(
@@ -42,10 +43,11 @@ plugin_executables += [plugin_exe.full_path()]
plugin_name = 'metadata-viewer'
-plugin_sources = [
+plugin_sourcecode = [
'metadata-viewer.c',
'metadata-tags.c',
]
+plugin_sources = plugin_sourcecode
if platform_windows
plugin_rc = configure_file(
diff --git a/plug-ins/pagecurl/meson.build b/plug-ins/pagecurl/meson.build
index 1c44a55d39..09a357be2c 100644
--- a/plug-ins/pagecurl/meson.build
+++ b/plug-ins/pagecurl/meson.build
@@ -1,8 +1,9 @@
plugin_name = 'pagecurl'
-plugin_sources = [
+plugin_sourcecode = [
'pagecurl.c',
]
+plugin_sources = plugin_sourcecode
pagecurl_icons_images = [
'curl0.png',
diff --git a/plug-ins/print/meson.build b/plug-ins/print/meson.build
index 9788fe5fc1..1b878526b8 100644
--- a/plug-ins/print/meson.build
+++ b/plug-ins/print/meson.build
@@ -3,7 +3,7 @@ if have_print
plugin_name = 'print'
-plugin_sources = [
+plugin_sourcecode = [
'print-draw-page.c',
'print-page-layout.c',
'print-page-setup.c',
@@ -12,6 +12,7 @@ plugin_sources = [
'print-utils.c',
'print.c',
]
+plugin_sources = plugin_sourcecode
if platform_windows
plugin_sources += windows.compile_resources(
diff --git a/plug-ins/python/meson.build b/plug-ins/python/meson.build
index 04dc3dcb45..2b0e9262b5 100644
--- a/plug-ins/python/meson.build
+++ b/plug-ins/python/meson.build
@@ -1,4 +1,4 @@
-plugins = [
+python_plugins = [
{ 'name': 'colorxhtml' },
{ 'name': 'file-openraster' },
{ 'name': 'foggify' },
@@ -13,7 +13,7 @@ plugins = [
]
if not stable or not release
- plugins += [
+ python_plugins += [
{ 'name': 'test-dialog' },
]
endif
@@ -21,7 +21,7 @@ endif
subdir('python-console')
subdir('tests')
-foreach plugin : plugins
+foreach plugin : python_plugins
name = plugin.get('name')
srcs = plugin.get('srcs', [name + '.py'])
diff --git a/plug-ins/python/python-console/meson.build b/plug-ins/python/python-console/meson.build
index f6042dfc84..d6c00db86e 100644
--- a/plug-ins/python/python-console/meson.build
+++ b/plug-ins/python/python-console/meson.build
@@ -1,5 +1,5 @@
-plugins += {
+python_plugins += {
'name': 'python-console',
'srcs': [ 'python-console/pyconsole.py', 'python-console/python-console.py' ],
}
diff --git a/plug-ins/python/tests/test-file-plug-ins/meson.build b/plug-ins/python/tests/test-file-plug-ins/meson.build
index 497ba3b1ca..d5edfe2bae 100644
--- a/plug-ins/python/tests/test-file-plug-ins/meson.build
+++ b/plug-ins/python/tests/test-file-plug-ins/meson.build
@@ -1,7 +1,7 @@
if not stable or not release or gimp_version.endswith('+git') or get_option('file-plug-ins-test')
# This does not get installed for releases
-plugins += {
+python_plugins += {
'name': 'test-file-plug-ins',
'srcs': [
# modules
diff --git a/plug-ins/screenshot/meson.build b/plug-ins/screenshot/meson.build
index 0f2d02c430..394228dcfa 100644
--- a/plug-ins/screenshot/meson.build
+++ b/plug-ins/screenshot/meson.build
@@ -1,12 +1,13 @@
plugin_name = 'screenshot'
-plugin_sources = [
+plugin_sourcecode = [
'screenshot-freedesktop.c',
'screenshot-osx.c',
'screenshot-win32.c',
'screenshot-x11.c',
'screenshot.c',
]
+plugin_sources = plugin_sourcecode
screenshot_icons_images = [
'screenshot-icon.png',
diff --git a/plug-ins/script-fu/interpreter/meson.build b/plug-ins/script-fu/interpreter/meson.build
index 346860644b..5d17d31895 100644
--- a/plug-ins/script-fu/interpreter/meson.build
+++ b/plug-ins/script-fu/interpreter/meson.build
@@ -3,10 +3,11 @@ scriptfuInclude = include_directories('..')
executable_name = 'gimp-script-fu-interpreter-' + gimp_api_version
-plugin_sources = [
+plugin_sourcecode = [
'script-fu-interpreter.c',
'script-fu-interpreter-plugin.c',
]
+plugin_sources = plugin_sourcecode
if not meson.is_cross_build()
if platform_windows
diff --git a/plug-ins/script-fu/meson.build b/plug-ins/script-fu/meson.build
index b9c74e9e5d..df0d12d619 100644
--- a/plug-ins/script-fu/meson.build
+++ b/plug-ins/script-fu/meson.build
@@ -23,13 +23,14 @@ executable_name = 'script-fu'
# Several source files implement the PDB procedures of type PLUGIN, of similar names.
# script-fu.c also implements PDB procedure of type EXTENSION "extension-script-fu"
-plugin_sources = [
+plugin_sourcecode = [
'script-fu-eval.c',
'script-fu-text-console.c',
'script-fu-refresh.c',
'script-fu.c',
]
+plugin_sources = plugin_sourcecode
if not meson.is_cross_build()
if platform_windows
diff --git a/plug-ins/script-fu/server/meson.build b/plug-ins/script-fu/server/meson.build
index cf85547e6f..2d295d21ec 100644
--- a/plug-ins/script-fu/server/meson.build
+++ b/plug-ins/script-fu/server/meson.build
@@ -3,10 +3,11 @@ scriptfuInclude = include_directories('..')
executable_name = 'script-fu-server'
-plugin_sources = [
+plugin_sourcecode = [
'script-fu-server.c',
'script-fu-server-plugin.c',
]
+plugin_sources = plugin_sourcecode
if not meson.is_cross_build()
if platform_windows
diff --git a/plug-ins/selection-to-path/meson.build b/plug-ins/selection-to-path/meson.build
index 05f1724f2c..99ebeeb531 100644
--- a/plug-ins/selection-to-path/meson.build
+++ b/plug-ins/selection-to-path/meson.build
@@ -1,6 +1,6 @@
plugin_name = 'selection-to-path'
-plugin_sources = [
+plugin_sourcecode = [
'curve.c',
'edge.c',
'fit.c',
@@ -10,6 +10,7 @@ plugin_sources = [
'spline.c',
'vector.c',
]
+plugin_sources = plugin_sourcecode
if platform_windows
plugin_sources += windows.compile_resources(
diff --git a/plug-ins/twain/meson.build b/plug-ins/twain/meson.build
index a93b4967e9..2f0dfd1218 100644
--- a/plug-ins/twain/meson.build
+++ b/plug-ins/twain/meson.build
@@ -4,12 +4,13 @@ endif
plugin_name = 'twain'
-plugin_sources = [
+plugin_sourcecode = [
'tw_func.c',
'tw_util.c',
'tw_win.c',
'twain.c',
]
+plugin_sources = plugin_sourcecode
plugin_sources += windows.compile_resources(
gimp_plugins_rc,