Hi,

On Sun, Dec 24, 2023 at 08:51:54AM +0100, Abou Al Montacir wrote:
> Just like lcl, lcl-2.2 is also a virtual package.

This is technically wrong. The term "virtual package" refers to a binary
package name that is provided by some package but doesn't exist as a
.deb. Both lcl and lcl-2.2 exist as .deb files and thus are called
"concrete packages".

> If I look to all other virtual packages, they are Arch: all, and I tend to 
> agree
> with that.

Since virtual packages do not exist as concrete packages, they do not
have an Architecture field and inherit their architecture from the
providing concrete packages. I sense that your use of "virtual packages"
does not match the definitions in Debian policy section 7.5.

I guess that what you mean here is more commonly called "meta package"
or "dependency package".  Does that make sense to you?

> However, I'm not very familiar with multi-arch subtleties.

I am, but I am very much unfamiliar with Pascal, so we will only make a
dent on this if we manage to combine our knowledge.

> So if you want to fix this, please provide a proposal for then entire set of
> packages.
> 
> I would glad then to fix it.

I fear that my knowledge of Pascal is too limited here, but let me try
anway:

lazarus-2.2 and lazarus look like a metapackages. They presently are
A:all and implicitly M-A:no. That much seems fine to me. Due to
depending on lcl-2.2, they must not become M-A:foreign.

lazarus-src-2.2 and lazarus-src are A:all M-A:foreign and binary
packages containing source code only are commonly that way.

lazarus-ide-2.2, lazarus-ide-gtk2-2.2, lazarus-ide-qt5-2.2,
lcl-utils-2.2, lcl-units-2.2, lcl-nogui-2.2, lcl-gtk2-2.2 and
lcl-qt5-2.2 are A:any and implicitly M-A:no. I'd leave it that way
unless there is a need for change.

lcl-2.2 is A:any M-A:same. This is a metapackage for libraries and A:any
M-A:same is commonly correct for libraries.

lazarus-doc-2.2 and lazarus-doc are A:all M-A:foreign and binary
packages containing documentation only are commonly that way.

lazarus-ide, lazarus-ide-gtk2, lazarus-ide-qt5, lcl-utils, lcl-units,
lcl-nogui, lcl-gtk2 and lcl-qt5 are A:all and implicitly M-A:no. These
are metapackages and those typically have their Architecture field match
the one they forward to, but this is not the case here. It's not clear
whether this needs to change. As long as we only need it for the native
architecture, this can be fine. They must not become M-A:foreign though.

lcl is much like lazarus-ide and friends except that it is M-A:foreign
and this is what this bug report is about.

When I say "need to change" I mean an actual unresolvable dependency
that happens in some practical setting such as cross building (which is
what motivated this bug report). It seems very likely that we'll have to
work on #845498 before there is any need for lazarus, so keeping these
A:all metapackages for now makes sense to me. Just try to remember that
when someone comes a long and says "lcl-units should be M-A:foreign,
because this dependency is not resolvable" that it must not be
M-A:foreign and instead that'd be the time to convert it from A:all to
A:any. Until that happens, I think you're fine.

On the flip side, lcl presently being M-A:foreign is promising that
interfacing with lcl is independent of the architecture and this is a
lie. We should not be making this promise and thus remove M-A:foreign
there as it misleads a dependency resolver in finding a solution that
totally does not work at all in practice and causes me to file annoying
bug reports about your package. :)

So this really is only about removing that one M-A:foreign line from
d/control. And then once we moved forward on #845498, then revisit the
other metapackages in a distant future.

Helmut

Reply via email to