#!/usr/bin/env lua local lapp = require "pl.lapp" local dir = require "pl.dir" local path = require "pl.path" local pretty = require "pl.pretty" local lpeg = require "lpeg" local args = lapp [[ Finds dependencies from .SRCINFO files and lists them in buildable stages. ]] local identifier = lpeg.R"az" + lpeg.R"09" + lpeg.S"@+_" identifier = identifier * (identifier + lpeg.S".-")^0 local whitespace = lpeg.S" \t"^1 local rest = (1 - lpeg.S"\n")^0 local definition = lpeg.C(identifier) * whitespace * "=" * whitespace * lpeg.C(rest) * "\n" local subdefinition = whitespace * definition local emptylines = (whitespace * "\n")^1 local block = lpeg.Ct(lpeg.Ct(definition) * lpeg.Ct(subdefinition)^0) local thing = block * (emptylines * block)^0 local capture = lpeg.Ct(thing) for root, dirs, files in dir.walk(".") do for _, file in pairs(files) do if file == ".SRCINFO" then local pathname = path.normpath(path.join(root, file)) local srcinfo = io.open(pathname) local content = srcinfo:read("a") io.write(pathname, " ") pretty.dump(capture:match(content)) print() -- From this, find {,make,check}depends and group packages into stages. end end end