# =============================================================================
#	Makefile for qcompiler
# =============================================================================

.SUFFIXES: .cpp

all: qcrun qcpp

# Binary file name
BINNAME=qcrun
BINNAME2=qcpp

# Normal compiler
CC=g++

# Where to install
INSTDIR = ~/bin

# Compile options
PATH_ROOT = ../calcunits
PATH_UNITS = ../calcunits
PATH_LIB = ../qclib
IFLAGS = -I. -I${PATH_ROOT} -I${PATH_UNITS}
CFLAGS = -mno-cygwin -Wall -O4
#CFLAGS =  -O2
LFLAGS = -lm 

# -----------------------------------------------------------------------------
#	Compiler
# -----------------------------------------------------------------------------
QCompiler.o: QCompiler.cpp QCompiler.h QParseInfo.h
	${CC} ${IFLAGS} ${CFLAGS} -c QCompiler.cpp -o QCompiler.o

QCompilerCntl.o: QCompilerCntl.cpp QCompilerCntl.h QCompiler.h QParseInfo.h ${PATH_UNITS}/QCalcUnit.h ${QC_UNITS_H}
	${CC} ${IFLAGS} ${CFLAGS} -c QCompilerCntl.cpp -o QCompilerCntl.o

QParseInfo.o: QParseInfo.h
	${CC} ${IFLAGS} ${CFLAGS} -c QParseInfo.cpp -o QParseInfo.o

QBits.o: ${PATH_ROOT}/QBits.cpp ${PATH_ROOT}/QBits.h
	${CC} ${IFLAGS} ${CFLAGS} -c ${PATH_ROOT}/QBits.cpp -o QBits.o

QCalcManager.o: ${PATH_ROOT}/QCalcManager.cpp ${PATH_ROOT}/QCalcManager.h QCompilerCntl.h ${PATH_ROOT}/QBits.h ${PATH_UNITS}/QCalcUnit.h
	${CC} ${IFLAGS} ${CFLAGS} -c ${PATH_ROOT}/QCalcManager.cpp -o QCalcManager.o

QCompilerCode.o: QCompilerCode.cpp QCompilerCode.h QCompiler.h QParseInfo.h
	$(CC) $(IFLAGS) $(CFLAGS) -c QCompilerCode.cpp -o QCompilerCode.o

qcrun.o: qcrun.cpp ${PATH_ROOT}/QBits.h ${PATH_ROOT}/QCalcManager.h
	${CC} ${IFLAGS} ${CFLAGS} -c qcrun.cpp -o qcrun.o

qcpp.o: qcpp.cpp QCompilerCode.h QCompiler.h
	$(CC) $(IFLAGS) $(CFLAGS) -c qcpp.cpp -o qcpp.o
# -----------------------------------------------------------------------------
$(BINNAME): qcrun.o QCalcManager.o QCompiler.o QCompilerCntl.o QParseInfo.o ${PATH_LIB}/qclib.a
	${CC} ${IFLAGS} -o ${BINNAME} qcrun.o QCalcManager.o QCompiler.o QCompilerCntl.o QParseInfo.o ${CFLAGS} ${LFLAGS} ${PATH_LIB}/qclib.a

$(BINNAME2): qcpp.o QCompilerCode.o QCompiler.o QParseInfo.o
	$(CC) $(IFLAGS) -o $(BINNAME2) qcpp.o QCompilerCode.o QCompiler.o QParseInfo.o $(CFLAGS) $(LFLAGS)

# -----------------------------------------------------------------------------
#	Other functions
# -----------------------------------------------------------------------------
clean:
	-rm -f *.o ${BINNAME} $(BINNAME2)
	-rm -f ${BINNAME}.exe $(BINNAME2).exe
	-rm -f *.~* *.obj

# -----------------------------------------------------------------------------
install: qcompiler
	@if [ -d ${INSTDIR} ]; \
	then \
		cp ${OPT_BINNAME} ${INSTDIR}; \
		chmod 711 ${INSTDIR}/${OPT_BINNAME}; \
		echo "Installed in ${INSTDIR}"; \
	else \
		echo "Sorry, ${INSTDIR} does not exist."; \
	fi

# -----------------------------------------------------------------------------
uninstall:
	@if [ -e ${INSTDIR}/${OPT_BINNAME} ]; \
	then \
		-rm ${INSTDIR}/${OPT_BINNAME}; \
		echo "unnstalled successfully."; \
	else \
		echo "Sorry, ${INSTDIR}/${OPT_BINNAME} does not exist."; \
	fi
