#  FLAC - Free Lossless Audio Codec
#  Copyright (C) 2001,2002,2003,2004  Josh Coalson
#
#  This file is part the FLAC project.  FLAC is comprised of several
#  components distributed under difference licenses.  The codec libraries
#  are distributed under Xiph.Org's BSD-like license (see the file
#  COPYING.Xiph in this distribution).  All other programs, libraries, and
#  plugins are distributed under the GPL (see COPYING.GPL).  The documentation
#  is distributed under the Gnu FDL (see COPYING.FDL).  Each file in the
#  FLAC distribution contains at the top the terms under which it may be
#  distributed.
#
#  Since this particular file is relevant to all components of FLAC,
#  it may be distributed under the Xiph.Org license, which is the least
#  restrictive of those mentioned above.  See the file COPYING.Xiph in this
#  distribution.

#
# GNU Makefile
#
# Useful targets
#
# all     : build all libraries and programs in the default configuration (currently 'release')
# debug   : build all libraries and programs in debug mode
# valgrind: build all libraries and programs in debug mode, dynamically linked and ready for valgrind
# release : build all libraries and programs in release mode
# test    : run the unit and stream tests
# clean   : remove all non-distro files
#

topdir = .

.PHONY: all doc src libFLAC libFLAC++ libOggFLAC libOggFLAC++ share plugin_common plugin_xmms flac metaflac test_grabbag test_libFLAC test_libFLAC++ test_libOggFLAC test_libOggFLAC++ test_streams
all: doc src

DEFAULT_CONFIG = release

CONFIG = $(DEFAULT_CONFIG)

debug   : CONFIG = debug
valgrind: CONFIG = valgrind
release : CONFIG = release

debug   : all
valgrind: all
release : all

doc:
	(cd $@ ; $(MAKE) -f Makefile.lite)

src:
	(cd $@ ; $(MAKE) -f Makefile.lite $(CONFIG))

libFLAC:
	(cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))

libFLAC++: libFLAC
	(cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))

libOggFLAC: libFLAC
	(cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))

libOggFLAC++: libFLAC
	(cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))

share: libFLAC
	(cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))

flac: libFLAC libOggFLAC share
	(cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))

metaflac: libFLAC share
	(cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))

plugin_common: libFLAC
	(cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))

plugin_xmms: libFLAC plugin_common
	(cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))

test_streams: libFLAC
	(cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))

test_grabbag: share
	(cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))

test_libFLAC: libFLAC
	(cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))

test_libFLAC++: libFLAC libFLAC++
	(cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))

test_libOggFLAC: libFLAC libOggFLAC
	(cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))

test_libOggFLAC++: libFLAC libOggFLAC libOggFLAC++
	(cd src/$@ ; $(MAKE) -f Makefile.lite $(CONFIG))

test: debug
	(cd test ; $(MAKE) -f Makefile.lite debug)

testv: valgrind
	(cd test ; $(MAKE) -f Makefile.lite valgrind)

testr: release
	(cd test ; $(MAKE) -f Makefile.lite release)

clean:
	-(cd doc ; $(MAKE) -f Makefile.lite clean)
	-(cd src ; $(MAKE) -f Makefile.lite clean)
	-(cd test ; $(MAKE) -f Makefile.lite clean)
