File objenesis.spec of Package objenesis

#
# spec file for package objenesis
#
# Copyright (c) 2024 SUSE LLC
# 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 major 3
%global minor 3
%global micro 0
%global fullversion %{major}.%{minor}.%{micro}
%global specversion %{major}.%{minor}
Name:           objenesis
%if %{micro}
Version:        %{fullversion}
Release:        0
%else
Version:        %{specversion}
Release:        0
%endif
Summary:        A library for instantiating Java objects
License:        Apache-2.0
Group:          Development/Libraries/Java
URL:            https://objenesis.org/
Source0:        https://github.com/easymock/%{name}/archive/refs/tags/%{version}.tar.gz
Patch0:         objenesis-javadoc.patch
BuildRequires:  fdupes
BuildRequires:  java-devel >= 1.8
BuildRequires:  javapackages-local >= 6
BuildArch:      noarch

%description
Objenesis is a small Java library that serves one purpose: to instantiate
a new object of a particular class.
Java supports dynamic instantiation of classes using Class.newInstance();
however, this only works if the class has an appropriate constructor. There
are many times when a class cannot be instantiated this way, such as when
the class contains constructors that require arguments, that have side effects,
and/or that throw exceptions. As a result, it is common to see restrictions
in libraries stating that classes must require a default constructor.
Objenesis aims to overcome these restrictions by bypassing the constructor
on object instantiation. Needing to instantiate an object without calling
the constructor is a fairly specialized task, however there are certain cases
when this is useful:
* Serialization, Remoting and Persistence - Objects need to be instantiated
  and restored to a specific state, without invoking code.
* Proxies, AOP Libraries and Mock Objects - Classes can be sub-classed without
  needing to worry about the super() constructor.
* Container Frameworks - Objects can be dynamically instantiated in
  non-standard ways.

%package javadoc
Summary:        Javadoc for %{name}
Group:          Documentation/HTML
BuildArch:      noarch

%description javadoc
This package contains the API documentation for %{name}.

%prep
%setup -q
%patch -P 0 -p1

# Enable generation of pom.properties (rhbz#1017850)
%pom_xpath_remove pom:addMavenDescriptor

%build
mkdir -p main/build/classes
javac -d main/build/classes -source 8 -target 8 -encoding utf-8 \
  $(find main/src/main/java -name *.java | xargs)
jar \
%if %{?pkg_vcmp:%pkg_vcmp java-devel >= 17}%{!?pkg_vcmp:0}
    --date="$(date -u -d @${SOURCE_DATE_EPOCH:-$(date +%%s)} +%%Y-%%m-%%dT%%H:%%M:%%SZ)" \
%endif
    --create --file=%{name}-%{version}.jar -C main/build/classes .

touch manifest.txt
echo "Automatic-Module-Name: org.objenesis" >> manifest.txt
echo "Bundle-Description: A library for instantiating Java objects" >> manifest.txt
echo "Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt" >> manifest.txt
echo "Bundle-Name: Objenesis" >> manifest.txt
echo "Bundle-SymbolicName: org.objenesis" >> manifest.txt
echo "Bundle-Version: %{fullversion}" >> manifest.txt
echo "Export-Package: org.objenesis;uses:=\"org.objenesis.instantiator,org.objenesis.strategy\";version=\"%{fullversion}\",\
org.objenesis.instantiator.android;uses:=\"org.objenesis.instantiator,\
org.objenesis.instantiator.annotations\";version=\"%{fullversion}\",\
org.objenesis.instantiator.basic;uses:=\"org.objenesis.instantiator,org.objenesis.instantiator.annotations\";version=\"%{fullversion}\",\
org.objenesis.instantiator;version=\"%{fullversion}\",\
org.objenesis.instantiator.gcj;uses:=\"org.objenesis.instantiator,org.objenesis.instantiator.annotations\";version=\"%{fullversion}\",\
org.objenesis.instantiator.util;uses:=\"sun.misc\";version=\"%{fullversion}\",org.objenesis.instantiator.annotations;version=\"%{fullversion}\",org.objenesis.instantiator.perc;uses:=\"org.objenesis.instantiator,org.objenesis.instantiator.annotations\";version=\"%{fullversion}\",\
org.objenesis.instantiator.sun;uses:=\"org.objenesis.instantiator,\
org.objenesis.instantiator.annotations\";version=\"%{fullversion}\",\
org.objenesis.strategy;uses:=\"org.objenesis.instantiator\";version=\"%{fullversion}\"" | sed 's/.\{71\}/&\n /g' >> manifest.txt
echo "Import-Package: sun.misc;resolution:=optional,\
COM.newmonics.PercClassloader;resolution:=optional,\
sun.reflect;resolution:=optional" | sed 's/.\{71\}/&\n /g' >> manifest.txt
echo "Require-Capability: osgi.ee;filter:=\"(&(osgi.ee=JavaSE)(version=1.6))\"" >> manifest.txt
jar \
%if %{?pkg_vcmp:%pkg_vcmp java-devel >= 17}%{!?pkg_vcmp:0}
    --date="$(date -u -d @${SOURCE_DATE_EPOCH:-$(date +%%s)} +%%Y-%%m-%%dT%%H:%%M:%%SZ)" \
%endif
    --update --file=%{name}-%{version}.jar --manifest=manifest.txt

mkdir -p tck/build/classes
javac -d tck/build/classes -source 8 -target 8 -encoding utf-8 \
  -cp %{name}-%{version}.jar \
  $(find tck/src/main/java -name *.java | xargs)
jar \
%if %{?pkg_vcmp:%pkg_vcmp java-devel >= 17}%{!?pkg_vcmp:0}
    --date="$(date -u -d @${SOURCE_DATE_EPOCH:-$(date +%%s)} +%%Y-%%m-%%dT%%H:%%M:%%SZ)" \
%endif
    --create --file=%{name}-tck-%{version}.jar -C tck/build/classes .
jar \
%if %{?pkg_vcmp:%pkg_vcmp java-devel >= 17}%{!?pkg_vcmp:0}
    --date="$(date -u -d @${SOURCE_DATE_EPOCH:-$(date +%%s)} +%%Y-%%m-%%dT%%H:%%M:%%SZ)" \
%endif
    --update --file=%{name}-tck-%{version}.jar -C tck/src/main/resources .
jar \
%if %{?pkg_vcmp:%pkg_vcmp java-devel >= 17}%{!?pkg_vcmp:0}
    --date="$(date -u -d @${SOURCE_DATE_EPOCH:-$(date +%%s)} +%%Y-%%m-%%dT%%H:%%M:%%SZ)" \
%endif
    --update --file=%{name}-tck-%{version}.jar --main-class=org.objenesis.tck.Main

mkdir -p build/apidoc
javadoc -d build/apidoc -source 8 -encoding utf-8 -notimestamp \
  $(find main/src/main/java -name *.java && \
    find tck/src/main/java -name *.java | xargs)

%install
# jars
install -dm 755 %{buildroot}%{_javadir}/%{name}
install -m 0644 %{name}-%{version}.jar %{buildroot}%{_javadir}/%{name}/%{name}.jar
install -m 0644 %{name}-tck-%{version}.jar %{buildroot}%{_javadir}/%{name}/%{name}-tck.jar

# poms
install -dm 755 %{buildroot}%{_mavenpomdir}/%{name}
%{mvn_install_pom} main/pom.xml %{buildroot}%{_mavenpomdir}/%{name}/%{name}.pom
%{mvn_install_pom} tck/pom.xml %{buildroot}%{_mavenpomdir}/%{name}/%{name}-tck.pom
%add_maven_depmap %{name}/%{name}.pom %{name}/%{name}.jar
%add_maven_depmap %{name}/%{name}-tck.pom %{name}/%{name}-tck.jar

# javadoc
install -dm 755 %{buildroot}%{_javadocdir}/%{name}
cp -aL build/apidoc/* %{buildroot}%{_javadocdir}/%{name}
%fdupes -s %{buildroot}%{_javadocdir}/%{name}

%files -f .mfiles
%license LICENSE.txt

%files javadoc
%license LICENSE.txt
%{_javadocdir}/%{name}

%changelog
openSUSE Build Service is sponsored by