
#   Makefile for Teddy
#
#   TEDDY - General graphics application library
#   Copyright (C) 1999, 2000, 2001  Timo Suoranta
#   tksuoran@cc.helsinki.fi
#
#	This library is free software; you can redistribute it and/or
#	modify it under the terms of the GNU Lesser General Public
#	License as published by the Free Software Foundation; either
#	version 2.1 of the License, or (at your option) any later version.
#
#	This library is distributed in the hope that it will be useful,
#	but WITHOUT ANY WARRANTY; without even the implied warranty of
#	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
#	Lesser General Public License for more details.
#
#	You should have received a copy of the GNU Lesser General Public
#	License along with this library; if not, write to the Free Software
#	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA


SHELL      = @SHELL@
AR         = ar
CC         = @CC@
CXX        = @CXX@
RANLIB     = @RANLIB@
LIBS       = @LIBS@
SDL_CFLAGS = @SDL_CFLAGS@
SDL_LIBS   = @SDL_LIBS@
WARNINGS   = -Wall -Wno-unused -Wno-long-long -ansi -pedantic 
INCLUDES   = -I. -I..
DEFINES    = -D__USE_ISOC99=1
CXXFLAGS_A = @CXXFLAGS@ $(SDL_CFLAGS) $(WARNINGS) $(INCLUDES) $(DEFINES)
CCFLAGS    = $(CXXFLAGS_A)
CXXFLAGS   = $(CXXFLAGS_A)
MKDEPEND   = $(CXX) $(CXXFLAGS) -MM
Programs   = libTeddy.a glElite.exe TestBasic.exe TestObjects.exe TestEvents.exe TestManipulate.exe

Graphics_cpp_Srcs           = $(shell echo Graphics/*.cpp)
Imports_cpp_Srcs            = $(shell echo Imports/*.cpp)
Materials_cpp_Srcs          = $(shell echo Materials/*.cpp)
Maths_cpp_Srcs              = $(shell echo Maths/*.cpp)
MixIn_cpp_Srcs              = $(shell echo MixIn/*.cpp)
Models_cpp_Srcs             = $(shell echo Models/*.cpp)
PhysicalComponents_cpp_Srcs = $(shell echo PhysicalComponents/*.cpp)
Scenes_cpp_Srcs             = $(shell echo Scenes/*.cpp)
SysSupport_cpp_Srcs         = $(shell echo SysSupport/*.cpp)
ifeq (@have_open_gl@,no)
 TinyGL_c_Srcs = $(shell echo TinyGL/*.c)
else
 TinyGL_c_Srcs =
endif

Graphics_Objs           = $(Graphics_cpp_Srcs:.cpp=.o)
Imports_Objs            = $(Imports_cpp_Srcs:.cpp=.o)
Materials_Objs          = $(Materials_cpp_Srcs:.cpp=.o)
Maths_Objs              = $(Maths_cpp_Srcs:.cpp=.o)
MixIn_Objs              = $(MixIn_cpp_Srcs:.cpp=.o)
Models_Objs             = $(Models_cpp_Srcs:.cpp=.o)
PhysicalComponents_Objs = $(PhysicalComponents_cpp_Srcs:.cpp=.o)
Scenes_Objs             = $(Scenes_cpp_Srcs:.cpp=.o)
SysSupport_Objs         = $(SysSupport_cpp_Srcs:.cpp=.o)
TinyGL_Objs             = $(TinyGL_c_Srcs:.c=.o)

teddy_subdir_objs =         \
 $(Graphics_Objs)           \
 $(Imports_Objs)            \
 $(Materials_Objs)          \
 $(Maths_Objs)              \
 $(MixIn_Objs)              \
 $(Models_Objs)             \
 $(PhysicalComponents_Objs) \
 $(Scenes_Objs)             \
 $(SysSupport_Objs)         \
 $(TinyGL_Objs)                   

teddy_subdirs =     \
 Graphics           \
 Imports            \
 Materials          \
 Maths              \
 MixIn              \
 Models             \
 PhysicalComponents \
 Scenes             \
 SysSupport         \
 TinyGL             \
 Graphics           \

glElite_cpp_Srcs        = $(shell echo glElite/*.cpp)
TestBasic_cpp_Srcs      = $(shell echo TestBasic/*.cpp)
TestObjects_cpp_Srcs    = $(shell echo TestObjects/*.cpp)
TestEvents_cpp_Srcs     = $(shell echo TestEvents/*.cpp)
TestManipulate_cpp_Srcs = $(shell echo TestManipulate/*.cpp)

glElite_Objs               = $(glElite_cpp_Srcs:.cpp=.o)
TestBasic_Objs             = $(TestBasic_cpp_Srcs:.cpp=.o)
TestObjects_Objs           = $(TestObjects_cpp_Srcs:.cpp=.o)
TestEvents_Objs            = $(TestEvents_cpp_Srcs:.cpp=.o)
TestManipulate_Objs        = $(TestManipulate_cpp_Srcs:.cpp=.o)

glElite_subdirs            = $(teddy_subdirs) glElite
TestBasic_subdirs          = $(teddy_subdirs) TestBasic
TestObjects_subdirs        = $(teddy_subdirs) TestObjects
TestEvents_subdirs         = $(teddy_subdirs) TestEvents
TestManipulate_subdirs     = $(teddy_subdirs) TestManipulate
all_subdirs                = $(teddy_subdirs) glElite TestBasic TestObjects TestEvents TestManipulate
 
glElite_subdir_objs        = $(glElite_Objs)
TestBasic_subdir_objs      = $(TestBasic_Objs)
TestObjects_subdir_objs    = $(TestObjects_Objs)
TestEvents_subdir_objs     = $(TestEvents_Objs)
TestManipulate_subdir_objs = $(TestManipulate_Objs)

.SUFFIXES: $(SUFFIXES) .cpp .o

.cpp.o:
	$(CXX) $(CXXFLAGS) -o $@ -c $<

.c.o:
	$(CC) $(CCFLAGS) -o $@ -c $<

all: $(Programs)

clean:
	rm -f core $(Programs) *.a *.o */*.o .depend *~ */*~ *.ncb *.plg
	rm -f .#* */.#* ../.#*	

depend .depend: config.h
	@echo ----------------------------------------------------------------------
	@echo Thank You for trying Teddy / glElite!
	@echo
	@echo My Makefile.in skills are limited, so please let me know if
	@echo you think you can improve it.
	@echo
	@echo ----------------------------------------------------------------------
	@echo Updating dependencies, Please ignore file not found warnings...
	@echo
	for dir in . $(all_subdirs); do \
		$(MKDEPEND) $$dir/*.cpp $$dir/*.c | sed "s:^[^ ]:$$dir/&:"; done > .depend
	@echo
	@echo Depency update done.
	@echo ----------------------------------------------------------------------
include .depend


# Using libTeddy.a wasn't working right last time I tried :/
libTeddy.a: $(teddy_subdir_objs)
	@echo ----------------------------------------------------------------------
#	@echo
	@echo Linking Teddy framework library libTeddy.a:
#	@echo
#	@echo CXX         = $(CXX)
#	@echo CXXFLAGS    = $(CXXFLAGS)
#	@echo LDFLAGS     = $(LDFLAGS)
#	@echo LIBS        = $(LIBS)
#	@echo subdir_objs = $(teddy_subdir_objs)
#	@echo SDL_LIBS    = $(SDL_LIBS)
#	@echo
	$(AR) rc libTeddy.a $(teddy_subdir_objs)
	$(RANLIB) libTeddy.a	
#	@echo
	@echo Linking done.
#	@echo ----------------------------------------------------------------------


glElite.exe: libTeddy.a $(glElite_subdir_objs)
	@echo ----------------------------------------------------------------------
#	@echo
	@echo Final linking glElite:
#	@echo
#	@echo CXX         = $(CXX)
#	@echo CXXFLAGS    = $(CXXFLAGS)
#	@echo LDFLAGS     = $(LDFLAGS)
#	@echo LIBS        = $(LIBS)
#	@echo subdir_objs = $(glElite_subdir_objs)
#	@echo SDL_LIBS    = $(SDL_LIBS)
#	@echo
	$(AR) rc libglElite.a $(glElite_subdir_objs)
	$(RANLIB) libglElite.a	
	$(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ libglElite.a libTeddy.a -lSDLmain libglElite.a libTeddy.a $(LIBS) $(SDL_LIBS)
#	@echo
#	@echo Build done.
#	@echo
#	@echo Copying glElite.exe to release directory..
	cp ./glElite.exe ../../../TeddyRelease/
	@echo You can now run ./glElite.exe in ../../../TeddyRelease/
#	@echo ----------------------------------------------------------------------

TestBasic.exe: libTeddy.a $(TestBasic_subdir_objs)
	@echo ----------------------------------------------------------------------
#	@echo
	@echo Final linking TestBasic.exe:
#	@echo
#	@echo CXX         = $(CXX)
#	@echo CXXFLAGS    = $(CXXFLAGS)
#	@echo LDFLAGS     = $(LDFLAGS)
#	@echo LIBS        = $(LIBS)
#	@echo subdir_objs = $(TestBasic_subdir_objs)
#	@echo SDL_LIBS    = $(SDL_LIBS)
#	@echo
	$(AR) rc libTestBasic.a $(TestBasic_subdir_objs)
	$(RANLIB) libTestBasic.a	
	$(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ libTestBasic.a libTeddy.a -lSDLmain libTestBasic.a libTeddy.a $(LIBS) $(SDL_LIBS)
#	@echo
#	@echo Build done.
#	@echo
#	@echo Copying TestBasic.exe to release directory..
	cp ./TestBasic.exe ../../../TestRelease/
	@echo You can now run ./TestBasic.exe in ../../../TestRelease/
#	@echo ----------------------------------------------------------------------

TestObjects.exe: libTeddy.a $(TestObjects_subdir_objs)
	@echo ----------------------------------------------------------------------
#	@echo
	@echo Final linking TestObjects.exe:
#	@echo
#	@echo CXX         = $(CXX)
#	@echo CXXFLAGS    = $(CXXFLAGS)
#	@echo LDFLAGS     = $(LDFLAGS)
#	@echo LIBS        = $(LIBS)
#	@echo subdir_objs = $(TestObjects_subdir_objs)
#	@echo SDL_LIBS    = $(SDL_LIBS)
#	@echo
	$(AR) rc libTestObjects.a $(TestObjects_subdir_objs)
	$(RANLIB) libTestObjects.a	
	$(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ libTestObjects.a libTeddy.a -lSDLmain libTestObjects.a libTeddy.a $(LIBS) $(SDL_LIBS)
#	@echo
#	@echo Build done.
#	@echo
#	@echo Copying TestObjects.exe to release directory..
	cp ./TestObjects.exe ../../../TestRelease/
	@echo You can now run ./TestObjects.exe in ../../../TestRelease/
#	@echo ----------------------------------------------------------------------

TestEvents.exe: libTeddy.a $(TestEvents_subdir_objs)
	@echo ----------------------------------------------------------------------
#	@echo
	@echo Final linking TestEvents.exe:
#	@echo
#	@echo CXX         = $(CXX)
#	@echo CXXFLAGS    = $(CXXFLAGS)
#	@echo LDFLAGS     = $(LDFLAGS)
#	@echo LIBS        = $(LIBS)
#	@echo subdir_objs = $(TestEvents_subdir_objs)
#	@echo SDL_LIBS    = $(SDL_LIBS)
#	@echo
	$(AR) rc libTestEvents.a $(TestEvents_subdir_objs)
	$(RANLIB) libTestEvents.a	
	$(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ libTestEvents.a libTeddy.a -lSDLmain libTestEvents.a libTeddy.a $(LIBS) $(SDL_LIBS)
#	@echo
#	@echo Build done.
#	@echo
#   @echo Copying TestEvents.exe to release directory..
	cp ./TestEvents.exe ../../../TestRelease/
	@echo You can now run ./TestEvents.exe in ../../../TestRelease/
#	@echo ----------------------------------------------------------------------

TestManipulate.exe: libTeddy.a $(TestManipulate_subdir_objs)
	@echo ----------------------------------------------------------------------
#	@echo
	@echo Final linking TestManipulate.exe:
#	@echo
#	@echo CXX         = $(CXX)
#	@echo CXXFLAGS    = $(CXXFLAGS)
#	@echo LDFLAGS     = $(LDFLAGS)
#	@echo LIBS        = $(LIBS)
#	@echo subdir_objs = $(TestEvents_subdir_objs)
#	@echo SDL_LIBS    = $(SDL_LIBS)
#	@echo
	$(AR) rc libTestManipulate.a $(TestManipulate_subdir_objs)
	$(RANLIB) libTestManipulate.a
	$(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ libTestManipulate.a libTeddy.a -lSDLmain libTestManipulate.a libTeddy.a $(LIBS) $(SDL_LIBS)
#   @echo
#   @echo Build done.
#   @echo
#   @echo Copying TestEvents.exe to release directory..
	cp ./TestManipulate.exe ../../../TestRelease/
	@echo You can now run ./TestManipulate.exe in ../../../TestRelease/
#   @echo ----------------------------------------------------------------------

