Bug 1089500

Summary: Review Request: openlibm - High quality system independent, open source libm
Product: [Fedora] Fedora Reporter: Milan Bouchet-Valat <nalimilan>
Component: Package ReviewAssignee: Orion Poplawski <orion>
Status: CLOSED ERRATA QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: medium    
Version: rawhideCC: orion, package-review
Target Milestone: ---Flags: orion: fedora-review+
gwync: fedora-cvs+
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: openlibm-0.3-6.fc20 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2014-05-30 23:50:48 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1040517, 1062901    

Description Milan Bouchet-Valat 2014-04-19 22:07:52 UTC
Spec URL: http://nalimilan.perso.neuf.fr/transfert/openlibm.spec
SRPM URL: http://nalimilan.perso.neuf.fr/transfert/openlibm-0.3-1.fc20.src.rpm
Description:
OpenLIBM is an effort to have a high quality standalone LIBM library.
It is meant to be used standalone in applications and programming language
implementations. The OpenLIBM code derives from the FreeBSD msun implementation,
which in turn derives from FDLIBM 5.3. As a result, it has a number of fixes
and updates that have accumulated over the years in msun, and also optimized
assembly versions of many functions.

openlibm is the last dependency I need to package the Julia language (bug 1040517). openlibm allows Julia to use the same math library on all platforms, and thus to avoid the many traps and inconsistencies that various libm implementations introduce.

Fedora Account System Username: milanbv

Koji build is here: http://koji.fedoraproject.org/koji/taskinfo?taskID=6757732

$ rpmlint SPECS/openlibm.spec RPMS/x86_64/openlibm-*
openlibm.x86_64: W: spelling-error Summary(en_US) libm -> limb, lib, lib m
openlibm.x86_64: W: spelling-error %description -l en_US msun -> mun, sun, m sun
openlibm-devel.x86_64: W: spelling-error Summary(en_US) libm -> limb, lib, lib m
openlibm-devel.x86_64: W: no-documentation
openlibm-devel.x86_64: W: dangling-relative-symlink /usr/lib64/libopenlibm.so.0 libopenlibm.so.0.3.0
3 packages and 1 specfiles checked; 0 errors, 5 warnings.

I don't understand the warning about the dangling symlink, but the link looks OK.

openlibm currently does not build properly on architectures other than x86, but the code is present, which is why I've left a block to allow building it in the future.

Comment 1 Orion Poplawski 2014-04-20 03:34:06 UTC
(In reply to Milan Bouchet-Valat from comment #0)
> openlibm-devel.x86_64: W: dangling-relative-symlink
> /usr/lib64/libopenlibm.so.0 libopenlibm.so.0.3.0
> 3 packages and 1 specfiles checked; 0 errors, 5 warnings.
> 
> I don't understand the warning about the dangling symlink, but the link
> looks OK.

Only the .so should be in -devel, .so.0 needs to be in the main package.

Comment 2 Orion Poplawski 2014-04-20 03:36:18 UTC
So, what's up with arm support?  There's a condition in there for it, but you exclusivearch the package?  What about ppc, etc.?

Comment 3 Milan Bouchet-Valat 2014-04-20 12:29:47 UTC
Ooops, I've updated the package to put the .so.0 in the base package. Indeed it fixes the warning.

Regarding non x86 archs, as I said they are currently not building properly (https://github.com/JuliaLang/openlibm/issues/18). I put the arm condition because I tested it and I think it doesn't hurt, but currently we cannot enable these architectures. Do you think I should remove the arm code? I've added a comment to the .spec file anyway.

The new SRPM is at http://nalimilan.perso.neuf.fr/transfert/openlibm-0.3-2.fc20.src.rpm

Comment 4 Michael Schwendt 2014-04-21 19:56:47 UTC
The Group tag for runtime library base packages has been "System Environment/Libraries" for many years.

Comment 5 Milan Bouchet-Valat 2014-04-21 21:29:28 UTC
Ah, indeed. Since these are now optional, the docs say nothing about their meaning, and I had to look on openSUSE's website to find a description. Fixed at http://nalimilan.perso.neuf.fr/transfert/openlibm-0.3-3.fc20.src.rpm

Comment 6 Milan Bouchet-Valat 2014-04-28 21:47:03 UTC
Any more comments on the new .spec file?

Comment 7 Orion Poplawski 2014-04-29 16:24:40 UTC
Package Review
==============

Legend:
[x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated
[ ] = Manual review needed

- License:  Add ISC to the list:

openlibm-0.3/src/s_cpowf.c: ISC
openlibm-0.3/src/s_cpowl.c: ISC
openlibm-0.3/src/s_cpow.c: ISC

- %check - run the test programs

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

C/C++:
[x]: Package does not contain kernel modules.
[x]: Package contains no static executables.
[x]: Header files in -devel subpackage, if present.
[x]: ldconfig called in %post and %postun if required.
[x]: Package does not contain any libtool archives (.la)
[x]: Rpath absent or only used for internal libs.
[x]: Development (unversioned) .so files in -devel subpackage, if present.

Generic:
[x]: Package successfully compiles and builds into binary rpms on at least one
     supported primary architecture.
     Note: Using prebuilt packages
[x]: Package is licensed with an open-source compatible license and meets
     other legal requirements as defined in the legal section of Packaging
     Guidelines.
[!]: License field in the package spec file matches the actual license.
     Note: Checking patched sources after %prep for licenses. Licenses found:
     "ISC", "BSD (2 clause)", "LGPL (v2.1 or later) (with incorrect FSF
     address)", "Unknown or generated", "BSD (3 clause)". 170 files have
     unknown license. Detailed output of licensecheck in
     /export/home/orion/redhat/openlibm-0.3/review-openlibm/licensecheck.txt
[x]: License file installed when any subpackage combination is installed.
[-]: If the package is under multiple licenses, the licensing breakdown must
     be documented in the spec.
[x]: %build honors applicable compiler flags or justifies otherwise.
[x]: All build dependencies are listed in BuildRequires, except for any that
     are listed in the exceptions section of Packaging Guidelines.
     Note: Using prebuilt rpms.
[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 uses nothing in %doc for runtime.
[x]: Package consistently uses macros (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]: Requires correct, justified where necessary.
[x]: Spec file is legible and written in American English.
[-]: Package contains systemd file(s) if in need.
[x]: Useful -debuginfo package or justification otherwise.
[!]: Package is not known to require an ExcludeArch tag.
[-]: Large documentation must go in a -doc subpackage. Large could be size
     (~1MB) or number of files.
     Note: Documentation size is 10240 bytes in 2 files.
[x]: Package complies to the Packaging Guidelines
[x]: Package installs properly.
[x]: Rpmlint is run on all rpms the build produces.
     Note: There are rpmlint messages (see attachment).
[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 requires other packages for directories it uses.
[x]: Package must own all directories that it creates.
[x]: Package does not own files or directories owned by other packages.
[x]: Package uses either %{buildroot} or $RPM_BUILD_ROOT
[x]: Package does not run rm -rf %{buildroot} (or $RPM_BUILD_ROOT) at the
     beginning of %install.
[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]: 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

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

Generic:
[x]: Reviewer should test that the package builds in mock.
[x]: 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]: Scriptlets must be sane, if used.
[-]: 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.
[ ]: Packages should try to preserve timestamps of original installed files.
[x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file
[x]: Sources can be downloaded from URI in Source: tag
[x]: Buildroot is not present
[x]: Package has no %clean section with rm -rf %{buildroot} (or
     $RPM_BUILD_ROOT)
[x]: Dist tag is present (not strictly required in GL).
[x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin.
[x]: Fully versioned dependency in subpackages if applicable.
[x]: Uses parallel make %{?_smp_mflags} macro.
[x]: SourceX is a working URL.
[x]: Spec use %global instead of %define unless justified.

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

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


Rpmlint
-------
Checking: openlibm-0.3-3.fc20.x86_64.rpm
          openlibm-devel-0.3-3.fc20.x86_64.rpm
          openlibm-0.3-3.fc20.src.rpm
openlibm.x86_64: W: spelling-error Summary(en_US) libm -> limb, lib, lib m
openlibm.x86_64: W: spelling-error %description -l en_US msun -> mun, sun, m sun
openlibm-devel.x86_64: W: spelling-error Summary(en_US) libm -> limb, lib, lib m
openlibm-devel.x86_64: W: no-documentation
openlibm.src: W: spelling-error Summary(en_US) libm -> limb, lib, lib m
openlibm.src: W: spelling-error %description -l en_US msun -> mun, sun, m sun
3 packages and 0 specfiles checked; 0 errors, 6 warnings.




Rpmlint (installed packages)
----------------------------
# rpmlint openlibm openlibm-devel
(none): E: no installed packages by name openlibm
(none): E: no installed packages by name openlibm-devel
0 packages and 0 specfiles checked; 0 errors, 0 warnings.
# echo 'rpmlint-done:'



Requires
--------
openlibm (rpmlib, GLIBC filtered):
    /sbin/ldconfig
    libc.so.6()(64bit)
    rtld(GNU_HASH)

openlibm-devel (rpmlib, GLIBC filtered):
    libopenlibm.so.0.3.0()(64bit)
    openlibm(x86-64)



Provides
--------
openlibm:
    libopenlibm.so.0.3.0()(64bit)
    openlibm
    openlibm(x86-64)

openlibm-devel:
    openlibm-devel
    openlibm-devel(x86-64)



Source checksums
----------------
https://github.com/JuliaLang/openlibm/archive/v0.3.tar.gz#/openlibm-0.3.tar.gz :
  CHECKSUM(SHA256) this package     : eece0f928c93d70ac350f9c9632a1eab5d6e0a7fbdb31b6b75113c40fb9b810c
  CHECKSUM(SHA256) upstream package : eece0f928c93d70ac350f9c9632a1eab5d6e0a7fbdb31b6b75113c40fb9b810c


Generated by fedora-review 0.5.1 (bb9bf27) last change: 2013-12-13
Command line :/usr/bin/fedora-review -n openlibm --no-build -p
Buildroot used: fedora-20-x86_64
Active plugins: Generic, Shell-api, C/C++
Disabled plugins: Java, Python, fonts, SugarActivity, Ocaml, Perl, Haskell, R, PHP, Ruby
Disabled flags: EXARCH, EPEL5, BATCH, DISTTAG

Comment 8 Milan Bouchet-Valat 2014-04-29 21:11:30 UTC
Thanks for the new review! Unfortunately, I'm still unable to run fedora-review (I guess I should file a bug).

Good catch about the ISC license, this tool is very smart. I've filed a pull request to improve the documentation upstream, and uploaded a new version of the package with this license added.

About the tests not being run, this is because currently they fail due to a very small difference to the expected result. I've filed a bug, but I had forgotten to add the reference to the spec file. This is now done. I'm relatively confident without the tests since Julia does its own testing using openlibm.

Spec URL: http://nalimilan.perso.neuf.fr/transfert/openlibm.spec
SRPM URL: http://nalimilan.perso.neuf.fr/transfert/openlibm-0.3-4.fc20.src.rpm

Comment 9 Orion Poplawski 2014-04-29 21:46:27 UTC
Please add the %check section with the test runs commented out if needed so that others may try it out.  FWIW - the tests run fine on my machine (F20 x86_64).

Comment 10 Milan Bouchet-Valat 2014-05-01 21:34:32 UTC
Interesting. The float test fails on my 64-bit machine, but also on Koji. But I can actually enable the double test, which is way better than nothing.


Spec URL: http://nalimilan.perso.neuf.fr/transfert/openlibm.spec
SRPM URL: http://nalimilan.perso.neuf.fr/transfert/openlibm-0.3-5.fc20.src.rpm

Comment 11 Orion Poplawski 2014-05-03 03:11:42 UTC
I'm seeing the double test fail on i386:

+ ./test-double
testing double (without inline functions)
FP-Stack wrong after test exp (-0) == 1 (2, should be 0)
Test suite completed:
  1148 test cases plus 962 tests for exception flags executed.
  1 errors occurred.
RPM build errors:

Comment 12 Milan Bouchet-Valat 2014-05-04 10:35:53 UTC
Ah, I see this too using Koji. Filed here: https://github.com/JuliaLang/openlibm/issues/55

Comment 13 Milan Bouchet-Valat 2014-05-04 10:45:20 UTC
New version with tests disabled for now:

Spec URL: http://nalimilan.perso.neuf.fr/transfert/openlibm.spec
SRPM URL: http://nalimilan.perso.neuf.fr/transfert/openlibm-0.3-6.fc20.src.rpm

Comment 14 Milan Bouchet-Valat 2014-05-18 20:52:43 UTC
I guess we're going to have to package openlibm without tests enabled for now. I'll uncomment the relevant lines when upstream has had a chance to fix it.

Comment 15 Orion Poplawski 2014-05-19 18:24:53 UTC
Works for me.  APPROVED.

Comment 16 Milan Bouchet-Valat 2014-05-19 19:42:14 UTC
New Package SCM Request
=======================
Package Name: openlibm
Short Description: High quality system independent, open source libm
Upstream URL: https://github.com/JuliaLang/openlibm/
Owners: nalimilan
Branches: f19 f20
InitialCC:

Comment 17 Gwyn Ciesla 2014-05-19 19:47:38 UTC
Git done (by process-git-requests).

Comment 18 Fedora Update System 2014-05-19 21:35:10 UTC
openlibm-0.3-6.fc19 has been submitted as an update for Fedora 19.
https://admin.fedoraproject.org/updates/openlibm-0.3-6.fc19

Comment 19 Fedora Update System 2014-05-19 21:35:55 UTC
openlibm-0.3-6.fc20 has been submitted as an update for Fedora 20.
https://admin.fedoraproject.org/updates/openlibm-0.3-6.fc20

Comment 20 Milan Bouchet-Valat 2014-05-19 21:36:39 UTC
Cool, only one Julia dependency left (and a few LLVM issues to tackle...)! ;-)

Comment 21 Fedora Update System 2014-05-21 23:20:20 UTC
openlibm-0.3-6.fc19 has been pushed to the Fedora 19 testing repository.

Comment 22 Fedora Update System 2014-05-30 23:50:48 UTC
openlibm-0.3-6.fc19 has been pushed to the Fedora 19 stable repository.

Comment 23 Fedora Update System 2014-05-30 23:51:24 UTC
openlibm-0.3-6.fc20 has been pushed to the Fedora 20 stable repository.