BINDIR=./bin
LIBDIR=./lib
OBJDIR=./obj

DIRS=$(BINDIR) $(LIBDIR) $(OBJDIR)

PROGS=$(BINDIR)/bob $(BINDIR)/bobc $(BINDIR)/bobi $(BINDIR)/bobmerge
LIBS=$(LIBDIR)/libbobc.a $(LIBDIR)/libbobi.a

CFLAGS=-I./include -I./bobcom -I./bobint

all:	$(DIRS) $(PROGS) $(LIBS)

$(BINDIR):
	mkdir $(@F)

$(LIBDIR):
	mkdir $(@F)

$(OBJDIR):
	mkdir $(@F)

###############
# BOB
###############

BOB_OBJS=\
$(OBJDIR)/bob.o

$(BINDIR)/bob:	$(BOB_OBJS) lib/libbobc.a lib/libbobi.a
	$(CC) -o $(BINDIR)/bob $(BOB_OBJS) -L$(LIBDIR) -lbobc -lbobi -lm

$(BOB_OBJS):	$(OBJDIR)%.o:	bob%.c
	$(CC) -c $(CFLAGS) $< -o $@

###############
# BOBC
###############

BOBC_OBJS=\
$(OBJDIR)/bobc.o

$(BINDIR)/bobc:	$(BOBC_OBJS) lib/libbobc.a lib/libbobi.a
	$(CC) -o $(BINDIR)/bobc $(BOBC_OBJS) -L$(LIBDIR) -lbobc -lbobi -lm

$(BOBC_OBJS):	$(OBJDIR)%.o:	bobc%.c
	$(CC) -c $(CFLAGS) $< -o $@

###############
# BOBI
###############

BOBI_OBJS=\
$(OBJDIR)/bobi.o

$(BINDIR)/bobi:	$(BOBI_OBJS) lib/libbobi.a
	$(CC) -o $(BINDIR)/bobi $(BOBI_OBJS) -L$(LIBDIR) -lbobi -lm

$(BOBI_OBJS):	$(OBJDIR)%.o:	bobi%.c
	$(CC) -c $(CFLAGS) $< -o $@

###############
# BOBCOM
###############

BOBCOM_OBJS=\
$(OBJDIR)/bobcom.o \
$(OBJDIR)/bobeval.o \
$(OBJDIR)/bobscn.o \
$(OBJDIR)/bobwcode.o

$(BOBCOM_OBJS):	$(OBJDIR)%.o:	bobcom%.c
	$(CC) -c $(CFLAGS) $< -o $@

$(LIBDIR)/libbobc.a:	$(BOBCOM_OBJS)
	$(AR) crs $(LIBDIR)/libbobc.a $(BOBCOM_OBJS)

###############
# BOBINT
###############

BOBINT_OBJS=\
$(OBJDIR)/bobcobject.o \
$(OBJDIR)/bobdebug.o \
$(OBJDIR)/bobenter.o \
$(OBJDIR)/bobenv.o \
$(OBJDIR)/boberror.o \
$(OBJDIR)/bobfcn.o \
$(OBJDIR)/bobfile.o \
$(OBJDIR)/bobfloat.o \
$(OBJDIR)/bobhash.o \
$(OBJDIR)/bobheap.o \
$(OBJDIR)/bobint.o \
$(OBJDIR)/bobinteger.o \
$(OBJDIR)/bobmath.o \
$(OBJDIR)/bobmethod.o \
$(OBJDIR)/bobobject.o \
$(OBJDIR)/bobparse.o \
$(OBJDIR)/bobrcode.o \
$(OBJDIR)/bobstream.o \
$(OBJDIR)/bobstring.o \
$(OBJDIR)/bobsymbol.o \
$(OBJDIR)/bobtype.o \
$(OBJDIR)/bobvector.o

$(BOBINT_OBJS):	$(OBJDIR)%.o:	bobint%.c
	$(CC) -c $(CFLAGS) $< -o $@

$(LIBDIR)/libbobi.a:	$(BOBINT_OBJS)
	@$(AR) crs $(LIBDIR)/libbobi.a $(BOBINT_OBJS)

###############
# BOBMERGE
###############

BOBMERGE_OBJS=\
$(OBJDIR)/bobmerge.o

$(BINDIR)/bobmerge:	$(BOBMERGE_OBJS)
	$(CC) -o $(BINDIR)/bobmerge $(BOBMERGE_OBJS)

$(BOBMERGE_OBJS):	$(OBJDIR)%.o:	util%.c
	$(CC) -c $(CFLAGS) $< -o $@

clean:	$(DIRS)
	rm -f $(BINDIR)/*
	rm -f $(LIBDIR)/*
	rm -f $(OBJDIR)/*
