PACKAGENAME = MEAPsoft
VERSION = 2.0

SHELL = /bin/sh

JARFILE = $(PACKAGENAME).jar

# directories
SRCDIR = src
BASEPKGDIR = com/meapsoft
METADIR = meta
JARDIR = bin
BINDIR = bin
TMPDIR = tmp
DATADIR = data

# data files to include in the distribution tarball:
DATAFILES = $(DATADIR)/chris_mann.wav

classpath = $(JARDIR)/getopt-1.0.12.jar:$(JARDIR)/tritonus_misc.jar:$(JARDIR)/tritonus_share.jar:$(JARDIR)/swing-layout-1.0.jar:$(JARDIR)/winlaf-0.5.1.jar:$(SRCDIR)

JFLAGS = -classpath $(classpath) -sourcepath $(SRCDIR)

classes = Segmenter.java FeatExtractor.java Synthesizer.java


# fake targets that don't have any dependencies:
.PHONY : all doc dist clean distclean packageclean version

all: jar

%.java: $(SRCDIR)/$(BASEPKGDIR)/%.java
	javac $(JFLAGS) $<

composers: 
	javac $(JFLAGS) $(SRCDIR)/$(BASEPKGDIR)/composers/*.java  

visualizer:
	javac $(JFLAGS) $(SRCDIR)/$(BASEPKGDIR)/visualizer/*.java  

# make sure that the featextractors/distance metrics get compiled
# since no java files depend on all of them directly anymore
classes: $(classes)
	javac $(JFLAGS) $(SRCDIR)/$(BASEPKGDIR)/*.java
	javac $(JFLAGS) $(SRCDIR)/$(BASEPKGDIR)/*/*.java

jar: classes
	-mkdir $(BINDIR)
	jar cfm $(BINDIR)/$(JARFILE) $(METADIR)/manifest.txt -C $(SRCDIR) .

distclean: clean packageclean

clean:
	rm -f $(SRCDIR)/$(BASEPKGDIR)/*class $(SRCDIR)/$(BASEPKGDIR)/*/*class $(SRCDIR)/*/*class

packageclean: 
	rm -fr $(BINDIR)/$(JARFILE)


# This target is not very portable and probably won't work on your
# machine.  It depends on svn.
dist: jar
	cp $(BINDIR)/$(JARFILE) $(BINDIR)/$(PACKAGENAME)-$(VERSION).jar
	mkdir $(TMPDIR)
	svn export . $(TMPDIR)/$(PACKAGENAME)-$(VERSION)
	cd $(TMPDIR); \
	cp -r ../$(BINDIR)/$(JARFILE) $(PACKAGENAME)-$(VERSION)/$(BINDIR); \
	tar czf ../$(PACKAGENAME)-$(VERSION).tar.gz $(PACKAGENAME)-$(VERSION)/*; \
	cd ..;                                                      \
	rm -rf $(TMPDIR)

# Same as above target, just names the tarball MEAPsoft-$version_dev
# instead.  Used for development releases to the MEAP team in between
# major public releases.
dev_dist: jar
	cp $(BINDIR)/$(JARFILE) $(BINDIR)/$(PACKAGENAME)-$(VERSION)_dev.jar
	mkdir $(TMPDIR)
	svn export . $(TMPDIR)/$(PACKAGENAME)-$(VERSION)
	cd $(TMPDIR); \
	cp -r ../$(BINDIR)/$(JARFILE) $(PACKAGENAME)-$(VERSION)/$(BINDIR); \
	tar czf ../$(PACKAGENAME)-$(VERSION)_dev.tar.gz $(PACKAGENAME)-$(VERSION)/*; \
	cd ..;                                                      \
	rm -rf $(TMPDIR)

# This target is not very portable and probably won't work on your
# machine.  Make sure Doxygen is in your path if you want it to work.
doc: version
	cd doc; doxygen ; cd ..
	-mkdir doc/javadoc; 
	javadoc -sourcepath $(SRCDIR) -d doc/javadoc com.meapsoft com.meapsoft.featextractors com.meapsoft.composers com.meapsoft.gui com.meapsoft.visualizer;

version:
	sed -i 's/^MEAPsoft-.*/MEAPsoft-$(VERSION)/' README  
	sed -i 's/^PROJECT_NUMBER.*=.*/PROJECT_NUMBER = $(VERSION)/' doc/Doxyfile  
