diff --git a/.gitignore b/.gitignore index 7bcab23..fbc6ecc 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /apron-0.9.10.tgz +/apron-0.9.10.tar.xz diff --git a/apron-texinfo.patch b/apron-texinfo.patch new file mode 100644 index 0000000..c6366c2 --- /dev/null +++ b/apron-texinfo.patch @@ -0,0 +1,102 @@ +--- apron/apron.texi.orig 2015-09-21 13:23:19.000000000 -0600 ++++ apron/apron.texi 2016-01-27 20:16:48.938507952 -0700 +@@ -16,7 +16,9 @@ + + @c Please read the COPYING file packaged in the distribution + ++@ifnottex + @setcontentsaftertitlepage ++@end ifnottex + + @tex + \global\parskip=0.5ex +@@ -69,6 +71,7 @@ numerical variables. + @contents + @end ifnothtml + ++@ifnottex + @menu + * Copying:: + * Introduction to APRON:: +@@ -82,6 +85,7 @@ numerical variables. + * Examples:: + * Appendices:: + @end menu ++@end ifnottex + + @c ******************************************************************* + @node Copying, Introduction to APRON, Top, Top +@@ -2472,7 +2476,8 @@ Polynomial fraction with possibly interv + @end deftypefun + + @deftypefun bool ap_texpr1_is_scalar (ap_texpr1_t* @var{e}) +-All coefficients are scalar (non-interval)@end deftypefun ++All coefficients are scalar (non-interval) ++@end deftypefun + + @c ------------------------------------------------------------------- + @node Operations on tree expressions of level 1, , Tests on tree expressions of level 1, Tree expressions of level 1 +--- apron/Makefile.orig 2016-01-25 10:41:11.000000000 -0700 ++++ apron/Makefile 2016-01-27 20:11:18.016455265 -0700 +@@ -103,15 +103,15 @@ newpolka.texi: ../newpolka/newpolka.texi + box.texi: ../box/box.texi + ln -sf $< $@ + +-apron.pdf: apron.texi rationale.texi ap_pkgrid.texi ap_ppl.texi newpolka.texi box.texi +- $(TEXI2DVI) --pdf -o $@ $< ++apron.pdf: apron.texi rationale.texi ../products/ap_pkgrid.texi ../ppl/ap_ppl.texi ../newpolka/newpolka.texi ../box/box.texi ++ $(TEXI2ANY) --pdf -o $@ $< + + apron.info: apron.texi rationale.texi ap_pkgrid.texi ap_ppl.texi newpolka.texi box.texi + $(MAKEINFO) -o $@ $< + + + html: apron.texi rationale.texi ap_pkgrid.texi ap_ppl.texi newpolka.texi box.texi +- $(TEXI2HTML) -split=section -nonumber-sections -menu -subdir=html $< ++ $(TEXI2ANY) --html --split=section --no-number-sections $< + cp -f ../octagons/oct_doc.html html + + #--------------------------------------- +--- configure.orig 2016-01-25 10:42:37.000000000 -0700 ++++ configure 2016-01-27 20:11:41.782530893 -0700 +@@ -599,8 +599,7 @@ OCAMLFIND = $ocamlfind + LATEX = latex + DVIPDF = dvipdf + MAKEINDEX = makeindex +-TEXI2DVI = texi2dvi +-TEXI2HTML = texi2html ++TEXI2ANY = texi2any + + # OSX only: + ABSOLUTE_DYLIB_INSTALL_NAMES = $absolute_dylib_install_names +--- Makefile.config.model.orig 2015-08-20 07:27:35.000000000 -0600 ++++ Makefile.config.model 2016-01-27 20:11:30.047481096 -0700 +@@ -177,7 +177,6 @@ CAMLIDL = camlidl + LATEX=latex + DVIPDF=dvipdf + MAKEINDEX=makeindex +-TEXI2DVI=texi2dvi +-TEXI2HTML=texi2html ++TEXI2ANY=texi2any + + OCAMLPACK = $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))/ocamlpack +--- mlapronidl/Makefile.orig 2016-01-25 10:41:11.000000000 -0700 ++++ mlapronidl/Makefile 2016-01-27 21:47:15.529162480 -0700 +@@ -156,7 +156,7 @@ apron_ocamldoc.mli: introduction.odoc $( + mlapronidl.pdf: mlapronidl.dvi + $(DVIPDF) mlapronidl.dvi + +-mlapronidl.dvi: mlapronidl.tex introduction.mli $(MLMODULES:%=%.mli) ../box/box.mli ../octagons/oct.mli ../newpolka/polka.mli ../ppl/ppl.mli ../products/polkaGrid.mli $(MLGMPIDL_LIB)/mpz.mli $(MLGMPIDL_LIB)/mpq.mli $(MLGMPIDL_LIB)/gmp_random.mli $(MLGMPIDL_LIB)/mpf.mli $(MLGMPIDL_LIB)/mpfr.mli $(MLGMPIDL_LIB)/mpzf.mli $(MLGMPIDL_LIB)/mpqf.mli $(MLGMPIDL_LIB)/mpfrf.mli ++mlapronidl.dvi: mlapronidl.tex introduction.mli $(MLMODULES:%=%.mli) ../box/box.mli ../octagons/oct.mli ../newpolka/polka.mli ../ppl/ppl.mli ../products/polkaGrid.mli + $(OCAMLDOC) $(OCAMLINC) -I ../newpolka -I ../ppl \ + -latextitle 1,chapter -latextitle 2,section -latextitle 3,subsection -latextitle 4,subsubsection -latextitle 5,paragraph -latextitle 6,subparagraph -noheader -notrailer -latex -sepfiles introduction.mli $(MLMODULES:%=%.mli) ../box/box.mli ../octagons/oct.mli ../newpolka/polka.mli ../ppl/ppl.mli ../products/polkaGrid.mli $(MLGMPIDL_LIB)/mpz.mli $(MLGMPIDL_LIB)/mpq.mli $(MLGMPIDL_LIB)/gmp_random.mli $(MLGMPIDL_LIB)/mpf.mli $(MLGMPIDL_LIB)/mpfr.mli $(MLGMPIDL_LIB)/mpzf.mli $(MLGMPIDL_LIB)/mpqf.mli $(MLGMPIDL_LIB)/mpfrf.mli + $(LATEX) mlapronidl +@@ -164,7 +164,7 @@ mlapronidl.dvi: mlapronidl.tex introduct + $(LATEX) mlapronidl + $(LATEX) mlapronidl + +-html: mlapronidl.odoc introduction.mli $(IDLMODULES:%=%.mli) parser.mli $(MLMODULES:%=%.mli) ../box/box.mli ../octagons/oct.mli ../newpolka/polka.mli ../ppl/ppl.mli ../products/polkaGrid.mli $(MLGMPIDL_LIB)/mpz.mli $(MLGMPIDL_LIB)/mpq.mli $(MLGMPIDL_LIB)/gmp_random.mli $(MLGMPIDL_LIB)/mpf.mli $(MLGMPIDL_LIB)/mpfr.mli $(MLGMPIDL_LIB)/mpzf.mli $(MLGMPIDL_LIB)/mpqf.mli $(MLGMPIDL_LIB)/mpfrf.mli ++html: mlapronidl.odoc introduction.mli $(IDLMODULES:%=%.mli) parser.mli $(MLMODULES:%=%.mli) ../box/box.mli ../octagons/oct.mli ../newpolka/polka.mli ../ppl/ppl.mli ../products/polkaGrid.mli + mkdir -p html + $(OCAMLDOC) $(OCAMLINC) -I ../newpolka -I ../ppl \ + -html -d html -colorize-code -intro mlapronidl.odoc introduction.mli $(IDLMODULES:%=%.mli) parser.mli ../box/box.mli ../octagons/oct.mli ../newpolka/polka.mli ../ppl/ppl.mli ../products/polkaGrid.mli $(MLGMPIDL_LIB)/mpz.mli $(MLGMPIDL_LIB)/mpq.mli $(MLGMPIDL_LIB)/gmp_random.mli $(MLGMPIDL_LIB)/mpf.mli $(MLGMPIDL_LIB)/mpfr.mli $(MLGMPIDL_LIB)/mpzf.mli $(MLGMPIDL_LIB)/mpqf.mli $(MLGMPIDL_LIB)/mpfrf.mli diff --git a/apron.spec b/apron.spec index 290f542..8c018ff 100644 --- a/apron.spec +++ b/apron.spec @@ -1,10 +1,10 @@ -# Testing note: The makefile in test is broken in version 0.9.10. After -# repairing it, compilation of ctest1.c fails due to too few arguments to -# ap_pkgrid_manager_alloc(). Try to create a %%check section again later. +%global opt %(test -x %{_bindir}/ocamlopt && echo 1 || echo 0) +%global svndate 20160125 +%global svnrev 1091 Name: apron Version: 0.9.10 -Release: 33%{?dist} +Release: 34.%{svnrev}.svn%{svndate}%{?dist} Summary: Numerical abstract domain library # The entire package is LGPLv2+ except newpolka/mf_qsort.c and ppl/*, all of @@ -12,30 +12,36 @@ Summary: Numerical abstract domain library # libap_ppl.so.* are GPLv2+, and the other libraries are all LGPLv2+. License: LGPLv2+ and GPLv2+ URL: http://apron.cri.ensmp.fr/library/ -Source0: http://apron.cri.ensmp.fr/library/%{name}-%{version}.tgz +# Upstream has given up on making releases, so we pull from subversion now. +# Create the source tarball as follows: +# svn export -r %%{svnrev} svn://scm.gforge.inria.fr/svnroot/apron/apron/trunk \ +# apron-0.9.10 +# tar cJf apron-0.9.10.tar apron-0.9.10 +Source0: %{name}-%{version}.tar.xz # This patch has not been sent upstream as it is GCC-specific. Certain # symbols are defined in both libpolkaMPQ and libpolkaRll, with different # implementations. This patch makes references to those symbols in # libap_pkgrid be weak references, since that library can be combined with # either of the 2 implementations. Patch0: %{name}-weak.patch -# Sent upstream 10 May 2012. This patch adapts to mlgmpidl 1.2. -Patch1: %{name}-mlgmpidl12.patch -# Sent upstream 14 Feb 2013. Fix the tests for GCC 4.7.1. -Patch2: %{name}-test.patch -# Sent upstream 14 Feb 2013. Adapt to PPL 1.0 + GMP 5.1.0 -Patch3: %{name}-ppl1.patch -# Alreay applied upstream. Fix a -Werror=format-security failure. -Patch4: %{name}-format-security.patch +# Adapt to texinfo 6.x +Patch1: %{name}-texinfo.patch +BuildRequires: doxygen-latex +BuildRequires: ghostscript-core +BuildRequires: javapackages-local BuildRequires: mpfr-devel BuildRequires: ppl-devel BuildRequires: ocaml BuildRequires: ocaml-camlidl-devel +BuildRequires: ocaml-findlib BuildRequires: ocaml-mlgmpidl-devel BuildRequires: ocaml-ocamldoc - -%global opt %(test -x %{_bindir}/ocamlopt && echo 1 || echo 0) +BuildRequires: perl +BuildRequires: tex(adjustbox.sty) +BuildRequires: tex(fullpage.sty) +BuildRequires: tex(tabu.sty) +BuildRequires: texinfo-tex %global sover %(cut -d. -f 1 <<< %{version}) @@ -55,6 +61,7 @@ Summary: Development files for %{name} Requires: %{name}%{?_isa} = %{version}-%{release} Requires: gmp-devel%{?_isa} Requires: mpfr-devel%{?_isa} +Provides: bundled(jquery) %description devel The %{name}-devel package contains libraries and signature files for @@ -77,123 +84,114 @@ Requires: %{name}-devel%{?_isa} = %{version}-%{release} %description -n ocaml-%{name}-devel Development files for the Ocaml interface to the APRON library. +%package -n japron +Summary: Java interface to APRON +Requires: %{name}%{?_isa} = %{version}-%{release} + +%description -n japron +Java interface to the APRON library. + %prep %setup -q %patch0 %patch1 -%patch2 -%patch3 -%patch4 -# Set the configuration values -sed -e "s|^# HAS_CPP.*|HAS_CPP = 1|" \ - -e "s|^# HAS_PPL.*|HAS_PPL = 1|" \ - -e "s|^# HAS_LONG_DOUBLE.*|HAS_LONG_DOUBLE = 1|" \ - -e "s|^APRON_PREFIX =.*|APRON_PREFIX=%{_prefix}|" \ - -e "s|^MLGMPIDL_PREFIX =.*|MLGMPIDL_PREFIX=%{_libdir}/ocaml/gmp|" \ - -e "s|^PPL_PREFIX =.*|PPL_PREFIX=%{_prefix}|" \ - -e "s|^-fPIC -O3 -DNDEBUG|$RPM_OPT_FLAGS -fsigned-char -fPIC -DNDEBUG -Wl,--as-needed|" \ - -e "s|^-fPIC -g -O0|$RPM_OPT_FLAGS -fsigned-char -fPIC -Wl,--as-needed|" \ - -e "s|-std=c99|-std=gnu99 -D_GNU_SOURCE|" \ -%if !%opt - -e "s|^HAS_OCAMLOPT.*|# HAS_OCAMLOPT = 1|" \ - -e "s|\.opt||" \ -%endif - Makefile.config.model > Makefile.config - -# Fix library paths -sed -e "s|\$(CAMLIDL_PREFIX)/lib/ocaml|%{_libdir}/ocaml|g" \ - -e "s|\$(MLGMPIDL_PREFIX)/include|\$(MLGMPIDL_PREFIX)|g" \ - -e "s|\$(MLGMPIDL_PREFIX)/lib|\$(MLGMPIDL_PREFIX)|g" \ - -e "s|-std=c99|-std=gnu99 -D_GNU_SOURCE|" \ - -i Makefile box/Makefile examples/Makefile mlapronidl/Makefile \ - newpolka/Makefile octagons/Makefile ppl/Makefile products/Makefile \ - test/Makefile - -# Remove rpaths -for f in `find . -name Makefile`; do - sed -r -e 's| ?-L\$\(APRON_PREFIX\)/lib||' \ - -e 's| ?-L\$\(GMP_PREFIX\)/lib||' \ - -e 's| ?-L\$\(MPFR_PREFIX\)/lib||' \ - -e 's| ?-L\$\(PPL_PREFIX\)/lib||' \ - -i $f -done - -# Fix the install location for libraries -if [ %{_libdir} = "/usr/lib64" ]; then - sed -e "s|\$(APRON_PREFIX)/lib|\$(APRON_PREFIX)/lib64|g" \ - -e "s|\$(PREFIX)/lib|\$(PREFIX)/lib64|g" \ - -i apron/Makefile apronxx/Makefile box/Makefile examples/Makefile \ - itv/Makefile mlapronidl/Makefile newpolka/Makefile octagons/Makefile \ - ppl/Makefile products/Makefile test/Makefile +# Fix library path for 64-bit installs +if [ "%{_libdir}" = "/usr/lib64" ]; then + sed -i 's,\${apron_prefix}/lib,&64,' configure + sed -i 's,/lib,&64,' vars.mk fi # Add sonames -sed -i -e "s|-shared|-shared -Wl,-soname=\$@.%{sover}|" apron/Makefile -sed -r -e "s|(-shared -o \\\$@ \\\$\^ \\\$\(LIBS.*\))|\1 -Wl,-soname=\$@.%{sover}|" \ - -i apronxx/Makefile box/Makefile newpolka/Makefile octagons/Makefile \ - ppl/Makefile products/Makefile - -# Fix submakes -sed -i "s|make|\$(MAKE)|g" Makefile +sed "s|(-shared -o \\\$@ \\\$\^ \\\$\(LIBS.*\))|\1 -Wl,-soname=\$@.%{sover}|" \ + -ri apronxx/Makefile +sed -i "s|_APRON_DYLIB)|& -Wl,-h,\$@.%{sover}|" apron/Makefile \ + box/Makefile newpolka/Makefile octagons/Makefile ppl/Makefile \ + products/Makefile taylor1plus/Makefile # Fix encodings iconv -f iso8859-1 -t utf-8 Changes > Changes.utf8 touch -r Changes Changes.utf8 mv -f Changes.utf8 Changes +# Preserve timestamps +sed -i 's/^\([[:blank:]]*cp[[:blank:]]\)/\1-p /' Makefile */Makefile + +# Workaround bz 1305739; remove this once that is fixed +sed -i '/latex/i\\tgrep -Frl "operator%" doc/latex | xargs sed -i "s/operator%/operator\\\\\\\\%/g"' apronxx/Makefile + %build +# This is NOT an autoconf-generated script. Do not use %%configure +CPPFLAGS="-D_GNU_SOURCE" \ +CFLAGS="%{optflags} -fsigned-char" \ +CXXFLAGS="%{optflags} -fsigned-char" \ +LDFLAGS="$RPM_LD_FLAGS" \ +java_home="%{_jvmdir}/java" \ +./configure -prefix %{_prefix} -java-prefix %{_jvmdir}/java + +# Put back a flag that the configure script strips out +sed -i 's/-Wp,-D_FORTIFY_SOURCE=2/-Werror=format-security &/' Makefile.config + +# Building with JNI requires two include paths; configure only gives us one +sed -i 's,^JNIINC.*,& -I%{_jvmdir}/java/include/linux,' Makefile.config + # FIXME: Cannot use %%{?_smp_mflags} due to missing Makefile dependencies make +make doc %install -mkdir -p $RPM_BUILD_ROOT%{_prefix} -make install APRON_PREFIX=$RPM_BUILD_ROOT%{_prefix} +# Install the ocaml bits into the buildroot +sed -i 's, install ,&-destdir %{buildroot}%{_libdir}/ocaml -ldconf ignore ,' \ + Makefile + +# Install +mkdir -p %{buildroot}%{_libdir}/ocaml +mkdir -p %{buildroot}%{_jnidir} +make install INSTALL="install -p" APRON_PREFIX=%{buildroot}%{_prefix} \ + JAVA_PREFIX=%{buildroot}%{_jnidir} + +# Move the JNI shared objects +mv %{buildroot}%{_libdir}/libj*.so %{buildroot}%{_jnidir} # We don't really want the test binaries -rm -fr $RPM_BUILD_ROOT%{_bindir} +rm -fr %{buildroot}%{_bindir} # Move the header files into a subdirectory -mkdir $RPM_BUILD_ROOT%{_includedir}/%{name} -mv $RPM_BUILD_ROOT%{_includedir}/*.h $RPM_BUILD_ROOT%{_includedir}/apronxx \ - $RPM_BUILD_ROOT%{_includedir}/oct $RPM_BUILD_ROOT%{_includedir}/%{name} - -# Most files in _libdir are ocaml files, and so are in the wrong place. -mkdir -p $RPM_BUILD_ROOT%{_libdir}/ocaml/%{name} -mv $RPM_BUILD_ROOT%{_libdir}/*.{a,cma,cmi,idl,ml,mli} \ -%if %opt - $RPM_BUILD_ROOT%{_libdir}/*.{cmx,cmxa} \ -%endif - $RPM_BUILD_ROOT%{_libdir}/*_caml.so \ - $RPM_BUILD_ROOT%{_libdir}/*_caml_debug.so \ - $RPM_BUILD_ROOT%{_libdir}/ocaml/%{name} +mkdir %{buildroot}%{_includedir}/%{name} +mv %{buildroot}%{_includedir}/*.h %{buildroot}%{_includedir}/apronxx \ + %{buildroot}%{_includedir}/oct %{buildroot}%{_includedir}/%{name} # Remove extraneous executable bits -chmod a-x $RPM_BUILD_ROOT%{_libdir}/ocaml/%{name}/*.{a,cma,cmi,idl,ml,mli} -%if %opt -chmod a-x $RPM_BUILD_ROOT%{_libdir}/ocaml/%{name}/*.cmx* -%endif -find $RPM_BUILD_ROOT%{_includedir} \( -name \*.h -o -name \*.hh \) \ - -perm /0111 | xargs chmod a-x +find %{buildroot}%{_includedir} \( -name \*.h -o -name \*.hh \) \ + -perm /0111 -execdir chmod a-x {} + -# Make duplicate files be symbolic links instead of copies -for f in ap_ppl apron boxD boxMPFR boxMPQ octD octMPQ polkaGrid polkaMPQ \ - polkaRll; do - rm -f $RPM_BUILD_ROOT%{_libdir}/ocaml/%{name}/dll${f}_caml.so - ln -s lib${f}_caml.so \ - $RPM_BUILD_ROOT%{_libdir}/ocaml/%{name}/dll${f}_caml.so - rm -f $RPM_BUILD_ROOT%{_libdir}/ocaml/%{name}/dll${f}_caml_debug.so - ln -s lib${f}_caml_debug.so \ - $RPM_BUILD_ROOT%{_libdir}/ocaml/%{name}/dll${f}_caml_debug.so -done +# Erase the static libraries +rm -f %{buildroot}%{_libdir}/*.a + +# Erase the debug libraries +rm -f %{buildroot}%{_libdir}/*_debug* +rm -f %{buildroot}%{_libdir}/ocaml/apron/*_debug* # Fix up the shared library names -cd $RPM_BUILD_ROOT%{_libdir} +pushd %{buildroot}%{_libdir} for f in lib*.so; do mv $f $f.%{version} ln -s $f.%{sover} $f ln -s $f.%{version} $f.%{sover} done +popd + +# Don't have two sets of documentation both named html +mkdir doc +mv apron/html doc/apron +mv apronxx/doc/html doc/apronxx + +%check +export LD_LIBRARY_PATH=%{buildroot}%{_libdir}:%{buildroot}%{_libdir}/ocaml/apron +make -C test APRON_INCLUDE=%{buildroot}%{_includedir}/%{name} \ + APRON_LIB=%{buildroot}%{_libdir}/ocaml/%{name} \ + CAMLIDL_PREFIX=%{buildroot}%{_libdir} +test/ctest1 %post -p /sbin/ldconfig @@ -203,40 +201,46 @@ done %doc AUTHORS Changes README apron/apron.pdf %license COPYING %{_libdir}/*.so.* -%exclude %{_libdir}/*_debug.so* %files devel -%doc apron/html/* +%doc doc/apron doc/apronxx %{_libdir}/*.so -%exclude %{_libdir}/*_debug.so -%{_includedir}/%{name} -%exclude %{_includedir}/%{name}/apron_caml.h +%{_includedir}/%{name}/ %files -n ocaml-%{name} %doc mlapronidl/mlapronidl.pdf -%{_libdir}/ocaml/%{name} -%exclude %{_libdir}/ocaml/%{name}/*_debug.so -%if %opt -%exclude %{_libdir}/ocaml/%{name}/*.a -%exclude %{_libdir}/ocaml/%{name}/*.cmxa -%exclude %{_libdir}/ocaml/%{name}/*.cmx -%endif -%exclude %{_libdir}/ocaml/%{name}/*.ml -%exclude %{_libdir}/ocaml/%{name}/*.mli +%dir %{_libdir}/ocaml/%{name}/ +%{_libdir}/ocaml/%{name}/META +%{_libdir}/ocaml/%{name}/*.cma +%{_libdir}/ocaml/%{name}/*.cmi +%{_libdir}/ocaml/%{name}/*.cmxs +%{_libdir}/ocaml/%{name}/*.so %files -n ocaml-%{name}-devel %doc mlapronidl/html/* -%{_includedir}/%{name}/apron_caml.h %if %opt %{_libdir}/ocaml/%{name}/*.a -%exclude %{_libdir}/ocaml/%{name}/*_debug.a %{_libdir}/ocaml/%{name}/*.cmxa %{_libdir}/ocaml/%{name}/*.cmx %endif -%{_libdir}/ocaml/%{name}/*.ml +%{_libdir}/ocaml/%{name}/*.h +%{_libdir}/ocaml/%{name}/*.idl %{_libdir}/ocaml/%{name}/*.mli +%files -n japron +%doc japron/README +%license japron/COPYING +%{_jnidir}/*.jar +%{_jnidir}/*.so + %changelog +* Fri Feb 12 2016 Jerry James - 0.9.10-34.1091.svn20160125 +- Update to latest subversion commit +- Add japron subpackage with the Java interface +- Add %%check script +- Drop upstreamed -format-security, -mlgmpidl12, -test, and -ppl1 patches +- Add -texinfo patch to fix documentation build failure + * Wed Feb 03 2016 Fedora Release Engineering - 0.9.10-33 - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild diff --git a/sources b/sources index 1aa8a00..8f0695d 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -98e93e1ccc3694d28384f5a65a935058 apron-0.9.10.tgz +be62fe05bbb4b4179351eef2cc339e19 apron-0.9.10.tar.xz