The source package of the SMS++ umbrella
for the PPA, out of
which Launchpad builds one library package per module, one command package per
tool and the smspp-project metapackage of them all:
sudo add-apt-repository ppa:smspp-project/smspp
sudo apt install smspp-project # everything
sudo apt install smspp-ucblock # the Unit Commitment tool alone
sudo apt install libsmspp-mcf-dev # the headers of the MCFBlock module
The umbrella is built once, and the install of each module goes to its own
package: libsmspp-<module><soname> holds the shared library,
libsmspp-<module>-dev the headers and the CMake configuration that
find_package() finds, smspp-<tool> the executable with its configuration
files, its examples and its man page.
debian/ the packaging, with the tables of the packages that
gen_debian.py writes: control, modules.tsv, tools.tsv
gen_debian.py generator of those tables, whose own tables carry the
modules, the tools and their dependencies
mk-ppa-source source package of a release, for one or more series
daqp/ the source package of DAQP, the QP solver of the MILP
Solvers, which no Ubuntu series carries
The tag of the umbrella publishes the release tarball, from which
./mk-ppa-source 0.6.0 resolute --upload
builds the source package of that version for that series and uploads it to
the PPA, which then builds the binary packages for every architecture. The
upload needs a GPG key registered on Launchpad, and devscripts and dput
installed.
A new module needs its row in the LIBS table of gen_debian.py (directory,
package base, the modules it needs, the -dev packages outside the project
that its CMake configuration finds, and its description), and a new tool its
row in TOOLS. The version of a package comes from the VERSION.txt of its
module, so a minor bump renames the library package: that is the point of the
name, since the SONAME changes with it.
CPLEX, Gurobi and SCIP are not redistributable, so libsmspp-milp carries the
HiGHS and DAQP backends alone; a build against the others is still the one of
the sources. FastFlow, which the core fetches at configure time, travels in the
source package as a second component, so that the build needs no network.
DAQP, the dual active-set solver of DAQPMILPSolver, is in no Ubuntu series,
so the PPA carries it as a source package of its own, out of the tag of its
release and of daqp/debian: libdaqp0.10 holds the shared library, whose
SONAME is libdaqp.so.0.10, and libdaqp-dev the headers, the static library
and the CMake configuration. The patch in daqp/debian/patches builds the
static library without linking the shared one, links the math library and
installs the CMake configuration where find_package() looks for it.
daqp/mk-ppa-source noble resolute --upload
builds the source package of DAQP for both series and uploads it; it has to
be built on Launchpad before the first upload of SMS++ that depends on
libdaqp-dev. A new release of DAQP is DAQP_VERSION in that script, and a
new SONAME the name of the library package in daqp/debian/control and of
its .install file.