# Makefile.am - Copyright 2005, 2006, University
#               of Padova, dept. of Pure and Applied
#               Mathematics
#
# This file is part of SGPEMv2.
#
# This is free software; 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.
#
# SGPEMv2 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 SGPEMv2; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA


# extra calls
.PHONY : apidox

# this should be the only recursive call inside sgpemv2 main pkg
# please note the "." directory _has_ to come first, before plugins
SUBDIRS = . po

# ################################# #
# Additional directories building:  #
# ################################# #

# allow building of provided plugins
# FIXME: how to make this dynamic? e.g. for plugins/* ?
SUBDIRS += \
	plugins/pyloader \
	plugins/xmlsave

datarootdir = @datarootdir@
sharedir = $(pkgdatadir)
examplesdir = $(sharedir)/examples
policiesdir = $(sharedir)/policies
plugindir = $(sharedir)/plugins
gladedir = $(sharedir)/glade
localedir = @datadir@/locale
aclocaldir = @datadir@/aclocal

# used for installing templates include files
templatesdir = $(pkgincludedir)/templates

#define empty global variables
bin_PROGRAMS =
pkglib_LTLIBRARIES =
plugin_LTLIBRARIES =
noinst_HEADERS =
noinst_DATA =
pkginclude_HEADERS =
templates_HEADERS =
EXTRA_DIST =
MAINTAINERCLEANFILES =
MOSTLYCLEANFILES =
CLEANFILES =

# ############################################################
#
# extra dist, cleanup and automake/aclocal flags
#
# ############################################################

ACLOCAL_AMFLAGS = -I m4

install_macros = \
	m4/sgpemv2-dirs.m4 \
	m4/sgpemv2-visibility.m4
macros = \
	m4/compilerflags.m4 \
	m4/linkingflags.m4

EXTRA_DIST += \
	config/config.rpath \
	config/mkinstalldirs \
	configure.ac \
	gettext.h \
	$(install_macros) \
	$(macros)

aclocal_DATA = $(install_macros)

MAINTAINERCLEANFILES += doc/API

# ############################################################
#
# desktop files and other distribution data
#
# ############################################################

pkgconfdir = $(libdir)/pkgconfig
pkgconf_DATA = config/sgpemv2.pc

# ############################################################
#
# documentation
#
# ############################################################

info_TEXINFOS = \
	doc/sgpem2uman.texi \
	doc/sgpem2dman.texi

licenses = doc/fdl.texi doc/gpl.texi
images   = \
		doc/main-window.pdf \
		doc/main-window.eps \
		doc/main-window.txt \
		doc/main-window.gif
EXTRA_DIST += $(licenses) $(images) 

sgpem2uman_TEXINFOS = $(licenses) doc/vers-uman.texi
sgpem2dman_TEXINFOS = $(licenses) doc/vers-dman.texi

apidox :
	test -d 'doc/API' || mkdir -p -- 'doc/API'
if HAVE_DOXYGEN
	doxygen config/Doxyfile
else
	@echo "** Doxygen not installed. Skipping generating API docs."
endif

dist-hook : apidox
	cp -Rp 'doc/API' '$(distdir)/doc/API'

distclean-local :
	if test -d 'doc/API'; then rm -rf 'doc/API'; fi

# ############################################################
#
# source : libbackend.la
#
# ############################################################

# Program & library names
pkglib_LTLIBRARIES += src/backend/libbackend.la

src_backend_libbackend_la_CPPFLAGS = \
		-I@top_srcdir@ \
		-I@top_srcdir@/src/backend \
		-DPOLDIR="\"$(policiesdir)\"" \
		-DPLUGDIR="\"$(plugindir)\"" \
		-DLOCALEDIR="\"$(localedir)\"" \
		$(GLIBMM_CFLAGS)
src_backend_libbackend_la_CXXFLAGS = \
		$(VISIB_HIDDEN)
src_backend_libbackend_la_LDFLAGS = \
		$(GLIBMM_LDFLAGS) \
		$(LT_LDFLAGS) \
		-version-info 0:0:0 \
		-export-dynamic
src_backend_libbackend_la_LIBADD = \
		$(GLIBMM_LIBS)

# Please keep this in sorted order:
src_backend_libbackend_la_SOURCES = \
		src/backend/concrete_environment.cc \
		src/backend/concrete_history.cc \
		src/backend/concrete_process_statistics.cc \
		src/backend/concrete_simulation.cc \
		src/backend/concrete_simulation_statistics.cc \
		src/backend/concrete_statistics.cc \
		src/backend/concrete_thread_statistics.cc \
		src/backend/cpu_policies_gatekeeper.cc \
		src/backend/cpu_policy.cc \
		src/backend/cpu_policy_exception.cc \
		src/backend/cpu_policy_manager.cc \
		src/backend/default_resource_policy_manager.cc \
		src/backend/dynamic_process.cc \
		src/backend/dynamic_request.cc \
		src/backend/dynamic_resource.cc \
		src/backend/dynamic_schedulable.cc \
		src/backend/dynamic_sub_request.cc \
		src/backend/dynamic_thread.cc \
		src/backend/environment.cc \
		src/backend/global_preferences.cc \
		src/backend/history.cc \
		src/backend/history_observer.cc \
		src/backend/holt_graph.cc \
		src/backend/invalid_plugin_exception.cc \
		src/backend/key_file.cc \
		src/backend/malformed_policy_exception.cc \
		src/backend/module.cc \
		src/backend/null_policy_exception.cc \
		src/backend/plugin_manager.cc \
		src/backend/policy_parameters.cc \
		src/backend/process.cc \
		src/backend/process_statistics.cc \
		src/backend/ready_queue.cc \
		src/backend/request.cc \
		src/backend/resource.cc \
		src/backend/resource_policies_gatekeeper.cc \
		src/backend/resource_policy.cc \
		src/backend/resource_policy_fifo.cc \
		src/backend/resource_policy_lifo.cc \
		src/backend/resource_policy_manager.cc \
		src/backend/resource_policy_priority.cc \
		src/backend/schedulable.cc \
		src/backend/schedulable_statistics.cc \
		src/backend/scheduler.cc \
		src/backend/serialize_visitor.cc \
		src/backend/serializer.cc \
		src/backend/serializer_error.cc \
		src/backend/serializers_gatekeeper.cc \
		src/backend/simulation.cc \
		src/backend/simulation_observer.cc \
		src/backend/simulation_statistics.cc \
		src/backend/static_process.cc \
		src/backend/static_request.cc \
		src/backend/static_resource.cc \
		src/backend/static_schedulable.cc \
		src/backend/static_sub_request.cc \
		src/backend/static_thread.cc \
		src/backend/statistics.cc \
		src/backend/string_utils.cc \
		src/backend/sub_request.cc \
		src/backend/thread.cc \
		src/backend/thread_statistics.cc \
		src/backend/user_interrupt_exception.cc

# Put here header files that will be installed for the user
# For headers used internally by the backend, see below.
pkginclude_HEADERS += \
		config.h \
		src/backend/sgpemv2/cpu_policies_gatekeeper.hh \
		src/backend/sgpemv2/cpu_policy.hh \
		src/backend/sgpemv2/cpu_policy_exception.hh \
		src/backend/sgpemv2/cpu_policy_manager.hh \
		src/backend/sgpemv2/default_resource_policy_manager.hh \
		src/backend/sgpemv2/environment.hh \
		src/backend/sgpemv2/global_preferences.hh \
		src/backend/sgpemv2/history.hh \
		src/backend/sgpemv2/history_observer.hh \
		src/backend/sgpemv2/holt_graph.hh \
		src/backend/sgpemv2/invalid_plugin_exception.hh \
		src/backend/sgpemv2/key_file.hh \
		src/backend/sgpemv2/malformed_policy_exception.hh \
		src/backend/sgpemv2/module.hh \
		src/backend/sgpemv2/null_policy_exception.hh \
		src/backend/sgpemv2/policy_parameters.hh \
		src/backend/sgpemv2/plugin.hh \
		src/backend/sgpemv2/plugin_manager.hh \
		src/backend/sgpemv2/process_statistics.hh \
		src/backend/sgpemv2/ready_queue.hh \
		src/backend/sgpemv2/request.hh \
		src/backend/sgpemv2/resource.hh \
		src/backend/sgpemv2/resource_policies_gatekeeper.hh \
		src/backend/sgpemv2/resource_policy.hh \
		src/backend/sgpemv2/resource_policy_fifo.hh \
		src/backend/sgpemv2/resource_policy_lifo.hh \
		src/backend/sgpemv2/resource_policy_manager.hh \
		src/backend/sgpemv2/resource_policy_priority.hh \
		src/backend/sgpemv2/process.hh \
		src/backend/sgpemv2/schedulable.hh \
		src/backend/sgpemv2/schedulable_statistics.hh \
		src/backend/sgpemv2/scheduler.hh \
		src/backend/sgpemv2/serialize_visitor.hh \
		src/backend/sgpemv2/serializer.hh \
		src/backend/sgpemv2/serializer_error.hh \
		src/backend/sgpemv2/serializers_gatekeeper.hh \
		src/backend/sgpemv2/simulation.hh \
		src/backend/sgpemv2/simulation_observer.hh \
		src/backend/sgpemv2/simulation_statistics.hh \
		src/backend/sgpemv2/statistics.hh \
		src/backend/sgpemv2/string_utils.hh \
		src/backend/sgpemv2/sub_request.hh \
		src/backend/sgpemv2/thread.hh \
		src/backend/sgpemv2/thread_statistics.hh \
		src/backend/sgpemv2/user_interrupt_exception.hh


# Put here headers used internally by the backend
# They won't be installed for the end-user.
noinst_HEADERS += \
		src/backend/concrete_environment.hh \
		src/backend/concrete_history.hh \
		src/backend/concrete_process_statistics.hh \
		src/backend/concrete_simulation.hh \
		src/backend/concrete_simulation_statistics.hh \
		src/backend/concrete_statistics.hh \
		src/backend/concrete_thread_statistics.hh \
		src/backend/dynamic_process.hh \
		src/backend/dynamic_request.hh \
		src/backend/dynamic_resource.hh \
		src/backend/dynamic_schedulable.hh \
		src/backend/dynamic_sub_request.hh \
		src/backend/dynamic_thread.hh \
		src/backend/static_process.hh \
		src/backend/static_request.hh \
		src/backend/static_resource.hh \
		src/backend/static_schedulable.hh \
		src/backend/static_sub_request.hh \
		src/backend/static_thread.hh



# ############################################################
#
# source : main executable
#
# ############################################################

# Program & library names
bin_PROGRAMS += sgpemv2

sgpemv2_CPPFLAGS = \
		-I@top_srcdir@ \
		-I@top_srcdir@/src/backend \
		-DLOCALEDIR="\"$(localedir)\"" \
		-DSHAREDIR="\"$(sharedir)\"" \
		-DGLADEDIR="\"$(gladedir)\"" \
		$(CAIRO_CFLAGS) \
		$(GTKMM_CFLAGS) \
		$(LIBGLADEMM_CFLAGS) \
		$(GTHREAD_CFLAGS)
sgpemv2_CXXFLAGS = $(VISIB_HIDDEN)
sgpemv2_LDFLAGS = $(LT_LDFLAGS)
sgpemv2_LDADD = \
		src/backend/libbackend.la \
		$(CAIRO_LIBS) \
		$(GTKMM_LIBS) \
		$(LIBGLADEMM_LIBS) \
		$(GTHREAD_LIBS)

# Please keep this in sorted order:
sgpemv2_SOURCES = \
	src/add_request_dialog.cc \
	src/cairo_elements.cc \
	src/cairo_widget.cc \
	src/configure_policy_dialog.cc \
	src/graphical_preferences_editor.cc \
	src/gui_builder.cc \
	src/holt_container_window.cc \
	src/holt_widget.cc \
	src/jump_to_dialog.cc \
	src/main.cc \
	src/parse_opts.cc \
	src/ready_queue_widget.cc \
	src/resources_widget.cc \
	src/schedulable_state_widget.cc \
	src/schedulables_statistics_widget.cc \
	src/schedulables_tree_widget.cc \
  	src/simulation_controller.cc \
	src/simulation_widget.cc \
	src/statistics_container_window.cc \
	src/text_simulation.cc

noinst_HEADERS += \
	src/add_request_dialog.hh \
	src/cairo_elements.hh \
	src/cairo_widget.hh \
	src/configure_policy_dialog.hh \
	src/graphical_preferences_editor.hh \
	src/gui_builder.hh \
	src/holt_container_window.hh \
	src/holt_widget.hh \
	src/jump_to_dialog.hh \
	src/main.hh \
	src/parse_opts.hh \
	src/ready_queue_widget.hh \
	src/resources_widget.hh \
	src/schedulable_state_widget.hh \
	src/schedulables_statistics_widget.hh \
	src/schedulables_tree_widget.hh \
  	src/simulation_controller.hh \
	src/simulation_widget.hh \
	src/schedulables_statistics_widget.hh \
	src/text_simulation.hh

#  ---------- glade files -----------

glade_DATA = \
	data/logo.png \
	glade/add-process-dialog.glade \
	glade/add-request-dialog.glade \
	glade/add-resource-dialog.glade \
	glade/add-thread-dialog.glade \
	glade/configure-dialog.glade \
	glade/jump-to-dialog.glade \
	glade/main-window.glade

EXTRA_DIST += $(glade_DATA)

# ############################################################
#
# source : templates
#
# ############################################################

templates_HEADERS += \
	src/backend/sgpemv2/templates/deletor.tcc \
	src/backend/sgpemv2/templates/parameter.tcc \
	src/backend/sgpemv2/templates/sequences.tcc \
	src/backend/sgpemv2/templates/singleton.hh \
	src/backend/sgpemv2/templates/singleton.tcc \
	src/backend/sgpemv2/templates/smartp.hh \
	src/backend/sgpemv2/templates/smartp.tcc

# ############################################################
#
# check : testsuite
#
# ############################################################

if COND_TESTS

# DEJATOOL = src/testsuite/example-test.exp

noinst_PROGRAMS = \
	src/testsuite/test-cairo_widget \
	src/testsuite/test-global_preferences_serialization \
	src/testsuite/test-history \
	src/testsuite/test-holt_widget \
	src/testsuite/test-key_file \
	src/testsuite/test-simulation_widget 

# disable : 
#	src/testsuite/test-parse_command
#	src/testsuite/test-stepforward

src_testsuite_test_history_CPPFLAGS = \
		-I@top_srcdir@/src/backend \
		$(GLIBMM_CFLAGS)
src_testsuite_test_history_LDFLAGS = \
		src/backend/libbackend.la \
		$(GLIBMM_LIBS)
src_testsuite_test_history_SOURCES = \
		src/backend/concrete_environment.cc \
		src/backend/concrete_history.cc \
		src/backend/dynamic_process.cc \
		src/backend/dynamic_request.cc \
		src/backend/dynamic_resource.cc \
		src/backend/dynamic_schedulable.cc \
		src/backend/dynamic_sub_request.cc \
		src/backend/dynamic_thread.cc \
		src/backend/static_process.cc \
		src/backend/static_request.cc \
		src/backend/static_resource.cc \
		src/backend/static_schedulable.cc \
		src/backend/static_sub_request.cc \
		src/backend/static_thread.cc \
		src/testsuite/test-history.cc 

src_testsuite_test_global_preferences_serialization_CPPFLAGS = \
		-I@top_srcdir@/src/backend \
		$(GLIBMM_CFLAGS)
src_testsuite_test_global_preferences_serialization_LDFLAGS = \
		src/backend/libbackend.la \
		$(GLIBMM_LIBS)
src_testsuite_test_global_preferences_serialization_SOURCES = \
		src/testsuite/test-global_preferences_serialization.cc

src_testsuite_test_key_file_CPPFLAGS = \
		-I@top_srcdir@/src/backend \
		$(GLIBMM_CFLAGS)
src_testsuite_test_key_file_LDFLAGS = \
		src/backend/libbackend.la \
		$(GLIBMM_LIBS)
src_testsuite_test_key_file_SOURCES = \
		src/testsuite/test-key_file.cc

src_testsuite_test_cairo_widget_CPPFLAGS = \
		-I@top_srcdir@/src \
		-I@top_srcdir@/src/backend \
		$(CAIRO_CFLAGS) \
		$(GTKMM_CFLAGS) \
		$(GLIBMM_CFLAGS)
src_testsuite_test_cairo_widget_LDFLAGS = \
		$(CAIRO_LIBS) \
		$(GTKMM_LIBS) \
		$(GLIBMM_LIBS)
src_testsuite_test_cairo_widget_SOURCES = \
		src/cairo_elements.cc \
		src/cairo_widget.cc \
		src/testsuite/test-cairo_widget.cc

src_testsuite_test_simulation_widget_CPPFLAGS = \
		-I@top_srcdir@/src \
		-I@top_srcdir@/src/backend \
		$(CAIRO_CFLAGS) \
		$(GTKMM_CFLAGS) \
		$(GLIBMM_CFLAGS) \
		$(GTHREAD_CFLAGS)
src_testsuite_test_simulation_widget_LDFLAGS = \
		src/backend/libbackend.la \
		$(CAIRO_LIBS) \
		$(GTKMM_LIBS) \
		$(GLIBMM_LIBS) \
		$(GTHREAD_LIBS)
src_testsuite_test_simulation_widget_SOURCES = \
		src/cairo_elements.cc \
		src/cairo_widget.cc \
		src/simulation_widget.cc \
		src/testsuite/test-simulation_widget.cc

src_testsuite_test_holt_widget_CPPFLAGS = \
		-I@top_srcdir@/src \
		-I@top_srcdir@/src/backend \
		$(CAIRO_CFLAGS) \
		$(GTKMM_CFLAGS) \
		$(GLIBMM_CFLAGS) \
		$(GTHREAD_CFLAGS)
src_testsuite_test_holt_widget_LDFLAGS = \
		src/backend/libbackend.la \
		$(CAIRO_LIBS) \
		$(GTKMM_LIBS) \
		$(GLIBMM_LIBS) \
		$(GTHREAD_LIBS)
src_testsuite_test_holt_widget_SOURCES = \
		src/cairo_elements.cc \
		src/cairo_widget.cc \
		src/simulation_widget.cc \
		src/holt_container_window.cc \
		src/holt_widget.cc \
		src/testsuite/test-holt_widget.cc

#src_testsuite_test_parse_command_CPPFLAGS = \
#		-I@top_srcdir@/src \
#		-I@top_srcdir@/src/templates \
#		$(GLIBMM_CFLAGS)
#src_testsuite_test_parse_command_LDFLAGS = \
#		src/backend/libbackend.la \
#		$(GLIBMM_LIBS)
#src_testsuite_test_parse_command_SOURCES = \
#		src/testsuite/test-parse_command.cc


# advice: get dummy_policy from the somewhere in the repository, and compile it in.
#src_testsuite_test_stepforward_CPPFLAGS = \
#		-I@top_srcdir@/src \
#		-I@top_srcdir@/src/templates \
#		$(GLIBMM_CFLAGS)
#src_testsuite_test_stepforward_LDFLAGS = \
#		src/backend/libbackend.la \
#		$(GLIBMM_LIBS)
#src_testsuite_test_stepforward_SOURCES = \
#		src/testsuite/stubs/history.cc \
#		src/testsuite/stubs/prrpolicy.cc \
#		src/testsuite/stubs/policy_manager.cc \
#		src/backend/scheduler.cc \
#		src/testsuite/test-stepforward.cc


# Workaround an automake bug that leaves behind some files 
# while it's finishing the distcheck target
CLEANFILES += \
	src/testsuite/.libs/test-cairo_widget \
	src/testsuite/.libs/test-global_preferences_serialization \
	src/testsuite/.libs/test-history \
	src/testsuite/.libs/test-holt_widget \
	src/testsuite/.libs/test-key_file \
	src/testsuite/.libs/test-simulation_widget 

endif #~ if COND_TESTS

# ############################################################
#
# extra files to distribute
#
# ############################################################

noinst_DATA += \
		src/testsuite/scheduling-wizards/wizard-deadlock-test \
		src/testsuite/scheduling-wizards/wizard-gap-fail \
		src/testsuite/scheduling-wizards/wizard-assert-fail \
		src/testsuite/scheduling-wizards/wizard-unblock-test \
		src/testsuite/scheduling-wizards/wizard-complex-test \
		src/testsuite/scheduling-wizards/wizard-priority-inversion-porno \
		src/testsuite/scheduling-wizards/wizard-priority-preemption-fail \
		src/testsuite/scheduling-wizards/wizard-block-fail

examples_DATA = \
		src/testsuite/scheduling-wizards/environments/Ducks_rr_2.xgp \
		src/testsuite/scheduling-wizards/environments/FruitsBasket_complex.xgp \
		src/testsuite/scheduling-wizards/environments/Fantozzi_lifo_requests.xgp \
		src/testsuite/scheduling-wizards/environments/Colori_rr_prio_1_2.xgp \
		src/testsuite/scheduling-wizards/environments/ScuolaDiMileto_block_fail.xgp \
		src/testsuite/scheduling-wizards/environments/ScuolaDiMileto_gap_blocked.xgp \
		src/testsuite/scheduling-wizards/environments/ScuolaDiMileto_assert_fail.xgp \
		src/testsuite/scheduling-wizards/environments/Matteo_deadlock.xgp \
		src/testsuite/scheduling-wizards/environments/Modernita_gap_terminated.xgp \
		src/testsuite/scheduling-wizards/environments/Matteo_preemption_fail.xgp \
		src/testsuite/scheduling-wizards/environments/Porno_priority_inversion.xgp \
		src/testsuite/scheduling-wizards/environments/ScuolaDiMileto_gap_fail.xgp \
		src/testsuite/scheduling-wizards/environments/DiscWorld_unblock.xgp

EXTRA_DIST += $(noinst_DATA) $(examples_DATA)

