Bug 1122073

Summary: Review Request: ocaml-labltk - Tcl/Tk interface for OCaml
Product: [Fedora] Fedora Reporter: Richard W.M. Jones <rjones>
Component: Package ReviewAssignee: Jerry James <loganjerry>
Status: CLOSED RAWHIDE QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: medium    
Version: rawhideCC: hannsj_uhl, loganjerry, package-review
Target Milestone: ---Flags: loganjerry: fedora-review+
gwync: fedora-cvs+
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2014-07-22 19:20:10 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1451304    

Description Richard W.M. Jones 2014-07-22 13:22:23 UTC
Spec URL: http://oirase.annexia.org/reviews/labltk/ocaml-labltk.spec
SRPM URL: http://oirase.annexia.org/reviews/labltk/ocaml-labltk-4.02-0.1.beta1.fc20.src.rpm
Description: Tcl/Tk interface for OCaml
Fedora Account System Username: rjones

Comment 1 Richard W.M. Jones 2014-07-22 13:24:18 UTC
rpmlint (minus the "spelling errors") is:

ocaml-labltk.src:48: W: configure-without-libdir-spec

The configure script supplied upstream is not an autoconf script.

ocaml-labltk.x86_64: W: no-manual-page-for-binary labltk
ocaml-labltk-devel.x86_64: W: no-manual-page-for-binary ocamlbrowser

No man pages are supplied upstream.

ocaml-labltk-devel.x86_64: W: doc-file-dependency /usr/share/doc/ocaml-labltk-devel/examples_labltk/hello.tcl /usr/bin/wish

This directory contains code examples, one of which is a Tcl file
which uses the Tk shell (wish).  We could make this non-executable,
but then people wouldn't be able to directly run it, which seems like
a regression for people who want to try out the software.

Comment 2 Richard W.M. Jones 2014-07-22 13:35:09 UTC
Koji scratch build:

http://koji.fedoraproject.org/koji/taskinfo?taskID=7177727

Comment 3 Richard W.M. Jones 2014-07-22 13:36:40 UTC
There is no license file .. I have asked upstream to do
something about that.  However the individual source files
mostly have a notice saying

(*   This file is distributed under the terms of the GNU Library         *)
(*   General Public License, with the special exception on linking       *)
(*   described in file ../../../LICENSE.                                 *)

Since this code was recently ripped out of the compiler, where
it was `LGPLv2+ with exceptions', that's how I'm interpreting the
license at the moment.

Comment 4 Jerry James 2014-07-22 15:25:44 UTC
Issues:
1. A few of the ocamlc/ocamlopt invocations supply -g, but most do not, which
   limits the usefulness of the debuginfo.
2. The main package owns %{_bindir}/labltk, which invokes
   %{_libdir}/ocaml/labltk/labltktop, but the latter is owned by the -devel
   subpackage.  The two should be in the same package.

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]: Development (unversioned) .so files in -devel subpackage, if present.
[x]: Package does not contain any libtool archives (.la)
[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.
[-]: If (and only if) the source package includes the text of the license(s)
     in its own file, then that file, containing the text of the license(s)
     for the package is included in %doc.
[x]: License field in the package spec file matches the actual license.
[!]: License file installed when any subpackage combination is installed.
     Upstream has been queried, so this is okay for now.
[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.
[!]: Useful -debuginfo package or justification otherwise.
     Somewhat useful, but not as useful as it could be if -g were used more
     consistently.
[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 327680 bytes in 34 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]: Package does not own files or directories owned by other packages.
[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

Ocaml:
[x]: This should never happen

===== 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).
[x]: Package functions as described.
[x]: Latest version is packaged.
[x]: Package does not include license text files separate from upstream.
[-]: Description and summary sections in the package spec file contains
     translations for supported Non-English languages, if available.
[?]: Package should compile and build into binary rpms on all supported
     architectures.
[!]: %check is present and all tests pass.
     Upstream has not provided a test suite, so this is okay.
[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]: Fully versioned dependency in subpackages if applicable.
[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: ocaml-labltk-4.02-0.1.beta1.fc22.x86_64.rpm
          ocaml-labltk-devel-4.02-0.1.beta1.fc22.x86_64.rpm
          ocaml-labltk-4.02-0.1.beta1.fc22.src.rpm
ocaml-labltk.x86_64: W: spelling-error Summary(en_US) Tcl -> Tc, Tl, Cl
ocaml-labltk.x86_64: W: spelling-error %description -l en_US mlTk -> milt
ocaml-labltk.x86_64: W: no-manual-page-for-binary labltk
ocaml-labltk-devel.x86_64: W: spelling-error Summary(en_US) Tcl -> Tc, Tl, Cl
ocaml-labltk-devel.x86_64: W: spelling-error %description -l en_US mlTk -> milt
ocaml-labltk-devel.x86_64: W: no-manual-page-for-binary ocamlbrowser
ocaml-labltk-devel.x86_64: W: doc-file-dependency /usr/share/doc/ocaml-labltk-devel/examples_labltk/hello.tcl /usr/bin/wish
ocaml-labltk.src: W: spelling-error Summary(en_US) Tcl -> Tc, Tl, Cl
ocaml-labltk.src: W: spelling-error %description -l en_US mlTk -> milt
ocaml-labltk.src:48: W: configure-without-libdir-spec
3 packages and 0 specfiles checked; 0 errors, 10 warnings.




Rpmlint (installed packages)
----------------------------
# rpmlint ocaml-labltk ocaml-labltk-devel
ocaml-labltk.x86_64: W: spelling-error Summary(en_US) Tcl -> Tc, Tl, Cl
ocaml-labltk.x86_64: W: spelling-error %description -l en_US mlTk -> milt
ocaml-labltk.x86_64: W: no-manual-page-for-binary labltk
ocaml-labltk-devel.x86_64: W: spelling-error Summary(en_US) Tcl -> Tc, Tl, Cl
ocaml-labltk-devel.x86_64: W: spelling-error %description -l en_US mlTk -> milt
ocaml-labltk-devel.x86_64: W: no-manual-page-for-binary ocamlbrowser
ocaml-labltk-devel.x86_64: W: doc-file-dependency /usr/share/doc/ocaml-labltk-devel/examples_labltk/hello.tcl /usr/bin/wish
2 packages and 0 specfiles checked; 0 errors, 7 warnings.
# echo 'rpmlint-done:'



Requires
--------
ocaml-labltk (rpmlib, GLIBC filtered):
    /bin/sh
    libX11.so.6()(64bit)
    libc.so.6()(64bit)
    libtcl8.6.so()(64bit)
    libtk8.6.so()(64bit)
    ocaml(Arg)
    ocaml(Array)
    ocaml(ArrayLabels)
    ocaml(Bell)
    ocaml(Buffer)
    ocaml(Button)
    ocaml(BytesLabels)
    ocaml(CBell)
    ocaml(CButton)
    ocaml(CCanvas)
    ocaml(CCheckbutton)
    ocaml(CClipboard)
    ocaml(CDialog)
    ocaml(CEncoding)
    ocaml(CEntry)
    ocaml(CFocus)
    ocaml(CFont)
    ocaml(CFrame)
    ocaml(CGrab)
    ocaml(CGrid)
    ocaml(CImage)
    ocaml(CImagebitmap)
    ocaml(CImagephoto)
    ocaml(CLabel)
    ocaml(CListbox)
    ocaml(CMenu)
    ocaml(CMenubutton)
    ocaml(CMessage)
    ocaml(COption)
    ocaml(COptionmenu)
    ocaml(CPack)
    ocaml(CPalette)
    ocaml(CPixmap)
    ocaml(CPlace)
    ocaml(CRadiobutton)
    ocaml(CResource)
    ocaml(CScale)
    ocaml(CScrollbar)
    ocaml(CSelection)
    ocaml(CText)
    ocaml(CTk)
    ocaml(CTkvars)
    ocaml(CTkwait)
    ocaml(CToplevel)
    ocaml(CWinfo)
    ocaml(CWm)
    ocaml(Callback)
    ocaml(CamlinternalFormatBasics)
    ocaml(Camltk)
    ocaml(Camltkwrap)
    ocaml(Canvas)
    ocaml(Char)
    ocaml(Checkbutton)
    ocaml(Clipboard)
    ocaml(Condition)
    ocaml(Dialog)
    ocaml(Encoding)
    ocaml(Entry)
    ocaml(Fileevent)
    ocaml(Filename)
    ocaml(Focus)
    ocaml(Font)
    ocaml(Frame)
    ocaml(Gc)
    ocaml(Grab)
    ocaml(Grid)
    ocaml(Hashtbl)
    ocaml(Image)
    ocaml(Imagebitmap)
    ocaml(Imagephoto)
    ocaml(Int32)
    ocaml(Label)
    ocaml(List)
    ocaml(ListLabels)
    ocaml(Listbox)
    ocaml(Menu)
    ocaml(Menubutton)
    ocaml(Message)
    ocaml(Mutex)
    ocaml(Nativeint)
    ocaml(Obj)
    ocaml(Option)
    ocaml(Optionmenu)
    ocaml(Pack)
    ocaml(Palette)
    ocaml(Pervasives)
    ocaml(Pixmap)
    ocaml(Place)
    ocaml(Printexc)
    ocaml(Printf)
    ocaml(Protocol)
    ocaml(Queue)
    ocaml(Radiobutton)
    ocaml(Rawwidget)
    ocaml(Scale)
    ocaml(Scrollbar)
    ocaml(Selection)
    ocaml(Set)
    ocaml(Sort)
    ocaml(StdLabels)
    ocaml(Str)
    ocaml(String)
    ocaml(StringLabels)
    ocaml(Support)
    ocaml(Sys)
    ocaml(Text)
    ocaml(Textvariable)
    ocaml(Thread)
    ocaml(Timer)
    ocaml(Tk)
    ocaml(Tkvars)
    ocaml(Tkwait)
    ocaml(Toplevel)
    ocaml(Unix)
    ocaml(UnixLabels)
    ocaml(Widget)
    ocaml(Winfo)
    ocaml(Wm)
    ocaml(runtime)
    rtld(GNU_HASH)

ocaml-labltk-devel (rpmlib, GLIBC filtered):
    /usr/bin/ocamlrun
    /usr/bin/wish
    ocaml-labltk(x86-64)



Provides
--------
ocaml-labltk:
    ocaml(Balloon)
    ocaml(Bell)
    ocaml(Button)
    ocaml(CBell)
    ocaml(CButton)
    ocaml(CCanvas)
    ocaml(CCheckbutton)
    ocaml(CClipboard)
    ocaml(CDialog)
    ocaml(CEncoding)
    ocaml(CEntry)
    ocaml(CFocus)
    ocaml(CFont)
    ocaml(CFrame)
    ocaml(CGrab)
    ocaml(CGrid)
    ocaml(CImage)
    ocaml(CImagebitmap)
    ocaml(CImagephoto)
    ocaml(CLabel)
    ocaml(CListbox)
    ocaml(CMenu)
    ocaml(CMenubutton)
    ocaml(CMessage)
    ocaml(COption)
    ocaml(COptionmenu)
    ocaml(CPack)
    ocaml(CPalette)
    ocaml(CPixmap)
    ocaml(CPlace)
    ocaml(CRadiobutton)
    ocaml(CResource)
    ocaml(CScale)
    ocaml(CScrollbar)
    ocaml(CSelection)
    ocaml(CText)
    ocaml(CTk)
    ocaml(CTkvars)
    ocaml(CTkwait)
    ocaml(CToplevel)
    ocaml(CWinfo)
    ocaml(CWm)
    ocaml(Camltk)
    ocaml(Camltkwrap)
    ocaml(Canvas)
    ocaml(Checkbutton)
    ocaml(Clipboard)
    ocaml(Dialog)
    ocaml(Encoding)
    ocaml(Entry)
    ocaml(Fileevent)
    ocaml(Fileselect)
    ocaml(Focus)
    ocaml(Font)
    ocaml(Frame)
    ocaml(Frx_after)
    ocaml(Frx_color)
    ocaml(Frx_ctext)
    ocaml(Frx_dialog)
    ocaml(Frx_entry)
    ocaml(Frx_fillbox)
    ocaml(Frx_fit)
    ocaml(Frx_focus)
    ocaml(Frx_font)
    ocaml(Frx_listbox)
    ocaml(Frx_mem)
    ocaml(Frx_misc)
    ocaml(Frx_req)
    ocaml(Frx_rpc)
    ocaml(Frx_selection)
    ocaml(Frx_synth)
    ocaml(Frx_text)
    ocaml(Frx_widget)
    ocaml(Grab)
    ocaml(Grid)
    ocaml(Image)
    ocaml(Imagebitmap)
    ocaml(Imagephoto)
    ocaml(Jpf_font)
    ocaml(Label)
    ocaml(Labltk)
    ocaml(Listbox)
    ocaml(Menu)
    ocaml(Menubutton)
    ocaml(Message)
    ocaml(Option)
    ocaml(Optionmenu)
    ocaml(Pack)
    ocaml(Palette)
    ocaml(Pixmap)
    ocaml(Place)
    ocaml(Protocol)
    ocaml(Radiobutton)
    ocaml(Rawwidget)
    ocaml(Scale)
    ocaml(Scrollbar)
    ocaml(Selection)
    ocaml(Shell)
    ocaml(Support)
    ocaml(Text)
    ocaml(Textvariable)
    ocaml(Timer)
    ocaml(Tk)
    ocaml(Tkthread)
    ocaml(Tkvars)
    ocaml(Tkwait)
    ocaml(Toplevel)
    ocaml(Widget)
    ocaml(Winfo)
    ocaml(Wm)
    ocaml-labltk
    ocaml-labltk(x86-64)

ocaml-labltk-devel:
    ocaml-labltk-devel
    ocaml-labltk-devel(x86-64)



Unversioned so-files
--------------------
ocaml-labltk: /usr/lib64/ocaml/stublibs/dlllabltk.so

Source checksums
----------------
https://forge.ocamlcore.org/frs/download.php/1409/labltk-4.02-beta1.tar.gz :
  CHECKSUM(SHA256) this package     : 9c6d6424c3d03870c0f533c365966a7df9039549e8660cd7cb7176c8a708bc66
  CHECKSUM(SHA256) upstream package : 9c6d6424c3d03870c0f533c365966a7df9039549e8660cd7cb7176c8a708bc66


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

Comment 5 Richard W.M. Jones 2014-07-22 15:55:13 UTC
Thanks for the review.

This package should be better:

* Tue Jul 22 2014 Richard W.M. Jones <rjones> - 4.02-0.2.beta1       
- Enable debugging.                                                             
- Move labltk to -devel package.                                               
- Enable _smp_flags.                                                            

I thought it was better to move labltk (which is essentially a
development tool) into the -devel package.  It would be possible
to move labltktop to the main package, but I think it's better to
encourage developers to install the full development package.  There
are arguments both ways.

Also I checked that the debuginfo package now contains debug info.

Spec URL: http://oirase.annexia.org/reviews/labltk/ocaml-labltk.spec
SRPM URL: http://oirase.annexia.org/reviews/labltk/ocaml-labltk-4.02-0.2.beta1.fc20.src.rpm

Comment 6 Jerry James 2014-07-22 16:37:30 UTC
Actually, the debuginfo package now contains exactly the same debug info that it did before; namely, debuginfo for the C sources.  There is still no debuginfo for the ocaml sources.  I think that's because labltk builds cma files, not cmxs files, right?  But at least this way the debuginfo should be embedded in the cma files, which may help (but probably not, since the ocaml source files are not in the debuginfo package).

Related problem:
/usr/bin/ocamlmklib -g -ocamlc '/usr/bin/ocamlc -g' ...
Unknown option -g

Ocamlmklib itself doesn't understand -g, although it can pass that flag on to other tools.  This is a non-fatal warning, so I'll leave it up to you whether you want to fix it before importing the package.

I see nothing that should block this package from going forward, so it is APPROVED.

Comment 7 Richard W.M. Jones 2014-07-22 17:59:42 UTC
The debuginfo thing is puzzling.  However it's not a general problem
with the new compiler since other packages (eg. ocaml-gettext) have
debuginfo for *.ml files.

Comment 8 Richard W.M. Jones 2014-07-22 18:00:53 UTC
New Package SCM Request
=======================
Package Name: ocaml-labltk
Short Description: Tcl/Tk interface for OCaml
Upstream URL: https://forge.ocamlcore.org/projects/labltk/
Owners: rjones
Branches: 
InitialCC:

Comment 9 Gwyn Ciesla 2014-07-22 18:49:37 UTC
Git done (by process-git-requests).

Comment 10 Richard W.M. Jones 2014-07-22 19:20:10 UTC
I have kicked off a build.  Thanks Jerry for the detailed review.

http://koji.fedoraproject.org/koji/taskinfo?taskID=7182125