#  FLAC - Free Lossless Audio Codec
#  Copyright (C) 2001-2009  Josh Coalson
#  Copyright (C) 2011-2016  Xiph.Org Foundation
#
#  This file is part the FLAC project.  FLAC is comprised of several
#  components distributed under different 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.

.PHONY: all example_c_decode_file example_c_encode_file example_cpp_decode_file example_cpp_encode_file
all: example_c_decode_file example_c_encode_file example_cpp_decode_file example_cpp_encode_file

DEFAULT_CONFIG = release

CONFIG = $(DEFAULT_CONFIG)

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

debug   : all
valgrind: all
release : all

example_c_decode_file:
	(cd c/decode/file && $(MAKE) -f Makefile.lite $(CONFIG))

example_c_encode_file:
	(cd c/encode/file && $(MAKE) -f Makefile.lite $(CONFIG))

example_cpp_decode_file:
	(cd cpp/decode/file && $(MAKE) -f Makefile.lite $(CONFIG))

example_cpp_encode_file:
	(cd cpp/encode/file && $(MAKE) -f Makefile.lite $(CONFIG))

clean:
	-(cd c/decode/file && $(MAKE) -f Makefile.lite clean)
	-(cd c/encode/file && $(MAKE) -f Makefile.lite clean)
	-(cd cpp/decode/file && $(MAKE) -f Makefile.lite clean)
	-(cd cpp/encode/file && $(MAKE) -f Makefile.lite clean)
