split plugins to subpkgs and adapted launchers

procyon crashes without warning, asmtool8 packed in bad, old version
This commit is contained in:
Jiri 2023-03-18 09:19:14 +01:00
commit 3ddebd0508
4 changed files with 128 additions and 47 deletions

View file

@ -16,41 +16,35 @@ function warning() {
fi
}
# identify directory tree
JRD=`basename $0`
# the launcher is reused uder different name, hardcoding name
JRD=java-runtime-decompiler
CONF_HOME=$XDG_CONFIG_HOME
if [ "$CONF_HOME" = "" ] ; then
CONF_HOME=$HOME/.config/$JRD
else
CONF_HOME=$CONF_HOME/$JRD
fi
LOG_DIR=$CONF_HOME/logs
CONF_DIR=$CONF_HOME/conf
# create directory tree
PLUGIN_HOME=$CONF_HOME/plugins
PLUGIN_HOME_LEGACY=$CONF_HOME/plugins-legacy
mkdir -p $LOG_DIR
mkdir -p $CONF_DIR
mkdir -p $PLUGIN_HOME
: ${MAIN_CLASS:=org.jrd.backend.data.Main}
# set java and jvm arguments
export _prefer_jre=false
export _prefer_jre=false #although java moved compiler classes to jre, PREFERING jdk should not hurt
_set_java_home
set_jvm
# all dependencies must be on classpath
set_classpath java-runtime-decompiler rsyntaxtextarea byteman google-gson classpathless-compiler objectweb-asm
set_classpath java-runtime-decompiler rsyntaxtextarea byteman google-gson classpathless-compiler objectweb-asm java-diff-utils
CLASSPATH=$CLASSPATH:${JAVA_HOME}/lib/tools.jar
# set path to agent automatically
@ -60,16 +54,19 @@ AGENT_PREFIX="AGENT_PATH==="
AGENT_STRING=$AGENT_PREFIX$AGENT
# copy json wrappers information to home so the users can edit
CP_FILES="$(ls /etc/$JRD/plugins/*.json)"
for cpfile in $CP_FILES; do
FILE_NAME="$(basename -- $cpfile)"
if [ ! -e "$PLUGIN_HOME/$FILE_NAME" ]
then
cp $cpfile $PLUGIN_HOME
else
warning "Configuration files were not copied for $FILE_NAME - the existing configuration would be overwritten."
fi
done
if [ ! -e "$PLUGIN_HOME_LEGACY" -a -e "$PLUGIN_HOME" ] ; then
mv "$PLUGIN_HOME" "$PLUGIN_HOME_LEGACY"
echo "jrd no longer handles custom plugins for you. Your's "
echo "$PLUGIN_HOME was moved to $PLUGIN_HOME_LEGACY"
echo "You can play with custom plugins in $PLUGIN_HOME"
echo "but keep $PLUGIN_HOME_LEGACY created, so it is not renamed again"
fi
mkdir -p $PLUGIN_HOME_LEGACY
warning "jrd no longer handles custom plugins for you. Your's "
warning echo "$PLUGIN_HOME was moved to $PLUGIN_HOME_LEGACY"
warning "You can play with custom plugins in $PLUGIN_HOME"
warning "but keep $PLUGIN_HOME_LEGACY created, so it is not renamed again"
# create config file and add agent default path
touch $CONFIG_FILE
@ -92,4 +89,4 @@ else
fi
export FLAGS="$FLAGS -Djdk.attach.allowAttachSelf=true --add-exports jdk.jdeps/com.sun.tools.javap=ALL-UNNAMED" # jdk11+ do not allow attach by default; jdk17 is hiding javap api
run "$@"
run "$@"

View file

@ -5,8 +5,9 @@ Release: 1%{?dist}
License: GPLv3
URL: https://github.com/pmikova/java-runtime-decompiler
Source0: https://github.com/pmikova/%{name}/archive/%{name}-%{version}.tar.gz
Source1: java-runtime-decompiler
Source1: %{name}
Source3: jrd.desktop
Source4: jrd-hex.desktop
Patch1: systemFernflower.patch
Patch2: systemProcyon.patch
Patch21: systemProcyonAssembler.patch
@ -41,20 +42,23 @@ BuildRequires: java-devel
BuildRequires: google-gson
BuildRequires: desktop-file-utils
BuildRequires: classpathless-compiler
Requires: google-gson
Requires: byteman
Requires: rsyntaxtextarea
Requires: java-headless
Recommends: java
Requires: classpathless-compiler
Requires: java-diff-utils
Recommends: fernflower
Recommends: procyon-decompiler >= 0.6
Recommends: CFR
Recommends: openjdk-asmtools >= 8.0
Recommends: openjdk-asmtools7
Recommends: java
Recommends: %{name}-fernflower-plugin
Recommends: %{name}-procyon-plugin
Recommends: %{name}-cfr-plugin
Recommends: %{name}-asmtools-plugin
Recommends: %{name}-asmtools7-plugin
%description
This application can access JVM memory at runtime,
extract byte code from the JVM and decompile it.
In addition, it can modify the obtained code and comple it back
This application can access JVM at runtime,
extract byte code from the JVM and decompile it, modify the obtained code and compile it back.
It also works with local classpath and source path and provide standalone hex, with binary diff.
%package javadoc
Summary: Javadoc for %{name}
@ -63,6 +67,46 @@ Requires: %{name} = %{version}-%{release}
%description javadoc
This package contains the API documentation for %{name}.
%package fernflower-plugin
Requires: fernflower
Summary: fernflower decompiler plugin for %{name}
Requires: %{name} = %{version}-%{release}
%description fernflower-plugin
This package provides bindings and requirements to fernflower decompiler for %{name}.
%package procyon-plugin
Requires: procyon-decompiler >= 0.6
Summary: procyon decompiler plugin for %{name}
Requires: %{name} = %{version}-%{release}
%description procyon-plugin
This package provides bindings and requirements to procyon decompiler for %{name}.
%package cfr-plugin
Requires: CFR
Summary: CFR decompiler plugin for %{name}
Requires: %{name} = %{version}-%{release}
%description cfr-plugin
This package provides bindings and requirements to CFR decompiler for %{name}.
%package asmtools-plugin
Requires: openjdk-asmtools >= 8.0
Summary: asmtools disassembler and assembler plugin for %{name}
Requires: %{name} = %{version}-%{release}
%description asmtools-plugin
This package provides bindings and requirements to asmtools disassembler and assembler for %{name}.
%package asmtools7-plugin
Requires: openjdk-asmtools7
Summary: asmtools7 disassembler and assembler plugin for %{name}
Requires: %{name} = %{version}-%{release}
%description asmtools7-plugin
This package provides bindings and requirements to asmtools7 disassembler and assembler for %{name}.
%prep
%setup -q -n %{name}-%{name}-%{version}
%patch1 -p0
@ -105,66 +149,96 @@ java -cp $CPLC/classpathless-compiler.jar:$CPLC/classpathless-compiler-api.jar:$
%mvn_install
install -d -m 755 $RPM_BUILD_ROOT%{_mandir}/man1/
install -m 644 %{name}.1 $RPM_BUILD_ROOT%{_mandir}/man1/
pushd $RPM_BUILD_ROOT%{_mandir}/man1/
ln -s %{name}.1 jrd.1
ln -s %{name}.1 %{name}-hex.1
ln -s %{name}.1 jrd-hex.1
popd
install -d -m 755 $RPM_BUILD_ROOT%{_bindir}
install -m 755 %{SOURCE1} $RPM_BUILD_ROOT%{_bindir}/
install -d -m 755 $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/
pushd $RPM_BUILD_ROOT%{_bindir}
cp %{name} %{name}-hex
sed 's/^run .*/run -hex "$@"/' -i %{name}-hex
ln -s %{name} jrd
ln -s %{name}-hex jrd-hex
popd
cp -r %{_builddir}/%{name}-%{name}-%{version}/runtime-decompiler/src/plugins/ $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/
install -d -m 755 $RPM_BUILD_ROOT%{_datadir}/applications
desktop-file-install --vendor="fedora" \
--dir=${RPM_BUILD_ROOT}%{_datadir}/applications %{SOURCE3}
desktop-file-install --vendor="fedora" --dir=${RPM_BUILD_ROOT}%{_datadir}/applications %{SOURCE3}
desktop-file-install --vendor="fedora" --dir=${RPM_BUILD_ROOT}%{_datadir}/applications %{SOURCE4}
#jd is not yet packed and sucks anyway
rm $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/plugins/JdDecompilerWrapper.java
rm $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/plugins/JdDecompilerWrapper.json
%files -f .mfiles
%attr(755, root, -) %{_bindir}/java-runtime-decompiler
%{_mandir}/man1/java-runtime-decompiler.1*
%attr(755, root, -) %{_bindir}/java-runtime-decompiler-hex
%{_bindir}/jrd
%{_bindir}/jrd-hex
%{_mandir}/man1/java-runtime-decompiler*.1*
%{_mandir}/man1/jrd*.1*
# wrappers for decompilers
%dir %{_sysconfdir}/%{name}
%dir %{_sysconfdir}/%{name}/plugins
%dir %{_datadir}/applications
%{_datadir}/applications/fedora-jrd.desktop
%{_datadir}/applications/fedora-jrd-hex.desktop
%files fernflower-plugin
%config %{_sysconfdir}/%{name}/plugins/FernflowerDecompilerWrapper.java
%config(noreplace) %{_sysconfdir}/%{name}/plugins/FernflowerDecompilerWrapper.json
%files procyon-plugin
%config %{_sysconfdir}/%{name}/plugins/ProcyonDecompilerWrapper.java
%config(noreplace) %{_sysconfdir}/%{name}/plugins/ProcyonDecompilerWrapper.json
%config %{_sysconfdir}/%{name}/plugins/ProcyonAssemblerDecompilerWrapper.java
%config(noreplace) %{_sysconfdir}/%{name}/plugins/ProcyonAssemblerDecompilerWrapper.json
%files cfr-plugin
%config %{_sysconfdir}/%{name}/plugins/CfrDecompilerWrapper.java
%config(noreplace) %{_sysconfdir}/%{name}/plugins/CfrDecompilerWrapper.json
%files asmtools-plugin
%config %{_sysconfdir}/%{name}/plugins/JasmDecompilerWrapper.java
%config(noreplace) %{_sysconfdir}/%{name}/plugins/JasmDecompilerWrapper.json
%config %{_sysconfdir}/%{name}/plugins/JasmGDecompilerWrapper.java
%config(noreplace) %{_sysconfdir}/%{name}/plugins/JasmGDecompilerWrapper.json
%config %{_sysconfdir}/%{name}/plugins/Jasm7DecompilerWrapper.java
%config(noreplace) %{_sysconfdir}/%{name}/plugins/Jasm7DecompilerWrapper.json
%config %{_sysconfdir}/%{name}/plugins/JasmG7DecompilerWrapper.java
%config(noreplace) %{_sysconfdir}/%{name}/plugins/JasmG7DecompilerWrapper.json
%config %{_sysconfdir}/%{name}/plugins/JcoderDecompilerWrapper.java
%config(noreplace) %{_sysconfdir}/%{name}/plugins/JcoderDecompilerWrapper.json
%config %{_sysconfdir}/%{name}/plugins/JcoderGDecompilerWrapper.java
%config(noreplace) %{_sysconfdir}/%{name}/plugins/JcoderGDecompilerWrapper.json
%files asmtools7-plugin
%config %{_sysconfdir}/%{name}/plugins/Jasm7DecompilerWrapper.java
%config(noreplace) %{_sysconfdir}/%{name}/plugins/Jasm7DecompilerWrapper.json
%config %{_sysconfdir}/%{name}/plugins/JasmG7DecompilerWrapper.java
%config(noreplace) %{_sysconfdir}/%{name}/plugins/JasmG7DecompilerWrapper.json
%config %{_sysconfdir}/%{name}/plugins/Jcoder7DecompilerWrapper.java
%config(noreplace) %{_sysconfdir}/%{name}/plugins/Jcoder7DecompilerWrapper.json
%config %{_sysconfdir}/%{name}/plugins/JcoderG7DecompilerWrapper.java
%config(noreplace) %{_sysconfdir}/%{name}/plugins/JcoderG7DecompilerWrapper.json
%license LICENSE
%dir %{_datadir}/applications
%{_datadir}/applications/fedora-jrd.desktop
%files javadoc -f .mfiles-javadoc
%license LICENSE
%changelog
* Wed Mar 15 2023 Fedora Release Engineering <releng@fedoraproject.org> - 7.1-1
- moved to jrd 7.1
- todo: new launchers, new classpath (diff, cplc api...)
- verify current wrappers
- fixed procyon wrapper
- removed jd wrapper (was new in 7.1)
- todo verify current wrappers
- added desp on java-diff and new cplc
- fixed(?) procyon wrapper
- todo procyon crashes witout trace
- todo asmtools8 pacekd in old version
- removed jd wrapper (was new in 7.1, maybe will be added)
- split plugins to subpkgs
- added jrd-hex launcher
- added hex launcher, added jrd symlinks
* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 6.1-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild

9
jrd-hex.desktop Normal file
View file

@ -0,0 +1,9 @@
[Desktop Entry]
Encoding=UTF-8
Type=Application
Categories=Development;Profiling;Java;
Version=1.0
Name=Java Runtime Decompiler Hex editor
Exec=java-runtime-decompiler-hex
Terminal=false
Name[en_US]=jrd-hex.desktop

View file

@ -6,3 +6,4 @@ Version=1.0
Name=Java Runtime Decompiler
Exec=java-runtime-decompiler
Terminal=false
Name[en_US]=jrd.desktop