Packaging conventions

GeekosDAW follows some simple packaging conventions to ensure consistency.

These conventions are built on top of the official openSUSE packaging guidelines, which must be fully respected.

Naming

Capitals

Capital letters are allowed in packages but generally discouraged, following the official openSUSE guidelines.

Plugins

Plugins are named like this:

[standard]-[plugin_name]

[standard] is the lowercase name of the plugin standard (e.g. lv2, vst3, vamp). The correct name for VST2 plugins is vst

[plugin_name] is the name of the plugin

Some examples of allowed plugin names: ✔️ lv2-zyn-fusion ✔️ vst3-surge

Some examples of disallowed plugin names: ❎ LV2-zyn-fusion ❎ zyn-fusion-lv2 ❎ FatFrog.lv2

Versioning

Always use the original versioning scheme of the original program.

When using software without versions, if they are taken from repositories, use the scheme [repository_type].[branch].[date]

[repository_type] is the type of the repository (e.g. git, hg, svn, cvs)

[branch] is the name of the branch (e.g. master, trunk, develop)

[date] is the date of the latest commit in the branch in the YYYY.MM.DD (year.month.day) format.

So, assuming the latest commit was pushed to git master on November 18th, 2020:

  • Allowed plugin version: ✔️ git.master.2020.11.18
  • Some examples of disallowed plugin versions: ❎ git.2020.11.18 ❎ git.master.18.11.2020 ❎ git.master ❎ git.master.20201118 ❎ 20201118

Patches

Patches are named like this

fix-[issue].patch

Where [issue] is the issue which the patch fixes.

So, assuming a patch was written to fix a segfault by a developer called Rick Deckard on the original repo's “develop” git branch:

  • Allowed patch filename: ✔️ fix-segfault.patch
  • Some examples of disallowed patch filenames: ❎ fix-deckard.patch ❎ fix-git-develop.patch

All patches that are not openSUSE-specific should be sent upstream.

If the patch is taken from the web, please credit the original author and make sure the license allows redistribution. If it's a patch for a copylefted program, the license is already compliant.

In-spec patching

Sometimes things can be patched directly from the .spec file, for example by running sed or awk. This leads to packages breaking less often, because patches can rapidly become outdated if the target files are modified by later versions of a program.

For this reason, this practice is allowed (and even encouraged when it concerns things like changing /usr/lib to /usr/%{_lib}) as long as the changes made are not substantial and don't concern the upstream codebase.

Static and dynamic linking

Prefer static linking when the original program defaults to it and for the most part, when the packaged dependencies aren't huge. In order to do this, sometimes it's necessary to download some git submodules manually, since OBS can't connect to the Internet.

.desktop files

As per the official openSUSE packaging policies, all GUI-based packages should have a .desktop file and an icon.

If an official icon does not exist, if you have decent artistic skills try creating one yourself, else use this placeholder icon (licensed under the GNU GPLv3+).

RPMLint

All packages should be RPMLint-compliant and strive to have 0 warnings and 0 errors.

Packages with some warnings are allowed.

Disabling some RPMLint directives is allowed as long as:

  • The software has been tested by the maintainer
  • In the long-term, the issues will be fixed by the maintainer