Blame README

Packit 8f7830
/* FLAC - Free Lossless Audio Codec
Packit 8f7830
 * Copyright (C) 2001-2009  Josh Coalson
Packit 8f7830
 * Copyright (C) 2011-2016  Xiph.Org Foundation
Packit 8f7830
 *
Packit 8f7830
 * This file is part the FLAC project.  FLAC is comprised of several
Packit 8f7830
 * components distributed under different licenses.  The codec libraries
Packit 8f7830
 * are distributed under Xiph.Org's BSD-like license (see the file
Packit 8f7830
 * COPYING.Xiph in this distribution).  All other programs, libraries, and
Packit 8f7830
 * plugins are distributed under the LGPL or GPL (see COPYING.LGPL and
Packit 8f7830
 * COPYING.GPL).  The documentation is distributed under the Gnu FDL (see
Packit 8f7830
 * COPYING.FDL).  Each file in the FLAC distribution contains at the top the
Packit 8f7830
 * terms under which it may be distributed.
Packit 8f7830
 *
Packit 8f7830
 * Since this particular file is relevant to all components of FLAC,
Packit 8f7830
 * it may be distributed under the Xiph.Org license, which is the least
Packit 8f7830
 * restrictive of those mentioned above.  See the file COPYING.Xiph in this
Packit 8f7830
 * distribution.
Packit 8f7830
 */
Packit 8f7830
Packit 8f7830
Packit 8f7830
FLAC is an Open Source lossless audio codec developed by Josh Coalson from 2001
Packit 8f7830
to 2009.
Packit 8f7830
Packit 8f7830
From January 2012 FLAC is being maintained by Erik de Castro Lopo under the
Packit 8f7830
auspices of the Xiph.org Foundation.
Packit 8f7830
Packit 8f7830
FLAC is comprised of
Packit 8f7830
  * `libFLAC', a library which implements reference encoders and
Packit 8f7830
    decoders for native FLAC and Ogg FLAC, and a metadata interface
Packit 8f7830
  * `libFLAC++', a C++ object wrapper library around libFLAC
Packit 8f7830
  * `flac', a command-line program for encoding and decoding files
Packit 8f7830
  * `metaflac', a command-line program for viewing and editing FLAC
Packit 8f7830
    metadata
Packit 8f7830
  * player plugin for XMMS
Packit 8f7830
  * user and API documentation
Packit 8f7830
Packit 8f7830
The libraries (libFLAC, libFLAC++) are
Packit 8f7830
licensed under Xiph.org's BSD-like license (see COPYING.Xiph).  All other
Packit 8f7830
programs and plugins are licensed under the GNU General Public License
Packit 8f7830
(see COPYING.GPL).  The documentation is licensed under the GNU Free
Packit 8f7830
Documentation License (see COPYING.FDL).
Packit 8f7830
Packit 8f7830
Packit 8f7830
===============================================================================
Packit 8f7830
FLAC - 1.3.2 - Contents
Packit 8f7830
===============================================================================
Packit 8f7830
Packit 8f7830
- Introduction
Packit 8f7830
- Prerequisites
Packit 8f7830
- Note to embedded developers
Packit 8f7830
- Building in a GNU environment
Packit 8f7830
- Building with Makefile.lite
Packit 8f7830
- Building with MSVC
Packit 8f7830
- Building on Mac OS X
Packit 8f7830
Packit 8f7830
Packit 8f7830
===============================================================================
Packit 8f7830
Introduction
Packit 8f7830
===============================================================================
Packit 8f7830
Packit 8f7830
This is the source release for the FLAC project.  See
Packit 8f7830
Packit 8f7830
	doc/html/index.html
Packit 8f7830
Packit 8f7830
for full documentation.
Packit 8f7830
Packit 8f7830
A brief description of the directory tree:
Packit 8f7830
Packit 8f7830
	doc/          the HTML documentation
Packit 8f7830
	examples/     example programs demonstrating the use of libFLAC and libFLAC++
Packit 8f7830
	include/      public include files for libFLAC and libFLAC++
Packit 8f7830
	man/          the man pages for `flac' and `metaflac'
Packit 8f7830
	src/          the source code and private headers
Packit 8f7830
	test/         the test scripts
Packit 8f7830
Packit 8f7830
If you have questions about building FLAC that this document does not answer,
Packit 8f7830
please submit them at the following tracker so this document can be improved:
Packit 8f7830
Packit 8f7830
	https://sourceforge.net/p/flac/support-requests/
Packit 8f7830
Packit 8f7830
Packit 8f7830
===============================================================================
Packit 8f7830
Prerequisites
Packit 8f7830
===============================================================================
Packit 8f7830
Packit 8f7830
To build FLAC with support for Ogg FLAC you must have built and installed
Packit 8f7830
libogg according to the specific instructions below.  You must have
Packit 8f7830
libogg 1.1.2 or greater, or there will be seeking problems with Ogg FLAC.
Packit 8f7830
Packit 8f7830
If you are building on x86 and want the assembly optimizations, you will
Packit 8f7830
need to have NASM >= 0.98.30 installed according to the specific instructions
Packit 8f7830
below.
Packit 8f7830
Packit 8f7830
Packit 8f7830
===============================================================================
Packit 8f7830
Note to embedded developers
Packit 8f7830
===============================================================================
Packit 8f7830
Packit 8f7830
libFLAC has grown larger over time as more functionality has been
Packit 8f7830
included, but much of it may be unnecessary for a particular embedded
Packit 8f7830
implementation.  Unused parts may be pruned by some simple editing of
Packit 8f7830
configure.ac and src/libFLAC/Makefile.am; the following dependency
Packit 8f7830
graph shows which modules may be pruned without breaking things
Packit 8f7830
further down:
Packit 8f7830
Packit 8f7830
metadata.h
Packit 8f7830
	stream_decoder.h
Packit 8f7830
	format.h
Packit 8f7830
Packit 8f7830
stream_encoder.h
Packit 8f7830
	stream_decoder.h
Packit 8f7830
	format.h
Packit 8f7830
Packit 8f7830
stream_decoder.h
Packit 8f7830
	format.h
Packit 8f7830
Packit 8f7830
In other words, for pure decoding applications, both the stream encoder
Packit 8f7830
and metadata editing interfaces can be safely removed.
Packit 8f7830
Packit 8f7830
There is a section dedicated to embedded use in the libFLAC API
Packit 8f7830
HTML documentation (see doc/html/api/index.html).
Packit 8f7830
Packit 8f7830
Also, there are several places in the libFLAC code with comments marked
Packit 8f7830
with "OPT:" where a #define can be changed to enable code that might be
Packit 8f7830
faster on a specific platform.  Experimenting with these can yield faster
Packit 8f7830
binaries.
Packit 8f7830
Packit 8f7830
Packit 8f7830
===============================================================================
Packit 8f7830
Building in a GNU environment
Packit 8f7830
===============================================================================
Packit 8f7830
Packit 8f7830
FLAC uses autoconf and libtool for configuring and building.
Packit 8f7830
Better documentation for these will be forthcoming, but in
Packit 8f7830
general, this should work:
Packit 8f7830
Packit 8f7830
./configure && make && make check && make install
Packit 8f7830
Packit 8f7830
The 'make check' step is optional; omit it to skip all the tests,
Packit 8f7830
which can take several hours and use around 70-80 megs of disk space.
Packit 8f7830
Even though it will stop with an explicit message on any failure, it
Packit 8f7830
does print out a lot of stuff so you might want to capture the output
Packit 8f7830
to a file if you're having a problem.  Also, don't run 'make check'
Packit 8f7830
as root because it confuses some of the tests.
Packit 8f7830
Packit 8f7830
NOTE: Despite our best efforts it's entirely possible to have
Packit 8f7830
problems when using older versions of autoconf, automake, or
Packit 8f7830
libtool.  If you have the latest versions and still can't get it
Packit 8f7830
to work, see the next section on Makefile.lite.
Packit 8f7830
Packit 8f7830
There are a few FLAC-specific arguments you can give to
Packit 8f7830
`configure':
Packit 8f7830
Packit 8f7830
--enable-debug : Builds everything with debug symbols and some
Packit 8f7830
extra (and more verbose) error checking.
Packit 8f7830
Packit 8f7830
--disable-asm-optimizations : Disables the compilation of the
Packit 8f7830
assembly routines.  Many routines have assembly versions for
Packit 8f7830
speed and `configure' is pretty good about knowing what is
Packit 8f7830
supported, but you can use this option to build only from the
Packit 8f7830
C sources.  May be necessary for building on OS X (Intel).
Packit 8f7830
Packit 8f7830
--enable-sse : If you are building for an x86 CPU that supports
Packit 8f7830
SSE instructions, you can enable some of the faster routines
Packit 8f7830
if your operating system also supports SSE instructions.  flac
Packit 8f7830
can tell if the CPU supports the instructions but currently has
Packit 8f7830
no way to test if the OS does, so if it does, you must pass
Packit 8f7830
this argument to configure to use the SSE routines.  If flac
Packit 8f7830
crashes when built with this option you will have to go back and
Packit 8f7830
configure without --enable-sse.  Note that
Packit 8f7830
--disable-asm-optimizations implies --disable-sse.
Packit 8f7830
Packit 8f7830
--enable-local-xmms-plugin : Installs the FLAC XMMS plugin in
Packit 8f7830
$HOME/.xmms/Plugins, instead of the global XMMS plugin area
Packit 8f7830
(usually /usr/lib/xmms/Input).
Packit 8f7830
Packit 8f7830
--with-ogg=
Packit 8f7830
--with-xmms-prefix=
Packit 8f7830
--with-libiconv-prefix=
Packit 8f7830
Use these if you have these packages but configure can't find them.
Packit 8f7830
Packit 8f7830
If you want to build completely from scratch (i.e. starting with just
Packit 8f7830
configure.ac and Makefile.am) you should be able to just run 'autogen.sh'
Packit 8f7830
but make sure and read the comments in that file first.
Packit 8f7830
Packit 8f7830
Packit 8f7830
===============================================================================
Packit 8f7830
Building with Makefile.lite
Packit 8f7830
===============================================================================
Packit 8f7830
Packit 8f7830
There is a more lightweight build system for do-it-yourself-ers.
Packit 8f7830
It is also useful if configure isn't working, which may be the
Packit 8f7830
case since lately we've had some problems with different versions
Packit 8f7830
of automake and libtool.  The Makefile.lite system should work
Packit 8f7830
on GNU systems with few or no adjustments.
Packit 8f7830
Packit 8f7830
From the top level just 'make -f Makefile.lite'.  You can
Packit 8f7830
specify zero or one optional target from 'release', 'debug',
Packit 8f7830
'test', or 'clean'.  The default is 'release'.  There is no
Packit 8f7830
'install' target but everything you need will end up in the
Packit 8f7830
obj/ directory.
Packit 8f7830
Packit 8f7830
If you are not on an x86 system or you don't have nasm, you
Packit 8f7830
may have to change the DEFINES in src/libFLAC/Makefile.lite.  If
Packit 8f7830
you don't have nasm, remove -DFLAC__HAS_NASM.  If your target is
Packit 8f7830
not an x86, change -DFLAC__CPU_IA32 to -DFLAC__CPU_UNKNOWN.
Packit 8f7830
Packit 8f7830
Packit 8f7830
===============================================================================
Packit 8f7830
Building with MSVC
Packit 8f7830
===============================================================================
Packit 8f7830
Packit 8f7830
There are .vcproj projects and a master FLAC.sln solution to build all
Packit 8f7830
the libraries and executables with MSVC 2005 or newer.
Packit 8f7830
Packit 8f7830
Prerequisite: you must have the Ogg libraries installed as described
Packit 8f7830
later.
Packit 8f7830
Packit 8f7830
Prerequisite: you must have nasm installed, and nasm.exe must be in
Packit 8f7830
your PATH, or the path to nasm.exe must be added to the list of
Packit 8f7830
directories for executable files in the MSVC global options.
Packit 8f7830
Packit 8f7830
To build everything, run Visual Studio, do File|Open and open FLAC.sln.
Packit 8f7830
From the dropdown in the toolbar, select "Release" instead of "Debug",
Packit 8f7830
then do Build|Build Solution.
Packit 8f7830
Packit 8f7830
This will build all libraries both statically (e.g.
Packit 8f7830
objs\release\lib\libFLAC_static.lib) and as DLLs (e.g.
Packit 8f7830
objs\release\lib\libFLAC.dll), and it will build all binaries, statically
Packit 8f7830
linked (e.g. objs\release\bin\flac.exe).
Packit 8f7830
Packit 8f7830
Everything will end up in the "objs" directory.  DLLs and .exe files
Packit 8f7830
are all that are needed and can be copied to an installation area and
Packit 8f7830
added to the PATH.
Packit 8f7830
Packit 8f7830
By default the code is configured with Ogg support. Before building FLAC
Packit 8f7830
you will need to get the Ogg source distribution
Packit 8f7830
(see http://xiph.org/downloads/), build libogg_static.lib (load
Packit 8f7830
win32\libogg_static.sln, change solution configuration to "Release" and
Packit 8f7830
code generation to "Multi-threaded (/MT)", then build), copy libogg_static.lib
Packit 8f7830
into FLAC's 'objs\release\lib' directory, and copy the entire include\ogg tree
Packit 8f7830
into FLAC's 'include' directory (so that there is an 'ogg' directory in FLAC's
Packit 8f7830
'include' directory with the files ogg.h, os_types.h and config_types.h).
Packit 8f7830
Packit 8f7830
If you want to build without Ogg support, instead edit all .vcproj files
Packit 8f7830
and remove any "FLAC__HAS_OGG" definitions.
Packit 8f7830
Packit 8f7830
Packit 8f7830
===============================================================================
Packit 8f7830
Building on Mac OS X
Packit 8f7830
===============================================================================
Packit 8f7830
Packit 8f7830
If you have Fink or a recent version of OS X with the proper autotools,
Packit 8f7830
the GNU flow above should work.