CC = g++
CFLAGS = -Wall
EXENAME = monad
OBJS = $(EXENAME).o util.o monad_shared.o
IDFILE = .monadid
OPTIMIZE = off

ifeq ($(strip $(OPTIMIZE)),on)
CFLAGS += -O2 -DOPTIMIZE
else ifeq ($(strip $(OPTIMIZE)),off)
CFLAGS += -g -O0
else
$(warning Invalid value specified for OPTIMIZE. Should be on or off)
CFLAGS += -g -O0
endif

all: $(EXENAME) $(IDFILE)

$(IDFILE):
	echo  -e 'This file is used for $(EXENAME) directory identification\n$(EXENAME) Build Date:' `date`> $(IDFILE)

$(EXENAME): $(OBJS) $(IDFILE)
	$(CC) $(CFLAGS) $(OBJS) -o $@

.cpp.o: $(wildcard *.h)
	$(CC) $(CFLAGS) -c $(@:.o=.cpp) -o $@

.PHONY: clean
clean:
	rm -f *.o $(EXENAME) $(wildcard $(EXENAME)$(EXENAME)*) $(IDFILE)

.PHONY: clean.sh
clean.sh: $(EXENAME)
	./clean.sh