Spec URL: https://pmachata.fedorapeople.org/dwgrep.spec SRPM URL: https://pmachata.fedorapeople.org/dwgrep-0.1-1.fc20.src.rpm Description: Dwgrep is a tool, an associated language (called Zwerg) and a library (libzwerg) for querying Dwarf (debuginfo) graphs. You can think of dwgrep expressions as instructions describing a path through a graph, with assertions about the type of nodes along the way: that a node is of given type, that it has a given attribute, etc. There are also means of expressing sub-conditions, i.e. assertions that a given node is acceptable if a separate expression matches (or does not match) a different path through the graph. Fedora Account System Username: pmachata
rpmlint: dwgrep.src: W: spelling-error Summary(en_US) debuginfo -> debug info, debug-info, debugging dwgrep.src: W: spelling-error %description -l en_US libzwerg -> liberalize dwgrep.src: W: spelling-error %description -l en_US debuginfo -> debug info, debug-info, debugging dwgrep.x86_64: W: spelling-error Summary(en_US) debuginfo -> debug info, debug-info, debugging dwgrep.x86_64: W: spelling-error %description -l en_US libzwerg -> liberalize dwgrep.x86_64: W: spelling-error %description -l en_US debuginfo -> debug info, debug-info, debugging dwgrep-libzwerg.x86_64: W: spelling-error Summary(en_US) debuginfo -> debug info, debug-info, debugging dwgrep-libzwerg.x86_64: W: shared-lib-calls-exit /usr/lib64/libzwerg.so.0.1 exit.5 dwgrep-libzwerg-devel.x86_64: W: only-non-binary-in-usr-lib dwgrep-libzwerg-devel.x86_64: W: no-documentation dwgrep-doc.noarch: W: spelling-error Summary(en_US) libzwerg -> liberalize 6 packages and 1 specfiles checked; 0 errors, 11 warnings. About that exit call in libzwerg, there's no naked call, but: $ dwgrep ./64/libzwerg/libzwerg.so.0.1 -e ' entry (name == "exit") parent @AT_decl_file' /home/petr/proj/dwgrep/64/libzwerg/lexer.cc ... it turns out that one is hidden in flex-generated code. I don't think I can do anything about that.
Added some missing dependencies. New SRPM link is: https://pmachata.fedorapeople.org/dwgrep-0.1-2.fc20.src.rpm
Hi Petr, a couple notes - you should drop the %defattr()s from %files, rpmbuild sets them automagically - similar for rm -rf $BUILDROOT" in %install, rpmbuild takes care of it - my personal preference is having each BuildRequires on its own line, it is easier to track the changes in BRs - add %dir %{_includedir}/libzwerg to %files libzwerg-devel, otherwise the dir will be unowned Nice to see using package's own tool to explain the exit() call :-)
Thanks. Fun little thing with those defattrs. I remember having been corrected that they should be put in a couple years back :) Updated SRPM: https://pmachata.fedorapeople.org/dwgrep-0.1-3.fc20.src.rpm
The way the version is defined is unusual. Why not simply remove %{commit} and use %{version} everywhere instead? Use %license not %doc for COPYING COPYING-LGPLV3. You could also duplicate that in the -devel package, without depending on an implicit dependency. Not strictly necessary, but it would save a few lines to do: make -C build install ... make -C build test Requires: elfutils-devel%{?_isa} = %{version}-%{release} is bad. This makes it impossible to e.g. fix a packaging bug in just one of those packages without requiring a spurious rebuild of the other one. Also elfutils-devel has version 0.160 here, so it actually makes the package uninstallable. I think the "dwgrep-" component in library subpackages is unnecessary. Just call them libzwerg, libzwerg-devel (use %package -n libzwerg, etc.). You must add Provides: bundled(jquery).
(In reply to Zbigniew Jędrzejewski-Szmek from comment #5) > The way the version is defined is unusual. Why not simply remove %{commit} > and use %{version} everywhere instead? Done. This was a remnant of when I started working on the package using an as-yet-untagged GIT tree. > Use %license not %doc for COPYING COPYING-LGPLV3. You could also duplicate Done. > that in the -devel package, without depending on an implicit dependency. I know. I chose not to in accordance with packaging guidelines. > Not strictly necessary, but it would save a few lines to do: > make -C build install ... > > make -C build test I actually like how pushd/popd is used consistently to handle this across sections. > Requires: elfutils-devel%{?_isa} = %{version}-%{release} is bad. This makes Oops, yeah, that's probably too much copy-paste. > I think the "dwgrep-" component in library subpackages is unnecessary. Just > call them libzwerg, libzwerg-devel (use %package -n libzwerg, etc.). Oh, cool, I didn't know this was allowed. > You must add Provides: bundled(jquery). I don't think I bundle jquery. Do I bundle jquery? Thanks for review. I'll push an updated package shortly, spinning a test build now.
(In reply to Petr Machata from comment #6) > I don't think I bundle jquery. Do I bundle jquery? Oh, of course I do, in the Sphinx doco. Will fix this.
Updated package: https://pmachata.fedorapeople.org/dwgrep-0.1-4.fc20.src.rpm Hopefully I didn't miss anything. > that in the -devel package, without depending on an implicit dependency. I actually added them to libzwerg now, since the names are different, it sort of makes more sense this way. -devel still relies on implicit dep.
Two questions: - how is libzwerg headers supposed to be used? Currently it'd be #include <libzwerg/libzwerg.h>. Shouldn't the headers be installed directly in /usr/include, so it is enough to say #include <libzwerg.h>? (Really an upstream question, but still worth answering). - maybe move the documentation from /usr/share/doc/dwgrep-doc/ to /usr/share/doc/dwgrep/html?
Mostly this is modeled after elfutils. I like the idea of keeping the headers of a project together in a directory. libzwerg is also fairly easily extensible, so someone could come up with their own set of words for navigating stuff that they are interested in. They would then naturally use this directory as well. This possibility is somewhat remote, as there is no public API for this, but at some point it likely will be. The whole Dwarf module could then be converted to a separate DSO and provided as an independent module which just uses core libzwerg API. Those are all blue-sky plans though. Near-term there are more pressing issues (see the fairly extensive TODO in the source tarball). A user could pass -I /usr/include/libzwerg if they wish to use the simple inclusion scheme. But the whole API is experimental at this point, and undocumented (unlike the query language itself, which I'd like to keep fairly stable), so this can all change in arbitrary ways. Even though I have symbol versioning in, it will likely not be used seriously until some later release. E.g. note the function named zw_stack_dump_xxx, which is actually exported by the version script. (In reply to Zbigniew Jędrzejewski-Szmek from comment #9) > - maybe move the documentation from /usr/share/doc/dwgrep-doc/ to > /usr/share/doc/dwgrep/html? That makes sense. But wouldn't then dwgrep-doc have to depend on dwgrep?
(In reply to Petr Machata from comment #10) > Mostly this is modeled after elfutils [...] Makes sense. Now that I think about it, keeping even two files in one dir seems nicer. > (In reply to Zbigniew Jędrzejewski-Szmek from comment #9) > > - maybe move the documentation from /usr/share/doc/dwgrep-doc/ to > > /usr/share/doc/dwgrep/html? > > That makes sense. But wouldn't then dwgrep-doc have to depend on dwgrep? They can co-own the directory. Especially owning the same directory (or file) by two subpackages built from the same source packages is totally not an issue. (I think you'll have to add an %exclude %{_pkgdocdir}/html to the master package's %files, because of the way that %doc works.)
OK, I made it as you say. Both the core package and the doc subpackage now own the docdir. Only the subpackage owns and deploys the html though: # rpm -qlp /builddir/rpmbuild/RPMS/x86_64/dwgrep-0.1-5.fc20.x86_64.rpm | grep /doc/ /usr/share/doc/dwgrep /usr/share/doc/dwgrep/NEWS /usr/share/doc/dwgrep/README # rpm -qlp /builddir/rpmbuild/RPMS/noarch/dwgrep-doc-0.1-5.fc20.noarch.rpm | grep /doc/ /usr/share/doc/dwgrep /usr/share/doc/dwgrep/html /usr/share/doc/dwgrep/html/_sources /usr/share/doc/dwgrep/html/_sources/cli.txt [... etc ...] The updated SRPM is at: https://pmachata.fedorapeople.org/dwgrep-0.1-5.fc20.src.rpm
===== 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 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: "GPL (v3.1)", "GPL (v2)", "GPL (v3 or later)", "Unknown or generated". 98 files have unknown license. Detailed output of licensecheck in /var/tmp/1172800-dwgrep/licensecheck.txt GPLv3+ and (GPLv2+ or LGPLv3+) [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]: Package does not own files or directories owned by other packages. Note: Dirs in package are owned also by: /usr/include/libzwerg(dwgrep- libzwerg-devel) [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 10240 bytes in 2 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]: Package requires other packages for directories it uses. [x]: Package must own all directories that it creates. [x]: All build dependencies are listed in BuildRequires, except for any that are listed in the exceptions section of Packaging Guidelines. [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: [-]: 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 libzwerg , libzwerg-devel , dwgrep-doc [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. [x]: %check is present and all tests pass. [x]: 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]: Reviewer should test that the package builds in mock. [x]: Buildroot is not present [x]: Package has no %clean section with rm -rf %{buildroot} (or $RPM_BUILD_ROOT) [x]: Dist tag is present (not strictly required in GL). [x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin. [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: 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: dwgrep-0.1-5.fc22.x86_64.rpm libzwerg-0.1-5.fc22.x86_64.rpm libzwerg-devel-0.1-5.fc22.x86_64.rpm dwgrep-doc-0.1-5.fc22.noarch.rpm dwgrep-0.1-5.fc22.src.rpm dwgrep.x86_64: W: spelling-error Summary(en_US) debuginfo -> debug info, debug-info, debugging dwgrep.x86_64: W: spelling-error %description -l en_US libzwerg -> liberalize dwgrep.x86_64: W: spelling-error %description -l en_US debuginfo -> debug info, debug-info, debugging libzwerg.x86_64: W: spelling-error Summary(en_US) debuginfo -> debug info, debug-info, debugging libzwerg.x86_64: W: shared-lib-calls-exit /usr/lib64/libzwerg.so.0.1 exit.5 libzwerg.x86_64: W: no-documentation libzwerg-devel.x86_64: W: only-non-binary-in-usr-lib libzwerg-devel.x86_64: W: no-documentation dwgrep-doc.noarch: W: spelling-error Summary(en_US) libzwerg -> liberalize dwgrep-doc.noarch: W: wrong-file-end-of-line-encoding /usr/share/doc/dwgrep/html/_static/jquery.js dwgrep.src: W: spelling-error Summary(en_US) debuginfo -> debug info, debug-info, debugging dwgrep.src: W: spelling-error %description -l en_US libzwerg -> liberalize dwgrep.src: W: spelling-error %description -l en_US debuginfo -> debug info, debug-info, debugging dwgrep.src:23: W: unversioned-explicit-provides bundled(jquery) 5 packages and 0 specfiles checked; 0 errors, 14 warnings. Rpmlint (installed packages) ---------------------------- ]0;<mock-chroot><mock-chroot>[root@bupkis /]# rpmlint libzwerg dwgrep libzwerg-devel dwgrep-doc libzwerg.x86_64: W: spelling-error Summary(en_US) debuginfo -> debug info, debug-info, debugging libzwerg.x86_64: W: unused-direct-shlib-dependency /usr/lib64/libzwerg.so.0.1 /lib64/libm.so.6 libzwerg.x86_64: W: shared-lib-calls-exit /usr/lib64/libzwerg.so.0.1 exit.5 libzwerg.x86_64: W: no-documentation dwgrep.x86_64: W: spelling-error Summary(en_US) debuginfo -> debug info, debug-info, debugging dwgrep.x86_64: W: spelling-error %description -l en_US libzwerg -> liberalize dwgrep.x86_64: W: spelling-error %description -l en_US debuginfo -> debug info, debug-info, debugging libzwerg-devel.x86_64: W: only-non-binary-in-usr-lib libzwerg-devel.x86_64: W: no-documentation dwgrep-doc.noarch: W: spelling-error Summary(en_US) libzwerg -> liberalize dwgrep-doc.noarch: W: wrong-file-end-of-line-encoding /usr/share/doc/dwgrep/html/_static/jquery.js 4 packages and 0 specfiles checked; 0 errors, 11 warnings. ]0;<mock-chroot><mock-chroot>[root@bupkis /]# echo 'rpmlint-done:' Requires -------- libzwerg (rpmlib, GLIBC filtered): /sbin/ldconfig libc.so.6()(64bit) libdw.so.1()(64bit) libdw.so.1(ELFUTILS_0.122)(64bit) libdw.so.1(ELFUTILS_0.130)(64bit) libdw.so.1(ELFUTILS_0.143)(64bit) libdw.so.1(ELFUTILS_0.157)(64bit) libdw.so.1(ELFUTILS_0.159)(64bit) libdw.so.1(ELFUTILS_0.160)(64bit) libelf.so.1()(64bit) libelf.so.1(ELFUTILS_1.0)(64bit) libgcc_s.so.1()(64bit) libgcc_s.so.1(GCC_3.0)(64bit) libm.so.6()(64bit) libstdc++.so.6()(64bit) libstdc++.so.6(CXXABI_1.3)(64bit) rtld(GNU_HASH) dwgrep (rpmlib, GLIBC filtered): libc.so.6()(64bit) libdw.so.1()(64bit) libelf.so.1()(64bit) libgcc_s.so.1()(64bit) libgcc_s.so.1(GCC_3.0)(64bit) libm.so.6()(64bit) libstdc++.so.6()(64bit) libstdc++.so.6(CXXABI_1.3)(64bit) libstdc++.so.6(CXXABI_1.3.8)(64bit) libzwerg.so.0.1()(64bit) libzwerg.so.0.1(LIBZWERG_0.1)(64bit) rtld(GNU_HASH) libzwerg-devel (rpmlib, GLIBC filtered): elfutils-devel(x86-64) libzwerg(x86-64) libzwerg.so.0.1()(64bit) dwgrep-doc (rpmlib, GLIBC filtered): Provides -------- libzwerg: libzwerg libzwerg(x86-64) libzwerg.so.0.1()(64bit) libzwerg.so.0.1(LIBZWERG_0.1)(64bit) dwgrep: bundled(jquery) dwgrep dwgrep(x86-64) libzwerg-devel: libzwerg-devel libzwerg-devel(x86-64) dwgrep-doc: dwgrep-doc Source checksums ---------------- https://github.com/pmachata/dwgrep/archive/0.1/dwgrep-0.1.tar.gz : CHECKSUM(SHA256) this package : e5ffc4658f05498df0fd09053e5bb01a490578aa36e29f902a154ec46b2279f8 CHECKSUM(SHA256) upstream package : e5ffc4658f05498df0fd09053e5bb01a490578aa36e29f902a154ec46b2279f8 Generated by fedora-review 0.5.2 (63c24cb) last change: 2014-07-14 Command line :/usr/bin/fedora-review -b 1172800 Buildroot used: fedora-rawhide-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 Package is APPROVED.
Thanks!
New Package SCM Request ======================= Package Name: dwgrep Short Description: A tool for querying Dwarf (debuginfo) graphs Upstream URL: http://pmachata.github.io/dwgrep/ Owners: pmachata Branches: f20 f21 f22 InitialCC:
Git done (by process-git-requests).
dwgrep-0.1-5.fc21 has been submitted as an update for Fedora 21. https://admin.fedoraproject.org/updates/dwgrep-0.1-5.fc21
dwgrep-0.1-5.fc20 has been submitted as an update for Fedora 20. https://admin.fedoraproject.org/updates/dwgrep-0.1-5.fc20
dwgrep-0.1-5.fc21 has been pushed to the Fedora 21 testing repository.
dwgrep fails to build on s390 (32 bit) due the size_t == unsigned long (opposed to the common size_t == unsigned int) problem ... [ 16%] Building CXX object libzwerg/CMakeFiles/LibzwergCore.dir/parser.cc.o cd /builddir/build/BUILD/dwgrep-0.1/build/libzwerg && /usr/bin/c++ -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m31 -march=z9-109 -mtune=z10 -std=c++11 -Wall -Wnon-virtual-dtor -O2 -g -I/builddir/build/BUILD/dwgrep-0.1/libzwerg -I/builddir/build/BUILD/dwgrep-0.1/build -I/builddir/build/BUILD/dwgrep-0.1/build/libzwerg -fPIC -o CMakeFiles/LibzwergCore.dir/parser.cc.o -c /builddir/build/BUILD/dwgrep-0.1/build/libzwerg/parser.cc In file included from /builddir/build/BUILD/dwgrep-0.1/libzwerg/tree.hh:36:0, from parser.yy:35, from parser.yy:30: /builddir/build/BUILD/dwgrep-0.1/libzwerg/constant.hh: In instantiation of 'constant::constant(const T&, const constant_dom*, brevity) [with T = long unsigned int]': parser.yy:475:49: required from here /builddir/build/BUILD/dwgrep-0.1/libzwerg/constant.hh:113:17: error: call of overloaded 'mpz_class(const long unsigned int&)' is ambiguous , m_brv {brv} ^ /builddir/build/BUILD/dwgrep-0.1/libzwerg/constant.hh:113:17: note: candidates are: In file included from /builddir/build/BUILD/dwgrep-0.1/libzwerg/constant.hh:36:0, from /builddir/build/BUILD/dwgrep-0.1/libzwerg/tree.hh:36, from parser.yy:35, from parser.yy:30: /builddir/build/BUILD/dwgrep-0.1/libzwerg/int.hh:75:3: note: mpz_class::mpz_class(int32_t) mpz_class (int32_t value) ^ /builddir/build/BUILD/dwgrep-0.1/libzwerg/int.hh:71:3: note: mpz_class::mpz_class(int64_t) mpz_class (int64_t value) ^ /builddir/build/BUILD/dwgrep-0.1/libzwerg/int.hh:67:3: note: mpz_class::mpz_class(uint32_t) mpz_class (uint32_t value) ^ /builddir/build/BUILD/dwgrep-0.1/libzwerg/int.hh:63:3: note: mpz_class::mpz_class(uint64_t) mpz_class (uint64_t value) ^ /builddir/build/BUILD/dwgrep-0.1/libzwerg/int.hh:61:3: note: constexpr mpz_class::mpz_class(const mpz_class&) mpz_class (mpz_class const &that) = default; ^ make[2]: Leaving directory '/builddir/build/BUILD/dwgrep-0.1/build' /usr/bin/cmake -E cmake_progress_report /builddir/build/BUILD/dwgrep-0.1/build/CMakeFiles 45 [ 16%] Built target TestStub ... for full log please see http://s390.koji.fedoraproject.org/koji/taskinfo?taskID=1682034
Ah, uint32_t is unsigned int, uint64_t is unsigned long long int, but size_t is unsigned int. The mpz_class ctor needs a different set of overloads.
(In reply to Petr Machata from comment #21) > size_t is unsigned int unsigned long int is what I had in mind. Building a fixed package.
dwgrep-0.1-6.fc21 has been pushed to the Fedora 21 stable repository.
dwgrep-0.1-6.fc20 has been pushed to the Fedora 20 stable repository.