Notes for Packagers

From Audacity Wiki
Revision as of 22:59, 17 January 2009 by Richardash1981 (talk | contribs) (Optional Dependencies: add vamp, libogg, libid3tag)
Jump to: navigation, search
This page contains hints and tips on creating Audacity packages for Linux/Unix distributions. It will also be useful for people compiling Audacity from source on their own systems. For more details about developing for Linux/Unix, see Developing On Linux.
For almost all Mac and Windows users we would recommend distributing the binaries available on our website: .

What to Package

Ideally, both the latest stable release of Audacity and the latest Beta release would be available to users, with a choice to install either or both independently. Unfortunately this (especially parallel installs) is beyond the capability of many package management systems, and so a decision will have to be made on which version to package.

Currently, the stable (1.2.5/6) version of Audacity depends on the obsolete 2.4.x version of wxwidgets, so will be difficult to package for many systems. In practice this means that you will have to package the most recent Beta release from the 1.3.x series. This requires wxwidgets 2.8.x, and preferably the current (wx2.8.9) release. Because this is a Beta release of Audacity, be aware that there is limited documentation and there will be frequent new releases to address issues.


Audacity uses a lot of libraries to provide functionality. The majority of these can and should be dynamically linked as system libraries, and so listed as dependencies of the Audacity package. The sources of some of these libraries are provided in the lib-src/ module of the Audacity CVS, but don't regard this as evidence that they should be preferred to system copies: most are provided only as a convenience to Mac and Windows developers.

Required Dependencies

Some libraries are absolutely required for Audacity to run. These are hard dependencies for any Audacity package unless the libraries are linked statically.

  • wxWidgets  This is the graphical toolkit used to build Audacity.
    • For most *nix systems wxGTK (built on top of GTK+2) will be the correct implementation to use. We do not support the incomplete and largely obsolete Motif (wxX11) implementation.
    • Please always stick to stable releases (even version numbers) of wxGTK - we don't target unstable releases, and they frequently contain bugs that cause problems for users.
    • A Unicode build of Audacity requires a Unicode build of wxGTK. This is the default, and allows internationalised file names which don't work in ANSI builds. So build Unicode if possible - there are rarely reasons not to.
  • Libsndfile  The canonical I/O library for uncompressed and low compression audio files.
    • Audacity will work with almost any release since 1.0.0, however more recent releases provide more formats and fix bugs, especially with metadata handling.
  • Expat  A workhorse XML parser library, and much smaller than libxml2.
    • This is a dependency of wxWidgets, so it's probably already present
    • Again, almost any stable version will work quite happily, but most testing uses the most recent stable release (currently 2.0.1).

Optional Dependencies

With just the required libraries, Audacity only supports a very limited range of file formats. To expand this to a more useful range of common audio formats more libraries will be needed. These libraries are all optional at build time, however once Audacity is compiled with them they are required at run-time to start Audacity.

  • FFmpeg  Multi-format audio and video encoder.
    • FFmpeg library headers only required to compile Audacity.
    • FFmpeg libraries are dynamically opened at run time if support was compiled into Audacity. If they are not available Audacity will still run, but not be able to import or export as many formats.
    • Recent version required (post December 2008). Old versions will fail the library version check at run-time.
  • FLAC  Josh Coalson's Free Lossless Audio Codec.
    • Version 1.1.0 or higher needed, 1.2.1 recommended.
    • Whilst it is possible to handle FLAC files indirectly through either libsndfile or ffmpeg, the direct support through FLAC has more features and is the preferred option.
  • libid3tag  ID3 tag manipulation library
    • Comes with libMAD (below).
  • libMAD  The reference-grade MPEG Audio Decoder.
    • Used to decode MPEG I layer 2 (MP2) and layer 3 (MP3) files.
    • Does not provide MPEG encoding so generally considered fairly safe from patent claims.
  • libogg  Ogg container format library
    • Needed by libvorbis (below) and in it's own right
    • Very stable library, any stable version probably still works fine.
  • Vamp SDK  Audio Analysis plug-in SDK
    • Version 2.0 needed
    • Allows Audacity to function as a Vamp 2.0 host for Vamp analysis plug-ins.
  • libvorbis  Reference Vorbis encoder and decoder from 
    • Provides import and export of Ogg Vorbis files
    • Very stable library, old 1.1.x versions probably still work fine.
  • Soundtouch  Independent Pitch and Tempo changing library.
    • Versions 1.3.1 and 1.3.0 supported
    • 1.3.0 is missing a pkg-config file so is not detected by the configure script unless one is created.
    • Can be a problem to build due to heavy ASM optimisation. Numerous patches exist for specific systems and compilers.
  • TwoLame  MPEG 1 Layer 2 encoder library (widely used in radio broadcasting).
    • Based on ISO Dist 10 sources, believed to be patent safe as doesn't implement Layer 3 encoding.
    • Better maintained replacement for tooLAME
    • Version 0.3.10 or better required, 0.3.12 recommended for build fixes.

Build Dependencies

These are packages required to build Audacity from source, but that are not then required in order to run Audacity. As such they will be needed on the machine used to build packages but are not dependencies of the resulting package for binary package systems. Most of them are close to standard on Linux systems, but may not be elsewhere.

  • Gmake  GNU make
    • Other make tools are not supported
    • Systems where make != gmake should work fine if the MAKE environment variable is set to point at a copy of GNU make. Please report to us if this is not the case.
  • GCC  The GNU Compiler Collection
    • This is the only supported compiler target for *nix. Sensible patches for other compilers are welcome though.
    • If you split GCC up by languages, C and C++ compilers are required to build Audacity.
    • Systems where cc != gcc should work if the CC (and CXX) environment variables are set when configure is run. This probably implies building supporting libraries using GCC as well.
  • pkg-config  Utility to locate libraries and compiler options
    • Used extensively by the Audacity configure script to find system libraries.
  • Autoconf  and Automake  Programs for creating configure scripts and Makefiles
    • Only needed if you want to patch or alter the Audacity build system by editing, and so on.
    • Note Audacity does not use Automake, although some sub-libraries in lib-src/ do.
    • All audacity-supplied libraries have AM_MAINTAINER_MODE([enabled]) included in their, so autotools will not be run automatically by make unless the --enable-maintainer-mode option is passed to configure.

Sending us Patches or Bug Reports

We'd greatly appreciate packagers letting us know of any problems that arise, or sending us patches for compiling Audacity with latest library versions. To contact our Team, please send us an e-mail . Patches can be attached and should preferably be in unified diff format.