Merged prob.h, factorgraph.h, factograph.cpp from SVN head (broken!)
[libdai.git] / Makefile.win
index 8edf18d..948b4e3 100755 (executable)
@@ -40,92 +40,95 @@ INC=include/dai
 SRC=src\r
 LIB=lib\r
 \r
-# For some reason, we have to set the library path, although it is in the environment\r
-LIBS=/LIBPATH:"C:\Program Files\Microsoft Visual Studio 9.0\VC\ATLMFC\LIB" /LIBPATH:"C:\Program Files\Microsoft Visual Studio 9.0\VC\LIB" /LIBPATH:"C:\Program Files\Microsoft SDKs\Windows\v6.0A\lib"\r
+# Extensions (library, object, executable extensions)\r
+LE=.lib\r
+OE=.obj\r
+EE=.exe\r
+\r
+# Libraries (for some reason, we have to add the VC library path, although it is in the environment)\r
+LIBS=/link $(LIB)/libdai$(LE) /LIBPATH:"C:\Program Files\Microsoft Visual Studio 9.0\VC\ATLMFC\LIB" /LIBPATH:"C:\Program Files\Microsoft Visual Studio 9.0\VC\LIB" /LIBPATH:"C:\Program Files\Microsoft SDKs\Windows\v6.0A\lib"\r
+\r
 # We use the BOOST Program Options library\r
 BOOSTLIBS=/LIBPATH:C:\boost_1_36_0\stage\lib\r
 \r
 # Compile using GNU C++ Compiler\r
 CC=cl\r
-OBJEXT=obj\r
-LIBEXT=lib\r
 \r
 # Flags for the C++ compiler\r
 CCFLAGS=/I./include /IC:\boost_1_36_0 /EHsc /Ox\r
 !IFDEF DEBUG\r
 CCFLAGS=$(CCFLAGS) /Zi /DDAI_DEBUG\r
-!ELSE\r
-CCFLAGS=$(CCFLAGS)\r
 !ENDIF\r
 \r
 !IFDEF WINDOWS\r
 CCFLAGS=$(CCFLAGS) /DWINDOWS\r
 !ENDIF\r
 \r
+OBJECTS=exactinf$(OE)\r
 !IFDEF WITH_BP\r
 CCFLAGS=$(CCFLAGS) /DWITH_BP\r
-OBJECTS=$(OBJECTS) bp.obj\r
+OBJECTS=$(OBJECTS) bp$(OE)\r
 !ENDIF\r
 !IFDEF WITH_MF\r
 CCFLAGS=$(CCFLAGS) /DWITH_MF\r
-OBJECTS=$(OBJECTS) mf.obj\r
+OBJECTS=$(OBJECTS) mf$(OE)\r
 !ENDIF\r
 !IFDEF WITH_HAK\r
 CCFLAGS=$(CCFLAGS) /DWITH_HAK\r
-OBJECTS=$(OBJECTS) hak.obj\r
+OBJECTS=$(OBJECTS) hak$(OE)\r
 !ENDIF\r
 !IFDEF WITH_LC\r
 CCFLAGS=$(CCFLAGS) /DWITH_LC\r
-OBJECTS=$(OBJECTS) lc.obj\r
+OBJECTS=$(OBJECTS) lc$(OE)\r
 !ENDIF\r
 !IFDEF WITH_TREEEP\r
 CCFLAGS=$(CCFLAGS) /DWITH_TREEEP\r
-OBJECTS=$(OBJECTS) treeep.obj\r
+OBJECTS=$(OBJECTS) treeep$(OE)\r
 !ENDIF\r
 !IFDEF WITH_JTREE\r
 CCFLAGS=$(CCFLAGS) /DWITH_JTREE\r
-OBJECTS=$(OBJECTS) jtree.obj\r
+OBJECTS=$(OBJECTS) jtree$(OE)\r
 !ENDIF\r
 !IFDEF WITH_MR\r
 CCFLAGS=$(CCFLAGS) /DWITH_MR\r
-OBJECTS=$(OBJECTS) mr.obj\r
+OBJECTS=$(OBJECTS) mr$(OE)\r
 !ENDIF\r
 \r
 !IFDEF WITH_MATLAB\r
 # Replace the following by the directory where Matlab has been installed\r
-MATLABDIR = /opt/matlab/bin\r
+MATLABDIR=/opt/matlab/bin\r
 # Replace the following with the extension of compiled MEX files on this platform, e.g. .mexglx for x86\r
-MEXEXT = .mexglx\r
-MEX = $(MATLABDIR)/mex\r
-MEXFLAGS = -I.\r
+ME=.mexglx\r
+MEX=$(MATLABDIR)/mex\r
+MEXFLAGS=-I.\r
 !IFDEF DEBUG\r
-MEXFLAGS = $(MEXFLAGS) -g /DDAI_DEBUG\r
+MEXFLAGS=$(MEXFLAGS) -g /DDAI_DEBUG\r
 !ENDIF\r
 !IFDEF NEW_MATLAB\r
-MEXFLAGS = $(MEXFLAGS) -largeArrayDims\r
+MEXFLAGS=$(MEXFLAGS) -largeArrayDims\r
 !ELSE\r
-MEXFLAGS = $(MEXFLAGS) /DSMALLMEM\r
+MEXFLAGS=$(MEXFLAGS) /DSMALLMEM\r
 !ENDIF\r
 !ENDIF\r
 \r
-HEADERS = $(INC)/bipgraph.h $(INC)/diffs.h $(INC)/index.h $(INC)/var.h $(INC)/factor.h $(INC)/varset.h $(INC)/prob.h $(INC)/daialg.h $(INC)/properties.h $(INC)/alldai.h $(INC)/enum.h $(INC)/x2x.h $(INC)/exceptions.h\r
+HEADERS=$(INC)/bipgraph.h $(INC)/diffs.h $(INC)/index.h $(INC)/var.h $(INC)/factor.h $(INC)/varset.h $(INC)/prob.h $(INC)/daialg.h $(INC)/properties.h $(INC)/alldai.h $(INC)/enum.h $(INC)/x2x.h $(INC)/exceptions.h\r
 \r
-TARGETS = tests utils $(LIB)/libdai.lib example.exe\r
-# testregression disabled, it uses sh and awk\r
+TARGETS=tests utils $(LIB)/libdai$(LE) example$(EE)\r
+# testregression disabled, it uses diff\r
 # doc disabled, it uses doxygen\r
 !IFDEF WITH_MATLAB\r
 TARGETS = $(TARGETS) matlabs\r
 !ENDIF\r
 all : $(TARGETS)\r
 \r
-matlabs : matlab/dai.$(MEXEXT) matlab/dai_readfg.$(MEXEXT) matlab/dai_writefg.$(MEXEXT) matlab/dai_removeshortloops.$(MEXEXT) matlab/dai_potstrength.$(MEXEXT)\r
+matlabs : matlab/dai.$(ME) matlab/dai_readfg.$(ME) matlab/dai_writefg.$(ME) matlab/dai_potstrength.$(ME)\r
 \r
-$(LIB)/libdai.lib : bipgraph.obj daialg.obj alldai.obj clustergraph.obj factorgraph.obj properties.obj regiongraph.obj util.obj weightedgraph.obj x2x.obj exceptions.obj $(OBJECTS)\r
-       lib /out:$(LIB)/libdai.lib bipgraph.obj daialg.obj alldai.obj clustergraph.obj factorgraph.obj properties.obj regiongraph.obj util.obj weightedgraph.obj x2x.obj exceptions.obj $(OBJECTS)\r
+$(LIB)/libdai$(LE) : bipgraph$(OE) daialg$(OE) alldai$(OE) clustergraph$(OE) factorgraph$(OE) properties$(OE) regiongraph$(OE) util$(OE) weightedgraph$(OE) x2x$(OE) exceptions$(OE) $(OBJECTS)\r
+       lib /out:$(LIB)/libdai$(LE) bipgraph$(OE) daialg$(OE) alldai$(OE) clustergraph$(OE) factorgraph$(OE) properties$(OE) regiongraph$(OE) util$(OE) weightedgraph$(OE) x2x$(OE) exceptions$(OE) $(OBJECTS)\r
 \r
-tests : tests/test.exe\r
+tests : tests/test$(EE)\r
 \r
-utils : utils/createfg.exe utils/fg2dot.exe utils/remove_short_loops.exe utils/fginfo.exe\r
+utils : utils/createfg$(EE) utils/fg2dot$(EE) utils/fginfo$(EE)\r
 \r
 testregression : tests/test\r
        echo Testing...this can take a while...\r
@@ -135,111 +138,108 @@ doc : $(INC)/*.h $(SRC)/*.cpp doxygen.conf
        doxygen doxygen.conf\r
 \r
 clean :\r
-       del *.obj *.ilk *.pdb *.exe matlab\*.$(MEXEXT) matlab\*.obj tests\test.exe tests\*.pdb tests\*.ilk utils\*.exe utils\*.pdb utils\*.ilk $(LIB)\libdai.lib\r
+       del *$(OE) *.ilk *.pdb *$(EE) matlab\*.$(ME) matlab\*$(OE) tests\test$(EE) tests\*.pdb tests\*.ilk utils\*$(EE) utils\*.pdb utils\*.ilk $(LIB)\libdai$(LE)\r
 \r
 \r
-bipgraph.obj : $(SRC)/bipgraph.cpp $(HEADERS)\r
+bipgraph$(OE) : $(SRC)/bipgraph.cpp $(HEADERS)\r
        $(CC) $(CCFLAGS) -c $(SRC)/bipgraph.cpp\r
 \r
-daialg.obj : $(SRC)/daialg.cpp $(HEADERS)\r
+daialg$(OE) : $(SRC)/daialg.cpp $(HEADERS)\r
        $(CC) $(CCFLAGS) -c $(SRC)/daialg.cpp\r
 \r
-bp.obj : $(SRC)/bp.cpp $(INC)/bp.h $(HEADERS)\r
+exactinf$(OE) : $(SRC)/exactinf.cpp $(INC)/exactinf.h $(HEADERS)\r
+       $(CC) $(CCFLAGS) -c $(SRC)/exactinf.cpp\r
+\r
+bp$(OE) : $(SRC)/bp.cpp $(INC)/bp.h $(HEADERS)\r
        $(CC) $(CCFLAGS) -c $(SRC)/bp.cpp\r
 \r
-lc.obj : $(SRC)/lc.cpp $(INC)/lc.h $(HEADERS)\r
+lc$(OE) : $(SRC)/lc.cpp $(INC)/lc.h $(HEADERS)\r
        $(CC) $(CCFLAGS) -c $(SRC)/lc.cpp\r
 \r
-mf.obj : $(SRC)/mf.cpp $(INC)/mf.h $(HEADERS)\r
+mf$(OE) : $(SRC)/mf.cpp $(INC)/mf.h $(HEADERS)\r
        $(CC) $(CCFLAGS) -c $(SRC)/mf.cpp\r
 \r
-factorgraph.obj : $(SRC)/factorgraph.cpp $(INC)/factorgraph.h $(HEADERS)\r
+factorgraph$(OE) : $(SRC)/factorgraph.cpp $(INC)/factorgraph.h $(HEADERS)\r
        $(CC) $(CCFLAGS) -c $(SRC)/factorgraph.cpp\r
 \r
-util.obj : $(SRC)/util.cpp $(INC)/util.h $(HEADERS)\r
+util$(OE) : $(SRC)/util.cpp $(INC)/util.h $(HEADERS)\r
        $(CC) $(CCFLAGS) -c $(SRC)/util.cpp\r
 \r
-regiongraph.obj : $(SRC)/regiongraph.cpp $(INC)/regiongraph.h $(HEADERS)\r
+regiongraph$(OE) : $(SRC)/regiongraph.cpp $(INC)/regiongraph.h $(HEADERS)\r
        $(CC) $(CCFLAGS) -c $(SRC)/regiongraph.cpp\r
 \r
-hak.obj : $(SRC)/hak.cpp $(INC)/hak.h $(HEADERS) $(INC)/regiongraph.h\r
+hak$(OE) : $(SRC)/hak.cpp $(INC)/hak.h $(HEADERS) $(INC)/regiongraph.h\r
        $(CC) $(CCFLAGS) -c $(SRC)/hak.cpp\r
 \r
-clustergraph.obj : $(SRC)/clustergraph.cpp $(INC)/clustergraph.h $(HEADERS)\r
+clustergraph$(OE) : $(SRC)/clustergraph.cpp $(INC)/clustergraph.h $(HEADERS)\r
        $(CC) $(CCFLAGS) -c $(SRC)/clustergraph.cpp\r
 \r
-jtree.obj : $(SRC)/jtree.cpp $(INC)/jtree.h $(HEADERS) $(INC)/weightedgraph.h $(INC)/clustergraph.h $(INC)/regiongraph.h\r
+jtree$(OE) : $(SRC)/jtree.cpp $(INC)/jtree.h $(HEADERS) $(INC)/weightedgraph.h $(INC)/clustergraph.h $(INC)/regiongraph.h\r
        $(CC) $(CCFLAGS) -c $(SRC)/jtree.cpp\r
 \r
-treeep.obj : $(SRC)/treeep.cpp $(INC)/treeep.h $(HEADERS) $(INC)/weightedgraph.h $(INC)/clustergraph.h $(INC)/regiongraph.h $(INC)/jtree.h\r
+treeep$(OE) : $(SRC)/treeep.cpp $(INC)/treeep.h $(HEADERS) $(INC)/weightedgraph.h $(INC)/clustergraph.h $(INC)/regiongraph.h $(INC)/jtree.h\r
        $(CC) $(CCFLAGS) -c $(SRC)/treeep.cpp\r
 \r
-weightedgraph.obj : $(SRC)/weightedgraph.cpp $(INC)/weightedgraph.h $(HEADERS)\r
+weightedgraph$(OE) : $(SRC)/weightedgraph.cpp $(INC)/weightedgraph.h $(HEADERS)\r
        $(CC) $(CCFLAGS) -c $(SRC)/weightedgraph.cpp\r
 \r
-mr.obj : $(SRC)/mr.cpp $(INC)/mr.h $(HEADERS)\r
+mr$(OE) : $(SRC)/mr.cpp $(INC)/mr.h $(HEADERS)\r
        $(CC) $(CCFLAGS) -c $(SRC)/mr.cpp\r
 \r
-properties.obj : $(SRC)/properties.cpp $(HEADERS)\r
+properties$(OE) : $(SRC)/properties.cpp $(HEADERS)\r
        $(CC) $(CCFLAGS) -c $(SRC)/properties.cpp\r
 \r
-exceptions.obj : $(SRC)/exceptions.cpp $(HEADERS)\r
+exceptions$(OE) : $(SRC)/exceptions.cpp $(HEADERS)\r
        $(CC) $(CCFLAGS) -c $(SRC)/exceptions.cpp\r
 \r
-alldai.obj : $(SRC)/alldai.cpp $(HEADERS)\r
+alldai$(OE) : $(SRC)/alldai.cpp $(HEADERS)\r
        $(CC) $(CCFLAGS) -c $(SRC)/alldai.cpp\r
 \r
-x2x.obj : $(SRC)/x2x.cpp $(HEADERS)\r
+x2x$(OE) : $(SRC)/x2x.cpp $(HEADERS)\r
        $(CC) $(CCFLAGS) -c $(SRC)/x2x.cpp\r
 \r
 \r
 # EXAMPLE\r
 ##########\r
 \r
-example.exe : example.cpp $(HEADERS) $(LIB)/libdai.lib\r
-       $(CC) $(CCFLAGS) /Feexample example.cpp /link $(LIB)/libdai.lib $(LIBS)\r
+example$(EE) : example.cpp $(HEADERS) $(LIB)/libdai$(LE)\r
+       $(CC) $(CCFLAGS) /Feexample example.cpp $(LIBS)\r
 \r
 \r
 # TESTS\r
 ########\r
 \r
-tests/test.exe : tests/test.cpp $(HEADERS) $(LIB)/libdai.lib\r
-       $(CC) $(CCFLAGS) /Fetests/test tests/test.cpp /link $(LIB)/libdai.lib $(LIBS) $(BOOSTLIBS)\r
+tests/test$(EE) : tests/test.cpp $(HEADERS) $(LIB)/libdai$(LE)\r
+       $(CC) $(CCFLAGS) /Fetests/test tests/test.cpp $(LIBS) $(BOOSTLIBS)\r
 \r
 \r
 # MATLAB INTERFACE\r
 ###################\r
 \r
-matlab/dai.$(MEXEXT) : matlab/dai.cpp $(HEADERS) matlab/matlab.obj $(LIB)/libdai.lib\r
-       $(MEX) $(MEXFLAGS) -o matlab/dai matlab/dai.cpp matlab/matlab.obj $(LIB)/libdai.lib\r
-\r
-matlab/dai_readfg.$(MEXEXT) : matlab/dai_readfg.cpp $(HEADERS) factorgraph.obj matlab/matlab.obj\r
-       $(MEX) $(MEXFLAGS) -o matlab/dai_readfg matlab/dai_readfg.cpp factorgraph.obj matlab/matlab.obj\r
+matlab/dai.$(ME) : matlab/dai.cpp $(HEADERS) matlab/matlab$(OE) $(LIB)/libdai$(LE)\r
+       $(MEX) $(MEXFLAGS) -o matlab/dai matlab/dai.cpp matlab/matlab$(OE) $(LIB)/libdai$(LE)\r
 \r
-matlab/dai_writefg.$(MEXEXT) : matlab/dai_writefg.cpp $(HEADERS) factorgraph.obj matlab/matlab.obj\r
-       $(MEX) $(MEXFLAGS) -o matlab/dai_writefg matlab/dai_writefg.cpp factorgraph.obj matlab/matlab.obj\r
+matlab/dai_readfg.$(ME) : matlab/dai_readfg.cpp $(HEADERS) factorgraph$(OE) matlab/matlab$(OE) exceptions$(OE)\r
+       $(MEX) $(MEXFLAGS) -o matlab/dai_readfg matlab/dai_readfg.cpp factorgraph$(OE) matlab/matlab$(OE) exceptions$(OE)\r
 \r
-matlab/dai_removeshortloops.$(MEXEXT) : matlab/dai_removeshortloops.cpp $(HEADERS) factorgraph.obj matlab/matlab.obj\r
-       $(MEX) $(MEXFLAGS) -o matlab/dai_removeshortloops matlab/dai_removeshortloops.cpp factorgraph.obj matlab/matlab.obj\r
+matlab/dai_writefg.$(ME) : matlab/dai_writefg.cpp $(HEADERS) factorgraph$(OE) matlab/matlab$(OE) exceptions$(OE)\r
+       $(MEX) $(MEXFLAGS) -o matlab/dai_writefg matlab/dai_writefg.cpp factorgraph$(OE) matlab/matlab$(OE) exceptions$(OE)\r
 \r
-matlab/dai_potstrength.$(MEXEXT) : matlab/dai_potstrength.cpp $(HEADERS) matlab/matlab.obj\r
-       $(MEX) $(MEXFLAGS) -o matlab/dai_potstrength matlab/dai_potstrength.cpp matlab/matlab.obj\r
+matlab/dai_potstrength.$(ME) : matlab/dai_potstrength.cpp $(HEADERS) matlab/matlab$(OE) exceptions$(OE)\r
+       $(MEX) $(MEXFLAGS) -o matlab/dai_potstrength matlab/dai_potstrength.cpp matlab/matlab$(OE) exceptions$(OE)\r
 \r
-matlab/matlab.obj : matlab/matlab.cpp matlab/matlab.h $(HEADERS)\r
+matlab/matlab$(OE) : matlab/matlab.cpp matlab/matlab.h $(HEADERS)\r
        $(MEX) $(MEXFLAGS) -outdir matlab -c matlab/matlab.cpp\r
 \r
 \r
 # UTILS\r
 ########\r
 \r
-utils/createfg.exe : utils/createfg.cpp $(HEADERS) factorgraph.obj weightedgraph.obj util.obj bipgraph.obj exceptions.obj\r
-       $(CC) $(CCFLAGS) /Feutils/createfg utils/createfg.cpp factorgraph.obj weightedgraph.obj util.obj bipgraph.obj exceptions.obj /link $(LIBS) $(BOOSTLIBS)\r
-\r
-utils/fg2dot.exe : utils/fg2dot.cpp $(HEADERS) factorgraph.obj exceptions.obj\r
-       $(CC) $(CCFLAGS) /Feutils/fg2dot utils/fg2dot.cpp factorgraph.obj exceptions.obj /link $(LIBS)\r
+utils/createfg$(EE) : utils/createfg.cpp $(HEADERS) $(LIB)/libdai$(LE)\r
+       $(CC) $(CCFLAGS) /Feutils/createfg utils/createfg.cpp $(LIBS) $(BOOSTLIBS)\r
 \r
-utils/remove_short_loops.exe : utils/remove_short_loops.cpp $(HEADERS) factorgraph.obj exceptions.obj\r
-       $(CC) $(CCFLAGS) /Feutils/remove_short_loops utils/remove_short_loops.cpp factorgraph.obj exceptions.obj /link $(LIBS)\r
+utils/fg2dot$(EE) : utils/fg2dot.cpp $(HEADERS) $(LIB)/libdai$(LE)\r
+       $(CC) $(CCFLAGS) /Feutils/fg2dot utils/fg2dot.cpp $(LIBS)\r
 \r
-utils/fginfo.exe : utils/fginfo.cpp $(HEADERS) factorgraph.obj bipgraph.obj exceptions.obj\r
-       $(CC) $(CCFLAGS) /Feutils/fginfo utils/fginfo.cpp factorgraph.obj bipgraph.obj exceptions.obj /link $(LIBS)\r
+utils/fginfo$(EE) : utils/fginfo.cpp $(HEADERS) $(LIB)/libdai$(LE)\r
+       $(CC) $(CCFLAGS) /Feutils/fginfo utils/fginfo.cpp $(LIBS)\r