https://bugzilla.redhat.com/show_bug.cgi?id=2023307
Bug ID: 2023307 Summary: Review Request: libnetconf2 - NETCONF protocol library Product: Fedora Version: rawhide Hardware: All OS: Linux Status: NEW Component: Package Review Severity: medium Priority: medium Assignee: nobody@fedoraproject.org Reporter: jakub.ruzicka@nic.cz QA Contact: extras-qa@fedoraproject.org CC: package-review@lists.fedoraproject.org Target Milestone: --- Classification: Fedora
Spec URL: https://jruzicka.fedorapeople.org/pkgs/libnetconf2.spec SRPM URL: https://jruzicka.fedorapeople.org/pkgs/libnetconf2-2.0.24-1.fc36.src.rpm Description: libnetconf2 is a NETCONF library in C intended for building NETCONF clients and servers. NETCONF is the NETwork CONFiguration protocol introduced by IETF. Fedora Account System Username: jruzicka
https://bugzilla.redhat.com/show_bug.cgi?id=2023307
Petr Menšík pemensik@redhat.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |pemensik@redhat.com Doc Type|--- |If docs needed, set a value
--- Comment #1 from Petr Menšík pemensik@redhat.com --- Is there reason, why is not %cmake macro used instead of manual cmake?
Why is make used instead of %make_build, make install instead of %make_install?
https://bugzilla.redhat.com/show_bug.cgi?id=2023307
--- Comment #2 from Petr Menšík pemensik@redhat.com --- Also setting Release should not be used. We want debug symbols extracted in separate (sub)package.
Because it uses cmake, use something like:
%build %cmake %cmake_build
%install %cmake_install
That would not require even make package. And is clean, short, handles also building into separate build directory. No cd build is needed. It should pass all default flags into cmake build, additional defined can be used after %cmake -DSOMEVAR=ON
https://bugzilla.redhat.com/show_bug.cgi?id=2023307
Petr Menšík pemensik@redhat.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Assignee|nobody@fedoraproject.org |pemensik@redhat.com Flags| |fedora-review? Status|NEW |ASSIGNED
--- Comment #3 from Petr Menšík pemensik@redhat.com --- Package Review ==============
Legend: [x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated [ ] = Manual review needed
Issues found: - LDFLAGS not used at all. use %cmake macro to pass all needed flags, omit cmake command directly - use %cmake_build and %cmake_install instead of manual make calls - %_libdir/pkgconfig is not owned. devel subpackage must depend on pkgconfig package or own that empty directory. - README.md and FAQ.md might be part of library or devel subpackage, use %doc for them. CODINGSTYLE.md could be useful in devel. - Some tests are present in code. Can any of them run during build without internet access?
===== 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: "Unknown or generated", "BSD (3 clause)". 112 files have unknown license. Detailed output of licensecheck in /home/reviewer/fedora/rawhide/2023307-libnetconf2/licensecheck.txt [x]: License file installed when any subpackage combination is installed. [!]: %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. [ ]: 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. - pkgconfig directory from devel package [x]: Spec file is legible and written in American English. [-]: Package contains systemd file(s) if in need. [?]: Useful -debuginfo package or justification otherwise. [x]: Package is not known to require an ExcludeArch tag. [!]: Package complies to the Packaging Guidelines LDFLAGS hardening not used [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]: Large documentation must go in a -doc subpackage. Large could be size (~1MB) or number of files. Note: Documentation size is 0 bytes in 0 files. [x]: Packages must not store files under /srv, /opt or /usr/local
===== SHOULD items =====
Generic: [!]: Uses parallel make %{?_smp_mflags} macro. [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. [-]: Sources are verified with gpgverify first in %prep if upstream publishes signatures. Note: gpgverify is not 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. [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. [x]: Spec file according to URL is the same as in SRPM.
Rpmlint ------- Checking: libnetconf2-2.0.24-1.fc36.x86_64.rpm libnetconf2-devel-2.0.24-1.fc36.x86_64.rpm libnetconf2-debuginfo-2.0.24-1.fc36.x86_64.rpm libnetconf2-debugsource-2.0.24-1.fc36.x86_64.rpm libnetconf2-2.0.24-1.fc36.src.rpm libnetconf2.x86_64: W: no-documentation libnetconf2-devel.x86_64: W: spelling-error %description -l en_US libnetconf -> conflict libnetconf2-devel.x86_64: W: no-documentation 5 packages and 0 specfiles checked; 0 errors, 3 warnings.
Rpmlint (debuginfo) ------------------- Checking: libnetconf2-debuginfo-2.0.24-1.fc36.x86_64.rpm 1 packages and 0 specfiles checked; 0 errors, 0 warnings.
Rpmlint (installed packages) ---------------------------- Cannot parse rpmlint output:
Source checksums ---------------- https://github.com/CESNET/libnetconf2/archive/v2.0.24.tar.gz : CHECKSUM(SHA256) this package : 78ffa0bd85823abd321a1dbb09c1ead36612f2a12049638a14bb081567f86ade CHECKSUM(SHA256) upstream package : 78ffa0bd85823abd321a1dbb09c1ead36612f2a12049638a14bb081567f86ade
Requires -------- libnetconf2 (rpmlib, GLIBC filtered): libc.so.6()(64bit) libcrypt.so.2()(64bit) libcrypt.so.2(XCRYPT_2.0)(64bit) libcrypto.so.3()(64bit) libcrypto.so.3(OPENSSL_3.0.0)(64bit) libssh.so.4()(64bit) libssh.so.4(LIBSSH_4_5_0)(64bit) libssl.so.3()(64bit) libssl.so.3(OPENSSL_3.0.0)(64bit) libyang.so.2()(64bit) rtld(GNU_HASH)
libnetconf2-devel (rpmlib, GLIBC filtered): /usr/bin/pkg-config libnetconf2(x86-64) libnetconf2.so.2()(64bit)
libnetconf2-debuginfo (rpmlib, GLIBC filtered):
libnetconf2-debugsource (rpmlib, GLIBC filtered):
Provides -------- libnetconf2: libnetconf2 libnetconf2(x86-64) libnetconf2.so.2()(64bit)
libnetconf2-devel: libnetconf2-devel libnetconf2-devel(x86-64) pkgconfig(libnetconf2)
libnetconf2-debuginfo: debuginfo(build-id) libnetconf2-debuginfo libnetconf2-debuginfo(x86-64) libnetconf2.so.2.1.20-2.0.24-1.fc36.x86_64.debug()(64bit)
libnetconf2-debugsource: libnetconf2-debugsource libnetconf2-debugsource(x86-64)
Generated by fedora-review 0.7.6 (b083f91) last change: 2020-11-10 Command line :/usr/bin/fedora-review -b 2023307 Buildroot used: fedora-rawhide-x86_64 Active plugins: Generic, Shell-api, C/C++ Disabled plugins: Perl, Haskell, Java, Python, R, Ocaml, fonts, SugarActivity, PHP Disabled flags: EPEL6, EPEL7, DISTTAG, BATCH, EXARCH
https://bugzilla.redhat.com/show_bug.cgi?id=2023307
--- Comment #5 from Petr Menšík pemensik@redhat.com --- I would suggest using Source: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz
spectool -g *.spec would name downloaded archive in a nicer way, just prepared to upload by fedpkg new-sources.
https://bugzilla.redhat.com/show_bug.cgi?id=2023307
--- Comment #6 from Jakub Ruzicka jakub.ruzicka@nic.cz --- Hello Petře and thank you for your review.
Is there reason, why is not %cmake macro used instead of manual cmake?
I've started with that following fedora docs, but it wasn't working on EL/EPEL 7. Instead of maintaining 2 different .spec files, I decided to use a method that works on all currently supported systems. I'd be happy for a better solution here.
Why is make used instead of %make_build, make install instead of %make_install?
I don't remember if there was an issue with these as well... maybe just general distrust in macros that behave differently across different distro releases. I'll try changing per your suggestion and see if that works.
I'll address other issues you pointed out not related to cmake, but assuming I can't use the %cmake macro due to EL 7 support:
- LDFLAGS not used at all. use %cmake macro to pass all needed flags, omit cmake command directly
Any example on howto do it manually?
- use %cmake_build and %cmake_install instead of manual make calls
If my manual invocation is incorrect, could you please point me in the right direction without the %cmake macros?
https://bugzilla.redhat.com/show_bug.cgi?id=2023307
--- Comment #7 from Petr Menšík pemensik@redhat.com --- EPEL 7 is quite old these days. New package should not start today with standard of EPEL7 package. At least for EPEL 8 all macros should behave very close to current Fedora best practices.
EPEL 7 would probably need some tweaks anyway. Having the spec 100% identical for all different releases is not desirable. Especially when oldest supported epel releases are considered.
I think cmake3 variants have to be used instead.
BuildRequires: cmake3
Then something similar should work also on EPEL7:
%build %cmake3 %cmake3_build
%install %cmake3_install
But cmake3 is not present on Fedora, I think those macros would not work on both versions without some modification. My test build failed because there is no libyang >= 2 even for older stable Fedora releases, let alone for EPEL7.
I think you should use at least %set_build_flags macro to export all flags before cmake call. I would like you to reconsider decision to not use %cmake macros at all. While it is possible doing the same thing without them, they would bring you much of additional work. I think it is easier to keep multiple versions with small enough differences. Just do not reinvent the wheel. I am not sure if SuSE rpm spec allows compatible work with cmake, may need something different.
https://bugzilla.redhat.com/show_bug.cgi?id=2023307
--- Comment #8 from Jakub Ruzicka jakub.ruzicka@nic.cz --- OK, I've updated the .spec in-place per your instructions:
- use %cmake macros (-> different .spec for EL/SUSE :'( ) - drop make dep - better Source URL - include *.md docs using %doc - make -devel require pkgconfig
Tests can be enabled by BR: pkgconfig(libcmocka) and %cmake -DENABLE_TESTS=ON, but they fail:
83% tests passed, 2 tests failed out of 12
The following tests FAILED: 8 - test_server_thread (Failed) 11 - test_client_ssh (Failed)
I'll let upstream know about this, but for now I'm leaving tests disabled.
Let me know if you find anything else worth improving.
https://bugzilla.redhat.com/show_bug.cgi?id=2023307
Petr Menšík pemensik@redhat.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Flags|fedora-review? |fedora-review+ Status|ASSIGNED |POST
--- Comment #9 from Petr Menšík pemensik@redhat.com --- Looks great. I don't know how SuSE handles %cmake macro so I took a look at json-c [1]. It seems they use similar macro %cmake and %cmake_install, but have %cmake_build integrated into %cmake. Unless they define it special way, It might be possible to use:
%build %cmake %{?cmake_build}
%install %cmake_install
This might work both on RHEL derivative and SUSE distributions without a change. If not, this would work for sure:
%cmake %if 0%{?fedora} || 0%{?rhel} %cmake_build %endif
I admit I build on various RHEL alternatives, but have not direct experience with RPM builds on SUSE. I think they should be reasonably close for basic things. I admit including build after %cmake configuration is nice and usually desired.
I noticed just now. The package has Conflicts: libnetconf-devel, but such package does not exist in Fedora. I would recommend upgrading it instead if it existed. But it is not there and seems newer was. It does not seem to be present also in opensuse. Is it needed on any system?
I would personally add a patch disabling only failing tests. Commenting them out in test summary for example. Also with including upstream bug link together with patch. It would remind you to fix tests on upgrade. If there are at least some passing tests, they should run. If they would not work under mockbuild, use %bcond_with check and %if %{with check}...%endif.
But because that is only optional improvements, I am granting review+.
Continue with fedpkg request-repo please.
1. https://build.opensuse.org/package/view_file/openSUSE:Factory/json-c/json-c....
https://bugzilla.redhat.com/show_bug.cgi?id=2023307
--- Comment #10 from Gwyn Ciesla gwync@protonmail.com --- (fedscm-admin): The Pagure repository was created at https://src.fedoraproject.org/rpms/libnetconf2
https://bugzilla.redhat.com/show_bug.cgi?id=2023307
--- Comment #11 from Jakub Ruzicka jakub.ruzicka@nic.cz --- Thank you for your constructive review as well as cool tips on howto handle this on other RPM-based distros ❤
The package built for rawhide.
I'll try to fix tests with upstream and enable all of them, as I'm not fond of downstream patches. If that fails, I'll consider disabling failing ones with a patch as you suggested.
Conflicts: libnetconf-devel isn't really needed, I'll remove that on next package release.
Finally, as you got familiar with this .spec, please consider reviewing the related and similar sysrepo package as well:
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=2042998
package-review@lists.fedoraproject.org