--- /dev/null
+#!/usr/bin/env lua
+
+--
+-- Yoink
+-- Run this script to link the executable with fewer direct dependencies.
+--
+-- You shouldn't call this directly; instead, use the configure script's
+-- --enable-asneeded option and run make normally. This isn't enabled by
+-- default because there is the potential for runtime linking problems on
+-- some platforms. If you have a newer version of GCC, you should prefer
+-- the --as-needed linker flag over this method, though they both should
+-- accomplish the same thing.
+--
+
+
+-- List here any libraries that are known to not be needed on some
+-- platform.
+libraries = {
+ "atk-1.0",
+ "cairo",
+ "fontconfig",
+ "freetype",
+ "gdk-x11-2.0",
+ "gio-2.0",
+ "glib-2.0",
+ "gmodule-2.0",
+ "ogg",
+ "pango-1.0",
+ "pangocairo-1.0",
+ "pangoft2-1.0",
+ "pthread",
+ "vorbis"
+}
+
+
+-- We want to print only if verbose is set to true.
+do
+ local verbose = os.getenv("verbose") == "true"
+ local oldprint = print
+
+ print = function(...) if verbose then oldprint(unpack(arg)) end end
+end
+
+
+command = arg[1]
+removed = {}
+
+-- Get the link command as passed on the command-line.
+for i,arg in ipairs(arg) do
+ if i ~= 1 then
+ command = string.format("%s %q", command, arg)
+ end
+end
+
+original = command
+
+
+-- Check for libraries which aren't needed for successful linking.
+for i,library in ipairs(libraries) do
+ local new_command = command:gsub("%s\"%-l"..library.."+\"%s", " ")
+ if new_command ~= command then
+ if os.execute(new_command.." >/dev/null 2>&1") == 0 then
+ print("We DON'T need "..library)
+ table.insert(removed, library)
+ command = new_command
+ else
+ print("We DO need "..library)
+ end
+ end
+end
+
+
+-- Perform the final link.
+if 0 < #removed and os.execute(command.." >/dev/null 2>&1") == 0 then
+ local removed = table.concat(removed, ", ")
+ print("Linked fine without some libraries: "..removed)
+elseif os.execute(original.." >/dev/null 2>&1") == 0 then
+ print("Linked with the original link command.")
+else
+ print("The link failed. :-(")
+ os.exit(1)
+end
+