afb9a6
diff -urNp a/extensions/goat-exercises/goat-exercise-lua.lua b/extensions/goat-exercises/goat-exercise-lua.lua
afb9a6
--- a/extensions/goat-exercises/goat-exercise-lua.lua	2022-03-09 09:39:44.007314944 +0100
afb9a6
+++ b/extensions/goat-exercises/goat-exercise-lua.lua	1970-01-01 01:00:00.000000000 +0100
afb9a6
@@ -1,184 +0,0 @@
afb9a6
-#!/usr/bin/env luajit
afb9a6
-
afb9a6
--- GIMP - The GNU Image Manipulation Program
afb9a6
--- Copyright (C) 1995 Spencer Kimball and Peter Mattis
afb9a6
---
afb9a6
--- goat-exercise-lua.lua
afb9a6
--- Copyright (C) Jehan
afb9a6
---
afb9a6
--- This program is free software: you can redistribute it and/or modify
afb9a6
--- it under the terms of the GNU General Public License as published by
afb9a6
--- the Free Software Foundation; either version 3 of the License, or
afb9a6
--- (at your option) any later version.
afb9a6
---
afb9a6
--- This program is distributed in the hope that it will be useful,
afb9a6
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
afb9a6
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
afb9a6
--- GNU General Public License for more details.
afb9a6
---
afb9a6
--- You should have received a copy of the GNU General Public License
afb9a6
--- along with this program.  If not, see <https://www.gnu.org/licenses/>.
afb9a6
-
afb9a6
-local lgi = require 'lgi'
afb9a6
-
afb9a6
-local GLib    = lgi.GLib
afb9a6
-local GObject = lgi.GObject
afb9a6
-local Gio     = lgi.Gio
afb9a6
-local Gegl    = lgi.Gegl
afb9a6
-local Gimp    = lgi.Gimp
afb9a6
-local GimpUi  = lgi.GimpUi
afb9a6
-local Gtk     = lgi.Gtk
afb9a6
-local Gdk     = lgi.Gdk
afb9a6
-
afb9a6
-local Goat = lgi.package 'Goat'
afb9a6
-local Goat = lgi.Goat
afb9a6
-
afb9a6
-function run(procedure, run_mode, image, drawables, args, run_data)
afb9a6
-  -- procedure:new_return_values() crashes LGI so we construct the
afb9a6
-  -- GimpValueArray manually.
afb9a6
-  local retval = Gimp.ValueArray(1)
afb9a6
-
afb9a6
-  if table.getn(drawables) ~= 1 then
afb9a6
-    local calling_err = GObject.Value(Gimp.PDBStatusType, Gimp.PDBStatusType.CALLING_ERROR)
afb9a6
-    local msg         = "Procedure '%s' only works with one drawable."
afb9a6
-
afb9a6
-    msg = string.format(msg, procedure:get_name())
afb9a6
-
afb9a6
-    retval:append(calling_err)
afb9a6
-    retval:append(GObject.Value(GObject.Type.STRING, msg))
afb9a6
-    return retval
afb9a6
-  end
afb9a6
-
afb9a6
-  local drawable = drawables[1]
afb9a6
-
afb9a6
-  -- Not sure why run_mode has become a string instead of testing
afb9a6
-  -- against Gimp.RunMode.INTERACTIVE.
afb9a6
-  if run_mode == "INTERACTIVE" then
afb9a6
-    GimpUi.init("goat-exercise-lua");
afb9a6
-    local dialog = GimpUi.Dialog {
afb9a6
-      title          = "Exercise a goat (Lua)",
afb9a6
-      role           = "goat-exercise-Lua",
afb9a6
-      use_header_bar = 1
afb9a6
-    }
afb9a6
-    dialog:add_button("_Cancel", Gtk.ResponseType.CANCEL);
afb9a6
-    dialog:add_button("_Source", Gtk.ResponseType.APPLY);
afb9a6
-    dialog:add_button("_OK", Gtk.ResponseType.OK);
afb9a6
-
afb9a6
-    local geometry = Gdk.Geometry()
afb9a6
-    geometry.min_aspect = 0.5;
afb9a6
-    geometry.max_aspect = 1.0;
afb9a6
-    dialog:set_geometry_hints (nil, geometry, Gdk.WindowHints.ASPECT);
afb9a6
-
afb9a6
-    local box = Gtk.Box {
afb9a6
-      orientation = Gtk.Orientation.VERTICAL,
afb9a6
-      spacing     = 2
afb9a6
-    }
afb9a6
-    dialog:get_content_area():add(box)
afb9a6
-    box:show()
afb9a6
-
afb9a6
-    local lang = "Lua"
afb9a6
-    local head_text = "This plug-in is an exercise in '%s' to demo plug-in creation.\n" ..
afb9a6
-                      "Check out the last version of the source code online by clicking the \"Source\" button."
afb9a6
-
afb9a6
-    local label = Gtk.Label { label = string.format(head_text, lang) }
afb9a6
-    box:pack_start(label, false, false, 1)
afb9a6
-    label:show()
afb9a6
-
afb9a6
-    local contents = GLib.file_get_contents(arg[0])
afb9a6
-    if (contents) then
afb9a6
-      local scrolled = Gtk.ScrolledWindow()
afb9a6
-      scrolled:set_vexpand (true)
afb9a6
-      box:pack_start(scrolled, true, true, 1)
afb9a6
-      scrolled:show()
afb9a6
-
afb9a6
-      local view = Gtk.TextView()
afb9a6
-      view:set_wrap_mode(Gtk.WrapMode.WORD)
afb9a6
-      view:set_editable(false)
afb9a6
-      local buffer = view:get_buffer()
afb9a6
-      buffer:set_text(contents, -1)
afb9a6
-      scrolled:add(view)
afb9a6
-      view:show()
afb9a6
-    end
afb9a6
-
afb9a6
-    while (true) do
afb9a6
-      local response = dialog:run()
afb9a6
-      local url = 'https://gitlab.gnome.org/GNOME/gimp/blob/master/extensions/goat-exercises/goat-exercise-lua.lua'
afb9a6
-
afb9a6
-      if response == Gtk.ResponseType.OK then
afb9a6
-        dialog:destroy()
afb9a6
-        break
afb9a6
-      elseif (response == Gtk.ResponseType.APPLY)  then
afb9a6
-        Gio.app_info_launch_default_for_uri(url, nil);
afb9a6
-      else -- CANCEL, CLOSE, DELETE_EVENT
afb9a6
-        dialog:destroy()
afb9a6
-        local cancel = GObject.Value(Gimp.PDBStatusType, Gimp.PDBStatusType.CANCEL)
afb9a6
-        retval:append(cancel)
afb9a6
-        return retval
afb9a6
-      end
afb9a6
-    end
afb9a6
-  end
afb9a6
-
afb9a6
-  local x, y, width, height = drawable:mask_intersect()
afb9a6
-  if width ~= nill and height ~= nil and width > 0 and height > 0 then
afb9a6
-    Gegl.init(nil)
afb9a6
-
afb9a6
-    local buffer = drawable:get_buffer()
afb9a6
-    local shadow_buffer = drawable:get_shadow_buffer()
afb9a6
-
afb9a6
-    local graph = Gegl.Node()
afb9a6
-    local input = graph:create_child("gegl:buffer-source")
afb9a6
-    input:set_property("buffer", GObject.Value(Gegl.Buffer, buffer))
afb9a6
-    local invert = graph:create_child("gegl:invert")
afb9a6
-    local output = graph:create_child("gegl:write-buffer")
afb9a6
-    output:set_property("buffer", GObject.Value(Gegl.Buffer, shadow_buffer))
afb9a6
-    input:link(invert)
afb9a6
-    invert:link(output)
afb9a6
-    output:process()
afb9a6
-
afb9a6
-    shadow_buffer:flush()
afb9a6
-
afb9a6
-    drawable:merge_shadow(true)
afb9a6
-    drawable:update(x, y, width, height)
afb9a6
-    Gimp.displays_flush()
afb9a6
-  end
afb9a6
-
afb9a6
-  local success = GObject.Value(Gimp.PDBStatusType, Gimp.PDBStatusType.SUCCESS)
afb9a6
-  retval:append(success)
afb9a6
-  return retval
afb9a6
-end
afb9a6
-
afb9a6
-Goat:class('Exercise', Gimp.PlugIn)
afb9a6
-
afb9a6
-function Goat.Exercise:do_query_procedures()
afb9a6
-  return { 'plug-in-goat-exercise-lua' }
afb9a6
-end
afb9a6
-
afb9a6
-function Goat.Exercise:do_create_procedure(name)
afb9a6
-  local procedure = Gimp.ImageProcedure.new(self, name,
afb9a6
-                                            Gimp.PDBProcType.PLUGIN,
afb9a6
-                                            run, nil)
afb9a6
-
afb9a6
-  procedure:set_image_types("*");
afb9a6
-  procedure:set_sensitivity_mask(Gimp.ProcedureSensitivityMask.DRAWABLE);
afb9a6
-
afb9a6
-  procedure:set_menu_label("Exercise a Lua goat");
afb9a6
-  procedure:set_icon_name(GimpUi.ICON_GEGL);
afb9a6
-  procedure:add_menu_path('<Image>/Filters/Development/Goat exercises/');
afb9a6
-
afb9a6
-  procedure:set_documentation("Exercise a goat in the Lua language",
afb9a6
-                              "Takes a goat for a walk in Lua",
afb9a6
-                              name);
afb9a6
-  procedure:set_attribution("Jehan", "Jehan", "2019");
afb9a6
-
afb9a6
-  return procedure
afb9a6
-end
afb9a6
-
afb9a6
--- 'arg' is a Lua table. When automatically converted to an array, the
afb9a6
--- value 0 is deleted (because Lua arrays start at 1!), which breaks
afb9a6
--- Gimp.main() call. So let's create our own array starting at 1.
afb9a6
-argv = {}
afb9a6
-for k, v in pairs(arg) do
afb9a6
-  argv[k+1] = v
afb9a6
-end
afb9a6
-
afb9a6
-Gimp.main(GObject.Type.name(Goat.Exercise), argv)
afb9a6
diff -urNp a/extensions/goat-exercises/Makefile.am b/extensions/goat-exercises/Makefile.am
afb9a6
--- a/extensions/goat-exercises/Makefile.am	2022-03-09 09:39:44.007314944 +0100
afb9a6
+++ b/extensions/goat-exercises/Makefile.am	2022-03-09 10:27:14.623108639 +0100
afb9a6
@@ -72,10 +72,10 @@ endif
afb9a6
 
afb9a6
 # Lua (lua-jit + LGI) version.
afb9a6
 
afb9a6
-if BUILD_LUA
afb9a6
-goat_exercise_luadir = $(goat_exercise_c_libexecdir)
afb9a6
-goat_exercise_lua_SCRIPTS = goat-exercise-lua.lua
afb9a6
-endif
afb9a6
+#if BUILD_LUA
afb9a6
+#goat_exercise_luadir = $(goat_exercise_c_libexecdir)
afb9a6
+#goat_exercise_lua_SCRIPTS = goat-exercise-lua.lua
afb9a6
+#endif
afb9a6
 
afb9a6
 # Python 3 (pygobject) version.
afb9a6
 
afb9a6
@@ -135,7 +135,6 @@ org.gimp.extension.goat-exercises.metain
afb9a6
 
afb9a6
 EXTRA_DIST = \
afb9a6
 	goat-exercise-gjs.js	\
afb9a6
-	goat-exercise-lua.lua	\
afb9a6
 	goat-exercise-py3.py	\
afb9a6
 	$(appstream_in_files)
afb9a6
 
afb9a6
diff -urNp a/extensions/goat-exercises/Makefile.in b/extensions/goat-exercises/Makefile.in
afb9a6
--- a/extensions/goat-exercises/Makefile.in	2022-03-09 09:39:44.006314936 +0100
afb9a6
+++ b/extensions/goat-exercises/Makefile.in	2022-03-09 10:28:59.224986448 +0100
afb9a6
@@ -118,7 +118,6 @@ CONFIG_CLEAN_VPATH_FILES =
afb9a6
 am__installdirs = "$(DESTDIR)$(goat_exercise_c_libexecdir)" \
afb9a6
 	"$(DESTDIR)$(goat_exercise_vala_libexecdir)" \
afb9a6
 	"$(DESTDIR)$(goat_exercise_gjsdir)" \
afb9a6
-	"$(DESTDIR)$(goat_exercise_luadir)" \
afb9a6
 	"$(DESTDIR)$(goat_exercise_py3dir)" "$(DESTDIR)$(appdatadir)" \
afb9a6
 	"$(DESTDIR)$(goat_exercise_c_libexecdir)" \
afb9a6
 	"$(DESTDIR)$(goat_exercise_vala_libexecdir)"
afb9a6
@@ -183,7 +182,7 @@ am__uninstall_files_from_dir = { \
afb9a6
     || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
afb9a6
          $(am__cd) "$$dir" && rm -f $$files; }; \
afb9a6
   }
afb9a6
-SCRIPTS = $(goat_exercise_gjs_SCRIPTS) $(goat_exercise_lua_SCRIPTS) \
afb9a6
+SCRIPTS = $(goat_exercise_gjs_SCRIPTS) \
afb9a6
 	$(goat_exercise_py3_SCRIPTS)
afb9a6
 AM_V_P = $(am__v_P_@AM_V@)
afb9a6
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
afb9a6
@@ -753,8 +752,8 @@ goat_exercise_c_LDADD = \
afb9a6
 @BUILD_JAVASCRIPT_TRUE@goat_exercise_gjs_SCRIPTS = goat-exercise-gjs.js
afb9a6
 
afb9a6
 # Lua (lua-jit + LGI) version.
afb9a6
-@BUILD_LUA_TRUE@goat_exercise_luadir = $(goat_exercise_c_libexecdir)
afb9a6
-@BUILD_LUA_TRUE@goat_exercise_lua_SCRIPTS = goat-exercise-lua.lua
afb9a6
+#@BUILD_LUA_TRUE@goat_exercise_luadir = $(goat_exercise_c_libexecdir)
afb9a6
+#@BUILD_LUA_TRUE@goat_exercise_lua_SCRIPTS = goat-exercise-lua.lua
afb9a6
 
afb9a6
 # Python 3 (pygobject) version.
afb9a6
 @BUILD_PYTHON_TRUE@goat_exercise_py3dir = $(goat_exercise_c_libexecdir)
afb9a6
@@ -795,7 +794,6 @@ appdatadir = $(goat_exercise_c_libexecdi
afb9a6
 appdata_DATA = $(appstream_files)
afb9a6
 EXTRA_DIST = \
afb9a6
 	goat-exercise-gjs.js	\
afb9a6
-	goat-exercise-lua.lua	\
afb9a6
 	goat-exercise-py3.py	\
afb9a6
 	$(appstream_in_files)
afb9a6
 
afb9a6
@@ -977,41 +975,41 @@ uninstall-goat_exercise_gjsSCRIPTS:
afb9a6
 	files=`for p in $$list; do echo "$$p"; done | \
afb9a6
 	       sed -e 's,.*/,,;$(transform)'`; \
afb9a6
 	dir='$(DESTDIR)$(goat_exercise_gjsdir)'; $(am__uninstall_files_from_dir)
afb9a6
-install-goat_exercise_luaSCRIPTS: $(goat_exercise_lua_SCRIPTS)
afb9a6
-	@$(NORMAL_INSTALL)
afb9a6
-	@list='$(goat_exercise_lua_SCRIPTS)'; test -n "$(goat_exercise_luadir)" || list=; \
afb9a6
-	if test -n "$$list"; then \
afb9a6
-	  echo " $(MKDIR_P) '$(DESTDIR)$(goat_exercise_luadir)'"; \
afb9a6
-	  $(MKDIR_P) "$(DESTDIR)$(goat_exercise_luadir)" || exit 1; \
afb9a6
-	fi; \
afb9a6
-	for p in $$list; do \
afb9a6
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
afb9a6
-	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
afb9a6
-	done | \
afb9a6
-	sed -e 'p;s,.*/,,;n' \
afb9a6
-	    -e 'h;s|.*|.|' \
afb9a6
-	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
afb9a6
-	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
afb9a6
-	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
afb9a6
-	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
afb9a6
-	      if (++n[d] == $(am__install_max)) { \
afb9a6
-		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
afb9a6
-	    else { print "f", d "/" $$4, $$1 } } \
afb9a6
-	  END { for (d in files) print "f", d, files[d] }' | \
afb9a6
-	while read type dir files; do \
afb9a6
-	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
afb9a6
-	     test -z "$$files" || { \
afb9a6
-	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(goat_exercise_luadir)$$dir'"; \
afb9a6
-	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(goat_exercise_luadir)$$dir" || exit $$?; \
afb9a6
-	     } \
afb9a6
-	; done
afb9a6
-
afb9a6
-uninstall-goat_exercise_luaSCRIPTS:
afb9a6
-	@$(NORMAL_UNINSTALL)
afb9a6
-	@list='$(goat_exercise_lua_SCRIPTS)'; test -n "$(goat_exercise_luadir)" || exit 0; \
afb9a6
-	files=`for p in $$list; do echo "$$p"; done | \
afb9a6
-	       sed -e 's,.*/,,;$(transform)'`; \
afb9a6
-	dir='$(DESTDIR)$(goat_exercise_luadir)'; $(am__uninstall_files_from_dir)
afb9a6
+#install-goat_exercise_luaSCRIPTS: $(goat_exercise_lua_SCRIPTS)
afb9a6
+#	@$(NORMAL_INSTALL)
afb9a6
+#	@list='$(goat_exercise_lua_SCRIPTS)'; test -n "$(goat_exercise_luadir)" || list=; \
afb9a6
+#	if test -n "$$list"; then \
afb9a6
+#	  echo " $(MKDIR_P) '$(DESTDIR)$(goat_exercise_luadir)'"; \
afb9a6
+#	  $(MKDIR_P) "$(DESTDIR)$(goat_exercise_luadir)" || exit 1; \
afb9a6
+#	fi; \
afb9a6
+#	for p in $$list; do \
afb9a6
+#	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
afb9a6
+#	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
afb9a6
+#	done | \
afb9a6
+#	sed -e 'p;s,.*/,,;n' \
afb9a6
+#	    -e 'h;s|.*|.|' \
afb9a6
+#	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
afb9a6
+#	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
afb9a6
+#	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
afb9a6
+#	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
afb9a6
+#	      if (++n[d] == $(am__install_max)) { \
afb9a6
+#		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
afb9a6
+#	    else { print "f", d "/" $$4, $$1 } } \
afb9a6
+#	  END { for (d in files) print "f", d, files[d] }' | \
afb9a6
+#	while read type dir files; do \
afb9a6
+#	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
afb9a6
+#	     test -z "$$files" || { \
afb9a6
+#	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(goat_exercise_luadir)$$dir'"; \
afb9a6
+#	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(goat_exercise_luadir)$$dir" || exit $$?; \
afb9a6
+#	     } \
afb9a6
+#	; done
afb9a6
+
afb9a6
+#uninstall-goat_exercise_luaSCRIPTS:
afb9a6
+#	@$(NORMAL_UNINSTALL)
afb9a6
+#	@list='$(goat_exercise_lua_SCRIPTS)'; test -n "$(goat_exercise_luadir)" || exit 0; \
afb9a6
+#	files=`for p in $$list; do echo "$$p"; done | \
afb9a6
+#	       sed -e 's,.*/,,;$(transform)'`; \
afb9a6
+#	dir='$(DESTDIR)$(goat_exercise_luadir)'; $(am__uninstall_files_from_dir)
afb9a6
 install-goat_exercise_py3SCRIPTS: $(goat_exercise_py3_SCRIPTS)
afb9a6
 	@$(NORMAL_INSTALL)
afb9a6
 	@list='$(goat_exercise_py3_SCRIPTS)'; test -n "$(goat_exercise_py3dir)" || list=; \
afb9a6
@@ -1266,7 +1264,7 @@ check-am: all-am
afb9a6
 check: check-am
afb9a6
 all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(DATA)
afb9a6
 installdirs:
afb9a6
-	for dir in "$(DESTDIR)$(goat_exercise_c_libexecdir)" "$(DESTDIR)$(goat_exercise_vala_libexecdir)" "$(DESTDIR)$(goat_exercise_gjsdir)" "$(DESTDIR)$(goat_exercise_luadir)" "$(DESTDIR)$(goat_exercise_py3dir)" "$(DESTDIR)$(appdatadir)" "$(DESTDIR)$(goat_exercise_c_libexecdir)" "$(DESTDIR)$(goat_exercise_vala_libexecdir)"; do \
afb9a6
+	for dir in "$(DESTDIR)$(goat_exercise_c_libexecdir)" "$(DESTDIR)$(goat_exercise_vala_libexecdir)" "$(DESTDIR)$(goat_exercise_gjsdir)" "$(DESTDIR)$(goat_exercise_py3dir)" "$(DESTDIR)$(appdatadir)" "$(DESTDIR)$(goat_exercise_c_libexecdir)" "$(DESTDIR)$(goat_exercise_vala_libexecdir)"; do \
afb9a6
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
afb9a6
 	done
afb9a6
 install: install-am
afb9a6
@@ -1330,7 +1328,6 @@ info: info-am
afb9a6
 info-am:
afb9a6
 
afb9a6
 install-data-am: install-appdataDATA install-goat_exercise_gjsSCRIPTS \
afb9a6
-	install-goat_exercise_luaSCRIPTS \
afb9a6
 	install-goat_exercise_py3SCRIPTS
afb9a6
 
afb9a6
 install-dvi: install-dvi-am
afb9a6
@@ -1385,7 +1382,6 @@ uninstall-am: uninstall-appdataDATA \
afb9a6
 	uninstall-goat_exercise_c_libexecDATA \
afb9a6
 	uninstall-goat_exercise_c_libexecPROGRAMS \
afb9a6
 	uninstall-goat_exercise_gjsSCRIPTS \
afb9a6
-	uninstall-goat_exercise_luaSCRIPTS \
afb9a6
 	uninstall-goat_exercise_py3SCRIPTS \
afb9a6
 	uninstall-goat_exercise_vala_libexecDATA \
afb9a6
 	uninstall-goat_exercise_vala_libexecPROGRAMS
afb9a6
@@ -1403,7 +1399,6 @@ uninstall-am: uninstall-appdataDATA \
afb9a6
 	install-goat_exercise_c_libexecDATA \
afb9a6
 	install-goat_exercise_c_libexecPROGRAMS \
afb9a6
 	install-goat_exercise_gjsSCRIPTS \
afb9a6
-	install-goat_exercise_luaSCRIPTS \
afb9a6
 	install-goat_exercise_py3SCRIPTS \
afb9a6
 	install-goat_exercise_vala_libexecDATA \
afb9a6
 	install-goat_exercise_vala_libexecPROGRAMS install-html \
afb9a6
@@ -1416,7 +1411,6 @@ uninstall-am: uninstall-appdataDATA \
afb9a6
 	uninstall-appdataDATA uninstall-goat_exercise_c_libexecDATA \
afb9a6
 	uninstall-goat_exercise_c_libexecPROGRAMS \
afb9a6
 	uninstall-goat_exercise_gjsSCRIPTS \
afb9a6
-	uninstall-goat_exercise_luaSCRIPTS \
afb9a6
 	uninstall-goat_exercise_py3SCRIPTS \
afb9a6
 	uninstall-goat_exercise_vala_libexecDATA \
afb9a6
 	uninstall-goat_exercise_vala_libexecPROGRAMS