#############
# generic application Makefile
# you can probably use this makefile for your app by changing the APPNAME variable
#############
APPNAME=ogre4j
TARGET=lib$(APPNAME).so
VERSION=1.4.9
RELEASE=1

#############
# compiler and linker
#############
CPLUSPLUS=g++
LINK=$(CPLUSPLUS)

#############
# where to find libraries
#############
LIBDIR ?= /usr/lib

#############
# OGRE
#############
OGRE_INCLUDE=-I/usr/include/OGRE
OGRE_LIBS=-L$(LIBDIR) -lOgreMain

#############
# libOIS
#############
OIS_INCLUDE=`pkg-config --cflags OIS`
OIS_LIBS=`pkg-config --libs OIS`

#############
# JAVA
#############
JAVA_HOME=$(LIBDIR)/jvm/java
JAVA_INCLUDE=-I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux

#############
# ogre4j source and include directories
#############
INC=src/c/include
OGRE4J_INCLUDE=-I$(INC)
SRC=src/c/src
#DEST_REL=bin/c/release/obj
#DEST_DBG=bin/c/debug/obj
DEST=bin/c/release/obj
DESTLIB=bin/c/release/lib

#############
# compile parameters
#############
DEFAULT_CPPFLAGS=-O2 -g -fmessage-length=0 -D_FORTIFY_SOURCE=2 -fPIC
#DEFAULT_CPPFLAGS=$(CPPFLAGS)
CPPFLAGS_RELEASE=
CPPFLAGS_DEBUG=-g
ALL_CPPFLAGS=$(DEFAULT_CPPFLAGS) $(OIS_INCLUDE) $(OGRE_INCLUDE) $(JAVA_INCLUDE) $(OGRE4J_INCLUDE) -o

# Turns on debugging: to enable run "make -DDEBUG=1"
ifeq ($(DEBUG),1)
	ALL_CPPFLAGS += -DDEBUG=1
endif

#############
# linker parameters
#############
DEFAULT_LD_FLAGS=-fPIC -shared -Wl,-soname,$(TARGET).$(VERSION) -o
LDFLAGS=$(DEFAULT_LD_FLAGS)

#############
# linux
#############
ifeq ($(shell uname),Linux)
	LDFLAGS=$(OIS_LIBS) $(OGRE_LIBS) $(DEFAULT_LD_FLAGS)
endif
ifeq ($(shell uname),SunOS)
endif
#############
# ...
#############

DEP_FILE=$(APPNAME).dep

#############
# tell make where to find the files
#############
vpath %.h $(INC)
vpath %.cpp $(SRC)
vpath %.o $(DEST)

#############
# create object file names from the source file names
#############
src_dirs=$(subst :, ,$(SRC))
source_files=$(foreach dir,$(src_dirs),$(wildcard $(dir)/*.cpp))
header_files=$(foreach dir,src,$(wildcard $(dir)/*.h))
OBJECTS=$(notdir $(patsubst %.cpp,%.o,$(source_files)))

#############
#############
release:
	$(MAKE) $(TARGET) CPPFLAGS="$(CPPFLAGS_RELEASE) $(ALL_CPPFLAGS)"

#############
#############
debug:
	$(MAKE) $(TARGET) CPPFLAGS="$(CPPFLAGS_DEBUG) $(ALL_CPPFLAGS)"

#############
#############
install:
	mkdir -p $(DESTDIR)$(LIBDIR)
	install -m 755 $(DESTLIB)/$(TARGET) $(DESTDIR)$(LIBDIR)/$(TARGET)
	# create links ...

#############
#############
clean:
	-rm -rf $(DEST) $(TARGET)

#############
#############
depend:
	-makedepend -f- -Y -I$(INC) $(source_files) > $(DEP_FILE)

#############
# internal targets
#############
$(TARGET): $(DEST) $(DESTLIB) $(OBJECTS)
	cd $(DEST); $(LINK) $(OBJECTS) $(LDFLAGS) ../lib/$@

#############
#############
$(DEST):
	-mkdir -p $(DEST)

#############
#############
$(DESTLIB):
	-mkdir -p $(DESTLIB)

#############
#############
$(OBJECTS): %.o: %.cpp
	$(CPLUSPLUS) $(ALL_CPPFLAGS) $(DEST)/$@ -c $<

#############
#############
#include $(DEP_FILE)
