# Captcha Breaker
#
# Note because I used caml images some lines of this file are probably subject
# to the copyright disclaimer below:


#*********************************************************************#
#                                                                     #
#                          Caml Images                                #
#                                                                     #
#            François Pessaux, projet Cristal, INRIA Rocquencourt     #
#            Pierre Weis, projet Cristal, INRIA Rocquencourt          #
#            Jun Furuse, projet Cristal, INRIA Rocquencourt           #
#                                                                     #
#  Copyright 1999-2004,                                               #
#  Institut National de Recherche en Informatique et en Automatique.  #
#  Distributed only by permission.                                    #
#                                                                     #
#*********************************************************************#

#(* $Id: Makefile.config.in,v 1.28 2004/10/02 15:49:05 weis Exp $ *)

PACKAGE=camlimages
VERSION=2.2.0

MV=mv -f
RM=rm -fR
CP=cp -pfR

CAMLDIR=/usr/lib/ocaml/3.08
LIBDIR=/usr/lib/ocaml/2.08/camlimages

CAMLC = ocamlc 
CAMLOPT = ocamlopt 
CAMLC_LABEL = ocamlc -labels
CAMLOPT_LABEL = ocamlopt -labels
CAMLDEP = ocamldep
CAMLLEX = ocamllex
CAMLYACC = ocamlyacc
CAMLMKTOP = ocamlmktop
CAMLMKLIB = ocamlmklib
CUSTOM=-custom

SUPPORTED=  lablgtk lablgtk2 lablgl bmp ppm gif png jpeg tiff xpm freetype(2) ps

SUPPORT_GIF=true
SUPPORT_PNG=true
SUPPORT_JPEG=true
SUPPORT_TIFF=true
SUPPORT_FREETYPE=true
SUPPORT_FREETYPE2=true
SUPPORT_PS=true
SUPPORT_LABLGTK=true
SUPPORT_GDKPIXBUF=
SUPPORT_LABLGTK2=false

LIBGIF=-lgif
LIBBMP=
LIBJPEG=-ljpeg
LIBTIFF=-ltiff
LIBFREETYPE=-lfreetype -lz
LIBPNG=-lpng -lz
LIBXVTHUMB=
LIBXPM=-L/usr/X11R6/lib -lXpm
LIBPPM=
LIBPS=

CFLAGS=-g -O2
LDFLAGS=
X_CFLAGS=

INCLUDE_FREETYPE=-I/usr/include/freetype2

LABLGTKDIR=/usr/lib/ocaml/3.08/lablgtk
LABLGTK2DIR=/usr/lib/ocaml/3.08/lablgtk2

RANLIB=ranlib

LIBPREFIX =	ci_

WITH_UNIX=	unix.cmxa

WITH_CORELIB  = $(LIBPREFIX)core.cmxa

WITH_GRAPHICS =	graphics.cmxa $(LIBPREFIX)graphics.cmxa

WITH_GIF = 	$(LIBPREFIX)gif.cmxa

WITH_JPEG =	$(LIBPREFIX)jpeg.cmxa

WITH_TIFF =	$(LIBPREFIX)tiff.cmxa

WITH_XPM =	$(LIBPREFIX)xpm.cmxa

WITH_BMP =	$(LIBPREFIX)bmp.cmxa

WITH_PPM =	$(LIBPREFIX)ppm.cmxa

WITH_XVTHUMB=	$(LIBPREFIX)xvthumb.cmxa

WITH_PNG =	$(LIBPREFIX)png.cmxa

WITH_PS =	$(LIBPREFIX)ps.cmxa

WITH_FREETYPE=	$(LIBPREFIX)freetype.cmxa

WITH_CAMLIMAGES = $(WITH_CORELIB) $(WITH_GRAPHICS) $(WITH_FREETYPE) \
	$(WITH_GIF) $(WITH_JPEG) $(WITH_TIFF) $(WITH_BMP) $(WITH_PPM) \
        $(WITH_PNG) $(WITH_XVTHUMB) $(WITH_XPM) $(WITH_PS)

# only lablgtk_img lablgtk2_img is separated from $(WITH_CAMLIMAGES)

WITH_LABLGTKIMAGE = $(LIBPREFIX)lablgtk.cmxa
WITH_LABLGTK2IMAGE = $(LIBPREFIX)lablgtk2.cmxa

######################################

#GSL_INC=-I +bigarray bigarray.cmxa -I /usr/lib/ocaml/site-lib/gsl/ -I /usr/lib/ocaml/3.09.2/gsl/  gsl.cmxa 

GSL_INC=-I +bigarray bigarray.cmxa -I `ocamlfind query gsl` -I /usr/lib/ocaml/site-lib/gsl/ gsl.cmxa 

COMPFLAGS_CAMLIMAGES= -I $(LIBDIR)
LINKFLAGS_CAMLIMAGES= $(addprefix -ccopt \"-L, $(addsuffix\", $(LIBDIR))) $(WITH_CAMLIMAGES) $(GSL_INC)

#IMAGE=./aim/aim.1962.1143183171.jpg 
#IMAGE=./x.jpg
IMAGE=data/rogers/images/out/A0TQGZ.jpg

view: rogers
	./$< ${IMAGE}

aim_c:	aim_c.ml abez.cmx munkres.cmx shape.cmx captchas.cmx lapjv.cmx
	ocamlopt.opt -w s -o aim_c  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx abez.cmx munkres.cmx shape.cmx captchas.cmx aim_c.ml

shrinker_test:	shrinker_test.ml abez.cmx munkres.cmx shape.cmx captchas.cmx shrinker.cmx
	ocamlopt.opt -w s -o shrinker_test  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx abez.cmx munkres.cmx shape.cmx captchas.cmx shrinker.cmx shrinker_test.ml

erode_test:	erode_test.ml abez.cmx munkres.cmx shape.cmx captchas.cmx erode.cmx
	ocamlopt.opt -w s -o erode_test  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx abez.cmx munkres.cmx shape.cmx captchas.cmx erode.cmx erode_test.ml

inverse:	inverse_test.ml abez.cmx munkres.cmx shape.cmx captchas.cmx inverse.cmx
	ocamlopt.opt -w s -o inverse_test  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx abez.cmx munkres.cmx shape.cmx captchas.cmx inverse.cmx inverse_test.ml

hard_pixel_remove:	hard_pixel_remove.ml abez.cmx munkres.cmx shape.cmx captchas.cmx line.cmx
	ocamlopt.opt -w s -o hard_pixel_remove  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx abez.cmx munkres.cmx shape.cmx captchas.cmx line.cmx hard_pixel_remove.ml



skeletonize_test:	skeletonize_test.ml abez.cmx munkres.cmx shape.cmx captchas.cmx skeletonize.cmx erode.cmx bmatrix.cmx
	ocamlopt.opt -w s -o skeletonize_test  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx abez.cmx munkres.cmx shape.cmx captchas.cmx bmatrix.cmx erode.cmx skeletonize.cmx skeletonize_test.ml


rogers:	rogers.ml abez.cmx munkres.cmx shape.cmx captchas.cmx shrinker.cmx contour.cmx pca.cmx rotter.cmx
	ocamlopt.opt -w s -o rogers  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx abez.cmx munkres.cmx shape.cmx captchas.cmx shrinker.cmx contour.cmx pca.cmx rotter.cmx rogers.ml


#digg:	digg.ml abez.cmx munkres.cmx shape.cmx captchas.cmx shrinker.cmx contour.cmx pca.cmx rotter.cmx
#	ocamlopt.opt -w s -o digg  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx abez.cmx munkres.cmx shape.cmx captchas.cmx shrinker.cmx contour.cmx pca.cmx rotter.cmx digg.ml

digg:	digg_solver.ml abez.cmx munkres.cmx shape.cmx contour.cmx captchas.cmx shrinker.cmx pca.cmx rotter.cmx kmeans.cmx digg.cmx
	ocamlopt.opt -w s -o digg  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx abez.cmx munkres.cmx shape.cmx captchas.cmx shrinker.cmx contour.cmx pca.cmx rotter.cmx kmeans.cmx digg.cmx digg_solver.ml

SEEDPEERCMX=bmatrix.cmx digg.cmx erode.cmx skeletonize.cmx seedpeer.cmx 
seedpeer: seedpeer_solver.ml abez.cmx munkres.cmx shape.cmx contour.cmx captchas.cmx shrinker.cmx pca.cmx rotter.cmx kmeans.cmx ${SEEDPEERCMX}
	ocamlopt.opt -w s -o seedpeer  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx abez.cmx munkres.cmx shape.cmx captchas.cmx shrinker.cmx contour.cmx pca.cmx rotter.cmx kmeans.cmx ${SEEDPEERCMX} seedpeer_solver.ml



cumulative_segmenter:	cumulative_segmenter.ml abez.cmx munkres.cmx shape.cmx captchas.cmx shrinker.cmx
	ocamlopt.opt -w s -o cumulative_segmenter  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx abez.cmx munkres.cmx shape.cmx captchas.cmx shrinker.cmx cumulative_segmenter.ml

digg_segmenter:	digg_segmenter.ml abez.cmx munkres.cmx shape.cmx captchas.cmx shrinker.cmx pca.cmx contour.cmx rotter.cmx kmeans.cmx digg.cmx 
	ocamlopt.opt -w s -o digg_segmenter  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx abez.cmx munkres.cmx shape.cmx captchas.cmx shrinker.cmx pca.cmx contour.cmx rotter.cmx kmeans.cmx digg.cmx  digg_segmenter.ml

seedpeer_segmenter:	seedpeer_segmenter.ml abez.cmx munkres.cmx shape.cmx captchas.cmx shrinker.cmx pca.cmx contour.cmx rotter.cmx kmeans.cmx digg.cmx seedpeer.cmx ${SEEDPEERCMX}
	ocamlopt.opt -w s -o seedpeer_segmenter  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx abez.cmx munkres.cmx shape.cmx captchas.cmx shrinker.cmx pca.cmx contour.cmx rotter.cmx kmeans.cmx ${SEEDPEERCMX}  seedpeer_segmenter.ml


graphbased_test:	graphbased_test.ml abez.cmx munkres.cmx shape.cmx captchas.cmx shrinker.cmx contour.cmx graphbased.cmx
	ocamlopt.opt -w s -o graphbased_test  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx abez.cmx munkres.cmx shape.cmx captchas.cmx shrinker.cmx graphbased.cmx contour.cmx graphbased_test.ml

rotter_test:	rotter_test.ml abez.cmx munkres.cmx shape.cmx captchas.cmx shrinker.cmx contour.cmx pca.cmx rotter.cmx
	ocamlopt.opt -w s -o rotter_test  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx abez.cmx munkres.cmx shape.cmx captchas.cmx shrinker.cmx contour.cmx pca.cmx rotter.cmx rotter_test.ml


aim_segmenter:	aim_segmenter.ml abez.cmx munkres.cmx shape.cmx captchas.cmx lapjv.cmx
	ocamlopt.opt -w s -o aim_segmenter  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx abez.cmx munkres.cmx shape.cmx captchas.cmx aim_segmenter.ml

aim_ml:	aim_ml.ml abez.cmx munkres.cmx shape.cmx captchas.cmx lapjv.cmx ml.cmx fft.cmx
	ocamlopt.opt -w s -o aim_ml  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx abez.cmx munkres.cmx shape.cmx fft.cmx ml.cmx captchas.cmx aim_ml.ml

shape_test: shape_test.ml abez.cmx munkres.cmx shape.cmx
	ocamlopt.opt -w s -o shape_test  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} abez.cmx munkres.cmx shape.cmx shape_test.ml

shape_sketch: shape_sketch.ml abez.cmx munkres.cmx shape.cmx contour.cmx captchas.cmx pca.cmx rotter.cmx lapjv.cmx
	ocamlopt.opt -w s -o shape_sketch  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} abez.cmx lapjv.cmx munkres.cmx shape.cmx captchas.cmx  contour.cmx pca.cmx rotter.cmx shape_sketch.ml



fill_segmenter:	fill_segmenter.ml lapjv.cmx captchas.cmx abez.cmx munkres.cmx shape.cmx 
	ocamlopt.opt -w s -o fill_segmenter  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} abez.cmx lapjv.cmx munkres.cmx shape.cmx captchas.cmx fill_segmenter.ml

phpbb: phpbb.ml 
	ocamlopt.opt -w s -o phpbb -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES}   phpbb.ml

ebaum: ebaum.ml 
	ocamlopt.opt -w s -o ebaum -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES}   ebaum.ml

lilo: lilo.ml 
	ocamlopt.opt -w s -o lilo -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES}   lilo.ml


ebaum: ebaum.ml 
	ocamlopt.opt -w s -o ebaum  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES}   ebaum.ml

captchas.cmx: captchas.ml abez.cmx lapjv.cmx munkres.cmx shape.cmx 
	ocamlopt.opt -c -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx munkres.cmx shape.cmx abez.cmx  captchas.ml

shrinker.cmx: shrinker.ml captchas.cmx abez.cmx lapjv.cmx munkres.cmx shape.cmx
	ocamlopt.opt -c -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx munkres.cmx shape.cmx abez.cmx  shrinker.ml

erode.cmx: erode.ml captchas.cmx abez.cmx lapjv.cmx munkres.cmx shape.cmx
	ocamlopt.opt -c -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx munkres.cmx shape.cmx abez.cmx  erode.ml

inverse.cmx: inverse.ml captchas.cmx abez.cmx lapjv.cmx munkres.cmx shape.cmx
	ocamlopt.opt -c -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx munkres.cmx shape.cmx abez.cmx  inverse.ml

line.cmx: line.ml captchas.cmx abez.cmx lapjv.cmx munkres.cmx shape.cmx
	ocamlopt.opt -c -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx munkres.cmx shape.cmx abez.cmx  line.ml


skeletonize.cmx: skeletonize.ml captchas.cmx abez.cmx lapjv.cmx munkres.cmx shape.cmx bmatrix.cmx
	ocamlopt.opt -c -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx munkres.cmx shape.cmx abez.cmx  skeletonize.ml


graphbased.cmx: graphbased.ml captchas.cmx abez.cmx lapjv.cmx munkres.cmx shape.cmx
	ocamlopt.opt -c -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx munkres.cmx shape.cmx abez.cmx  graphbased.ml

digg.cmx: digg.ml captchas.cmx abez.cmx lapjv.cmx munkres.cmx shape.cmx contour.cmx kmeans.cmx
	ocamlopt.opt -c -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx munkres.cmx shape.cmx abez.cmx contour.cmx kmeans.cmx digg.ml

seedpeer.cmx: seedpeer.ml captchas.cmx abez.cmx lapjv.cmx munkres.cmx shape.cmx contour.cmx kmeans.cmx digg.cmx
	ocamlopt.opt -c -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx munkres.cmx shape.cmx abez.cmx contour.cmx kmeans.cmx digg.cmx seedpeer.ml


rotter.cmx: rotter.ml captchas.cmx abez.cmx lapjv.cmx munkres.cmx shape.cmx pca.cmx contour.cmx
	ocamlopt.opt -c -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx munkres.cmx shape.cmx abez.cmx pca.cmx rotter.ml


contour.cmx: contour.ml captchas.cmx abez.cmx lapjv.cmx munkres.cmx shape.cmx shrinker.cmx
	ocamlopt.opt -c -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx munkres.cmx shape.cmx abez.cmx  contour.ml

pca.cmx: pca.ml
	ocamlopt.opt -c ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} pca.ml

bmatrix.cmx: bmatrix.ml
	ocamlopt.opt -c ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} bmatrix.ml

pca_test: pca_test.ml pca.cmx
	ocamlopt.opt -o pca_test -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} pca.cmx pca_test.ml

abez.cmx: abez.ml 
	ocamlopt.opt -c abez.ml

kmeans.cmx: kmeans.ml 
	ocamlopt.opt -c kmeans.ml

munkres.cmx: munkres.ml
	ocamlopt.opt -c munkres.ml

ml.cmx: ml.ml fft.cmx
	ocamlopt.opt -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES}  -c ml.ml

fft.cmx: fft.ml 
	ocamlopt.opt -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES}  -c fft.ml


lapjv.cmx: lapjv.ml abez.cmx
	ocamlopt.opt  -c lapjv.ml

shape.cmx: shape.ml lapjv.cmx abez.cmx
	ocamlopt.opt  -c shape.ml

captcha: captcha.ml 
	ocamlopt.opt -w s -o captcha  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES}   captcha.ml

fmatrix.ml: fmatrix.ml.m4 absmatrix.ml
	m4 fmatrix.ml.m4 > fmatrix.ml

imatrix.ml: imatrix.ml.m4 absmatrix.ml
	m4 imatrix.ml.m4 > imatrix.ml

bmatrix.ml: bmatrix.ml.m4 absmatrix.ml
	m4 bmatrix.ml.m4 > bmatrix.ml


PIRATE_BAYCMX=bmatrix.cmx digg.cmx erode.cmx skeletonize.cmx inverse.cmx line.cmx pirate_bay.cmx 
pirate_bay: pirate_bay_solver.ml abez.cmx munkres.cmx shape.cmx contour.cmx captchas.cmx shrinker.cmx pca.cmx rotter.cmx kmeans.cmx ${PIRATE_BAYCMX}
	ocamlopt.opt -w s -o pirate_bay  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx abez.cmx munkres.cmx shape.cmx captchas.cmx shrinker.cmx contour.cmx pca.cmx rotter.cmx kmeans.cmx ${PIRATE_BAYCMX} pirate_bay_solver.ml

pirate_bay_segmenter:	pirate_bay_segmenter.ml abez.cmx munkres.cmx shape.cmx captchas.cmx shrinker.cmx pca.cmx contour.cmx rotter.cmx kmeans.cmx digg.cmx pirate_bay.cmx ${PIRATE_BAYCMX}
	ocamlopt.opt -w s -o pirate_bay_segmenter  -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES} lapjv.cmx abez.cmx munkres.cmx shape.cmx captchas.cmx shrinker.cmx pca.cmx contour.cmx rotter.cmx kmeans.cmx ${PIRATE_BAYCMX}  pirate_bay_segmenter.ml

pirate_bay.cmx: pirate_bay.ml captchas.cmx abez.cmx lapjv.cmx munkres.cmx shape.cmx contour.cmx kmeans.cmx digg.cmx bmatrix.cmx digg.cmx erode.cmx skeletonize.cmx line.cmx inverse.cmx
	ocamlopt.opt -c -I +camlimages ${COMPFLAGS_CAMLIMAGES}  ${LINKFLAGS_CAMLIMAGES}  pirate_bay.ml


munkres_test: munkres_test.ml munkres.cmx
	ocamlopt.opt -o munkres_test munkres.cmx munkres_test.ml

clean:

IMAGES=

FILE=report

${FILE}.pdf: ${FILE}.tex ${IMAGES}
	pdflatex $<
	pdflatex $<
	pdflatex $<

.SUFFIXES: .pdf .jpg .eps .png 

.png.pdf:
	convert $< $@

.jpg.pdf:
	convert $< $@

.eps.pdf:
	epstopdf $<


clean:
	rm -rf *.cmx
