summaryrefslogtreecommitdiff
path: root/depstage.lua
diff options
context:
space:
mode:
Diffstat (limited to 'depstage.lua')
-rw-r--r--depstage.lua32
1 files changed, 32 insertions, 0 deletions
diff --git a/depstage.lua b/depstage.lua
new file mode 100644
index 0000000..ef223a7
--- /dev/null
+++ b/depstage.lua
@@ -0,0 +1,32 @@
+#!/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<close> = 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