#############################################################################
# Makefile:	Makefile for OberSuite.
#		A part of OberSuite for the Commodore Amiga.
#
# Author:	Daniel Barrett, barrett@cs.umass.edu.
# Version:	1.0.
# Copyright:	None!  This program is in the Public Domain.
#		Please share it with others.
#############################################################################


LIBS		= -lc
COMP_INC	= headers.comp
LIBS		= -lc
OPTIMIZE	= -so
DEBUGGING	= # -bs
CFLAGS          = $(OPTIMIZE) -hi $(COMP_INC) $(DEBUGGING)
LDEBUGGING	= # -g
LFLAGS		= $(LDEBUGGING) +Q

DESTDIR		= usr:mybin

##############################################################################
# Files used for all programs.
##############################################################################

HEADERS		= oberheim.h midi.h bits.h patchinfo.h
MAINHEADER	= decl.h
OBJ		= parse.o usage.o patchinfo.o getopt.o amigados.o

##############################################################################
# Files used for individual programs.
##############################################################################

GETPROG	= ObGet
GETOBJ	= $(OBJ) obget.o tofile.o frommidi.o serial.o

PUTPROG	= ObPut
PUTOBJ	= $(OBJ) obput.o fromfile.o tomidi.o serial.o

PTPROG	= ObType
PTOBJ	= $(OBJ) obtype.o fromfile.o

EXPROG	= ObExtract
EXOBJ	= $(OBJ) obextract.o fromfile.o tofile.o tomidi.o serial.o \
		 bits.o ranges.o

IPROG	= ObInfo
IOBJ	= obinfo.o

ALLPROGS	= $(GETPROG) $(PUTPROG) $(PTPROG) $(EXPROG)

##############################################################################
# All program targets.
##############################################################################

all:	$(ALLPROGS)

##############################################################################
# Equivalent names for convenience.
##############################################################################

obget:		$(GETPROG)
obput:		$(PUTPROG)
obtype:		$(PTPROG)
obextract:	$(EXPROG)
obinfo:		$(IPROG)		# Not included.

##############################################################################
# Compiled headers.
##############################################################################

$(COMP_INC):	$(MAINHEADER)
		cc $(OPTIMIZE) $(DEBUGGING) -ho $(COMP_INC) $(MAINHEADER)

$(MAINHEADER):	$(HEADERS)

##############################################################################
# Non-main-program object dependencies.
##############################################################################

amigados.o:	$(MAINHEADER) amigados.c
bits.o:		bits.c bits.h
files.o:	$(MAINHEADER) files.c
fromfile.o:	$(MAINHEADER) fromfile.c
frommidi.o:	$(MAINHEADER) frommidi.c
getopt.o:	getopt.c
parse.o:	$(MAINHEADER) parse.c
patchinfo.o:	$(MAINHEADER) patchinfo.c
ranges.o:	ranges.c bits.h
serial.o:	$(MAINHEADER) serial.c
tofile.o:	$(MAINHEADER) tofile.c
tomidi.o:	$(MAINHEADER) tomidi.c
usage.o:	$(MAINHEADER) usage.c

##############################################################################
# The "get" program.
##############################################################################

$(GETPROG):	$(COMP_INC) $(GETOBJ)
		ln $(LFLAGS) $(GETOBJ) -o $(GETPROG) $(LIBS)

obget.o:	obget.c obget.h $(MAINHEADER)

##############################################################################
# The "put" program
##############################################################################

$(PUTPROG):	$(COMP_INC) $(PUTOBJ)
		ln $(LFLAGS) $(PUTOBJ) -o $(PUTPROG) $(LIBS)

obput.o:	obput.c obput.h $(MAINHEADER)

##############################################################################
# The "type" program
##############################################################################

$(PTPROG):	$(COMP_INC) $(PTOBJ)
		ln $(LFLAGS) $(PTOBJ) -o $(PTPROG) $(LIBS)

obtype.o:	obtype.c obtype.h $(MAINHEADER)

##############################################################################
# The "extract" program
##############################################################################

$(EXPROG):	$(COMP_INC) $(EXOBJ)
		ln $(LFLAGS) $(EXOBJ) -o $(EXPROG) $(LIBS)

obextract.o:	obextract.c obextract.h $(MAINHEADER)

##############################################################################
# The "info" program
##############################################################################

$(IPROG):	$(COMP_INC) $(IOBJ)
		ln $(LFLAGS) $(IOBJ) -o $(IPROG) $(LIBS)

obinfo.o:	obinfo.c obinfo.h $(MAINHEADER)

##############################################################################
# Installation
##############################################################################

install:	$(ALLPROGS)
		copy $(GETPROG) $(DESTDIR)/$(GETPROG)
		copy $(PUTPROG) $(DESTDIR)/$(PUTPROG)
		copy $(PTPROG) $(DESTDIR)/$(PTPROG)
		copy $(EXPROG) $(DESTDIR)/$(EXPROG)

##############################################################################
# Clean up
##############################################################################

clean:
		delete \#?.o

veryclean:	clean
		delete $(COMP_INC) $(ALLPROGS) \#?.dbg

backup:
		copy \#?.c df1:
		copy \#?.h df1:
		copy Makefile df1:
		copy TODO df1:
		copy README df1:
		copy EXAMPLES df1:
		copy \#?.DOC df1:

##############################################################################
# ranges test program
##############################################################################

ranges:		$(COMP_INC) bits.o parse.o
		cc $(CFLAGS) -DTEST_RANGE_PROGRAM ranges.c
		ln +Q ranges.o bits.o parse.o -o ranges -lc

ranges.o:	ranges.c bits.h oberheim.h $(MAINHEADER)
bits.o:		bits.c bits.h
