# Copyright (c) 2000-2009, JPackage Project
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the
#    distribution.
# 3. Neither the name of the JPackage Project nor the names of its
#    contributors may be used to endorse or promote products derived
#    from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
Summary:        A library for instantiating Java objects
Name:           objenesis
Version:        1.2
Release:        1%{dist}
Group:          Development/Libraries
License:        MIT
URL:            http://objenesis.googlecode.com/svn/docs/index.html
# svn export http://objenesis.googlecode.com/svn/tags/1_2/ objenesis-1.2
# tar cfJ objenesis-1.2.tar.xz objenesis-1.2
Source0:        %{name}-%{version}.tar.xz
# Additional JPP depmap
Source1:        %{name}-jpp-depmap.xml
# Repo settings
Source2:        %{name}-settings.xml
# Skipping website (requires xsite), this patch is unused atm
#Patch0:         objenesis-website-pom.patch
# Remove deps for test scope (unavailable); remove maven-shade-plugin in tck
# (need bugfix); fix maven-license-plugin groupID to latest version available.
Patch1:         001-objenesis-fix-build.patch
BuildRequires:  jpackage-utils
BuildRequires:  java-devel
BuildRequires:  junit
BuildRequires:  maven2 >= 2.0.7
BuildRequires:  maven2-plugin-antrun
BuildRequires:  maven2-plugin-assembly
BuildRequires:  maven2-plugin-compiler
BuildRequires:  maven2-plugin-eclipse
BuildRequires:  maven2-plugin-install
BuildRequires:  maven2-plugin-jar
BuildRequires:  maven2-plugin-javadoc
BuildRequires:  maven2-plugin-resources
BuildRequires:  maven2-plugin-site
BuildRequires:  maven2-plugin-source
BuildRequires:  maven2-plugin-surefire
BuildRequires:  maven-plugin-bundle
BuildRequires:  xpp3-minimal
BuildRequires:  asm2
Requires:       java 
BuildRequires:  jpackage-utils
Requires(post):   jpackage-utils 
Requires(postun): jpackage-utils 
BuildArch:      noarch
BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%description
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.
* Constructors that have side effects.
* Constructors 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 subclassed without 
  needing to worry about the super() constructor.
* Container Frameworks - Objects can be dynamically instantiated in 
  non-standard ways.
%package javadoc
Group:          Documentation
Summary:        Javadoc for %{name}
Requires:       %{name} = %{version}-%{release}
Requires:       jpackage-utils
BuildArch:      noarch
%description javadoc
This package contains the API documentation for %{name}.
# Skipped till xsite avilable in fedora
#%%package manual
#Group:          Documentation
#Summary:        Documents for %%{name}
#
#%%description manual
#This package contains the %%{name} manual.
%prep
%setup -q 
#%%patch0 -b .sav0
%patch1 -p1
%build
cp %{SOURCE2} maven2-settings.xml
sed -i -e "s|__JPP_URL_PLACEHOLDER__|file://`pwd`/.m2/repository|g" maven2-settings.xml
sed -i -e "s|__JAVADIR_PLACEHOLDER__|file://`pwd`/external_repo|g" maven2-settings.xml
sed -i -e "s|__MAVENREPO_DIR_PLACEHOLDER__|file://`pwd`/.m2/repository|g" maven2-settings.xml
sed -i -e "s|__MAVENDIR_PLUGIN_PLACEHOLDER__|file:///usr/share/maven2/plugins|g" maven2-settings.xml
export M2SETTINGS=$(pwd)/maven2-settings.xml
export MAVEN_REPO_LOCAL=$(pwd)/.m2/repository
export MAVEN_REPO_EXT=$(pwd)/external_repo
mkdir -p $MAVEN_REPO_LOCAL
mkdir -p $MAVEN_REPO_EXT
ln -s %{_javadir} $MAVEN_REPO_EXT/JPP
mvn-jpp -e \
        -s ${M2SETTINGS} \
        -Dmaven.repo.local=$MAVEN_REPO_LOCAL \
        -Dmaven2.jpp.default.repo=$MAVEN_REPO_EXT \
        -Dmaven2.jpp.depmap.file=%{SOURCE1} \
        -Dyear=2009 \
        -Dmaven.test.skip=true \
        install javadoc:javadoc
# Below is for manual (requires xsite), skipped
#pushd website
#mvn-jpp -e \
#        -s ${M2SETTINGS} \
#        -Dmaven.repo.local=$MAVEN_REPO_LOCAL \
#        -Dmaven2.jpp.depmap.file=%%{SOURCE1} \
#        antrun:run 
#popd
%install
rm -rf $RPM_BUILD_ROOT
# jars
install -d -m 0755 $RPM_BUILD_ROOT%{_javadir}/%{name}
install -d -m 0755 $RPM_BUILD_ROOT%{_datadir}/maven2/poms
install -m 644 pom.xml $RPM_BUILD_ROOT%{_datadir}/maven2/poms/JPP-%{name}-parent.pom
%add_to_maven_depmap org.objenesis objenesis-parent %{version} JPP %{name}-parent
install -m 644 main/target/%{name}-%{version}.jar $RPM_BUILD_ROOT%{_javadir}/%{name}-%{version}.jar
install -m 644 main/pom.xml $RPM_BUILD_ROOT%{_datadir}/maven2/poms/JPP-%{name}.pom
%add_to_maven_depmap org.objenesis objenesis %{version} JPP %{name}
install -m 644 tck/target/%{name}-tck-%{version}.jar $RPM_BUILD_ROOT%{_javadir}/%{name}-tck-%{version}.jar
install -m 644 tck/pom.xml $RPM_BUILD_ROOT%{_datadir}/maven2/poms/JPP-%{name}-tck.pom
%add_to_maven_depmap org.objenesis objenesis-tck %{version} JPP %{name}-tck
(cd $RPM_BUILD_ROOT%{_javadir} && for jar in *-%{version}*; do ln -sf ${jar} `echo $jar| sed  "s|-%{version}||g"`; done)
# javadoc
install -d -m 0755 $RPM_BUILD_ROOT%{_javadocdir}/%{name}-%{version}/main
cp -pr main/target/site/apidocs/* $RPM_BUILD_ROOT%{_javadocdir}/%{name}-%{version}/main
install -d -m 0755 $RPM_BUILD_ROOT%{_javadocdir}/%{name}-%{version}/tck
cp -pr tck/target/site/apidocs/* $RPM_BUILD_ROOT%{_javadocdir}/%{name}-%{version}/tck
ln -s %{name}-%{version} $RPM_BUILD_ROOT%{_javadocdir}/%{name} 
# manual (skipped)
#install -d -m 0755 $RPM_BUILD_ROOT%%{_docdir}/%%{name}-%%{version}
#cp -pr website/target/xsite/* $RPM_BUILD_ROOT%%{_docdir}/%%{name}-%%{version}/
#cp -p LICENSE.txt $RPM_BUILD_ROOT%%{_docdir}/%%{name}-%%{version}/
%clean
rm -rf $RPM_BUILD_ROOT
%post
%update_maven_depmap
%postun
%update_maven_depmap
%files
%defattr(-,root,root,-)
%doc LICENSE.txt
%dir %{_javadir}/%{name}
%{_javadir}/*.jar
%{_mavenpomdir}/*
%{_mavendepmapfragdir}/*
%files javadoc
%defattr(-,root,root,-)
%{_javadocdir}/%{name}-%{version}
%{_javadocdir}/%{name}
#%%files manual
#%%defattr(-,root,root,-)
#%%{_docdir}/%%{name}-%%{version}
%changelog
* Mon May 10 2010 Guido Grazioli  1.2-1
- Update to 1.2
* Thu May 06 2010 Guido Grazioli  1.0-1
- Import from JPackage 
* Fri Feb 27 2009 Ralph Apel  0:1.0-2.jpp5
- BR xpp3-minimal and fix depmap accordingly
- Disown poms and fragments dirs
* Wed Jun 18 2008 Ralph Apel  0:1.0-1.jpp5
- First release