####################################
#
# glBSP Makefile for UNIX and GCC
#
# Targets:
#    libglbsp.a
#    glbsp
#    glBSPX
#    glbsp.txt
#
#    all     : makes the library, cmdline program and docs
#    install : installs cmdline program
#    clean   : removes targets and intermediate files
#

LIB_NAME=libglbsp.a
CMD_NAME=glbsp
GUI_NAME=glBSPX
DOC_NAME=glbsp.txt

CC=gcc
CXX=g++
AR=ar rc
RANLIB=ranlib
STRIP=strip --strip-unneeded

BASE_FLAGS=-Wall -O2 -I./src -DUNIX -DINLINE_G=inline

FLTK_DIR=./fltk-1.1.7

INSTALL_PREFIX=/usr/local
MAN_PREFIX=$(INSTALL_PREFIX)/share/man


# ----- GENERAL STUFF ----------------------------------------------

all:    $(LIB_NAME) $(CMD_NAME) $(DOC_NAME)

clean:
	rm -f $(LIB_NAME) $(CMD_NAME) $(GUI_NAME) $(DOC_NAME)
	rm -f src/*.o cmdline/*.o gui/*.o
	rm -f ./core ./ERRS ./gb_debug.txt 

.PHONY: all clean


# ----- LIBRARY ----------------------------------------------------

LIB_FLAGS=$(BASE_FLAGS)

LIB_OBJS=\
	src/analyze.o  \
	src/blockmap.o \
	src/glbsp.o    \
	src/level.o    \
	src/node.o     \
	src/reject.o   \
	src/seg.o      \
	src/system.o   \
	src/util.o     \
	src/wad.o

src/%.o: src/%.c
	$(CC) $(LIB_FLAGS) -c $^ -o $@

$(LIB_NAME): $(LIB_OBJS)
	$(AR) $@ $(LIB_OBJS)
	$(RANLIB) $@


# ----- CMDLINE PROGRAM ---------------------------------------------

CMD_FLAGS=$(BASE_FLAGS)
CMD_LIBS=-lm -lz

CMD_OBJS=cmdline/main.o cmdline/display.o  

cmdline/%.o: cmdline/%.c
	$(CC) $(CMD_FLAGS) -c $^ -o $@

$(CMD_NAME): $(LIB_NAME) $(CMD_OBJS)
	$(CC) $(CMD_FLAGS) $(CMD_OBJS) -o $@ $(LIB_NAME) $(CMD_LIBS)
	$(STRIP) $@

install: $(CMD_NAME)
	cp $(CMD_NAME) $(INSTALL_PREFIX)/bin/
	chown root $(INSTALL_PREFIX)/bin/$(CMD_NAME)
	chmod 755 $(INSTALL_PREFIX)/bin/$(CMD_NAME)
	cp glbsp.1 $(MAN_PREFIX)/man1/
	chmod 644 $(MAN_PREFIX)/man1/glbsp.1

.PHONY: install


# ----- GUI PROGRAM ---------------------------------------------

FLTK_FLAGS=-I$(FLTK_DIR) -I$(FLTK_DIR)/zlib
FLTK_LIBS=-L$(FLTK_DIR)/lib -lfltk_images -lpng -lz -ljpeg \
          -lfltk -lX11 -lXext

## may need: -L/usr/X11R6/lib

GUI_FLAGS=$(BASE_FLAGS) $(FLTK_FLAGS)
GUI_LIBS=$(FLTK_LIBS) -lm

GUI_OBJS=\
	gui/main.o     \
	gui/about.o    \
	gui/book.o     \
	gui/booktext.o \
	gui/cookie.o   \
	gui/dialog.o   \
	gui/files.o    \
	gui/helper.o   \
	gui/images.o   \
	gui/license.o  \
	gui/menu.o     \
	gui/options.o  \
	gui/prefs.o    \
	gui/progress.o \
	gui/textbox.o  \
	gui/window.o

gui/%.o: gui/%.cc
	$(CXX) $(GUI_FLAGS) -c $^ -o $@

$(GUI_NAME): $(LIB_NAME) $(GUI_OBJS)
	$(CXX) $(GUI_FLAGS) $(GUI_OBJS) -o $@ $(LIB_NAME) $(GUI_LIBS)
	$(STRIP) $@


# ----- DOCUMENTATION ---------------------------------------------

DOC_FILES=README.txt USAGE.txt TRICKS.txt CHANGES.txt

$(DOC_NAME): $(DOC_FILES)
	cat $(DOC_FILES) > $@


#--- editor settings ------------
# vi:ts=8:sw=8:noexpandtab
