## Makefile
#
#  Copyright 2008 Sony Corporation of America
#
#
#  Permission is hereby granted, free of charge, to any person obtaining a copy
#  of this software and associated documentation files (the "Software"), to deal
#  in the Software without restriction, including without limitation the rights
#  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
#  copies of the Software, and to permit persons to whom the Software is
#  furnished to do so, subject to the following conditions:
#
#  The above copyright notice and this permission notice shall be included in
#  all copies or substantial portions of the Software.
#
#  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
#  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
#  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
#  THE SOFTWARE.
#

VERSION = build
PACKAGE = mars-samples-$(VERSION)

SUBDIRS = \
	barrier \
	compare \
	event_flag \
	exit_code \
	grayscale \
	hello \
	host_callback \
	mandelbrot \
	partial_context_save \
	priority \
	queue \
	schedule \
	semaphore \
	shared_context \
	signal \
	unschedule \
	workload_module \
	yield

datadir = /usr/share

.PHONY: all check distdir dist
.PHONY: mostlyclean clean distclean maintainer-clean
.PHONY: install install-data install-exec uninstall installdirs installcheck
.PHONY: install-dvi install-html install-info install-ps install-pdf
.PHONY: dvi html info ps pdf
.PHONY: tags ctags

all:
	@for dir in $(SUBDIRS); do $(MAKE) -C $$dir all || exit 1; done

clean:
	@for dir in $(SUBDIRS); do $(MAKE) -C $$dir clean || exit 1; done

check: all
	@for dir in $(SUBDIRS); do $(MAKE) -C $$dir check || exit 1; done

	@echo "==================================="
	@echo "All samples completed successfully!"
	@echo "==================================="

install: install-data

install-data:
	$(MAKE) distdir=$(DESTDIR)$(datadir)/mars-$(VERSION)/samples distdir

dist:
	$(MAKE) distdir=$(PACKAGE) distdir
	tar cvzf $(PACKAGE).tar.gz $(PACKAGE)
	rm -rf $(PACKAGE)

distdir: distclean
	mkdir -p $(distdir)
	cp -rf $(SUBDIRS) config.mk rules.mk Makefile COPYING README $(distdir)
	rm -f `find  $(distdir) -name '.gitignore'`

distclean: clean
	@rm -rf $(PACKAGE).tar.gz $(PACKAGE)

mostlyclean: clean

maintainer-clean: distclean

install-exec uninstall installdirs installcheck:
install-dvi install-html install-info install-ps install-pdf:
dvi html info ps pdf:
tags ctags:
