
# Makefile for fluxus

CC = @CC@
CFLAGS = @CFLAGS@ @CPPFLAGS@ @DEFS@ -ggdb -pipe -Wall -O3 -ffast-math -Wno-unused -fPIC

# FIXME: use configure to correctly determine libs and paths
LDFLAGS = @LDFLAGS@ @LIBS@ -lglew -lode -llo -ljack -lfftw3 -lsndfile
OSX_FLAGS = -framework OpenGL -framework AGL -framework GLUT -framework PLT_MzScheme -flat_namespace 

# mzc...
MZDYN =  /Applications/PLT\ Scheme\ v360/lib/mzdyn.o

# osX specifics
OSX_LDFLAGS = -syslibroot /usr/include/Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386
OSX_CFLAGS = -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc


# build targets
BUILD_DIR = ./build
MODULES_DIR = ./build/modules

# fluxus
FLUXUS_DIR = src
FLUXUS_SRC = $(FLUXUS_DIR)/*.cpp
FLUXUS_OBJS = $(FLUXUS_DIR)/FluxusMain.o \
	      $(FLUXUS_DIR)/GLEditor.o \
	      $(FLUXUS_DIR)/Recorder.o \
	      $(FLUXUS_DIR)/Repl.o \
	      $(FLUXUS_DIR)/Interpreter.o \
	      $(FLUXUS_DIR)/Utils.o \
	      $(FLUXUS_DIR)/main.o

# libfluxus
LIBF_DIR = libfluxus/src
LIBF_SRC = $(LIBF_DIR)/*.cpp
LIBF_OBJS = $(LIBF_DIR)/BlobbyPrimitive.o \
	    $(LIBF_DIR)/CompiledPrimitive.o \
	    $(LIBF_DIR)/GraphicsUtils.o \
 	    $(LIBF_DIR)/GLSLShader.o \
	    $(LIBF_DIR)/Light.o \
	    $(LIBF_DIR)/LinePrimitive.o \
	    $(LIBF_DIR)/LocatorPrimitive.o \
	    $(LIBF_DIR)/NURBSPrimitive.o \
	    $(LIBF_DIR)/PData.o \
	    $(LIBF_DIR)/PDataArithmetic.o \
	    $(LIBF_DIR)/PDataContainer.o \
	    $(LIBF_DIR)/PDataOperator.o \
	    $(LIBF_DIR)/PNGLoader.o \
	    $(LIBF_DIR)/ParticlePrimitive.o \
	    $(LIBF_DIR)/Physics.o \
	    $(LIBF_DIR)/PixelPrimitive.o \
	    $(LIBF_DIR)/PolyPrimitive.o \
	    $(LIBF_DIR)/Primitive.o \
	    $(LIBF_DIR)/Renderer.o \
	    $(LIBF_DIR)/SceneGraph.o \
	    $(LIBF_DIR)/SearchPaths.o \
	    $(LIBF_DIR)/ShadowVolumeGen.o \
	    $(LIBF_DIR)/State.o \
	    $(LIBF_DIR)/TextPrimitive.o \
	    $(LIBF_DIR)/TexturePainter.o \
	    $(LIBF_DIR)/Tree.o \
	    $(LIBF_DIR)/dada.o 

# fluxus physics lib
LIBFP_DIR = libfluxphysics/src
LIBFP_SRC = $(LIBFP_DIR)/*.cpp
LIBFP_OBJS = $(LIBFP_DIR)/Physics.o 

# fluxus-engine module
ENGINE_DIR = modules/fluxus-engine/src
ENGINE_SRC = $(ENGINE_DIR)/*.cpp
ENGINE_OBJS = $(ENGINE_DIR)/Engine.o \
	      $(ENGINE_DIR)/FluxusEngine.o \
	      $(ENGINE_DIR)/GlobalStateFunctions.o \
	      $(ENGINE_DIR)/LocalStateFunctions.o \
	      $(ENGINE_DIR)/LightFunctions.o \
	      $(ENGINE_DIR)/MathsFunctions.o \
	      $(ENGINE_DIR)/PDataFunctions.o \
	      $(ENGINE_DIR)/PhysicsFunctions.o \
	      $(ENGINE_DIR)/PrimitiveFunctions.o \
	      $(ENGINE_DIR)/SchemeHelper.o \
	      $(ENGINE_DIR)/TurtleBuilder.o \
	      $(ENGINE_DIR)/TurtleFunctions.o \
	      $(ENGINE_DIR)/UtilFunctions.o \

# fluxus-osc module
OSC_DIR = modules/fluxus-osc/src
OSC_SRC = $(OSC_DIR)/*.cpp
OSC_OBJS = $(OSC_DIR)/OSCCore.o \
	   $(OSC_DIR)/OSCServer.o 

# fluxus-audio module
AUDIO_DIR = modules/fluxus-audio/src
AUDIO_SRC = $(AUDIO_DIR)/*.cpp
AUDIO_OBJS = $(AUDIO_DIR)/FluxusAudio.o \
	     $(AUDIO_DIR)/JackClient.o \
	     $(AUDIO_DIR)/AudioCollector.o


# compilation and desecration

all: modules fluxus

fluxus: $(FLUXUS_OBJS)
	$(CC) -o $(BUILD_DIR)/fluxus $(FLUXUS_OBJS) $(LDFLAGS) $(OSX_FLAGS) $(MZDYN) -lfluxus

libfluxus: $(LIBF_OBJS)
	$(CC) -dynamiclib -o $(BUILD_DIR)/libfluxus.dylib $(LIBF_OBJS) $(LDFLAGS) $(OSX_FLAGS)

libfluxphysics: $(LIBFP_OBJS)
	$(CC) -dynamiclib -o $(BUILD_DIR)/libfluxphysics.dylib $(LIBFP_OBJS) $(LDFLAGS) $(OSX_FLAGS)


modules: fluxus-engine fluxus-osc fluxus-audio

fluxus-engine: libfluxus $(ENGINE_OBJS)
	$(CC) -dynamiclib -o $(MODULES_DIR)/fluxus-engine.dylib $(ENGINE_OBJS) $(LDFLAGS) \
              -lfluxus $(OSX_FLAGS) $(MZDYN)

fluxus-audio: libfluxus $(AUDIO_OBJS)
	$(CC) -dynamiclib -o $(MODULES_DIR)/fluxus-audio.dylib $(AUDIO_OBJS) $(LDFLAGS) \
              -lfluxus $(OSX_FLAGS) $(MZDYN)

fluxus-osc: libfluxus $(OSC_OBJS)
	$(CC) -dynamiclib -o $(MODULES_DIR)/fluxus-osc.dylib $(OSC_OBJS) $(LDFLAGS) \
              -lfluxus $(OSX_FLAGS) $(MZDYN)


.cpp.o:
	$(CC) -o $@ -I$(LIBF_DIR) $(CFLAGS) -c $<


# documentation

docs: doc-html

docs-html:
	makeinfo --css-include=docs/fluxusdoc.css --html docs/fluxus.texi -o docs/html/
	cp -R docs/images docs/html/.


# installation and perversion

install: FORCE
	@echo "not yet..."


# packaging

planet-module: 

mac-app: 

mac-port:

dpkg:


# default

clean:
	-rm -f $(BUILD_DIR)/fluxus
	-rm -f $(BUILD_DIR)/modules/*
	-rm -f $(FLUXUS_DIR)/*.o
	-rm -f $(LIBF_DIR)/*.o
	-rm -f $(ENGINE_DIR)/*.o
	-rm -f $(AUDIO_DIR)/*.o
	-rm -f $(OSC_DIR)/*.o

distclean: clean
	rm -f Makefile config.h config.status config.log

FORCE:
