YACC = bison
YFLAGS = -d -l
LEX = flex
LFLAGS = -t -L
CC = g++
CFLAGS=-g -fhandle-exceptions -DLINUX
SUBMAKE   = make 'CC=$(CC)' 'CFLAGS=$(CFLAGS)' \
	'YACC=$(YACC)' 'YFLAGS=$(YFLAGS)' \
	'LEX=$(LEX)' 'LFLAGS=$(LFLAGS)'

all: config comuni/config.h comuni iniprocessor main.o query vm\
	files \
	lfparser pdparser ddparser
	$(CC) $(CFLAGS) -o../analyzer obj/*.o
	@echo Build completo

config:
	@$(SUBMAKE) -C configure 

comuni/config.h: config
	./config comuni/config.h

lfparser:
	@$(SUBMAKE) -C parsers/fparser;

pdparser:
	@$(SUBMAKE) -C parsers/pparser;

ddparser:
	@$(SUBMAKE) -C parsers/cparser;

clean:
	rm -r -f obj
	$(SUBMAKE) -C parsers/cparser clean
	$(SUBMAKE) -C parsers/fparser clean
	$(SUBMAKE) -C parsers/pparser clean
	$(SUBMAKE) -C files clean
	rm -f ../analyzer.exe ../analyzer
	rm -f config config.exe comuni/config.h core

obj_dir:
	@if (test ! -d obj;) then mkdir obj; fi;

comuni: obj_dir 
	@$(SUBMAKE) -C comuni;

iniprocessor: obj_dir 
	@$(SUBMAKE) -C iniprocessor;

vm: obj_dir 
	@$(SUBMAKE) -C vm;

query: obj_dir comuni
	@$(SUBMAKE) -C query;

files: lfparser pdparser ddparser
	@$(SUBMAKE) -C files;

main.o: console/main.cpp
	$(CC) $(CFLAGS) -c -oobj/main.o console/main.cpp

touch:
	touch Makefile
	touch vm/*.*;
	touch vm/coded/*.*;
	touch vm/coded/printf/*.*;
	touch vm/filed/*.*;
	touch vm/packetd/*.*;
	touch query/*.*;
	touch query/eparser/*.*;
	touch query/evm/*.*;
	touch query/qparser/*.*;
	touch parsers/cparser/*.*;
	touch parsers/pparser/*.*;
	touch parsers/fparser/*.*;
	touch iniprocessor/*.*;
	touch files/*.*;
	touch console/*.*;
	touch configure/*.*;
	touch comuni/*.*;
	
dos2unix: clean
	dos2unix Makefile
	dos2unix vm/Makefile vm/*.cpp vm/*.h;
	dos2unix vm/coded/*.cpp vm/coded/*.h;
	dos2unix vm/coded/printf/*.cpp vm/coded/printf/*.h;
	dos2unix vm/filed/*.cpp vm/filed/*.h;
	dos2unix vm/packetd/*.cpp vm/packetd/*.h;
	dos2unix query/Makefile query/*.cpp query/*.h;
	dos2unix query/eparser/*.y query/eparser/*.l;
	dos2unix query/evm/*.cpp query/evm/*.h;
	dos2unix query/qparser/*.cpp query/qparser/*.h;
	dos2unix parsers/cparser/Makefile parsers/cparser/*.cpp parsers/cparser/*.h parsers/cparser/*.y parsers/cparser/*.l;
	dos2unix parsers/pparser/Makefile parsers/pparser/*.cpp parsers/pparser/*.h parsers/pparser/*.y parsers/pparser/*.l;
	dos2unix parsers/fparser/Makefile parsers/fparser/*.cpp parsers/fparser/*.h parsers/fparser/*.y parsers/fparser/*.l;
	dos2unix iniprocessor/Makefile iniprocessor/*.cpp iniprocessor/*.h;
	dos2unix files/*;
	dos2unix console/*.cpp;
	dos2unix configure/Makefile configure/*.cpp;
	dos2unix comuni/Makefile comuni/*.cpp comuni/*.h;
