diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..70ae512 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/fernflower-183.5153.8.tar.gz +/fernflower-211.7442.40.tar.gz diff --git a/README.md b/README.md index 57646ee..a9f6270 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,8 @@ # fernflower -The fernflower package \ No newline at end of file +The fernflower package + +JIdea's decompiler is the first actually working analytical decompiler for Java and probably +for a high-level programming language in general. Naturally it is still under development, +please send your bug reports and improvement suggestions to the issue tracker. + diff --git a/create-sources.sh b/create-sources.sh new file mode 100644 index 0000000..6a9b44c --- /dev/null +++ b/create-sources.sh @@ -0,0 +1,31 @@ +# idea soources have 280MB +# decompiler itself is 375kB now, including test classes... +VERSION=211.7442.40 +INPUT=$VERSION.tar.gz +TOP_DIR=intellij-community-idea-$VERSION +DECOMPILER_DIR=$TOP_DIR/plugins/java-decompiler +NAME=fernflower +OUT_NAME=$NAME-$VERSION +OUTPUT=$OUT_NAME.tar.gz + +if [ -e $OUTPUT ] ; then + echo "$OUTPUT already exists" +else + if [ -e $INPUT ] ; then + echo "$INPUT already exists, not downloading" + set -ex + else + set -ex + wget https://github.com/JetBrains/intellij-community/archive/idea/$INPUT + fi + tar tzf $INPUT | grep -e decompiler -e LICENSE + tar -xvf $INPUT $DECOMPILER_DIR/engine + tar -xvf $INPUT $TOP_DIR/LICENSE.txt + mv $TOP_DIR/LICENSE.txt $DECOMPILER_DIR/engine + pushd $DECOMPILER_DIR/ + mv engine $OUT_NAME + tar -cJf $OUTPUT $OUT_NAME + popd + mv $DECOMPILER_DIR/$OUTPUT . + rm -rf $TOP_DIR +fi diff --git a/fernflower b/fernflower new file mode 100644 index 0000000..5adcf15 --- /dev/null +++ b/fernflower @@ -0,0 +1,7 @@ +#!/bin/bash +. /usr/share/java-utils/java-functions + +MAIN_CLASS=org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler + +set_classpath fernflower +run ${@} diff --git a/fernflower.spec b/fernflower.spec new file mode 100644 index 0000000..daa1e57 --- /dev/null +++ b/fernflower.spec @@ -0,0 +1,185 @@ +#in noarch? why... +%global debug_package %{nil} +#javadoc is empty. Keep building it now with hope for bright future +%global with_javadoc 1 + +Name: fernflower +Version: 211.7442.40 +Release: 16%{?dist} +Summary: JIdea's java decompiler +# Automatically converted from old format: ASL 2.0 - review is highly recommended. +License: Apache-2.0 +URL: https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine + +#Source0: https://github.com/JetBrains/intellij-community/archive/idea/%%{version}.tar.gz +# this source is 280MB big, so only the decompiler is repacked via create-sources.sh and has 350kB +# generated by source2; `create-sources.sh 183.5153.8` +Source0: %{name}-%{version}.tar.gz +# launcher +Source1: %{name} +Source2: create-sources.sh + +Patch0: remove_main.patch +Patch1: port_to_java_8.patch + +BuildArch: noarch +ExclusiveArch: %{java_arches} noarch + +BuildRequires: javapackages-tools +BuildRequires: java-25-devel +%if %{with_javadoc} +BuildRequires: zip +%endif +Requires: java-25-headless +Requires: javapackages-tools +Provides: %{name}-decompiler + +%description +JIdea's decompiler is the first actually working analytical decompiler for Java and probably +for a high-level programming language in general. Naturally it is still under development, +please send your bug reports and improvement suggestions to the issue tracker. + +%if %{with_javadoc} +%package javadoc +Summary: %{name} API documentation +Requires: javapackages-filesystem +BuildArch: noarch +Provides: %{name}-decompiler-javadoc + +%description javadoc +The %{name} 100% empty API documentation. +%endif + +%prep +%setup +# removing test classes and jars, tests are not run in rpm build anyway (but can be run out of it) +# maybe to pack them as demos? +find | grep "\\.class$" +find | grep "\\.jar$" +rm -rvf test +rm -rvf testData +rm -vf gradle/wrapper/gradle-wrapper.jar +find | grep "\\.class$" && exit 1 +find | grep "\\.jar$" && exit 1 +#removing main method from entry point jar +%patch -P0 +%patch -P1 -p1 + +%build +mkdir build +javac -source 8 -target 8 -d build `find src -type f` +cd build +jar -cf ../%{name}.jar org +cd .. +mkdir build/libs +mv %{name}.jar build/libs/ +%if %{with_javadoc} +# this is sad. Javadoc is really 100% empty +mkdir fernflower-javadoc +cd fernflower-javadoc +javadoc `find ../src -type f` +cd .. +zip -r %{name}.zip fernflower-javadoc +%endif + +%install +mkdir -p $RPM_BUILD_ROOT/%{_bindir}/ +cp %{SOURCE1} $RPM_BUILD_ROOT/%{_bindir}/ # cusotm launcher for main method in main jar +mkdir -p $RPM_BUILD_ROOT/%{_javadir}/ +cp build/libs/%{name}.jar $RPM_BUILD_ROOT/%{_javadir} +%if %{with_javadoc} +mkdir -p $RPM_BUILD_ROOT/%{_javadocdir}/%{name} +cp %{name}.zip $RPM_BUILD_ROOT/%{_javadocdir}/ +%endif + +%files +%license LICENSE.txt +%doc README.md +%{_javadir}/%{name}.jar +%attr(755, root, root) %{_bindir}/%{name} + +%if %{with_javadoc} +%files javadoc +%license LICENSE.txt +%doc README.md +%{_javadocdir}/%{name}.zip +%endif + +%changelog +* Mon Jul 28 2025 jiri vanek - 211.7442.40-16 +- Rebuilt for java-25-openjdk as preffered jdk + +* Wed Jul 23 2025 Fedora Release Engineering - 211.7442.40-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Thu Jan 16 2025 Fedora Release Engineering - 211.7442.40-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Wed Jul 24 2024 Miroslav Suchý - 211.7442.40-13 +- convert license to SPDX + +* Wed Jul 17 2024 Fedora Release Engineering - 211.7442.40-12 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Tue Feb 27 2024 Jiri Vanek - 211.7442.40-11 +- Rebuilt for java-21-openjdk as system jdk + +* Wed Jan 24 2024 Fedora Release Engineering - 211.7442.40-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 19 2024 Fedora Release Engineering - 211.7442.40-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Wed Jul 19 2023 Fedora Release Engineering - 211.7442.40-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Thu Jan 19 2023 Fedora Release Engineering - 211.7442.40-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Thu Jul 21 2022 Fedora Release Engineering - 211.7442.40-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Fri Jul 08 2022 Jiri Vanek - 211.7442.40-5 +- Rebuilt for Drop i686 JDKs + +* Sat Feb 05 2022 Jiri Vanek - 211.7442.40-4 +- Rebuilt for java-17-openjdk as system jdk + +* Thu Jan 20 2022 Fedora Release Engineering - 211.7442.40-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Wed Jul 21 2021 Fedora Release Engineering - 211.7442.40-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Wed Jun 02 2021 Marian Koncek - 211.7442.40-1 +- Update to upstream version 211.7442.40 + +* Tue Jan 26 2021 Fedora Release Engineering - 183.5153.8-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Thu Dec 10 2020 Jiri Vanek - 183.5153.8-9 +- set source/target of 8 + +* Mon Jul 27 2020 Fedora Release Engineering - 183.5153.8-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Fri Jul 10 2020 Jiri Vanek - 183.5153.8-7 +- Rebuilt for JDK-11, see https://fedoraproject.org/wiki/Changes/Java11 + +* Tue Feb 18 2020 Jiri Vanek - 183.5153.8-6 +- moved to gradle-less build + +* Tue Jan 28 2020 Fedora Release Engineering - 183.5153.8-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Jul 25 2019 Fedora Release Engineering - 183.5153.8-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Thu Jan 31 2019 Fedora Release Engineering - 183.5153.8-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Fri Jan 18 2019 Jiri Vanek - 183.5153.8-2 +- added virtual provides of fernflower-decompiler and fernflower-decompiler-javadoc + +* Wed Jan 09 2019 Jiri Vanek - 183.5153.8-1 +- initial package diff --git a/port_to_java_8.patch b/port_to_java_8.patch new file mode 100644 index 0000000..20ae101 --- /dev/null +++ b/port_to_java_8.patch @@ -0,0 +1,13 @@ +diff --git a/src/org/jetbrains/java/decompiler/util/SFormsFastMapDirect.java b/src/org/jetbrains/java/decompiler/util/SFormsFastMapDirect.java +index bb8b4dd..30fcb9b 100644 +--- a/src/org/jetbrains/java/decompiler/util/SFormsFastMapDirect.java ++++ b/src/org/jetbrains/java/decompiler/util/SFormsFastMapDirect.java +@@ -342,7 +342,7 @@ public class SFormsFastMapDirect { + if (ent != null) { + final int key = i == 0 ? ikey : (i == 1 ? ikey + VarExprent.STACK_BASE : -ikey); + +- list.add(new Entry<>() { ++ list.add(new Entry>() { + + private final Integer var = key; + private final FastSparseSet val = ent; diff --git a/remove_main.patch b/remove_main.patch new file mode 100644 index 0000000..6490081 --- /dev/null +++ b/remove_main.patch @@ -0,0 +1,18 @@ +--- build.gradle 2021-05-31 12:00:45.000000000 +0200 ++++ build.gradle.rej 2021-06-02 14:27:41.778875605 +0200 +@@ -11,15 +11,6 @@ + test.java.srcDirs 'test' + } + +-repositories { jcenter() } +-dependencies { +- testCompile 'junit:junit:4.12' +- testCompile 'org.assertj:assertj-core:3.12.2' +-} +- + jar { + archiveName 'fernflower.jar' +- manifest { +- attributes 'Main-Class': 'org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler' +- } + } diff --git a/sources b/sources new file mode 100644 index 0000000..472a918 --- /dev/null +++ b/sources @@ -0,0 +1 @@ +SHA512 (fernflower-211.7442.40.tar.gz) = 54138ec2987f27887dc7a882d0e4d5bf6a1a7c4d9f8e73bafd7cd957181779bb59a413117cd65dd29973c9072f5b89f797c78581113f83043191894b0631ab31