X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=build%2Fcompile.lua;h=575096d20142da5b9832085d44e758d1575d2014;hp=31b20fd1743c428661886ee8b11257cfa1e0a528;hb=f6d0b86430cc515164b298046542f80f42a29c65;hpb=bd62b2e6a6e5f1af5a635df3ff1a07f363d9ffe0 diff --git a/build/compile.lua b/build/compile.lua index 31b20fd..575096d 100755 --- a/build/compile.lua +++ b/build/compile.lua @@ -3,7 +3,8 @@ -- -- 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. -- @@ -19,12 +20,20 @@ end -- 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 @@ -46,17 +55,24 @@ dep = product..".d" 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) +