If you want to run arbitrary commands on the build environment, you can use the
mb2 build-shell command. The
build-shell command needs to be run from the top of a build tree, so before you use it for the first time you need to initialize a build directory with the
mb2 build-init command.
$ git clone https://github.com/sailfishos/sample-app-c.git $ cd sample-app-c/src $ mb2 build-init $ mb2 build-shell [SailfishOS-220.127.116.11-aarch64] src $ make cc -o sample-app-c sample-app-c.c -I/usr/include/ssusysinfo -lssusysinfo
Note: If you actually try the above command, your compilation will likely fail, because you don’t have
ssu-sysinfo-devel package installed. See below on Maintenance mode for information on how to install it.
You can give the actual command you want to execute as an additional parameter.
$ mb2 build-shell make
--maintain option when running maintenance commands - such that are used to inspect and/or modify the build environment itself. Failure to do so leads to undefined results.
We can use the maintenance mode to install the package required for building the sample-app-c from above:
$ mb2 build-shell --maintain zypper se ssu-sysinfo-devel Loading repository data... Reading installed packages... S | Name | Summary | Type --+-------------------+-----------------------------------+-------- | ssu-sysinfo-devel | Development files for ssu-sysinfo | package $ mb2 build-shell --maintain zypper in ssu-sysinfo-devel
Just like without the
--maintain parameter, you can leave out the command to open an interactive shell:
$ mb2 build-shell --maintain [SailfishOS-18.104.22.168-aarch64] #
Any changes done under the build environment are persisted under build targets. Unless the
--no-snapshot option is used, mb2 uses a working copy (a “snapshot”) of the actual build target to persist your build environment. Thanks to this you can revert any modifications to the build environment using the ‘build-requires reset’ command, so don’t be afraid to experiment, but be aware that changes may get reset implicitly under certain conditions (read more in the built-in help of mb2).
Use the ‘build-requires diff’ command to see how the current build environment differs from the clean build environment in terms of package installations, removals and replacements.
Note: Installing packages with maintenance mode might be handy when experimenting, but you should always add the packages required for building packages as BuildRequires in the RPM SPEC file. It is a good habit to always verify that building a package works with a clean build enviroment.