Spec URL: https://mjg.fedorapeople.org/rpmdev/sfsexp.spec SRPM URL: https://mjg.fedorapeople.org/rpmdev/sfsexp-1.4.0-1.fc36.src.rpm Description: This library is intended for developers who wish to manipulate (read, parse, modify, and create) symbolic expressions (s-expressions)from C or C++ programs. Fedora Account System Username: mjg Copr build including review template: https://download.copr.fedorainfracloud.org/results/mjg/sfsexp/fedora-rawhide-x86_64/04509488-sfsexp/ sfsexp is an optional dependency of notmuch, the mail indexer. It enhances the search capabilities of notmuch considerably. I maintain notmuch for Fedora and have been using a special copr build of notmuch with sfsexp for a while now, without any glitches at all. notmuch's main author and I are contributors to sfsexp, notmuch's main author maintains notmuch and sfsexp for Debian. https://copr.fedorainfracloud.org/coprs/mjg/notmuch-sfsexp/
I'll review this over the weekend. At first glance at the specfile though, it appears you are globbing the soversion of the library. I would suggest not globbing the soversion and instead adding a global variable to contain it. That way it is obvious when there is an soversion bump and dependent packages need to be rebuilt. See https://docs.fedoraproject.org/en-US/packaging-guidelines/#_shared_libraries.
Unofficial review: Package Review ============== Legend: [x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated [ ] = Manual review needed ===== MUST items ===== C/C++: [x]: Package does not contain kernel modules. [x]: Package contains no static executables. [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]: Rpath absent or only used for internal libs. [x]: Development (unversioned) .so files in -devel subpackage, if present. 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]: License field in the package spec file matches the actual license. Note: Checking patched sources after %prep for licenses. Licenses found: "GNU Lesser General Public License v2.1 or later", "Unknown or generated", "[generated file]", "FSF Unlimited License (with License Retention) [generated file]", "GNU General Public License v2.0 or later [generated file]", "GNU General Public License v3.0 or later", "FSF Unlimited License [generated file]", "X11 License [generated file]", "GNU General Public License v2.0 or later", "FSF Unlimited License (with License Retention) GNU General Public License, Version 2", "FSF Unlimited License (with License Retention)". 29 files have unknown license. Detailed output of licensecheck in /home/FedoraPackaging/sfsexp/2095717-sfsexp/licensecheck.txt [x]: License file installed when any subpackage combination is installed. [x]: %build honors applicable compiler flags or justifies otherwise. [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. [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 20480 bytes in 2 files. [?]: 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). [?]: Fully versioned dependency in subpackages if applicable. Note: No Requires: %{name}%{?_isa} = %{version}-%{release} in sfsexp- devel [?]: Package functions as described. [x]: Latest version is packaged. [x]: Package does not include license text files separate from upstream. [-]: Sources are verified with gpgverify first in %prep if upstream publishes signatures. Note: gpgverify is not used. [?]: 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]: 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. [x]: Spec file according to URL is the same as in SRPM. Rpmlint ------- Cannot parse rpmlint output: Rpmlint (debuginfo) ------------------- Cannot parse rpmlint output: Rpmlint (installed packages) ---------------------------- Cannot parse rpmlint output: Source checksums ---------------- https://github.com/mjsottile/sfsexp/releases/download/v1.4.0/sfsexp-1.4.0.tar.gz : CHECKSUM(SHA256) this package : 66b3d3a83b781613e04372fa0185518ed00fe1435de116be88cf0fdd3e4c0286 CHECKSUM(SHA256) upstream package : 66b3d3a83b781613e04372fa0185518ed00fe1435de116be88cf0fdd3e4c0286 Requires -------- sfsexp (rpmlib, GLIBC filtered): libc.so.6()(64bit) rtld(GNU_HASH) sfsexp-devel (rpmlib, GLIBC filtered): /usr/bin/pkg-config libsexp.so.1()(64bit) sfsexp(x86-64) sfsexp-debuginfo (rpmlib, GLIBC filtered): sfsexp-debugsource (rpmlib, GLIBC filtered): Provides -------- sfsexp: libsexp.so.1()(64bit) sfsexp sfsexp(x86-64) sfsexp-devel: pkgconfig(sfsexp) sfsexp-devel sfsexp-devel(x86-64) sfsexp-debuginfo: debuginfo(build-id) libsexp.so.1.0.0-1.4.0-1.fc37.x86_64.debug()(64bit) sfsexp-debuginfo sfsexp-debuginfo(x86-64) sfsexp-debugsource: sfsexp-debugsource sfsexp-debugsource(x86-64) Generated by fedora-review 0.8.0 (e988316) last change: 2022-04-07 Command line :/usr/bin/fedora-review -b 2095717 Buildroot used: fedora-rawhide-x86_64 Active plugins: Generic, C/C++, Shell-api Disabled plugins: PHP, Perl, Ocaml, Java, R, Haskell, SugarActivity, Python, fonts Disabled flags: EPEL6, EPEL7, DISTTAG, BATCH, EXARCH Minor comments: 1) May be helpful to use two line breaks consistently in the commands section of the spec file and one line break elsewhere. 2) Enable other architectures on the copr build in addtion to x86_64, it would be good to have AArch64 and ARM-hfp as described at https://fedoraproject.org/wiki/Architectures#Primary_Architectures and linked from https://docs.fedoraproject.org/en-US/packaging-guidelines/#_architecture_support 3) Should Python and Ruby bindings be provided?
Issues: - Must include the perl executable (e.g. BuildRequires: perl-interpreter) as a build dependency because the test script uses perl - Replace $RPM_BUILD_ROOT with %{buildroot} - Don't glob the .so file in the main files section (instead hardcode the soname information) - %{?ldconfig_scriptlets} is not needed unless building on EPEL7 - Include the LICENSE_LGPL file in the installation (the COPYING file says the user should receive a copy of the LPGL, which is in this file) - The Fedora shortname for the License field here would be LGPLv2+ instead of LGPL-2.1+ (as shown here https://fedoraproject.org/wiki/Licensing:Main?rd=Licensing#Good_Licenses). I am also blocking on a legal query because this package appears to place a restriction on the LGPL about derivative works (https://lists.fedoraproject.org/archives/list/legal@lists.fedoraproject.org/thread/EN7FJDUNEGTMHW2ZYZ4GYNFAC75ZKMV3/) Package Review ============== Legend: [x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated ===== MUST items ===== C/C++: [x]: Package does not contain kernel modules. [x]: Package contains no static executables. [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]: Rpath absent or only used for internal libs. [x]: Development (unversioned) .so files in -devel subpackage, if present. Generic: [!]: 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: "GNU Lesser General Public License v2.1 or later", "Unknown or generated", "[generated file]", "FSF Unlimited License (with License Retention) [generated file]", "GNU General Public License v2.0 or later [generated file]", "GNU General Public License v3.0 or later", "FSF Unlimited License [generated file]", "X11 License [generated file]", "GNU General Public License v2.0 or later", "FSF Unlimited License (with License Retention) GNU General Public License, Version 2", "FSF Unlimited License (with License Retention)". 29 files have unknown license. Detailed output of licensecheck in /home/imcinerney/dev/fedora/reviews/sfsexp/2095717-sfsexp/licensecheck.txt [x]: License file installed when any subpackage combination is installed. [x]: %build honors applicable compiler flags or justifies otherwise. [x]: Package contains no bundled libraries without FPC exception. [x]: Changelog in prescribed format. [x]: Sources contain only permissible code or content. [x]: 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. [x]: If the package is a rename of another package, proper Obsoletes and Provides are present. [!]: Requires correct, justified where necessary. [x]: Spec file is legible and written in American English. [x]: 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 20480 bytes in 2 files. [!]: 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: [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]: Fully versioned dependency in subpackages if applicable. Note: No Requires: %{name}%{?_isa} = %{version}-%{release} in sfsexp- devel [x]: Package functions as described. [x]: Latest version is packaged. [x]: Package does not include license text files separate from upstream. [x]: 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]: 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. [x]: Spec file according to URL is the same as in SRPM. Rpmlint ------- Cannot parse rpmlint output: Rpmlint (debuginfo) ------------------- Cannot parse rpmlint output: Rpmlint (installed packages) ---------------------------- Cannot parse rpmlint output: Source checksums ---------------- https://github.com/mjsottile/sfsexp/releases/download/v1.4.0/sfsexp-1.4.0.tar.gz : CHECKSUM(SHA256) this package : 66b3d3a83b781613e04372fa0185518ed00fe1435de116be88cf0fdd3e4c0286 CHECKSUM(SHA256) upstream package : 66b3d3a83b781613e04372fa0185518ed00fe1435de116be88cf0fdd3e4c0286 Requires -------- sfsexp (rpmlib, GLIBC filtered): libc.so.6()(64bit) rtld(GNU_HASH) sfsexp-devel (rpmlib, GLIBC filtered): /usr/bin/pkg-config libsexp.so.1()(64bit) sfsexp(x86-64) sfsexp-debuginfo (rpmlib, GLIBC filtered): sfsexp-debugsource (rpmlib, GLIBC filtered): Provides -------- sfsexp: libsexp.so.1()(64bit) sfsexp sfsexp(x86-64) sfsexp-devel: pkgconfig(sfsexp) sfsexp-devel sfsexp-devel(x86-64) sfsexp-debuginfo: debuginfo(build-id) libsexp.so.1.0.0-1.4.0-1.fc37.x86_64.debug()(64bit) sfsexp-debuginfo sfsexp-debuginfo(x86-64) sfsexp-debugsource: sfsexp-debugsource sfsexp-debugsource(x86-64) Generated by fedora-review 0.8.0 (e988316) last change: 2022-04-07 Command line :/usr/bin/fedora-review --bug 2095717 Buildroot used: fedora-rawhide-x86_64 Active plugins: C/C++, Generic, Shell-api Disabled plugins: SugarActivity, PHP, Perl, fonts, Java, Python, R, Haskell, Ocaml Disabled flags: EPEL6, EPEL7, DISTTAG, BATCH, EXARCH
(In reply to Ian McInerney from comment #3) Thanks for the detailed review and for raising the right questions at the right places! I almost missed it because bz decided not to put the reporter (me) on the cc list. Weird. I have the spec file for 1.4.0-2 pending (unless you prefer to accumulate everything into 1.4.0-1, which is fine for me). > Issues: > - Must include the perl executable (e.g. BuildRequires: perl-interpreter) as > a build dependency because the test script uses perl done > - Replace $RPM_BUILD_ROOT with %{buildroot} done > - Don't glob the .so file in the main files section (instead hardcode the > soname information) I've seen this a lot, but not globbing this makes soname changes more obvious. Done > - %{?ldconfig_scriptlets} is not needed unless building on EPEL7 done > - Include the LICENSE_LGPL file in the installation (the COPYING file says > the user should receive a copy of the LPGL, which is in this file) It is not shipped in the distribution tarball (only in the github-generated one). I have asked upstream to change this: https://github.com/mjsottile/sfsexp/pull/20 But only a new automake run and release will make the distribution tarball contain the file. Should I simply ship the file as an additional "source" for now? > - The Fedora shortname for the License field here would be LGPLv2+ instead > of LGPL-2.1+ (as shown here > https://fedoraproject.org/wiki/Licensing:Main?rd=Licensing#Good_Licenses). > > I am also blocking on a legal query because this package appears to place a > restriction on the LGPL about derivative works > (https://lists.fedoraproject.org/archives/list/legal@lists.fedoraproject.org/ > thread/EN7FJDUNEGTMHW2ZYZ4GYNFAC75ZKMV3/) I guess I looked at the wrong column. Changed to LGPLv2+ for now but waiting for legal's final verdict on this
Legal has determined this package is just the LGPLv2+ (the additional language is apparently less strict than the language of the LGPL, so the LGPL would take precedence anyway), so that is the license identifier to use. > But only a new automake run and release will make the distribution tarball contain the file. Should I simply ship the file as an additional "source" for now? Yes, you can just ship the LICENSE_LGPL as a new source: line and do the install that way, and you should probably leave a comment/link to the upstream PR noting that it can be removed after the next version is released and the in-tree version could be used. > I have the spec file for 1.4.0-2 pending (unless you prefer to accumulate everything into 1.4.0-1, which is fine for me). Please update it into a -2 spec and post it again. I think it will be good to go after that one.
[I'm not getting any bugzilla mails it seems.] I have renamed the first spec file to https://mjg.fedorapeople.org/rpmdev/sfsexp.spec-1.4.0-1 and put up version 2 as: https://mjg.fedorapeople.org/rpmdev/sfsexp.spec https://mjg.fedorapeople.org/rpmdev/sfsexp-1.4.0-2.fc36.src.rpm The diff is: https://mjg.fedorapeople.org/rpmdev/sfsexp.spec.diff Also, I have rebuilt sfsexp and notmuch in https://copr.fedorainfracloud.org/coprs/mjg/notmuch-sfsexp/ which, in particular, runs both test suites.
re FE-legal: am I entitled to un-block, or should someone else do this?
(In reply to Benson Muite from comment #2) > Unofficial review: Thanks for your review, which I did not mean to ignore. Due to not receiving bug-mails, I went with the latest review. > Minor comments: > 1) May be helpful to use two line breaks consistently in the commands > section of the spec file and one line break elsewhere. This is consistent now in -2 (one line break; my sections are very short and do not need empty lines within the section). > 2) Enable other architectures on the copr build in addtion to x86_64, it > would be good to have AArch64 and ARM-hfp as described at > https://fedoraproject.org/wiki/Architectures#Primary_Architectures and > linked from > https://docs.fedoraproject.org/en-US/packaging-guidelines/ > #_architecture_support AArch64 is enabled; ARM-hfp is emulated in copr, and I have mixed experience with that - both in term of runtime as well as reliability. I do run koji scratch builds (for all archs) before any pushes, though. In particular, these use the koji buildroots, not the copr buildroots. > 3) Should Python and Ruby bindings be provided? From my understanding, they are a very old experiment: They have not been touched since the project moved from sourceforge in 2018, and probably for a very long time before. They are not built with the main project, and the upstream author listed them for removal: https://github.com/mjsottile/sfsexp/issues/15
Thanks for your patience. Sorry missed some of the other points that were raised. Useful learning experience.
The -2 specfile looks good now, so package approved. > re FE-legal: am I entitled to un-block, or should someone else do this? I don't think we need to remove it from the unblock, we can still have this issue get closed with that relation in place (and I think it is useful to capture that there was a legal query on the package).
https://pagure.io/releng/fedora-scm-requests/issue/45097
(fedscm-admin): The Pagure repository was created at https://src.fedoraproject.org/rpms/sfsexp
FEDORA-2022-8e53be2fb9 has been submitted as an update to Fedora 36. https://bodhi.fedoraproject.org/updates/FEDORA-2022-8e53be2fb9
FEDORA-EPEL-2022-57dfeeb304 has been submitted as an update to Fedora EPEL 9. https://bodhi.fedoraproject.org/updates/FEDORA-EPEL-2022-57dfeeb304
FEDORA-2022-8e53be2fb9 has been pushed to the Fedora 36 testing repository. Soon you'll be able to install the update with the following command: `sudo dnf install --enablerepo=updates-testing --advisory=FEDORA-2022-8e53be2fb9 \*` You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-2022-8e53be2fb9 See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.
FEDORA-EPEL-2022-57dfeeb304 has been pushed to the Fedora EPEL 9 testing repository. You can provide feedback for this update here: https://bodhi.fedoraproject.org/updates/FEDORA-EPEL-2022-57dfeeb304 See also https://fedoraproject.org/wiki/QA:Updates_Testing for more information on how to test updates.
FEDORA-2022-8e53be2fb9 has been pushed to the Fedora 36 stable repository. If problem still persists, please make note of it in this bug report.
FEDORA-EPEL-2022-57dfeeb304 has been pushed to the Fedora EPEL 9 stable repository. If problem still persists, please make note of it in this bug report.