# on *.o file is created with the command
# $(CXX) -c $(CPPFLAGS) $(CXXFLAGS)

CXX      = mex

# for matlab V6.1-
# CPPFLAGS = -f cxxopts.sh
# for matlab V6.5+
CPPFLAGS = -g

CXXFLAGS =
REGGEN   = ../../develop/reggen/bin/reggen

#
# here are all the objects
#
OBJECTS = csimclass.o \
	csimmex.o \
	randgen.o \
	advanceable.o \
	analogteacher.o \
	staticspikingsynapse.o \
	dynamicspikingsynapse.o \
	staticstdpsynapse.o \
	dynamicstdpsynapse.o \
	stdpsynapse.o \
	analogneuron.o \
	analogsynapse.o \
	staticanalogsynapse.o \
	lifneuron.o \
	network.o \
	neuron.o \
	spikingneuron.o \
	spikinginputneuron.o \
	spikingsynapse.o \
	spikingteacher.o \
	synapse.o \
	teacher.o \
	recorder.o \
	mexrecorder.o \
	csimerror.o \
	analoginputneuron.o \
	sigmoidalneuron.o \
	linearneuron.o \
	cbneuron.o \
	ionchannel.o \
	viongate.o \
	conciongate.o \
	iongate.o \
	activechannel.o \
        ahp_channel.o \
	synapticchannel.o \
	mexnetwork.o \
	forceable.o \
	hh_squid_channels.o \
	hh_neuron.o \
	extinputneuron.o \
	extoutsigmoidalneuron.o \
        extoutlinearneuron.o \
        generic_ion_gates.o \
        specific_ion_channels.o \
	activecachannel.o \
	cbneuronst.o \
	extoutlifneuron.o \
	csiminputclass.o \
	membranepatch.o \
	membranepatchsimple.o \
	specific_neurons.o \
	staticanalogcbsynapse.o \
	dynamicspikingcbsynapse.o \
	staticspikingcbsynapse.o \
	cbstouneuron.o \
	specificouneurons.o \
	ionbuffer.o \
        cbhhouneuron.o \
        cbhhouineuron.o

#
# the default rule
#
default: filepermissions csim.mexglx install.m

filepermissions:
	chmod 755 makedependencies

#
# the *.i files
#
classlist.i switch.i registerclasses.i: *.h
	$(REGGEN) RegGenFile
	@rm -rf def html

field-files:
	$(REGGEN) RegGenFile
	@rm -rf def html

#
# the rule how to make an *.o file from an *.cpp file
#
$(OBJECTS): %.o: %.cpp
	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<

#
# how to make the mex file
#
csim.mexglx: $(OBJECTS) csim.cpp
	mex csim.cpp $(OBJECTS) 
#
# some default targets
#
clean:
	rm -f *.o csim.mexglx *.i *.obj objectlist.txt

mrproper:
	rm -f *.o csim.mexglx *.i *.obj install.m fields-* objectlist.txt

distclean:
	rm -f *.o *.obj fields-*

build: clean filepermissions depend csim.mexglx install.m

#
# make the dependencies
#
depend:
	./makedependencies

#
# make a command to compile the whole stuff from within matlab (for windows!)
#
install.m: Makefile install.tmpl objectlist.txt
	@(sed -e s#_OBJECTS_#"`cat objectlist.txt`"# install.tmpl > install.m;)

objectlist.txt: Makefile
	@echo ${OBJECTS} | tr ' ' '\n' |  sed -e s/\\.o/\\.cpp/ | tr '\n' ' ' > objectlist.txt

# DO NOT DELETE THIS LINE -- make depend depends on it.
# the following dependencies are generated automatically by ./makedependencies

activecachannel.o: activecachannel.cpp

activechannel.o: activechannel.cpp activechannel.h ionchannel.h \
 globaldefinitions.h advanceable.h csimclass.h membranepatchsimple.h \
 spikingneuron.h neuron.h forceable.h csimlist.h synapsetarget.h \
 spikingsynapse.h synapse.h iongate.h cbneuron.h membranepatch.h \
 ionbuffer.h csimerror.h analoginputneuron.h analogneuron.h \
 analogsynapse.h csiminputclass.h hh_squid_channels.h viongate.h

advanceable.o: advanceable.cpp advanceable.h csimclass.h \
 globaldefinitions.h

ahp_channel.o: ahp_channel.cpp ahp_channel.h ionchannel.h \
 globaldefinitions.h advanceable.h csimclass.h membranepatchsimple.h \
 spikingneuron.h neuron.h forceable.h csimlist.h synapsetarget.h \
 spikingsynapse.h synapse.h cbneuron.h membranepatch.h ionbuffer.h \
 analogneuron.h analogsynapse.h csimerror.h

analoginputneuron.o: analoginputneuron.cpp analoginputneuron.h \
 analogneuron.h neuron.h forceable.h advanceable.h csimclass.h \
 globaldefinitions.h csimlist.h synapsetarget.h analogsynapse.h \
 synapse.h csiminputclass.h csimerror.h

analogneuron.o: analogneuron.cpp analogneuron.h neuron.h forceable.h \
 advanceable.h csimclass.h globaldefinitions.h csimlist.h \
 synapsetarget.h analogsynapse.h synapse.h csimerror.h

analogsynapse.o: analogsynapse.cpp analogsynapse.h synapse.h \
 advanceable.h csimclass.h globaldefinitions.h neuron.h forceable.h \
 csimlist.h synapsetarget.h

analogteacher.o: analogteacher.cpp analogteacher.h teacher.h \
 advanceable.h csimclass.h globaldefinitions.h csimlist.h \
 analogneuron.h neuron.h forceable.h synapsetarget.h analogsynapse.h \
 synapse.h csiminputclass.h csimerror.h

cbneuron.o: cbneuron.cpp randgen.h cbneuron.h spikingneuron.h neuron.h \
 forceable.h advanceable.h csimclass.h globaldefinitions.h csimlist.h \
 synapsetarget.h spikingsynapse.h synapse.h ionchannel.h \
 membranepatchsimple.h membranepatch.h ionbuffer.h

cbneuronst.o: cbneuronst.cpp randgen.h cbneuronst.h cbneuron.h \
 spikingneuron.h neuron.h forceable.h advanceable.h csimclass.h \
 globaldefinitions.h csimlist.h synapsetarget.h spikingsynapse.h \
 synapse.h ionchannel.h membranepatchsimple.h membranepatch.h \
 ionbuffer.h

conciongate.o: conciongate.cpp conciongate.h advanceable.h csimclass.h \
 globaldefinitions.h membranepatch.h spikingneuron.h neuron.h \
 forceable.h csimlist.h synapsetarget.h spikingsynapse.h synapse.h \
 ionchannel.h membranepatchsimple.h ionbuffer.h iongate.h csimerror.h

csimclass.o: csimclass.cpp csimclass.h globaldefinitions.h csimerror.h \
 classlist.i registerclasses.i

csim.o: csim.cpp csimmex.h globaldefinitions.h csimerror.h

csimerror.o: csimerror.cpp csimerror.h

csiminputclass.o: csiminputclass.cpp csiminputclass.h \
 globaldefinitions.h csimlist.h csimerror.h

csimlist.o: csimlist.cpp csimlist.h

csimmex.o: csimmex.cpp csimmex.h globaldefinitions.h classlist.i \
 csimerror.h mexnetwork.h network.h csimlist.h spikingsynapse.h \
 synapse.h advanceable.h csimclass.h neuron.h forceable.h \
 synapsetarget.h switch.i

dynamicanalogsynapse.o: dynamicanalogsynapse.cpp randgen.h \
 dynamicanalogsynapse.h analogsynapse.h synapse.h advanceable.h \
 csimclass.h globaldefinitions.h neuron.h forceable.h csimlist.h \
 synapsetarget.h

dynamicspikingsynapse.o: dynamicspikingsynapse.cpp \
 dynamicspikingsynapse.h spikingsynapse.h synapse.h advanceable.h \
 csimclass.h globaldefinitions.h neuron.h forceable.h csimlist.h \
 synapsetarget.h spikingneuron.h dynamicsynapse.h

dynamicstdpsynapse.o: dynamicstdpsynapse.cpp dynamicstdpsynapse.h \
 stdpsynapse.h spikingsynapse.h synapse.h advanceable.h csimclass.h \
 globaldefinitions.h neuron.h forceable.h csimlist.h synapsetarget.h \
 needspostspikesynapse.h spikingneuron.h dynamicsynapse.h

extinputneuron.o: extinputneuron.cpp csimerror.h extinputneuron.h \
 neuron.h forceable.h advanceable.h csimclass.h globaldefinitions.h \
 csimlist.h synapsetarget.h analoginputneuron.h analogneuron.h \
 analogsynapse.h synapse.h csiminputclass.h

extoutlifneuron.o: extoutlifneuron.cpp csimerror.h extoutlifneuron.h \
 lifneuron.h spikingneuron.h neuron.h forceable.h advanceable.h \
 csimclass.h globaldefinitions.h csimlist.h synapsetarget.h \
 spikingsynapse.h synapse.h

extoutlinearneuron.o: extoutlinearneuron.cpp extoutlinearneuron.h \
 linearneuron.h analogneuron.h neuron.h forceable.h advanceable.h \
 csimclass.h globaldefinitions.h csimlist.h synapsetarget.h \
 analogsynapse.h synapse.h csimerror.h

extoutsigmoidalneuron.o: extoutsigmoidalneuron.cpp \
 extoutsigmoidalneuron.h sigmoidalneuron.h analogneuron.h neuron.h \
 forceable.h advanceable.h csimclass.h globaldefinitions.h csimlist.h \
 synapsetarget.h analogsynapse.h synapse.h csimerror.h

forceable.o: forceable.cpp forceable.h advanceable.h csimclass.h \
 globaldefinitions.h csimerror.h teacher.h csimlist.h

generic_ion_gates.o: generic_ion_gates.cpp generic_ion_gates.h \
 viongate.h advanceable.h csimclass.h globaldefinitions.h \
 membranepatchsimple.h spikingneuron.h neuron.h forceable.h csimlist.h \
 synapsetarget.h spikingsynapse.h synapse.h ionchannel.h iongate.h \
 csimerror.h

hh_neuron.o: hh_neuron.cpp hh_neuron.h cbneuron.h spikingneuron.h \
 neuron.h forceable.h advanceable.h csimclass.h globaldefinitions.h \
 csimlist.h synapsetarget.h spikingsynapse.h synapse.h ionchannel.h \
 membranepatchsimple.h membranepatch.h ionbuffer.h hh_squid_channels.h \
 viongate.h iongate.h activechannel.h

hh_squid_channels.o: hh_squid_channels.cpp hh_squid_channels.h \
 viongate.h advanceable.h csimclass.h globaldefinitions.h \
 membranepatchsimple.h spikingneuron.h neuron.h forceable.h csimlist.h \
 synapsetarget.h spikingsynapse.h synapse.h ionchannel.h iongate.h \
 activechannel.h

ionbuffer.o: ionbuffer.cpp ionbuffer.h ionchannel.h \
 globaldefinitions.h advanceable.h csimclass.h membranepatchsimple.h \
 spikingneuron.h neuron.h forceable.h csimlist.h synapsetarget.h \
 spikingsynapse.h synapse.h

ionchannel.o: ionchannel.cpp ionchannel.h globaldefinitions.h \
 advanceable.h csimclass.h membranepatchsimple.h spikingneuron.h \
 neuron.h forceable.h csimlist.h synapsetarget.h spikingsynapse.h \
 synapse.h cbneuron.h membranepatch.h ionbuffer.h analoginputneuron.h \
 analogneuron.h analogsynapse.h csiminputclass.h csimerror.h

iongate.o: iongate.cpp iongate.h advanceable.h csimclass.h \
 globaldefinitions.h membranepatchsimple.h spikingneuron.h neuron.h \
 forceable.h csimlist.h synapsetarget.h spikingsynapse.h synapse.h \
 ionchannel.h csimerror.h

lifneuron.o: lifneuron.cpp randgen.h lifneuron.h spikingneuron.h \
 neuron.h forceable.h advanceable.h csimclass.h globaldefinitions.h \
 csimlist.h synapsetarget.h spikingsynapse.h synapse.h csimerror.h

linearneuron.o: linearneuron.cpp randgen.h linearneuron.h \
 analogneuron.h neuron.h forceable.h advanceable.h csimclass.h \
 globaldefinitions.h csimlist.h synapsetarget.h analogsynapse.h \
 synapse.h

membranepatch.o: membranepatch.cpp randgen.h membranepatch.h \
 spikingneuron.h neuron.h forceable.h advanceable.h csimclass.h \
 globaldefinitions.h csimlist.h synapsetarget.h spikingsynapse.h \
 synapse.h ionchannel.h membranepatchsimple.h ionbuffer.h \
 activecachannel.h activechannel.h

membranepatchsimple.o: membranepatchsimple.cpp randgen.h \
 membranepatchsimple.h spikingneuron.h neuron.h forceable.h \
 advanceable.h csimclass.h globaldefinitions.h csimlist.h \
 synapsetarget.h spikingsynapse.h synapse.h ionchannel.h

mexnetwork.o: mexnetwork.cpp mexnetwork.h globaldefinitions.h \
 network.h csimlist.h spikingsynapse.h synapse.h advanceable.h \
 csimclass.h neuron.h forceable.h synapsetarget.h mexrecorder.h \
 recorder.h csimerror.h csimmex.h classlist.i switch.i

mexrecorder.o: mexrecorder.cpp mexrecorder.h recorder.h advanceable.h \
 csimclass.h globaldefinitions.h spikingneuron.h neuron.h forceable.h \
 csimlist.h synapsetarget.h spikingsynapse.h synapse.h

network.o: network.cpp globaldefinitions.h network.h csimlist.h \
 spikingsynapse.h synapse.h advanceable.h csimclass.h neuron.h \
 forceable.h synapsetarget.h csimerror.h spikingneuron.h \
 analogsynapse.h teacher.h recorder.h randgen.h csiminputclass.h

neuron.o: neuron.cpp neuron.h forceable.h advanceable.h csimclass.h \
 globaldefinitions.h csimlist.h synapsetarget.h synapse.h csimerror.h

randgen.o: randgen.cpp randgen.h

recorder.o: recorder.cpp csimclass.h globaldefinitions.h recorder.h \
 advanceable.h csimerror.h spikingneuron.h neuron.h forceable.h \
 csimlist.h synapsetarget.h spikingsynapse.h synapse.h

sigmoidalneuron.o: sigmoidalneuron.cpp sigmoidalneuron.h \
 analogneuron.h neuron.h forceable.h advanceable.h csimclass.h \
 globaldefinitions.h csimlist.h synapsetarget.h analogsynapse.h \
 synapse.h randgen.h

specific_ion_channels.o: specific_ion_channels.cpp \
 specific_ion_channels.h viongate.h advanceable.h csimclass.h \
 globaldefinitions.h membranepatchsimple.h spikingneuron.h neuron.h \
 forceable.h csimlist.h synapsetarget.h spikingsynapse.h synapse.h \
 ionchannel.h iongate.h conciongate.h membranepatch.h ionbuffer.h \
 activechannel.h activecachannel.h csimerror.h cbneuron.h \
 analoginputneuron.h analogneuron.h analogsynapse.h csiminputclass.h

spikinginputneuron.o: spikinginputneuron.cpp spikinginputneuron.h \
 spikingneuron.h neuron.h forceable.h advanceable.h csimclass.h \
 globaldefinitions.h csimlist.h synapsetarget.h spikingsynapse.h \
 synapse.h csiminputclass.h csimerror.h

spikingneuron.o: spikingneuron.cpp spikingneuron.h neuron.h \
 forceable.h advanceable.h csimclass.h globaldefinitions.h csimlist.h \
 synapsetarget.h spikingsynapse.h synapse.h stdpsynapse.h \
 needspostspikesynapse.h network.h

spikingsynapse.o: spikingsynapse.cpp randgen.h spikingneuron.h \
 neuron.h forceable.h advanceable.h csimclass.h globaldefinitions.h \
 csimlist.h synapsetarget.h spikingsynapse.h synapse.h csimerror.h \
 lifneuron.h

spikingteacher.o: spikingteacher.cpp spikingteacher.h teacher.h \
 advanceable.h csimclass.h globaldefinitions.h csimlist.h \
 spikingneuron.h neuron.h forceable.h synapsetarget.h spikingsynapse.h \
 synapse.h csiminputclass.h csimerror.h

staticanalogsynapse.o: staticanalogsynapse.cpp staticanalogsynapse.h \
 analogsynapse.h synapse.h advanceable.h csimclass.h \
 globaldefinitions.h neuron.h forceable.h csimlist.h synapsetarget.h \
 randgen.h

staticspikingsynapse.o: staticspikingsynapse.cpp \
 staticspikingsynapse.h globaldefinitions.h spikingsynapse.h synapse.h \
 advanceable.h csimclass.h neuron.h forceable.h csimlist.h \
 synapsetarget.h

staticstdpsynapse.o: staticstdpsynapse.cpp staticstdpsynapse.h \
 stdpsynapse.h spikingsynapse.h synapse.h advanceable.h csimclass.h \
 globaldefinitions.h neuron.h forceable.h csimlist.h synapsetarget.h \
 needspostspikesynapse.h

stdpsynapse.o: stdpsynapse.cpp stdpsynapse.h spikingsynapse.h \
 synapse.h advanceable.h csimclass.h globaldefinitions.h neuron.h \
 forceable.h csimlist.h synapsetarget.h needspostspikesynapse.h \
 spikingneuron.h csimerror.h

synapse.o: synapse.cpp synapse.h advanceable.h csimclass.h \
 globaldefinitions.h neuron.h forceable.h csimlist.h synapsetarget.h \
 csimerror.h

synapticchannel.o: synapticchannel.cpp synapticchannel.h ionchannel.h \
 globaldefinitions.h advanceable.h csimclass.h membranepatchsimple.h \
 spikingneuron.h neuron.h forceable.h csimlist.h synapsetarget.h \
 spikingsynapse.h synapse.h

teacher.o: teacher.cpp teacher.h advanceable.h csimclass.h \
 globaldefinitions.h csimlist.h forceable.h csimerror.h network.h \
 spikingsynapse.h synapse.h neuron.h synapsetarget.h

viongate.o: viongate.cpp viongate.h advanceable.h csimclass.h \
 globaldefinitions.h membranepatchsimple.h spikingneuron.h neuron.h \
 forceable.h csimlist.h synapsetarget.h spikingsynapse.h synapse.h \
 ionchannel.h iongate.h csimerror.h

