# e-Knife: Erlang slicing with the Expression Dependence Graph You can find more details and contact information at the project's [homepage](https://kaz.dsic.upv.es/e-knife/). This project consists of three modules: * e-Knife: the frontend for the EDG, which implements the necessary tools to slice Erlang programs. * EDG: the generic library that implements the graph and slicing techniques. * Miscellaneous: various shared utilities. ## Build Requirements: Java >= 11, Erlang/OTP 24, Maven and Make. Just run `make release` and a zip containing a jar and additional resources will be built. ### Build with another version of Erlang Before running `make`, replace the package `com.ericsson.otp.erlang` from `e-Knife/src` with the one from your Erlang distribution, at `lib/jinterface-VERSION/java_src`. Your Erlang distribution will most likely be installed at `/usr/lib/erlang` or `/usr/local/lib/erlang`. As an example: ```bash pkg="com/ericsson/otp/erlang" rm -rf e-Knife/src/$pkg mv /usr/lib/erlang/lib/jinterface-1.12/java_src/$pkg e-Knife/src/$pkg ``` ## Run The release version contains a jar file and a folder (`ebin`) with additional resources. It is important to keep them in the same directory. You'll probably want to generate slices, so you should run e-Knife. Run it without args to obtain a list and explanation of arguments. ``` java -jar path/to/eknife.jar [args] ``` ### View the sliced graph To produce a graph, you must specify the optional argument `-G`. In non-trivial programs, the graph can be too complicated to be useful. You can either: 1. Customize the arcs that are printed. To do so, modify the variables at the beginning of the `DotFactory` class in the `EDG` module, and then [rebuild the project](#build). 2. Output the graph to a dot file, and then manually delete unwanted arcs and/or use an interactive graphviz viewer, such as [XDot][xdot]. [xdot]: https://github.com/jrfonseca/xdot.py ## Import into an IDE Most IDEs will autodetect the structure from the Maven configuration files. Otherwise, you can treat each folder (EDG, e-Knife and Miscellanea) as a separate module, with the following dependencies: * e-Knife requires EDG and Miscellanea. * EDG requires Miscellanea. * Miscellanea has no dependencies. ## License This project is licensed under GNU Affero Public License (Version 3.0), with the exception of the `jinterface` files, placed under `e-Knife/src/com/ericsson`, which are the property of Ericsson AB and are licensed under the Apache License (Version 2.0). You should have received a copy of the GNU Affero Public License along with this program. If not, see https://www.gnu.org/licenses.