# Very simple makefile to build the Tao examples

CSC = mono-csc -target:winexe -debug
RESGEN = resgen2

SYSTEM_LIBS = -r:System
DRAWING_LIBS = -r:System.Windows.Forms -r:System.Data -r:System.Drawing

# unsupported:
#  CgExamples (libCg is not in Debian)
#  GlfwExamples (Glfw is Windows-only)
#  NeHe (examples require Windows specific stuff)
SUBDIRS = OdeExamples SdlExamples DevIlExamples FtGlScrolling \
	  FtGlSimple LuaFunctions LuaSimple OpenAlExamples \
	  FFmpegExamples PhysFsExamples FreeGlutExamples \
	  NateRobins Redbook GeWangExamples
TARGETS = $(addsuffix /Example.exe, $(SUBDIRS))

all: $(TARGETS)

clean:
	rm -f $(TARGETS) $(addsuffix /*.resources, $(SUBDIRS))

ODE_DIR = OdeExamples
ODE_SRC = Basic.cs
$(ODE_DIR)/Example.exe: $(addprefix $(ODE_DIR)/, $(ODE_SRC))
	$(CSC) -out:$@ $^ -pkg:tao-ode $(SYSTEM_LIBS)

SDL_DIR = SdlExamples
SDL_SRC = GfxPrimitives.cs Program.cs Rectangles.cs SdlExamples.cs \
	  SdlExamples.Designer.cs SmpegPlayer.cs SdlExamples.resx
SDL_RES = SdlExamples.SdlExamples.resources
$(SDL_DIR)/$(SDL_RES): $(SDL_DIR)/$(filter %.resx, $(SDL_SRC))
	$(RESGEN) $^ $@
$(SDL_DIR)/Example.exe: $(addprefix $(SDL_DIR)/, $(SDL_SRC) $(SDL_RES))
	$(CSC) -out:$@ $(filter %.cs, $^) -pkg:tao-sdl \
	  -resource:$(filter %.resources, $^) $(SYSTEM_LIBS) $(DRAWING_LIBS)

DEVIL_DIR = DevIlExamples
DEVIL_SRC = SimpleExample.cs
$(DEVIL_DIR)/Example.exe: $(addprefix $(DEVIL_DIR)/, $(DEVIL_SRC))
	$(CSC) -out:$@ $^ -pkg:tao-devil $(SYSTEM_LIBS)

FTGL1_DIR = FtGlScrolling
FTGL1_SRC = FtGlScrolling.cs
$(FTGL1_DIR)/Example.exe: $(addprefix $(FTGL1_DIR)/, $(FTGL1_SRC))
	$(CSC) -out:$@ $^ -pkg:tao-ftgl -pkg:tao-freetype -pkg:tao-freeglut \
	  $(SYSTEM_LIBS)

FTGL2_DIR = FtGlSimple
FTGL2_SRC = FtGlSimple.cs
$(FTGL2_DIR)/Example.exe: $(addprefix $(FTGL2_DIR)/, $(FTGL2_SRC))
	$(CSC) -out:$@ $^ -pkg:tao-ftgl -pkg:tao-freetype -pkg:tao-freeglut \
	  $(SYSTEM_LIBS)

LUA1_DIR = LuaFunctions
LUA1_SRC = Functions.cs
$(LUA1_DIR)/Example.exe: $(addprefix $(LUA1_DIR)/, $(LUA1_SRC))
	$(CSC) -out:$@ $^ -pkg:tao-lua $(SYSTEM_LIBS)

LUA2_DIR = LuaSimple
LUA2_SRC = Simple.cs
$(LUA2_DIR)/Example.exe: $(addprefix $(LUA2_DIR)/, $(LUA2_SRC))
	$(CSC) -out:$@ $^ -pkg:tao-lua $(SYSTEM_LIBS)

OPENAL_DIR = OpenAlExamples
OPENAL_SRC = Boxes.cs Lesson01.cs Lesson02.cs Lesson03.cs Lesson05.cs \
	     OpenAlExamples.cs OpenAlExamples.Designer.cs Program.cs \
	     Sound.cs Waterfall.cs OpenAlExamples.resx
OPENAL_RES = OpenAlExamples.OpenAlExamples.resources
$(OPENAL_DIR)/$(OPENAL_RES): $(OPENAL_DIR)/$(filter %.resx, $(OPENAL_SRC))
	$(RESGEN) $^ $@
$(OPENAL_DIR)/Example.exe: $(addprefix $(OPENAL_DIR)/, $(OPENAL_SRC) $(OPENAL_RES))
	$(CSC) -out:$@ $(filter %.cs, $^) \
	  -pkg:tao-openal -pkg:tao-freeglut -pkg:tao-opengl \
	  -resource:$(filter %.resources, $^) $(SYSTEM_LIBS) $(DRAWING_LIBS)

FFMPEG_DIR = FFmpegExamples
FFMPEG_SRC = AudioStream.cs Decoder.cs Player.cs Player.Designer.cs \
	     Program.cs Player.resx
FFMPEG_RES = FFmpegExamples.Player.resources
$(FFMPEG_DIR)/$(FFMPEG_RES): $(FFMPEG_DIR)/$(filter %.resx, $(FFMPEG_SRC))
	$(RESGEN) $^ $@
$(FFMPEG_DIR)/Example.exe: $(addprefix $(FFMPEG_DIR)/, $(FFMPEG_SRC) $(FFMPEG_RES))
	$(CSC) -out:$@ $(filter %.cs, $^) -pkg:tao-openal -pkg:tao-ffmpeg \
	  -resource:$(filter %.resources, $^) $(SYSTEM_LIBS) $(DRAWING_LIBS)

PHYSFS_DIR = PhysFsExamples
PHYSFS_SRC = Simple.cs
$(PHYSFS_DIR)/Example.exe: $(addprefix $(PHYSFS_DIR)/, $(PHYSFS_SRC))
	$(CSC) -out:$@ $^ -pkg:tao-physfs $(SYSTEM_LIBS)

FREEGLUT_DIR = FreeGlutExamples
FREEGLUT_SRC = One.cs
$(FREEGLUT_DIR)/Example.exe: $(addprefix $(FREEGLUT_DIR)/, $(FREEGLUT_SRC))
	$(CSC) -out:$@ $^ -pkg:tao-freeglut $(SYSTEM_LIBS)

OPENGL1_DIR = NateRobins
OPENGL1_SRC = Area.cs Maiden.cs MultiView.cs NateRobins.cs \
	      NateRobins.Designer.cs Nii.cs Node.cs Null.cs Point.cs \
	      Program.cs Qix.cs Rotate.cs Starfield.cs Strip.cs Texture.cs \
	      Voronoi.cs NateRobins.resx
OPENGL1_RES = NateRobins.Naterobins.resources
$(OPENGL1_DIR)/$(OPENGL1_RES): $(OPENGL1_DIR)/$(filter %.resx, $(OPENGL1_SRC))
	$(RESGEN) $^ $@
$(OPENGL1_DIR)/Example.exe: $(addprefix $(OPENGL1_DIR)/, $(OPENGL1_SRC) $(OPENGL1_RES))
	$(CSC) -out:$@ $(filter %.cs, $^) -pkg:tao-freeglut \
	  -resource:$(filter %.resources, $^) $(SYSTEM_LIBS) $(DRAWING_LIBS)

OPENGL2_DIR = Redbook
OPENGL2_SRC = Aaindex.cs Aapoly.cs Aargb.cs Accanti.cs Accpersp.cs Alpha3d.cs \
	      Alpha.cs Anti.cs Bezcurve.cs Bezmesh.cs Bezsurf.cs Checker.cs \
	      CheckerOld.cs Clip.cs Colormat.cs Cube.cs DepthCue.cs Dof.cs \
	      Double.cs Drawf.cs Feedback.cs Fog.cs FogIndex.cs FogIndexOld.cs \
	      FogOld.cs Font.cs Hello.cs Image.cs Jitter.cs Light.cs Lines.cs \
	      List.cs Material.cs Mipmap.cs Model.cs MoveLight.cs Nurbs.cs \
	      PickDepth.cs PickSquare.cs Plane.cs Planet.cs PolyOff.cs \
	      Polys.cs Program.cs Quadric.cs Redbook.cs Redbook.Designer.cs \
	      Robot.cs SceneBlueAmbient.cs SceneColorLight.cs Scene.cs \
	      SceneFlat.cs Select.cs Smooth.cs Stencil.cs Stroke.cs Surface.cs \
	      SurfaceOld.cs TeaAmbient.cs Teapots.cs Tess.cs TessWind.cs \
	      TexBind.cs TexGen.cs TexProx.cs TexSub.cs TextureSurf.cs \
	      Torus.cs Trim.cs UnProject.cs Varray.cs Wrap.cs Redbook.resx
OPENGL2_RES = Redbook.Redbook.resources
$(OPENGL2_DIR)/$(OPENGL2_RES): $(OPENGL2_DIR)/$(filter %.resx, $(OPENGL2_SRC))
	$(RESGEN) $^ $@
$(OPENGL2_DIR)/Example.exe: $(addprefix $(OPENGL2_DIR)/, $(OPENGL2_SRC) $(OPENGL2_RES))
	$(CSC) -out:$@ $(filter %.cs, $^) -pkg:tao-freeglut \
	  -resource:$(filter %.resources, $^) $(SYSTEM_LIBS) $(DRAWING_LIBS)

OPENGL3_DIR = GeWangExamples
OPENGL3_SRC = ClippingPlanes.cs GeWangExamples.cs GeWangExamples.Designer.cs \
	      Lorenz3d.cs Mirror.cs Program.cs Shadow.cs Starfield.cs \
	      Xform.cs GeWangExamples.resx
OPENGL3_RES = GeWangExamples.GeWang.resources
$(OPENGL3_DIR)/$(OPENGL3_RES): $(OPENGL3_DIR)/$(filter %.resx, $(OPENGL3_SRC))
	$(RESGEN) $^ $@
$(OPENGL3_DIR)/Example.exe: $(addprefix $(OPENGL3_DIR)/, $(OPENGL3_SRC) $(OPENGL3_RES))
	$(CSC) -out:$@ $(filter %.cs, $^) -pkg:tao-freeglut \
	  -resource:$(filter %.resources, $^) $(SYSTEM_LIBS) $(DRAWING_LIBS)

