PREFIX = /usr


# Compiler flags
#
CFLAGS   = -Wall -O2 -g \
           `glib-config --cflags`
CPPFLAGS = -D__cplusplus -Dc_plusplus


# Include directories
#
INC_DIRS =


# Libraries
#
LIBS     = `glib-config --libs`
LIB_DIRS =


# Compilers
#
CC  = cc
CPP = c++


# Programs
LS      = ls
LSFLAGS = -a -l
RM      = rm
RMFLAGS = -f


# Source list
#
SRC_H   = config.h edvcfglist.h edvcontext.h edvget.h \
          edvnotify.h edvopen.h edvrecycle.h edvtypes.h edvutils.h \
          edvwindow.h endeavour2.h
SRC_C   = edvcontext.c edvget.c edvopen.c edvnotify.c \
          edvrecycle.c edvwindow.c \
          ../edvcfg.c ../edvcfgfio.c ../edvinterps.c ../edvrecbin.c \
          ../edvrecbinfio.c ../edvutils.c
SRC_CPP = ../string.cpp ../strexp.cpp ../disk.cpp ../fio.cpp \
          ../prochandle.cpp
OBJ_SO  =


# Source to object
#
LIB_CFG_BIN = endeavour2-config
LIB         = libendeavour2.so
OBJ_C   = $(SRC_C:.c=.o)
OBJ_CPP = $(SRC_CPP:.cpp=.o)
.c.o:
	@echo "Compiling module $*.o"
	@+$(CC) -c $*.c $(CFLAGS)
.cpp.o:
	@echo "Compiling module $*.o"
	@+$(CPP) -c $*.cpp $(CFLAGS) $(CPPFLAGS)


# Programs and their flags
#
MKDIR      = mkdir
MKDIRFLAGS = -p -m 0755

LINK      = ln
LINKFLAGS = -s -f

INSTALL      = install
INSTBINFLAGS = -m 0755 -s
INSTDATFLAGS = -m 0644
INSTINCFLAGS = -m 0644
INSTLIBFLAGS = -m 0755 -s

# Locations
#
BIN_DIR         = $(PREFIX)/bin
LIB_DIR         = $(PREFIX)/lib
EDV_ARCH_DIR    = $(PREFIX)/lib/endeavour2
EDV_INCLUDE_DIR = $(PREFIX)/lib/endeavour2/include
EDV_LIB_DIR     = $(PREFIX)/lib/endeavour2/lib


# Compile time information export:
#
EXPORT_COMPILETIMEINFO_H = echo -n -e "\
\#ifndef COMPILETIMEINFO_H\n\
\#define COMPILETIMEINFO_H\n\
\#define COMPILE_COMPILER\t\"`$(CPP) --version`\"\n\
\#define COMPILE_USER\t\t\"$(USER)\"\n\
\#define COMPILE_LOCATION\t\"`uname -n`\"\n\
\#define COMPILE_DATE\t\t`date +\"%s\"`\n\
\#endif\t/* COMPILETIMEINFO_H */\n"


# Build rules:
#
$(LIB): config prebuild modules $(LIB_CFG_BIN) postbuild

config:
	@$(EXPORT_COMPILETIMEINFO_H) > compiletimeinfo.h

modules: $(OBJ_C) $(OBJ_CPP)
	@echo "Linking modules..."
	@$(CPP) $(OBJ_C) $(OBJ_CPP) $(OBJ_SO) \
        -shared -o $(LIB)

prebuild:
	@echo "Building library \"$(LIB)\"..."

postbuild:
	@echo "Build done."
	@echo "To install, type \"su\" (to gain root privileges) and then type \"make install\"."

$(LIB_CFG_BIN):
	@echo "Building $(LIB_CFG_BIN)"
	@$(CC) -O2 -g -Wall endeavour2-config.c \
	-o $(LIB_CFG_BIN)

all: $(LIB)


HR = "-------------------------------------------------------------------------"

install: preinstall install_lib postinstall

install_lib:
	@echo "Installing $(LIB_CFG_BIN) -> $(BIN_DIR)"
	@$(MKDIR) $(MKDIRFLAGS) $(BIN_DIR)
	@$(INSTALL) $(INSTBINFLAGS) $(LIB_CFG_BIN) $(BIN_DIR)
	@echo "Installing $(LIB) -> $(EDV_LIB_DIR)"
	@$(MKDIR) $(MKDIRFLAGS) $(EDV_ARCH_DIR)
	@$(MKDIR) $(MKDIRFLAGS) $(EDV_INCLUDE_DIR)
	@$(MKDIR) $(MKDIRFLAGS) $(EDV_LIB_DIR)
	@$(INSTALL) $(INSTLIBFLAGS) $(LIB) $(EDV_LIB_DIR)
	@echo "Linking $(LIB_DIR)/$(LIB) -> endeavour2/lib/$(LIB)"
	@$(LINK) $(LINKFLAGS) endeavour2/lib/$(LIB) $(LIB_DIR)/$(LIB)
	@echo "Installing development files to $(EDV_INCLUDE_DIR)"
	@$(INSTALL) $(INSTINCFLAGS) endeavour2.h $(EDV_INCLUDE_DIR)
	@$(INSTALL) $(INSTINCFLAGS) edvcfglist.h $(EDV_INCLUDE_DIR)
	@$(INSTALL) $(INSTINCFLAGS) edvcontext.h $(EDV_INCLUDE_DIR)
	@$(INSTALL) $(INSTINCFLAGS) edvget.h $(EDV_INCLUDE_DIR)
	@$(INSTALL) $(INSTINCFLAGS) edvopen.h $(EDV_INCLUDE_DIR)
	@$(INSTALL) $(INSTINCFLAGS) edvnotify.h $(EDV_INCLUDE_DIR)
	@$(INSTALL) $(INSTINCFLAGS) edvrecycle.h $(EDV_INCLUDE_DIR)
	@$(INSTALL) $(INSTINCFLAGS) edvutils.h $(EDV_INCLUDE_DIR)
	@$(INSTALL) $(INSTINCFLAGS) edvtypes.h $(EDV_INCLUDE_DIR)
	@$(INSTALL) $(INSTINCFLAGS) edvwindow.h $(EDV_INCLUDE_DIR)
	@echo "Installing data files to $(EDV_ARCH_DIR)"
	@$(INSTALL) $(INSTDATFLAGS) README $(EDV_ARCH_DIR)
	@$(INSTALL) $(INSTDATFLAGS) LICENSE $(EDV_ARCH_DIR)

preinstall:
	@echo "Installing \"$(LIB)\"..."

postinstall:
	@echo "Install done."
	@echo $(HR)
	@echo "Program $(LIB_CFG_BIN) installed in:"
	@echo " "
	@echo "        $(BIN_DIR)/$(LIB_CFG_BIN)"
	@echo " "
	@echo "Library $(LIB) installed in:"
	@echo " "
	@echo "        $(EDV_LIB_DIR)/$(LIB)"
	@echo " "
	@echo "Header files installed in:"
	@echo " "
	@echo "        $(EDV_INCLUDE_DIR)"
	@echo " "
	@echo $(HR)
	@echo " "
	@echo "Installation complete!"
	@echo " "


# Maintainance and Misc Rules:
clean:
	@echo "Cleaning library \"$(LIB)\"..."
	@echo "Deleting all intermediate files..."
	@$(RM) $(RMFLAGS) a.out core *.o compiletimeinfo.h \
        $(LIB) $(LIB_CFG_BIN)
	@echo "Clean done."
