############################################################
# Configuration
############################################################

# package name
package = gl4gcj
version = 0.1.0

# directories
## for build 
srcdir = .
top_srcdir = ..
top_builddir = $(top_srcdir)

# for install
prefix = /usr/local
exec_prefix = ${prefix}
bindir = ${exec_prefix}/bin
includedir = ${prefix}/include
libdir = ${exec_prefix}/lib
datadir = ${prefix}/share
sysconfdir = ${prefix}/etc

pkgdatadir = ${prefix}/share/gl4gcj
pkgsysconfdir = ${prefix}/etc/gl4gcj

extdir = ${prefix}/share/java/ext

# tools
INSTALL = /usr/bin/install -c
INSTALL_PROGRAM = ${INSTALL}
INSTALL_DATA = ${INSTALL} -m 644
JAR= jar

## for build
LIBTOOL = $(SHELL) $(top_builddir)/libtool
LT_CFLAGS = 
LT_GCJFLAGS =
LT_LDFLAGS = -rpath $(libdir)

CC = gcc
CXX = g++
DEFS = -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DSTDC_HEADERS=1  
OPT_FLAGS = -O2
CFLAGS = $(OPT_FLAGS) -I$(srcdir)  -Wall -DNDEBUG  
LDFLAGS = 
LIBS = 
GL_LIBS =  -lGL
GLU_LIBS =  -lGLU
GLUT_LIBS =  -lglut

GCJ = gcj
GCJH = gcjh
CLASSPATH=$(srcdir)
GCJFLAGS = $(OPT_FLAGS) --classpath=$(CLASSPATH)  -Wall
GCJHFLAGS = --classpath=$(CLASSPATH) 

############################################################
# Files
############################################################

##############################
# gl4gcj
##############################
GL4GCJ_LIBRARY = lib-gl4gcj.la
GL4GCJ_LIBRARY_JAR = gl4gcj.jar

GL4GCJ_LIBRARY_NATIVE_CLASS_JAVA_SOURCES= \
	gl4gcj/GL.java \

GL4GCJ_LIBRARY_JAVA_SOURCES= \
	gl4gcj/GLConstants.java \
	gl4gcj/GLException.java \

GL4GCJ_LIBRARY_NATIVE_CLASS_CPP_SOURCES=  $(GL4GCJ_LIBRARY_NATIVE_CLASS_JAVA_SOURCES:.java=_native.cpp)

GL4GCJ_LIBRARY_NATIVE_CLASS_CLASSES= $(GL4GCJ_LIBRARY_NATIVE_CLASS_JAVA_SOURCES:.java=.class)
GL4GCJ_LIBRARY_NATIVE_CLASS_HEADERS= $(GL4GCJ_LIBRARY_NATIVE_CLASS_JAVA_SOURCES:.java=.h)
GL4GCJ_LIBRARY_NATIVE_CLASS_LT_OBJECTS=  \
	$(GL4GCJ_LIBRARY_NATIVE_CLASS_JAVA_SOURCES:.java=.lo) \
	$(GL4GCJ_LIBRARY_NATIVE_CLASS_CPP_SOURCES:.cpp=.lo) \

GL4GCJ_LIBRARY_JAVA_CLASSES = $(GL4GCJ_LIBRARY_JAVA_SOURCES:.java=.class)
GL4GCJ_LIBRARY_JAVA_HEADERS = $(GL4GCJ_LIBRARY_JAVA_SOURCES:.java=.h)
GL4GCJ_LIBRARY_JAVA_LT_OBJECTS = $(GL4GCJ_LIBRARY_JAVA_CLASSES:.class=.lo)

GL4GCJ_LIBRARY_CLASSES = $(GL4GCJ_LIBRARY_NATIVE_CLASS_CLASSES) $(GL4GCJ_LIBRARY_JAVA_CLASSES)
GL4GCJ_LIBRARY_HEADERS = $(GL4GCJ_LIBRARY_JAVA_HEADERS) $(GL4GCJ_LIBRARY_NATIVE_CLASS_HEADERS)
GL4GCJ_LIBRARY_LT_OBJECTS = $(GL4GCJ_LIBRARY_JAVA_LT_OBJECTS) $(GL4GCJ_LIBRARY_NATIVE_CLASS_LT_OBJECTS)


##############################
# glu4gcj
##############################
GLU4GCJ_LIBRARY = lib-glu4gcj.la
GLU4GCJ_LIBRARY_JAR = glu4gcj.jar

GLU4GCJ_LIBRARY_NATIVE_CLASS_JAVA_SOURCES= \
	glu4gcj/GLU.java \
	glu4gcj/Nurbs.java \
	glu4gcj/Quadric.java \
	glu4gcj/Tesselator.java \

GLU4GCJ_LIBRARY_JAVA_SOURCES= \
	glu4gcj/GLUConstants.java \
	glu4gcj/GLUException.java \
	glu4gcj/NurbsAdapter.java \
	glu4gcj/NurbsListener.java \
	glu4gcj/TesselatorAdapter.java \
	glu4gcj/TesselatorListener.java \

GLU4GCJ_LIBRARY_NATIVE_CLASS_CPP_SOURCES=  $(GLU4GCJ_LIBRARY_NATIVE_CLASS_JAVA_SOURCES:.java=_native.cpp)

GLU4GCJ_LIBRARY_NATIVE_CLASS_CLASSES= $(GLU4GCJ_LIBRARY_NATIVE_CLASS_JAVA_SOURCES:.java=.class)
GLU4GCJ_LIBRARY_NATIVE_CLASS_HEADERS= $(GLU4GCJ_LIBRARY_NATIVE_CLASS_JAVA_SOURCES:.java=.h)
GLU4GCJ_LIBRARY_NATIVE_CLASS_LT_OBJECTS=  \
	$(GLU4GCJ_LIBRARY_NATIVE_CLASS_JAVA_SOURCES:.java=.lo) \
	$(GLU4GCJ_LIBRARY_NATIVE_CLASS_CPP_SOURCES:.cpp=.lo) \

GLU4GCJ_LIBRARY_JAVA_CLASSES = $(GLU4GCJ_LIBRARY_JAVA_SOURCES:.java=.class)
GLU4GCJ_LIBRARY_JAVA_HEADERS = $(GLU4GCJ_LIBRARY_JAVA_SOURCES:.java=.h)
GLU4GCJ_LIBRARY_JAVA_LT_OBJECTS = $(GLU4GCJ_LIBRARY_JAVA_CLASSES:.class=.lo)

GLU4GCJ_LIBRARY_CLASSES = $(GLU4GCJ_LIBRARY_NATIVE_CLASS_CLASSES) $(GLU4GCJ_LIBRARY_JAVA_CLASSES)
GLU4GCJ_LIBRARY_HEADERS = $(GLU4GCJ_LIBRARY_JAVA_HEADERS) $(GLU4GCJ_LIBRARY_NATIVE_CLASS_HEADERS)
GLU4GCJ_LIBRARY_LT_OBJECTS = $(GLU4GCJ_LIBRARY_JAVA_LT_OBJECTS) $(GLU4GCJ_LIBRARY_NATIVE_CLASS_LT_OBJECTS)

##############################
# glut4gcj
##############################
GLUT4GCJ_LIBRARY = lib-glut4gcj.la
GLUT4GCJ_LIBRARY_JAR = glut4gcj.jar

GLUT4GCJ_LIBRARY_NATIVE_CLASS_JAVA_SOURCES= \
	glut4gcj/GLUT.java \
	glut4gcj/BitmapFont.java \
	glut4gcj/StrokeFont.java \

GLUT4GCJ_LIBRARY_JAVA_SOURCES= \
	glut4gcj/GLUTConstants.java \
	glut4gcj/ButtonBoxFunc.java \
	glut4gcj/DialsFunc.java \
	glut4gcj/DisplayFunc.java \
	glut4gcj/EntryFunc.java \
	glut4gcj/IdleFunc.java \
	glut4gcj/JoystickFunc.java \
	glut4gcj/KeyboardFunc.java \
	glut4gcj/KeyboardUpFunc.java \
	glut4gcj/MenuFunc.java \
	glut4gcj/MenuStateFunc.java \
	glut4gcj/MenuStatusFunc.java \
	glut4gcj/MotionFunc.java \
	glut4gcj/MouseFunc.java \
	glut4gcj/OverlayDisplayFunc.java \
	glut4gcj/PassiveMotionFunc.java \
	glut4gcj/ReshapeFunc.java \
	glut4gcj/SpaceballButtonFunc.java \
	glut4gcj/SpaceballMotionFunc.java \
	glut4gcj/SpaceballRotateFunc.java \
	glut4gcj/SpecialFunc.java \
	glut4gcj/SpecialUpFunc.java \
	glut4gcj/TabletButtonFunc.java \
	glut4gcj/TabletMotionFunc.java \
	glut4gcj/TimerFunc.java \
	glut4gcj/VisibilityFunc.java \
	glut4gcj/WindowStatusFunc.java \

GLUT4GCJ_LIBRARY_NATIVE_CLASS_CPP_SOURCES=  $(GLUT4GCJ_LIBRARY_NATIVE_CLASS_JAVA_SOURCES:.java=_native.cpp)

GLUT4GCJ_LIBRARY_NATIVE_CLASS_CLASSES= $(GLUT4GCJ_LIBRARY_NATIVE_CLASS_JAVA_SOURCES:.java=.class)
GLUT4GCJ_LIBRARY_NATIVE_CLASS_HEADERS= $(GLUT4GCJ_LIBRARY_NATIVE_CLASS_JAVA_SOURCES:.java=.h)
GLUT4GCJ_LIBRARY_NATIVE_CLASS_LT_OBJECTS=  \
	$(GLUT4GCJ_LIBRARY_NATIVE_CLASS_JAVA_SOURCES:.java=.lo) \
	$(GLUT4GCJ_LIBRARY_NATIVE_CLASS_CPP_SOURCES:.cpp=.lo) \

GLUT4GCJ_LIBRARY_JAVA_CLASSES = $(GLUT4GCJ_LIBRARY_JAVA_SOURCES:.java=.class)
GLUT4GCJ_LIBRARY_JAVA_HEADERS = $(GLUT4GCJ_LIBRARY_JAVA_SOURCES:.java=.h)
GLUT4GCJ_LIBRARY_JAVA_LT_OBJECTS = $(GLUT4GCJ_LIBRARY_JAVA_CLASSES:.class=.lo)

GLUT4GCJ_LIBRARY_CLASSES = $(GLUT4GCJ_LIBRARY_NATIVE_CLASS_CLASSES) $(GLUT4GCJ_LIBRARY_JAVA_CLASSES)
GLUT4GCJ_LIBRARY_HEADERS = $(GLUT4GCJ_LIBRARY_JAVA_HEADERS) $(GLUT4GCJ_LIBRARY_NATIVE_CLASS_HEADERS)
GLUT4GCJ_LIBRARY_LT_OBJECTS = $(GLUT4GCJ_LIBRARY_JAVA_LT_OBJECTS) $(GLUT4GCJ_LIBRARY_NATIVE_CLASS_LT_OBJECTS)


############################################################
# Rules
############################################################
BUILD_TARGETS = gl4gcj glu4gcj glut4gcj

all : $(BUILD_TARGETS)

install: $(BUILD_TARGETS:=.install)

clean: $(BUILD_TARGETS:=.clean)


##############################
# gl4gcj
##############################

gl4gcj : $(GL4GCJ_LIBRARY_HEADERS) $(GL4GCJ_LIBRARY) $(GL4GCJ_LIBRARY_JAR)

$(GL4GCJ_LIBRARY): $(GL4GCJ_LIBRARY_LT_OBJECTS)
	$(LIBTOOL) --tag=GCJ --mode=link gcj -o $@ \
		$(GL4GCJ_LIBRARY_LT_OBJECTS) \
		$(LDFLAGS) $(GL_LIBS) $(LIBS) $(LT_LDFLAGS)

$(GL4GCJ_LIBRARY_JAR): $(GL4GCJ_LIBRARY_CLASSES) 
	$(JAR) cvf $@ $(GL4GCJ_LIBRARY_CLASSES) 

gl4gcj.install: gl4gcj install-target-dirs
	$(LIBTOOL) --mode=install $(INSTALL) $(GL4GCJ_LIBRARY) $(libdir)/$(GL4GCJ_LIBRARY)
	$(INSTALL_DATA) $(GL4GCJ_LIBRARY_JAR) $(extdir)
	for i in $(GL4GCJ_LIBRARY_HEADERS) ; do \
		echo $$i; \
		$(INSTALL) -d $(includedir)/`dirname $$i`; \
		$(INSTALL_DATA) $$i $(includedir)/$$i; \
	done

gl4gcj.clean :
	-$(LIBTOOL) --mode=clean rm $(GL4GCJ_LIBRARY) \
	$(GL4GCJ_LIBRARY_LT_OBJECTS) \
	$(GL4GCJ_LIBRARY_CLASSES) \
	$(GL4GCJ_LIBRARY_HEADERS) \
	$(GL4GCJ_LIBRARY_JAR)

##############################
# glu4gcj
##############################

glu4gcj : $(GLU4GCJ_LIBRARY_HEADERS) $(GLU4GCJ_LIBRARY) $(GLU4GCJ_LIBRARY_JAR)

$(GLU4GCJ_LIBRARY): $(GLU4GCJ_LIBRARY_LT_OBJECTS)
	$(LIBTOOL) --tag=GCJ --mode=link gcj -o $@ \
		$(GLU4GCJ_LIBRARY_LT_OBJECTS) \
		$(LDFLAGS) $(GLU_LIBS) $(GL_LIBS) $(LIBS) $(LT_LDFLAGS)

$(GLU4GCJ_LIBRARY_JAR): $(GLU4GCJ_LIBRARY_CLASSES) 
	$(JAR) cvf $@ $(GLU4GCJ_LIBRARY_CLASSES) 

glu4gcj.install: glu4gcj install-target-dirs
	$(LIBTOOL) --mode=install $(INSTALL) $(GLU4GCJ_LIBRARY) $(libdir)/$(GLU4GCJ_LIBRARY)
	$(INSTALL_DATA) $(GLU4GCJ_LIBRARY_JAR) $(extdir)
	for i in $(GLU4GCJ_LIBRARY_HEADERS) ; do \
		echo $$i; \
		$(INSTALL) -d $(includedir)/`dirname $$i`; \
		$(INSTALL_DATA) $$i $(includedir)/$$i; \
	done

glu4gcj.clean :
	-$(LIBTOOL) --mode=clean rm $(GLU4GCJ_LIBRARY) \
	$(GLU4GCJ_LIBRARY_LT_OBJECTS) \
	$(GLU4GCJ_LIBRARY_CLASSES) \
	$(GLU4GCJ_LIBRARY_HEADERS) \
	$(GLU4GCJ_LIBRARY_JAR)


##############################
# glut4gcj
##############################

glut4gcj : $(GLUT4GCJ_LIBRARY_HEADERS) $(GLUT4GCJ_LIBRARY) $(GLUT4GCJ_LIBRARY_JAR)

$(GLUT4GCJ_LIBRARY): $(GLUT4GCJ_LIBRARY_LT_OBJECTS)
	$(LIBTOOL) --tag=GCJ --mode=link gcj -o $@ \
		$(GLUT4GCJ_LIBRARY_LT_OBJECTS) $(GL4GCJ_LIBRARY) \
		$(LDFLAGS) $(GLUT_LIBS) $(GL_LIBS) $(LIBS) $(LT_LDFLAGS)

$(GLUT4GCJ_LIBRARY_JAR): $(GLUT4GCJ_LIBRARY_CLASSES) 
	$(JAR) cvf $@ $(GLUT4GCJ_LIBRARY_CLASSES) 

glut4gcj.install: glut4gcj install-target-dirs
	$(LIBTOOL) --mode=install $(INSTALL) $(GLUT4GCJ_LIBRARY) $(libdir)/$(GLUT4GCJ_LIBRARY)
	$(INSTALL_DATA) $(GLUT4GCJ_LIBRARY_JAR) $(extdir)
	for i in $(GLUT4GCJ_LIBRARY_HEADERS) ; do \
		echo $$i; \
		$(INSTALL) -d $(includedir)/`dirname $$i`; \
		$(INSTALL_DATA) $$i $(includedir)/$$i; \
	done

glut4gcj.clean :
	-$(LIBTOOL) --mode=clean rm $(GLUT4GCJ_LIBRARY) \
	$(GLUT4GCJ_LIBRARY_LT_OBJECTS) \
	$(GLUT4GCJ_LIBRARY_CLASSES) \
	$(GLUT4GCJ_LIBRARY_HEADERS) \
	$(GLUT4GCJ_LIBRARY_JAR)


##############################
# common rules
##############################

## suffixe rules
.SUFFIXES : .java .class .h .cpp .lo

.java.lo: 
	$(LIBTOOL) --tag=GCJ --mode=compile $(GCJ) $(GCJFLAGS) -o $@ -c $< $(LT_GCJFLAGS)

.cpp.lo: 
	$(LIBTOOL) --mode=compile $(CXX) $(CFLAGS) -o $@ -c $< $(LT_CFLAGS)

.java.class:
	$(GCJ) $(GCJFLAGS) -C $<

.class.h: 
	$(GCJH) $(GCJHFLAGS) $(<:.class=)


## install rules
install-target-dirs:
	$(INSTALL) -d $(libdir)
	$(INSTALL) -d $(extdir)
	$(INSTALL) -d $(includedir)

