Skip to content

zyedidia/xkvt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

eXKaVaTe

Xkvt is a tool that runs a series of commands and automatically determines the input/output files that are consumed/produced by each command. It can then output a build file for Make or Knit, or a generic JSON representation.

Xkvt uses ptrace to determine what files are read and written by each command.

Xkvt only supports Linux AMD64.

Example

Suppose you have foo.c, bar.c and bar.h (see example/). The program could be built by running

gcc -Wall -O2 -c foo.c -o foo.o
gcc -Wall -O2 -c bar.c -o bar.o
gcc -Wall -O2 bar.o foo.o -o prog

These commands are in build.sh. If you run these commands through Xkvt, it can automatically produce a Makefile for this build:

$ xkvt -i build.sh -f make -o Makefile
gcc -Wall -O2 -c foo.c -o foo.o
gcc -Wall -O2 -c bar.c -o bar.o
gcc -Wall -O2 bar.o foo.o -o prog
$ cat Makefile
foo.o: foo.c bar.h
	gcc -Wall -O2 -c foo.c -o foo.o
bar.o: bar.c
	gcc -Wall -O2 -c bar.c -o bar.o
prog: bar.o foo.o
	gcc -Wall -O2 bar.o foo.o -o prog

Note that Xkvt automatically detects that foo.o depends on bar.h (as well as foo.c).

Xkvt can also output a Knitfile, or a generic JSON representation that looks like this:

Show JSON
{
  "Commands": [
    {
      "Command": "gcc -Wall -O2 -c foo.c -o foo.o",
      "Inputs": ["foo.c", "bar.h"],
      "Outputs": ["foo.o"]
    },
    {
      "Command": "gcc -Wall -O2 -c bar.c -o bar.o",
      "Inputs": ["bar.c"],
      "Outputs": ["bar.o"]
    },
    {
      "Command": "gcc -Wall -O2 bar.o foo.o -o prog",
      "Inputs": ["bar.o", "foo.o"],
      "Outputs": ["prog"]
    }
  ]
}

Usage

Usage of xkvt:
  -f, --format string   output format (default "json")
  -h, --help            show this help message
  -i, --input string    input file
  -o, --output string   output file
  -V, --verbose         verbose debugging information

About

A tool for tracing the inputs and outputs of a command

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Languages