
CSC_MONO=mcs
CSC_WINDOWS=csc

CSCFLAGS=/debug /unsafe

APSVER=2.4
LSVER=1.8

MAKE_WIN= windows=yes
LIBS_WIN=/r:gtk-sharp.dll /r:System.Drawing.dll /r:ICSharpCode.SharpZipLib.dll \
	/r:glib-sharp.dll /r:gdk-sharp.dll
MAKE_MONO=
LIBS_MONO=/pkg:gtk-sharp /r:System.Drawing /r:ICSharpCode.SharpZipLib

ifeq ($(windows),yes)
	CSC=$(CSC_WINDOWS)
	LIBS += $(LIBS_WIN)
	MAKE_OPTIONS += $(MAKE_WIN)
else
	CSC=$(CSC_MONO)
	LIBS += $(LIBS_MONO)
	MAKE_OPTIONS += $(MAKE_MONO)
endif

SOURCES=ImageMap.cs KDTree.cs ScaleSpace.cs \
	SimpleMatrix.cs ImageMatchModel.cs RANSAC.cs Transform.cs \
	LoweDetector.cs GaussianConvolution.cs KeypointXML.cs MatchKeys.cs \
	BondBall.cs AreaFilter.cs
	#CoverageFilter.cs FMM.cs

all:	lib utils bin_install

bin_install:
	cp ICSharpCode.SharpZipLib.dll libsift.dll util/*.exe util/autopanog/*.exe \
		bin/
	cp util/autopano-win32/autopano-win32.exe bin/

lib:	libsift.dll

# To be executed from within Windows
winball:	clean all
	#make windows=yes clean all bin
	cd windows-installer/ && ./build-windows-installer.sh
	#mkdir windows-bin
	#cp bin/*.dll bin/*.exe windows-bin/
	#zip -9 -r windows-$(APSVER)-bin.zip windows-bin/

# To be executed from Linux/Unix
windoc:
	cp util/man/*.[17] util/man/*.pdf util/man/*.txt windows-installer/doc/

libsift.dll:	$(SOURCES)
	$(CSC) $(CSCFLAGS) /target:library /out:libsift.dll \
		$(SOURCES) $(LIBS)

# obsolete
#TestFMM.exe:	FMMTest.cs FMM.cs
#	$(CSC) $(CSCFLAGS) -debug /out:TestFMM.exe /main:FMMTest \
#		FMMTest.cs FMM.cs

testtrans:	Transform.cs
	$(CSC) $(CSCFLAGS) /out:transform.exe /main:AffineTransform2D \
		Transform.cs SimpleMatrix.cs

testdist:	distmetrictest.cs
	$(CSC) $(CSCFLAGS) /out:distmetrictest.exe /main:DistMetricTest \
		distmetrictest.cs $(LIBS)

clean:	distclean
	rm -f bin/*.exe

distclean:
	rm -f libsift.dll
	make $(MAKE_OPTIONS) -C util clean

utils:
	make $(MAKE_OPTIONS) -C util all

release: clean releasetempclean releasetempsetup all bin_install
	# autopano-sift
	svn export . /tmp/$(APSVER)/src
	make -C util/man/
	mkdir /tmp/$(APSVER)/doc
	cp util/man/*.[17] util/man/*.pdf util/man/*.txt /tmp/$(APSVER)/doc
	mkdir /tmp/$(APSVER)/bin
	cp bin/*.exe bin/*.dll bin/autopano-complete.sh bin/autopano-complete.old.sh \
		/tmp/$(APSVER)/bin
	cp IC*.dll /tmp/$(APSVER)/bin
	find /tmp/$(APSVER) -type f -print0 | xargs -0 chmod 644
	find /tmp/$(APSVER) -type d -print0 | xargs -0 chmod 755
	chmod 755 /tmp/$(APSVER)/bin/*.exe /tmp/$(APSVER)/bin/autopano-complete.sh \
		/tmp/$(APSVER)/bin/autopano-complete.old.sh
	find /tmp/$(APSVER) -print0 | xargs -0 chown root:root
	mv /tmp/$(APSVER) /tmp/autopano-sift-$(APSVER)
	cd /tmp && tar cfvz autopano-sift-$(APSVER).tar.gz autopano-sift-$(APSVER)
	# libsift
	mkdir -p /tmp/$(LSVER)/bin
	mkdir -p /tmp/$(LSVER)/src
	cp *.cs Makefile VERSION TODO /tmp/$(LSVER)/src
	cp *.dll /tmp/$(LSVER)/bin
	cp doc/LICENSE /tmp/$(LSVER)/
	cp doc/LIBSIFT-README /tmp/$(LSVER)/README
	find /tmp/$(LSVER) -type f -print0 | xargs -0 chmod 644
	find /tmp/$(LSVER) -type d -print0 | xargs -0 chmod 755
	chmod 755 /tmp/$(LSVER)/bin/*.dll
	mv /tmp/$(LSVER) /tmp/libsift-$(LSVER)
	cd /tmp && tar cfvz libsift-$(LSVER).tar.gz libsift-$(LSVER)

releasetempsetup:
	mkdir /tmp/$(APSVER)
	cp doc/LICENSE doc/README /tmp/$(APSVER)/
	cp CHANGES /tmp/$(APSVER)/

releasetempclean:
	rm -fR /tmp/$(APSVER)
	rm -fR /tmp/autopano-sift-$(APSVER)

