Bug 2277528 - Review Request: libsurvive - Open Source Lighthouse Tracking System
Summary: Review Request: libsurvive - Open Source Lighthouse Tracking System
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Fedora
Classification: Fedora
Component: Package Review
Version: rawhide
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
Assignee: Jonathan Steffan
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2024-04-27 18:36 UTC by Davide Cavalca
Modified: 2024-10-23 01:33 UTC (History)
2 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2024-10-13 16:56:50 UTC
Type: ---
Embargoed:
jonathansteffan: fedora-review+


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Gitlab fedora/legal fedora-license-data issues 511 0 None opened License Review Request: mpfit 2024-05-05 22:48:44 UTC
Gitlab fedora/legal fedora-license-data issues 512 0 None opened License Review: crc32 2024-05-05 23:18:00 UTC
Gitlab fedora/legal fedora-license-data issues 513 0 None opened License Review: hidapi 2024-05-05 23:25:58 UTC

Description Davide Cavalca 2024-04-27 18:36:50 UTC
Spec URL: https://dcavalca.fedorapeople.org/review/libsurvive/libsurvive.spec
SRPM URL: https://dcavalca.fedorapeople.org/review/libsurvive/libsurvive-1.01^20240123git037189e-1.fc41.src.rpm

Description:
Libsurvive is a set of tools and libraries that enable 6 dof tracking on
Lighthouse and Vive based systems that is completely Open Source and can run on
any device. It currently supports both SteamVR 1.0 and SteamVR 2.0 generation
of devices and should support any tracked object commercially available.

Fedora Account System Username: dcavalca

Comment 1 Davide Cavalca 2024-04-27 18:36:53 UTC
This package built on koji:  https://koji.fedoraproject.org/koji/taskinfo?taskID=116959068

Comment 2 Jonathan Steffan 2024-05-05 15:12:10 UTC
Package Review
==============

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



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

C/C++:
[-]: Provides: bundled(gnulib) in place as required.
     Note: Sources not installed
[x]: Package does not contain kernel modules.
[x]: Development (unversioned) .so files in -devel subpackage, if present.
     Note: Unversioned so-files in private %_libdir subdirectory (see
     attachment). Verify they are not in ld path.
[x]: If your application is a C or C++ application you must list a
     BuildRequires against gcc, gcc-c++ or clang.
[x]: Header files in -devel subpackage, if present.
[x]: ldconfig not called in %post and %postun for Fedora 28 and later.
[x]: Package does not contain any libtool archives (.la)
[x]: Package contains no static executables.
[x]: Rpath absent or only used for internal libs.

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.
[!]: License field in the package spec file matches the actual license.
     Note: Checking patched sources after %prep for licenses. Licenses
     found: "Unknown or generated", "MIT License", "GNU General Public
     License, Version 3", "zlib License", "Apache License 1.1", "MIT
     License and/or The Unlicense", "BSD 2-Clause License". 528 files have
     unknown license. Detailed output of licensecheck in
     /home/jon/Reviews/libsurvive/licensecheck.txt
[!]: License file installed when any subpackage combination is installed.
[!]: Package requires other packages for directories it uses.
     Note: No known owner of /usr/lib/udev/rules.d, /usr/lib/udev,
     /usr/lib64/pkgconfig
[x]: %build honors applicable compiler flags or justifies otherwise.
[!]: 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.
[x]: Large documentation must go in a -doc subpackage. Large could be size
     (~1MB) or number of files.
     Note: Documentation size is 33413 bytes in 3 files.
[x]: Package complies to the Packaging Guidelines
[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).
[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 %license.
[x]: The License field must be a valid SPDX expression.
[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]: Dist tag is present.
[x]: Package does not contain duplicates in %files.
[x]: Permissions on files are set properly.
[x]: Package must not depend on deprecated() packages.
[x]: Package use %makeinstall only when make install DESTDIR=... doesn't
     work.
[x]: Package is named using only allowed ASCII characters.
[x]: Package does not use a name that already exists.
[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]: 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).
[?]: Package functions as described.
[x]: Latest version is packaged.
[x]: Package does not include license text files separate from upstream.
[!]: Patches link to upstream bugs/comments/lists or are otherwise
     justified.
[-]: Sources are verified with gpgverify first in %prep if upstream
     publishes signatures.
     Note: gpgverify is not used.
[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]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin.
[x]: Fully versioned dependency in subpackages if applicable.
[x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file
[x]: The placement of pkgconfig(.pc) files are correct.
[x]: Sources can be downloaded from URI in Source: tag
[x]: SourceX is a working URL.
[x]: Spec use %global instead of %define unless justified.

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

Generic:
[x]: Rpmlint is run on debuginfo package(s).
     Note: No rpmlint messages.
[x]: Rpmlint is run on all installed packages.
     Note: There are rpmlint messages (see attachment).
[x]: Large data in /usr/share should live in a noarch subpackage if package
     is arched.


Rpmlint
-------
Checking: libsurvive-1.01^20240123git037189e-1.fc41.x86_64.rpm
          libsurvive-devel-1.01^20240123git037189e-1.fc41.x86_64.rpm
          libsurvive-debuginfo-1.01^20240123git037189e-1.fc41.x86_64.rpm
          libsurvive-debugsource-1.01^20240123git037189e-1.fc41.x86_64.rpm
          libsurvive-1.01^20240123git037189e-1.fc41.src.rpm
=============================================== rpmlint session starts ===============================================
rpmlint: 2.5.0
configuration:
    /usr/lib/python3.12/site-packages/rpmlint/configdefaults.toml
    /etc/xdg/rpmlint/fedora-legacy-licenses.toml
    /etc/xdg/rpmlint/fedora-spdx-licenses.toml
    /etc/xdg/rpmlint/fedora.toml
    /etc/xdg/rpmlint/scoring.toml
    /etc/xdg/rpmlint/users-groups.toml
    /etc/xdg/rpmlint/warn-on-functions.toml
rpmlintrc: [PosixPath('/tmp/tmp6rjm7zo5')]
checks: 32, packages: 5

libsurvive.src: E: spelling-error ('dof', '%description -l en_US dof -> dog, do, of')
libsurvive.x86_64: E: spelling-error ('dof', '%description -l en_US dof -> dog, do, of')
libsurvive.x86_64: W: no-manual-page-for-binary sensors-readout
libsurvive.x86_64: W: no-manual-page-for-binary survive-buttons
libsurvive.x86_64: W: no-manual-page-for-binary survive-cli
libsurvive.x86_64: W: no-manual-page-for-binary survive-solver
libsurvive.x86_64: W: no-manual-page-for-binary survive-websocketd
libsurvive-devel.x86_64: W: no-manual-page-for-binary api_example
========= 5 packages and 0 specfiles checked; 2 errors, 6 warnings, 76 filtered, 2 badness; has taken 3.0 s ==========




Rpmlint (debuginfo)
-------------------
Checking: libsurvive-devel-debuginfo-1.01^20240123git037189e-1.fc41.x86_64.rpm
          libsurvive-debuginfo-1.01^20240123git037189e-1.fc41.x86_64.rpm
=============================================== rpmlint session starts ===============================================
rpmlint: 2.5.0
configuration:
    /usr/lib/python3.12/site-packages/rpmlint/configdefaults.toml
    /etc/xdg/rpmlint/fedora-legacy-licenses.toml
    /etc/xdg/rpmlint/fedora-spdx-licenses.toml
    /etc/xdg/rpmlint/fedora.toml
    /etc/xdg/rpmlint/scoring.toml
    /etc/xdg/rpmlint/users-groups.toml
    /etc/xdg/rpmlint/warn-on-functions.toml
rpmlintrc: [PosixPath('/tmp/tmpq5ka_kgn')]
checks: 32, packages: 2

========= 2 packages and 0 specfiles checked; 0 errors, 0 warnings, 46 filtered, 0 badness; has taken 0.8 s ==========





Rpmlint (installed packages)
----------------------------
============================ rpmlint session starts ============================
rpmlint: 2.5.0
configuration:
    /usr/lib/python3.12/site-packages/rpmlint/configdefaults.toml
    /etc/xdg/rpmlint/fedora-legacy-licenses.toml
    /etc/xdg/rpmlint/fedora-spdx-licenses.toml
    /etc/xdg/rpmlint/fedora.toml
    /etc/xdg/rpmlint/scoring.toml
    /etc/xdg/rpmlint/users-groups.toml
    /etc/xdg/rpmlint/warn-on-functions.toml
checks: 32, packages: 5

libsurvive.x86_64: E: spelling-error ('dof', '%description -l en_US dof -> dog, do, of')
libsurvive.x86_64: W: no-manual-page-for-binary sensors-readout
libsurvive.x86_64: W: no-manual-page-for-binary survive-buttons
libsurvive.x86_64: W: no-manual-page-for-binary survive-cli
libsurvive.x86_64: W: no-manual-page-for-binary survive-solver
libsurvive.x86_64: W: no-manual-page-for-binary survive-websocketd
libsurvive-devel.x86_64: W: no-manual-page-for-binary api_example
 5 packages and 0 specfiles checked; 1 errors, 6 warnings, 93 filtered, 1 badness; has taken 4.0 s 



Unversioned so-files
--------------------
libsurvive: /usr/lib64/libsurvive/plugins/disambiguator_statebased.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_dummy.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_global_scene_solver.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_playback.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_simulator.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_udp.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_usbmon.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_vive.so
libsurvive: /usr/lib64/libsurvive/plugins/poser_barycentric_svd.so
libsurvive: /usr/lib64/libsurvive/plugins/poser_dummy.so
libsurvive: /usr/lib64/libsurvive/plugins/poser_kalman_only.so
libsurvive: /usr/lib64/libsurvive/plugins/poser_mpfit.so

Source checksums
----------------
https://github.com/jdavidberger/libsurvive-extras-data/archive/3476af66c488b029e04c74fbb1b57f3b7acb9eb7/libsurvive-extras-data-3476af66c488b029e04c74fbb1b57f3b7acb9eb7.tar.gz :
  CHECKSUM(SHA256) this package     : bb45aef8ae57dafd3fc84f89374af7eb0dc9cb15b1e2c24692e78c03a567fc67
  CHECKSUM(SHA256) upstream package : bb45aef8ae57dafd3fc84f89374af7eb0dc9cb15b1e2c24692e78c03a567fc67
https://github.com/cntools/cnmatrix/archive/5936c62511305227fbd59b2d5a43aaf89ec3a0b6/cnmatrix-5936c62511305227fbd59b2d5a43aaf89ec3a0b6.tar.gz :
  CHECKSUM(SHA256) this package     : e4f1c776c5fbf04374727b6b1c6c32f7226db35fde480468f857df5b6d543f81
  CHECKSUM(SHA256) upstream package : e4f1c776c5fbf04374727b6b1c6c32f7226db35fde480468f857df5b6d543f81
https://github.com/cntools/cnkalman/archive/6b350314225e28d2e4e8daad7d2971d22386f76f/cnkalman-6b350314225e28d2e4e8daad7d2971d22386f76f.tar.gz :
  CHECKSUM(SHA256) this package     : e7082c497fb9c76b79f781b3b15147c12a122026a1f3f83a44605132c2766093
  CHECKSUM(SHA256) upstream package : e7082c497fb9c76b79f781b3b15147c12a122026a1f3f83a44605132c2766093
https://github.com/cntools/libsurvive/archive/037189ebbcdb2a0bedd6fe6a8d1ad3910ac6caad/libsurvive-037189ebbcdb2a0bedd6fe6a8d1ad3910ac6caad.tar.gz :
  CHECKSUM(SHA256) this package     : 0a354752b02abfefc2394d425656bcc7b0c07d0334e70fca0f4a313c604850a9
  CHECKSUM(SHA256) upstream package : 0a354752b02abfefc2394d425656bcc7b0c07d0334e70fca0f4a313c604850a9


Requires
--------
libsurvive (rpmlib, GLIBC filtered):
    /usr/bin/bash
    libc.so.6()(64bit)
    libm.so.6()(64bit)
    libpcap.so.1()(64bit)
    libstdc++.so.6()(64bit)
    libstdc++.so.6(CXXABI_1.3)(64bit)
    libsurvive.so.0()(64bit)
    libusb-1.0.so.0()(64bit)
    libz.so.1()(64bit)
    libz.so.1(ZLIB_1.2.7.1)(64bit)
    rtld(GNU_HASH)
    systemd-udev

libsurvive-devel (rpmlib, GLIBC filtered):
    /usr/bin/pkg-config
    libc.so.6()(64bit)
    libsurvive(x86-64)
    libsurvive.so.0()(64bit)
    rtld(GNU_HASH)

libsurvive-debuginfo (rpmlib, GLIBC filtered):

libsurvive-debugsource (rpmlib, GLIBC filtered):



Provides
--------
libsurvive:
    bundled(cnkalman)
    bundled(cnmatrix)
    libsurvive
    libsurvive(x86-64)
    libsurvive.so.0()(64bit)

libsurvive-devel:
    libsurvive-devel
    libsurvive-devel(x86-64)
    pkgconfig(survive)

libsurvive-debuginfo:
    debuginfo(build-id)
    libsurvive-debuginfo
    libsurvive-debuginfo(x86-64)
    libsurvive.so.0.3-1.01^20240123git037189e-1.fc41.x86_64.debug()(64bit)

libsurvive-debugsource:
    libsurvive-debugsource
    libsurvive-debugsource(x86-64)



Generated by fedora-review 0.10.0 (e79b66b) last change: 2023-07-24
Command line :/usr/bin/fedora-review -r -n libsurvive-1.01^20240123git037189e-1.fc41.src.rpm
Buildroot used: fedora-rawhide-x86_64
Active plugins: C/C++, Shell-api, Generic
Disabled plugins: Java, SugarActivity, Perl, Haskell, Python, fonts, PHP, Ocaml, R
Disabled flags: EXARCH, EPEL6, EPEL7, DISTTAG, BATCH

Comment 3 Jonathan Steffan 2024-05-05 15:22:00 UTC
[!]: License field in the package spec file matches the actual license.
     Note: Checking patched sources after %prep for licenses. Licenses
     found: "Unknown or generated", "MIT License", "GNU General Public
     License, Version 3", "zlib License", "Apache License 1.1", "MIT
     License and/or The Unlicense", "BSD 2-Clause License". 528 files have
     unknown license.
[!]: License file installed when any subpackage combination is installed.

Looks like there is some stuff in redist that needs to be addressed.

[!]: Package requires other packages for directories it uses.
     Note: No known owner of /usr/lib/udev/rules.d, /usr/lib/udev,
     /usr/lib64/pkgconfig

systemd-udev
pkgconf-pkg-config

[!]: Package contains no bundled libraries without FPC exception.

I want to note there is bundled statically linked libraries and I don't know if it passes https://docs.fedoraproject.org/en-US/packaging-guidelines/#bundling (I suspect it does and I think we should continue with this strategy for all of the XR stuff.)

[!]: Package is not known to require an ExcludeArch tag.

With the 32bit tests not being reliable, should we exclude?

[!]: Patches link to upstream bugs/comments/lists or are otherwise
     justified.

I've noticed a pattern of adding "downstream-only: why it's downstream only and what it does" as a good comment for patches that we don't intend on sending upstream.

[!]: %check is present and all tests pass.

See comment about 32bit.

Based on my understanding of the policy, the following is acceptable because the so-files are outside of the default LD path.

Unversioned so-files
--------------------
libsurvive: /usr/lib64/libsurvive/plugins/disambiguator_statebased.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_dummy.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_global_scene_solver.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_playback.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_simulator.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_udp.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_usbmon.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_vive.so
libsurvive: /usr/lib64/libsurvive/plugins/poser_barycentric_svd.so
libsurvive: /usr/lib64/libsurvive/plugins/poser_dummy.so
libsurvive: /usr/lib64/libsurvive/plugins/poser_kalman_only.so
libsurvive: /usr/lib64/libsurvive/plugins/poser_mpfit.so

Comment 4 Davide Cavalca 2024-05-05 22:48:45 UTC
Good catch! The bundled copy of mpfit is... interesting. I filed https://gitlab.com/fedora/legal/fedora-license-data/-/issues/511 with legal as I'm not actually sure how to declare its license.

Comment 5 Davide Cavalca 2024-05-05 23:18:00 UTC
crc32 also needs clarification as it looks like a public domain declaration: https://gitlab.com/fedora/legal/fedora-license-data/-/issues/512

Comment 7 Jonathan Steffan 2024-09-15 15:57:25 UTC
It looks like the licensing issues can be resolved by adding AND LicenseRef-Fedora-UltraPermissive AND HIDAPI? The other updates seem to have been successfully merged?

[x]: Development (unversioned) .so files in -devel subpackage, if present.
     Note: Unversioned so-files in private %_libdir subdirectory (see
     attachment). Verify they are not in ld path.

Unversioned so-files
--------------------
libsurvive: /usr/lib64/libsurvive/plugins/disambiguator_statebased.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_dummy.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_global_scene_solver.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_openvr.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_playback.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_simulator.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_udp.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_usbmon.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_vive.so
libsurvive: /usr/lib64/libsurvive/plugins/poser_barycentric_svd.so
libsurvive: /usr/lib64/libsurvive/plugins/poser_dummy.so
libsurvive: /usr/lib64/libsurvive/plugins/poser_kalman_only.so
libsurvive: /usr/lib64/libsurvive/plugins/poser_mpfit.so

These are not in the ld path and are approved per https://docs.fedoraproject.org/en-US/packaging-guidelines/Unversioned_shared_objects/

[!]: Latest version is packaged.

There has been an update upstream.

[!]: %check is present and all tests pass.

Let's just exclude 32bit for this package. If we get a report that someone actually needs it, we can add it?

Comment 8 Davide Cavalca 2024-10-12 22:53:33 UTC
> Let's just exclude 32bit for this package. If we get a report that someone actually needs it, we can add it?

The problem with excluding i686 is that this is a library, so that means we'd need to also exclude it in every other package that ends up depending on it.

Comment 9 Davide Cavalca 2024-10-12 23:17:35 UTC
Spec URL: https://dcavalca.fedorapeople.org/review/libsurvive/libsurvive.spec
SRPM URL: https://dcavalca.fedorapeople.org/review/libsurvive/libsurvive-1.01^20240510git4fb6d88-1.fc42.src.rpm

Changelog:
- update to latest commit
- document more bundled libraries and update license tag

Comment 10 Jonathan Steffan 2024-10-13 15:25:53 UTC
Package Review
==============

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


Issues:
=======
- The License field must be a valid SPDX expression.
  Note: Not a valid SPDX expression 'MIT AND Minpack AND LicenseRef-Fedora-
  UltraPermissive AND HIDAPI AND ((MIT OR X11) OR BSD 3-Clause OR
  GPL-1.0-or-later) AND (MIT AND (MIT OR X11) OR BSD 3-Clause) AND (MIT AND
  (MIT OR X11)) AND Zlib'.
  See: https://fedoraproject.org/wiki/Changes/SPDX_Licenses_Phase_1


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

C/C++:
[x]: Package does not contain kernel modules.
[x]: Development (unversioned) .so files in -devel subpackage, if present.
     Note: Unversioned so-files in private %_libdir subdirectory (see
     attachment). Verify they are not in ld path.

Approved per https://docs.fedoraproject.org/en-US/packaging-guidelines/Unversioned_shared_objects/

[x]: If your application is a C or C++ application you must list a
     BuildRequires against gcc, gcc-c++ or clang.
[x]: Header files in -devel subpackage, if present.
[x]: ldconfig not called in %post and %postun for Fedora 28 and later.
[x]: Package does not contain any libtool archives (.la)
[x]: Package contains no static executables.
[x]: Rpath absent or only used for internal libs.

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.
[!]: License field in the package spec file matches the actual license.
     Note: Checking patched sources after %prep for licenses. Licenses
     found: "Unknown or generated", "MIT License", "GNU General Public
     License, Version 3", "zlib License", "Apache License 1.1", "MIT
     License and/or The Unlicense", "BSD 2-Clause License". 526 files have
     unknown license. Detailed output of licensecheck in
     /home/jon/Reviews/libsurvive/licensecheck.txt
[x]: License file installed when any subpackage combination is installed.
[x]: 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.
[!]: 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.
[x]: Package is not known to require an ExcludeArch tag.
[x]: Large documentation must go in a -doc subpackage. Large could be size
     (~1MB) or number of files.
     Note: Documentation size is 33413 bytes in 3 files.
[x]: Package complies to the Packaging Guidelines
[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).
[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 %license.
[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]: Dist tag is present.
[x]: Package does not contain duplicates in %files.
[x]: Permissions on files are set properly.
[x]: Package must not depend on deprecated() packages.
[x]: Package use %makeinstall only when make install DESTDIR=... doesn't
     work.
[x]: Package is named using only allowed ASCII characters.
[x]: Package does not use a name that already exists.
[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:
[-]: 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).
[?]: Package functions as described.
[x]: Latest version is packaged.
[x]: Package does not include license text files separate from upstream.
[x]: Patches link to upstream bugs/comments/lists or are otherwise
     justified.
[-]: Sources are verified with gpgverify first in %prep if upstream
     publishes signatures.
     Note: gpgverify is not used.
[x]: Package should compile and build into binary rpms on all supported
     architectures.
[x]: %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]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin.
[x]: Fully versioned dependency in subpackages if applicable.
[x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file
[x]: The placement of pkgconfig(.pc) files are correct.
[x]: Sources can be downloaded from URI in Source: tag
[x]: SourceX is a working URL.
[x]: Spec use %global instead of %define unless justified.

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

Generic:
[x]: Rpmlint is run on debuginfo package(s).
     Note: There are rpmlint messages (see attachment).
[x]: Rpmlint is run on all installed packages.
     Note: There are rpmlint messages (see attachment).
[x]: Large data in /usr/share should live in a noarch subpackage if package
     is arched.


Rpmlint
-------
Cannot parse rpmlint output:


Rpmlint (debuginfo)
-------------------
Cannot parse rpmlint output:



Rpmlint (installed packages)
----------------------------
Cannot parse rpmlint output:


Unversioned so-files
--------------------
libsurvive: /usr/lib64/libsurvive/plugins/disambiguator_statebased.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_dummy.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_global_scene_solver.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_playback.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_simulator.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_udp.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_usbmon.so
libsurvive: /usr/lib64/libsurvive/plugins/driver_vive.so
libsurvive: /usr/lib64/libsurvive/plugins/poser_barycentric_svd.so
libsurvive: /usr/lib64/libsurvive/plugins/poser_dummy.so
libsurvive: /usr/lib64/libsurvive/plugins/poser_kalman_only.so
libsurvive: /usr/lib64/libsurvive/plugins/poser_mpfit.so

Source checksums
----------------
https://github.com/jdavidberger/libsurvive-extras-data/archive/3476af66c488b029e04c74fbb1b57f3b7acb9eb7/libsurvive-extras-data-3476af66c488b029e04c74fbb1b57f3b7acb9eb7.tar.gz :
  CHECKSUM(SHA256) this package     : bb45aef8ae57dafd3fc84f89374af7eb0dc9cb15b1e2c24692e78c03a567fc67
  CHECKSUM(SHA256) upstream package : bb45aef8ae57dafd3fc84f89374af7eb0dc9cb15b1e2c24692e78c03a567fc67
https://github.com/cntools/cnmatrix/archive/5936c62511305227fbd59b2d5a43aaf89ec3a0b6/cnmatrix-5936c62511305227fbd59b2d5a43aaf89ec3a0b6.tar.gz :
  CHECKSUM(SHA256) this package     : e4f1c776c5fbf04374727b6b1c6c32f7226db35fde480468f857df5b6d543f81
  CHECKSUM(SHA256) upstream package : e4f1c776c5fbf04374727b6b1c6c32f7226db35fde480468f857df5b6d543f81
https://github.com/cntools/cnkalman/archive/6b350314225e28d2e4e8daad7d2971d22386f76f/cnkalman-6b350314225e28d2e4e8daad7d2971d22386f76f.tar.gz :
  CHECKSUM(SHA256) this package     : e7082c497fb9c76b79f781b3b15147c12a122026a1f3f83a44605132c2766093
  CHECKSUM(SHA256) upstream package : e7082c497fb9c76b79f781b3b15147c12a122026a1f3f83a44605132c2766093
https://github.com/cntools/libsurvive/archive/4fb6d888d0277a8a3ba725e63707434d80ecdb2a/libsurvive-4fb6d888d0277a8a3ba725e63707434d80ecdb2a.tar.gz :
  CHECKSUM(SHA256) this package     : 51280535c8edaa367ec8e8e681022e55a6db13b3bf143bc3005b4d25d21105de
  CHECKSUM(SHA256) upstream package : 51280535c8edaa367ec8e8e681022e55a6db13b3bf143bc3005b4d25d21105de


Requires
--------
libsurvive (rpmlib, GLIBC filtered):
    /usr/bin/bash
    libc.so.6()(64bit)
    libm.so.6()(64bit)
    libpcap.so.1()(64bit)
    libstdc++.so.6()(64bit)
    libstdc++.so.6(CXXABI_1.3)(64bit)
    libsurvive.so.0()(64bit)
    libusb-1.0.so.0()(64bit)
    libz.so.1()(64bit)
    libz.so.1(ZLIB_1.2.7.1)(64bit)
    rtld(GNU_HASH)
    systemd-udev

libsurvive-devel (rpmlib, GLIBC filtered):
    /usr/bin/pkg-config
    libc.so.6()(64bit)
    libsurvive(x86-64)
    libsurvive.so.0()(64bit)
    rtld(GNU_HASH)

libsurvive-debuginfo (rpmlib, GLIBC filtered):

libsurvive-debugsource (rpmlib, GLIBC filtered):



Provides
--------
libsurvive:
    bundled(CNFG)
    bundled(CNFG3D)
    bundled(cnkalman)
    bundled(cnmatrix)
    bundled(crc32)
    bundled(hidapi)
    bundled(jsmn)
    bundled(linmath)
    bundled(mpfit)
    bundled(zlib)
    libsurvive
    libsurvive(x86-64)
    libsurvive.so.0()(64bit)

libsurvive-devel:
    libsurvive-devel
    libsurvive-devel(x86-64)
    pkgconfig(survive)

libsurvive-debuginfo:
    debuginfo(build-id)
    libsurvive-debuginfo
    libsurvive-debuginfo(x86-64)
    libsurvive.so.0.3-1.01^20240510git4fb6d88-1.fc42.x86_64.debug()(64bit)

libsurvive-debugsource:
    libsurvive-debugsource
    libsurvive-debugsource(x86-64)



Generated by fedora-review 0.10.0 (e79b66b) last change: 2023-07-24
Command line :/usr/bin/fedora-review -r -n libsurvive-1.01^20240510git4fb6d88-1.fc42.src.rpm
Buildroot used: fedora-rawhide-x86_64
Active plugins: Generic, Shell-api, C/C++
Disabled plugins: Python, Java, PHP, Ocaml, R, fonts, SugarActivity, Haskell, Perl
Disabled flags: EXARCH, EPEL6, EPEL7, DISTTAG, BATCH

Comment 11 Jonathan Steffan 2024-10-13 15:28:14 UTC
Issues:
=======
- The License field must be a valid SPDX expression.
  Note: Not a valid SPDX expression 'MIT AND Minpack AND LicenseRef-Fedora-
  UltraPermissive AND HIDAPI AND ((MIT OR X11) OR BSD 3-Clause OR
  GPL-1.0-or-later) AND (MIT AND (MIT OR X11) OR BSD 3-Clause) AND (MIT AND
  (MIT OR X11)) AND Zlib'.
  See: https://fedoraproject.org/wiki/Changes/SPDX_Licenses_Phase_1

license-validate 'MIT AND Minpack AND LicenseRef-Fedora-UltraPermissive AND HIDAPI AND ((MIT OR X11) OR BSD-3-Clause OR GPL-1.0-or-later) AND (MIT AND (MIT OR X11) OR BSD-3-Clause) AND (MIT AND (MIT OR X11)) AND Zlib'
Approved license

BSD-3-Clause


[!]: License field in the package spec file matches the actual license.
     Note: Checking patched sources after %prep for licenses. Licenses
     found: "Unknown or generated", "MIT License", "GNU General Public
     License, Version 3", "zlib License", "Apache License 1.1", "MIT
     License and/or The Unlicense", "BSD 2-Clause License". 526 files have
     unknown license. Detailed output of licensecheck in
     /home/jon/Reviews/libsurvive/licensecheck.txt

The one that sticks out is missing BSD-2-Clause for libs/cnkalman/libs/cnmatrix/cmake/FindEigen3.cmake


[!]: Package contains no bundled libraries without FPC exception.

There is bundled stuff and I don't know the process to approve this.

Comment 12 Jonathan Steffan 2024-10-13 15:41:20 UTC
i686 is failing to build:

  124784292 buildArch (libsurvive-1.01^20240510git4fb6d88-1.fc42.src.rpm, i686): open (buildvm-x86-05.iad2.fedoraproject.org) -> FAILED: BuildError: error building package (arch i686), mock exited with status 1; see build.log or root.log for more information
  Relevant logs:
  https://kojipkgs.fedoraproject.org/work/tasks/4292/124784292/mock_config.log
  https://kojipkgs.fedoraproject.org/work/tasks/4292/124784292/state.log
  https://kojipkgs.fedoraproject.org/work/tasks/4292/124784292/build.log
  https://kojipkgs.fedoraproject.org/work/tasks/4292/124784292/root.log
  https://kojipkgs.fedoraproject.org/work/tasks/4292/124784292/mock_output.log
  https://kojipkgs.fedoraproject.org/work/tasks/4292/124784292/hw_info.log
  https://kojipkgs.fedoraproject.org/work/tasks/4292/124784292/dnf5.log
  0 free  5 open  1 done  1 failed

/builddir/build/BUILD/libsurvive-1.01_20240510git4fb6d88-build/libsurvive-4fb6d888d0277a8a3ba725e63707434d80ecdb2a/src/driver_usbmon.c:796:99: error: initialization of ‘int (*)(void *, __off64_t *, int)’ {aka ‘int (*)(void *, long long int *, int)’} from incompatible pointer type ‘int (*)(void *, off_t *, int)’ {aka ‘int (*)(void *, long int *, int)’} [-Wincompatible-pointer-types]
  796 |         .close = gzip_cookie_close, .write = gzip_cookie_write, .read = gzip_cookie_read, .seek = gzip_cookie_seek};
      |                                                                                                   ^~~~~~~~~~~~~~~~
/builddir/build/BUILD/libsurvive-1.01_20240510git4fb6d88-build/libsurvive-4fb6d888d0277a8a3ba725e63707434d80ecdb2a/src/driver_usbmon.c:796:99: note: (near initialization for ‘gzip_cookie.seek’)

Looks like we need to exclude it.

Comment 13 Davide Cavalca 2024-10-13 16:05:38 UTC
> There is bundled stuff and I don't know the process to approve this.

My read of https://docs.fedoraproject.org/en-US/packaging-guidelines/#bundling is that this is a SHOULD and as long as the provides are declared and the licensing is sane it shouldn't require an exception.

> i686 is failing to build

Oh well, we tried. I wonder if this will end up being an issue if/when we end up trying to run proprietary games (as those are often 32 bit...)

Comment 15 Jonathan Steffan 2024-10-13 16:14:20 UTC
(In reply to Davide Cavalca from comment #13)
> > i686 is failing to build
> 
> Oh well, we tried. I wonder if this will end up being an issue if/when we
> end up trying to run proprietary games (as those are often 32 bit...)

That's a good question. I think Monado would provide enough insulation from the game engines themselves talking to LH stuff but I don't know about the ABI between OpenXR/OpenOVR/OpenVR and Monado needing to be 32bit. Maybe there is enough abstraction in the OpenXR/OpenOVR/OpenVR we wont have to care. There is a lot of IPC stuff in use so we might be good. I run with a standalone HMD and 64bit WiVRn (i.e. modified Monado) and 32bit games work IIRC.

Comment 16 Jonathan Steffan 2024-10-13 16:14:57 UTC
APPROVED

Comment 17 Fedora Admin user for bugzilla script actions 2024-10-13 16:20:12 UTC
The Pagure repository was created at https://src.fedoraproject.org/rpms/libsurvive

Comment 18 Fedora Update System 2024-10-13 16:53:14 UTC
FEDORA-2024-38ec624e75 (libsurvive-1.01^20240510git4fb6d88-2.fc42) has been submitted as an update to Fedora 42.
https://bodhi.fedoraproject.org/updates/FEDORA-2024-38ec624e75

Comment 19 Fedora Update System 2024-10-13 16:56:50 UTC
FEDORA-2024-38ec624e75 (libsurvive-1.01^20240510git4fb6d88-2.fc42) has been pushed to the Fedora 42 stable repository.
If problem still persists, please make note of it in this bug report.

Comment 20 Fedora Update System 2024-10-13 17:25:04 UTC
FEDORA-2024-c581675cc8 (libsurvive-1.01^20240510git4fb6d88-2.fc41) has been submitted as an update to Fedora 41.
https://bodhi.fedoraproject.org/updates/FEDORA-2024-c581675cc8

Comment 21 Fedora Update System 2024-10-14 00:22:16 UTC
FEDORA-2024-c581675cc8 (libsurvive-1.01^20240510git4fb6d88-2.fc41) has been pushed to the Fedora 41 stable repository.
If problem still persists, please make note of it in this bug report.

Comment 22 Fedora Update System 2024-10-14 03:38:10 UTC
FEDORA-2024-e5fca0db79 (libsurvive-1.01^20240510git4fb6d88-2.fc40) has been submitted as an update to Fedora 40.
https://bodhi.fedoraproject.org/updates/FEDORA-2024-e5fca0db79

Comment 23 Fedora Update System 2024-10-15 02:24:12 UTC
FEDORA-2024-e5fca0db79 has been pushed to the Fedora 40 testing repository.
Soon you'll be able to install the update with the following command:
`sudo dnf install --enablerepo=updates-testing --refresh --advisory=FEDORA-2024-e5fca0db79 \*`
You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2024-e5fca0db79

See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.

Comment 24 Fedora Update System 2024-10-23 01:33:32 UTC
FEDORA-2024-e5fca0db79 (libsurvive-1.01^20240510git4fb6d88-2.fc40) has been pushed to the Fedora 40 stable repository.
If problem still persists, please make note of it in this bug report.


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