
MCS = gmcs /debug /nowarn:0169
PKG = /pkg:gtkglarea-sharp /pkg:gtk-sharp-2.0 /pkg:tao-opengl
FULLPKG = $(PKG) /pkg:glade-sharp-2.0

LIBS = gtkglarea-sharp-util.dll shapes.dll GladeExample.dll
PROGS = GladeExample.exe Lesson01.exe Lesson02.exe Lesson03.exe Lesson04.exe Lesson05.exe Lesson06.exe TrackballExample.exe RotateButtonExample.exe PickExample.exe

all: $(LIBS) $(PROGS)

clean:
	rm -f *.exe *.dll *.mdb

#
# Libraries
#

UTIL_DLL_SRC = GLWidget.cs IGLObject.cs GLObjectBase.cs EulerRotation.cs \
           Rotation.cs Vector.cs Quaternion.cs TransformationMatrix.cs
gtkglarea-sharp-util.dll: $(UTIL_DLL_SRC:%=util/%)
	$(MCS) /t:library $^ /out:$@ $(PKG)

SHAPES_DLL_SRC = ColoredSquare.cs ColoredTriangle.cs Cube.cs Pyramid.cs \
                 Square.cs Teapot.cs Triangle.cs
shapes.dll: $(SHAPES_DLL_SRC:%=shapes/%)
	$(MCS) /t:library $^ /out:$@ /r:gtkglarea-sharp-util.dll $(PKG)

GLADE_DLL_SRC = GladeExample.cs
GladeExample.dll: $(GLADE_DLL_SRC:%=glade/%)
	$(MCS) /t:library $^ /out:$@ /r:gtkglarea-sharp-util.dll $(FULLPKG) \
	       /resource:resources/glwidget.glade

#
# Programs
#

GladeExample.exe: glade/Engine.cs
	$(MCS) /t:winexe $^ /out:$@ $(LIBS:%=/r:%) $(FULLPKG) \
	       /resource:resources/glwidget.glade

Lesson01.exe: NeHe/Lessons/01/Lesson01.cs
	$(MCS) /t:winexe $^ /out:$@ $(LIBS:%=/r:%) $(FULLPKG)

Lesson02.exe: NeHe/Lessons/02/Lesson02.cs
	$(MCS) /t:winexe $^ /out:$@ $(LIBS:%=/r:%) $(FULLPKG)

Lesson03.exe: NeHe/Lessons/03/Lesson03.cs
	$(MCS) /t:winexe $^ /out:$@ $(LIBS:%=/r:%) $(FULLPKG)

Lesson04.exe: NeHe/Lessons/04/Lesson04.cs
	$(MCS) /t:winexe $^ /out:$@ $(LIBS:%=/r:%) $(FULLPKG)

Lesson05.exe: NeHe/Lessons/05/Lesson05.cs
	$(MCS) /t:winexe $^ /out:$@ $(LIBS:%=/r:%) $(FULLPKG)

Lesson06.exe: NeHe/Lessons/06/Lesson06.cs
	$(MCS) /t:winexe $^ /out:$@ $(LIBS:%=/r:%) $(FULLPKG)

TRACKBALL_SRC = TrackballExample.cs TrackballWidget.cs Trackball.cs
TrackballExample.exe: $(TRACKBALL_SRC:%=trackball/%)
	$(MCS) /t:winexe $^ /out:$@ $(LIBS:%=/r:%) $(FULLPKG) \
	       /resource:resources/glwidget.glade

ROTATE_SRC = GLObjectRotationController.cs ObjectRotationButton.cs \
             OldGLObjectBase.cs OldTeapot.cs RotateButtonExample.cs
RotateButtonExample.exe: $(ROTATE_SRC:%=rotate-buttons/%)
	$(MCS) /t:winexe $^ /out:$@ $(LIBS:%=/r:%) $(FULLPKG) \
	       /resource:resources/glwidget.glade \
	       /resource:rotate-buttons/rotation-controller.glade

PICK_SRC = Engine.cs PickWidget.cs ObjectPickExample.cs
PickExample.exe: $(PICK_SRC:%=pick-object/%)
	$(MCS) /t:winexe $^ /out:$@ $(LIBS:%=/r:%) $(FULLPKG) \
	       /resource:resources/glwidget.glade

