This is an identifier that indicates a name for the “part” that can be referenced elsewhere. In the case of the desktop helpers it is used by a snap that wants to reference it by the snap’s own snapcraft.yaml including an
after: entry on at least one of it’s parts that mentions the name, e.g.
depends-on-qt5: # a name for my own part
after: [desktop-qt5] # references the desktop part's name
The name of a part is arbitrary and chosen by the author of a particular snapcraft.yaml. In my example I’ve called my part “depends-on-qt5”.
This tells the builder where to find the files to use for building the part. Each
part usually has a corresponding
source, though it can be omitted if you don’t want to use the default fetch mechanism. In this case the source is set to
. which means that snapcraft will look in the folder that contains the
snapcraft.yaml OR the folder that contains a
snap folder with the
Imagine your project directory is set up like so:
source: . will set the part to copy the
project folder and everything below into the build environment. Likewise, setting
source: code will copy everything in
project/code into the build environment. Often
source is set to be an http or https address, or is set to a git repository address such as the address of a repository on GitHub.
source, this optional parameter can be specified to tell snapcraft to use a folder within the files found from
source. This is mostly useful for downloaded files that contain more structure than we’re interested in. e.g. if a git repository has the following structure:
We’re only interested in the files inside the
code subdirectory, so we will specify the following in our part definition:
Snapcraft ships with several so-called
plugins which define how to build. Examples of available plugins are
make which uses a
Makefile-style build process,
autotools which builds with a standard
./configure && make && make install method based on GNU AutoTools,
cmake which builds using the
cmake build system,
go which builds a golang project with
go build, and
python which builds a python project using the python setuptools-style mechanism. All the plugins are documented at https://docs.snapcraft.io/build-snaps/plugins.
This is an example of a configuration that is specific to the
make plugin. It specifies arguments to be passed on the command line when executing
make. In this example snapcraft will try to execute the following command in the build environment to build the part:
If the above command completes successfully then snapcraft will execute a
make install to put the built files into the staging directory.
In this particular case, the
FLAVOR argument is used within the
Makefile files in the desktop helpers project to save the version of UI toolkit the resulting snap is supposed to be targeting. There are slight differences between each version of gtk and qt that require the
desktop-launch script to specifically tailor it’s behaviour to each.
Makefile files for gtk and qt are at:
You should see that it saves the value of flavor into the snap in a file called
desktop-launch script uses that file to determine how it runs at execution time to tailor it’s setup to each version of qt or gtk.