Discussion:
Overeager cleaning of -devel provides
Per Øyvind Karlsen
2013-07-30 18:00:26 UTC
Permalink
Hi!

I notice that some people must've been a bit too eager in cleaning -devel
provides, ie. if you look at the following:
$ rpm -q --provides lib64glib2.0-devel
devel(libgio-2.0(64bit))
devel(libglib-2.0(64bit))
devel(libgmodule-2.0(64bit))
devel(libgobject-2.0(64bit))
devel(libgthread-2.0(64bit))
pkgconfig(gio-2.0) = 2.36.3
pkgconfig(gio-unix-2.0) = 2.36.3
pkgconfig(glib-2.0) = 2.36.3
pkgconfig(gmodule-2.0) = 2.36.3
pkgconfig(gmodule-export-2.0) = 2.36.3
pkgconfig(gmodule-no-export-2.0) = 2.36.3
pkgconfig(gobject-2.0) = 2.36.3
pkgconfig(gthread-2.0) = 2.36.3
lib64glib2.0-devel = 1:2.36.3-2:2013.0

The package lacks any canonical provides with release provided, ie. it
becomes impossible to add any versioned dependencies on a canonical
provides with release in it.

In the past this package had the canonical glib2-devel provides with both
version & release provided for it, it would be nice if this could be added
back and also if people could always leave at least one canonical provides
like this in -devel packages.

Thx!

--
Regards,
Per Øyvind
Jeffrey Johnson
2013-07-30 20:07:28 UTC
Permalink
Post by Per Øyvind Karlsen
lib64glib2.0-devel = 1:2.36.3-2:2013.0
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Post by Per Øyvind Karlsen
The package lacks any canonical provides with release provided, ie. it becomes impossible to add any versioned dependencies on a canonical provides with release in it.
What exactly is a "canonical provide with release" if not the above?
Post by Per Øyvind Karlsen
In the past this package had the canonical glib2-devel provides with both version & release provided for it, it would be nice if this could be added back and also if people could always leave at least one canonical provides like this in -devel packages.
As long as package re-re-re-re-naming exists, then everyone
will need an advanced degree and a metric tonne of packaging
guidelines at hand to cite to simply understand what you are
talking about.

KISS is always simpler.

Increasingly package NEVRDd are a bleary toxic smog of obfuscation
for no purpose other than to carp and nit-pick.

JMHO, YMMV

73 de Jeff
David Walser
2013-07-30 22:26:03 UTC
Permalink
________________________________
Sent: Tuesday, July 30, 2013 4:07 PM
Subject: Re: [Cooker] Overeager cleaning of -devel provides
Post by Per Øyvind Karlsen
lib64glib2.0-devel = 1:2.36.3-2:2013.0
   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Post by Per Øyvind Karlsen
The package lacks any canonical provides with release provided, ie. it becomes impossible to add any versioned dependencies on a canonical provides with release in it.
What exactly is a "canonical provide with release" if not the above?
It certainly is not.  It's not what Per Øyvind is asking for.  It's not a provides, it's just the name of the package itself.  It's also certainly not something you can use as a BuildRequires, because it's arch-dependent.  The provides Per Øyvind is talking about are arch-independent.
Jeffrey Johnson
2013-07-30 23:52:04 UTC
Permalink
I asked for information regarding what Per Oyvind *is* looking for: there is no meaning of "canonical" that I understand of the actual package name Provides: that is always added by rpm isn't sufficient.

Telling me that isn't what Per Oyvind is looking for helps nothing whatsoever.

73 de Jeff

Sent from my iPhone
________________________________
Sent: Tuesday, July 30, 2013 4:07 PM
Subject: Re: [Cooker] Overeager cleaning of -devel provides
Post by Per Øyvind Karlsen
lib64glib2.0-devel = 1:2.36.3-2:2013.0
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Post by Per Øyvind Karlsen
The package lacks any canonical provides with release provided, ie. it becomes impossible to add any versioned dependencies on a canonical provides with release in it.
What exactly is a "canonical provide with release" if not the above?
It certainly is not. It's not what Per Øyvind is asking for. It's not a provides, it's just the name of the package itself. It's also certainly not something you can use as a BuildRequires, because it's arch-dependent. The provides Per Øyvind is talking about are arch-independent.
Per Øyvind Karlsen
2013-07-30 23:59:31 UTC
Permalink
Post by Jeffrey Johnson
I asked for information regarding what Per Oyvind *is* looking for: there
is no meaning of "canonical" that I understand of the actual package name
Provides: that is always added by rpm isn't sufficient.
Telling me that isn't what Per Oyvind is looking for helps nothing whatsoever.
Well, for this devel package you have on x86_64:
lib64glib2.0-devel = 1:2.36.3-2:2013.0

on i586:
libglib2.0-devel = 1:2.36.3-2:2013.0

So the name will be different between arches, but if they were to have a
versioned provides that's named the same independent of architecture like
ie. glib2-devel, then it's more suitable to use for versioned dependencies.

Ie. like:
Conflicts: glib2-devel < 1:2.36.3-2

--
Regards,
Per Øyvind
Matthew Dawkins
2013-07-31 12:23:02 UTC
Permalink
Well virtually providing glib2-devel = %{EVRD} was incorrect as well.

And there is still a cross arch provides left, but not really preferred I
guess by many.
%{_lib}glib2.0-devel = %{EVRD}

So... what's the problem?
Post by Per Øyvind Karlsen
Post by Jeffrey Johnson
I asked for information regarding what Per Oyvind *is* looking for: there
is no meaning of "canonical" that I understand of the actual package name
Provides: that is always added by rpm isn't sufficient.
Telling me that isn't what Per Oyvind is looking for helps nothing whatsoever.
lib64glib2.0-devel = 1:2.36.3-2:2013.0
libglib2.0-devel = 1:2.36.3-2:2013.0
So the name will be different between arches, but if they were to have a
versioned provides that's named the same independent of architecture like
ie. glib2-devel, then it's more suitable to use for versioned dependencies.
Conflicts: glib2-devel < 1:2.36.3-2
--
Regards,
Per Øyvind
Per Øyvind Karlsen
2013-07-31 12:43:35 UTC
Permalink
Post by Matthew Dawkins
Well virtually providing glib2-devel = %{EVRD} was incorrect as well.
Why?
Post by Matthew Dawkins
And there is still a cross arch provides left, but not really preferred I
guess by many.
%{_lib}glib2.0-devel = %{EVRD}
That won't give same name on different archs and is btw. also redundant as
it's the exact same as provided from it's package name.

--
Regards,
Per Øyvind
Matthew Dawkins
2013-07-31 12:58:11 UTC
Permalink
Post by Per Øyvind Karlsen
Post by Matthew Dawkins
Well virtually providing glib2-devel = %{EVRD} was incorrect as well.
Why?
Why not glibX-devel or glibN-devel or glibPOK-devel?
Post by Per Øyvind Karlsen
Post by Matthew Dawkins
And there is still a cross arch provides left, but not really preferred I
guess by many.
%{_lib}glib2.0-devel = %{EVRD}
That won't give same name on different archs and is btw. also redundant as
it's the exact same as provided from it's package name.
No it doesn't give the same name, but the macronized name is the same.
Ie Conflicts: %{_lib}glib2.0-devel < 1:2.36.3-2:2013.0

So, still I don't see what the problem is? Are you just trying to split
hairs or are you actually going to provide a proper solution?
Post by Per Øyvind Karlsen
--
Regards,
Per Øyvind
Per Øyvind Karlsen
2013-07-31 18:01:17 UTC
Permalink
Post by Matthew Dawkins
Post by Per Øyvind Karlsen
Post by Matthew Dawkins
Well virtually providing glib2-devel = %{EVRD} was incorrect as well.
Why?
Why not glibX-devel or glibN-devel or glibPOK-devel?
It probably would've been glib-devel if it weren't for that at the time of
this provides was introduced, there most likely already was a glib-devel
already for glib 1.x..

There's still not anything wrong with glib2-devel..
Post by Matthew Dawkins
Post by Per Øyvind Karlsen
Post by Matthew Dawkins
And there is still a cross arch provides left, but not really preferred
I guess by many.
%{_lib}glib2.0-devel = %{EVRD}
That won't give same name on different archs and is btw. also redundant
as it's the exact same as provided from it's package name.
No it doesn't give the same name, but the macronized name is the same.
It expands to the same name as the package name, so it won't be added
twice.
Post by Matthew Dawkins
Ie Conflicts: %{_lib}glib2.0-devel < 1:2.36.3-2:2013.0
The reason for why you need to make it canonical is because in your example
it lib64glib2.0-devel won't conflict with ie. libglib2.0-devel, which is
what you'd want in situation where ie. files (that would be shared between
libglib2.0-devel & lib64glib2.0-devel were both installed) has been moved.

FWIW you most likely wouldn't want to add distepoch to such conflicts as it
might break in the case of backports...
Post by Matthew Dawkins
So, still I don't see what the problem is? Are you just trying to split
hairs or are you actually going to provide a proper solution?
Don't remove/add back glib2-devel.

--
Regards,
Per Øyvind
Matthew Dawkins
2013-07-31 19:56:59 UTC
Permalink
Post by Per Øyvind Karlsen
Post by Matthew Dawkins
Post by Per Øyvind Karlsen
Post by Matthew Dawkins
Well virtually providing glib2-devel = %{EVRD} was incorrect as well.
Why?
Why not glibX-devel or glibN-devel or glibPOK-devel?
It probably would've been glib-devel if it weren't for that at the time of
this provides was introduced, there most likely already was a glib-devel
already for glib 1.x..
There's still not anything wrong with glib2-devel..
It's wrong and no diff than glibPOK-devel.
Post by Per Øyvind Karlsen
Post by Matthew Dawkins
Post by Per Øyvind Karlsen
Post by Matthew Dawkins
And there is still a cross arch provides left, but not really preferred
I guess by many.
%{_lib}glib2.0-devel = %{EVRD}
That won't give same name on different archs and is btw. also redundant
as it's the exact same as provided from it's package name.
No it doesn't give the same name, but the macronized name is the same.
It expands to the same name as the package name, so it won't be added
twice.
Post by Matthew Dawkins
Ie Conflicts: %{_lib}glib2.0-devel < 1:2.36.3-2:2013.0
The reason for why you need to make it canonical is because in your
example it lib64glib2.0-devel won't conflict with ie. libglib2.0-devel,
which is what you'd want in situation where ie. files (that would be shared
between libglib2.0-devel & lib64glib2.0-devel were both installed) has been
moved.
Why are you expecting to install both libglib2.0-devel & lib64glib2.0-devel
together?
Post by Per Øyvind Karlsen
FWIW you most likely wouldn't want to add distepoch to such conflicts as
it might break in the case of backports...
Post by Matthew Dawkins
So, still I don't see what the problem is? Are you just trying to split
hairs or are you actually going to provide a proper solution?
Don't remove/add back glib2-devel.
--
Regards,
Per Øyvind
Guy Bormann
2013-07-31 22:00:57 UTC
Permalink
On Wed, Jul 31, 2013 at 12:01 PM, Per Øyvind Karlsen
On Wed, Jul 31, 2013 at 6:43 AM, Per Øyvind Karlsen
Well virtually providing glib2-devel =
%{EVRD} was incorrect as well.
Why?
Why not glibX-devel or glibN-devel or glibPOK-devel?
It probably would've been glib-devel if it weren't for that at
the time of this provides was introduced, there most likely
already was a glib-devel already for glib 1.x..
There's still not anything wrong with glib2-devel..
It's wrong and no diff than glibPOK-devel.
And there is still a cross arch
provides left, but not really
preferred I guess by many.
%{_lib}glib2.0-devel = %{EVRD}
That won't give same name on different archs
and is btw. also redundant as it's the exact
same as provided from it's package name.
No it doesn't give the same name, but the macronized
name is the same.
It expands to the same name as the package name, so it won't
be added twice.
Ie Conflicts: %{_lib}glib2.0-devel < 1:2.36.3-2:2013.0
The reason for why you need to make it canonical is because in
your example it lib64glib2.0-devel won't conflict with ie.
libglib2.0-devel, which is what you'd want in situation where
ie. files (that would be shared between libglib2.0-devel &
lib64glib2.0-devel were both installed) has been moved.
Why are you expecting to install both libglib2.0-devel &
lib64glib2.0-devel together?
Because as an application dev developing on a 64-bit workstation, I
might want to be able to support two archs?

[snip]
Per Øyvind Karlsen
2013-07-31 23:27:36 UTC
Permalink
Post by Per Øyvind Karlsen
On Wed, Jul 31, 2013 at 12:01 PM, Per Øyvind Karlsen
On Wed, Jul 31, 2013 at 6:43 AM, Per Øyvind Karlsen
Well virtually providing glib2-devel =
%{EVRD} was incorrect as well.
Why?
Why not glibX-devel or glibN-devel or glibPOK-devel?
It probably would've been glib-devel if it weren't for that at
the time of this provides was introduced, there most likely
already was a glib-devel already for glib 1.x..
There's still not anything wrong with glib2-devel..
It's wrong and no diff than glibPOK-devel.
Why is it wrong?
It's quite different for the reasons I explained above.
Post by Per Øyvind Karlsen
The reason for why you need to make it canonical is because in
your example it lib64glib2.0-devel won't conflict with ie.
libglib2.0-devel, which is what you'd want in situation where
ie. files (that would be shared between libglib2.0-devel &
lib64glib2.0-devel were both installed) has been moved.
Why are you expecting to install both libglib2.0-devel &
lib64glib2.0-devel together?
Because as an application dev developing on a 64-bit workstation, I
might want to be able to support two archs?
Exactly.

That's what the multiarch packaging stuff is for making easier btw.

--
Regards,
Per Øyvind
Matthew Dawkins
2013-08-01 15:02:16 UTC
Permalink
So, Virtual provides and creating conflicting provides, still doesn't
answer the question.
The multiarch macros deals with installing conflicting files on cross arch
installs.

It's wrong b/c what does the number "2" have to do with the package name?
The api is 2.0 and not 2.

If you want to add back some "virtual" provides, why not do it correctly?
My suggestion is Provides: %{name}%{api} = %{EVRD}


On Wed, Jul 31, 2013 at 5:27 PM, Per Øyvind Karlsen
Post by Per Øyvind Karlsen
Post by Per Øyvind Karlsen
On Wed, Jul 31, 2013 at 12:01 PM, Per Øyvind Karlsen
On Wed, Jul 31, 2013 at 6:43 AM, Per Øyvind Karlsen
Well virtually providing glib2-devel =
%{EVRD} was incorrect as well.
Why?
Why not glibX-devel or glibN-devel or glibPOK-devel?
It probably would've been glib-devel if it weren't for that at
the time of this provides was introduced, there most likely
already was a glib-devel already for glib 1.x..
There's still not anything wrong with glib2-devel..
It's wrong and no diff than glibPOK-devel.
Why is it wrong?
It's quite different for the reasons I explained above.
Post by Per Øyvind Karlsen
The reason for why you need to make it canonical is because in
your example it lib64glib2.0-devel won't conflict with ie.
libglib2.0-devel, which is what you'd want in situation where
ie. files (that would be shared between libglib2.0-devel &
lib64glib2.0-devel were both installed) has been moved.
Why are you expecting to install both libglib2.0-devel &
lib64glib2.0-devel together?
Because as an application dev developing on a 64-bit workstation, I
might want to be able to support two archs?
Exactly.
That's what the multiarch packaging stuff is for making easier btw.
--
Regards,
Per Øyvind
Per Øyvind Karlsen
2013-08-01 15:28:40 UTC
Permalink
Post by Matthew Dawkins
So, Virtual provides and creating conflicting provides, still doesn't
answer the question.
The multiarch macros deals with installing conflicting files on cross arch
installs.
You don't seem to fully understand what the multiarch policy is about and
that it's not limited to just some rpm macros..
You should read up on it at http://wiki.mandriva.com/en/Policies/Multiarch

Conflicting files is something that would get in the way of having both
libfoo-devel and lib64foo-devel installed, which is why the multiarch stuff
is in place to work around this issue.
Post by Matthew Dawkins
It's wrong b/c what does the number "2" have to do with the package name?
The api is 2.0 and not 2.
Because we don't intend to support building against multiple api versions.
At the time the package was created and the glib2-devel was added as
provides, there was both glib 1 & 2 present and supported for building
against.

As this no longer is the case, sure, a better choice would've been just
'glib-devel' if introduced nowadays,
Post by Matthew Dawkins
If you want to add back some "virtual" provides, why not do it correctly?
My suggestion is Provides: %{name}%{api} = %{EVRD}
The actual naming itself, however, isn't really all too important.

--
Regards,
Per Øyvind
Jeffrey Johnson
2013-08-01 17:32:25 UTC
Permalink
So, Virtual provides and creating conflicting provides, still doesn't answer the question.
The multiarch macros deals with installing conflicting files on cross arch installs.
You don't seem to fully understand what the multiarch policy is about and that it's not limited to just some rpm macros..
You should read up on it at http://wiki.mandriva.com/en/Policies/Multiarch
Conflicting files is something that would get in the way of having both libfoo-devel and lib64foo-devel installed, which is why the multiarch stuff is in place to work around this issue.
Virtual provides and the creaky "multiarch stuff" isn't the only solution
to conflicting files in multilib packaging, nor is it even the best solution.

Fedora solved this p[roblem years ago by patching files to be platform
indepenmdent thereby eliminating the problem. Mandriva chose to create
a complex build solution instead of eliminating the root cause.

Everyone wants to be Just Like Fedora until some overly complex silly solution
can be devised instead.

73 de Jeff
Per Øyvind Karlsen
2013-08-01 22:33:25 UTC
Permalink
I understand Multiarch quite well.
You obviously don't as you don't understand why one would install both 32 &
64 bit builds of -devel packages simultanously..

What is apparent is that you don't understand the library packaging policy
http://wiki.mandriva.com/en/Libraries_policy
There's two sections that pertain to your misconception of package names
and provides that you particularly need to take note.
The actual naming however _IS_VERY_ important. It's why the library naming
policy for Mandriva mimics that of Debian's.
We're talking about naming of provides, not naming of packages.

--
Regards,
Per Øyvind
Jeff Johnson
2013-08-02 00:55:49 UTC
Permalink
Sent from my iPhone
I understand Multiarch quite well.
You obviously don't as you don't understand why one would install both 32 & 64 bit builds of -devel packages simultanously..
You don't understand the KISS
of how Fedora (and Red Hat)
solved the same issue:

All include files are identical on
all architectures.

Root cause for file conflicts solved by
patching sources _ONCE_ and Fedora/RedHat has done all the heavy lifting.

I dare you to suggest that I do not understand Mandriva's multi arch solution. The net effect of Mandriva's stubborn insistence on failed schemes like multi arch is vendor lock-in by making build recipes too different and too complicated to change.
http://wiki.mandriva.com/en/Libraries_policy
There's two sections that pertain to your misconception of package names and provides that you particularly need to take note.
The actual naming however _IS_VERY_ important. It's why the library naming policy for Mandriva mimics that of Debian's.
We're talking about naming of provides, not naming of packages.
There is a very simple solution that need not differentiate between provides and names and require "canonical" definitions and the endless nit-picks:

Don't do that!

hth

73 de Jeff
--
Regards,
Per Øyvind
Guy Bormann
2013-08-02 11:10:01 UTC
Permalink
Post by Jeffrey Johnson
Sent from my iPhone
On Aug 1, 2013, at 6:33 PM, Per Øyvind Karlsen
I understand Multiarch quite well.
You obviously don't as you don't understand why one would install
both 32 & 64 bit builds of -devel packages simultanously..
You don't understand the KISS
of how Fedora (and Red Hat)
All include files are identical on
all architectures.
Root cause for file conflicts solved by
patching sources _ONCE_ and Fedora/RedHat has done all the heavy lifting.
I guess it helps as a distributor to have main contributors that also
'own' the upstream or work for the largest Linux company.

Of course you can make a -devel package arch-agnostic, you just hide the
complexity in the package (and make it bigger because you need to store
all supported archs even if you don't need the other part)...for every
single package instead of in the packaging system. The KISS you see is
very superficial.

That's assuming -devel packages only every contain C/C++ header files...
Post by Jeffrey Johnson
I dare you to suggest that I do not understand Mandriva's multi arch
solution. The net effect of Mandriva's stubborn insistence on failed
schemes like multi arch is vendor lock-in by making build recipes too
different and too complicated to change.
What is apparent is that you don't understand the library
http://wiki.mandriva.com/en/Libraries_policy
There's two sections that pertain to your misconception of
package names and provides that you particularly need to
take note.
The actual naming however _IS_VERY_ important. It's why the
library naming policy for Mandriva mimics that of Debian's.
We're talking about naming of provides, not naming of packages.
There is a very simple solution that need not differentiate between
provides and names and require "canonical" definitions and the endless
Don't do that!
hth
73 de Jeff
--
Regards,
Per Øyvind
Jeff Johnson
2013-08-02 14:55:11 UTC
Permalink
Post by Guy Bormann
I guess it helps as a distributor to have main contributors that also
'own' the upstream or work for the largest Linux company.
Presumably you are snidely remarking on RedHat and the degree of
involvement in FL/OSS projects.

But "own" is troll bait and "largest" isn't exclusive.
Post by Guy Bormann
Of course you can make a -devel package arch-agnostic, you just hide the
complexity in the package (and make it bigger because you need to store
all supported archs even if you don't need the other part)...for every
single package instead of in the packaging system. The KISS you see is
very superficial.
This isn't the correct characterization of the problem.

The issue is arch-specific differing content in include (usually, not always) files causing
file conflicts.

Different content on same path can be handled either by merging (like Fedora has done)
or by adding an arch identifier and changing include paths (like Mandriva has done).

The changes are usually quite small (not "bigger") to merge, with a pleasant result
that there are fewer files to examine when a build breaks.

The idea that content for "all supported arches" leads to bloat ignores the fact that most
user machines don't need to install -devel packages at all.
Post by Guy Bormann
That's assuming -devel packages only every contain C/C++ header files...
Again the multi-arch issue has to do with files, not packages. There is no assumption
that -devel packages contain on header files implied.

73 de Jeff
Guy Bormann
2013-08-02 23:31:10 UTC
Permalink
Post by Jeff Johnson
Post by Guy Bormann
I guess it helps as a distributor to have main contributors that also
'own' the upstream or work for the largest Linux company.
Presumably you are snidely remarking on RedHat and the degree of
involvement in FL/OSS projects.
I am remarking on it but not snidely.
Post by Jeff Johnson
But "own" is troll bait and "largest" isn't exclusive.
I put own between quotes exactly because of the sensitivity some have
for the word. It rather shows my imperfect command of English than
anything else. I just don't know how to express the relation between the
main author or contributor to a project. Some are truely collaborative,
for others, the community is only built after the initial implementation
was released to the public by a key person or very small key team.
Apologies if it looked like troll bait.
Post by Jeff Johnson
Post by Guy Bormann
Of course you can make a -devel package arch-agnostic, you just hide the
complexity in the package (and make it bigger because you need to store
all supported archs even if you don't need the other part)...for every
single package instead of in the packaging system. The KISS you see is
very superficial.
This isn't the correct characterization of the problem.
I wasn't characterising the packaging problem. I was describing
techniques to make a library multi-platform/arch. That's independent of
packaging.
Post by Jeff Johnson
The issue is arch-specific differing content in include (usually, not always) files causing
file conflicts.
Of course, what other conflict could there be with a bunch of text files
(assuming that is the only possible problem for source distribution of
multi-arch projects).
Post by Jeff Johnson
Different content on same path can be handled either by merging (like Fedora has done)
or by adding an arch identifier and changing include paths (like Mandriva has done).
And, how is that different from what I wrote?
Post by Jeff Johnson
The changes are usually quite small (not "bigger") to merge, with a pleasant result
that there are fewer files to examine when a build breaks.
Assuming that header files are the only problem, the changes might be
small but the installed corpus of header files will be larger for
everyone installing them with arch/platform errors harder to identify
(because of the merger).

When separating them into different packages that only burdens the
system that has them both installed. Arch/platform-dependent build
errors are easier to isolate.
Post by Jeff Johnson
The idea that content for "all supported arches" leads to bloat ignores the fact that most
user machines don't need to install -devel packages at all.
Fair enough. I don't have a strong preference. I just took issue with
the purported simplicity of the merger solution. Objectively you just
move the complexity. As a leaf dev in the dependency tree (of user vs
producer of a library), I couldn't care less who had to bear the brunt
of the packaging complexity. That's all I'm saying. But it's clear what
carries your preference :-)

It's funny how some people are allowed to say how stupid other people or
other people's decisions are while others are accused of bad manners
when they don't necessarily agree or just want to add some colour or
nuance to the monochrome picture that is painted.
Post by Jeff Johnson
Post by Guy Bormann
That's assuming -devel packages only every contain C/C++ header files...
Again the multi-arch issue has to do with files, not packages.
Yeah, I'm not that thick :-( In the end it's all about files. What else
is a package but a bunch of files and a local definition of the
dependency tree?

Isn't the issue with the files _in_ the packages when unpacking those
files? The common files on common paths give conflicts when installing
them from separate packages without path trickery. And all versioning
hell that implies. Not sure I can describe it by not using the word
package.
Post by Jeff Johnson
There is no assumption
that -devel packages contain on header files implied.
Sorry, I can't grok that sentence.
Post by Jeff Johnson
73 de Jeff
Yeah, I'm a pedant. So what?!
Jeff Johnson
2013-08-03 04:17:58 UTC
Permalink
Post by Guy Bormann
Post by Jeff Johnson
Post by Guy Bormann
I guess it helps as a distributor to have main contributors that also
'own' the upstream or work for the largest Linux company.
Presumably you are snidely remarking on RedHat and the degree of
involvement in FL/OSS projects.
I am remarking on it but not snidely.
The remark is either irrelevant or snide: the size of Fedora/RedHat
and defacto "own"ership has almost nothing to do with the multiarch
implementation in Mandriva.

So Irrelevant if not snide.
Post by Guy Bormann
Post by Jeff Johnson
But "own" is troll bait and "largest" isn't exclusive.
I put own between quotes exactly because of the sensitivity some have
for the word. It rather shows my imperfect command of English than
anything else. I just don't know how to express the relation between the
main author or contributor to a project. Some are truely collaborative,
for others, the community is only built after the initial implementation
was released to the public by a key person or very small key team.
Apologies if it looked like troll bait.
Your English is not imperfect. Biut note that
my quotes are literal, not what is called "scare quotes"
http://en.wikipedia.org/wiki/Scare_quotes
Post by Guy Bormann
Post by Jeff Johnson
Post by Guy Bormann
Of course you can make a -devel package arch-agnostic, you just hide the
complexity in the package (and make it bigger because you need to store
all supported archs even if you don't need the other part)...for every
single package instead of in the packaging system. The KISS you see is
very superficial.
This isn't the correct characterization of the problem.
I wasn't characterising the packaging problem. I was describing
techniques to make a library multi-platform/arch. That's independent of
packaging.
You mentioned "... make a -devel package arch-agnostic, you just hide the complexity
in the package" and then when on to several further mentions of "package". Forgive
me for not understanding your characterization then: its not a packaging problerm
(but my point is that Mandriva is trating the issue as if it were a packaging problem).
Post by Guy Bormann
Post by Jeff Johnson
The issue is arch-specific differing content in include (usually, not
always) files causing
file conflicts.
Of course, what other conflict could there be with a bunch of text files
(assuming that is the only possible problem for source distribution of
multi-arch projects).
There are package Conflicts: for starters. Not the only problem at all.

There's lots of other possible content than include files. Meanwhile there
is an expectation that builds are universal, work anywhere, batteries included.
This is _NOT_ true with Mandriva's chosen multiarch solution, which "works"
by augmenting C*FLAGS, and is otherwise limited to Mandriva based distros
(I do not know of any non-Mandriva distro that has adopted the multi-arch solution).

This is accomplished within Mandriva multiarch packaging by adding
some modest complexity using macros to augment C*FLAGS, as well as to add what
POK has called "canonical" dependencies.
Post by Guy Bormann
Post by Jeff Johnson
Different content on same path can be handled either by merging (like Fedora has done)
or by adding an arch identifier and changing include paths (like Mandriva has done).
And, how is that different from what I wrote?
You said nothing positive about patching include files, chose
instead to point out (quoting)
make it bigger because you need to store all supported arches

In fact the portion of include files that is arch-specific is usually only
a small percentage of the text in an include file, and distributing
multiple copies of identical content tainted with a small portion
of code that is arch-specific is actually more, not less, code measured by number of
bytes.

Perhaps you think you said what I just wrote, I cannot tell.
Post by Guy Bormann
Post by Jeff Johnson
The changes are usually quite small (not "bigger") to merge, with a pleasant result
that there are fewer files to examine when a build breaks.
Assuming that header files are the only problem, the changes might be
small but the installed corpus of header files will be larger for
everyone installing them with arch/platform errors harder to identify
(because of the merger).
Header files with per-arch content ios the majority of the problem;
examine Fedora patches if you chose not to believe me.
Post by Guy Bormann
When separating them into different packages that only burdens the
system that has them both installed. Arch/platform-dependent build
errors are easier to isolate.
There is minimal "burden" when headers are patched to support
multiple arches. In fact (if done correctly) there's on a single file
with identical content and no change to C*FLAGS needed, rather
than changing builds to change C*FLAGS to include per-arch
content before generic content.
Post by Guy Bormann
Post by Jeff Johnson
The idea that content for "all supported arches" leads to bloat
ignores the fact that most
user machines don't need to install -devel packages at all.
Fair enough. I don't have a strong preference. I just took issue with
the purported simplicity of the merger solution. Objectively you just
move the complexity. As a leaf dev in the dependency tree (of user vs
producer of a library), I couldn't care less who had to bear the brunt
of the packaging complexity. That's all I'm saying. But it's clear what
carries your preference :-)
You "... couldn't care less ..." about complexity in package builds.

Complexity costs a lot when debugging, and when (as currently)
only Mandriva based rpm distros support multiarch packaging.
Post by Guy Bormann
It's funny how some people are allowed to say how stupid other people or
other people's decisions are while others are accused of bad manners
when they don't necessarily agree or just want to add some colour or
nuance to the monochrome picture that is painted.
I'll call yopur "stupid" bluff: show me any occurrence of "stupid" in what
I have replied to you.

But adding "colour" to the discusssion has little to do with other arguments.

It is a fact that there are no other rpm based distros that I am aware of who have
chosen to ado[py Mandriva's multi-arch build scheme after multiple years since
first deployed.
Post by Guy Bormann
Post by Jeff Johnson
Post by Guy Bormann
That's assuming -devel packages only every contain C/C++ header files...
Again the multi-arch issue has to do with files, not packages.
Yeah, I'm not that thick :-( In the end it's all about files. What else
is a package but a bunch of files and a local definition of the
dependency tree?
No one called you "thick". You said "packages" not files.
Post by Guy Bormann
Isn't the issue with the files _in_ the packages when unpacking those
files? The common files on common paths give conflicts when installing
them from separate packages without path trickery. And all versioning
hell that implies. Not sure I can describe it by not using the word
package.
File conflicts are detected while installing (or "unpacking") yes.

However identical files are routinely handled while files with different content
(or metadata) trigger an error while installing.

And we return to the essential difference: between Fedora and Mandriva multiarch solutions:

Fedora merges content to remove arch-specific content while Mandriva puts content on different paths.

The Fedora solution usually simplifies build complexity and minimizes debugging time (in my experience).

Whether you agree with my opinion, adopting Fedora patches to make include
files has the distinct benefit of simplifying builds: the Fedora scheme (from the "largest"
distro which "owns" many projects if you mist) is far more widespread than the Mandriva multiarch scheme.
Post by Guy Bormann
Post by Jeff Johnson
There is no assumption
that -devel packages contain on header files implied.
Sorry, I can't grok that sentence.
Sorry: what was intended is this statement:

There is no assumption that -devel package contain only header files implied.

(by anything I've said).
Post by Guy Bormann
Post by Jeff Johnson
73 de Jeff
Yeah, I'm a pedant. So what?!
What does "pedant" have to do with multiarch discussions? You can self-identify
as whatever you wish ...

73 de Jeff
Loading...