From Gentoo Wiki
Jump to: navigation, search

Maintainer notes about vlc and its relatives.


This guide was last updated for media-video/vlc version 1.0.3.

media-video/vlc is VLC media player, a multimedia player with different interface modules, though primarily as a streaming client. There are no front ends apart of the core media-video/vlc binary, but the different interfaces are loaded as modules.

Because of its structure, a crash into the decoding routines means a complete crash of the interface, too. A careful maintenance is needed, similarly to Xine.

Its maintenance is usually simple, as it's one of the most portable solutions (it runs natively on Linux, Windows, OSX and FreeBSD). Related to media-video/vlc there are, though, different libraries that might be a problem to maintain, as they are handled differently in Portage from what the other distributions do.


Patches for media-video/vlc are a bit different compared to Xine, as they are sometimes exclusive to Gentoo Linux and simply can't be upstreamed at all. This is the case of the patches that change some libraries from builtin to plugins (with the assumption that Gentoo always have them as PIC libraries).

In general there might be necessity to patch vlc when something in its dependencies changes, as it's usually quite good-written the internal code and also the In the past it needed patching to get wxGTK or Samba dependencies fixed.

The bootstrap script provided with the sources should not be used to rebuild autotools support. While it's usually better to use the upstream-provide file, that bootstrap script contains also instructions to update gettext support, that might create confusion with the shipped version, and requires also the cvs command to get autopoint right. A simple eautoreconf call should be enough.

There are two ways to send patches upstream: either via their vlc-devel mailing list or by reporting a bug in the Trac system.

The patches are hosted in CVS inside gentoo/src/patchsets/vlc and are organized by version. Released patchsets are tagged with the name of the tarball minus the .tar.bz2. The directories contains also a series file, as they are used by quilt: just symlink the checked out directory inside an extracted source tree of vlc (for that version) and use quilt to manage the patches.

Also if usually this point was never stressed out, now that patches are hosted on the CVS it's important that they bring a description in the header, with also a link to relevant bugs, both in Gentoo and upstream.

External libraries and plugins

media-video/vlc uses a mixed architecture for linking decoding libraries: some of them are linked as builtin, statically into the vlc binary, while others are built as plugins that gets loaded at runtime.

As the plugins are by all means shared objects, they must be built with PIC enabled and can't link against static non-PIC libraries. As some libraries used to decode or demux (such as libmatroska and libdts) used to be static libraries only, the configure sometimes checks for two names for libraries, one for the PIC version (_pic or _p) and one for the non-PIC, enabling the plugin or the builtin depending on the case.

As in Gentoo most of the libraries are patched to build the PIC shared version with the same name of the original one, the configure script sometimes gets false negatives, and builds as builtin something that could have been built as plugin. In those cases, it's needed to edit the file to get the right name for the library to build as plugin.

The use of plugins instead of builtins allows VLC to continue working also if one of the libraries gets broken by a changed ABI, as the plugins fails to load on demand, while builtins breaks the main executable file.

Like newer versions of Xine, media-video/vlc always uses an external copy of ffmpeg. This means that when a new version of that package is stabilized, media-video/vlc has to be checked against it. It also means that it does not suffer from problems related directly to ffmpeg code, such as security vulnerabilities.

Testing versions

As many other projects, also media-video/vlc releases beta versions of the code before the actual final release. These beta versions are usually useful to test the changes to the dependencies and the code in package.mask so that problems can be found before unleashing the final version to users.

Test versions are usually announced on vlc-devel mailing list and can be found at The naming scheme used is X.Y.Z-testT.

Since version 0.8.4, the ebuild carries the transformation between _beta to -beta versions and uses the right URL for betas without having to edit it by hand.

USE flags

As many other multimedia programs, also media-video/vlc have quite a lot of USE flags to disable and enable dependencies and extra features. There are a few missing dependencies that are not enabled, and a few USE flags that were removed for many reasons in the past.

The nsplugin USE flag is used to build the Netscape-compatible plugins (used by Mozilla, Firefox and Konqueror); this plugin is quite fragile, and the USE flag (that was added after 0.8.2 release) was removed till the latter 0.8.5 revisions, with patches to build against Firefox or Seamonkey rather than the old Gecko-SDK (no more supported) or XULRunner (experimental). The plugin itself is unstable anyway, and if bugs are confirmed is probably simpler to remove it or declare it experimental.

Most of the nsplugin's problems were fixed in 0.8.6, although the way to select against which package to build changed drastically (as the patch applied to 0.8.5 was rejected for a different approach). Since this version, you need to pass the XPIDL variable with the path to the IDL libraries for the package to link against (firefox or seamonkey) and the MOZILLA_CONFIG variable with the path to the *-config script, again depending on which one you want to link against.

The live USE flag enable support of live555 for RTSP support, provided by media-plugins/live. Starting from version 2006.12.08 of this latter package, the way it is installed in the system is drastically changed; while previously it installed in a "build tree", and was linked statically, the newer versions installs as a normal package using lib and include directories. For this reason, the --with-live555-tree option is not passed anymore, in vlc 0.8.6 and later, if the newer version of live is present.

USE flag Local description Dependency Reason for removing
portaudio PortAudio output plugin >=media-sound/portaudio-19 The required version of portaudio is the currently experimental version (19), not present in Portage and too unstable.
tremor Enables Tremor decoder support Missing dependency
tarkin Enables experimental tarkin codec Missing dependency
cyberlink Enable CyberLink UPnP stack Missing dependency
libtar Enables libtar support for skins2 module dev-libs/libtar libtar doesn't build a PIC shared library thus we disable it

This article is based on a document formerly found on our main website
The following people contributed to the original document: Diego Pettenò and Alexis Ballier
They are listed here as the Wiki history does not allow for any external attribution. If you edit the Wiki article, please do not add yourself here; your contributions are recorded on the history page.