# Pick your favorite C and C++ compilers
CXX = g++
CC = gcc2

# Remove the USE_MPU401 define if you haven't installed the mpu401
# driver I've supplied.  You won't be able to play or record, but
# you'll still be able to maninpulate the songs.
# Here is a list of the possible defines
#   -DUSE_MPU401        Include support for the MPU401 MIDI card
#   -DUSE_MPU401COPY    Include support for the MPU401 MIDI card
#                       Copies play file before playing - slower
#                       startup and file can't be modified while
#                       playing, but better performance while playing
#   -DSVR4              You are running a SVR4 system 
#   -DLINUX             You are running a LINUX system
#   -DBSD		You are running a BSD system
#   -Dosf1              You are running a DEC Alpha
#
# One of the SVR4, LINUX or BSD flags must be defined if you are
# also defining USE_MPU401 or USE_MPU401COPY.
#
# Feel free to add any other flags you like.  Such as -O, -g
#
# Don McKillican dmckilli@qc.bell.ca says the CFLAGS for the Dec Alpha
# using cxx should be
#       CFLAGS = -I/usr/include/cxx -O -Dosf1 -D__STDC__

CFLAGS = -Wall -O -DBSD -DUSE_MPU401COPY

# where to put the executables
BINDIR = /usr/local/bin

# where to put the libraries
LIBDIR = /usr/local/lib

# where to put the header file
INCDIR = /usr/local/include

# where to put the man pages
MANPATH = /usr/local/man

# where the TCL library resides
TCLLIBDIR = /usr/lib

# where the TCL header file resides
TCLHDRDIR = /usr/include

# any extra libraries you might need
# BSD/386 1.1 wants gnulib to resolve ___eprintf
EXTRALIB = -lgnulib

# SVR4 doesn't need ranlib, set it to true
#RANLIB = true
RANLIB = ranlib

# if you want to build a version of tclmidi that works with tk,
# set the following and "make tkmidi"
XINCDIR = /usr/X11/include
XLIBDIR = /usr/X11/lib

#
# You shouldn't need to change anything else
#

LFLAGS = -L. -Lrb -L$(TCLLIBDIR) -ltcl -ltclmidi -lmidi++ -lrb -lm $(EXTRALIB)
TKLFLAGS = -L. -Lrb -L$(TCLLIBDIR) -ltk -ltcl -ltclmidi -lmidi++ -lrb -lm \
    -L$(XLIBDIR) -lX11 $(EXTRALIB)
INCDIRS = -Ievents -Isong -Ismf -Idevice -Irb -I$(TCLHDRDIR)

TCLMFILES = tclmCmd.o tclmUtil.o tclmEvent.o tclmPlay.o TclmInterp.o
APPINIT = tclmAppInit.o
TKAPPINIT = tkmAppInit.o

.SUFFIXES: .C $(SUFFIXES)

.C.o:
	$(CXX) $(CFLAGS) $(INCDIRS) -c -o $@ $<

all: tclmidi

events/objs: FORCE
	cd events; make objs CXX=$(CXX) CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)"

smf/objs: FORCE
	cd smf; make objs CXX=$(CXX) CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)"

song/objs: FORCE
	cd song; make objs CXX=$(CXX) CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)"

device/objs: FORCE
	cd device; make objs CXX=$(CXX) CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)"

rb/librb.a: FORCE
	cd rb; make librb.a CFLAGS="$(CFLAGS)" RANLIB="$(RANLIB)"

libmidi++.a: events/objs smf/objs song/objs device/objs
	-rm libmidi++.a
	ar ru libmidi++.a events/*.o smf/*.o song/*.o device/*.o
	$(RANLIB) libmidi++.a

libtclmidi.a: $(TCLMFILES)
	-rm libtclmidi.a
	ar ru libtclmidi.a $(TCLMFILES)
	$(RANLIB) libtclmidi.a

tclmidi: libmidi++.a rb/librb.a libtclmidi.a $(APPINIT)
	$(CXX) -o tclmidi $(APPINIT) $(LFLAGS)

tkmidi: libmidi++.a rb/librb.a libtclmidi.a $(TKAPPINIT)
	$(CXX) -o tkmidi $(TKAPPINIT) $(TKLFLAGS)

tkmAppInit.o: tkmAppInit.C
	$(CXX) $(CFLAGS) $(INCDIRS) -I$(XINCDIR) -c -o $@ $<

install: tclmidi
	cp tclmidi mplay mrec minfo midtotcl $(BINDIR)
	cp libtclmidi.a libmidi++.a $(LIBDIR)
	cp tclmidi.h $(INCDIR)
	$(RANLIB) $(LIBDIR)/libtclmidi.a
	$(RANLIB) $(LIBDIR)/libmidi++.a

install-tkmidi: tkmidi
	cp tkmidi $(BINDIR)

install-man-cooked:
	cd man; make install-cooked MANPATH="$(MANPATH)"

install-man-raw:
	cd man; make install-raw MANPATH="$(MANPATH)"

clean:
	-rm *.o *.a
	cd events; make clean
	cd smf; make clean
	cd song; make clean
	cd device; make clean
	cd rb; make clean
	cd man; make clean

FORCE:

tclmCmd.o: tclmidi.h TclmInterp.h song/Song.h song/EventTree.h events/Event.h \
    smf/SMFTrack.h device/MidiDevice.h tclmEvent.h events/AllEvents.h \
    events/NormalEvent.h events/Note.h events/NoteOff.h \
    events/NoteOn.h events/KeyPressure.h events/Parameter.h events/Program.h \
    events/ChanPressure.h events/PitchWheel.h events/SystemExcl.h \
    events/MetaEvent.h events/MetaSeqNum.h events/MetaText.h \
    events/MetaCopy.h events/MetaSeqName.h events/MetaInstName.h \
    events/MetaLyric.h events/MetaMarker.h events/MetaCue.h \
    events/MetaChanPrefix.h events/MetaPortNum.h events/MetaEOT.h \
    events/MetaTempo.h events/MetaSMPTE.h events/MetaTime.h events/MetaKey.h \
    events/MetaSeqSpec.h events/MetaUnknown.h \
    patchlevel.h
tclmEvent.o: tclmidi.h TclmInterp.h song/Song.h song/EventTree.h \
    events/Event.h smf/SMFTrack.h device/MidiDevice.h tclmEvent.h \
    events/AllEvents.h events/NormalEvent.h events/Note.h events/NoteOff.h \
    events/NoteOn.h events/KeyPressure.h events/Parameter.h events/Program.h \
    events/ChanPressure.h events/PitchWheel.h events/SystemExcl.h \
    events/MetaEvent.h events/MetaSeqNum.h events/MetaText.h \
    events/MetaCopy.h events/MetaSeqName.h events/MetaInstName.h \
    events/MetaLyric.h events/MetaMarker.h events/MetaCue.h \
    events/MetaChanPrefix.h events/MetaPortNum.h events/MetaEOT.h \
    events/MetaTempo.h events/MetaSMPTE.h events/MetaTime.h events/MetaKey.h \
    events/MetaSeqSpec.h events/MetaUnknown.h
tclmPlay.o: tclmidi.h TclmInterp.h song/Song.h song/EventTree.h events/Event.h \
    smf/SMFTrack.h device/MidiDevice.h tclmEvent.h events/AllEvents.h \
    events/NormalEvent.h events/Note.h events/NoteOff.h \
    events/NoteOn.h events/KeyPressure.h events/Parameter.h events/Program.h \
    events/ChanPressure.h events/PitchWheel.h events/SystemExcl.h \
    events/MetaEvent.h events/MetaSeqNum.h events/MetaText.h \
    events/MetaCopy.h events/MetaSeqName.h events/MetaInstName.h \
    events/MetaLyric.h events/MetaMarker.h events/MetaCue.h \
    events/MetaChanPrefix.h events/MetaPortNum.h events/MetaEOT.h \
    events/MetaTempo.h events/MetaSMPTE.h events/MetaTime.h events/MetaKey.h \
    events/MetaSeqSpec.h events/MetaUnknown.h \
    device/MPU401.h device/MPU401Copy.h device/MidiDevice.h
TclmInterp.o: TclmInterp.h song/Song.h song/EventTree.h events/Event.h \
    smf/SMFTrack.h device/MidiDevice.h
tclmAppInit.o: tclmidi.h TclmInterp.h song/Song.h song/EventTree.h \
    events/Event.h smf/SMFTrack.h device/MidiDevice.h
