Note: This is a public test instance of Red Hat Bugzilla. The data contained within is a snapshot of the live data so any changes you make will not be reflected in the production Bugzilla. Email is disabled so feel free to test any aspect of the site that you want. File any problems you find or give feedback at bugzilla.redhat.com.

Bug 168339

Summary: Review Request: libbinio
Product: [Fedora] Fedora Reporter: Linus Walleij <triad>
Component: Package ReviewAssignee: Ralf Corsepius <rc040203>
Status: CLOSED NEXTRELEASE QA Contact: David Lawrence <dkl>
Severity: medium Docs Contact:
Priority: medium    
Version: rawhideCC: fedora-extras-list
Target Milestone: ---   
Target Release: ---   
Hardware: All   
OS: Linux   
URL: http://libbinio.sourceforge.net/
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2005-10-11 18:51:26 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: 163779    

Description Linus Walleij 2005-09-15 05:25:26 UTC
Spec Name or Url: http://www.df.lth.se/~triad/krad/fc/libbinio.spec
SRPM Name or Url: http://www.df.lth.se/~triad/krad/fc/libbinio-1.3-1.src.rpm

Description:

This binary I/O stream class library presents a platform-independent
way to access binary data streams in C++. The library is hardware 
independent in the form that it transparently converts between the 
different forms of machine-internal binary data representation.
It further employs no special I/O protocol and can be used on
arbitrary binary data sources.

Comment 1 Ralf Corsepius 2005-09-15 06:56:34 UTC
NEEDSWORK:

* BuildRequires:  libstdc++-devel
  ^^^^ This is probably superfluous.

* BuildRequires:  info
  ^^^^ This is probably wrong.
info is an *.info reader. *.infos normally are generated by makeinfo (from the
texinfo packages). Packages complying to the GNU Standards ship prebuilt *.infos
(Which AFAIS applies, here), so neither info nor texinfo should be required for
building.

* %{_includedir}/*.h
I hate packages installing their headers to /usr/include, because they pollute
the system include path. Instead, I recommend to install them to a subdirectory
of /usr/include, e.g.
%configure --includedir=%{_include}/binio
...
%{_includedir}/binio
...

* Your %post script is non functional.
You can't use -p /sbin/ldconfig there because you are trying to install infos at
the same time. You'll have to use something along these lines:

Requires(post): /sbin/ldconfig
Requires(post): /sbin/install-info

%post
/sbin/ldconfig
/sbin/install-info .....

Comment 2 Linus Walleij 2005-09-15 08:32:00 UTC
Thanks for the splendid review Ralf (as always).

New source package is created:
Spec Name or Url: http://www.df.lth.se/~triad/krad/fc/libbinio.spec
SRPM Name or Url: http://www.df.lth.se/~triad/krad/fc/libbinio-1.3-2.src.rpm

The BuildRequires: info was for the /sbin/install-info script that is used
in the build process, I have clarified this by changing it to
BuildRequires: /sbin/install-info. The rest is fixed according to your
comments.

Comment 3 Ville Skyttä 2005-09-15 14:35:04 UTC
Modifying the path where the headers are installed in a package which doesn't  
have a foo-config script or a pkgconfig file (which would adjust to correspond  
with the path where the headers are actually installed in the package) causes  
annoying extra work for packagers and others using such a -devel package,  
needs special treatment in all dependent packages, and should be thus strongly  
discouraged IMO.  If there's a foo-config or a *.pc file that would reflect  
the change, it'd be ok. 
 
On a related note, could add "|| :" at the end of those install-info commands 
in order to support --excludedocs installs. 

Comment 4 Ralf Corsepius 2005-09-15 19:07:23 UTC
(In reply to comment #3)
> Modifying the path where the headers are installed in a package which doesn't  
> have a foo-config script or a pkgconfig file (which would adjust to correspond  
> with the path where the headers are actually installed in the package) causes  
> annoying extra work for packagers and others using such a -devel package,  
What is so difficult to use
gcc -I/usr/include/binio .... ?!?

> needs special treatment in all dependent packages, and should be thus strongly  
> discouraged IMO.
I could not disagree more. IMO, all packages which install header files directly
to /usr/include are badly designed considered to be rejected.

Comment 5 Ville Skyttä 2005-09-15 19:54:37 UTC
(In reply to comment #4) 
> What is so difficult to use 
> gcc -I/usr/include/binio .... ?!? 
 
Well, it wouldn't be difficult to install the libs (or eg. "gcc", or whatever) 
into a custom path and to ask everyone to deal with it either.  That doesn't 
make it the right thing to do. 
 
See comment 3.  When done _by a packager on "IMO" basis_, it's (most likely, 
unchecked in this particular case) completely unnecessary, bloats dependent 
packages, possible maintenance burden, results in projects needing distro 
specific adaptations, not what upstream intended, and unexpected in general. 
 
I didn't say that dropping everything into /usr/include is optimal either.  
But non-transparent changes like this should not be made unilaterally by 
packagers, but rather reported/fixed upstream (preferably fixing it with a 
foo-config and/or a pkgconfig file) if something causes real world problems, 
or if someone cares deeply enough about it otherwise and can convince 
upstream. 

Comment 6 Linus Walleij 2005-09-15 20:48:00 UTC
OK then, two mentors say different things and I get to decide. Ville wrote
large parts of the Maximum RPM book so his karma is better, and I therefore
restore the .h files to the %{_includedir}.

New source package is created:
Spec Name or Url: http://www.df.lth.se/~triad/krad/fc/libbinio.spec
SRPM Name or Url: http://www.df.lth.se/~triad/krad/fc/libbinio-1.3-3.src.rpm

These magic "|| :" things - if I am correctly informed it is just a
way of using bash operators to avoid stop of the execution flow.
Isn't there something less magic than this "|| :" for example an
environment variable that can be IF:ed like this:

if [ $excludedocs = 1 ]; then
/sbin/install-info ....
fi

I have however added them so you can safely install with --excludedocs.
Am I approved then...

Comment 7 Ralf Corsepius 2005-09-16 02:33:07 UTC
(In reply to comment #5)
> (In reply to comment #4) 
> > What is so difficult to use 
> > gcc -I/usr/include/binio .... ?!? 
>  
> Well, it wouldn't be difficult to install the libs (or eg. "gcc", or whatever) 
> into a custom path and to ask everyone to deal with it either. 
GCC already does do this automatically ;)

> See comment 3.  When done _by a packager on "IMO" basis_, it's (most likely, 
> unchecked in this particular case) completely unnecessary, bloats dependent 
> packages, possible maintenance burden, results in projects needing distro 
> specific adaptations, not what upstream intended, and unexpected in general. 
BS - All packaging is based technical requirements AND on personal views.
Also, it's packagers who package set the per-package conventions for each
package. And it's the package users who have to adopt these per-package conventions.

> I didn't say that dropping everything into /usr/include is optimal either.
> But non-transparent changes like this should not be made unilaterally by 
> packagers, but rather reported/fixed upstream (preferably fixing it with a 
> foo-config and/or a pkgconfig file) if something causes real world problems, 

Any file in /usr/include causes real problems, because any file in /usr/include
* is likely to clash with standards (POSIX etc.)
* is likely to clash with other packages (other packages shipping headers with
the same name)
* prevents parallel installation.
* /usr/include is a privileged directory (system include directory) and is
treated special by compilers (secondary include path).

> or if someone cares deeply enough about it otherwise and can convince 
> upstream. 
If something clashes, it's too late for upstream to change.

Also, the main reason, why packages install headers into /usr/include is the
developers typically installing packages into private directories or into per
package directories, but not systemwide.

I will not approve any package which installs headers directly to /usr/include.

Comment 8 Linus Walleij 2005-09-16 10:33:16 UTC
OK so how are these disputes normally resolved?

I have no problem with doing what Ralf says, because the package that
I am creating to use libbinio do not complain about having its headers
in /include/binio so that is OK with me.

Ralf says he will veto against this package unless I do so, so Ville,
will you also veto against it in case I do so that it is a catch22
situation, or can you live with that I follow Ralfs demand?

Will it be brought up to the steering committe othwerwise?

Comment 9 Linus Walleij 2005-09-16 19:20:37 UTC
Sorry Ralf if I was misreading the diplomatic tone of considering vetos...
Anyway, I propose the following solution:

1. There is a new package,
   http://www.df.lth.se/~triad/krad/fc/libbinio-1.3-4.src.rpm
   which restores the relocation to %{_includedir}/binio

2. I will only build this for devel and FC-4 due to problems with GCC
   3.x (it does not descend into subdirs for finding headers, which means
   it would need lots of #include <foo.h> to be patched to 
   #include <binio/foo.h>). When upstream fixes this problem, we will
   consider packages for FC-3 and below to be built.

3. I will notify upstream that we want this to be default behaviour,
   if it is easy enough, I will also prepare a patch.

4. Ralf approves the package for devel and FC-4.

Is everybody happy with this solution?

Comment 10 Linus Walleij 2005-09-16 19:47:34 UTC
Upstream has been notified on the issue, see:
http://sourceforge.net/tracker/index.php?func=detail&aid=1293200&group_id=69728&atid=525584

Comment 11 Michael Schwendt 2005-09-17 09:00:16 UTC
I don't understand point 2.  First of all, any program which uses libbinio
ought to use '#include "binio/foo.h"' or '#include <binio/foo.h>"' anyway,
emphasising that these are non-standard headers. Else the fun starts when
the headers are installed into %_includedir/binio on one distribution and
%_includedir/libbinio on another one.
Secondly, for any version of GCC to find the headers in %_includedir/binio,
you need to add %_includedir/binio to the compiler's search path list, i.e.
-I/usr/include/binio for any programs which do '#include <binfile.h>',
pretending that it would be a standard header or a header in standard
search path.

As a another voice in this matter, I consider any program which cannot
be configured easily to extend the search path list for headers as broken.
You should always be able to build a program with libbinio installed into
/home/foo/libbinio/include (and /home/foo/libbinio/lib), for instance,
without having to do apply a lot of patch-work.


Comment 12 Ville Skyttä 2005-09-17 09:46:21 UTC
I'm not going to veto this change, but my opinion has not changed, and in any 
case, I suggest waiting for upstream comments before approving/pushing the 
package..
 
Re comment 6: 
 
- s/large parts/some bits here and there/ 
 
- "|| :" like in this case is just a cheap, generic way to ensure that the 
%post* etc scriptlet does not fail.  I'm not aware of a way to specifically 
detect an --excludedocs install.  One could check if the %{_infodir}/foo.info* 
files exist before invoking install-info on them though, but IMO "|| :" is 
very much sufficient in this case. 
 
Re comment 7: 
 
Forcing end users to adapt to per-package decisions instead of making things 
Just Work as expected out of the box significantly decreases the value of 
packaged software. 

Comment 13 Linus Walleij 2005-09-18 14:11:41 UTC
The problem with this package has been fixed, due to the much responsive
and understanding upstream author named Simon Peter. libbinio now installs
headers in %{_includedir}/libbinio/ (not binio - there is according to Simon
already an (much outdated) GNU package with this name).

The new upstream release also adds a pkgconfig libbinio.pc file to the
%{_libdir}/pkgconfig directory.

New package and SPEC:
Spec Name or Url: http://www.df.lth.se/~triad/krad/fc/libbinio.spec
SRPM Name or Url: http://www.df.lth.se/~triad/krad/fc/libbinio-1.4-1.src.rpm

Another quality fix suggested by the Fedora project! Everybody should 
be happy now. (Atleast for the time being.)

Comment 14 Ralf Corsepius 2005-09-18 14:21:03 UTC
(In reply to comment #13)
> New package and SPEC:
> Spec Name or Url: http://www.df.lth.se/~triad/krad/fc/libbinio.spec

%{_includedir}/%{name}/*.h
^^^
this should be 
%{_includedir}/%{name}


Comment 15 Linus Walleij 2005-09-18 14:49:44 UTC
Uh um I don't quite get it but does that syntax mean "own the directory and
everything in it" then I broke it down to the more obvious:

%dir %{_includedir}/%{name}
%{_includedir}/%{name}/*.h

Is this OK?
Spec Name or Url: http://www.df.lth.se/~triad/krad/fc/libbinio.spec
SRPM Name or Url: http://www.df.lth.se/~triad/krad/fc/libbinio-1.4-2.src.rpm


Comment 16 Michael Schwendt 2005-09-18 15:33:11 UTC
> %dir %{_includedir}/%{name}
> %{_includedir}/%{name}/*.h

Right.

Where you want to include the directory and its contents recursively,
the following one is a good recommendation:

%{_datadir}/%{name}/

The slash at the end makes it more clear that it is a directory and
not just a file.

Comment 17 Linus Walleij 2005-09-19 18:43:00 UTC
Could this be approved then?

Comment 18 Linus Walleij 2005-09-21 11:37:06 UTC
All NEEDSWORK on this package has, to the best of my knowledge, been
completed. Would someone please approve it?

Comment 19 Linus Walleij 2005-09-27 11:22:59 UTC
Would someone like to FE-ACCEPT (Approve) this package now?

Comment 20 Ralf Corsepius 2005-09-27 13:09:19 UTC
(In reply to comment #19)
> Would someone like to FE-ACCEPT (Approve) this package now?
First of all, you can't push me or any body else around here - Most of us are 
volunteers and probably only very few are being paid, so .. patience please ;)

Anyway, further comments:

There still are blocking issues:

1. the /usr/share/info/dir entry being produced by the *.texi is broken. 
(Try "info libbinio" and try to enter the libbinio node).

A fix to the sources would be this patch and to regenerate the info files:

diff -ur libbinio-1.4.orig/doc/libbinio.texi libbinio-1.4/doc/libbinio.texi
--- libbinio-1.4.orig/doc/libbinio.texi 2004-08-18 21:49:11.000000000 +0200
+++ libbinio-1.4/doc/libbinio.texi      2005-09-27 14:43:23.000000000 +0200
@@ -27,7 +27,7 @@

 @dircategory Software Libraries
 @direntry
-* libbinio: (libbinio)          Binary I/O stream class library @value{VERSION}
+* libbinio: (libbinio).         Binary I/O stream class library @value{VERSION}
 @end direntry

 @titlepage

2. The info files are developer docs, so they should better be packaged into the
*-devel package.

3. The pkgconfig file is non-functional:
# pkg-config --libs libbinio
Unknown keyword 'URL' in '/usr/lib/pkgconfig/libbinio.pc'


Non blocking issues:

* IMO, this is questionable design:
# pkg-config --cflags libbinio
-I/usr/include/libbinio

Is this really what upstream wants?

* Has this code been tested on big endian targets?

Comment 21 Linus Walleij 2005-09-27 13:36:40 UTC
Well, yeah sorry Ralf, patience is not my strong side. Curiously
enough it worked this time ;-)

I had this idea that once I have been submitted my first error-free 
package I would take on reviewing packages myself so more things get 
done. I know you're all volunteers. I try to be polite but whenever I 
fail feel free to correct me (as you did).

Anyway, I filed bugs upstream with your comments for (1) and (3) so let's 
hope it gets fixed.
http://sourceforge.net/tracker/index.php?func=detail&aid=1305865&group_id=69728&atid=525584
http://sourceforge.net/tracker/index.php?func=detail&aid=1305853&group_id=69728&atid=525584

The (2) issue is fixed but I'll wait for upstream and 
(hopefully) fix them all in next package.

Comment 22 Linus Walleij 2005-09-28 14:05:49 UTC
Comment on (3) from upstream:

>Comment By: Simon Peter (dynamite)
Date: 2005-09-28 12:54

Message:
Logged In: YES
user_id=31101

The pkgconfig file works here:
# pkg-config --libs libbinio
-L/home/simon/lib -lbinio

I'm using version 0.19 of pkg-config. I got the URL keyword
directly from the example in the manpage of pkg-config.

For the second point, I made cflags point to
/usr/include/libbinio for backwards compatibility. If i
would make it point to /usr/include and use #include
<libbinio/binio.h> instead, i would have to change all my
other software for the new include path. I don't know if
this is what Ralf meant.


Comment 23 Ralf Corsepius 2005-09-29 02:00:30 UTC
(In reply to comment #22)

> The pkgconfig file works here:
> # pkg-config --libs libbinio
> -L/home/simon/lib -lbinio
> 
> I'm using version 0.19 of pkg-config.
FC4 ships pkgconfig-0.15.0-6

=> Either upstream should not use "URL:"
or Linus should patch libbinio.pc
or libbinio-devel should Require: pkgconfig >= 0.19 (I.e. the package could not
be shipped for FC4)

> For the second point, I made cflags point to
> /usr/include/libbinio for backwards compatibility. If i
> would make it point to /usr/include and use #include
> <libbinio/binio.h> instead, i would have to change all my
> other software for the new include path. I don't know if
> this is what Ralf meant.
Yes, this is one point, I was referring to, but this is your (upstream's) decision.

Comment 24 Linus Walleij 2005-09-29 10:46:24 UTC
I will make a patch to remove the URL directive and once imported 
into the Extras I will consider reenabling the URL: directive for 
the devel version if and when it ships with a sufficiently new 
pkg-config. As for now it will be turned off.

A new package with all fixes is due soon.

Comment 25 Linus Walleij 2005-10-01 20:58:55 UTC
Here is a fixed spec and SRPM package:

Spec Name or Url: http://www.df.lth.se/~triad/krad/fc/libbinio.spec
SRPM Name or Url: http://www.df.lth.se/~triad/krad/fc/libbinio-1.4-3.src.rpm

(1) Texinfo file patched until upstream is fixed
(2) Texinfo files moved to devel package, along with the texinfo scriptlets
(3) Pkgconfig-file is patched to not used URL token for the time being


Comment 26 Ralf Corsepius 2005-10-06 16:36:39 UTC
You are patching the *.texinfo. Therefore you should 
BR: makeinfo
otherwise the *infos will not be regenerated.


Comment 27 Linus Walleij 2005-10-06 17:19:14 UTC
OK Ralf sorry for that real obvious thing. Here is a fixed package:

Spec Name or Url: http://www.df.lth.se/~triad/krad/fc/libbinio.spec
SRPM Name or Url: http://www.df.lth.se/~triad/krad/fc/libbinio-1.4-4.src.rpm

Comment 28 Ralf Corsepius 2005-10-07 17:47:46 UTC
I am still having doubts if this package works on big-endian targets, but the
packaging seems to be fine, now.

APPROVED

Comment 29 Linus Walleij 2005-10-11 18:51:26 UTC
OK imported and builds. Thanks Ralf, and the others.