### User-configurable section begins

# Installation directory prefix for Debian GNU/Linux
DESTDIR =
# Installation directory prefix for other systems
PREFIX = $(DESTDIR)/usr
#PREFIX = $(DESTDIR)/usr/local

# Where to put binaries on 'make install'?
BINDIR = $(PREFIX)/bin
# Where to put manual pages on 'make installman'?
MANDIR = $(PREFIX)/share/man/man1

## Installation commands
RM = rm -f
INSTALLDIR = install -d
INSTALLDATA = install -m 444
INSTALLBIN = install

## C compiler and its options
CC = gcc
CFLAGS = -Wall -ansi -pedantic -O3
CPPFLAGS = -Iext -Iop -Icomm #-DCOMM_DEBUG

### User-configurable section ends

TARGET = cbmlink
MANPAGES = cbmlink.1

EXTSRCS = ext/ext.c ext/rdfile.c ext/wrfile.c ext/disk.c
EXTHDRS = $(EXTSRCS:.c=.h)
OPSRCS = op/mem.c op/run.c
OPHDRS = $(OPSRCS:.c=.h)
COMMCOMM = comm/info.c comm/commsel.c comm/c2n232.c comm/serial.c
COMMPC = comm/pcpar.c comm/kontros.c comm/pc64.c comm/prlink.c \
	comm/x1541.c comm/c64net.c
COMMAMIGA = comm/amigapar.c comm/prlink88.c comm/prlink48.c \
	comm/transnib.c comm/emul1541.c comm/em1541.c
COMMSRCS = $(COMMCOMM) $(COMMPC) $(COMMAMIGA)
COMMHDRS = $(COMMSRCS:.c=.h) comm/comm.h

SRCS = cbmlink.c $(EXTSRCS) $(OPSRCS) $(COMMSRCS)
HDRS = $(EXTHDRS) $(OPHDRS) $(COMMHDRS)
OBJS = $(SRCS:.c=.o)

all: $(TARGET)

clean:
	$(RM) $(OBJS)

reallyclean: clean
	$(RM) $(TARGET)

install: $(TARGET)
	$(INSTALLDIR) $(BINDIR)
	$(INSTALLBIN) $(TARGET) $(BINDIR)

installman: $(MANPAGES)
	$(INSTALLDIR) $(MANDIR)
	$(INSTALLDATA) $(MANPAGES) $(MANDIR)

$(TARGET): $(OBJS)
	$(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)

.phony: all clean reallyclean install installman

.SUFFIXES:
.SUFFIXES: .c .h .o .1 .dvi .pdf

.c.o:
	$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
.1.dvi:
	groff -man -Tdvi $< > $@
.dvi.pdf:
	dvipdfm $<

# Dependencies
cbmlink.o: comm/commsel.h $(EXTHDRS) $(OPHDRS)
cbmlink.o $(OPSRCS:.c=.o): comm/info.h comm/comm.h
ext/ext.o: $(OPHDRS)
$(EXTSRCS:.c=.o): comm/info.h comm/comm.h
comm/commsel.o: $(COMMHDRS)
$(COMMSRCS:.c=.o): comm/info.h
$(COMMPC:.c=.o): comm/pcpar.h
$(COMMAMIGA:.c=.o): comm/amigapar.h

ext/ext.o: ext/ext.h
ext/rdfile.o: ext/rdfile-o.h
ext/wrfile.o: ext/wrfile-o.h
ext/disk.o: ext/disk-o.h
op/mem.o: op/mem.h
op/run.o: op/run.h

comm/pcpar.o: comm/pcpar.h
comm/kontros.o: comm/kontros.h
comm/pc64.o: comm/pc64.h
comm/prlink.o: comm/prlink.h
comm/x1541.o: comm/x1541.h
comm/c64net.o: comm/c64net.h

comm/amigapar.o: comm/amigapar.h
comm/prlink88.o: comm/prlink88.h
comm/prlink48.o: comm/prlink48.h
comm/transnib.o: comm/transnib.h
comm/emul1541.o: comm/emul1541.h
comm/em1541.o: comm/em1541.h
