%define shortname  visualvm
%define uniquename io.github.visualvm
%global debug_package %{nil}
%global snapshot 20221016
%global short d05535f
%global commit d05535fd13e281fe13ee10582678a4c043acddce

Name:             VisualVM
Version:          2.1.5~git%{snapshot}.%{short}
Release:          1%{?dist}
Summary:          VisualVM is a visual tool integrating commandline JDK tools and lightweight profiling capabilities
License:          GPL-2.0-only WITH Classpath-exception-2.0
URL:              https://visualvm.github.io/
#Source0:          https://github.com/oracle/%{shortname}/archive/refs/tags/%{version}.tar.gz
Source0:          https://github.com/oracle/%{shortname}/archive/%{short}.tar.gz
Recommends:       java
Recommends:       java-devel
BuildRequires:    ant
BuildRequires:    appstream
BuildRequires:    desktop-file-utils
# Very smelly, requiring git to build.
# This is due to the way netbeans is handled in the build script.
BuildRequires:    git
BuildRequires:    java-1.8.0-devel
BuildRequires:    java-1.8.0-headless
BuildRequires:    libicns-utils

%description
VisualVM is a tool that provides a visual interface for viewing detailed information about Java technology-based
applications (Java applications) while they are running on a Java Virtual Machine (JVM). VisualVM organizes data about
the JVM software that is retrieved by the Java Development Kit (JDK) tools and presents the information in a way that
enables you to quickly view data on multiple Java applications. You can view data on local applications and applications
that are running on remote hosts. You can also capture data about JVM software instances and save the data to your local
system, and view the data later or share the data with others.


%prep
#%setup -qn "%{shortname}-%{version}"
%setup -qn "%{shortname}-%{commit}"
# TODO: netbeans could be packaged separately
cd visualvm
./build-nb.sh
mv build/nb/nb140_platform_.zip ./
unzip nb140_platform_.zip


%build
cat > %{uniquename}.metainfo.xml <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop-application">
  <id>%{uniquename}</id>

  <name>%{name}</name>
  <summary>%{summary}</summary>

  <metadata_license>FSFAP</metadata_license>
  <project_license>GPL-2.0-only WITH Classpath-exception-2.0</project_license>

  <description>
    <p>
      VisualVM is a tool that provides a visual interface for viewing detailed information about Java technology-based applications (Java applications) while they are running on a Java Virtual Machine (JVM). VisualVM organizes data about the JVM software that is retrieved by the Java Development Kit (JDK) tools and presents the information in a way that enables you to quickly view data on multiple Java applications. You can view data on local applications and applications that are running on remote hosts. You can also capture data about JVM software instances and save the data to your local system, and view the data later or share the data with others.
    </p>
  </description>

  <content_rating type="oars-1.1" />

  <launchable type="desktop-id">%{uniquename}.desktop</launchable>
  <screenshots>
    <screenshot type="default">
      <image>https://visualvm.github.io/images/visualvm_screenshot_20.png</image>
    </screenshot>
  </screenshots>

  <icon type="stock">%{shortname}</icon>

  <categories>
    <category>Development</category>
    <category>Java</category>
  </categories>

  <provides>
    <binary>%{shortname}</binary>
  </provides>
</component>
EOF

appstreamcli make-desktop-file %{uniquename}.metainfo.xml %{uniquename}.desktop
echo "StartupWMClass=%{name} %{version}" >> %{uniquename}.desktop

# Create the wrapper for /usr/bin
cat >%{shortname}.sh <<EOF
#!/bin/sh
%{_datadir}/%{shortname}/bin/%{shortname} $@
EOF


export JAVA_HOME=$(realpath $(rpm -ql $(rpm -q --whatprovides java-1.8.0-headless) | grep "jre" | head -n1)/..)
cd visualvm
ant build-zip
cd dist
unzip visualvm.zip

cd visualvm/etc
icns2png -x visualvm.icns


%install
# NOT SURE WE NEED ALL OF THESE
mkdir -p %{buildroot}%{_bindir} \
         %{buildroot}%{_datadir}/%{shortname} \
         %{buildroot}%{_datadir}/metainfo/ \
         %{buildroot}%{_datadir}/icons/hicolor/16x16/apps/ \
         %{buildroot}%{_datadir}/icons/hicolor/32x32/apps/ \
         %{buildroot}%{_datadir}/icons/hicolor/128x128/apps/ \
         %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/ \
         %{buildroot}%{_datadir}/icons/hicolor/512x512/apps/ \
         %{buildroot}%{_sysconfdir}/profile.d

cp -a visualvm/dist/visualvm/* \
      %{buildroot}%{_datadir}/%{shortname}/

ln -s ../../../../%{shortname}/etc/visualvm_16x16x32.png   %{buildroot}%{_datadir}/icons/hicolor/16x16/apps/%{shortname}.png
ln -s ../../../../%{shortname}/etc/visualvm_32x32x32.png   %{buildroot}%{_datadir}/icons/hicolor/32x32/apps/%{shortname}.png
ln -s ../../../../%{shortname}/etc/visualvm_128x128x32.png %{buildroot}%{_datadir}/icons/hicolor/128x128/apps/%{shortname}.png
ln -s ../../../../%{shortname}/etc/visualvm_256x256x32.png %{buildroot}%{_datadir}/icons/hicolor/256x256/apps/%{shortname}.png
ln -s ../../../../%{shortname}/etc/visualvm_512x512x32.png %{buildroot}%{_datadir}/icons/hicolor/512x512/apps/%{shortname}.png

install -p -m0755 %{shortname}.sh \
                  %{buildroot}%{_bindir}/%{shortname}

desktop-file-install --dir %{buildroot}%{_datadir}/applications \
                     %{uniquename}.desktop

cp %{uniquename}.metainfo.xml %{buildroot}%{_datadir}/metainfo/

%ifnarch x86_64
    rm -Rf %{buildroot}%{_datadir}/%{shortname}/platform/modules/lib/amd64
    rm -Rf %{buildroot}%{_datadir}/%{shortname}/platform/modules/lib/i386
    rm -Rf %{buildroot}%{_datadir}/%{shortname}/platform/modules/lib/x86
    rm -Rf %{buildroot}%{_datadir}/%{shortname}/platform/modules/lib/x86_64
    rm -Rf %{buildroot}%{_datadir}/%{shortname}/visualvm/lib/deployed/jdk15/linux
    rm -Rf %{buildroot}%{_datadir}/%{shortname}/visualvm/lib/deployed/jdk15/linux-amd64
    rm -Rf %{buildroot}%{_datadir}/%{shortname}/visualvm/lib/deployed/jdk16/linux
    rm -Rf %{buildroot}%{_datadir}/%{shortname}/visualvm/lib/deployed/jdk16/linux-amd64
%endif

rm -Rf %{buildroot}%{_datadir}/%{shortname}/bin/visualvm.exe
rm -Rf %{buildroot}%{_datadir}/%{shortname}/platform/modules/lib/aarch64*
rm -Rf %{buildroot}%{_datadir}/%{shortname}/platform/modules/lib/riscv64*
rm -Rf %{buildroot}%{_datadir}/%{shortname}/visualvm/lib/deployed/jdk15/mac*
rm -Rf %{buildroot}%{_datadir}/%{shortname}/visualvm/lib/deployed/jdk15/solaris*
rm -Rf %{buildroot}%{_datadir}/%{shortname}/visualvm/lib/deployed/jdk15/windows*
rm -Rf %{buildroot}%{_datadir}/%{shortname}/visualvm/lib/deployed/jdk16/linux-aarch64*
rm -Rf %{buildroot}%{_datadir}/%{shortname}/visualvm/lib/deployed/jdk16/linux-arm*
rm -Rf %{buildroot}%{_datadir}/%{shortname}/visualvm/lib/deployed/jdk16/mac*
rm -Rf %{buildroot}%{_datadir}/%{shortname}/visualvm/lib/deployed/jdk16/solaris*
rm -Rf %{buildroot}%{_datadir}/%{shortname}/visualvm/lib/deployed/jdk16/windows*


%post -p /sbin/ldconfig


%postun -p /sbin/ldconfig


%check
desktop-file-validate %{buildroot}%{_datadir}/applications/%{uniquename}.desktop


%files
%{_bindir}/%{shortname}
%{_datadir}/applications/%{uniquename}.desktop
%{_datadir}/icons/hicolor/16x16/apps/%{shortname}.png
%{_datadir}/icons/hicolor/32x32/apps/%{shortname}.png
%{_datadir}/icons/hicolor/128x128/apps/%{shortname}.png
%{_datadir}/icons/hicolor/256x256/apps/%{shortname}.png
%{_datadir}/icons/hicolor/512x512/apps/%{shortname}.png
%{_datadir}/metainfo/%{uniquename}.metainfo.xml
%{_datadir}/%{shortname}
%license %{_datadir}/%{shortname}/LICENSE.txt
%license %{_datadir}/%{shortname}/THIRDPARTYLICENSE


%changelog
* Thu Oct 6 2022 Chris Throup <chris@throup.eu>
- Initial RPM release