diff --git a/java-runtime-decompiler b/java-runtime-decompiler index 8d2082d..331de22 100644 --- a/java-runtime-decompiler +++ b/java-runtime-decompiler @@ -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 "$@" diff --git a/java-runtime-decompiler.spec b/java-runtime-decompiler.spec index 373f868..80d8259 100644 --- a/java-runtime-decompiler.spec +++ b/java-runtime-decompiler.spec @@ -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 - 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 - 6.1-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild diff --git a/jrd-hex.desktop b/jrd-hex.desktop new file mode 100644 index 0000000..a0db405 --- /dev/null +++ b/jrd-hex.desktop @@ -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 diff --git a/jrd.desktop b/jrd.desktop index eb2d468..70a9f2b 100644 --- a/jrd.desktop +++ b/jrd.desktop @@ -6,3 +6,4 @@ Version=1.0 Name=Java Runtime Decompiler Exec=java-runtime-decompiler Terminal=false +Name[en_US]=jrd.desktop