These tools allow me to work with packages, analyzing PKGBUILDs from each package
in order to see, for example, the dependencies between package in a repository. I
find this helpful when maintaining my own packages. These tools are experimentation
with using the UNIX programming environment. Think of these tools as more of a
static analysis of packages before they are built.
Tools under the vars/ directory are used for extracting and expanding the PKGBUILD
fields from PKGBUILDS.
vars/pbvars This finds any bash variables defined in the PKGBUILD
and prints each one. The name is printed on a line, with
the value (or values) printed on the lines after it.
vars/expvars This expands the variables that are printed out
by pbvars in a manner similar to how bash would do it.
Scripts under the graph/ directory are used to analyze collections of packages
inside or across repositories as well as their inter-dependencies. This is
useful for viewing the network of dependencies in a graph using graphviz.
graph/reposrc Downloads abs tarballs from the official repository. An abs tree for
each repository is extracted to the current directory. By default
core, extra, and community are fetched. You can specify the repo
graph/mkvars For each PKGBUILD in the fetched repository, scan it with pbvars/expvars
and save the result to a PKGDATA file in the same directory.
graph/repodeps Scan each PKGDATA file found under a given repo dir and print repo name,
package name, dependencies, and provides to standard output.
graph/mkdeps Loop through the standard repos (core, extra, community) running repodeps
on each repo dir and outputting each repo's deps to a file named $repo.deps.
graph/resdeps Resolve dependencies from their symbolic package name to repository/name
pairs. This avoid ambiguity. Dependencies on provided virtual packages
are also translated into the package name of the provide-ing package.
(Order matters, packages coming later in standard input override earlier
graph/depgrep Print dependencies of a provided package, recursing for each dependency.
You can limit the depth of recursion with the -d option. Pass the output of
resdeps as standard input. Useful to look at a dep graph of a package.
graph/depdot Convert our dep graph format to a GraphViz dot formatted file.
Reads our internal format from stdin and writes dot format to stdout.
graph/mkpkgpng Given a package as an argument, and a resolved dep graph as standard input,
creates a .dot graph file and pipes it to "dot", writing to a .png named
after the package. Uses depsdot and depgrep internally and takes the same
-d option as depgrep.
graph/revdeps Reverses or inverts dependencies. This simply changes the direction of each
edge of the directed graph. Handy for finding dependencies upon a given package.
Reverse the dep graph, depgrep for the package, and reverse the output.
# Creates core.deps extra.deps and community.deps
./fetchabs && ./mkvars && ./mkdeps
# Draws a graph to perl-libwww.png
cat core.deps extra.deps community.deps | ./resdeps | ./mkpkgpng -d 3 extra/perl-libwww
jrcd83 at gmail dot com