javadiffbinary-reproducibility

How to use Procyon Decompiler with Diffoscope


I was running Diffoscope on Ubuntu Bionic and when I turned on the debug log (--debug) I noticed many lines like these (one per .class file in the JAR):

diffoscope.comparators.java: Unable to find ProcyonDecompiler. Falling back...

I installed the package procyon-decompiler but the errors persist. How can I make Diffoscope work with Procyon? I can't find any documentation about this integration!


Solution

  • From reading the Python sources of diffoscope, I figured out that diffoscope was expecting an executable named procyon-decompiler in the path.

    /usr/lib/python3/dist-packages/diffoscope/comparators/java.py:L40:

    @tool_required('procyon-decompiler')
    def cmdline(self):
        return ['procyon-decompiler', '-ec', self.path]
    

    In Ubuntu Bionic, the procyon-decompiler package installs Procyon as procyon and not procyon-decompiler. I made this work by creating a symbolic link. E.g.:

    ln -s /usr/bin/procyon ~/.local/bin/procyon-decompiler