#  FLAC - Free Lossless Audio Codec
#  Copyright (C) 2001,2002,2003,2004,2005  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_seeking 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_seeking: libFLAC libOggFLAC
	(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)
