--
-- Yoink
-- This script wraps around the compiler command to handle the creation of
--- dependency files. It works with new versions of GCC.
+-- dependency files. It works with GCC. The script is based off of Emile
+-- van Bergen's `ccdeps-gcc' script.
--
-- The compiler command is the first argument.
compiler = shift()
arguments = ""
+paths = {}
-- Consume each compiler argument, appending it to the arguments variable.
while 0 < #arg do
- local v = shift(arg)
- if v == "-o" then product = shift(arg) end
+ local v = shift()
+ if v == "-o" then
+ product = shift()
+ elseif v:match("%-[xubV]$") then
+ shift() -- Shift an extra one for the option's payload.
+ else
+ path = v:match("([^-].*)/")
+ if path then paths[path] = true end
+ end
end
if not product then print("No output file specified.") os.exit(1) end
os.remove(dep)
--- GCC outputs file.d for a product named file.o.
-gccdep = product:gsub("^.*/(.*)%.o$", "%1.d")
-tmpname = gccdep..".tmp"
+-- GCC outputs file.d for a product named file.o, either in the current
+-- directory or in the directory where the source is.
+depname = product:gsub("^.*/(.*)%.o$", "%1.d")
+depfiles = {}
+table.insert(depfiles, depname)
+for path in pairs(paths) do table.insert(depfiles, path.."/"..depname) end
--- Fix up the dependency file with correct paths.
-if os.execute("test -f "..gccdep) == 0 and os.rename(gccdep, tmpname) then
- os.execute(string.format("sed -e 's|.*:|%s %s:|' <%s >>%s", product, dep, tmpname, dep))
- os.execute(string.format("sed -e 's/^.*://' -e 's/^ *//' -e 's/ *\\\\$//' -e 's/$/:/' <%s >>%s", tmpname, dep))
- os.remove(tmpname)
-else
- print("Couldn't find the dependency file at "..gccdep..".")
- os.exit(1)
+for _,gccdep in ipairs(depfiles) do
+ tmpname = gccdep..".tmp"
+ -- Fix up the dependency file with correct paths.
+ if os.execute("test -f "..gccdep) == 0 and os.rename(gccdep, tmpname) then
+ os.execute(string.format("sed -e 's|.*:|%s %s:|' <%s >>%s", product, dep, tmpname, dep))
+ os.execute(string.format("sed -e 's/^.*://' -e 's/^ *//' -e 's/ *\\\\$//' -e 's/$/:/' <%s >>%s", tmpname, dep))
+ os.remove(tmpname)
+ os.exit()
+ end
end
+print("Couldn't find the dependency file.")
+os.exit(1)
+
--enable-threads use threads for concurrency
--enable-hotloading watch assets for automatic reloading
- --with-gtk use gtk2 toolkit (overrides --with-qt4)
+ --with-gtk use the gtk2 toolkit (overrides --with-qt4)
--with-qt4 use the qt4 gui toolkit
]])
end
{
printf("Hello world!\n");
return 0;
-}]])
+}
+]])
tmpfile:close()
function extra() if not cross_compile then return "gcc", "cc" end end
{
std::cout << "Hello world!" << std::endl;
return 0;
-}]])
+}
+]])
tmpfile:close()
function extra() if not cross_compile then return "g++", "c++" end end