Bug 896310 (odeint) - Review Request: odeint - A C++ library for numerically solving Ordinary Differential Equations
Summary: Review Request: odeint - A C++ library for numerically solving Ordinary Diffe...
Keywords:
Status: CLOSED ERRATA
Alias: odeint
Product: Fedora
Classification: Fedora
Component: Package Review
Version: rawhide
Hardware: All
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Rich Mattes
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks: 892847
TreeView+ depends on / blocked
 
Reported: 2013-01-17 02:03 UTC by Ankur Sinha (FranciscoD)
Modified: 2013-08-18 03:06 UTC (History)
3 users (show)

Fixed In Version: odeint-2.2-3.fc18
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2013-06-16 05:43:10 UTC
Type: ---
Embargoed:
richmattes: fedora-review+
gwync: fedora-cvs+


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Bugzilla 892850 0 unspecified CLOSED RFE: Boost 1.53.0 in F19 2021-02-22 00:41:40 UTC

Internal Links: 892850

Description Ankur Sinha (FranciscoD) 2013-01-17 02:03:13 UTC
Spec URL: http://ankursinha.fedorapeople.org/odeint/odeint.spec
SRPM URL: http://ankursinha.fedorapeople.org/odeint/odeint-2.2.20130117-1.fc19.src.rpm

Description:
Odeint is a modern C++ library for numerically solving Ordinary Differential
Equations. It is developed in a generic way using Template Metaprogramming
which leads to extraordinary high flexibility at top performance. The numerical
algorithms are implemented independently of the underlying arithmetics. This
results in an incredible applicability of the library, especially in
non-standard environments. For example, odeint supports matrix types, arbitrary
precision arithmetics and even can be easily run on CUDA GPUs - check the
Highlights to learn more.

Moreover, odeint provides a comfortable easy-to-use interface allowing for a
quick and efficient implementation of numerical simulations. Visit the
impressively clear 30 lines Lorenz example.

Odeint is a header only C++ library and the full source code is available for
download. distributed under the highly liberal Boost Software License. Hence,
odeint is free, open source and can be used in both non-commercial and
commercial applications. 

Odeint did undergo the boost review process in the end of September 2012, which
means users and other library authors evaluate the code and provide a review
report. Based on these reports, odeint was accepted and thus will become part
of the boost library collection. That means odeint will be officially shipped
with one of the next releases of boost! 


Fedora Account System Username: ankursinha

rpmlint output:
[ankur@dhcppc1  SRPMS]$ rpmlint ./odeint-2.2.20130117-1.fc18.src.rpm ../SPECS/odeint.spec /var/lib/mock/fedora-rawhide-x86_64/result/*.rpm
odeint.src: W: spelling-error %description -l en_US arithmetics -> arithmetic, arithmetic's, arithmetic s
odeint.src: W: invalid-url Source0: odeint-v2-20130117.tar.gz
../SPECS/odeint.spec: W: invalid-url Source0: odeint-v2-20130117.tar.gz
odeint.src: W: spelling-error %description -l en_US arithmetics -> arithmetic, arithmetic's, arithmetic s
odeint.src: W: invalid-url Source0: odeint-v2-20130117.tar.gz
odeint-devel.noarch: W: spelling-error %description -l en_US arithmetics -> arithmetic, arithmetic's, arithmetic s
4 packages and 1 specfiles checked; 0 errors, 6 warnings.
[ankur@dhcppc1  SRPMS]$

Comment 1 Golo Fuchert 2013-01-20 16:15:14 UTC
Hi Ankur

Looks quite clean on a first glimpse. Will have a closer look later. But is it possible that the summary of the devel sub-package
"The matrix template library - open source edition"
doesn't belong to this package?

Comment 2 Michael Schwendt 2013-01-20 19:50:41 UTC
> %global     checkout_date   20130117
> Name:           odeint
> Version:        2.2.%{checkout_date}
> Release:        1%{?dist}

It ought to apply the versioning scheme for snapshots.


> %description

Is that a copy of the complete README? *grin*

I highly recommend trimming it down to at most half the current size and truncating the src.rpm description a lot, too.


> cp -rv

Typically, we want to preserve timestamps by using cp -pā€¦


> %package devel
> Provides:   %{name} = %{version}-%{release}

> %package docs
> Requires:   %{name} = %{version}-%{release}

This extra dependency increases the metadata and isn't really useful, because it is a virtual package only. You could simply depend on the -devel package.


* As the headers in the  -devel package are pretty much useless without Boost headers, some dependencies on  the needed Boost -devel packages would be very useful.

Comment 3 Ankur Sinha (FranciscoD) 2013-02-01 01:41:57 UTC
Hello!

New spec/srpm:

http://ankursinha.fedorapeople.org/odeint/odeint.spec

http://ankursinha.fedorapeople.org/odeint/odeint-2.2-1.fc19.src.rpm

* Sun Jan 27 2013 Ankur Sinha <ankursinha AT fedoraproject DOT org> 2.2-1
- Add boost requires
- Shorten description
- Correct source url, versioning
- Initial rpmbuild


The description was two sections of the website :P. I've shortened it and rectified the other issues pointed out too.

Thanks,
Warm regards,
Ankur

Comment 4 Rich Mattes 2013-03-21 03:23:03 UTC
I'll go ahead and take this, and try to get it done this weekend.

Comment 5 Rich Mattes 2013-03-25 23:13:27 UTC
So here's the fedora-review generated review, and I've checked the things it didn't:

Package Review
==============

Key:
[x] = Pass
[!] = Fail
[-] = Not applicable
[?] = Not evaluated

Issues:
=======
- Large documentation must go in a -doc subpackage.
  Note: Documentation size is 1085440 bytes in 175 files.
  See: http://fedoraproject.org/wiki/Packaging/Guidelines#PackageDocumentation
^^^ Note: This is because you used -docs instead of -doc as the name of the subpackage.  Change the name of the -docs subpackage to -doc.

===== MUST items =====

Generic:
[x]: Package is licensed with an open-source compatible license and meets
     other legal requirements as defined in the legal section of Packaging
     Guidelines.
[x]: Package contains no bundled libraries without FPC exception.
[x]: Changelog in prescribed format.
[x]: Sources contain only permissible code or content.
[-]: Package contains desktop file if it is a GUI application.
[x]: Development files must be in a -devel package
[x]: Package requires other packages for directories it uses.
[x]: Package uses nothing in %doc for runtime.
[x]: Package is not known to require ExcludeArch.
[x]: Fully versioned dependency in subpackages, if present.
     Note: No Requires: %{name}%{?_isa} = %{version}-%{release} in odeint-
     devel , odeint-docs
[x]: Package complies to the Packaging Guidelines
[x]: License field in the package spec file matches the actual license.
[x]: License file installed when any subpackage combination is installed.
[x]: Package consistently uses macro is (instead of hard-coded directory
     names).
[x]: Package is named according to the Package Naming Guidelines.
[x]: Package does not generate any conflict.
[x]: Package obeys FHS, except libexecdir and /usr/target.
[-]: If the package is a rename of another package, proper Obsoletes and
     Provides are present.
[x]: Package must own all directories that it creates.
[x]: Package does not own files or directories owned by other packages.
[x]: Requires correct, justified where necessary.
[x]: Spec file is legible and written in American English.
[-]: Package contains systemd file(s) if in need.
[x]: All build dependencies are listed in BuildRequires, except for any that
     are listed in the exceptions section of Packaging Guidelines.
[x]: Package does not run rm -rf %{buildroot} (or $RPM_BUILD_ROOT) at the
     beginning of %install.
[x]: Each %files section contains %defattr if rpm < 4.4
[x]: Macros in Summary, %description expandable at SRPM build time.
[x]: Package does not contain duplicates in %files.
[x]: Permissions on files are set properly.
[x]: Spec file lacks Packager, Vendor, PreReq tags.
[x]: If (and only if) the source package includes the text of the license(s)
     in its own file, then that file, containing the text of the license(s)
     for the package is included in %doc.
[x]: Package use %makeinstall only when make install' ' DESTDIR=... doesn't
     work.
[x]: Package is named using only allowed ASCII characters.
[x]: Package do not use a name that already exist
[x]: Package is not relocatable.
[x]: Sources used to build the package match the upstream source, as provided
     in the spec URL.
[x]: Spec file name must match the spec package %{name}, in the format
     %{name}.spec.
[x]: File names are valid UTF-8.
[x]: Packages must not store files under /srv, /opt or /usr/local
[x]: Package successfully compiles and builds into binary rpms on at least one
     supported primary architecture.
[x]: Package installs properly.
[x]: Rpmlint is run on all rpms the build produces.
     Note: There are rpmlint messages (see attachment).

Python:
[-]: Python eggs must not download any dependencies during the build process.
[-]: A package which is used by another package via an egg interface should
     provide egg info.
[-]: Package meets the Packaging Guidelines::Python
[x]: Binary eggs must be removed in %prep

===== SHOULD items =====

Generic:
[!]: Sources can be downloaded from URI in Source: tag
     Note: Could not download Source0
[!]: If the source package does not include license text(s) as a separate file
     from upstream, the packager SHOULD query upstream to include it.
[x]: Final provides and requires are sane (see attachments).
[x]: Package functions as described.
[x]: Latest version is packaged.
[x]: Package does not include license text files separate from upstream.
[x]: SourceX tarball generation or download is documented.
     Note: Package contains tarball without URL, check comments
[-]: Description and summary sections in the package spec file contains
     translations for supported Non-English languages, if available.
[x]: Package should compile and build into binary rpms on all supported
     architectures.
[-]: %check is present and all tests pass.
[x]: Packages should try to preserve timestamps of original installed files.
[x]: Reviewer should test that the package builds in mock.
[x]: Buildroot is not present
[x]: Package has no %clean section with rm -rf %{buildroot} (or
     $RPM_BUILD_ROOT)
[x]: Dist tag is present.
[x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin.
[x]: SourceX is a working URL.
[x]: Spec use %global instead of %define.

===== EXTRA items =====

Generic:
[x]: Large data in /usr/share should live in a noarch subpackage if package is
     arched.
[x]: Rpmlint is run on all installed packages.
     Note: There are rpmlint messages (see attachment).
[x]: Spec file according to URL is the same as in SRPM.


Rpmlint
-------
Checking: odeint-devel-2.2-1.fc18.noarch.rpm
          odeint-docs-2.2-1.fc18.noarch.rpm
odeint-devel.noarch: W: spelling-error %description -l en_US arithmetics -> arithmetic, arithmetic's, arithmetic s
odeint-docs.noarch: E: devel-dependency odeint-devel
2 packages and 0 specfiles checked; 1 errors, 1 warnings.




Rpmlint (installed packages)
----------------------------
# rpmlint odeint-docs odeint-devel
odeint-docs.noarch: E: devel-dependency odeint-devel
odeint-devel.noarch: W: spelling-error %description -l en_US arithmetics -> arithmetic, arithmetic's, arithmetic s
2 packages and 0 specfiles checked; 1 errors, 1 warnings.
# echo 'rpmlint-done:'



Requires
--------
odeint-docs (rpmlib, GLIBC filtered):
    odeint-devel

odeint-devel (rpmlib, GLIBC filtered):
    boost-devel



Provides
--------
odeint-docs:
    odeint-docs

odeint-devel:
    odeint-devel



Generated by fedora-review 0.4.0 (660ce56) last change: 2013-01-29
Buildroot used: fedora-18-x86_64
Command line :/usr/bin/fedora-review -b 896310
====================================================

Some additional comments:

Since this is a template header library, the odeint-devel subpackage should also provide odeint-static = version-release:
http://fedoraproject.org/wiki/Packaging:Guidelines#Packaging_Static_Libraries
We do this for similar template header libraries like eigen3 and libkdtree++

The odeint binary package is never going to be created (since it's empty), so it's not necessary to have Requires: odeint-devel, and to have the big long description in there and also provide it for the -devel subpackage.  The main package can just use %{summary} as the description, and not directly Requires: anything.

Requiring odeint-devel in the docs is OK, since there is no base package and the docs are development docs.

So action items are:
- Rename -docs to -doc
- Get rid of unneeded stuff in main package
- Add a static Provides:
- Fix spelling error provided by rpmlint (arithmetics)
- Ask upstream about LICENSE (SHOULD, not required for review)

Comment 6 Ankur Sinha (FranciscoD) 2013-05-03 02:00:35 UTC
Hi Rich,

Updated spec/srpm:

http://ankursinha.fedorapeople.org/odeint/odeint-2.2-2.fc20.src.rpm
http://ankursinha.fedorapeople.org/odeint/odeint.spec


* Fri May 03 2013 Ankur Sinha <ankursinha AT fedoraproject DOT org> 2.2-2
- Update package as per review requirements
- Remove extra stuff from main package
- Rename docs to doc
- Correct spelling error
- Add static requires to devel
- Could not remove requires from main package since adding a dep on -devel in
  doc gives the rpm lint "devel dependency" error.


I couldn't require odeint-devel in docs. Rpmlint screams:

devel-dependency:
Your package has a dependency on a devel package but it's not a devel package
itself.


rpmlint for updated package:

[ankur@ankur-pc  SRPMS]$ rpmlint ../SPECS/odeint.spec ./odeint-2.2-2.fc19.src.rpm /var/lib/mock/fedora-rawhide-x86_64/result/*.rpm
../SPECS/odeint.spec: W: invalid-url Source0: https://github.com/headmyshoulder/odeint-v2/archive/a5aa30b6604184c0dbe76f7398c4e7facb883eb8/odeint-v2-2.2.tar.gz HTTP Error 500: Internal Server Error
odeint.src: W: invalid-url Source0: https://github.com/headmyshoulder/odeint-v2/archive/a5aa30b6604184c0dbe76f7398c4e7facb883eb8/odeint-v2-2.2.tar.gz HTTP Error 500: Internal Server Error
odeint.src: W: invalid-url Source0: https://github.com/headmyshoulder/odeint-v2/archive/a5aa30b6604184c0dbe76f7398c4e7facb883eb8/odeint-v2-2.2.tar.gz HTTP Error 500: Internal Server Error
4 packages and 1 specfiles checked; 0 errors, 3 warnings.
[ankur@ankur-pc  SRPMS]$

Thanks,
Warm regards,
Ankur

Comment 7 Rich Mattes 2013-05-04 19:54:09 UTC
I think it's ok to have the -doc package require the -devel subpackage, in spite of the rpmlint error (rpmlint is not authoratative, the packaging guidelines are.)  From reading the packaging guidelines section on documentation, they suggest that development documentation be included with the -devel package.  They also say that large documentation should be split off into a -doc subpackage, but nowhere does it say anything about not being able to split out development documentation into a separate package.

I think this is also a special case.  There is no base package, and the documentation pertains to the -devel subpackage.

Finally, the way the spec is currently written, it is impossible to install the -doc subpackage.  It depends on odeint-2.2-2, which doesn't exist:

$ sudo yum -C localinstall ../RPMS/noarch/odeint-d*
Loaded plugins: auto-update-debuginfo, fastestmirror, langpacks, presto
Examining ../RPMS/noarch/odeint-devel-2.2-2.fc18.noarch.rpm: odeint-devel-2.2-2.fc18.noarch
Marking ../RPMS/noarch/odeint-devel-2.2-2.fc18.noarch.rpm to be installed
Examining ../RPMS/noarch/odeint-doc-2.2-2.fc18.noarch.rpm: odeint-doc-2.2-2.fc18.noarch
Marking ../RPMS/noarch/odeint-doc-2.2-2.fc18.noarch.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package odeint-devel.noarch 0:2.2-2.fc18 will be installed
---> Package odeint-doc.noarch 0:2.2-2.fc18 will be installed
--> Processing Dependency: odeint = 2.2-2.fc18 for package: odeint-doc-2.2-2.fc18.noarch
--> Finished Dependency Resolution
Error: Package: odeint-doc-2.2-2.fc18.noarch (/odeint-doc-2.2-2.fc18.noarch)
           Requires: odeint = 2.2-2.fc18
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest


So go ahead and add Requires: %{name}-devel = %{version}-%{release} to the -doc subpackage

Also, the github upstream URL is broken.  For starters, it looks like the commit listed in the specfile doesn't exist in the odeint repository.  The commit for the v2.2 tag, according to https://github.com/headmyshoulder/odeint-v2/tags, is 421f879c6478ec23ea4e398fb47f8a621ff784e6.

So as per http://fedoraproject.org/wiki/Packaging:SourceURL#Github, the Source0 should read https://github.com/headmyshoulder/odeint-v2/archive/%{commit}/%{name}-%{version}-%{shortcommit}.tar.gz

and %prep should have:
%setup -qn %{name}-v2-%{commit}

That will fix the invalid Source0 messages (I tried it locally and it looks like everything worked fine.)

Comment 8 Ankur Sinha (FranciscoD) 2013-05-05 10:52:56 UTC
Updated spec/srpm:
http://ankursinha.fedorapeople.org/odeint/odeint.spec

http://ankursinha.fedorapeople.org/odeint/odeint-2.2-3.fc20.src.rpm

I've modified the source URL. rpmlint still cries, but spectool successfully gets the source tar:

[ankur@ankur-pc  SRPMS]$ rpmlint ../SPECS/odeint.spec ./odeint-2.2-3.fc19.src.rpm /var/lib/mock/fedora-rawhide-x86_64/result/*.rpm
odeint.src: W: invalid-url Source0: https://github.com/headmyshoulder/odeint-v2/archive/421f879c6478ec23ea4e398fb47f8a621ff784e6/odeint-v2-2.2.tar.gz The read operation timed out
odeint.src: W: invalid-url Source0: https://github.com/headmyshoulder/odeint-v2/archive/421f879c6478ec23ea4e398fb47f8a621ff784e6/odeint-v2-2.2.tar.gz The read operation timed out
odeint-doc.noarch: E: devel-dependency odeint-devel
4 packages and 1 specfiles checked; 1 errors, 2 warnings.
[ankur@ankur-pc  SRPMS]$ spectool -g ../SPECS/odeint.spec
Getting https://github.com/headmyshoulder/odeint-v2/archive/421f879c6478ec23ea4e398fb47f8a621ff784e6/odeint-v2-2.2.tar.gz to ./odeint-v2-2.2.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   166  100   166    0     0     99      0  0:00:01  0:00:01 --:--:--    99
100  329k  100  329k    0     0  58038      0  0:00:05  0:00:05 --:--:--  106k
[ankur@ankur-pc  SRPMS]$ ls odeint-*
odeint-2.2-3.fc19.src.rpm  odeint-v2-2.2.tar.gz
[ankur@ankur-pc  SRPMS]$

* Sun May 05 2013 Ankur Sinha <ankursinha AT fedoraproject DOT org> 2.2-3
- Make doc package require devel
- Change sourceURL


Thanks,
Warm regards,
Ankur

Comment 9 Rich Mattes 2013-05-05 14:43:53 UTC
Looks good, this package is APPROVED.

One last note: don't forget to coordinate with the Boost maintainers and request that they provide an Obsoletes: odeint-devel in f19+ before this package goes to stable, so that the f18->f19 upgrade path is not broken.

Comment 10 Ankur Sinha (FranciscoD) 2013-05-05 15:02:25 UTC
(In reply to comment #9)
> Looks good, this package is APPROVED.
> 
> One last note: don't forget to coordinate with the Boost maintainers and
> request that they provide an Obsoletes: odeint-devel in f19+ before this
> package goes to stable, so that the f18->f19 upgrade path is not broken.

They're already aware of this. I think they've already added the obsoletes but I'll double check. Thanks for the review Rich.

Comment 11 Ankur Sinha (FranciscoD) 2013-05-05 15:03:52 UTC
New Package SCM Request
=======================
Package Name: odeint
Short Description: A C++ library for numerically solving Ordinary Differential Equations
Owners: ankursinha
Branches: f17 f18

Comment 12 Gwyn Ciesla 2013-05-06 11:57:33 UTC
Git done (by process-git-requests).

Comment 13 Fedora Update System 2013-06-15 10:45:20 UTC
odeint-2.2-3.fc18 has been submitted as an update for Fedora 18.
https://admin.fedoraproject.org/updates/FEDORA-2013-10315/odeint-2.2-3.fc18

Comment 14 Fedora Update System 2013-06-16 05:43:10 UTC
odeint-2.2-3.fc18 has been pushed to the Fedora 18 stable repository.

Comment 15 Michael Schwendt 2013-08-17 19:05:30 UTC
Who will block odeint from Rawhide? It has been branched to F20, rebuilt and conflicts with boost now, since the Obsoletes are not high enough anymore.

Comment 16 Ankur Sinha (FranciscoD) 2013-08-18 03:06:37 UTC
releng will do it. Ticket filed: https://fedorahosted.org/rel-eng/ticket/5722


Note You need to log in before you can comment on or make changes to this bug.