Blob Blame History Raw
# python3 for Fedora only (not available at EPEL)
%if 0%{?fedora}
%bcond_without python3
%endif

# build conditionals for debug performance
%bcond_without test_python
%bcond_without test_java
%bcond_without javadoc
%bcond_without html

Name:           py4j
Version:        0.9.1
Release:        1%{?dist}
Summary:        Dynamically access in Python programs to arbitrary Java objects

License:        BSD
URL:            http://%{name}.sf.net
Source0:        https://github.com/bartdag/%{name}/archive/%{version}.tar.gz#/%{name}-%{version}.tar.gz
Patch0:         py4j-0.8.3-add-hamcrest-in-classpath.patch
Patch1:         py4j-Base64-java8.patch
Patch2:         py4j-Base64-java7.patch

BuildArch:      noarch

BuildRequires:  python2-devel python-setuptools

%if %{with python3}
BuildRequires:  python3-devel python3-setuptools
%endif

BuildRequires:  ant-junit maven-local
BuildRequires:  sonatype-oss-parent

# F22+ unbundles hamcrest from junit
%if 0%{?fedora} >= 22
BuildRequires:  hamcrest
%endif

BuildRequires:  python-sphinx
BuildRequires:  python-nose

Requires:       %{name}-java = %{version}-%{release}

%description
Py4J enables Python programs running in a Python interpreter
to dynamically access Java objects in a Java Virtual Machine.
Methods are called as if the Java objects resided in the Python
interpreter and Java collections can be accessed through standard
Python collection methods.
Py4J also enables Java programs to call back Python objects.
Py4J is distributed under the BSD license.


%if %{with python3} 
%package -n python3-%{name}
Summary:        Py4J enables Python3 programs to dynamically access arbitrary Java objects
Requires:       python3
Requires:       %{name}-java = %{version}-%{release}

%description -n python3-%{name}
Py4J enables Python3 programs running in a Python interpreter
to dynamically access Java objects in a Java Virtual Machine.
Methods are called as if the Java objects resided in the Python
interpreter and Java collections can be accessed through standard
Python collection methods.
Py4J also enables Java programs to call back Python objects.
Py4J is distributed under the BSD license.
This package is for usage with Python3 only.
%endif


%package java
Summary:        Py4J Java Library

%description java
%{summary}.


%if %{with javadoc}
%package javadoc
Summary:        Javadoc files for %{name}

%description javadoc
%{summary}.
%endif


%package doc
Summary:        Documentation files for %{name}

%description doc
%{summary}.


%prep
%setup -qn%{name}-%{version}

# remove unneeded stuff
rm -r current-release setup.py
find . -name \*.jar -print -delete
# build jar without version in name
sed -i -r "s|(version=).*|\1|" %{name}-java/ant.properties
sed -i "s|'.*'|''|" %{name}-python/src/%{name}/version.py

pushd %{name}-java
# set default java version to avoid some warnings
%if 0%{?fedora}
sed -i "s|1\.6|1.8|g" build.xml
%else
# java 7 is default for EPEL
sed -i "s|1\.6|1.7|g" build.xml
%endif
# unbundle junit (and hamcrest)
%if 0%{?fedora} >= 22
%patch0 -p1
%endif
sed -i "s|junit-.*\.jar|$(build-classpath junit)|g" ant.properties
# unbundle MiGBase64, https://fedorahosted.org/fpc/ticket/537
rm src/py4j/Base64.java
%if 0%{?fedora} >= 21
%patch1 -p1
%else # Fedora20 / CentOS7
%patch2 -p1
%endif
popd

# do not build tests by default (later done in check)
mkdir %{name}-java/notest
sed -i -r 's|(<src path=")(test)"/>|\1no\2"/>|' %{name}-java/build.xml
sed -i "s|%{name}\.tests||" %{name}-python/setup.py
rm %{name}-python/src/dummy_test.py

# install jar later with maven
sed -i "/data_files/d" %{name}-python/setup.py

# build separately for python3 in special subfolder
%if %{with python3}
cp -a %{name}-python python3
%endif


%build
pushd %{name}-java
ant jar 
%if %{with javadoc}
ant javadoc
%endif
popd

pushd %{name}-python
%{__python2} setup.py build
popd

%if %{with python3}
pushd python3
%{__python3} setup.py build
popd
%endif

%if %{with html}
# FIXME autodoc does not work for current tarball
sed -i "s|.sphinx.ext.autodoc.* | |" %{name}-web/conf.py
# sphinx is restricted at epel
%if 0%{?fedora}
sphinx-build %{?_smp_mflags} -a -b html -v -T %{name}-web html
%else
sphinx-build %{name}-web html
%endif
# FIXME do we need following files in release? not sure...
rm -r html/.buildinfo html/.doctrees
find html -name \*.js -print -delete
%endif


%install
pushd %{name}-python
%{__python2} setup.py install -O1 --skip-build --root %{buildroot}
popd

%if %{with python3}
pushd python3
%{__python3} setup.py install -O1 --skip-build --root %{buildroot}
popd
%endif

%mvn_artifact %{name}-java/pom.xml %{name}-java/%{name}.jar
%mvn_install -J %{name}-java/javadoc
mkdir -p %{buildroot}%{_datadir}/%{name}
ln -sf %{_javadir}/%{name}/%{name}.jar %{buildroot}%{_datadir}/%{name}


%check
%if %{with test_java}
# prevent wrong exception warnings
sed -i 's|FINEST|OFF|' %{name}-java/logging.properties
sed -i 's|<junit.*>|\0 <jvmarg value="-Djava.util.logging.config.file=%{name}-java/logging.properties" />|' \
 %{name}-java/build.xml
# remove duplicated summaries
sed -i 's|printsummary="on"||' %{name}-java/build.xml
# do build tests only, see above in build for disabled test
sed -i -r "s|no(test)|\1|" %{name}-java/build.xml
# test go!
ant -f %{name}-java/build.xml java-test
%endif

%if %{with test_python}
# important: build java tests before, otherwise will not work
sed -i -r "s|no(test)|\1|" %{name}-java/build.xml
%if %{with python3}
sed -i -r "s|(executable=\").*\"|\1%{__python3}\"|" %{name}-java/build.xml
%endif
ant -f %{name}-java/build.xml build
# prevent wrong exception warnings
sed -i "s|instance.gateway.shutdown()|if 'gateway' in dir(instance): \0|" \
 %{name}-python/src/%{name}/tests/java_gateway_test.py
# FIXME some failing tests
#sed -i -r "s|test(_doc)|ignore\1|g" %{name}-python/src/%{name}/tests/java_help_test.py
# do build tests only, see above in build for disabled test
sed -e "s|src|%{name}-python/\0|g" -e "s|'%{name}', ||" %{name}-python/setup.py >setup.py
# test go!
ant -f %{name}-java/build.xml python-test
%endif


%files
%license %{name}-python/LICENSE.txt
%doc README.rst %{name}-python/README.txt
%{python2_sitelib}/*.egg-info
%{python2_sitelib}/%{name}/

%if %{with python3}
%files -n python3-%{name}
%license %{name}-python/LICENSE.txt
%doc README.rst %{name}-python/README.txt
%{python3_sitelib}/*.egg-info
%{python3_sitelib}/%{name}/
%endif

%files java -f .mfiles
%license %{name}-java/LICENSE.txt
%doc %{name}-java/README.txt
%dir %{_datadir}/%{name}
%{_datadir}/%{name}/*.jar

%files doc
%license %{name}-web/LICENSE.txt
%doc %{name}-web/TODO
%if %{with html}
%doc html/
%endif

%if %{with javadoc}
%files javadoc -f .mfiles-javadoc
%license %{name}-java/LICENSE.txt
%endif


%changelog
* Tue Jan 12 2016 Fedora Release Monitoring <release-monitoring@fedoraproject.org> - 0.9.1-1
- Update to 0.9.1 (#1297698)

* Tue Nov 10 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.9-2
- Rebuilt for https://fedoraproject.org/wiki/Changes/python3.5

* Thu Nov 05 2015 Raphael Groner <projects.rg@smart.ms> - 0.9-1
- official upstream release

* Tue Jul 21 2015 Raphael Groner <projects.rg@smart.ms> - 0.9-0.5.pre.20150720git1cda77a
- new snapshot of upstream
- run tests with python3
- use sed with regions

* Sat May 23 2015 Raphael Groner <projects.rg@smart.ms> - 0.9-0.4.pre.20150503gitd9a950d
- unbundle MiGBase64
- improve checks
- improve sphinx html
- add build conditionals

* Wed May 06 2015 Raphael Groner <projects.rg@smart.ms> - 0.9-0.3.pre.20150503gitd9a950d
- new snapshot of upstream
- remove some obsolete files
- fix Summary and URL
- fix rpmlint warnings

* Thu Apr 30 2015 Raphael Groner <projects.rg@smart.ms> - 0.9-0.2.pre.20141101git9a8ab93
- fix pathes and maven
- add python-sphinx to generate additional documentation

* Mon Apr 27 2015 Raphael Groner <projects.rg@smart.ms> - 0.9-0.1.pre.20141101git9a8ab93
- initial