# Locations:
#
PREFIX		= /usr
EDV_BIN_DIR	= $(PREFIX)/lib/endeavour2/bin


# Compiler Flags:
#
CFLAGS		= -Wall -g -O2
CFLAGS_GTK	= `gtk-config --cflags`
CFLAGS_EDV2	= -I../libendeavour2-base `glib-config --cflags`


# C++ flags:
#
CPPFLAGS = -D__cplusplus -Dc_plusplus


# Include Directories:
#
INC_DIRS	=


# Libraries & Library Directories:
#
LIBS_GTK	= `gtk-config --libs`
LIBS_EDV2	= -L../libendeavour2-base -lendeavour2-base `glib-config --libs`


# Compilers:
#
CC	= cc
CPP	= c++


# Programs:
#
LS		= ls
LSFLAGS		= -a -l
COPY		= cp
COPYFLAGS	= -R -f
MOVE		= mv
MOVEFLAGS	= -R -f
LINK		= ln
LINKFLAGS	= -s -f
MKDIR		= mkdir
MKDIRFLAGS	= -p -m 0755
RM		= rm
RMFLAGS		= -R -f
INSTALL		= install
INSTBINFLAGS	= -m 0755 -s


# Source Files List:
#


# Build List
#
BUILD_LIST	= \
directory-statistics						\
dnd-drag-maker							\
dnd-drop-reader							\
file-selector							\
memory-usage-estimator						\
message-dialog							\
mls								\
notify								\
open								\
properties							\
purge								\
recover								\
recycle								\
rls								\
splash								\
style-editor


# Compile Time Information Output:
#
EXPORT_COMPILETIMEINFO_H = /bin/echo -n -e "\
\#ifndef COMPILETIMEINFO_H\n\
\#define COMPILETIMEINFO_H\n\
\#define COMPILE_COMPILER\t\"`$(CPP) --version | tr '\n' ' '`\"\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:
#
OBJ_C   = $(SRC_C:.c=.o)
OBJ_CPP = $(SRC_CPP:.cpp=.o)


all: pre_build config $(BUILD_LIST) post_build

pre_build:
	@echo "Building utilities..."

post_build:
	@echo "Build done."

config:
	@echo "Compiling resources"
	@$(EXPORT_COMPILETIMEINFO_H) > compiletimeinfo.h

directory-statistics:
	@echo "Compiling $(@)"
	@$(CC) $(CFLAGS) $(CFLAGS_EDV2) $(LIBS_EDV2)		\
        $(@).c							\
        -o $(@)

dnd-drag-maker:
	@echo "Compiling $(@)"
	@$(CC) -c $(CFLAGS) $(CFLAGS_GTK) $(@).c
	@$(CPP) $(LIBS_GTK) $(@).o				\
        ../guiutils.o						\
        ../hview.o ../hviewcb.o					\
        -o $(@)

dnd-drop-reader:
	@echo "Compiling $(@)"
	@$(CC) -c $(CFLAGS) $(CFLAGS_GTK) $(@).c
	@$(CPP) $(LIBS_GTK) $(@).o				\
        ../guiutils.o						\
        ../hview.o ../hviewcb.o					\
        -o $(@)

file-selector:
	@echo "Compiling $(@)"
	@$(CC) -c $(CFLAGS) $(CFLAGS_GTK) $(@).c
	@$(CPP) $(LIBS_GTK) $(@).o				\
        ../fb.o							\
	../cdialog.o ../guiutils.o ../fprompt.o ../pulist.o	\
        ../string.o ../disk.o ../fio.o				\
        -o $(@)

memory-usage-estimator:
	@echo "Compiling $(@)"
	@$(CC) -c $(CFLAGS) $(CFLAGS_GTK) $(@).c
	@$(CPP) $(LIBS_GTK) $(@).o				\
        ../guiutils.o						\
        -o $(@)

message-dialog:
	@echo "Compiling $(@)"
	@$(CC) -c $(CFLAGS) $(CFLAGS_GTK) $(@).c
	@$(CPP) $(LIBS_GTK) $(@).o				\
	../guiutils.o ../cdialog.o ../string.o			\
        -o $(@)

mls:
	@echo "Compiling $(@)"
	@$(CC) $(CFLAGS) $(CFLAGS_EDV2) $(LIBS_EDV2)		\
        $(@).c							\
        -o $(@)

notify:
	@echo "Compiling $(@)"
	@$(CC) $(CFLAGS) $(CFLAGS_EDV2) $(LIBS_EDV2)		\
        $(@).c							\
        -o $(@)

open:
	@echo "Compiling $(@)"
	@$(CC) $(CFLAGS) $(CFLAGS_EDV2) $(LIBS_EDV2)		\
        $(@).c							\
        -o $(@)

properties:
	@echo "Compiling $(@)"
	@$(CC) $(CFLAGS) $(CFLAGS_EDV2) $(LIBS_EDV2)		\
        $(@).c							\
        -o $(@)

purge:
	@echo "Compiling $(@)"
	@$(CC) $(CFLAGS) $(CFLAGS_EDV2) $(LIBS_EDV2)		\
        $(@).c							\
        -o $(@)

recover:
	@echo "Compiling $(@)"
	@$(CC) $(CFLAGS) $(CFLAGS_EDV2) $(LIBS_EDV2)		\
        $(@).c							\
        -o $(@)

recycle:
	@echo "Compiling $(@)"
	@$(CC) $(CFLAGS) $(CFLAGS_EDV2) $(LIBS_EDV2)		\
        $(@).c							\
        -o $(@)

rls:
	@echo "Compiling $(@)"
	@$(CC) $(CFLAGS) $(CFLAGS_EDV2) $(LIBS_EDV2)		\
        $(@).c							\
        -o $(@)

splash:
	@echo "Compiling $(@)"
	@$(CC) -c $(CFLAGS) $(CFLAGS_GTK) $(@).c
	@$(CPP) $(LIBS_GTK) $(@).o				\
        ../guiutils.o ../guirgbimg.o				\
        ../splash.o						\
        -o $(@)

style-editor:
	@echo "Compiling $(@)"
	@$(CC) -c $(CFLAGS) $(CFLAGS_GTK) $(@).c
	@$(CPP) $(LIBS_GTK) $(@).o				\
        ../guiutils.o ../cdialog.o ../fprompt.o ../pulist.o	\
        ../fb.o ../csd.o ../fsd.o ../style_edit.o		\
        ../string.o ../fio.o ../disk.o				\
        -o $(@)


# Install Rules:
#
INSTALL      = install
INSTBINFLAGS = -m 0755 -s
INSTUIDFLAGS = -m 4755
INSTLIBFLAGS = -m 0755 -s
INSTINCFLAGS = -m 0644
INSTMANFLAGS = -m 0644
INSTCFGFLAGS = -m 0644
INSTDATFLAGS = -m 0644

install: pre_install install_bin install_data post_install

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

pre_install:

install_bin:
	@for prog in $(BUILD_LIST); do				\
            echo "Installing $$prog -> $(EDV_BIN_DIR)";		\
            $(INSTALL) $(INSTBINFLAGS) $$prog $(EDV_BIN_DIR);	\
        done

install_data:

post_install:
	@$(LINK) $(LINKFLAGS) notify $(EDV_BIN_DIR)/notify-added
	@$(LINK) $(LINKFLAGS) notify $(EDV_BIN_DIR)/notify-modified
	@$(LINK) $(LINKFLAGS) notify $(EDV_BIN_DIR)/notify-renamed
	@$(LINK) $(LINKFLAGS) notify $(EDV_BIN_DIR)/notify-removed
	@echo "Install done."
	@echo $(HR)
	@echo "Utilities installed in:"
	@echo " "
	@echo "        $(EDV_BIN_DIR)"
	@echo " "
	@echo "This directory is not usually included in the global search path,"
	@echo "so in order to make these programs globally available you need to"
	@echo "either add this directory to the global search path or create links"
	@echo "to each one of these programs in one of the directories already in"
	@echo "the global search path."
	@echo " "
	@echo $(HR)
	@echo " "


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