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,