
TARGETS = gs_md2bump gs_md2shadowvol gs_md2shadow

UNAME := $(shell uname)

GLEW  := ../../glew

GS_MD2BUMP_C = gs_md2bump.c gli_convert.c gli_merge.c gli_misc.c gli_scale.c gli_tga.c loadtex.c md2file.c md2normals.c normalmap.c matrix.c
GS_MD2BUMP_CPP = md2render.cpp
GS_MD2SHADOWVOL_C = gs_md2shadowvol.c md2edge.c md2file.c md2normals.c vecutil.c matrix.c
GS_MD2SHADOWVOL_CPP = md2render.cpp
GS_MD2SHADOW_C = gs_md2shadow.c gli_convert.c gli_merge.c gli_misc.c gli_scale.c gli_tga.c loadtex.c md2edge.c md2file.c md2normals.c normalmap.c vecutil.c matrix.c showfps.c
GS_MD2SHADOW_CPP = md2render.cpp

GS_MD2BUMP_OBJS = $(GS_MD2BUMP_C:.c=.o) $(GS_MD2BUMP_CPP:.cpp=.o) 
GS_MD2SHADOWVOL_OBJS = $(GS_MD2SHADOWVOL_C:.c=.o) $(GS_MD2SHADOWVOL_CPP:.cpp=.o) 
GS_MD2SHADOW_OBJS = $(GS_MD2SHADOW_C:.c=.o) $(GS_MD2SHADOW_CPP:.cpp=.o) 

CC         =  gcc
CXX        =  g++
CFLAGS     += -Wall
CXXFLAGS   += -Wall
CFLAGS     += -I"$(GLEW)/include"
CFLAGS     += -DGLEW_STATIC
CXXFLAGS   += -I"$(GLEW)/include"
CXXFLAGS   += -DGLEW_STATIC
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 += -L"$(GLEW)"
  CLINKFLAGS += -lGLEW
  CLINKFLAGS += -framework Cg
  CLINKFLAGS += -framework GLUT
  CLINKFLAGS += -framework OpenGL
else
  ifeq ($(findstring CYGWIN, $(UNAME)), CYGWIN)
    CFLAGS     += -D_WIN32
    CXXFLAGS   += -D_WIN32
    CFLAGS     += -DGLUT_DISABLE_ATEXIT_HACK
    CXXFLAGS   += -DGLUT_DISABLE_ATEXIT_HACK

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

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

all: $(BINARIES)

glew:
	$(MAKE) -C '$(GLEW)' -f Makefile

.PHONY: glew


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

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

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

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

clean:
	$(RM) $(BINARIES) $(GS_MD2BUMP_OBJS) $(GS_MD2SHADOWVOL_OBJS) $(GS_MD2SHADOW_OBJS) 
	$(MAKE) -C '$(GLEW)' -f Makefile clean

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

.PHONY: all run clean clobber
