Index by title

Architecture

libmkernel : svcmgr, modmgr

mkernel: libmkernel(static) -> load_module(main)

modoutnull
modoutstderr
modoutstdout
modoutfile

modinnull
modinstderr
modinfile

modlogfile : load_module(modoutfile)
modlogstderr : load_module(modoutstderr)
modlognull : load_module(modoutnull)
modlogredis
modlogelk
modlogsplunk
modlognetcat
modlog : load_module(modlognull), load_module(modlog_stderr)

modreg : load_module(modinfile), load_module(modlist), load_module(modoutfile)

moduitty
moduincurses
moduigtk
modui: load_module(moduitty)

main : load_module(modlog), load_module(modreg), load_module(modui)


Buildbot CICD configuration

Master

Installation

adduser --home /var/lib/buildbot --disabled-password --disabled-login --gecos "Buildbot user" buildbot
apt-get install -y python3-venv build-essential python3-dev libssl-dev libffi-dev libmariadb-dev-compat mercurial
su - buildbot
python3 -m venv sandbox
source sandbox/bin/activate
pip install --upgrade pip
pip install 'buildbot[bundle]' mysqlclient
exit
su - buildbot -c '(source sandbox/bin/activate; buildbot create-master master)'

Developers try jobs

addgroup developers
mkdir -p /var/lib/buildbot/jobdir/{new,cur,tmp}
chown -R buildbot.developers /var/lib/buildbot/jobdir
chmod -R g+rwx,o-rwx /var/lib/buildbot/jobdir
adduser ${UN} developers

MySQL database initialization

echo "DROP DATABASE IF EXISTS ${BUILDBOT_DB_NAME};" | mysql
echo "DROP USER IF EXISTS '${BUILDBOT_DB_USER}'@'localhost';" | mysql
echo "CREATE DATABASE ${BUILDBOT_DB_NAME};" | mysql
echo "CREATE USER IF NOT EXISTS '${BUILDBOT_DB_USER}'@'localhost' IDENTIFIED BY '${BUILDBOT_DB_PASS}';" | mysql
echo "GRANT ALL ON ${BUILDBOT_DB_NAME}.* TO '${BUILDBOT_DB_USER}'@'localhost';" | mysql
echo "FLUSH PRIVILEGES;" | mysql
su - buildbot -c '(source sandbox/bin/activate; buildbot upgrade-master master)'
su - buildbot -c '(source sandbox/bin/activate; buildbot checkconfig master)'
su - buildbot -c '(source sandbox/bin/activate; buildbot restart master)'

SystemD script

cat << EOF > /etc/systemd/system/buildbot-master.service
[Unit]
Description=BuildBot master service
After=network.target
[Service]
User=buildbot
Group=buildbot
WorkingDirectory=/var/lib/buildbot/
ExecStart=/var/lib/buildbot/sandbox/bin/buildbot start --nodaemon master
ExecStop=/var/lib/buildbot/sandbox/bin/buildbot stop master
ExecReload=/var/lib/buildbot/sandbox/bin/buildbot reconfig master
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload 
systemctl enable buildbot-master

Basic configuration

cat << EOF > /var/lib/buildbot/master/master.cfg
from buildbot.plugins import *
c = BuildmasterConfig = {}

c['protocols'] = {'pb': {'port': 9989}}
c['workers'] = [
worker.Worker("bb-linux", "pass!"),
worker.Worker("bb-dist", "pass!"),
worker.Worker("bb-deb", "pass!"),
worker.Worker("bb-mingw", "pass!"),
worker.Worker("macos-monterey", "pass!"),
]

c['change_source'] = []
cs_mkernel = changes.HgPoller(repourl='/srv/hg/mkernel', workdir='mkernel', pollInterval=30, branch='') 
#cs_mkernel=changes.HgPoller(repourl='http://hg.cerbelle.net/hg/mkernel', workdir='mkernel', pollInterval=30, branch='')
c['change_source'].append(cs_mkernel)

c['projects'] = [
    util.Project(name="mkernel", description="Micro_Kernel application"),
]

oomtest_lock = util.WorkerLock("oomtest_lock")

c['builders'] = []

c['schedulers'] = []

c['services'] = []

mn = reporters.MailNotifier(
    fromaddr="buildbot@cerbelle.net",
    relayhost="127.0.0.1", smtpPort=25,
    extraRecipients=["francois@cerbelle.net"],
    )
c['services'].append(mn)

c['title'] = "Buildbot Cerbelle" 
c['titleURL'] = "https://redmine.cerbelle.net/" 
c['buildbotURL'] = "https://buildbot.cerbelle.net/" 
c['www'] = dict(port="tcp:8010:interface=127.0.0.1", plugins=dict(waterfall_view={}, console_view={}, grid_view={}))
c['db'] = { 'db_url' : "mysql://${BUILDBOT_DB_USER}:${BUILDBOT_DB_PASS}@localhost/${BUILDBOT_DB_NAME}?max_idle=300" }
EOF

Workers

bb-dist

Designed to try, test and build from mercurial repository.
Generate the dist (sources) files.

Infrastructure

Configuration

Debian12 with postinstall customizations

adduser --home /var/lib/buildbot --disabled-password --gecos "Buildbot user" buildbot
apt-get install -y python3-venv sudo
su - buildbot -c '(python3 -m venv sandbox)'
su - buildbot -c '(source sandbox/bin/activate; pip install --upgrade pip)'
su - buildbot -c '(source sandbox/bin/activate; pip install buildbot-worker)'
su - buildbot -c '(source sandbox/bin/activate; buildbot-worker create-worker worker buildbot.cerbelle.net example-worker pass)'
echo 'François Cerbelle <francois@cerbelle.net>' > /var/lib/buildbot/worker/info/admin
hostname -f > /var/lib/buildbot/worker/info/host
cat << EOF > /etc/systemd/system/buildbot-worker.service
[Unit]
Description=BuildBot worker service
After=network.target
[Service]
User=buildbot
Group=buildbot
WorkingDirectory=/var/lib/buildbot/
ExecStart=/var/lib/buildbot/sandbox/bin/buildbot-worker start --nodaemon worker
ExecStop=/var/lib/buildbot/sandbox/bin/buildbot-worker stop worker
ExecReload=/var/lib/buildbot/sandbox/bin/buildbot-worker restart worker
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable buildbot-worker
systemctl stop buildbot-worker
systemctl start buildbot-worker

Build pre-requisites

apt-get install -y mercurial build-essential autogen autoconf autopoint libtool check pkg-config gettext cppcheck gcovr

bb-linux

Designed to try, test and build from dist (sources) files.

Infrastructure

Configuration

Debian12 with postinstall customizations

adduser --home /var/lib/buildbot --disabled-password --gecos "Buildbot user" buildbot
apt-get install -y python3-venv sudo
su - buildbot -c '(python3 -m venv sandbox)'
su - buildbot -c '(source sandbox/bin/activate; pip install --upgrade pip)'
su - buildbot -c '(source sandbox/bin/activate; pip install buildbot-worker)'
su - buildbot -c '(source sandbox/bin/activate; buildbot-worker create-worker worker buildbot.cerbelle.net example-worker pass)'
echo 'François Cerbelle <francois@cerbelle.net>' > /var/lib/buildbot/worker/info/admin
hostname -f > /var/lib/buildbot/worker/info/host
cat << EOF > /etc/systemd/system/buildbot-worker.service
[Unit]
Description=BuildBot worker service
After=network.target
[Service]
User=buildbot
Group=buildbot
WorkingDirectory=/var/lib/buildbot/
ExecStart=/var/lib/buildbot/sandbox/bin/buildbot-worker start --nodaemon worker
ExecStop=/var/lib/buildbot/sandbox/bin/buildbot-worker stop worker
ExecReload=/var/lib/buildbot/sandbox/bin/buildbot-worker restart worker
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable buildbot-worker
systemctl stop buildbot-worker
systemctl start buildbot-worker

Build pre-requisites

apt-get install -y build-essential doxygen doxygen-latex check pkg-config lcov graphviz fuse3 gcovr

bb-mingw

Designed to try, test and build from dist (sources) files.

Infrastructure

Configuration

Debian12 with postinstall customizations

adduser --home /var/lib/buildbot --disabled-password --gecos "Buildbot user" buildbot
apt-get install -y python3-venv sudo
su - buildbot -c '(python3 -m venv sandbox)'
su - buildbot -c '(source sandbox/bin/activate; pip install --upgrade pip)'
su - buildbot -c '(source sandbox/bin/activate; pip install buildbot-worker)'
su - buildbot -c '(source sandbox/bin/activate; buildbot-worker create-worker worker buildbot.cerbelle.net example-worker pass)'
echo 'François Cerbelle <francois@cerbelle.net>' > /var/lib/buildbot/worker/info/admin
hostname -f > /var/lib/buildbot/worker/info/host
cat << EOF > /etc/systemd/system/buildbot-worker.service
[Unit]
Description=BuildBot worker service
After=network.target
[Service]
User=buildbot
Group=buildbot
WorkingDirectory=/var/lib/buildbot/
ExecStart=/var/lib/buildbot/sandbox/bin/buildbot-worker start --nodaemon worker
ExecStop=/var/lib/buildbot/sandbox/bin/buildbot-worker stop worker
ExecReload=/var/lib/buildbot/sandbox/bin/buildbot-worker restart worker
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable buildbot-worker
systemctl stop buildbot-worker
systemctl start buildbot-worker

Build pre-requisites

apt-get install -y mingw-w64 mingw-w64-tools make g++ nsis pkg-config pev

Then, follow all the individual dependencies installations steps from Cross_compilation_on_Debian_for_Windows

bb-macos12

Designed to try, test and build from dist (sources) files.

Infrastructure

Configuration

Build pre-requisites

bb-debian12

Designed to try, test and build from dist (sources) files.

Infrastructure

Configuration

Debian12 with postinstall customizations

adduser --home /var/lib/buildbot --disabled-password --gecos "Buildbot user" buildbot
apt-get install -y python3-venv sudo
su - buildbot -c '(python3 -m venv sandbox)'
su - buildbot -c '(source sandbox/bin/activate; pip install --upgrade pip)'
su - buildbot -c '(source sandbox/bin/activate; pip install buildbot-worker)'
su - buildbot -c '(source sandbox/bin/activate; buildbot-worker create-worker worker buildbot.cerbelle.net example-worker pass)'
echo 'François Cerbelle <francois@cerbelle.net>' > /var/lib/buildbot/worker/info/admin
hostname -f > /var/lib/buildbot/worker/info/host
cat << EOF > /etc/systemd/system/buildbot-worker.service
[Unit]
Description=BuildBot worker service
After=network.target
[Service]
User=buildbot
Group=buildbot
WorkingDirectory=/var/lib/buildbot/
ExecStart=/var/lib/buildbot/sandbox/bin/buildbot-worker start --nodaemon worker
ExecStop=/var/lib/buildbot/sandbox/bin/buildbot-worker stop worker
ExecReload=/var/lib/buildbot/sandbox/bin/buildbot-worker restart worker
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable buildbot-worker
systemctl stop buildbot-worker
systemctl start buildbot-worker

Build pre-requisites

apt-get install -y pbuilder

bb-rhel9

Designed to try, test and build from dist (sources) files.

Infrastructure

Configuration

Build pre-requisites

Builders

src

Prerequisites: mercurial build-essential autogen autoconf autopoint libtool check

Worker: bb-dist

Steps:
  1. hg clone
  2. ./bootstrap.sh
  3. ./configure
  4. make all check clean
  5. make distclean
src = util.BuildFactory()
src.addStep(steps.RemoveDirectory(name='Cleanup environment',dir="build"))
src.addStep(steps.Mercurial(name="Clone repository",repourl='http://hg.cerbelle.net/hg/mkernel', mode='full', method='fresh', branchType='inrepo'))
src.addStep(steps.SetPropertyFromCommand(name="Get package name", command="grep AC_INIT configure.ac | sed 's~.*\[\(.*\)\].*\[\(.*\)\].*\[\(.*\)\].*~\\1~'", property="package", want_stdout=True, want_stderr=True))
src.addStep(steps.SetPropertyFromCommand(name="Get package version", command="grep AC_INIT configure.ac | sed 's~.*\[\(.*\)\].*\[\(.*\)\].*\[\(.*\)\].*~\\2~'", property="version", want_stdout=True, want_stderr=True))
src.addStep(steps.ShellCommand(name="Generate autotools files",command=["./bootstrap.sh"], want_stdout=True, want_stderr=True))
src.addStep(steps.Configure(name='Default configuration', command=["./configure","--disable-doxygen"], want_stdout=True, want_stderr=True, logfiles={"config.log": "config.log"}))
src.addStep(steps.Compile(name="Default make all",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "all" ], want_stdout=True, want_stderr=True))
src.addStep(steps.Test(name="Default make check",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "check" ], want_stdout=True, want_stderr=True, haltOnFailure=True, logfiles={"testsuite.log": "test/testsuite.log"}, locks=[oomtest_lock.access('exclusive')]))
src.addStep(steps.Compile(name="Default make clean",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "clean" ], want_stdout=True, want_stderr=True))
src.addStep(steps.Compile(name="Default make distclean",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "distclean" ], want_stdout=True, want_stderr=True))
c['builders'].append( util.BuilderConfig(
    project="mkernel",
    name="Src",
    workernames=["bb-dist"],
    factory=src))

src-cppcheck

Pre-requisites: mercurial build-essential autogen autoconf autopoint libtool check cppcheck

Worker: bb-dist

Steps:
  1. hg clone
  2. cppcheck
  3. ./bootstrap.sh?
  4. ./configure --enable-debug?
  5. make all check cppcheck clean?
  6. Publish cppcheck
  7. make distclean
srcCppcheck = util.BuildFactory()
srcCppcheck.addStep(steps.RemoveDirectory(name='Cleanup environment',dir="build"))
srcCppcheck.addStep(steps.SetProperty(name="Compute basename", property="basename", value=util.Interpolate("%(prop:package)s-%(prop:version)s")))
srcCppcheck.addStep(steps.Mercurial(name="Clone repository",repourl='http://hg.cerbelle.net/hg/mkernel', mode='full', method='fresh', branchType='inrepo'))
srcCppcheck.addStep(steps.SetPropertyFromCommand(name="Get package name", command="grep AC_INIT configure.ac | sed 's~.*\[\(.*\)\].*\[\(.*\)\].*\[\(.*\)\].*~\\1~'", property="package", want_stdout=True, want_stderr=True))
srcCppcheck.addStep(steps.SetPropertyFromCommand(name="Get package version", command="grep AC_INIT configure.ac | sed 's~.*\[\(.*\)\].*\[\(.*\)\].*\[\(.*\)\].*~\\2~'", property="version", want_stdout=True, want_stderr=True))
srcCppcheck.addStep(steps.ShellCommand(name="Generate autotools files",command=["./bootstrap.sh"], want_stdout=True, want_stderr=True))
srcCppcheck.addStep(steps.Configure(name='Default configuration', command=["./configure","--disable-doxygen"], want_stdout=True, want_stderr=True, logfiles={"config.log": "config.log"}))
srcCppcheck.addStep(steps.Test(name="Default make cppcheck",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "cppcheck" ], want_stdout=True, want_stderr=True, haltOnFailure=True, logfiles={"cppcheck.xml": "cppcheck.xml"}))
srcCppcheck.addStep(steps.DirectoryUpload(name="Cppcheck upload report", workersrc="cppcheck", masterdest=util.Interpolate("/var/www/packages.cerbelle.net/%(prop:package)s/%(prop:basename)s-cppcheck"), urlText="CppCheck report", url=util.Interpolate("https://packages.cerbelle.net/%(prop:package)s/%(prop:basename)s-cppcheck")))
srcCppcheck.addStep(steps.Compile(name="Default make clean",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "clean" ], want_stdout=True, want_stderr=True))
srcCppcheck.addStep(steps.Compile(name="Default make distclean",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "distclean" ], want_stdout=True, want_stderr=True))
c['builders'].append( util.BuilderConfig(
    project="mkernel",
    name="SrcCppcheck",
    workernames=["bb-dist"],
    factory=srcCppcheck))

src-dbg

Pre-requisite: mercurial build-essential autogen autoconf autopoint libtool check

Worker: bb-dist

Steps:
  1. hg clone
  2. ./bootstrap.sh
  3. ./configure --enable-debug
  4. make all check clean
  5. make distclean
srcdbg = util.BuildFactory()
srcdbg.addStep(steps.RemoveDirectory(name='Cleanup environment',dir="build"))
srcdbg.addStep(steps.Mercurial(name="Clone repository",repourl='http://hg.cerbelle.net/hg/mkernel', mode='full', method='fresh', branchType='inrepo'))
srcdbg.addStep(steps.SetPropertyFromCommand(name="Get package name", command="grep AC_INIT configure.ac | sed 's~.*\[\(.*\)\].*\[\(.*\)\].*\[\(.*\)\].*~\\1~'", property="package", want_stdout=True, want_stderr=True))
srcdbg.addStep(steps.SetPropertyFromCommand(name="Get package version", command="grep AC_INIT configure.ac | sed 's~.*\[\(.*\)\].*\[\(.*\)\].*\[\(.*\)\].*~\\2~'", property="version", want_stdout=True, want_stderr=True))
srcdbg.addStep(steps.ShellCommand(name="Generate autotools files",command=["./bootstrap.sh"], want_stdout=True, want_stderr=True))
srcdbg.addStep(steps.Configure(name='Default configuration for debug', command=["./configure","--disable-doxygen", "--enable-debug"], want_stdout=True, want_stderr=True, logfiles={"config.log": "config.log"}))
srcdbg.addStep(steps.Compile(name="Default make all",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "all" ], want_stdout=True, want_stderr=True))
srcdbg.addStep(steps.Test(name="Default make check",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "check" ], want_stdout=True, want_stderr=True, haltOnFailure=True, logfiles={"testsuite.log": "test/testsuite.log"}, locks=[oomtest_lock.access('exclusive')]))
srcdbg.addStep(steps.Compile(name="Default make clean",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "clean" ], want_stdout=True, want_stderr=True))
srcdbg.addStep(steps.Compile(name="Default make distclean",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "distclean" ], want_stdout=True, want_stderr=True))
c['builders'].append( util.BuilderConfig(
    project="mkernel",
    name="SrcDbg",
    workernames=["bb-dist"],
    factory=srcdbg))

src-gcov

Pre-requisite: mercurial build-essential autogen autoconf autopoint libtool check

Worker: bb-dist

Steps:
  1. hg clone
  2. ./bootstrap.sh
  3. ./configure --enable-gcov
  4. make all check lcov clean
  5. gcov `find . -name '*.gcno'`
  6. make distclean
srcgcov = util.BuildFactory()
srcgcov.addStep(steps.RemoveDirectory(name='Cleanup environment',dir="build"))
srcgcov.addStep(steps.Mercurial(name="Clone repository",repourl='http://hg.cerbelle.net/hg/mkernel', mode='full', method='fresh', branchType='inrepo'))
srcgcov.addStep(steps.SetPropertyFromCommand(name="Get package name", command="grep AC_INIT configure.ac | sed 's~.*\[\(.*\)\].*\[\(.*\)\].*\[\(.*\)\].*~\\1~'", property="package", want_stdout=True, want_stderr=True))
srcgcov.addStep(steps.SetPropertyFromCommand(name="Get package version", command="grep AC_INIT configure.ac | sed 's~.*\[\(.*\)\].*\[\(.*\)\].*\[\(.*\)\].*~\\2~'", property="version", want_stdout=True, want_stderr=True))
srcgcov.addStep(steps.ShellCommand(name="Generate autotools files",command=["./bootstrap.sh"], want_stdout=True, want_stderr=True))
srcgcov.addStep(steps.Configure(name='Default configuration for gcov', command=["./configure","--disable-doxygen", "--enable-gcov"], want_stdout=True, want_stderr=True, logfiles={"config.log": "config.log"}))
srcgcov.addStep(steps.Compile(name="Default make all",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "all" ], want_stdout=True, want_stderr=True))
srcgcov.addStep(steps.Test(name="Default make check",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "check" ], want_stdout=True, want_stderr=True, haltOnFailure=True, logfiles={"testsuite.log": "test/testsuite.log"}, locks=[oomtest_lock.access('exclusive')]))
srcgcov.addStep(steps.ShellCommand(name="Check coverage statistics",command="gcov -n `find . -type f -name '*.gcno'`", want_stdout=True, want_stderr=True))
srcgcov.addStep(steps.Compile(name="Default make clean",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "clean" ], want_stdout=True, want_stderr=True))
srcgcov.addStep(steps.Compile(name="Default make distclean",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "distclean" ], want_stdout=True, want_stderr=True))
c['builders'].append( util.BuilderConfig(
    project="mkernel",
    name="SrcGcov",
    workernames=["bb-dist"],
    factory=srcgcov))

src-dbggcov

Pre-requisites: mercurial build-essential autogen autoconf autopoint libtool check

Worker: bb-dist

Steps:
  1. hg clone
  2. ./bootstrap.sh
  3. ./configure --enable-debug --enable-gcov
  4. make all check clean
  5. gcov `find . -name '*.gcno'`
  6. make distclean
srcdbggcov = util.BuildFactory()
srcdbggcov.addStep(steps.RemoveDirectory(name='Cleanup environment',dir="build"))
srcdbggcov.addStep(steps.Mercurial(name="Clone repository",repourl='http://hg.cerbelle.net/hg/mkernel', mode='full', method='fresh', branchType='inrepo'))
srcdbggcov.addStep(steps.SetPropertyFromCommand(name="Get package name", command="grep AC_INIT configure.ac | sed 's~.*\[\(.*\)\].*\[\(.*\)\].*\[\(.*\)\].*~\\1~'", property="package", want_stdout=True, want_stderr=True))
srcdbggcov.addStep(steps.SetPropertyFromCommand(name="Get package version", command="grep AC_INIT configure.ac | sed 's~.*\[\(.*\)\].*\[\(.*\)\].*\[\(.*\)\].*~\\2~'", property="version", want_stdout=True, want_stderr=True))
srcdbggcov.addStep(steps.ShellCommand(name="Generate autotools files",command=["./bootstrap.sh"], want_stdout=True, want_stderr=True))
srcdbggcov.addStep(steps.Configure(name='Default configuration for gcov and debug', command=["./configure","--disable-doxygen", "--enable-debug", "--enable-gcov"], want_stdout=True, want_stderr=True, logfiles={"config.log": "config.log"}))
srcdbggcov.addStep(steps.Compile(name="Default make all",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "all" ], want_stdout=True, want_stderr=True))
srcdbggcov.addStep(steps.Test(name="Default make check",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "check" ], want_stdout=True, want_stderr=True, haltOnFailure=True, logfiles={"testsuite.log": "test/testsuite.log"}, locks=[oomtest_lock.access('exclusive')]))
srcdbggcov.addStep(steps.ShellCommand(name="Check coverage statistics",command="gcov -n `find . -type f -name '*.gcno'`", want_stdout=True, want_stderr=True))
srcdbggcov.addStep(steps.Compile(name="Default make clean",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "clean" ], want_stdout=True, want_stderr=True))
srcdbggcov.addStep(steps.Compile(name="Default make distclean",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "distclean" ], want_stdout=True, want_stderr=True))
c['builders'].append( util.BuilderConfig(
    project="mkernel",
    name="SrcDbgGcov",
    workernames=["bb-dist"],
    factory=srcdbggcov))

src-gprof

Pre-requisite: mercurial build-essential autogen autoconf autopoint libtool check

Worker: bb-dist

Steps:
  1. hg clone
  2. ./bootstrap.sh
  3. ./configure --enable-gprof
  4. make all check clean
  5. gprof ./src/mkernel `find src -name 'gmon.out'`
  6. make distclean
srcgprof = util.BuildFactory()
srcgprof.addStep(steps.RemoveDirectory(name='Cleanup environment',dir="build"))
srcgprof.addStep(steps.Mercurial(name="Clone repository",repourl='http://hg.cerbelle.net/hg/mkernel', mode='full', method='fresh', branchType='inrepo'))
srcgprof.addStep(steps.SetPropertyFromCommand(name="Get package name", command="grep AC_INIT configure.ac | sed 's~.*\[\(.*\)\].*\[\(.*\)\].*\[\(.*\)\].*~\\1~'", property="package", want_stdout=True, want_stderr=True))
srcgprof.addStep(steps.SetPropertyFromCommand(name="Get package version", command="grep AC_INIT configure.ac | sed 's~.*\[\(.*\)\].*\[\(.*\)\].*\[\(.*\)\].*~\\2~'", property="version", want_stdout=True, want_stderr=True))
srcgprof.addStep(steps.ShellCommand(name="Generate autotools files",command=["./bootstrap.sh"], want_stdout=True, want_stderr=True))
srcgprof.addStep(steps.Configure(name='Default configuration for gprof', command=["./configure","--disable-doxygen", "--enable-gprof"], want_stdout=True, want_stderr=True, logfiles={"config.log": "config.log"}))
srcgprof.addStep(steps.Compile(name="Default make all",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "all" ], want_stdout=True, want_stderr=True))
srcgprof.addStep(steps.Test(name="Default make check",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "check" ], want_stdout=True, want_stderr=True, haltOnFailure=True, logfiles={"testsuite.log": "test/testsuite.log"}, locks=[oomtest_lock.access('exclusive')]))
srcgprof.addStep(steps.Compile(name="Default make clean",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "clean" ], want_stdout=True, want_stderr=True))
srcgprof.addStep(steps.Compile(name="Default make distclean",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "distclean" ], want_stdout=True, want_stderr=True))
c['builders'].append( util.BuilderConfig(
    project="mkernel",
    name="SrcGprof",
    workernames=["bb-dist"],
    factory=srcgprof))

src-gdb

Pre-requisites: mercurial build-essential autogen autoconf autopoint libtool check

Worker: bb-dist

Steps:
  1. hg clone
  2. ./bootstrap.sh
  3. ./configure --enable-gdb
  4. make all check clean
  5. make distclean
srcgdb = util.BuildFactory()
srcgdb.addStep(steps.RemoveDirectory(name='Cleanup environment',dir="build"))
srcgdb.addStep(steps.Mercurial(name="Clone repository",repourl='http://hg.cerbelle.net/hg/mkernel', mode='full', method='fresh', branchType='inrepo'))
srcgdb.addStep(steps.SetPropertyFromCommand(name="Get package name", command="grep AC_INIT configure.ac | sed 's~.*\[\(.*\)\].*\[\(.*\)\].*\[\(.*\)\].*~\\1~'", property="package", want_stdout=True, want_stderr=True))
srcgdb.addStep(steps.SetPropertyFromCommand(name="Get package version", command="grep AC_INIT configure.ac | sed 's~.*\[\(.*\)\].*\[\(.*\)\].*\[\(.*\)\].*~\\2~'", property="version", want_stdout=True, want_stderr=True))
srcgdb.addStep(steps.ShellCommand(name="Generate autotools files",command=["./bootstrap.sh"], want_stdout=True, want_stderr=True))
srcgdb.addStep(steps.Configure(name='Default configuration for gdb', command=["./configure","--disable-doxygen", "--enable-gdb"], want_stdout=True, want_stderr=True, logfiles={"config.log": "config.log"}))
srcgdb.addStep(steps.Compile(name="Default make all",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "all" ], want_stdout=True, want_stderr=True))
srcgdb.addStep(steps.Test(name="Default make check",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "check" ], want_stdout=True, want_stderr=True, haltOnFailure=True, logfiles={"testsuite.log": "test/testsuite.log"}, locks=[oomtest_lock.access('exclusive')]))
srcgdb.addStep(steps.Compile(name="Default make clean",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "clean" ], want_stdout=True, want_stderr=True))
srcgdb.addStep(steps.Compile(name="Default make distclean",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "distclean" ], want_stdout=True, want_stderr=True))
c['builders'].append( util.BuilderConfig(
    project="mkernel",
    name="SrcGdb",
    workernames=["bb-dist"],
    factory=srcgdb))

src-dist

Pre-requisites: mercurial build-essential autogen autoconf autopoint libtool gettext check

Worker: bb-dist

Steps:
  1. hg clone
  2. ./bootstrap.sh
  3. ./configure
  4. make dist distcheck distclean
  5. Upload tgz
  6. make distclean
srcdist = util.BuildFactory()
srcdist.addStep(steps.RemoveDirectory(name='Cleanup environment',dir="build"))
srcdist.addStep(steps.SetProperty(name="Compute basename", property="basename", value=util.Interpolate("%(prop:package)s-%(prop:version)s")))
srcdist.addStep(steps.Mercurial(name="Clone repository",repourl='http://hg.cerbelle.net/hg/mkernel', mode='full', method='fresh', branchType='inrepo'))
srcdist.addStep(steps.SetPropertyFromCommand(name="Get package name", command="grep AC_INIT configure.ac | sed 's~.*\[\(.*\)\].*\[\(.*\)\].*\[\(.*\)\].*~\\1~'", property="package", want_stdout=True, want_stderr=True))
srcdist.addStep(steps.SetPropertyFromCommand(name="Get package version", command="grep AC_INIT configure.ac | sed 's~.*\[\(.*\)\].*\[\(.*\)\].*\[\(.*\)\].*~\\2~'", property="version", want_stdout=True, want_stderr=True))
srcdist.addStep(steps.ShellCommand(name="Generate autotools files",command=["./bootstrap.sh"], want_stdout=True, want_stderr=True))
srcdist.addStep(steps.Configure(name='Default configuration', command=["./configure","--disable-doxygen" ], want_stdout=True, want_stderr=True, logfiles={"config.log": "config.log"}))
srcdist.addStep(steps.Compile(name="Default make dist",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "dist" ], want_stdout=True, want_stderr=True))
srcdist.addStep(steps.Test(name="Default make distcheck",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "distcheck" ], want_stdout=True, want_stderr=True, haltOnFailure=True, locks=[oomtest_lock.access('exclusive')]))
srcdist.addStep(steps.Compile(name="Default make distclean",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "distclean" ], want_stdout=True, want_stderr=True))
srcdist.addStep(steps.MultipleFileUpload(name="Default publish sources dist files",
  workersrcs=[
    util.Interpolate("%(prop:basename)s.tar.*"),
    util.Interpolate("%(prop:basename)s.zip"),
  ],
  masterdest=util.Interpolate("/var/www/packages.cerbelle.net/%(prop:package)s"), url=util.Interpolate("https://packages.cerbelle.net/%(prop:package)s/"),
  urlText="Sources folder", mode=0o755, glob=True, keepstamp=True))
srcdist.addStep(steps.MasterShellCommand(name="Fix www folders permissions",command=["chmod", "-R", "u+rw,go+r", util.Interpolate("/var/www/packages.cerbelle.net/%(prop:package)s")]))
srcdist.addStep(steps.Trigger(
  schedulerNames=['MKernel_Triggerable'], waitForFinish=False, updateSourceStamp=True,
  set_properties={
    'package'  : util.Interpolate("%(prop:package)s"),
    'version'  : util.Interpolate("%(prop:version)s"),
}))
c['builders'].append( util.BuilderConfig(
    project="mkernel",
    name="SrcDist",
    workernames=["bb-dist"],
    factory=srcdist))

src-inst

Pre-requisites: mercurial build-essential autogen autoconf autopoint libtool check

Worker: bb-dist

Steps:
  1. hg clone
  2. ./bootstrap.sh
  3. ./configure --prefix=`pwd`/inst
  4. make install installcheck uninstall
  5. make distclean
srcinst = util.BuildFactory()
srcinst.addStep(steps.RemoveDirectory(name='Cleanup environment',dir="build"))
srcinst.addStep(steps.Mercurial(name="Clone repository",repourl='http://hg.cerbelle.net/hg/mkernel', mode='full', method='fresh', branchType='inrepo'))
srcinst.addStep(steps.SetPropertyFromCommand(name="Get package name", command="grep AC_INIT configure.ac | sed 's~.*\[\(.*\)\].*\[\(.*\)\].*\[\(.*\)\].*~\\1~'", property="package", want_stdout=True, want_stderr=True))
srcinst.addStep(steps.SetPropertyFromCommand(name="Get package version", command="grep AC_INIT configure.ac | sed 's~.*\[\(.*\)\].*\[\(.*\)\].*\[\(.*\)\].*~\\2~'", property="version", want_stdout=True, want_stderr=True))
srcinst.addStep(steps.ShellCommand(name="Generate autotools files",command=["./bootstrap.sh"], want_stdout=True, want_stderr=True))
srcinst.addStep(steps.Configure(name='Default configuration', command=["./configure", util.Interpolate("--prefix=%(prop:builddir)s/inst"), "--disable-doxygen" ], want_stdout=True, want_stderr=True, logfiles={"config.log": "config.log"}))
srcinst.addStep(steps.Compile(name="Default make install",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "install" ], want_stdout=True, want_stderr=True))
srcinst.addStep(steps.Test(name="Default make installcheck",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "installcheck" ], want_stdout=True, want_stderr=True, haltOnFailure=True, locks=[oomtest_lock.access('exclusive')]))
srcinst.addStep(steps.Compile(name="Default make uninstall",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "uninstall" ], want_stdout=True, want_stderr=True))
srcinst.addStep(steps.Compile(name="Default make distclean",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "distclean" ], want_stdout=True, want_stderr=True))
c['builders'].append( util.BuilderConfig(
    project="mkernel",
    name="SrcInst",
    workernames=["bb-dist"],
    factory=srcinst))

dist-dox

Pre-requisites: build-essential doxygen doxygen-latex

Worker: bb-linux

Steps:>
  1. Download TGZ
  2. ./configure --enable-latex-docs
  3. make -C doc html/index.html
  4. Upload HTML
  5. make -C doc mkernel.pdf
  6. Upload PDF
  7. make distclean
distdox = util.BuildFactory()
distdox.addStep(steps.RemoveDirectory(name='Cleanup environment',dir="build"))
distdox.addStep(steps.SetProperty(name="Compute basename", property="basename", value=util.Interpolate("%(prop:package)s-%(prop:version)s")))
distdox.addStep(steps.FileDownload(name="Download sources",mastersrc=util.Interpolate("/var/www/packages.cerbelle.net/%(prop:package)s/%(prop:basename)s.tar.gz"),workerdest=util.Interpolate("%(prop:basename)s.tar.gz")))
distdox.addStep(steps.ShellCommand(name='Extract sources from dist', command=['tar', 'xvzf', util.Interpolate("%(prop:basename)s.tar.gz")], want_stdout=True, want_stderr=True))
distdox.addStep(steps.MakeDirectory(name='Create a build folder', dir=util.Interpolate("build/%(prop:basename)s-build")))
distdox.addStep(steps.Configure(name='Doxygen configure (Out of tree)', command=[util.Interpolate("../%(prop:basename)s/configure"), '--prefix=/usr', '--enable-latex-docs' ], workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True, logfiles={"config.log": "config.log"}))
distdox.addStep(steps.Compile(name="Doxygen make HTML (Out of tree)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "-C", "doc", "all" ], workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True))
distdox.addStep(steps.DirectoryUpload(name="Upload HTML refman", workersrc=util.Interpolate("%(prop:basename)s-build/doc/html"), masterdest=util.Interpolate("/var/www/packages.cerbelle.net/%(prop:package)s/%(prop:basename)s-refman"), urlText="HTML Refman", url=util.Interpolate("https://packages.cerbelle.net/%(prop:package)s/%(prop:basename)s-refman")))
distdox.addStep(steps.Compile(name="Doxygen make PDF (Out of tree)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "pdf" ], workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True))
distdox.addStep(steps.FileUpload(name="Upload PDF refman", workersrc=util.Interpolate("%(prop:basename)s-build/doc/latex/refman.pdf"), masterdest=util.Interpolate('/var/www/packages.cerbelle.net/%(prop:package)s/%(prop:basename)s-refman.pdf'),mode=0o755,urlText="PDF Refman",url=util.Interpolate("https://packages.cerbelle.net/%(prop:package)s/%(prop:basename)s-refman.pdf")))
distdox.addStep(steps.Compile(name="Doxygen make clean (Out of tree)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "clean" ],workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True))
distdox.addStep(steps.Compile(name="Doxygen make distclean (Out of tree)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "distclean" ],workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True))
c['builders'].append( util.BuilderConfig(
    project="mkernel",
    name="DistDox",
    workernames=["bb-linux"],
    factory=distdox))

dist-lcov

Pre-requisites: build-essential check pkg-config lcov

Worker: bb-linux

Steps:
  1. Download TGZ
  2. ./configure --disable-doxygen --enable-debug --enable-gcov
  3. make all check lcov
  4. Upload LCOV
  5. make clean distclean
distlcov = util.BuildFactory()
distlcov.addStep(steps.RemoveDirectory(name='Cleanup environment',dir="build"))
distlcov.addStep(steps.SetProperty(name="Compute basename", property="basename", value=util.Interpolate("%(prop:package)s-%(prop:version)s")))
distlcov.addStep(steps.FileDownload(name="Download sources",mastersrc=util.Interpolate("/var/www/packages.cerbelle.net/%(prop:package)s/%(prop:basename)s.tar.gz"),workerdest=util.Interpolate("%(prop:basename)s.tar.gz")))
distlcov.addStep(steps.ShellCommand(name='Extract sources from dist', command=['tar', 'xvzf', util.Interpolate("%(prop:basename)s.tar.gz")], want_stdout=True, want_stderr=True))
distlcov.addStep(steps.MakeDirectory(name='Create a build folder', dir=util.Interpolate("build/%(prop:basename)s-build")))
distlcov.addStep(steps.Configure(name='Default configure (Out of tree)', command=[util.Interpolate("../%(prop:basename)s/configure"), '--prefix=/usr', '--disable-doxygen', '--enable-gcov', '--enable-debug' ], workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True, logfiles={"config.log": "config.log"}))
distlcov.addStep(steps.Compile(name="Default make all (Out of tree)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "all" ],workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True))
distlcov.addStep(steps.Test(name="Default make check (Out of tree)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "check" ],workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True, haltOnFailure=True, logfiles={"testsuite.log": "test/testsuite.log"}, locks=[oomtest_lock.access('exclusive')]))
distlcov.addStep(steps.Compile(name="Default make lcov (Out of tree)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "lcov" ],workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True))
distlcov.addStep(steps.DirectoryUpload(name="LCov upload coverage tests report", workersrc=util.Interpolate("%(prop:basename)s-build/lcov"), masterdest=util.Interpolate("/var/www/packages.cerbelle.net/%(prop:package)s/%(prop:basename)s-dbg-lcov"), urlText="Coverage report (Debug)", url=util.Interpolate("https://packages.cerbelle.net/%(prop:package)s/%(prop:basename)s-dbg-lcov")))
distlcov.addStep(steps.Compile(name="Default make clean (Out of tree)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "clean" ],workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True))
distlcov.addStep(steps.Compile(name="Default make distclean (Out of tree)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "distclean" ],workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True))
c['builders'].append( util.BuilderConfig(
    project="mkernel",
    name="DistLCov",
    workernames=["bb-linux"],
    factory=distlcov))

dist-gprof

Pre-requisites: build-essential check pkg-config

Worker: bb-linux

Steps:
  1. Download TGZ
  2. ./configure --disable-doxygen --enable-gprof
  3. make all check clean distclean
distgprof = util.BuildFactory()
distgprof.addStep(steps.RemoveDirectory(name='Cleanup environment',dir="build"))
distgprof.addStep(steps.SetProperty(name="Compute basename", property="basename", value=util.Interpolate("%(prop:package)s-%(prop:version)s")))
distgprof.addStep(steps.FileDownload(name="Download sources",mastersrc=util.Interpolate("/var/www/packages.cerbelle.net/%(prop:package)s/%(prop:basename)s.tar.gz"),workerdest=util.Interpolate("%(prop:basename)s.tar.gz")))
distgprof.addStep(steps.ShellCommand(name='Extract sources from dist', command=['tar', 'xvzf', util.Interpolate("%(prop:basename)s.tar.gz")], want_stdout=True, want_stderr=True))
distgprof.addStep(steps.MakeDirectory(name='Create a build folder', dir=util.Interpolate("build/%(prop:basename)s-build")))
distgprof.addStep(steps.Configure(name='Default configure (Out of tree)', command=[util.Interpolate("../%(prop:basename)s/configure"), '--prefix=/usr', '--disable-doxygen', '--enable-gprof' ], workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True, logfiles={"config.log": "config.log"}))
distgprof.addStep(steps.Compile(name="Default make all (Out of tree)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "all" ],workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True))
distgprof.addStep(steps.Test(name="Default make check (Out of tree)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "check" ],workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True, haltOnFailure=True, locks=[oomtest_lock.access('exclusive')]))
distgprof.addStep(steps.ShellCommand(name='Run unforked check_oom', command=['./check_oom'], workdir=util.Interpolate("build/%(prop:basename)s-build/test", env={'CK_FORK': 'no'}), want_stdout=True, want_stderr=True, locks=[oomtest_lock.access('exclusive')]))
distgprof.addStep(steps.Test(name="Profiling ./check_oom (Out of tree)",command=["../libtool", "--mode=execute", "gprof", "./check_oom" ], workdir=util.Interpolate("build/%(prop:basename)s-build/test"), want_stdout=True, want_stderr=True, haltOnFailure=True))
distgprof.addStep(steps.ShellCommand(name='Run unforked check_test', command=['./check_test'], workdir=util.Interpolate("build/%(prop:basename)s-build/test", env={'CK_FORK': 'no'}), want_stdout=True, want_stderr=True, locks=[oomtest_lock.access('exclusive')]))
distgprof.addStep(steps.Test(name="Profiling ./check_test (Out of tree)",command=["../libtool", "--mode=execute", "gprof", "./check_test" ], workdir=util.Interpolate("build/%(prop:basename)s-build/test"), want_stdout=True, want_stderr=True, haltOnFailure=True))
distgprof.addStep(steps.ShellCommand(name='Run unforked check_libdebug', command=['./check_libdebug'], workdir=util.Interpolate("build/%(prop:basename)s-build/test", env={'CK_FORK': 'no'}), want_stdout=True, want_stderr=True, locks=[oomtest_lock.access('exclusive')]))
distgprof.addStep(steps.Test(name="Profiling ./check_libdebug (Out of tree)",command=["../libtool", "--mode=execute", "gprof", "./check_libdebug" ], workdir=util.Interpolate("build/%(prop:basename)s-build/test"), want_stdout=True, want_stderr=True, haltOnFailure=True))
distgprof.addStep(steps.ShellCommand(name='Run unforked check_modmgr', command=['./check_modmgr'], workdir=util.Interpolate("build/%(prop:basename)s-build/test", env={'CK_FORK': 'no'}), want_stdout=True, want_stderr=True, locks=[oomtest_lock.access('exclusive')]))
distgprof.addStep(steps.Test(name="Profiling ./check_modmgr (Out of tree)",command=["../libtool", "--mode=execute", "gprof", "./check_modmgr" ], workdir=util.Interpolate("build/%(prop:basename)s-build/test"), want_stdout=True, want_stderr=True, haltOnFailure=True))
distgprof.addStep(steps.ShellCommand(name='Run unforked check_svcmgr', command=['./check_svcmgr'], workdir=util.Interpolate("build/%(prop:basename)s-build/test", env={'CK_FORK': 'no'}), want_stdout=True, want_stderr=True, locks=[oomtest_lock.access('exclusive')]))
distgprof.addStep(steps.Test(name="Profiling ./check_svcmgr (Out of tree)",command=["../libtool", "--mode=execute", "gprof", "./check_svcmgr" ], workdir=util.Interpolate("build/%(prop:basename)s-build/test"), want_stdout=True, want_stderr=True, haltOnFailure=True))
distgprof.addStep(steps.Compile(name="Default make clean (Out of tree)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "clean" ],workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True))
distgprof.addStep(steps.Compile(name="Default make distclean (Out of tree)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "distclean" ],workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True))
c['builders'].append( util.BuilderConfig(
    project="mkernel",
    name="DistGProf",
    workernames=["bb-linux"],
    factory=distgprof))

dist-gdb

Pre-requisites: build-essential check pkg-config

Worker: bb-linux

Steps:
  1. Download TGZ
  2. ./configure --disable-doxygen --enable-gdb
  3. make all check clean distclean
distgdb = util.BuildFactory()
distgdb.addStep(steps.RemoveDirectory(name='Cleanup environment',dir="build"))
distgdb.addStep(steps.SetProperty(name="Compute basename", property="basename", value=util.Interpolate("%(prop:package)s-%(prop:version)s")))
distgdb.addStep(steps.FileDownload(name="Download sources",mastersrc=util.Interpolate("/var/www/packages.cerbelle.net/%(prop:package)s/%(prop:basename)s.tar.gz"),workerdest=util.Interpolate("%(prop:basename)s.tar.gz")))
distgdb.addStep(steps.ShellCommand(name='Extract sources from dist', command=['tar', 'xvzf', util.Interpolate("%(prop:basename)s.tar.gz")], want_stdout=True, want_stderr=True))
distgdb.addStep(steps.MakeDirectory(name='Create a build folder', dir=util.Interpolate("build/%(prop:basename)s-build")))
distgdb.addStep(steps.Configure(name='Default configure (Out of tree)', command=[util.Interpolate("../%(prop:basename)s/configure"), '--prefix=/usr', '--disable-doxygen', '--enable-gdb' ], workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True, logfiles={"config.log": "config.log"}))
distgdb.addStep(steps.Compile(name="Default make all (Out of tree)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "all" ],workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True))
distgdb.addStep(steps.Test(name="Default make check (Out of tree)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "check" ],workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True, haltOnFailure=True, logfiles={"testsuite.log": "test/testsuite.log"}, locks=[oomtest_lock.access('exclusive')]))
distgdb.addStep(steps.Compile(name="Default make clean (Out of tree)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "clean" ],workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True))
distgdb.addStep(steps.Compile(name="Default make distclean (Out of tree)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "distclean" ],workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True))
c['builders'].append( util.BuilderConfig(
    project="mkernel",
    name="DistGdb",
    workernames=["bb-linux"],
    factory=distgdb))

bin-linux

Pre-requisites: build-essential check pkg-config doxygen doxygen-latex fuse3

Worker: bb-linux

Steps:
  1. Download TGZ
  2. ./configure
  3. make all check
  4. make AppImage
  5. Upload AppImage
  6. make clean distclean
binlin = util.BuildFactory()
binlin.addStep(steps.RemoveDirectory(name='Cleanup environment',dir="build"))
binlin.addStep(steps.SetProperty(name="Compute basename", property="basename", value=util.Interpolate("%(prop:package)s-%(prop:version)s")))
binlin.addStep(steps.FileDownload(name="Download sources",mastersrc=util.Interpolate("/var/www/packages.cerbelle.net/%(prop:package)s/%(prop:basename)s.tar.gz"),workerdest=util.Interpolate("%(prop:basename)s.tar.gz")))
binlin.addStep(steps.ShellCommand(name='Extract sources from dist', command=['tar', 'xvzf', util.Interpolate("%(prop:basename)s.tar.gz")], want_stdout=True, want_stderr=True))
binlin.addStep(steps.MakeDirectory(name='Create a build folder', dir=util.Interpolate("build/%(prop:basename)s-build")))
binlin.addStep(steps.Configure(name='Default configure (Out of tree)', command=[util.Interpolate("../%(prop:basename)s/configure"), '--prefix=/usr' ], workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True, logfiles={"config.log": "config.log"}))
binlin.addStep(steps.Compile(name="Default make all (Out of tree)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "all" ],workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True))
binlin.addStep(steps.Test(name="Default make check (Out of tree)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "check" ],workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True, haltOnFailure=True, logfiles={"testsuite.log": "test/testsuite.log"}, locks=[oomtest_lock.access('exclusive')]))
binlin.addStep(steps.Compile(name="Default make install (Out of tree, DESTDIR)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), util.Interpolate('DESTDIR=%(prop:builddir)s/build/%(prop:basename)s-linux'), "install" ],workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True))
binlin.addStep(steps.ShellCommand(name='Default create the archive', command=['tar', 'cvzf', util.Interpolate('%(prop:basename)s-linux.tar.gz'), util.Interpolate('%(prop:basename)s-linux')], want_stdout=True, want_stderr=True))
binlin.addStep(steps.FileUpload(name="Upload linux binary", workersrc=util.Interpolate('%(prop:basename)s-linux.tar.gz'), masterdest=util.Interpolate('/var/www/packages.cerbelle.net/%(prop:package)s/%(prop:basename)s-linux.tar.gz'),mode=0o755,urlText="Linux binaries",url=util.Interpolate("https://packages.cerbelle.net/%(prop:package)s/%(prop:basename)s-linux.tar.gz")))
binlin.addStep(steps.ShellCommand(name="Get linuxdeploy for Appimages",command=["wget","https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage"], want_stdout=True, want_stderr=True))
binlin.addStep(steps.ShellCommand(name="Make linuxdeploy executable",command=["chmod","+x","linuxdeploy-x86_64.AppImage"], want_stdout=True, want_stderr=True))
binlin.addStep(steps.ShellCommand(name='Build AppImage', command=[ "./linuxdeploy-x86_64.AppImage","--appdir",util.Interpolate('%(prop:basename)s-linux'),"-e",util.Interpolate('%(prop:basename)s-linux/usr/bin/mkernel'),"-i",util.Interpolate("%(prop:basename)s/resources/mkernel.png"),"-d",util.Interpolate("%(prop:basename)s/resources/mkernel.desktop"),"--output","appimage" ], env={'LD_LIBRARY_PATH': util.Interpolate("%(prop:basename)s-linux/usr/lib/mkernel")}, want_stdout=True, want_stderr=True))
binlin.addStep(steps.FileUpload(name="Upload linux AppImage", workersrc="MKernel-x86_64.AppImage", masterdest=util.Interpolate('/var/www/packages.cerbelle.net/%(prop:package)s/MKernel-x86_64.AppImage'),mode=0o755,urlText="Linux AppImage",url=util.Interpolate("https://packages.cerbelle.net/%(prop:package)s/MKernel-x86_64.AppImage")))
binlin.addStep(steps.Compile(name="Default make distclean (Out of tree)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "distclean" ],workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True))
c['builders'].append( util.BuilderConfig(
    project="mkernel",
    name="BinLinux",
    workernames=["bb-linux"],
    factory=binlin))

bin-windows

Pre-requisites: see Cross_compilation_on_Debian_for_Windows

Worker: bb-mingw

Steps:
  1. Download TGZ
  2. ./configure --host=
  3. make all install
  4. Create a zip
  5. Upload ZIP
  6. make windows
  7. Upload installer.exe
  8. make clean distclean
binwin = util.BuildFactory()
binwin.addStep(steps.RemoveDirectory(name='Cleanup environment',dir="build"))
binwin.addStep(steps.SetProperty(name="Compute basename", property="basename", value=util.Interpolate("%(prop:package)s-%(prop:version)s")))
binwin.addStep(steps.FileDownload(name="Download sources",mastersrc=util.Interpolate("/var/www/packages.cerbelle.net/%(prop:package)s/%(prop:basename)s.tar.gz"),workerdest=util.Interpolate("%(prop:basename)s.tar.gz")))
binwin.addStep(steps.ShellCommand(name='Extract sources from dist', command=['tar', 'xvzf', util.Interpolate("%(prop:basename)s.tar.gz")], want_stdout=True, want_stderr=True))
binwin.addStep(steps.MakeDirectory(name='Create a build folder', dir=util.Interpolate("build/%(prop:basename)s-build")))
binwin.addStep(steps.Configure(name='Default configure (Out of tree)', command=[util.Interpolate("../%(prop:basename)s/configure"), '--prefix=/usr', '--host=x86_64-w64-mingw32', 'ac_cv_func_malloc_0_nonnull=yes','ac_cv_func_realloc_0_nonnull=yes' ], workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True, logfiles={"config.log": "config.log"}))
binwin.addStep(steps.Compile(name="Default make all (Out of tree)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), "all" ],workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True))
binwin.addStep(steps.Compile(name="Default make install (Out of tree, DESTDIR)",command=["make", util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), util.Interpolate('DESTDIR=%(prop:builddir)s/build/%(prop:basename)s-win64'), "install" ], workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True))
binwin.addStep(steps.ShellCommand(name='Create the archive', command=['zip', '-r', util.Interpolate('%(prop:basename)s-win64.zip'), util.Interpolate('%(prop:basename)s-win64')], want_stdout=True, want_stderr=True))
binwin.addStep(steps.FileUpload(name="Upload windows binary archive", workersrc=util.Interpolate('%(prop:basename)s-win64.zip'), masterdest=util.Interpolate('/var/www/packages.cerbelle.net/%(prop:package)s/%(prop:basename)s-win64.zip'),mode=0o755,urlText="Win64 binaries",url=util.Interpolate("https://packages.cerbelle.net/%(prop:package)s/%(prop:basename)s-win64.zip")))
binwin.addStep(steps.Compile(name="Create installer", command=['make', util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), 'windows', util.Interpolate('DESTDIR=%(prop:builddir)s/build/%(prop:basename)s-win64')], workdir=util.Interpolate("build/%(prop:basename)s-build"), want_stdout=True, want_stderr=True))
binwin.addStep(steps.FileUpload(workersrc=util.Interpolate("%(prop:basename)s-build/mkernel-installer.exe"), masterdest=util.Interpolate("/var/www/packages.cerbelle.net/%(prop:package)s/mkernel-installer.exe"),mode=0o755,urlText="Windows installer",url=util.Interpolate("https://packages.cerbelle.net/%(prop:package)s/mkernel-installer.exe")))
c['builders'].append( util.BuilderConfig(
    name="BinWindows",
    workernames=["bb-mingw"],
    factory=binwin))

bin-deb

Pre-requisites: pbuilder

Worker: bb-debian

Steps: #

bindeb = util.BuildFactory()
bindeb.addStep(steps.RemoveDirectory(name='Cleanup environment',dir="build"))
bindeb.addStep(steps.SetProperty(name="Compute basename", property="basename", value=util.Interpolate("%(prop:package)s-%(prop:version)s")))
bindeb.addStep(steps.FileDownload(name="Download sources", mastersrc=util.Interpolate("/var/www/packages.cerbelle.net/%(prop:package)s/%(prop:basename)s.tar.gz"),workerdest=util.Interpolate("%(prop:basename)s.tar.gz")))
bindeb.addStep(steps.ShellCommand(name='Extract sources from dist', command=['tar', 'xvzf', util.Interpolate("%(prop:basename)s.tar.gz")], want_stdout=True, want_stderr=True))
bindeb.addStep(steps.ShellCommand(name='Rename src dist file', command=['mv', util.Interpolate("%(prop:basename)s.tar.gz"), util.Interpolate("%(prop:package)s_%(prop:version)s.orig.tar.gz")], want_stdout=True, want_stderr=True))
bindeb.addStep(steps.ShellCommand(name='Add Build ID to revision.h', command=['sed', '-i', util.Interpolate("s/$/\\n#define BBID \\\"%(prop:buildnumber)s\\\"\\n/"), util.Interpolate("%(prop:basename)s/src/revision.h")], want_stdout=True, want_stderr=True))
bindeb.addStep(steps.ShellCommand(name='Commit sources changes', env={'EDITOR':'/bin/true'}, command=['dpkg-source', '--commit', './', 'build'], workdir=util.Interpolate("build/%(prop:basename)s"), want_stdout=True, want_stderr=True))
bindeb.addStep(steps.DebPbuilder(architecture="amd64",distribution="bookworm",workdir=util.Interpolate("build/%(prop:basename)s"), want_stdout=True, want_stderr=True))
bindeb.addStep(steps.ShellCommand(name='Upload to cerbelle repo', command=['dput', util.Interpolate("%(prop:basename)s/%(prop:package)s_%(prop:version)s-1.1_amd64.changes")], want_stdout=True, want_stderr=True))
c['builders'].append( util.BuilderConfig(
    name="BinDebian",
    workernames=["bb-deb"],
    factory=bindeb))

bin-macos

Pre-requisites: see CrossCompilationMacOS

Worker: bb-macos

Steps: #

macbin = util.BuildFactory()
macbin.addStep(steps.SetProperty(name="Compute basename", property="basename", value=util.Interpolate("%(prop:package)s-%(prop:version)s")))
macbin.addStep(steps.ShellCommand(name='Cleanup environment', command=['rm', '-Rf', util.Interpolate('%(prop:builddir)s/build')]))
macbin.addStep(steps.FileDownload(name="Download sources",mastersrc=util.Interpolate("/var/www/packages.cerbelle.net/%(prop:package)s/%(prop:basename)s.tar.gz"),workerdest=util.Interpolate("%(prop:basename)s.tar.gz")))
macbin.addStep(steps.ShellCommand(name='Extract sources from dist', command=['tar', 'xvzf', util.Interpolate("%(prop:basename)s.tar.gz")]))
macbin.addStep(steps.ShellCommand(name='Create a build folder', command=['mkdir', util.Interpolate("%(prop:basename)s-build")]))
macbin.addStep(steps.ShellCommand(name='Out of tree default configuration', command=[util.Interpolate("../%(prop:basename)s/configure"), '--prefix=/usr' ], workdir=util.Interpolate("build/%(prop:basename)s-build")))
macbin.addStep(steps.Compile(name="Compile and Install", command=['make', util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), 'clean', 'all', 'install', util.Interpolate('CFLAGS=-I%(prop:builddir)s/build/%(prop:basename)s-build/intl'), util.Interpolate('DESTDIR=%(prop:builddir)s/build/%(prop:basename)s-macos')], workdir=util.Interpolate("build/%(prop:basename)s-build")))
macbin.addStep(steps.ShellCommand(name='Create the archive', command=['tar', 'cvzf', util.Interpolate('%(prop:basename)s-macos.tar.gz'), util.Interpolate('%(prop:basename)s-macos')]))
macbin.addStep(steps.FileUpload(workersrc=util.Interpolate('%(prop:basename)s-macos.tar.gz'), masterdest=util.Interpolate('/var/www/packages.cerbelle.net/%(prop:package)s/%(prop:basename)s-macos.tar.gz'),mode=0o755,urlText="MacOS binaries",url=util.Interpolate("https://packages.cerbelle.net/%(prop:package)s/%(prop:basename)s-macos.tar.gz")))
c['builders'].append( util.BuilderConfig(
    name="BinMacOS",
    workernames=["macos-monterey"],
    factory=macbin))

Schedulers

ForceSrc

To force from repository builders

mk_forcesrc=schedulers.ForceScheduler(
    name="ForceSrc",
    buttonName="Force src",
    label="Force parameters",
    codebases=[util.CodebaseParameter(
        "",
        label="Main repository",
        branch=util.FixedParameter(name="branch", default="default"),
        revision=util.FixedParameter(name="revision", default=""),
        repository=util.FixedParameter(name="repository", default=""),
        project=util.FixedParameter(name="project", default="mkernel"),
    ),],
    reason=util.StringParameter(name="reason",
        label="Reason:", required=True, size=80),
    username=util.UserNameParameter(label="Your name (and email):",
        size=80),
    builderNames=["Src", "SrcCppcheck", "SrcDist", "SrcInst", "SrcDbg", "SrcGprof", "SrcDbgGcov", "SrcGdb", "SrcGcov" ],
)
c['schedulers'].append(mk_forcesrc)

ForceBin

Force package build from source

mk_forcebin=schedulers.ForceScheduler(
    name="ForceBin",
    buttonName="Force bin",
    label="Force parameters",
    codebases=[util.CodebaseParameter(
        "",
        label="Main repository",
        branch=util.FixedParameter(name="branch", default="default"),
        revision=util.FixedParameter(name="revision", default=""),
        repository=util.FixedParameter(name="repository", default=""),
        project=util.FixedParameter(name="project", default="mkernel"),
    ),],
    reason=util.StringParameter(name="reason",
        label="Reason:", required=True, size=80),
    username=util.UserNameParameter(label="Your name (and email):",
        size=80),
    properties=[
        util.StringParameter(name="package", label="Package name.", default="mkernel"),
        util.ChoiceStringParameter(name="version", label="Source version.", choices=["0.0.1","0.0.2"],default="0.0.1"),
    ],
    builderNames=["BinLinux","BinDebian","BinWindows", "DistDox", "DistLCov", "DistGProf", "DistGdb" ]
)
c['schedulers'].append(mk_forcebin)

Try

For developers to submit a try

mk_try = schedulers.Try_Jobdir(
    name="Try",
    builderNames=["Src", "SrcCppcheck", "SrcDist", "SrcInst", "SrcDbg", "SrcGprof", "SrcDbgGcov", "SrcGdb", "SrcGcov" ],
    jobdir="/var/lib/buildbot/jobdir")
c['schedulers'].append(mk_try)

Auto build from repo commit

mk_oncommit=schedulers.SingleBranchScheduler(
    name="On commit",
    change_filter=util.ChangeFilter(branch='default'),
    treeStableTimer=None,
    builderNames=["Src", "SrcCppcheck", "SrcDist", "SrcInst", "SrcDbg", "SrcGprof", "SrcDbgGcov", "SrcGdb", "SrcGcov" ],
    )
c['schedulers'].append(mk_oncommit)

Triggerable

Trigger packages builds after dist build

mkernel_triggerable=schedulers.Triggerable(
    name="MKernel_Triggerable",
    builderNames=[ "BinLinux", "BinDebian", "BinWindows", "BinMacOS", "DistDox", "DistLCov", "DistGProf", "DistGdb" ]
)
c['schedulers'].append(mkernel_triggerable)

Configuration precedence specs

Config preload in registry

  1. Default
  2. System file
  3. User file
  4. User specified file
  5. Registry persistency file
  6. CLI Arguments

Registry evaluation

  1. Module hierarchy path from root to module
  2. Application hierarchy path from root to feature

CrossCompilationMacOS

Currently using Native compilation on MacOS Monterey in KVM

XCompile candidate : https://github.com/tpoechtrager/osxcross

Packaging resources :
https://gytpol.com/automating-mac-software-packaging-process-on-a-linux-based-os/
https://gist.github.com/SchizoDuckie/2a1a1cc71284e6463b9a
https://github.com/sindresorhus/create-dmg
https://stackoverflow.com/questions/1596945/building-osx-app-bundle
https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFBundles/BundleTypes/BundleTypes.html#//apple_ref/doc/uid/10000123i-CH101-SW1
https://www.ferranpujolcamins.cat/2020/11/27/Notes-CMake-macOS-bundle.html
https://studios.ptilouk.net/superfluous-returnz/blog/2022-03-16_macos.html
https://github.com/KosalaHerath/macos-installer-builder


Debian MinGW toolchain

apt-get install -y mingw-w64 mingw-w64-tools make g++ nsis pkg-config pev

Dependencies

Inspired from

LibIntl

(optional for i18n messages)

libiconv

cd
wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.17.tar.gz
tar xvzf libiconv-*.tar.gz
rm libiconv-*.tar.gz
cd libiconv-*
./configure --host=x86_64-w64-mingw32 --prefix=/usr/x86_64-w64-mingw32
make install

gettext (libintl)

cd
wget https://ftp.gnu.org/pub/gnu/gettext/gettext-0.22.4.tar.gz
tar xvzf gettext-*.tar.gz 
rm gettext-*.tar.gz 
cd gettext-*/gettext-runtime
./configure --host=x86_64-w64-mingw32 --prefix=/usr/x86_64-w64-mingw32 --enable-threads=win32 --without-libexpat-prefix --without-libxml2-prefix 
make install

GTK4

glib

apt-get install -y git meson

cd
wget https://download.gnome.org/sources/glib/2.74/glib-2.74.6.tar.xz
tar xvJf glib-2.74.6.tar.xz
rm glib-2.74.6.tar.xz
cd glib-2.74.6
cat > cc.txt << EOF
[host_machine]
system = 'windows'
cpu_family = 'x86_64'
cpu = 'x86_64'
endian = 'little'

[properties]
c_args = []
c_link_args = []

[binaries]
c = 'x86_64-w64-mingw32-gcc'
cpp = 'x86_64-w64-mingw32-g++'
ar = 'x86_64-w64-mingw32-ar'
ld = 'x86_64-w64-mingw32-ld'
objcopy = 'x86_64-w64-mingw32-objcopy'
strip = 'x86_64-w64-mingw32-strip'
pkgconfig = 'x86_64-w64-mingw32-pkg-config'
windres = 'x86_64-w64-mingw32-windres'
EOF
meson setup --cross-file cc.txt --prefix=/usr/x86_64-w64-mingw32 _build
meson compile -C _build
meson install -C _build

gstreamer

apt-get install -y libglib2.0-dev-bin flex bison
cd
wget https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.22.3.tar.xz
tar xvJf gstreamer-1.22.3.tar.xz
rm gstreamer-1.22.3.tar.xz
cd gstreamer-1.22.3
cat > cc.txt << EOF
[host_machine]
system = 'windows'
cpu_family = 'x86_64'
cpu = 'x86_64'
endian = 'little'

[properties]
c_args = []
c_link_args = []

[binaries]
c = 'x86_64-w64-mingw32-gcc'
cpp = 'x86_64-w64-mingw32-g++'
ar = 'x86_64-w64-mingw32-ar'
ld = 'x86_64-w64-mingw32-ld'
objcopy = 'x86_64-w64-mingw32-objcopy'
strip = 'x86_64-w64-mingw32-strip'
pkgconfig = 'x86_64-w64-mingw32-pkg-config'
windres = 'x86_64-w64-mingw32-windres'
EOF
meson setup --cross-file cc.txt --prefix=/usr/x86_64-w64-mingw32 _build
#meson configure -Dharfbuzz:tests=disabled _build
meson compile -C _build
meson install -C _build

Cairo

cd
wget https://cairographics.org/releases/cairo-1.18.0.tar.xz
tar xvJf cairo-1.18.0.tar.xz
rm cairo-1.18.0.tar.xz
cd cairo-1.18.0
cat > cc.txt << EOF
[host_machine]
system = 'windows'
cpu_family = 'x86_64'
cpu = 'x86_64'
endian = 'little'

[properties]
c_args = []
c_link_args = []

[binaries]
c = 'x86_64-w64-mingw32-gcc'
cpp = 'x86_64-w64-mingw32-g++'
ar = 'x86_64-w64-mingw32-ar'
ld = 'x86_64-w64-mingw32-ld'
objcopy = 'x86_64-w64-mingw32-objcopy'
strip = 'x86_64-w64-mingw32-strip'
pkgconfig = 'x86_64-w64-mingw32-pkg-config'
windres = 'x86_64-w64-mingw32-windres'
EOF
meson setup --cross-file cc.txt --prefix=/usr/x86_64-w64-mingw32 _build
meson compile -C _build
meson install -C _build

Harfbuzz

cd
wget https://github.com/harfbuzz/harfbuzz/releases/download/6.0.0/harfbuzz-6.0.0.tar.xz
tar xvJf harfbuzz-6.0.0.tar.xz
rm harfbuzz-6.0.0.tar.xz
cd harfbuzz-6.0.0
cat > cc.txt << EOF
[host_machine]
system = 'windows'
cpu_family = 'x86_64'
cpu = 'x86_64'
endian = 'little'

[properties]
c_args = []
c_link_args = []

[binaries]
c = 'x86_64-w64-mingw32-gcc'
cpp = 'x86_64-w64-mingw32-g++'
ar = 'x86_64-w64-mingw32-ar'
ld = 'x86_64-w64-mingw32-ld'
objcopy = 'x86_64-w64-mingw32-objcopy'
strip = 'x86_64-w64-mingw32-strip'
pkgconfig = 'x86_64-w64-mingw32-pkg-config'
windres = 'x86_64-w64-mingw32-windres'
EOF
meson setup --cross-file cc.txt --prefix=/usr/x86_64-w64-mingw32 -Dtests=disabled _build
meson compile -C _build
meson install -C _build

Pango

cd
wget https://download.gnome.org/sources/pango/1.50/pango-1.50.12.tar.xz
tar xvJf pango-1.50.12.tar.xz
rm pango-1.50.12.tar.xz
cd pango-1.50.12
cat > cc.txt << EOF
[host_machine]
system = 'windows'
cpu_family = 'x86_64'
cpu = 'x86_64'
endian = 'little'

[properties]
c_args = []
c_link_args = []

[binaries]
c = 'x86_64-w64-mingw32-gcc'
cpp = 'x86_64-w64-mingw32-g++'
ar = 'x86_64-w64-mingw32-ar'
ld = 'x86_64-w64-mingw32-ld'
objcopy = 'x86_64-w64-mingw32-objcopy'
strip = 'x86_64-w64-mingw32-strip'
pkgconfig = 'x86_64-w64-mingw32-pkg-config'
windres = 'x86_64-w64-mingw32-windres'
EOF
meson setup --cross-file cc.txt --prefix=/usr/x86_64-w64-mingw32 _build
meson compile -C _build
meson install -C _build

libgtk-4

https://www.gtk.org/docs/installations/linux/

https://docs.gtk.org/gtk4/building.html

https://github.com/MGlolenstine/gtk4-cross

apt-get install -y libglib2.0-dev-bin python3-docutils libglib2.0-bin

or
apt-get install -y python3-pip
pip3 install meson --break-system-packages
cd
wget https://download.gnome.org/sources/gtk/4.8/gtk-4.8.3.tar.xz
tar xvJf gtk-4.8.3.tar.xz
rm gtk-4.8.3.tar.xz
cd gtk-4.8.3/
cat > cc.txt << EOF
[host_machine]
system = 'windows'
cpu_family = 'x86_64'
cpu = 'x86_64'
endian = 'little'

[properties]
c_args = []
c_link_args = []

[binaries]
c = 'x86_64-w64-mingw32-gcc'
cpp = 'x86_64-w64-mingw32-g++'
ar = 'x86_64-w64-mingw32-ar'
ld = 'x86_64-w64-mingw32-ld'
objcopy = 'x86_64-w64-mingw32-objcopy'
strip = 'x86_64-w64-mingw32-strip'
pkgconfig = 'x86_64-w64-mingw32-pkg-config'
windres = 'x86_64-w64-mingw32-windres'
EOF
meson setup --cross-file cc.txt --prefix=/usr/x86_64-w64-mingw32 -Dmedia-gstreamer=disabled _build
meson compile -C _build
meson install -C _build

Build mkernel

cd
wget --no-check-certificate  https://packages.cerbelle.net/mkernel/mkernel-0.0.1.tar.gz
tar xvzf mkernel-0.0.1.tar.gz
rm mkernel-0.0.1.tar.gz
cd mkernel-0.0.1
#./configure --host=x86_64-w64-mingw32 --prefix=/usr --with-included-ltdl --enable-local-libopts ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes
./configure --host=x86_64-w64-mingw32 --prefix=/usr ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes
make clean install DESTDIR=`pwd`/../mkernel-0.0.1-win64

Package

cd
cd mkernel-0.0.1
makensis -NOCD -DBINDIR=../mkernel-0.0.1-win64 -DSRCDIR=../mkernel-0.0.1 ../mkernel-0.0.1/mkernel

Double linked list

Start and End sentinels
Value is a void pointer (struct)
Functor Reset
Functor AddValue (Cursor)
Functor GetValue (Cursor)
Functor First
Functor Last
Functor Next
Functor Prev
Functor Delete


Downloads

All files for curious

All CICD generated files (sources, docs, reports and compiled) over the time

0.0.2 (CICD last builds, Development version)

For users

Documentation wiki : wiki

Debian packages available in the following repositories :

deb [trusted=yes] https://packages.cerbelle.net/debian unstable/
deb-src [trusted=yes] https://packages.cerbelle.net/debian unstable/

For developers

0.0.1 (Released July 30th, 2024)

For users

Documentation wiki : wiki

Debian packages available in the following repositories :

deb [trusted=yes] https://packages.cerbelle.net/debian unstable/
deb-src [trusted=yes] https://packages.cerbelle.net/debian unstable/

For developers


LibDebug

This library implements tooling for debugging and detecting memoryleaks.

First implemented in 1997, after reading the amazing book from Steve Maguire,
"L'art du code" (French translated title), by Microsoft Press.

Non intrusive, provides enhanced assertions, checkpoints and a transparent
memoryleak tracker.

Way faster than valgind, it can be compiled and used by end-users to provide a
useful debug log without significant impact on resources and performances. It is
probably incompatible with Valgrind. Probably in competition with gcc's
-fsanitize=address, probably incompatible with it.

Assertions and traces

assert.h - Macro and functions definitions.
libdebug.a/so - assertion output functions implementations

When enabled (NDEBUG is undefined) , the macros call the output functions
defined in assert.h and implemented in libdebug, with contextual metadata
(filename, line number, compilation date and time, and function name). func
gcc extension is used. libdebug.a/so needs to be linked to the binaries.

When disabled (NDEBUG defined), the functions are not defined and the macros are
mapped to no operation. libdebug.a/so does not need to be linked to the binaries.

Memory tracking and leaks detection

memory.h - Macro definition to include last
memdbg.h - automatically included from include path
memtrack.h - automatically included from include path
libdebug.a/so - memory tracking functions implementations

When enabled (NDEBUG undefined), this file needs to be included as the last
include line in the source code, in order to be applied only on the source code,
not on the other includes. It replaces memory allocation/free standard functions
with a call to an internal wrapper defined in memdbg.h/c and libdebug.a/so. It
includes memdbg.h and transitively memtrack.h. libdebug.a/so needs to be linked
to the binaries.

When disabled (NDEBUG defined), the replacement macros are not defined, thus the
memory allocation and free standard functions are directly called without
involving the wrappers. memdbg.h and memtrack.h are not included. The
memreport() calls are replaced by no operation thanks to an empty macro.
libdebug.a/so does not need to be linked with the binaries.


Wiki

Architecture
Double linked list
Configuration precedence specs
LibDebug

Buildbot_CICD_configuration
Cross_compilation_on_Debian_for_Windows
CrossCompilationMacOS

Downloads