Go to file
evpobr 3d8399dfde Fix broken ABI
Unfortunately ABI was broken when symbols files were removed
in favour of new visibility control of exported functions.

Visibility control with -fvisibility works fine, but symbol
scripts had another feature - versioned symbols. And we lost it.

Since we can not make our symbols to be versioned  with the new
approach, it's decided to return everything back.

* CMake: Restore symbol files generation
* CMake: Python is required to build shared libraries
* Autotools: Restore symbol files generation

Closes: https://github.com/erikd/libsndfile/issues/268
2017-05-26 06:16:42 +10:00
cmake Fix broken ABI 2017-05-26 06:16:42 +10:00
doc FAQ: Update MP3 support answer 2017-05-07 10:28:22 +10:00
examples make_sine.c: small code cleanup. 2017-05-19 21:42:59 +10:00
M4 Fix broken ABI 2017-05-26 06:16:42 +10:00
man Fix spelling errors 2016-07-20 20:05:38 +10:00
Octave Do not use old variable INCLUDES and use modern AM_INIT_AUTOMAKE invocation. 2013-04-07 20:05:08 +10:00
programs tests: Fixes for MSVC 2017-04-14 13:03:27 +10:00
regtest regtest/database.c: Fix compilation with MSVC 2017-05-08 21:42:03 +10:00
Scripts Scripts/cmake-build.sh: Build out of tree 2017-04-09 15:41:40 +10:00
src Fix broken ABI 2017-05-26 06:16:42 +10:00
tests src/aiff.c: Remove INST chunk writing 2017-05-16 21:03:22 +10:00
Win32 Remove cruft from Win32 dir. 2008-10-08 21:19:23 +11:00
.editorconfig Add .editorconfig 2017-04-03 20:23:49 +10:00
.gitattributes Add .gitattributes file 2016-09-06 18:17:43 +10:00
.gitignore Fix broken ABI 2017-05-26 06:16:42 +10:00
.travis.yml Fix 'make distcheck' 2017-04-14 16:10:45 +10:00
AUTHORS AUTHORS : Add contributors. 2014-09-02 06:17:37 +10:00
autogen.sh autogen.sh: Only add hook if .git exists 2016-11-14 05:54:15 +11:00
Building-for-Android.md Add file Building-for-Android.md 2016-07-16 22:07:41 +10:00
ChangeLog Fix some typos. 2014-10-27 06:17:57 +11:00
CMakeLists.txt Fix broken ABI 2017-05-26 06:16:42 +10:00
configure.ac Fix broken ABI 2017-05-26 06:16:42 +10:00
CONTRIBUTING.md CONTRIBUTING.md: Add submitting issues section 2017-04-16 19:32:18 +10:00
COPYING First snapshot of the public project. 2007-05-14 19:55:24 +10:00
echo-install-dirs.in Use pkgconfigdir variable as it is not sure it will be libdir/pkgconfig. 2013-04-28 21:35:08 +10:00
libsndfile.spec.in libsndfile.spec.in : Change field name 'URL' to 'Url'. 2011-12-19 20:22:34 +11:00
make_lite.py Clean out cruft. 2008-04-05 20:13:47 +11:00
Makefile.am More CMake polishing 2017-04-25 19:21:40 +10:00
NEWS Version 1.0.28 2017-04-02 18:52:51 +10:00
README More CMake polishing 2017-04-25 19:21:40 +10:00
README.md More CMake polishing 2017-04-25 19:21:40 +10:00
sndfile.pc.cmake.in Rework CMake build system 2017-04-05 19:38:36 +10:00
sndfile.pc.in sndfile.pc.in: missing update from 95828ca2 2016-04-30 07:29:07 +10:00

libsndfile

Build Status

libsndfile is a C library for reading and writing files containing sampled audio data.

Hacking

The canonical source code repository for libsndfile is at https://github.com/erikd/libsndfile/.

You can grab the source code using:

$ git clone git://github.com/erikd/libsndfile.git

For building for Android see BuildingForAndroid.

There are currently two build systems; the official GNU autotool based one and a more limited and experimental CMake based build system. Use of the CMake build system is documented below.

Setting up a build environment for libsndfile on Debian or Ubuntu is as simple as:

sudo apt install autoconf autogen automake build-essential libasound2-dev \
    libflac-dev libogg-dev libtool libvorbis-dev pkg-config python

For other Linux distributions or any of the *BSDs, the setup should be similar although the package install tools and package names may be slightly different.

Similarly on Mac OS X, assuming brew is already installed:

brew install autoconf autogen automake flac libogg libtool libvorbis pkg-config

Once the build environment has been set up, building and testing libsndfile is as simple as:

$ ./autogen.sh
$ ./configure --enable-werror
$ make
$ make check

The CMake build system.

Although Autotools is the primary and recommended build toolchain, experimental CMake meta build generator is also available. The build process with CMake takes place in two stages. First, standard build files are created from configuration scripts. Then the platform's native build tools are used for the actual building. CMake can produce Microsoft Visual Studio project and solution files, Unix Makefiles, Xcode projects and many more.

Requirements

  1. C99-compliant compiler toolchain (tested with GCC, Clang and Visual Studio 2015)
  2. CMake 3.1.3 or newer

There are some recommended packages to enable all features of libsndfile:

  1. Ogg, Vorbis and FLAC libraries and headers to enable these formats support
  2. ALSA development package under Linux to build sndfile-play utility
  3. Sndio development package under BSD to build sndfile-play utility

Building from command line

CMake can handle out-of-place builds, enabling several builds from the same source tree, and cross-compilation. The ability to build a directory tree outside the source tree is a key feature, ensuring that if a build directory is removed, the source files remain unaffected.

mkdir CMakeBuild
cd CMakeBuild

Then run cmake command with directory where CMakeLists.txt script is located as argument (relative paths are supported):

cmake ..

This command will configure and write build script or solution to CMakeBuild directory. CMake is smart enough to create Unix makefiles under Linux or Visual Studio solution if you have Visual Studio installed, but you can configure generator with -G command line parameter:

cmake .. -G"Unix Makefiles"

The build procedure depends on the selected generator. With "Unix Makefiles" you can type:

make & make install

With "Visual Studio" and some other generators you can open solution or project from CMakeBuild directory and build using IDE.

Finally, you can use unified command:

cmake --build .

CMake also provides Qt-based cross platform GUI, cmake-gui. Using it is trivial and does not require detailed explanations.

Configuring CMake

You can pass additional options with /D<parameter>=<value> when you run cmake command. Some useful system options:

  • CMAKE_C_FLAGS - additional C compiler flags
  • CMAKE_BUILD_TYPE - configuration type, DEBUG, RELEASE, RELWITHDEBINFO or MINSIZEREL. DEBUG is default
  • CMAKE_INSTALL_PREFIX - build install location, the same as --prefix option of configure script

Useful libsndfile options:

  • BUILD_SHARED_LIBS - build shared library (DLL under Windows)
  • BUILD_STATIC_LIBS - build static library
  • BUILD_PROGRAMS - build libsndfile's utilities from programs/ directory
  • BUILD_EXAMPLES - build examples
  • BUILD_TESTING - build tests. Then you can run tests with ctest command
  • DISABLE_EXTERNAL_LIBS - disable Ogg, Vorbis and FLAC support
  • DISABLE_CPU_CLIP - disable tricky cpu specific clipper. Don't touch it if you are not sure.
  • ENABLE_BOW_DOCS - enable black-on-white documentation theme
  • ENABLE_EXPERIMENTAL - enable experimental code. Don't use it if you are not sure
  • ENABLE_CPACK - enable CPack support
  • ENABLE_PACKAGE_CONFIG - Generate and install package config file.
  • ENABLE_STATIC_RUNTIME - enable static runtime, useful for Windows

Notes for Windows users

First advice - set ENABLE_STATIC_RUNTIME to ON. This will remove dependencies on runtime DLLs.

Second advice is about Ogg, Vorbis and FLAC support. Searching external libraries under Windows is a little bit tricky. The best wayis to use Vcpkg. You need to install static libogg, libvorbis and libflac libraries:

vcpkg install libogg:x64-windows-static libvorbis:x64-windows-static
libflac:x64-windows-static libogg:x86-windows-static
libvorbis:x86-windows-static libflac:x86-windows-static

Then and add this parameter to cmake command line:

-DCMAKE_TOOLCHAIN_FILE=<path-to-vcpkg>/scripts/buildsystems/vcpkg.cmake

You also need to set VCPKG_TARGET_TRIPLET because you use static libraries:

-DVCPKG_TARGET_TRIPLET=x64-windows-static

Submitting Patches.

See CONTRIBUTING.md for details.