Overview

Request 965666 accepted

- Remove the SQLite extension and package it as a subpackage of
sqlite3 to have only a single copy and keep it more up to date
(bsc#1195773).
- Clean up the lib dependencies in tclConfig.sh and tcl.pc.

(bsc#1179615, bsc#1181840).

Loading...

Reinhard Max's avatar
author source maintainer

Quoting from the reject message:

nothing provides sqlite3-tcl needed by tcl

See https://build.opensuse.org/request/show/965652

and tcl being ring0 / distro bootstrap requiring anything from a package far down the list sounds like a really, REALLY bad idea; this would essentially pull sqlite3 into the distro bootstrap cycle (currently it can't even build sqlite, as tcl was already built, requiring a package that does not yet exist, …)

Please discuss this in bsc#1195773 where it was demanded that Tcl uses libsqlite from the system rather than its embedded copy.

BTW, can't we break that cycle by ignoring the dependency of tcl on sqlite3-tcl within OBS? For the use cases of Tcl within OBS the SQLite extension is most likely not needed. I just added the dependency so that users of the Tcl package always get the full set of extensions that come bundled with the core.


Dominique Leuenberger's avatar

we CAN - but we really should not mess with deps in OBS

a 'requires; mean 'is needed to function properly' if it's not required and a dep can be broken, then the requires is wrong

What you might rather want apparently:

Requires: (sqlite3-tcl if sqlite3) - i.e when the user installs sqlite3 AND tcl, then sqlite3-tcl should be required. Then there is a reasonable expectation after all that the user will want to use sqlite3 (possibly from within tcl)


Reinhard Max's avatar
author source maintainer

a 'requires; mean 'is needed to function properly' if it's not required and a dep can be broken, then the requires is wrong

In general I agree with that, and I am frequently criticising packages that do not follow it without a good reason.

But this particular case is a bit different. The SQLite binding for Tcl used to be a separate and optional package, but with Tcl version 8.6 upstream decided to bundle a set of extensions with the core, so that developers of Tcl applications can normally rely on them to be there. This is called the "batteries included" Tcl distribution and SQLite is one of these embedded packages. Back then I decided to follow this move and henceforth have "tcl" mean "The Tcl core and all bundled extensions". To keep this promise I had to add the dependency, now that we have to "outsource" one of the bundled packages to fulfill other policies.


Dominique Leuenberger's avatar

Sounds like a perfect fit for Recommends


Reinhard Max's avatar
author source maintainer

If I had thought that Recommends would be a good fit here, I would have used it. ;)

I really want to keep the semantics of what comes with the tcl package unchanged by this move of functionality into a different package that was done for other reasons than modularising tcl. And the only way to get that is Requires.


Dominique Leuenberger's avatar

Still not really happy about it - but in order to move forward, I'll add that Ignore.

a package claiming 'requires' and the maintainer in the same sentence claiming "can be ignored' is obviously a lie in the spec file (and I don't use tcl on my machine - so I care even less :P )

But the move from built-in to externally built to upkeep the promise somewhat makes sense (5%)


Dominique Leuenberger's avatar
# tcl requires sqlite3-tcl to uphold the promise from upstream to be complete
# but as we decide to build sqlite3-tcl as part of sqlite, not tcl (to get more up-to-date version)
# we need to ignore the tcl -> sqlite dep
Ignore: tcl:sqlite3-tcl

Reinhard Max's avatar
author source maintainer

Thanks for now.

In the future I could imagine having a tcl-core package that contains the bare minimum and a tcl package that contains the "batteries" and Requires the single one that it doesn't contain. Then the dependency cycle can be broken by buildrequiring only tcl-core by the packages in the bootstrap loop that probably don't need the batteries anyway, and by sqlite3. But I want to reserve such a big change until the next upgrade to 8.7 or even 9.0.


Dominique Leuenberger's avatar

sounds good as a mid-term plan


Reinhard Max's avatar
author source maintainer

we CAN - but we really should not mess with deps in OBS

$ osc meta prjconf openSUSE:Factory | grep "^Ignore: " | wc -l
266

Dominique Leuenberger's avatar

Sorry, crap from the past is no white-card for the future - let alone that a lot of those ignores are probably not even valid anymore


Dominique Leuenberger's avatar

Will try to shorten that list to what makes sense nowadays

just by looking at things which are obvious: down to 231 (incl the new tcl ignore)


Dominique Leuenberger's avatar

See https://build.opensuse.org/request/show/965652

Can't be built - because tcl, part of the distro bootstrap, built first. and now sqlite3 can't even setup the buildroot to get going, as tcl is uninstallable.

Request History
Reinhard Max's avatar

rmax created request

- Remove the SQLite extension and package it as a subpackage of
sqlite3 to have only a single copy and keep it more up to date
(bsc#1195773).
- Clean up the lib dependencies in tclConfig.sh and tcl.pc.

(bsc#1179615, bsc#1181840).


Factory Auto's avatar

factory-auto added opensuse-review-team as a reviewer

Please review sources


Factory Auto's avatar

factory-auto accepted review

Check script succeeded


Saul Goodman's avatar

licensedigger accepted review

ok


Dominique Leuenberger's avatar

dimstar accepted review


Dominique Leuenberger's avatar

dimstar_suse set openSUSE:Factory:Staging:C as a staging project

Being evaluated by staging project "openSUSE:Factory:Staging:C"


Dominique Leuenberger's avatar

dimstar_suse accepted review

Picked "openSUSE:Factory:Staging:C"


Dominique Leuenberger's avatar

dimstar declined review

nothing provides sqlite3-tcl needed by tcl

and tcl being ring0 / distro bootstrap requiring anything from a package far down the list sounds like a really, REALLY bad idea; this would essentially pull sqlite3 into the distro bootstrap cycle (currently it can't even build sqlite, as tcl was already built, requiring a package that does not yet exist, …)


Dominique Leuenberger's avatar

dimstar declined request

nothing provides sqlite3-tcl needed by tcl

and tcl being ring0 / distro bootstrap requiring anything from a package far down the list sounds like a really, REALLY bad idea; this would essentially pull sqlite3 into the distro bootstrap cycle (currently it can't even build sqlite, as tcl was already built, requiring a package that does not yet exist, …)


Dominique Leuenberger's avatar

dimstar_suse reopened request


Dominique Leuenberger's avatar

dimstar_suse accepted review

Staging Project openSUSE:Factory:Staging:C got accepted.


Dominique Leuenberger's avatar

dimstar_suse approved review

Staging Project openSUSE:Factory:Staging:C got accepted.


Dominique Leuenberger's avatar

dimstar_suse accepted request

Staging Project openSUSE:Factory:Staging:C got accepted.

openSUSE Build Service is sponsored by