# Warnings we don't want to see
# 0169 = The private field is never used

CSC = mcs -debug -nowarn:0169

LOCAL_ASSEMBLIES =			\
	../Util/Util.dll		\
	../BeagleClient/Beagle.dll	\
	../beagled/BeagleDaemonPlugins.dll \
	../beagled/BeagleDaemonLib.dll

ASSEMBLIES =				\
	$(BEAGLED_LIBS)			\
	-r:Mono.Posix			\
	$(LOCAL_ASSEMBLIES:%=-r:%)

WRAPPER_IN = wrapper.in
WRAPPER_SED = sed 					\
	-e "s|\@prefix\@|$(prefix)|g"			\
	-e "s|\@pkglibdir\@|$(pkglibdir)|g"		\
	-e "s|\@libdir\@|$(libdir)|g"			\
	-e "s|\@libexecdir\@|$(libexecdir)|g"		\
	-e "s|\@bindir\@|$(bindir)|g"			\
	-e "s|\@sbindir\@|$(sbindir)|g"			\
	-e "s|\@sysconfdir\@|$(sysconfdir)|g"		\
	-e "s|\@localstatedir\@|$(localstatedir)|g"     \
	-e "s|\@gacprefix\@|$(GAC_PREFIX)|g"		\
	-e "s|\@bash\@|$(BASH)|"

CRAWL_WRAPPER = beagle-crawl-system
CRAWL_WRAPPER_IN = $(CRAWL_WRAPPER).in

$(CRAWL_WRAPPER) : $(CRAWL_WRAPPER_IN)
	$(WRAPPER_SED) < $(srcdir)/$(CRAWL_WRAPPER_IN) > $@
	chmod +x $(CRAWL_WRAPPER)

CRAWL_RULES = \
	$(srcdir)/crawl-rules/crawl-windows		\
	$(srcdir)/crawl-rules/crawl-applications	\
	$(srcdir)/crawl-rules/crawl-documentation

crondir = $(sysconfdir)/cron.daily
cron_SCRIPTS = $(CRAWL_WRAPPER)

# FIXME: Per-distribution specific crawl rules
configdir = $(sysconfdir)/beagle
config_DATA = $(CRAWL_RULES)

INFO_TARGET  = Info.exe
INFO_WRAPPER = beagle-info
INFO_CSFILES = $(srcdir)/Info.cs

$(INFO_TARGET): $(INFO_CSFILES) $(LOCAL_ASSEMBLIES)
	$(CSC) -out:$@ $(CSFLAGS) $(INFO_CSFILES) $(ASSEMBLIES)

$(INFO_WRAPPER): $(WRAPPER_IN)
	$(WRAPPER_SED) -e "s|\@target\@|$(INFO_TARGET)|g" < $(srcdir)/$(WRAPPER_IN) > $@
	chmod +x $(INFO_WRAPPER)

SHUTDOWN_TARGET  = Shutdown.exe
SHUTDOWN_WRAPPER = beagle-shutdown
SHUTDOWN_CSFILES = $(srcdir)/Shutdown.cs

$(SHUTDOWN_TARGET): $(SHUTDOWN_CSFILES) $(LOCAL_ASSEMBLIES)
	$(CSC) -out:$@ $(CSFLAGS) $(SHUTDOWN_CSFILES) $(ASSEMBLIES)

$(SHUTDOWN_WRAPPER): $(WRAPPER_IN)
	$(WRAPPER_SED) -e "s|\@target\@|$(SHUTDOWN_TARGET)|g" < $(srcdir)/$(WRAPPER_IN) > $@
	chmod +x $(SHUTDOWN_WRAPPER)

QUERY_TARGET  = Query.exe
QUERY_WRAPPER = beagle-query
QUERY_CSFILES = $(srcdir)/Query.cs
QUERY_ASSEMBLIES= -r:../beagled/BeagleDaemonLib.dll

$(QUERY_TARGET): $(QUERY_CSFILES) $(LOCAL_ASSEMBLIES)
	$(CSC) -out:$@ $(CSFLAGS) $(QUERY_CSFILES) $(QUERY_ASSEMBLIES) $(ASSEMBLIES)

$(QUERY_WRAPPER): $(WRAPPER_IN)
	$(WRAPPER_SED) -e "s|\@target\@|$(QUERY_TARGET)|g" < $(srcdir)/$(WRAPPER_IN) > $@
	chmod +x $(QUERY_WRAPPER)

EXERCISE_FILE_SYSTEM_TARGET = ExerciseFileSystem.exe
EXERCISE_FILE_SYSTEM_WRAPPER = beagle-exercise-file-system
EXERCISE_FILE_SYSTEM_CSFILES = $(srcdir)/ExerciseFileSystem.cs

$(EXERCISE_FILE_SYSTEM_TARGET): $(EXERCISE_FILE_SYSTEM_CSFILES) $(LOCAL_ASSEMBLIES)
	$(CSC) -out:$@ $(CSFLAGS) $(EXERCISE_FILE_SYSTEM_CSFILES) $(ASSEMBLIES)

$(EXERCISE_FILE_SYSTEM_WRAPPER): $(WRAPPER_IN)
	$(WRAPPER_SED) -e "s|\@target\@|$(EXERCISE_FILE_SYSTEM_TARGET)|g" < $(srcdir)/$(WRAPPER_IN) > $@
	chmod +x $(EXERCISE_FILE_SYSTEM_WRAPPER)

CONFIG_TARGET = Config.exe
CONFIG_WRAPPER = beagle-config
CONFIG_CSFILES = $(srcdir)/Config.cs

$(CONFIG_TARGET): $(CONFIG_CSFILES) $(LOCAL_ASSEMBLIES)
	$(CSC) -out:$@ $(CSFLAGS) $(CONFIG_CSFILES) $(ASSEMBLIES)

$(CONFIG_WRAPPER): $(WRAPPER_IN)
	$(WRAPPER_SED) -e "s|\@target\@|$(CONFIG_TARGET)|g" < $(srcdir)/$(WRAPPER_IN) > $@
	chmod +x $(CONFIG_WRAPPER)

if ENABLE_WEBSERVICES
SETTINGS_CSFLAGS = -define:ENABLE_WEBSERVICES
endif

if ENABLE_NETWORKING
SETTINGS_CSFLAGS = -define:ENABLE_NETWORKING
endif

SETTINGS_TARGET    = Settings.exe
SETTINGS_WRAPPER   = beagle-settings
SETTINGS_CSFILES   = $(srcdir)/Settings.cs
SETTINGS_RESOURCES = $(srcdir)/settings.glade
SETTINGS_RESOURCES_BUILD = $(foreach res,$(SETTINGS_RESOURCES), $(addprefix -resource:,$(srcdir)/$(res)),$(notdir $(res)))
SETTINGS_ASSEMBLIES = $(BEAGLE_UI_LIBS) -r:../Util/UiUtil.dll

$(SETTINGS_TARGET): $(SETTINGS_CSFILES) $(SETTINGS_RESOURCES) $(LOCAL_ASSEMBLIES)
	$(CSC) -out:$@ $(SETTINGS_RESOURCES_BUILD) $(CSFLAGS) $(SETTINGS_CSFLAGS) $(SETTINGS_CSFILES) $(ASSEMBLIES) $(SETTINGS_ASSEMBLIES)

$(SETTINGS_WRAPPER): $(WRAPPER_IN)
	$(WRAPPER_SED) -e "s|\@target\@|$(SETTINGS_TARGET)|g" < $(srcdir)/$(WRAPPER_IN) > $@
	chmod +x $(SETTINGS_WRAPPER)

TARGETS = 				\
	$(INFO_TARGET)			\
	$(SHUTDOWN_TARGET)		\
	$(QUERY_TARGET)			\
	$(EXERCISE_FILE_SYSTEM_TARGET)	\
	$(CONFIG_TARGET)

if ENABLE_GUI
TARGETS += $(SETTINGS_TARGET)
endif

TARGETS_MDB = $(TARGETS:%=%.mdb)

WRAPPERS = 				\
	$(INFO_WRAPPER)			\
	$(SHUTDOWN_WRAPPER)		\
	$(QUERY_WRAPPER)		\
	$(EXERCISE_FILE_SYSTEM_WRAPPER)	\
	$(CONFIG_WRAPPER)

if ENABLE_GUI
WRAPPERS += $(SETTINGS_WRAPPER)
endif

PREBUILT_WRAPPERS =		\
	beagle-index-info	\
	beagle-ping		\
	beagle-status

BIN_WRAPPERS = 			\
	$(WRAPPERS)		\
	$(PREBUILT_WRAPPERS)

man_MANS = 			\
	beagle-query.1		\
	beagle-shutdown.1	\
	beagle-status.1		\
	beagle-config.1

@INTLTOOL_DESKTOP_RULE@

if ENABLE_GUI
desktop_in_files = beagle-settings.desktop.in
desktop_files = $(desktop_in_files:.desktop.in=.desktop)

desktopdir = $(datadir)/applications
desktop_DATA = $(desktop_files)
endif

all: $(TARGETS) $(WRAPPERS)

install-data-local: $(TARGETS)
	$(mkinstalldirs) $(DESTDIR)$(bindir)
	$(mkinstalldirs) $(DESTDIR)$(pkglibdir)
	$(INSTALL_DATA) $(TARGETS) $(TARGETS_MDB) $(DESTDIR)$(pkglibdir)

	@for i in $(WRAPPERS); do						\
		sed -e "s|\#installed=1|installed=1|" < $$i > $$i.tmp;		\
		echo "$(INSTALL_SCRIPT) $$i.tmp $(DESTDIR)$(bindir)/$$i";	\
		$(INSTALL_SCRIPT) $$i.tmp $(DESTDIR)$(bindir)/$$i || exit 1;	\
		rm -f $$i.tmp;							\
	done

	@for i in $(PREBUILT_WRAPPERS); do					\
		sed -e "s|\#installed=1|installed=1|" < $(srcdir)/$$i > $$i.tmp;		\
		echo "$(INSTALL_SCRIPT) $$i.tmp $(DESTDIR)$(bindir)/$$i";	\
		$(INSTALL_SCRIPT) $$i.tmp $(DESTDIR)$(bindir)/$$i || exit 1;	\
		rm -f $$i.tmp;							\
	done

uninstall-local:
	cd $(DESTDIR)$(pkglibdir) && rm -f $(TARGETS) && rm -f $(TARGETS_MDB)

	@for i in $(BIN_WRAPPERS); do				\
		echo "rm -f $(DESTDIR)$(bindir)/$$i";		\
		rm -f $(DESTDIR)$(bindir)/$$i || exit 1;	\
	done

EXTRA_DIST =				\
	$(WRAPPER_IN)			\
	$(CRAWL_WRAPPER_IN)		\
	$(CRAWL_WRAPPER_CRONTAB_IN)	\
	$(INFO_CSFILES)			\
	$(SHUTDOWN_CSFILES)		\
	$(QUERY_CSFILES)		\
	$(EXERCISE_FILE_SYSTEM_CSFILES)	\
	$(CONFIG_CSFILES)		\
	$(SETTINGS_CSFILES)		\
	$(SETTINGS_RESOURCES)		\
	$(man_MANS)			\
	$(CRAWL_RULES)			\
	$(desktop_in_files)		\
	$(desktop_DATA) 		\
	beagle-index-info		\
	beagle-ping			\
	beagle-status			\
	boot.inotify.init		

CLEANFILES = 				\
	$(TARGETS)			\
	$(TARGETS_MDB)			\
	$(WRAPPERS)			\
	$(CRAWL_WRAPPER)		\
	$(CRAWL_WRAPPER_CRONTAB)	\
	$(desktop_DATA)		 	\
	$(desktop_h_files)		\
	settings.glade.h



