Slackware package dependencies
Considering using Slackware binary packages for EasyOS, have run into a roadblock.
The Slackware package repositories have a file 'PACKAGES.TXT' that contains information about each package. For example:
PACKAGE NAME: LibRaw-0.18.12-x86_64-1.txz
PACKAGE LOCATION: ./slackware64/l
PACKAGE SIZE (compressed): 360 K
PACKAGE SIZE (uncompressed): 2300 K
PACKAGE DESCRIPTION:
LibRaw: LibRaw (library for decoding raw digital photos)
LibRaw:
LibRaw: LibRaw is a library for reading RAW files obtained from digital
LibRaw: cameras (CRW/CR2, NEF, RAF, DNG, and others). It is based on the
LibRaw: source code of the dcraw utility.
LibRaw:
LibRaw: Homepage: http://www.libraw.org/
LibRaw:
Notice that it does not contain dependency information. It really
really really should, but it doesn't. However, the Salix distribution,
which is based on Slackware, does have dependency information, for
example:
PACKAGE NAME: LibRaw-0.17.2-x86_64-1.txz
PACKAGE LOCATION: ./slackware64/l
PACKAGE SIZE (compressed): 328 K
PACKAGE SIZE (uncompressed): 2130 K
PACKAGE REQUIRED: gcc,gcc-g++,jasper,lcms2,libjpeg-turbo
PACKAGE CONFLICTS:
PACKAGE SUGGESTS:
PACKAGE DESCRIPTION:
LibRaw: LibRaw (library for decoding raw digital photos)
LibRaw:
LibRaw: LibRaw is a library for reading RAW files obtained from digital
LibRaw: cameras (CRW/CR2, NEF, RAF, DNG, and others). It is based on the
LibRaw: source code of the dcraw utility.
LibRaw:
LibRaw: Homepage: http://www.libraw.org/
LibRaw:
So, how did Salix obtain that? Manually?
What we did back when building puppies from Slackware, such as
Michael Amadio's Slacko, was use the 'PACKAGES.TXT' from the Salix
repository. Fine, except that the Salix project is dormant. They haven't
had a new release since 2016, built from Slackware 14.2. There is no
Salix 'PACKAGES.TXT' for slackware60current.
I did a bit of digging, and it seems that Salix may have used
"slapt-get" to add the dependency information to 'PACKAGES.TXT', as the
Wikipedia explains:
https://en.wikipedia.org/wiki/Slapt-get
slapt-get does not provide dependency resolution for packages
included within the Slackware distribution. It does, however, provide a
framework for dependency resolution in Slackware compatible packages
similar in fashion to the hand-tuned method APT utilizes.[5] Several
package sources and Slackware based distributions take advantage of this
functionality. Hard, soft, and conditional dependencies along with
package conflicts and complementary package suggestions can be expressed
using the slapt-get framework.
Adding dependency information requires no modification to the
packages themselves. Rather, the package listing file, PACKAGES.TXT, is
used to specify these relationships. This file is provided by Patrick
Volkerding and is similar to the Packages.gz file in use by Debian.
Several scripts are available to generate the PACKAGES.TXT file from a
group of packages. The file format used by Patrick Volkerding is
extended by adding a few extra lines per package. slapt-get then parses
this file during source downloads. Typically, third party packages store
the dependency information within the package itself for later
extraction into the PACKAGES.TXT. The inclusion of this information
within the Slackware package format does not inhibit the ability for
Slackware pkgtools to install these packages. This information is
silently ignored and discarded after the package is installed.
So, I either need to find an up-to-date 'PACKAGES.TXT' for
slackware64-current (15.0 precursor), or use slapt-get to create
it.
EDIT 2019-06-08:
I should mention, I have read a couple of posts from Slackware
developers, supporting the lack of dependency information in the
PACKAGES.TXT file, or inside packages. The arguments seem to me to be
shallow. There was one post criticizing third-party package managers
that have introduced dependencies, such as slapt-get, but again, the
arguments are not unbiased.
However, there was one valid criticism of
third-party package managers that have package dependencies, that it
does not work properly in the slackware*-current package repository.
This is because the dependencies do not specify versions.
We used the PACKAGES.TXT from Salix, for
Slackware 14.2, and un-versioned dependencies will work fine for a
particular release. It means that I should wait until 15.0 is released,
or at least until the package versions are frozen in
slackware64-current.
Tags: easy