
TARGETS = gs_md2bump gs_md2shadowvol gs_md2shadow

UNAME := $(shell uname)

GLI_CSRCS = \
  gli_convert.c \
  gli_merge.c \
  gli_misc.c \
  gli_scale.c \
  gli_tga.c \
  loadtex.c \
  $(NULL)

GS_MD2BUMP_CSRCS = \
  gs_md2bump.c \
  $(GLI_CSRCS) \
  glprocs.c \
  md2file.c \
  md2normals.c \
  normalmap.c \
  matrix.c \
  $(NULL)

GS_MD2SHADOWVOL_CSRCS = \
  gs_md2shadowvol.c \
  glprocs.c \
  md2edge.c \
  md2file.c \
  md2normals.c \
  vecutil.c \
  matrix.c \
  $(NULL)

GS_MD2SHADOW_CSRCS = \
  gs_md2shadow.c \
  $(GLI_CSRCS) \
  glprocs.c \
  md2edge.c \
  md2file.c \
  md2normals.c \
  normalmap.c \
  vecutil.c \
  matrix.c \
  showfps.c \
  $(NULL)

CPPSRCS = md2render.cpp

GS_MD2BUMP_OBJS = $(GS_MD2BUMP_CSRCS:.c=.o) $(CPPSRCS:.cpp=.o)
GS_MD2SHADOWVOL_OBJS = $(GS_MD2SHADOWVOL_CSRCS:.c=.o) $(CPPSRCS:.cpp=.o)
GS_MD2SHADOW_OBJS = $(GS_MD2SHADOW_CSRCS:.c=.o) $(CPPSRCS:.cpp=.o)

OBJS = \
  $(GS_MD2BUMP_OBJS) \
  $(GS_MD2SHADOWVOL_OBJS) \
  $(GS_MD2SHADOW_OBJS) \
  $(NULL)

CC = gcc
CFLAGS += -Wall
ifdef CG_INC_PATH
  CFLAGS   += -I"$(CG_INC_PATH)"
  CXXFLAGS += -I"$(CG_INC_PATH)"
endif
ifdef CG_LIB_PATH
  CLINKFLAGS += -L"$(CG_LIB_PATH)"
endif

ifeq ($(UNAME), Darwin)
  CLINKFLAGS += -framework OpenGL -framework GLUT -framework Cg
else
  ifeq ($(findstring CYGWIN, $(UNAME)), CYGWIN)
    CFLAGS += -D_WIN32 -DGLUT_DISABLE_ATEXIT_HACK
    CFLAGS += -I"C:\Program Files\NVIDIA Corporation\Cg\include"
    CXXFLAGS += -D_WIN32 -DGLUT_DISABLE_ATEXIT_HACK
    CXXFLAGS += -I"C:\Program Files\NVIDIA Corporation\Cg\include"
    CLINKFLAGS += -L"C:\Program Files\NVIDIA Corporation\Cg\lib"
    CLINKFLAGS += -lcg -lcgGL -lglut32 -lglu32 -lopengl32
    EXE = .exe
  else
    CLINKFLAGS += -L/usr/X11R6/lib64 -L/usr/X11R6/lib
    CLINKFLAGS += -lCg -lCgGL -lglut -lGLU -lGL -lXi -lXmu -lX11 -lm -lpthread
  endif
endif

BINARIES := $(TARGETS:=$(EXE))

all: $(BINARIES)

gs_md2bump$(EXE) : $(GS_MD2BUMP_OBJS)
	$(CXX) $(CFLAGS) -o $@ $(GS_MD2BUMP_OBJS) $(CLINKFLAGS)

gs_md2shadowvol$(EXE) : $(GS_MD2SHADOWVOL_OBJS)
	$(CXX) $(CFLAGS) -o $@ $(GS_MD2SHADOWVOL_OBJS) $(CLINKFLAGS)

gs_md2shadow$(EXE) : $(GS_MD2SHADOW_OBJS)
	$(CXX) $(CFLAGS) -o $@ $(GS_MD2SHADOW_OBJS) $(CLINKFLAGS)

run: all
	./gs_md2bump$(EXE)
	./gs_md2shadowvol$(EXE)
	./gs_md2shadow$(EXE)

clean:
	$(RM) $(BINARIES) $(OBJS)

clobber: clean
	$(RM) *.bak *.o *~

.PHONY: all run clean clobber

