/* FLAC - Free Lossless Audio Codec
 * Copyright (C) 2001  Josh Coalson
 *
 * This program is part of FLAC; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */


FLAC (http://flac.sourceforge.net/) is an Open Source lossless audio
codec developed by Josh Coalson.

FLAC is comprised of 1) `libFLAC', a library which implements
reference encoders and decoders, licensed under the GNU Lesser
General Public License (LGPL); 2) `flac', a command-line program for
encoding and decoding files, licensed under the GNU General public
License (GPL); 3) `metaflac', a command-line program for editing
FLAC metadata, licensed under the GPL; 4) player plugins for XMMS
and Winamp, licensed under the GPL; and 5) documentation, licensed
under the GNU Free Documentation License.

==========
FLAC - 1.0
==========

This is the source release for the FLAC project.  See

	doc/index.html

for full documentation.

A brief description of the directory tree:

	doc/       the HTML documentation
	include/   public include files for libFLAC
	src/       the source code and private headers
	test/      the test scripts


=============================
Building in a GNU environment
=============================

FLAC now uses autoconf and libtool for configuring and
building.  Better documentation for these will be
forthcoming, but in general, this should work:

./configure ; make ; make install

There are a few FLAC-specific arguments you can give to
`configure':

--enable-debug : Builds everything with debug symbols and some
extra (and more verbose) error checking.

--disable-asm-optimizations : Disables the compilation of the
assembly routines.  Many routines have assembly versions for
speed and `configure' is pretty good about knowing what is
supported, but you can use this option to build only from the
C sources.

--sse-os : If you are building for an x86 CPU that supports
SSE instructions, you can enable some of the faster routines
if your operating system also supports SSE instructions.  flac
can tell if the CPU supports the instructions but currently has
no way to test if the OS does, so if it does, you must pass
this argument to configure to use the SSE routines.  If flac
crashes when built with this option you will have to go back and
configure without --sse-os.  Note that --disable-asm-optimizations
overrides --sse-os.


==================
Building with MSVC
==================

There is no overall make system for MSVC but the individual
source directories with a 'Makefile.vc' file in them allow
building with MSVC.  Just 'nmake /f Makefile.vc'.  Currently
the Makefile.vc for libFLAC is hardcoded to use nasm.  If
you don't have nasm, or don't want any assembly optimizations,
edit the makefile, adding '/D FLAC__NO_ASM' and delete the
rules which compile the .s files.
