#==============================================================================#
#
# Centralized build system for "abstractions".  
#
# see for instructions: http://puredata.org/docs/developer/build
#  <hans@at.or.at>
#
#==============================================================================#

CWD := $(shell pwd)

# these are designed to be overridden by the packages/Makefile
cvs_root_dir = $(CWD)/..
DESTDIR = $(CWD)/build/
BUILDLAYOUT_DIR = $(cvs_root_dir)/packages

include $(BUILDLAYOUT_DIR)/Makefile.buildlayout

#==============================================================================#
#
# OVERARCHING BUILD TARGETS
#
#==============================================================================#

# in case anything needs to be compiled or processed somehow before installing
all:

# clean up after everything is installed
final_setup:
	chmod -R ugo-w $(pddocdir)

install: all $(objectsdir) $(helpdir) $(manualsdir) $(examplesdir) \
gyre_install keyboardkeys_install la_install-kitchen list-abs_install memento_install \
nusmuk_install nqpoly_install parazit_install pddp_install pixeltango_install \
rradical_install
	@echo " "
	@echo "abstractions install succeeded!"

#==============================================================================#
#
# PROJECT TARGETS
#
#==============================================================================#

#-------------------------------------------------------------------------------
# GYRE
GYRE_NAME = gyre
gyre_install:
	install -d $(objectsdir)/$(GYRE_NAME)
	install -p $(abstractions_src)/audionerd/GYRE/gyre.*.pd \
		 $(objectsdir)/$(GYRE_NAME)
	install -d $(manualsdir)/$(GYRE_NAME)
	install -p $(abstractions_src)/audionerd/GYRE/gyre.html \
		 $(manualsdir)/$(GYRE_NAME)
	install -d $(examplesdir)/$(GYRE_NAME)
	install -p $(abstractions_src)/audionerd/GYRE/gyre.pd \
		 $(examplesdir)/$(GYRE_NAME)


#-------------------------------------------------------------------------------
# keyboardkeys
KEYBOARDKEYS_NAME = keyboardkeys
keyboardkeys_install:
	install -d $(objectsdir)/$(KEYBOARDKEYS_NAME)
	install -p $(abstractions_src)/$(KEYBOARDKEYS_NAME)/abs/*.pd \
		 $(objectsdir)/$(KEYBOARDKEYS_NAME)
	$(scripts_src)/generate-libdir-metafile.sh $(objectsdir) $(KEYBOARDKEYS_NAME) \
		--author "Andrey Savitsky" \
		--description "objects for using keyboard keys for scrolling and selecting"
	install -d $(helpdir)/$(KEYBOARDKEYS_NAME)
	install -p $(abstractions_src)/$(KEYBOARDKEYS_NAME)/doc/*-help.pd \
		 $(helpdir)/$(KEYBOARDKEYS_NAME)
	install -d $(examplesdir)/$(KEYBOARDKEYS_NAME)
	install -p $(abstractions_src)/$(KEYBOARDKEYS_NAME)/keyboard_main.pd \
		 $(examplesdir)/$(KEYBOARDKEYS_NAME)

#-------------------------------------------------------------------------------
# list-abs
LIST-ABS_NAME = list-abs
list-abs_install:
	install -d $(objectsdir)/$(LIST-ABS_NAME)
	install -p $(shell ls -1 $(abstractions_src)/footils/list-abs/*.pd | \
		grep -v '\-help.pd')  $(objectsdir)/$(LIST-ABS_NAME)
	$(scripts_src)/generate-libdir-metafile.sh $(objectsdir) $(LIST-ABS_NAME) \
		--author "Frank Barknecht" \
		--license "GNU GPL" \
		--description "a collection of objects for manipulating lists. Requires pd>=0.39"
	install -d $(helpdir)/$(LIST-ABS_NAME)
	install -p $(abstractions_src)/footils/list-abs/*-help.pd \
		$(helpdir)/$(LIST-ABS_NAME)



#-------------------------------------------------------------------------------
# la-kitchen
LA-KITCHEN_NAME = la-kitchen
la_install-kitchen:
	install -d $(objectsdir)/$(LA-KITCHEN_NAME)
	install -p $(shell ls -1 $(abstractions_src)/La-kitchen/*.pd | \
		grep -v '\-help.pd')    $(objectsdir)/$(LA-KITCHEN_NAME)
	$(scripts_src)/generate-libdir-metafile.sh $(objectsdir) $(LA-KITCHEN_NAME) \
		--author "Charles Verron" \
		--description "a collection of objects working with sensors"
	install -d $(helpdir)/$(LA-KITCHEN_NAME)
	install -p $(abstractions_src)/La-kitchen/*-help.pd \
		 $(helpdir)/$(LA-KITCHEN_NAME)
	install -d $(manualsdir)/$(LA-KITCHEN_NAME)
	install -p $(abstractions_src)/La-kitchen/readme.txt \
		 $(manualsdir)/$(LA-KITCHEN_NAME)


#-------------------------------------------------------------------------------
# memento
MEMENTO_NAME = memento
memento_install:
	install -d $(objectsdir)/$(MEMENTO_NAME)
	install -p $(shell ls -1 $(abstractions_src)/rradical/memento/*.pd | \
		grep -v '\-help.pd')  $(objectsdir)/$(MEMENTO_NAME)
	$(scripts_src)/generate-libdir-metafile.sh $(objectsdir) $(MEMENTO_NAME) \
		--author "Frank Barknecht" \
		--license "GNU GPL" \
		--description "a collection of objects for managing state saving"
	install -d $(helpdir)/$(MEMENTO_NAME)
	install -p $(abstractions_src)/rradical/memento/*-help.pd \
		$(helpdir)/$(MEMENTO_NAME)
	install -d $(manualsdir)/$(MEMENTO_NAME)
	install -p $(abstractions_src)/rradical/memento/tutorial/*.* \
		$(manualsdir)/$(MEMENTO_NAME)
	install -d $(examplesdir)/$(MEMENTO_NAME)
	install -p $(abstractions_src)/rradical/memento/examples/*.* \
		$(examplesdir)/$(MEMENTO_NAME)


#-------------------------------------------------------------------------------
# nqpoly
nqpoly_install: nqpoly_install~ nqpoly_install4
# make a common target for the manuals so they are in one place
	install -d $(manualsdir)/nqpoly
	install -p $(abstractions_src)/nqpoly/*.html	$(manualsdir)/nqpoly
	install -p $(abstractions_src)/nqpoly/nqpoly~/readme.txt	\
		$(manualsdir)/nqpoly/nqpoly~.txt

NQPOLY_NAME = nqpoly~
nqpoly_install~:
	install -d $(objectsdir)/$(NQPOLY_NAME)
	install -p $(shell ls -1 $(abstractions_src)/nqpoly/nqpoly~/*.pd | \
		grep -v '\-help.pd')  $(objectsdir)/$(NQPOLY_NAME)
	install -d $(helpdir)/$(NQPOLY_NAME) 
# all of the patches should be installed into help since [nqpoly~] needs to be
# in the same directory as the patches its manipulating
	install -p $(abstractions_src)/nqpoly/nqpoly~/*.pd \
		$(helpdir)/$(NQPOLY_NAME)
	install -d $(examplesdir)/$(NQPOLY_NAME)
	install -p $(shell ls -1 $(abstractions_src)/nqpoly/nqpoly~/*.pd | \
		grep -v '\-help.pd')  $(examplesdir)/$(NQPOLY_NAME)


NQPOLY4_NAME = nqpoly4
nqpoly_install4:
	install -d $(objectsdir)/$(NQPOLY4_NAME)
	install -p $(shell ls -1 $(abstractions_src)/nqpoly/nqpoly4/*.pd | \
		grep -v '\-help.pd')  $(objectsdir)/$(NQPOLY4_NAME)
	install -d $(helpdir)/$(NQPOLY4_NAME)
# all of the patches should be installed into help since [nqpoly4] needs to be
# in the same directory as the patches its manipulating
	install -p $(abstractions_src)/nqpoly/nqpoly4/*.pd $(helpdir)/$(NQPOLY4_NAME)
	install -d $(examplesdir)/$(NQPOLY4_NAME)
	install -p $(shell ls -1 $(abstractions_src)/nqpoly/nqpoly4/*.pd | \
		grep -v '\-help.pd')  $(examplesdir)/$(NQPOLY4_NAME)

#-------------------------------------------------------------------------------
# nusmuk
NUSMUK_NAME = nusmuk
nusmuk_install:
	install -d $(objectsdir)/$(NUSMUK_NAME)
	install -p $(shell ls -1 $(abstractions_src)/nusmuk/*.pd | \
		grep -v '\-help.pd')  $(objectsdir)/$(NUSMUK_NAME)
	$(scripts_src)/generate-libdir-metafile.sh $(objectsdir) $(NUSMUK_NAME) \
		--author "Cyrille Henry" \
		--description "a collection of objects for physical modelling"
	install -d $(helpdir)/$(NUSMUK_NAME)
	install -p $(abstractions_src)/nusmuk/*-help.pd \
		$(helpdir)/$(NUSMUK_NAME)
	install -p $(abstractions_src)/nusmuk/*.wav \
		$(helpdir)/$(NUSMUK_NAME)


#-------------------------------------------------------------------------------
# parazit
parazit_install:
	install -d $(objectsdir)
	install -p $(abstractions_src)/parazit/parazit.pd $(objectsdir)



#-------------------------------------------------------------------------------
# PDDP support lib
PDDP_NAME = pddp
pddp_install:
	install -d $(objectsdir)/$(PDDP_NAME)
	install -p $(shell ls -1 $(abstractions_src)/pddp/*.pd | \
		grep -v '\-help.pd')  $(objectsdir)/$(PDDP_NAME)
	$(scripts_src)/generate-libdir-metafile.sh $(objectsdir) $(PDDP_NAME) \
		--license "GNU GPL" \
		--description "support objects for the Pure Data Documentation Project"
	install -d $(helpdir)/$(PDDP_NAME)
	install -p $(abstractions_src)/pddp/*-help.pd \
		$(helpdir)/$(PDDP_NAME)
#	install -d $(manualsdir)/$(PDDP_NAME)
#	install -d $(examplesdir)/$(PDDP_NAME)


#-------------------------------------------------------------------------------
# pixeltango
PIXELTANGO_NAME = pixeltango
pixeltango_install:
	install -d $(objectsdir)/$(PIXELTANGO_NAME)
	install -p $(abstractions_src)/pixelTANGO/abstractions/*.pd \
		$(objectsdir)/$(PIXELTANGO_NAME)
	install -p $(abstractions_src)/pixelTANGO/abstractions/fx/*.pd \
		$(objectsdir)/$(PIXELTANGO_NAME)
	$(scripts_src)/generate-libdir-metafile.sh $(objectsdir) $(PIXELTANGO_NAME) \
		--author "Ben Bogart" \
		--license "GNU GPL" \
		--version "0.3.4" \
		--description "objects for creating visuals in a live performance setting"
	install -d $(helpdir)/$(PIXELTANGO_NAME)
	install -p $(abstractions_src)/pixelTANGO/help/*.* \
		$(helpdir)/$(PIXELTANGO_NAME)
	install -d $(examplesdir)/$(PIXELTANGO_NAME)
	install -p $(abstractions_src)/pixelTANGO/Example-Patches/*.* \
		$(examplesdir)/$(PIXELTANGO_NAME)
	install -d $(manualsdir)/$(PIXELTANGO_NAME)
	install -p $(abstractions_src)/pixelTANGO/*.txt \
		$(manualsdir)/$(PIXELTANGO_NAME)
	install -p $(abstractions_src)/pixelTANGO/dev-notes/*.txt \
		$(manualsdir)/$(PIXELTANGO_NAME)



#-------------------------------------------------------------------------------
# RRADical
RRADICAL_NAME = rradical
rradical_install:
	install -d $(objectsdir)/$(RRADICAL_NAME)
	$(scripts_src)/generate-libdir-metafile.sh $(objectsdir) $(RRADICAL_NAME) \
		--author "Frank Barknecht" \
		--license "GNU GPL"
	install -d $(objectsdir)/$(RRADICAL_NAME)
	install -p $(shell ls -1 $(abstractions_src)/rradical/control/*.* | \
		grep -v '\-help.pd')  $(objectsdir)/$(RRADICAL_NAME)
	install -p $(shell ls -1 $(abstractions_src)/rradical/effects/*.* | \
		grep -v '\-help.pd')  $(objectsdir)/$(RRADICAL_NAME)
	install -p $(shell ls -1 $(abstractions_src)/rradical/instruments/*.* | \
		grep -v '\-help.pd')  $(objectsdir)/$(RRADICAL_NAME)
	install -p $(shell ls -1 $(abstractions_src)/rradical/stuff/*.* | \
		grep -v '\-help.pd')  $(objectsdir)/$(RRADICAL_NAME)
	install -d $(examplesdir)/$(RRADICAL_NAME)
	install -p $(abstractions_src)/rradical/usecases/*.* \
		$(examplesdir)/$(RRADICAL_NAME)
	install -d $(examplesdir)/$(RRADICAL_NAME)/showcase
	install -p $(abstractions_src)/rradical/usecases/showcase/*.* \
		$(examplesdir)/$(RRADICAL_NAME)/showcase
	install -d $(examplesdir)/$(RRADICAL_NAME)/showcase/impl
	install -p $(abstractions_src)/rradical/usecases/showcase/impl/*.* \
		$(examplesdir)/$(RRADICAL_NAME)/showcase/impl
	install -d $(examplesdir)/$(RRADICAL_NAME)/showcase/songs
	install -p $(abstractions_src)/rradical/usecases/showcase/songs/*.* \
		$(examplesdir)/$(RRADICAL_NAME)/showcase/songs

#==============================================================================#
#
# DEVELOPER'S TARGETS
#
#==============================================================================#

# make the symlinks necessary to simulate the installed environment
devsymlinks: devsymlinks_keyboardkeys


devsymlinks_keyboardkeys:
	ln -s abs \
		$(abstractions_src)/keyboardkeys/keyboardkeys
	ln -s ../keyboardkeys \
		$(abstractions_src)/keyboardkeys/doc/keyboardkeys

#==============================================================================#
#
# CLEAN TARGETS
#
#==============================================================================#

# the destination-specific clean targets are in Makefile.buildlayout
clean: install_clean

distclean: clean cruft_clean