File ant.spec of Package ant

#
# spec file for package ant
#
# Copyright (c) 2025 SUSE LLC and contributors
# Copyright (c) 2000-2009, JPackage Project
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


%global ant_home %{_datadir}/ant
%global major_version 1.9
Name:           ant
Version:        1.9.16
Release:        0
Summary:        Java-based build tool
License:        Apache-2.0
Group:          Development/Tools/Building
URL:            https://ant.apache.org/
Source0:        http://www.apache.org/dist/ant/source/apache-ant-%{version}-src.tar.bz2
Source1:        apache-ant-1.8.ant.conf
Source1001:     http://www.apache.org/dist/ant/source/apache-ant-%{version}-src.tar.bz2.asc
Source1002:     ant.keyring
Patch0:         apache-ant-no-test-jar.patch
Patch1:         apache-ant-class-path-in-manifest.patch
Patch4:         apache-ant-1.9.9-sourcetarget.patch
Patch5:         apache-ant-bootstrap.patch
#PATCH-FEATURE-OPENSUSE bmwiedemann -- have fixed build dates
Patch6:         reproducible-build-date.patch
Patch7:         gcj-isReachable.patch
Patch8:         reproducible-tstamp.patch
BuildRequires:  antlr-bootstrap
# Needed for maven conversions
BuildRequires:  java-1_5_0-gcj-compat-devel
BuildRequires:  java-devel
BuildRequires:  javapackages-tools
BuildRequires:  unzip
BuildRequires:  xml-commons-apis-bootstrap
BuildConflicts: java >= 1.6
BuildConflicts: java-devel >= 1.6
BuildConflicts: java-headless >= 1.6
#!BuildIgnore:  antlr-java
#!BuildIgnore:  xerces-j2-bootstrap
Requires:       java-devel
Requires:       javapackages-tools
Requires:       xml-commons-apis
Requires:       xml-commons-resolver
Obsoletes:      apache-ant < %{version}
Provides:       apache-ant = %{version}
Obsoletes:      ant-nodeps < %{version}
Provides:       ant-nodeps = %{version}
Obsoletes:      ant-trax < %{version}
Provides:       ant-trax = %{version}
BuildArch:      noarch
%if 0%{?suse_version} > 1320
BuildRequires:  strip-nondeterminism
%endif

%description
Apache Ant is a Java-based build tool. In theory, it is kind of like
Make. Build description files are written in XML.

%package -n ant-jmf
Summary:        Optional jmf tasks for ant
Group:          Development/Tools/Building
Requires:       ant = %{version}
Provides:       ant-jmf = %{version}-%{release}

%description -n ant-jmf
Apache Ant is a Java-based build tool.

This package contains optional jmf tasks for Apache Ant.

%package -n ant-swing
Summary:        Optional swing tasks for ant
Group:          Development/Tools/Building
Requires:       ant = %{version}
Provides:       ant-swing = %{version}-%{release}

%description -n ant-swing
Apache Ant is a Java-based build tool.

This package contains optional swing tasks for Apache Ant.

%package -n ant-scripts
Summary:        Additional scripts for ant
Group:          Development/Tools/Building
Requires:       ant = %{version}
Requires:       perl
Requires:       python3-base

%description -n ant-scripts
Apache Ant is a Java-based build tool.

This package contains additional perl and python scripts for Apache
Ant.

%prep
%setup -q -n apache-ant-%{version}
#Fixup version
find -name build.xml -o -name pom.xml | xargs sed -i -e s/-SNAPSHOT//

# When bootstrapping, we don't have junit
%patch -P 0 -p1
%patch -P 1
%patch -P 4 -p1
%patch -P 5 -p1
%patch -P 6 -p1
%patch -P 7 -p1
%patch -P 8 -p1

# clean jar files
find . -name "*.jar" -print -delete

# failing testcases. TODO see why
rm src/tests/junit/org/apache/tools/ant/types/selectors/SignedSelectorTest.java \
   src/tests/junit/org/apache/tools/ant/taskdefs/condition/IsFileSelectedTest.java \
   src/tests/junit/org/apache/tools/ant/taskdefs/condition/IsSignedTest.java \
   src/tests/junit/org/apache/tools/ant/taskdefs/JarTest.java \
   src/tests/junit/org/apache/tools/mail/MailMessageTest.java

#install jars

# Fix file-not-utf8 rpmlint warning
iconv KEYS -f iso-8859-1 -t utf-8 -o KEYS.utf8
mv KEYS.utf8 KEYS
iconv LICENSE -f iso-8859-1 -t utf-8 -o LICENSE.utf8
mv LICENSE.utf8 LICENSE
# -----------------------------------------------------------------------------

%build
export OPT_JAR_LIST=:

export GC_MAXIMUM_HEAP_SIZE="134217728" #128M
export BOOTJAVAC_OPTS="-source 1.5 -target 1.5"
export ANT_OPTS="-Doptimize=false -Djavac.source=1.5 -Djavac.target=1.5"

sh -x ./build.sh --noconfig jars

%?strip_all_nondeterminism

%install
# ANT_HOME and subdirs
mkdir -p %{buildroot}%{ant_home}/{lib,etc}
# jars
install -d -m 755 %{buildroot}%{_javadir}/ant
install -d -m 755 %{buildroot}%{_mavenpomdir}

rm build/lib/ant-junit*.jar

for jar in build/lib/*.jar
do
  jarname=$(basename $jar .jar)
  pomname="JPP.ant-${jarname}.pom"

  #Determine where to put it
  case $jarname in
#These go into %%{_javadir}, pom files have different names
  ant | ant-bootstrap | ant-launcher)
  destdir="%{buildroot}%{_javadir}"; destname="";pomname="JPP-$jarname.pom"
  ;;
  ant-jmf|ant-swing)
  destdir="%{buildroot}%{_javadir}/ant"; destname="ant/";
  ;;
#Bootstracp builds an incomplete ant-foo jars, don't ship them
  *)
  continue
  ;;
  esac

  #instal jar
  install -m 644 ${jar} ${destdir}/${jarname}.jar
  # jar aliases
  ln -sf ../../java/${destname}${jarname}.jar %{buildroot}%{ant_home}/lib/${jarname}.jar

  #bootstrap does not have a pom
  [ $jarname == ant-bootstrap ] && continue

done

# scripts: remove dos and os/2 scripts
rm -f src/script/*.bat
rm -f src/script/*.cmd

# XSLs
cp -p src%{_sysconfdir}/*.xsl %{buildroot}%{ant_home}%{_sysconfdir}
rm -f  %{buildroot}%{ant_home}%{_sysconfdir}/{maudit-frames,jdepend,jdepend-frames,junit-frames,junit-noframes}.xsl

# install everything else
mkdir -p %{buildroot}%{_bindir}
cp -p src/script/* %{buildroot}%{_bindir}/
rm -f %{buildroot}%{_bindir}/*.orig
mkdir -p %{buildroot}%{_datadir}/%{name}/bin/
ln -sf %{_bindir}/antRun %{buildroot}/%{_datadir}/%{name}/bin/antRun

mkdir -p %{buildroot}%{_sysconfdir}/ant.d

# default ant.conf
mkdir -p %{buildroot}%{_sysconfdir}
cp -p %{SOURCE1} %{buildroot}%{_sysconfdir}/ant.conf

# OPT_JAR_LIST fragments
echo "ant/ant-jmf" > %{buildroot}%{_sysconfdir}/%{name}.d/jmf
echo "ant/ant-swing" > %{buildroot}%{_sysconfdir}/%{name}.d/swing

find %{buildroot}%{_datadir}/ant%{_sysconfdir} -type f -name "*.xsl" \
                                                 -a ! -name ant-update.xsl \
                                                 -a ! -name changelog.xsl \
                                                 -a ! -name coverage-frames.xsl \
                                                 -a ! -name junit-frames-xalan1.xsl \
                                                 -a ! -name log.xsl \
                                                 -a ! -name mmetrics-frames.xsl \
                                                 -a ! -name tagdiff.xsl \
                                                 -print -delete

%files
%license LICENSE
%doc KEYS NOTICE README WHATSNEW
%config(noreplace) %{_sysconfdir}/%{name}.conf
%attr(0755,root,root) %{_bindir}/ant
%attr(0755,root,root) %{_bindir}/antRun
%{_javadir}/%{name}.jar
%{_javadir}/%{name}-launcher.jar
%{_javadir}/%{name}-bootstrap.jar
%dir %{_javadir}/%{name}
%dir %{ant_home}
%dir %{ant_home}%{_sysconfdir}
%{ant_home}/bin
%{ant_home}%{_sysconfdir}/ant-update.xsl
%{ant_home}%{_sysconfdir}/changelog.xsl
%{ant_home}%{_sysconfdir}/coverage-frames.xsl
%{ant_home}%{_sysconfdir}/mmetrics-frames.xsl
%{ant_home}%{_sysconfdir}/log.xsl
%{ant_home}%{_sysconfdir}/tagdiff.xsl
%{ant_home}%{_sysconfdir}/junit-frames-xalan1.xsl
%dir %{ant_home}/lib
%dir %{_sysconfdir}/%{name}.d
%{ant_home}/lib/ant.jar
%{ant_home}/lib/ant-bootstrap.jar
%{ant_home}/lib/ant-launcher.jar
%dir %{_sysconfdir}/ant.d

### Basic ant subpackages
%files -n ant-jmf
%{_javadir}/ant/ant-jmf.jar
%{ant_home}/lib/ant-jmf.jar
%config(noreplace) %{_sysconfdir}/ant.d/jmf

%files -n ant-swing
%{_javadir}/ant/ant-swing.jar
%{ant_home}/lib/ant-swing.jar
%config(noreplace) %{_sysconfdir}/ant.d/swing

%files -n ant-scripts
%defattr(0755,root,root,0755)
%{_bindir}/*.pl
%{_bindir}/*.py*

%changelog
openSUSE Build Service is sponsored by