Here’s a bash script, it can point at a directory of C plugins to compile:
target_dir="$HOME/Code/plug-ins-C/plug-ins"
It includes files needed from the GIMP source build and my additional C files:
meson_config="/build/gimp/_build"
meson_intl="/build/gimp/libgimp"
pixelmixer="$HOME/Code/plug-ins-C/include"
pixelmixer_source="$HOME/Code/plug-ins-C/include/pixelmixer.c"
It uses the output of gimptool to provide the input to gcc, and also copies the binary to my flatpak version. SImplEs
#!/usr/bin/env bash
# Set target directory to search for C plug-ins to compile
target_dir="$HOME/Code/plug-ins-C/plug-ins"
# GIMP build environment from another shell script
source "$HOME/Artwork/Misc/linux-scripts/gimp_definitions.sh"
# Define paths and plug-in name
gimp_source_dir="$HOME/Code/gimp-source"
source_dir="$HOME/Code/plug-ins-C/${plugin_name}"
output_dir_base="${gimp_source_dir}/lib/x86_64-linux-gnu/gimp/2.99/plug-ins"
flatpak_dir_base="$HOME/.config/GIMP/2.99/plug-ins"
meson_config="/build/gimp/_build"
meson_intl="/build/gimp/libgimp"
pixelmixer="$HOME/Code/plug-ins-C/include"
pixelmixer_source="$HOME/Code/plug-ins-C/include/pixelmixer.c"
# Store gimptool output in a variable
gimptool_libs=$("${gimp_source_dir}/bin/gimptool-2.99" --libs)
gimptool_flags=$("${gimp_source_dir}/bin/gimptool-2.99" --cflags)
# Find source files and compile
find "$target_dir" -name "*.c" | while IFS= read -r source_file; do
plugin_name=$(basename "$(dirname "$source_file")")
output_dir="${gimp_source_dir}/lib/x86_64-linux-gnu/gimp/2.99/plug-ins/${plugin_name}"
flatpak_dir="$HOME/.config/GIMP/2.99/plug-ins/${plugin_name}"
# Create output and flatpak directories for the current plugin
mkdir -p "$output_dir"
mkdir -p "$flatpak_dir"
# Compile only if the source file or dependencies have changed
if [ "$source_file" -nt "$output_dir/$plugin_name" ] || [ "$pixelmixer_source" -nt "$output_dir/$plugin_name" ]; then
# Compile
gcc "$source_file" "$pixelmixer_source" \
$gimptool_libs \
$gimptool_flags \
-I"${gimp_source_dir}${meson_config}" \
-I"${gimp_source_dir}${meson_intl}" \
-I"${pixelmixer}" \
-o "$output_dir/$plugin_name"
# Check compilation status
if [ $? -eq 0 ]; then
echo "Compilation successful for $plugin_name. Copying plugin to $flatpak_dir."
cp "$output_dir/$plugin_name" "$flatpak_dir"
else
echo "Compilation failed for $plugin_name. Plugin not copied."
fi
else
echo "No changes detected for $plugin_name. Skipping compilation."
fi
done