From 03b1e01a3c67af82de6a747919d4edb2b713502d Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Tue, 7 Oct 2014 20:16:58 +0200
Subject: [PATCH] remake makefiles and move 3party to separate dir

---
 .gitignore                                    |  14 ++
 acat2/makefile                                | 126 ++++++--------
 acat2/test-src/main.cpp                       | 120 -------------
 aconversions2/makefile                        |  82 ++++++---
 aconvert2/makefile                            |  82 ++++++---
 aderivation2/makefile                         |  84 ++++++---
 adeterminize2/makefile                        |  82 ++++++---
 adiff2/makefile                               |  82 ++++++---
 aepsilon2/makefile                            |  82 ++++++---
 aintegral2/makefile                           |  84 ++++++---
 alib2algo/makefile                            | 145 ++++++++++++----
 alib2data/makefile                            | 146 ++++++++++++----
 alib2data/src/{std => debug}/addr2line.cpp    |   0
 alib2data/src/{std => debug}/addr2line.h      |   0
 .../src/{std => debug}/bfdStacktrace.cpp      |   2 +-
 alib2data/src/{std => debug}/bfdStacktrace.h  |   0
 alib2data/src/{std => debug}/sigHandler.cpp   |   5 +-
 alib2data/src/{std => debug}/sigHandler.h     |   0
 .../src/{std => debug}/simpleStacktrace.cpp   |   0
 .../src/{std => debug}/simpleStacktrace.h     |   0
 alib2data/src/exception/AlibException.cpp     |  10 +-
 aminimize2/makefile                           |  82 ++++++---
 anormalize2/makefile                          |  82 ++++++---
 arand2/makefile                               |  82 ++++++---
 astat2/makefile                               |  82 ++++++---
 atrim2/makefile                               |  82 ++++++---
 makefile                                      | 164 ++++++++++++++----
 tests.aconversion.sh                          |   8 +-
 28 files changed, 1165 insertions(+), 563 deletions(-)
 delete mode 100644 acat2/test-src/main.cpp
 rename alib2data/src/{std => debug}/addr2line.cpp (100%)
 rename alib2data/src/{std => debug}/addr2line.h (100%)
 rename alib2data/src/{std => debug}/bfdStacktrace.cpp (99%)
 rename alib2data/src/{std => debug}/bfdStacktrace.h (100%)
 rename alib2data/src/{std => debug}/sigHandler.cpp (90%)
 rename alib2data/src/{std => debug}/sigHandler.h (100%)
 rename alib2data/src/{std => debug}/simpleStacktrace.cpp (100%)
 rename alib2data/src/{std => debug}/simpleStacktrace.h (100%)

diff --git a/.gitignore b/.gitignore
index 16c1db40ed..114ace6b59 100644
--- a/.gitignore
+++ b/.gitignore
@@ -27,11 +27,25 @@
 *.swp
 
 bin/*
+bin-release/*
+bin-debug/*
 lib/*
+lib-release/*
+lib-debug/*
 doc/*
 **/bin
+**/bin-release
+**/bin-debug
 **/doc
 **/obj
+**/obj-release
+**/obj-debug
 **/lib
+**/lib-release
+**/lib-debug
 **/test-bin
+**/test-bin-release
+**/test-bin-debug
 **/test-obj
+**/test-obj-release
+**/test-obj-debug
diff --git a/acat2/makefile b/acat2/makefile
index d6e4d02f16..a485c14859 100644
--- a/acat2/makefile
+++ b/acat2/makefile
@@ -1,33 +1,49 @@
 SHELL:=/bin/bash
 EXECUTABLE:=acat2
-TESTBIN:=acat2test
 
-LDFLAGS= -L../alib2data/lib -rdynamic -lxml2 -lalib2data -Wl,-rpath,.
-TEST_LDFLAGS:= -L../alib2data/lib -rdynamic -lxml2 -lalib2data -lcppunit -Wl,-rpath,.
+LDFLAGS_DEBUG:=-L../alib2data/lib-debug -L../alib2algo/lib-debug -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-OBJECTS:=$(patsubst src/%.cpp, obj/%.o, $(shell find src/ -name *cpp))
-TEST_OBJECTS:=$(patsubst test-src/%.cpp, test-obj/%.o, $(shell find test-src/ -name *cpp))
+LDFLAGS_RELEASE:=-L../alib2data/lib-release -L../alib2algo/lib-release -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-.PHONY: all build test clean
+OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp))
 
-all: build test
+OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp))
 
+.PHONY: all build-debug clean-debug doc
 
+all:
+	@echo "What to do master?"
 
-bin/$(EXECUTABLE): obj/ $(OBJECTS)
-	mkdir -p bin
-	$(CXX) $(OBJECTS) -o $@ $(LDFLAGS)
+debug: build-debug
 
-obj/makefile: makefile
+release: build-release
+
+clean: clean-debug clean-release
+	$(RM) -r doc
+
+
+
+bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG)
+
+bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE)
+
+
+
+obj%/makefile: makefile
 	mkdir -p $(dir $@)
 	echo "SHELL:=/bin/bash" > $@
 	echo "SRCDIR:=" >> $@
 	echo "DEPTH:=" >> $@
+	echo "OBJECTS_BASE_DIR:=" >> $@
 	echo "" >> $@
-	echo "CXXFLAGS:= -std=c++11 -Og -g -c -Wall -pedantic -Wextra -I../../\$$(DEPTH)alib2data/src/ -I/usr/include/libxml2/" >> $@
+	echo "CXXFLAGS:= -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -fPIC -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src/" >> $@
 	echo "" >> $@
 	echo "SOURCES:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")" >> $@
-	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)obj/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
+	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
 	echo "OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))" >> $@
 	echo "SOURCES_DIRS:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)" >> $@
 	echo "OBJECTS_DIRS:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))" >> $@
@@ -38,18 +54,18 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "all: \$$(OBJECTS_DIRS) \$$(OBJECTS)" >> $@
 	echo "" >> $@
-	echo "%.d:" >> $@
-	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
-	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\"))\" >> \$$@" >> $@
+	echo "%.d: makefile" >> $@
+	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
+	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\")) makefile\" >> \$$@" >> $@
 	echo "	@echo \"	\\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\" >> \$$@" >> $@
 	echo "" >> $@
-	echo "%/makefile:" >> $@
+	echo "%/makefile: makefile" >> $@
 	echo "	mkdir -p \$$(dir \$$@)" >> $@
 	echo "	cp makefile \$$@" >> $@
 	echo "" >> $@
 	echo "%/: FORCE | %/makefile" >> $@
 	echo "	@accesstime=\`stat -c %Y \$$@\` && \\" >> $@
-	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ && \\" >> $@
+	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\" >> $@
 	echo "	accesstime2=\`stat -c %Y \$$@\` && \\" >> $@
 	echo "	if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\" >> $@
 	echo "		touch .; \\" >> $@
@@ -59,73 +75,39 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "-include \$$(DEPENDENCIES)" >> $@
 
-obj/: FORCE | obj/makefile
-	$(MAKE) -C $@
 
-$(OBJECTS): obj/
 
+obj-debug/: FORCE | obj-debug/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug CXX_OTHER_FLAGS="-g -O0"
 
-build: bin/$(EXECUTABLE)
+obj-release/: FORCE | obj-release/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release CXX_OTHER_FLAGS="-O3"
 
 
 
-test-bin/$(TESTBIN): test-obj/ bin/$(EXECUTABLE) $(TEST_OBJECTS)
-	mkdir -p test-bin
-	$(CXX) $(TEST_OBJECTS) -o $@ $(TEST_LDFLAGS)
+$(OBJECTS_DEBUG): obj-debug/
+
+$(OBJECTS_RELEASE): obj-release/
 
-test-obj/makefile:
-	mkdir -p $(dir $@)
-	echo "SHELL:=/bin/bash" > $@
-	echo "SRCDIR:=" >> $@
-	echo "DEPTH:=" >> $@
-	echo "" >> $@
-	echo "CXXFLAGS:= -std=c++11 -Og -g -c -Wall -pedantic -Wextra -I../\$$(DEPTH)src/" >> $@
-	echo "" >> $@
-	echo "SOURCES:= \$$(shell find ../\$$(DEPTH)test-src/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")" >> $@
-	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)test-src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)test-obj/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
-	echo "OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))" >> $@
-	echo "SOURCES_DIRS:= \$$(shell find ../\$$(DEPTH)test-src/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)" >> $@
-	echo "OBJECTS_DIRS:= \$$(patsubst ../\$$(DEPTH)test-src/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))" >> $@
-	echo "OBJECTS_DIRS_MAKEFILES:= \$$(patsubst %, %makefile, \$$(OBJECTS_DIRS))" >> $@
-	echo "" >> $@
-	echo ".PHONY: all" >> $@
-	echo ".PRECIOUS: \$$(DEPENDECIES) \$$(OBJECTS_DIRS_MAKEFILES)" >> $@
-	echo "" >> $@
-	echo "all: \$$(OBJECTS_DIRS) \$$(OBJECTS)" >> $@
-	echo "" >> $@
-	echo "%.d:" >> $@
-	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)test-obj/\$$(SRCDIR)%.d,../\$$(DEPTH)test-src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)test-obj/\$$(SRCDIR)%.d,../\$$(DEPTH)test-src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
-	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\"))\" >> \$$@" >> $@
-	echo "	@echo \"	\\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\" >> \$$@" >> $@
-	echo "" >> $@
-	echo "%/makefile:" >> $@
-	echo "	mkdir -p \$$(dir \$$@)" >> $@
-	echo "	cp makefile \$$@" >> $@
-	echo "" >> $@
-	echo "%/: FORCE | %/makefile" >> $@
-	echo "	@accesstime=\`stat -c %Y \$$@\` && \\" >> $@
-	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ && \\" >> $@
-	echo "	accesstime2=\`stat -c %Y \$$@\` && \\" >> $@
-	echo "	if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\" >> $@
-	echo "		touch .; \\" >> $@
-	echo "	fi" >> $@
-	echo "" >> $@
-	echo "FORCE:" >> $@
-	echo "" >> $@
-	echo "-include \$$(DEPENDENCIES)" >> $@
 
-test-obj/: FORCE | test-obj/makefile
-	$(MAKE) -C $@
+build-debug: bin-debug/$(EXECUTABLE)
 
-$(TEST_OBJECTS): test-obj/
+build-release: bin-release/$(EXECUTABLE)
 
-test: test-bin/$(TESTBIN)
-	LD_LIBRARY_PATH="../alib2data/lib" test-bin/$(TESTBIN)
 
 
+clean-debug:
+	$(RM) -r *.o *.d bin-debug obj-debug
+
+clean-release:
+	$(RM) -r *.o *.d bin-release obj-release
+
 
-clean:
-	$(RM) -r *.o *.d bin lib obj test-bin test-obj
 
 FORCE:
 
+
+
+doc:
+	doxygen
+
diff --git a/acat2/test-src/main.cpp b/acat2/test-src/main.cpp
deleted file mode 100644
index 1b3e032257..0000000000
--- a/acat2/test-src/main.cpp
+++ /dev/null
@@ -1,120 +0,0 @@
-//#include "stdafx.h"
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-#include <cppunit/TestResultCollector.h>
-#include <cppunit/TestResult.h>
-
-#include <cppunit/Test.h>
-#include <cppunit/TestFailure.h>
-#include <cppunit/portability/Stream.h>
-#include <cppunit/TestListener.h>
-#include <cppunit/SourceLine.h>
-#include <cppunit/Exception.h>
-
-CPPUNIT_NS_BEGIN
-
-class CPPUNIT_API TestProgressListener : public TestListener
-{
-public:
-  TestProgressListener();
-
-  virtual ~TestProgressListener();
-
-  void startTest( Test *test );
-
-  void addFailure( const TestFailure &failure );
-
-  void endTest( Test *test );
-
-  int getResult() const;
-
-  void printResults() const;
-
-private:
-  TestProgressListener( const TestProgressListener &copy );
-
-  void operator =( const TestProgressListener &copy );
-
-private:
-  int m_Failures;
-  int m_Tests;
-  int m_Assertions;
-  bool m_lastTestFailed;
-};
-
-TestProgressListener::TestProgressListener() : m_Failures( 0 ), m_Tests(0), m_Assertions(0), m_lastTestFailed( false )
-{
-}
-
-TestProgressListener::~TestProgressListener()
-{
-}
-
-void TestProgressListener::startTest( Test * test )
-{
-	stdCOut() << test->getName() << ":" << "\n";
-	stdCOut().flush();
-
-	m_lastTestFailed = false;
-	m_Tests++;
-}
-
-void TestProgressListener::addFailure( const TestFailure &failure )
-{
-	stdCOut() << (failure.isError() ? "error" : "assertion") << " : " << failure.failedTestName() << " : " << failure.sourceLine().lineNumber() << "\n";
-	stdCOut() << "Exception " << failure.thrownException()->message().details();
-
-	m_lastTestFailed = true;
-	if(failure.isError()) m_Failures++; else m_Assertions++;
-}
-
-void TestProgressListener::endTest( Test * test)
-{
-	stdCOut() << "Result (" << test->getName() << ")";
-	stdCOut().flush();
-
-	if ( !m_lastTestFailed )
-		stdCOut() <<  " : OK";
-	else
-		stdCOut() << " : Fail";
-	stdCOut() << "\n\n";
-}
-
-int TestProgressListener::getResult() const {
-	return m_Failures + m_Assertions;
-}
-
-void TestProgressListener::printResults() const {
-	stdCOut() << "Overal result: Tests: " << m_Tests << " Assertions: " << m_Assertions << " Failures: " << m_Failures << "\n";
-}
-
-CPPUNIT_NS_END
-
-int main(int , char*[])
-{
-  CppUnit::TestResult controller;
-
-  CppUnit::TestResultCollector result;
-  controller.addListener( &result );
-
-  CppUnit::TestProgressListener progressListener;
-  controller.addListener( &progressListener );
-
-  // Get the top level suite from the registry
-  CppUnit::Test *suite = CppUnit::TestFactoryRegistry::getRegistry().makeTest();
-
-  // Adds the test to the list of test to run
-  CppUnit::TextUi::TestRunner runner;
-  runner.addTest( suite );
-
-  // Change the default outputter to a compiler error format outputter
-  runner.setOutputter( new CppUnit::CompilerOutputter( &runner.result(),
-                                                       std::cerr ) );
-  // Run the tests.
-  runner.run( controller );
-
-  progressListener.printResults();
-
-  return progressListener.getResult();
-}
diff --git a/aconversions2/makefile b/aconversions2/makefile
index 11a6675285..eca2822c56 100644
--- a/aconversions2/makefile
+++ b/aconversions2/makefile
@@ -1,30 +1,49 @@
 SHELL:=/bin/bash
 EXECUTABLE:=aconversions2
 
-LDFLAGS= -L../alib2data/lib -L../alib2algo/lib -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
+LDFLAGS_DEBUG:=-L../alib2data/lib-debug -L../alib2algo/lib-debug -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-OBJECTS:=$(patsubst src/%.cpp, obj/%.o, $(shell find src/ -name *cpp))
+LDFLAGS_RELEASE:=-L../alib2data/lib-release -L../alib2algo/lib-release -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-.PHONY: all build clean
+OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp))
 
-all: build
+OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp))
 
+.PHONY: all build-debug clean-debug doc
 
+all:
+	@echo "What to do master?"
 
-bin/$(EXECUTABLE): obj/ $(OBJECTS)
-	mkdir -p bin
-	$(CXX) $(OBJECTS) -o $@ $(LDFLAGS)
+debug: build-debug
 
-obj/makefile: makefile
+release: build-release
+
+clean: clean-debug clean-release
+	$(RM) -r doc
+
+
+
+bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG)
+
+bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE)
+
+
+
+obj%/makefile: makefile
 	mkdir -p $(dir $@)
 	echo "SHELL:=/bin/bash" > $@
 	echo "SRCDIR:=" >> $@
 	echo "DEPTH:=" >> $@
+	echo "OBJECTS_BASE_DIR:=" >> $@
 	echo "" >> $@
-	echo "CXXFLAGS:= -std=c++11 -Og -g -c -Wall -pedantic -Wextra -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src -I/usr/include/libxml2/" >> $@
+	echo "CXXFLAGS:= -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -fPIC -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src/" >> $@
 	echo "" >> $@
 	echo "SOURCES:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")" >> $@
-	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)obj/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
+	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
 	echo "OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))" >> $@
 	echo "SOURCES_DIRS:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)" >> $@
 	echo "OBJECTS_DIRS:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))" >> $@
@@ -35,18 +54,18 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "all: \$$(OBJECTS_DIRS) \$$(OBJECTS)" >> $@
 	echo "" >> $@
-	echo "%.d:" >> $@
-	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
-	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\"))\" >> \$$@" >> $@
+	echo "%.d: makefile" >> $@
+	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
+	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\")) makefile\" >> \$$@" >> $@
 	echo "	@echo \"	\\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\" >> \$$@" >> $@
 	echo "" >> $@
-	echo "%/makefile:" >> $@
+	echo "%/makefile: makefile" >> $@
 	echo "	mkdir -p \$$(dir \$$@)" >> $@
 	echo "	cp makefile \$$@" >> $@
 	echo "" >> $@
 	echo "%/: FORCE | %/makefile" >> $@
 	echo "	@accesstime=\`stat -c %Y \$$@\` && \\" >> $@
-	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ && \\" >> $@
+	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\" >> $@
 	echo "	accesstime2=\`stat -c %Y \$$@\` && \\" >> $@
 	echo "	if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\" >> $@
 	echo "		touch .; \\" >> $@
@@ -56,18 +75,39 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "-include \$$(DEPENDENCIES)" >> $@
 
-obj/: FORCE | obj/makefile
-	$(MAKE) -C $@
 
-$(OBJECTS): obj/
+
+obj-debug/: FORCE | obj-debug/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug CXX_OTHER_FLAGS="-g -O0"
+
+obj-release/: FORCE | obj-release/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release CXX_OTHER_FLAGS="-O3"
 
 
-build: bin/$(EXECUTABLE)
 
+$(OBJECTS_DEBUG): obj-debug/
+
+$(OBJECTS_RELEASE): obj-release/
+
+
+build-debug: bin-debug/$(EXECUTABLE)
+
+build-release: bin-release/$(EXECUTABLE)
+
+
+
+clean-debug:
+	$(RM) -r *.o *.d bin-debug obj-debug
+
+clean-release:
+	$(RM) -r *.o *.d bin-release obj-release
 
 
-clean:
-	$(RM) -r *.o *.d bin lib obj test-bin test-obj
 
 FORCE:
 
+
+
+doc:
+	doxygen
+
diff --git a/aconvert2/makefile b/aconvert2/makefile
index 6a5314fdd0..f47522dfd6 100644
--- a/aconvert2/makefile
+++ b/aconvert2/makefile
@@ -1,30 +1,49 @@
 SHELL:=/bin/bash
 EXECUTABLE:=aconvert2
 
-LDFLAGS= -L../alib2data/lib -rdynamic -lxml2 -lalib2data -Wl,-rpath,.
+LDFLAGS_DEBUG:=-L../alib2data/lib-debug -L../alib2algo/lib-debug -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-OBJECTS:=$(patsubst src/%.cpp, obj/%.o, $(shell find src/ -name *cpp))
+LDFLAGS_RELEASE:=-L../alib2data/lib-release -L../alib2algo/lib-release -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-.PHONY: all build clean
+OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp))
 
-all: build
+OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp))
 
+.PHONY: all build-debug clean-debug doc
 
+all:
+	@echo "What to do master?"
 
-bin/$(EXECUTABLE): obj/ $(OBJECTS)
-	mkdir -p bin
-	$(CXX) $(OBJECTS) -o $@ $(LDFLAGS)
+debug: build-debug
 
-obj/makefile: makefile
+release: build-release
+
+clean: clean-debug clean-release
+	$(RM) -r doc
+
+
+
+bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG)
+
+bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE)
+
+
+
+obj%/makefile: makefile
 	mkdir -p $(dir $@)
 	echo "SHELL:=/bin/bash" > $@
 	echo "SRCDIR:=" >> $@
 	echo "DEPTH:=" >> $@
+	echo "OBJECTS_BASE_DIR:=" >> $@
 	echo "" >> $@
-	echo "CXXFLAGS:= -std=c++11 -Og -g -c -Wall -pedantic -Wextra -I../../\$$(DEPTH)alib2data/src/ -I/usr/include/libxml2/" >> $@
+	echo "CXXFLAGS:= -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -fPIC -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src/" >> $@
 	echo "" >> $@
 	echo "SOURCES:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")" >> $@
-	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)obj/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
+	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
 	echo "OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))" >> $@
 	echo "SOURCES_DIRS:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)" >> $@
 	echo "OBJECTS_DIRS:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))" >> $@
@@ -35,18 +54,18 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "all: \$$(OBJECTS_DIRS) \$$(OBJECTS)" >> $@
 	echo "" >> $@
-	echo "%.d:" >> $@
-	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
-	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\"))\" >> \$$@" >> $@
+	echo "%.d: makefile" >> $@
+	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
+	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\")) makefile\" >> \$$@" >> $@
 	echo "	@echo \"	\\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\" >> \$$@" >> $@
 	echo "" >> $@
-	echo "%/makefile:" >> $@
+	echo "%/makefile: makefile" >> $@
 	echo "	mkdir -p \$$(dir \$$@)" >> $@
 	echo "	cp makefile \$$@" >> $@
 	echo "" >> $@
 	echo "%/: FORCE | %/makefile" >> $@
 	echo "	@accesstime=\`stat -c %Y \$$@\` && \\" >> $@
-	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ && \\" >> $@
+	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\" >> $@
 	echo "	accesstime2=\`stat -c %Y \$$@\` && \\" >> $@
 	echo "	if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\" >> $@
 	echo "		touch .; \\" >> $@
@@ -56,18 +75,39 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "-include \$$(DEPENDENCIES)" >> $@
 
-obj/: FORCE | obj/makefile
-	$(MAKE) -C $@
 
-$(OBJECTS): obj/
+
+obj-debug/: FORCE | obj-debug/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug CXX_OTHER_FLAGS="-g -O0"
+
+obj-release/: FORCE | obj-release/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release CXX_OTHER_FLAGS="-O3"
 
 
-build: bin/$(EXECUTABLE)
 
+$(OBJECTS_DEBUG): obj-debug/
+
+$(OBJECTS_RELEASE): obj-release/
+
+
+build-debug: bin-debug/$(EXECUTABLE)
+
+build-release: bin-release/$(EXECUTABLE)
+
+
+
+clean-debug:
+	$(RM) -r *.o *.d bin-debug obj-debug
+
+clean-release:
+	$(RM) -r *.o *.d bin-release obj-release
 
 
-clean:
-	$(RM) -r *.o *.d bin lib obj test-bin test-obj
 
 FORCE:
 
+
+
+doc:
+	doxygen
+
diff --git a/aderivation2/makefile b/aderivation2/makefile
index a9755f66ea..fc0f57bbe5 100644
--- a/aderivation2/makefile
+++ b/aderivation2/makefile
@@ -1,30 +1,49 @@
 SHELL:=/bin/bash
 EXECUTABLE:=aderivation2
 
-LDFLAGS= -L../alib2data/lib -L../alib2algo/lib -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
+LDFLAGS_DEBUG:=-L../alib2data/lib-debug -L../alib2algo/lib-debug -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-OBJECTS:=$(patsubst src/%.cpp, obj/%.o, $(shell find src/ -name *cpp))
+LDFLAGS_RELEASE:=-L../alib2data/lib-release -L../alib2algo/lib-release -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-.PHONY: all build clean
+OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp))
 
-all: build
+OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp))
 
+.PHONY: all build-debug clean-debug doc
 
+all:
+	@echo "What to do master?"
 
-bin/$(EXECUTABLE): obj/ $(OBJECTS)
-	mkdir -p bin
-	$(CXX) $(OBJECTS) -o $@ $(LDFLAGS)
+debug: build-debug
 
-obj/makefile: makefile
+release: build-release
+
+clean: clean-debug clean-release
+	$(RM) -r doc
+
+
+
+bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG)
+
+bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE)
 	mkdir -p $(dir $@)
-	echo "SHELL:=/bin/bash" >> $@
+	$(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE)
+
+
+
+obj%/makefile: makefile
+	mkdir -p $(dir $@)
+	echo "SHELL:=/bin/bash" > $@
 	echo "SRCDIR:=" >> $@
 	echo "DEPTH:=" >> $@
+	echo "OBJECTS_BASE_DIR:=" >> $@
 	echo "" >> $@
-	echo "CXXFLAGS:= -std=c++11 -Og -g -c -Wall -pedantic -Wextra -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src -I/usr/include/libxml2/" >> $@
+	echo "CXXFLAGS:= -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -fPIC -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src/" >> $@
 	echo "" >> $@
 	echo "SOURCES:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")" >> $@
-	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)obj/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
+	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
 	echo "OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))" >> $@
 	echo "SOURCES_DIRS:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)" >> $@
 	echo "OBJECTS_DIRS:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))" >> $@
@@ -35,18 +54,18 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "all: \$$(OBJECTS_DIRS) \$$(OBJECTS)" >> $@
 	echo "" >> $@
-	echo "%.d:" >> $@
-	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" >> \$$@" >> $@
-	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\"))\" >> \$$@" >> $@
+	echo "%.d: makefile" >> $@
+	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
+	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\")) makefile\" >> \$$@" >> $@
 	echo "	@echo \"	\\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\" >> \$$@" >> $@
 	echo "" >> $@
-	echo "%/makefile:" >> $@
+	echo "%/makefile: makefile" >> $@
 	echo "	mkdir -p \$$(dir \$$@)" >> $@
 	echo "	cp makefile \$$@" >> $@
 	echo "" >> $@
 	echo "%/: FORCE | %/makefile" >> $@
 	echo "	@accesstime=\`stat -c %Y \$$@\` && \\" >> $@
-	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ && \\" >> $@
+	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\" >> $@
 	echo "	accesstime2=\`stat -c %Y \$$@\` && \\" >> $@
 	echo "	if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\" >> $@
 	echo "		touch .; \\" >> $@
@@ -56,18 +75,39 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "-include \$$(DEPENDENCIES)" >> $@
 
-obj/: FORCE | obj/makefile
-	$(MAKE) -C $@
 
-$(OBJECTS): obj/
+
+obj-debug/: FORCE | obj-debug/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug CXX_OTHER_FLAGS="-g -O0"
+
+obj-release/: FORCE | obj-release/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release CXX_OTHER_FLAGS="-O3"
 
 
-build: bin/$(EXECUTABLE)
 
+$(OBJECTS_DEBUG): obj-debug/
+
+$(OBJECTS_RELEASE): obj-release/
+
+
+build-debug: bin-debug/$(EXECUTABLE)
+
+build-release: bin-release/$(EXECUTABLE)
+
+
+
+clean-debug:
+	$(RM) -r *.o *.d bin-debug obj-debug
+
+clean-release:
+	$(RM) -r *.o *.d bin-release obj-release
 
 
-clean:
-	$(RM) -r *.o *.d bin lib obj test-bin test-obj
 
 FORCE:
 
+
+
+doc:
+	doxygen
+
diff --git a/adeterminize2/makefile b/adeterminize2/makefile
index 3938bd1f31..70ef8ad206 100644
--- a/adeterminize2/makefile
+++ b/adeterminize2/makefile
@@ -1,30 +1,49 @@
 SHELL:=/bin/bash
 EXECUTABLE:=adeterminize2
 
-LDFLAGS= -L../alib2data/lib -L../alib2algo/lib -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
+LDFLAGS_DEBUG:=-L../alib2data/lib-debug -L../alib2algo/lib-debug -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-OBJECTS:=$(patsubst src/%.cpp, obj/%.o, $(shell find src/ -name *cpp))
+LDFLAGS_RELEASE:=-L../alib2data/lib-release -L../alib2algo/lib-release -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-.PHONY: all build clean
+OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp))
 
-all: build
+OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp))
 
+.PHONY: all build-debug clean-debug doc
 
+all:
+	@echo "What to do master?"
 
-bin/$(EXECUTABLE): obj/ $(OBJECTS)
-	mkdir -p bin
-	$(CXX) $(OBJECTS) -o $@ $(LDFLAGS)
+debug: build-debug
 
-obj/makefile: makefile
+release: build-release
+
+clean: clean-debug clean-release
+	$(RM) -r doc
+
+
+
+bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG)
+
+bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE)
+
+
+
+obj%/makefile: makefile
 	mkdir -p $(dir $@)
 	echo "SHELL:=/bin/bash" > $@
 	echo "SRCDIR:=" >> $@
 	echo "DEPTH:=" >> $@
+	echo "OBJECTS_BASE_DIR:=" >> $@
 	echo "" >> $@
-	echo "CXXFLAGS:= -std=c++11 -Og -g -c -Wall -pedantic -Wextra -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src -I/usr/include/libxml2/" >> $@
+	echo "CXXFLAGS:= -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -fPIC -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src/" >> $@
 	echo "" >> $@
 	echo "SOURCES:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")" >> $@
-	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)obj/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
+	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
 	echo "OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))" >> $@
 	echo "SOURCES_DIRS:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)" >> $@
 	echo "OBJECTS_DIRS:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))" >> $@
@@ -35,18 +54,18 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "all: \$$(OBJECTS_DIRS) \$$(OBJECTS)" >> $@
 	echo "" >> $@
-	echo "%.d:" >> $@
-	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
-	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\"))\" >> \$$@" >> $@
+	echo "%.d: makefile" >> $@
+	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
+	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\")) makefile\" >> \$$@" >> $@
 	echo "	@echo \"	\\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\" >> \$$@" >> $@
 	echo "" >> $@
-	echo "%/makefile:" >> $@
+	echo "%/makefile: makefile" >> $@
 	echo "	mkdir -p \$$(dir \$$@)" >> $@
 	echo "	cp makefile \$$@" >> $@
 	echo "" >> $@
 	echo "%/: FORCE | %/makefile" >> $@
 	echo "	@accesstime=\`stat -c %Y \$$@\` && \\" >> $@
-	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ && \\" >> $@
+	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\" >> $@
 	echo "	accesstime2=\`stat -c %Y \$$@\` && \\" >> $@
 	echo "	if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\" >> $@
 	echo "		touch .; \\" >> $@
@@ -56,18 +75,39 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "-include \$$(DEPENDENCIES)" >> $@
 
-obj/: FORCE | obj/makefile
-	$(MAKE) -C $@
 
-$(OBJECTS): obj/
+
+obj-debug/: FORCE | obj-debug/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug CXX_OTHER_FLAGS="-g -O0"
+
+obj-release/: FORCE | obj-release/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release CXX_OTHER_FLAGS="-O3"
 
 
-build: bin/$(EXECUTABLE)
 
+$(OBJECTS_DEBUG): obj-debug/
+
+$(OBJECTS_RELEASE): obj-release/
+
+
+build-debug: bin-debug/$(EXECUTABLE)
+
+build-release: bin-release/$(EXECUTABLE)
+
+
+
+clean-debug:
+	$(RM) -r *.o *.d bin-debug obj-debug
+
+clean-release:
+	$(RM) -r *.o *.d bin-release obj-release
 
 
-clean:
-	$(RM) -r *.o *.d bin lib obj test-bin test-obj
 
 FORCE:
 
+
+
+doc:
+	doxygen
+
diff --git a/adiff2/makefile b/adiff2/makefile
index 642ce40815..30007b1e18 100644
--- a/adiff2/makefile
+++ b/adiff2/makefile
@@ -1,30 +1,49 @@
 SHELL:=/bin/bash
 EXECUTABLE:=adiff2
 
-LDFLAGS= -L../alib2data/lib -rdynamic -lxml2 -lalib2data -Wl,-rpath,.
+LDFLAGS_DEBUG:=-L../alib2data/lib-debug -L../alib2algo/lib-debug -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-OBJECTS:=$(patsubst src/%.cpp, obj/%.o, $(shell find src/ -name *cpp))
+LDFLAGS_RELEASE:=-L../alib2data/lib-release -L../alib2algo/lib-release -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-.PHONY: all build clean
+OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp))
 
-all: build
+OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp))
 
+.PHONY: all build-debug clean-debug doc
 
+all:
+	@echo "What to do master?"
 
-bin/$(EXECUTABLE): obj/ $(OBJECTS)
-	mkdir -p bin
-	$(CXX) $(OBJECTS) -o $@ $(LDFLAGS)
+debug: build-debug
 
-obj/makefile: makefile
+release: build-release
+
+clean: clean-debug clean-release
+	$(RM) -r doc
+
+
+
+bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG)
+
+bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE)
+
+
+
+obj%/makefile: makefile
 	mkdir -p $(dir $@)
 	echo "SHELL:=/bin/bash" > $@
 	echo "SRCDIR:=" >> $@
 	echo "DEPTH:=" >> $@
+	echo "OBJECTS_BASE_DIR:=" >> $@
 	echo "" >> $@
-	echo "CXXFLAGS:= -std=c++11 -Og -g -c -Wall -pedantic -Wextra -I../../\$$(DEPTH)alib2data/src/ -I/usr/include/libxml2/" >> $@
+	echo "CXXFLAGS:= -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -fPIC -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src/" >> $@
 	echo "" >> $@
 	echo "SOURCES:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")" >> $@
-	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)obj/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
+	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
 	echo "OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))" >> $@
 	echo "SOURCES_DIRS:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)" >> $@
 	echo "OBJECTS_DIRS:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))" >> $@
@@ -35,18 +54,18 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "all: \$$(OBJECTS_DIRS) \$$(OBJECTS)" >> $@
 	echo "" >> $@
-	echo "%.d:" >> $@
-	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
-	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\"))\" >> \$$@" >> $@
+	echo "%.d: makefile" >> $@
+	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
+	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\")) makefile\" >> \$$@" >> $@
 	echo "	@echo \"	\\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\" >> \$$@" >> $@
 	echo "" >> $@
-	echo "%/makefile:" >> $@
+	echo "%/makefile: makefile" >> $@
 	echo "	mkdir -p \$$(dir \$$@)" >> $@
 	echo "	cp makefile \$$@" >> $@
 	echo "" >> $@
 	echo "%/: FORCE | %/makefile" >> $@
 	echo "	@accesstime=\`stat -c %Y \$$@\` && \\" >> $@
-	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ && \\" >> $@
+	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\" >> $@
 	echo "	accesstime2=\`stat -c %Y \$$@\` && \\" >> $@
 	echo "	if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\" >> $@
 	echo "		touch .; \\" >> $@
@@ -56,18 +75,39 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "-include \$$(DEPENDENCIES)" >> $@
 
-obj/: FORCE | obj/makefile
-	$(MAKE) -C $@
 
-$(OBJECTS): obj/
+
+obj-debug/: FORCE | obj-debug/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug CXX_OTHER_FLAGS="-g -O0"
+
+obj-release/: FORCE | obj-release/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release CXX_OTHER_FLAGS="-O3"
 
 
-build: bin/$(EXECUTABLE)
 
+$(OBJECTS_DEBUG): obj-debug/
+
+$(OBJECTS_RELEASE): obj-release/
+
+
+build-debug: bin-debug/$(EXECUTABLE)
+
+build-release: bin-release/$(EXECUTABLE)
+
+
+
+clean-debug:
+	$(RM) -r *.o *.d bin-debug obj-debug
+
+clean-release:
+	$(RM) -r *.o *.d bin-release obj-release
 
 
-clean:
-	$(RM) -r *.o *.d bin lib obj test-bin test-obj
 
 FORCE:
 
+
+
+doc:
+	doxygen
+
diff --git a/aepsilon2/makefile b/aepsilon2/makefile
index a27207f150..61bebcda73 100644
--- a/aepsilon2/makefile
+++ b/aepsilon2/makefile
@@ -1,30 +1,49 @@
 SHELL:=/bin/bash
 EXECUTABLE:=aepsilon2
 
-LDFLAGS= -L../alib2data/lib -L../alib2algo/lib -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
+LDFLAGS_DEBUG:=-L../alib2data/lib-debug -L../alib2algo/lib-debug -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-OBJECTS:=$(patsubst src/%.cpp, obj/%.o, $(shell find src/ -name *cpp))
+LDFLAGS_RELEASE:=-L../alib2data/lib-release -L../alib2algo/lib-release -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-.PHONY: all build clean
+OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp))
 
-all: build
+OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp))
 
+.PHONY: all build-debug clean-debug doc
 
+all:
+	@echo "What to do master?"
 
-bin/$(EXECUTABLE): obj/ $(OBJECTS)
-	mkdir -p bin
-	$(CXX) $(OBJECTS) -o $@ $(LDFLAGS)
+debug: build-debug
 
-obj/makefile: makefile
+release: build-release
+
+clean: clean-debug clean-release
+	$(RM) -r doc
+
+
+
+bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG)
+
+bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE)
+
+
+
+obj%/makefile: makefile
 	mkdir -p $(dir $@)
 	echo "SHELL:=/bin/bash" > $@
 	echo "SRCDIR:=" >> $@
 	echo "DEPTH:=" >> $@
+	echo "OBJECTS_BASE_DIR:=" >> $@
 	echo "" >> $@
-	echo "CXXFLAGS:= -std=c++11 -Og -g -c -Wall -pedantic -Wextra -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src -I/usr/include/libxml2/" >> $@
+	echo "CXXFLAGS:= -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -fPIC -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src/" >> $@
 	echo "" >> $@
 	echo "SOURCES:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")" >> $@
-	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)obj/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
+	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
 	echo "OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))" >> $@
 	echo "SOURCES_DIRS:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)" >> $@
 	echo "OBJECTS_DIRS:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))" >> $@
@@ -35,18 +54,18 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "all: \$$(OBJECTS_DIRS) \$$(OBJECTS)" >> $@
 	echo "" >> $@
-	echo "%.d:" >> $@
-	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
-	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\"))\" >> \$$@" >> $@
+	echo "%.d: makefile" >> $@
+	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
+	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\")) makefile\" >> \$$@" >> $@
 	echo "	@echo \"	\\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\" >> \$$@" >> $@
 	echo "" >> $@
-	echo "%/makefile:" >> $@
+	echo "%/makefile: makefile" >> $@
 	echo "	mkdir -p \$$(dir \$$@)" >> $@
 	echo "	cp makefile \$$@" >> $@
 	echo "" >> $@
 	echo "%/: FORCE | %/makefile" >> $@
 	echo "	@accesstime=\`stat -c %Y \$$@\` && \\" >> $@
-	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ && \\" >> $@
+	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\" >> $@
 	echo "	accesstime2=\`stat -c %Y \$$@\` && \\" >> $@
 	echo "	if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\" >> $@
 	echo "		touch .; \\" >> $@
@@ -56,18 +75,39 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "-include \$$(DEPENDENCIES)" >> $@
 
-obj/: FORCE | obj/makefile
-	$(MAKE) -C $@
 
-$(OBJECTS): obj/
+
+obj-debug/: FORCE | obj-debug/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug CXX_OTHER_FLAGS="-g -O0"
+
+obj-release/: FORCE | obj-release/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release CXX_OTHER_FLAGS="-O3"
 
 
-build: bin/$(EXECUTABLE)
 
+$(OBJECTS_DEBUG): obj-debug/
+
+$(OBJECTS_RELEASE): obj-release/
+
+
+build-debug: bin-debug/$(EXECUTABLE)
+
+build-release: bin-release/$(EXECUTABLE)
+
+
+
+clean-debug:
+	$(RM) -r *.o *.d bin-debug obj-debug
+
+clean-release:
+	$(RM) -r *.o *.d bin-release obj-release
 
 
-clean:
-	$(RM) -r *.o *.d bin lib obj test-bin test-obj
 
 FORCE:
 
+
+
+doc:
+	doxygen
+
diff --git a/aintegral2/makefile b/aintegral2/makefile
index 6d59646d2a..570e9c41d9 100644
--- a/aintegral2/makefile
+++ b/aintegral2/makefile
@@ -1,30 +1,49 @@
 SHELL:=/bin/bash
 EXECUTABLE:=aintegral2
 
-LDFLAGS= -L../alib2data/lib -L../alib2algo/lib -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
+LDFLAGS_DEBUG:=-L../alib2data/lib-debug -L../alib2algo/lib-debug -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-OBJECTS:=$(patsubst src/%.cpp, obj/%.o, $(shell find src/ -name *cpp))
+LDFLAGS_RELEASE:=-L../alib2data/lib-release -L../alib2algo/lib-release -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-.PHONY: all build clean
+OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp))
 
-all: build
+OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp))
 
+.PHONY: all build-debug clean-debug doc
 
+all:
+	@echo "What to do master?"
 
-bin/$(EXECUTABLE): obj/ $(OBJECTS)
-	mkdir -p bin
-	$(CXX) $(OBJECTS) -o $@ $(LDFLAGS)
+debug: build-debug
 
-obj/makefile: makefile
+release: build-release
+
+clean: clean-debug clean-release
+	$(RM) -r doc
+
+
+
+bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG)
+
+bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE)
 	mkdir -p $(dir $@)
-	echo "SHELL:=/bin/bash" >> $@
+	$(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE)
+
+
+
+obj%/makefile: makefile
+	mkdir -p $(dir $@)
+	echo "SHELL:=/bin/bash" > $@
 	echo "SRCDIR:=" >> $@
 	echo "DEPTH:=" >> $@
+	echo "OBJECTS_BASE_DIR:=" >> $@
 	echo "" >> $@
-	echo "CXXFLAGS:= -std=c++11 -Og -g -c -Wall -pedantic -Wextra -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src -I/usr/include/libxml2/" >> $@
+	echo "CXXFLAGS:= -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -fPIC -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src/" >> $@
 	echo "" >> $@
 	echo "SOURCES:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")" >> $@
-	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)obj/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
+	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
 	echo "OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))" >> $@
 	echo "SOURCES_DIRS:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)" >> $@
 	echo "OBJECTS_DIRS:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))" >> $@
@@ -35,18 +54,18 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "all: \$$(OBJECTS_DIRS) \$$(OBJECTS)" >> $@
 	echo "" >> $@
-	echo "%.d:" >> $@
-	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" >> \$$@" >> $@
-	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\"))\" >> \$$@" >> $@
+	echo "%.d: makefile" >> $@
+	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
+	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\")) makefile\" >> \$$@" >> $@
 	echo "	@echo \"	\\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\" >> \$$@" >> $@
 	echo "" >> $@
-	echo "%/makefile:" >> $@
+	echo "%/makefile: makefile" >> $@
 	echo "	mkdir -p \$$(dir \$$@)" >> $@
 	echo "	cp makefile \$$@" >> $@
 	echo "" >> $@
 	echo "%/: FORCE | %/makefile" >> $@
 	echo "	@accesstime=\`stat -c %Y \$$@\` && \\" >> $@
-	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ && \\" >> $@
+	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\" >> $@
 	echo "	accesstime2=\`stat -c %Y \$$@\` && \\" >> $@
 	echo "	if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\" >> $@
 	echo "		touch .; \\" >> $@
@@ -56,18 +75,39 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "-include \$$(DEPENDENCIES)" >> $@
 
-obj/: FORCE | obj/makefile
-	$(MAKE) -C $@
 
-$(OBJECTS): obj/
+
+obj-debug/: FORCE | obj-debug/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug CXX_OTHER_FLAGS="-g -O0"
+
+obj-release/: FORCE | obj-release/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release CXX_OTHER_FLAGS="-O3"
 
 
-build: bin/$(EXECUTABLE)
 
+$(OBJECTS_DEBUG): obj-debug/
+
+$(OBJECTS_RELEASE): obj-release/
+
+
+build-debug: bin-debug/$(EXECUTABLE)
+
+build-release: bin-release/$(EXECUTABLE)
+
+
+
+clean-debug:
+	$(RM) -r *.o *.d bin-debug obj-debug
+
+clean-release:
+	$(RM) -r *.o *.d bin-release obj-release
 
 
-clean:
-	$(RM) -r *.o *.d bin lib obj test-bin test-obj
 
 FORCE:
 
+
+
+doc:
+	doxygen
+
diff --git a/alib2algo/makefile b/alib2algo/makefile
index 8aee9884a6..d37762de57 100644
--- a/alib2algo/makefile
+++ b/alib2algo/makefile
@@ -1,33 +1,56 @@
 SHELL:=/bin/bash
-LIBRARY:=libalib2algo.so 
+LIBRARY:=libalib2algo.so
 TESTBIN:=alib2test
 
-LDFLAGS:= -L../alib2data/lib -rdynamic -shared -lalib2data
-TEST_LDFLAGS:= -L../alib2data/lib -L../alib2algo/lib -rdynamic -lalib2data -lalib2algo -lcppunit -Wl,-rpath,.
+LDFLAGS_DEBUG:=-L../alib2data/lib-debug -rdynamic -shared -lxml2
+TEST_LDFLAGS_DEBUG:= -Llib-debug -L../alib2data/lib-debug -rdynamic -lxml2 -lalib2data -lalib2algo -lcppunit -Wl,-rpath,.
 
-OBJECTS:=$(patsubst src/%.cpp, obj/%.o, $(shell find src/ -name *cpp))
-TEST_OBJECTS:=$(patsubst test-src/%.cpp, test-obj/%.o, $(shell find test-src/ -name *cpp))
+LDFLAGS_RELEASE:=-L../alib2data/lib-release -rdynamic -shared -lxml2
+TEST_LDFLAGS_RELEASE:= -Llib-release -L../alib2data/lib-release -rdynamic -lxml2 -lalib2data -lalib2algo -lcppunit -Wl,-rpath,.
 
-.PHONY: all build test clean
+OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp))
+TEST_OBJECTS_DEBUG:=$(patsubst test-src/%.cpp, test-obj-debug/%.o, $(shell find test-src/ -name *cpp))
 
-all: build test
+OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(filter-out $(wildcard src/debug/*), $(shell find src/ -name *cpp)))
+TEST_OBJECTS_RELEASE:=$(patsubst test-src/%.cpp, test-obj-release/%.o, $(shell find test-src/ -name *cpp))
 
+.PHONY: all build-debug build-tests-debug clean-debug doc
 
+all:
+	@echo "What to do master?"
 
-lib/$(LIBRARY): obj/ $(OBJECTS)
-	mkdir -p lib
-	$(CXX) $(OBJECTS) -o $@ $(LDFLAGS)
+debug: build-debug build-tests-debug
 
-obj/makefile: makefile
+release: build-release build-tests-release
+
+clean: clean-debug clean-release
+	$(RM) -r doc
+
+test: unit-test-debug unit-test-release
+
+
+
+lib-debug/$(LIBRARY): obj-debug/ $(OBJECTS_DEBUG)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG)
+
+lib-release/$(LIBRARY): obj-release/ $(OBJECTS_RELEASE)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE)
+
+
+
+obj%/makefile: makefile
 	mkdir -p $(dir $@)
 	echo "SHELL:=/bin/bash" > $@
 	echo "SRCDIR:=" >> $@
 	echo "DEPTH:=" >> $@
+	echo "OBJECTS_BASE_DIR:=" >> $@
 	echo "" >> $@
-	echo "CXXFLAGS:= -std=c++11 -O0 -g -c -Wall -pedantic -Wextra -fPIC -I../../\$$(DEPTH)alib2data/src/" >> $@
+	echo "CXXFLAGS:= -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -fPIC -I../../\$$(DEPTH)alib2data/src/" >> $@
 	echo "" >> $@
 	echo "SOURCES:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")" >> $@
-	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)obj/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
+	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
 	echo "OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))" >> $@
 	echo "SOURCES_DIRS:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)" >> $@
 	echo "OBJECTS_DIRS:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))" >> $@
@@ -38,9 +61,9 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "all: \$$(OBJECTS_DIRS) \$$(OBJECTS)" >> $@
 	echo "" >> $@
-	echo "%.d:" >> $@
-	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
-	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\"))\" >> \$$@" >> $@
+	echo "%.d: makefile" >> $@
+	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
+	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\")) makefile\" >> \$$@" >> $@
 	echo "	@echo \"	\\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\" >> \$$@" >> $@
 	echo "" >> $@
 	echo "%/makefile: makefile" >> $@
@@ -49,7 +72,7 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "%/: FORCE | %/makefile" >> $@
 	echo "	@accesstime=\`stat -c %Y \$$@\` && \\" >> $@
-	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ && \\" >> $@
+	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\" >> $@
 	echo "	accesstime2=\`stat -c %Y \$$@\` && \\" >> $@
 	echo "	if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\" >> $@
 	echo "		touch .; \\" >> $@
@@ -59,30 +82,48 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "-include \$$(DEPENDENCIES)" >> $@
 
-obj/: FORCE | obj/makefile
-	$(MAKE) -C $@
 
-$(OBJECTS): obj/
+
+obj-debug/: FORCE | obj-debug/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug CXX_OTHER_FLAGS="-g -O0 -DDEBUG"
+
+obj-release/: FORCE | obj-release/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release CXX_OTHER_FLAGS="-O3 -DRELEASE"
+
+
+
+$(OBJECTS_DEBUG): obj-debug/
+
+$(OBJECTS_RELEASE): obj-release/
+
+
+build-debug: lib-debug/$(LIBRARY)
+
+build-release: lib-release/$(LIBRARY)
+
 
 
-build: lib/$(LIBRARY)
+test-bin-debug/$(TESTBIN): test-obj-debug/ lib-debug/$(LIBRARY) $(TEST_OBJECTS_DEBUG)
+	mkdir -p $(dir $@)
+	$(CXX) $(TEST_OBJECTS_DEBUG) -o $@ $(TEST_LDFLAGS_DEBUG)
 
+test-bin-release/$(TESTBIN): test-obj-release/ lib-release/$(LIBRARY) $(TEST_OBJECTS_RELEASE)
+	mkdir -p $(dir $@)
+	$(CXX) $(TEST_OBJECTS_RELEASE) -o $@ $(TEST_LDFLAGS_RELEASE)
 
 
-test-bin/$(TESTBIN): test-obj/ lib/$(LIBRARY) $(TEST_OBJECTS)
-	mkdir -p test-bin
-	$(CXX) $(TEST_OBJECTS) -o $@ $(TEST_LDFLAGS)
 
-test-obj/makefile: makefile
+test-obj%/makefile: makefile
 	mkdir -p $(dir $@)
 	echo "SHELL:=/bin/bash" > $@
 	echo "SRCDIR:=" >> $@
 	echo "DEPTH:=" >> $@
+	echo "OBJECTS_BASE_DIR:=" >> $@
 	echo "" >> $@
-	echo "CXXFLAGS:= -std=c++11 -O0 -g -c -Wall -pedantic -Wextra -I/usr/include/libxml2 -I../\$$(DEPTH)src/ -I../../\$$(DEPTH)alib2data/src" >> $@
+	echo "CXXFLAGS:= -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -I../\$$(DEPTH)src/ -I../../\$$(DEPTH)alib2data/src/" >> $@
 	echo "" >> $@
 	echo "SOURCES:= \$$(shell find ../\$$(DEPTH)test-src/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")" >> $@
-	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)test-src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)test-obj/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
+	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)test-src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
 	echo "OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))" >> $@
 	echo "SOURCES_DIRS:= \$$(shell find ../\$$(DEPTH)test-src/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)" >> $@
 	echo "OBJECTS_DIRS:= \$$(patsubst ../\$$(DEPTH)test-src/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))" >> $@
@@ -93,9 +134,9 @@ test-obj/makefile: makefile
 	echo "" >> $@
 	echo "all: \$$(OBJECTS_DIRS) \$$(OBJECTS)" >> $@
 	echo "" >> $@
-	echo "%.d:" >> $@
-	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)test-obj/\$$(SRCDIR)%.d,../\$$(DEPTH)test-src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)test-obj/\$$(SRCDIR)%.d,../\$$(DEPTH)test-src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
-	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\"))\" >> \$$@" >> $@
+	echo "%.d: makefile" >> $@
+	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)test-src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)test-src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
+	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\")) makefile\" >> \$$@" >> $@
 	echo "	@echo \"	\\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\" >> \$$@" >> $@
 	echo "" >> $@
 	echo "%/makefile: makefile" >> $@
@@ -104,7 +145,7 @@ test-obj/makefile: makefile
 	echo "" >> $@
 	echo "%/: FORCE | %/makefile" >> $@
 	echo "	@accesstime=\`stat -c %Y \$$@\` && \\" >> $@
-	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ && \\" >> $@
+	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\" >> $@
 	echo "	accesstime2=\`stat -c %Y \$$@\` && \\" >> $@
 	echo "	if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\" >> $@
 	echo "		touch .; \\" >> $@
@@ -114,20 +155,48 @@ test-obj/makefile: makefile
 	echo "" >> $@
 	echo "-include \$$(DEPENDENCIES)" >> $@
 
-test-obj/: FORCE | test-obj/makefile
-	$(MAKE) -C $@
 
-$(TEST_OBJECTS): test-obj/
 
-test: test-bin/$(TESTBIN)
-	LD_LIBRARY_PATH="lib;../alib2data/lib" test-bin/$(TESTBIN)
+test-obj-debug/: FORCE | test-obj-debug/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-debug CXX_OTHER_FLAGS="-g -O0 -DDEBUG"
+
+test-obj-release/: FORCE | test-obj-release/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-release CXX_OTHER_FLAGS="-O3 -DRELEASE"
+
+
+
+$(TEST_OBJECTS_DEBUG): test-obj-debug/
+
+$(TEST_OBJECTS_RELEASE): test-obj-release/
+
+
+
+build-tests-debug: test-bin-debug/$(TESTBIN)
+
+build-tests-release: test-bin-release/$(TESTBIN)
 
 
 
-clean:
-	$(RM) -r *.o *.d lib obj test-bin test-obj
+unit-test-debug: build-tests-debug
+	LD_LIBRARY_PATH="../alib2data/lib-debug;lib-debug" test-bin-debug/$(TESTBIN)
+
+unit-test-release: build-tests-release
+	LD_LIBRARY_PATH="../alib2data/lib-release;lib-release" test-bin-release/$(TESTBIN)
+
+
+
+clean-debug:
+	$(RM) -r *.o *.d lib-debug obj-debug test-bin-debug test-obj-debug
+
+clean-release:
+	$(RM) -r *.o *.d lib-release obj-release test-bin-release test-obj-release
+
+
 
 FORCE:
 
+
+
 doc:
 	doxygen
+
diff --git a/alib2data/makefile b/alib2data/makefile
index f138e3cb54..7b0e587e62 100644
--- a/alib2data/makefile
+++ b/alib2data/makefile
@@ -1,33 +1,58 @@
 SHELL:=/bin/bash
-LIBRARY:=libalib2data.so 
+LIBRARY:=libalib2data.so
 TESTBIN:=alib2test
 
-LDFLAGS:=-lbfd -liberty -lz -ldl -rdynamic -shared -lxml2
-TEST_LDFLAGS:= -L../alib2data/lib -rdynamic -lxml2 -lalib2data -lcppunit -Wl,-rpath,.
+LDFLAGS_DEBUG:=-lbfd -liberty -lz -ldl -rdynamic -shared -lxml2
+TEST_LDFLAGS_DEBUG:= -Llib-debug -rdynamic -lxml2 -lalib2data -lcppunit -Wl,-rpath,.
 
-OBJECTS:=$(patsubst src/%.cpp, obj/%.o, $(shell find src/ -name *cpp))
-TEST_OBJECTS:=$(patsubst test-src/%.cpp, test-obj/%.o, $(shell find test-src/ -name *cpp))
+LDFLAGS_RELEASE:=-rdynamic -shared -lxml2
+TEST_LDFLAGS_RELEASE:= -Llib-release -rdynamic -lxml2 -lalib2data -lcppunit -Wl,-rpath,.
 
-.PHONY: all build test clean doc
+OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp))
+TEST_OBJECTS_DEBUG:=$(patsubst test-src/%.cpp, test-obj-debug/%.o, $(shell find test-src/ -name *cpp))
 
-all: build test
+OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(filter-out $(wildcard src/debug/*), $(shell find src/ -name *cpp)))
+TEST_OBJECTS_RELEASE:=$(patsubst test-src/%.cpp, test-obj-release/%.o, $(shell find test-src/ -name *cpp))
 
+.PHONY: all build-debug build-tests-debug clean-debug doc
 
 
-lib/$(LIBRARY): obj/ $(OBJECTS)
-	mkdir -p lib
-	$(CXX) $(OBJECTS) -o $@ $(LDFLAGS)
 
-obj/makefile: makefile
+all:
+	@echo "What to do master?"
+
+debug: build-debug build-tests-debug
+
+release: build-release build-tests-release
+
+clean: clean-debug clean-release
+	$(RM) -r doc
+
+test: unit-test-debug unit-test-release
+
+
+
+lib-debug/$(LIBRARY): obj-debug/ $(OBJECTS_DEBUG)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG)
+
+lib-release/$(LIBRARY): obj-release/ $(OBJECTS_RELEASE)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE)
+
+
+
+obj%/makefile: makefile
 	mkdir -p $(dir $@)
 	echo "SHELL:=/bin/bash" > $@
 	echo "SRCDIR:=" >> $@
 	echo "DEPTH:=" >> $@
+	echo "OBJECTS_BASE_DIR:=" >> $@
 	echo "" >> $@
-	echo "CXXFLAGS:= -std=c++11 -O0 -g -c -Wall -pedantic -Wextra -fPIC -I/usr/include/libxml2/" >> $@
+	echo "CXXFLAGS:= -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -fPIC -I/usr/include/libxml2/" >> $@
 	echo "" >> $@
 	echo "SOURCES:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")" >> $@
-	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)obj/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
+	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
 	echo "OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))" >> $@
 	echo "SOURCES_DIRS:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)" >> $@
 	echo "OBJECTS_DIRS:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))" >> $@
@@ -38,9 +63,9 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "all: \$$(OBJECTS_DIRS) \$$(OBJECTS)" >> $@
 	echo "" >> $@
-	echo "%.d:" >> $@
-	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
-	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\"))\" >> \$$@" >> $@
+	echo "%.d: makefile" >> $@
+	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
+	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\")) makefile\" >> \$$@" >> $@
 	echo "	@echo \"	\\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\" >> \$$@" >> $@
 	echo "" >> $@
 	echo "%/makefile: makefile" >> $@
@@ -49,7 +74,7 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "%/: FORCE | %/makefile" >> $@
 	echo "	@accesstime=\`stat -c %Y \$$@\` && \\" >> $@
-	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ && \\" >> $@
+	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\" >> $@
 	echo "	accesstime2=\`stat -c %Y \$$@\` && \\" >> $@
 	echo "	if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\" >> $@
 	echo "		touch .; \\" >> $@
@@ -59,30 +84,48 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "-include \$$(DEPENDENCIES)" >> $@
 
-obj/: FORCE | obj/makefile
-	$(MAKE) -C $@
 
-$(OBJECTS): obj/
 
+obj-debug/: FORCE | obj-debug/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug CXX_OTHER_FLAGS="-g -O0 -DDEBUG"
+
+obj-release/: FORCE | obj-release/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release CXX_OTHER_FLAGS="-O3 -DRELEASE"
+
+
+
+$(OBJECTS_DEBUG): obj-debug/
 
-build: lib/$(LIBRARY)
+$(OBJECTS_RELEASE): obj-release/
 
 
+build-debug: lib-debug/$(LIBRARY)
 
-test-bin/$(TESTBIN): test-obj/ lib/$(LIBRARY) $(TEST_OBJECTS)
-	mkdir -p test-bin
-	$(CXX) $(TEST_OBJECTS) -o $@ $(TEST_LDFLAGS)
+build-release: lib-release/$(LIBRARY)
 
-test-obj/makefile: makefile
+
+
+test-bin-debug/$(TESTBIN): test-obj-debug/ lib-debug/$(LIBRARY) $(TEST_OBJECTS_DEBUG)
+	mkdir -p $(dir $@)
+	$(CXX) $(TEST_OBJECTS_DEBUG) -o $@ $(TEST_LDFLAGS_DEBUG)
+
+test-bin-release/$(TESTBIN): test-obj-release/ lib-release/$(LIBRARY) $(TEST_OBJECTS_RELEASE)
+	mkdir -p $(dir $@)
+	$(CXX) $(TEST_OBJECTS_RELEASE) -o $@ $(TEST_LDFLAGS_RELEASE)
+
+
+
+test-obj%/makefile: makefile
 	mkdir -p $(dir $@)
 	echo "SHELL:=/bin/bash" > $@
 	echo "SRCDIR:=" >> $@
 	echo "DEPTH:=" >> $@
+	echo "OBJECTS_BASE_DIR:=" >> $@
 	echo "" >> $@
-	echo "CXXFLAGS:= -std=c++11 -O0 -g -c -Wall -pedantic -Wextra -I../\$$(DEPTH)src/ -I/usr/include/libxml2/" >> $@
+	echo "CXXFLAGS:= -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -I../\$$(DEPTH)src/ -I/usr/include/libxml2/" >> $@
 	echo "" >> $@
 	echo "SOURCES:= \$$(shell find ../\$$(DEPTH)test-src/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")" >> $@
-	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)test-src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)test-obj/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
+	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)test-src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
 	echo "OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))" >> $@
 	echo "SOURCES_DIRS:= \$$(shell find ../\$$(DEPTH)test-src/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)" >> $@
 	echo "OBJECTS_DIRS:= \$$(patsubst ../\$$(DEPTH)test-src/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))" >> $@
@@ -93,9 +136,9 @@ test-obj/makefile: makefile
 	echo "" >> $@
 	echo "all: \$$(OBJECTS_DIRS) \$$(OBJECTS)" >> $@
 	echo "" >> $@
-	echo "%.d:" >> $@
-	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)test-obj/\$$(SRCDIR)%.d,../\$$(DEPTH)test-src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)test-obj/\$$(SRCDIR)%.d,../\$$(DEPTH)test-src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
-	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\"))\" >> \$$@" >> $@
+	echo "%.d: makefile" >> $@
+	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)test-src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)test-src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
+	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\")) makefile\" >> \$$@" >> $@
 	echo "	@echo \"	\\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\" >> \$$@" >> $@
 	echo "" >> $@
 	echo "%/makefile: makefile" >> $@
@@ -104,7 +147,7 @@ test-obj/makefile: makefile
 	echo "" >> $@
 	echo "%/: FORCE | %/makefile" >> $@
 	echo "	@accesstime=\`stat -c %Y \$$@\` && \\" >> $@
-	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ && \\" >> $@
+	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\" >> $@
 	echo "	accesstime2=\`stat -c %Y \$$@\` && \\" >> $@
 	echo "	if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\" >> $@
 	echo "		touch .; \\" >> $@
@@ -114,20 +157,47 @@ test-obj/makefile: makefile
 	echo "" >> $@
 	echo "-include \$$(DEPENDENCIES)" >> $@
 
-test-obj/: FORCE | test-obj/makefile
-	$(MAKE) -C $@
 
-$(TEST_OBJECTS): test-obj/
 
-test: test-bin/$(TESTBIN)
-	LD_LIBRARY_PATH="lib" test-bin/$(TESTBIN)
+test-obj-debug/: FORCE | test-obj-debug/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-debug CXX_OTHER_FLAGS="-g -O0 -DDEBUG"
+
+test-obj-release/: FORCE | test-obj-release/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=test-obj-release CXX_OTHER_FLAGS="-O3 -DRELEASE"
+
+
+
+$(TEST_OBJECTS_DEBUG): test-obj-debug/
+
+$(TEST_OBJECTS_RELEASE): test-obj-release/
+
+
+
+build-tests-debug: test-bin-debug/$(TESTBIN)
 
+build-tests-release: test-bin-release/$(TESTBIN)
+
+
+
+unit-test-debug: build-tests-debug
+	LD_LIBRARY_PATH="lib-debug" test-bin-debug/$(TESTBIN)
+
+unit-test-release: build-tests-release
+	LD_LIBRARY_PATH="lib-release" test-bin-release/$(TESTBIN)
+
+
+
+clean-debug:
+	$(RM) -r *.o *.d lib-debug obj-debug test-bin-debug test-obj-debug
+
+clean-release:
+	$(RM) -r *.o *.d lib-release obj-release test-bin-release test-obj-release
 
 
-clean:
-	$(RM) -r *.o *.d doc lib obj test-bin test-obj
 
 FORCE:
 
+
+
 doc:
 	doxygen
diff --git a/alib2data/src/std/addr2line.cpp b/alib2data/src/debug/addr2line.cpp
similarity index 100%
rename from alib2data/src/std/addr2line.cpp
rename to alib2data/src/debug/addr2line.cpp
diff --git a/alib2data/src/std/addr2line.h b/alib2data/src/debug/addr2line.h
similarity index 100%
rename from alib2data/src/std/addr2line.h
rename to alib2data/src/debug/addr2line.h
diff --git a/alib2data/src/std/bfdStacktrace.cpp b/alib2data/src/debug/bfdStacktrace.cpp
similarity index 99%
rename from alib2data/src/std/bfdStacktrace.cpp
rename to alib2data/src/debug/bfdStacktrace.cpp
index 4b69bfef41..6f51fe19ea 100644
--- a/alib2data/src/std/bfdStacktrace.cpp
+++ b/alib2data/src/debug/bfdStacktrace.cpp
@@ -13,7 +13,7 @@
 
 #include <sstream>
 #include <string>
-#include "map.hpp"
+#include "../std/map.hpp"
 
 #include "addr2line.h"
 
diff --git a/alib2data/src/std/bfdStacktrace.h b/alib2data/src/debug/bfdStacktrace.h
similarity index 100%
rename from alib2data/src/std/bfdStacktrace.h
rename to alib2data/src/debug/bfdStacktrace.h
diff --git a/alib2data/src/std/sigHandler.cpp b/alib2data/src/debug/sigHandler.cpp
similarity index 90%
rename from alib2data/src/std/sigHandler.cpp
rename to alib2data/src/debug/sigHandler.cpp
index 67f0272ba6..320a965290 100644
--- a/alib2data/src/std/sigHandler.cpp
+++ b/alib2data/src/debug/sigHandler.cpp
@@ -5,6 +5,7 @@
 #include <unistd.h>
 
 #include "sigHandler.h"
+
 #include "bfdStacktrace.h"
 #include "simpleStacktrace.h"
 #include <iostream>
@@ -23,7 +24,9 @@ void SigHandler::handler(int signal) {
 			std::cout << "Unknown signal" << std::endl;
 			break;
 	}
-	std::cout << std::bfdStacktrace() << std::endl;
+	#ifdef DEBUG
+		std::cout << std::bfdStacktrace() << std::endl;
+	#endif
 	exit(1);
 }
 
diff --git a/alib2data/src/std/sigHandler.h b/alib2data/src/debug/sigHandler.h
similarity index 100%
rename from alib2data/src/std/sigHandler.h
rename to alib2data/src/debug/sigHandler.h
diff --git a/alib2data/src/std/simpleStacktrace.cpp b/alib2data/src/debug/simpleStacktrace.cpp
similarity index 100%
rename from alib2data/src/std/simpleStacktrace.cpp
rename to alib2data/src/debug/simpleStacktrace.cpp
diff --git a/alib2data/src/std/simpleStacktrace.h b/alib2data/src/debug/simpleStacktrace.h
similarity index 100%
rename from alib2data/src/std/simpleStacktrace.h
rename to alib2data/src/debug/simpleStacktrace.h
diff --git a/alib2data/src/exception/AlibException.cpp b/alib2data/src/exception/AlibException.cpp
index df03a717d0..ab7e44fc18 100644
--- a/alib2data/src/exception/AlibException.cpp
+++ b/alib2data/src/exception/AlibException.cpp
@@ -13,12 +13,18 @@
 #include <sstream>
 
 #include <execinfo.h>
-#include "../std/bfdStacktrace.h"
+#ifdef DEBUG
+	#include "../debug/bfdStacktrace.h"
+#endif
 
 namespace exception {
 
 AlibException::AlibException ( ) {
-//	this->backtrace = std::bfdStacktrace();
+	#ifdef DEBUG
+		this->backtrace = std::bfdStacktrace();
+	#else
+		this->backtrace = "";
+	#endif
 
 	this->whatMessage += this->backtrace;
 }
diff --git a/aminimize2/makefile b/aminimize2/makefile
index e0b982c6f8..ee55f93ec0 100644
--- a/aminimize2/makefile
+++ b/aminimize2/makefile
@@ -1,30 +1,49 @@
 SHELL:=/bin/bash
 EXECUTABLE:=aminimize2
 
-LDFLAGS= -L../alib2data/lib -L../alib2algo/lib -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
+LDFLAGS_DEBUG:=-L../alib2data/lib-debug -L../alib2algo/lib-debug -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-OBJECTS:=$(patsubst src/%.cpp, obj/%.o, $(shell find src/ -name *cpp))
+LDFLAGS_RELEASE:=-L../alib2data/lib-release -L../alib2algo/lib-release -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-.PHONY: all build clean
+OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp))
 
-all: build
+OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp))
 
+.PHONY: all build-debug clean-debug doc
 
+all:
+	@echo "What to do master?"
 
-bin/$(EXECUTABLE): obj/ $(OBJECTS)
-	mkdir -p bin
-	$(CXX) $(OBJECTS) -o $@ $(LDFLAGS)
+debug: build-debug
 
-obj/makefile: makefile
+release: build-release
+
+clean: clean-debug clean-release
+	$(RM) -r doc
+
+
+
+bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG)
+
+bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE)
+
+
+
+obj%/makefile: makefile
 	mkdir -p $(dir $@)
 	echo "SHELL:=/bin/bash" > $@
 	echo "SRCDIR:=" >> $@
 	echo "DEPTH:=" >> $@
+	echo "OBJECTS_BASE_DIR:=" >> $@
 	echo "" >> $@
-	echo "CXXFLAGS:= -std=c++11 -Og -g -c -Wall -pedantic -Wextra -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src -I/usr/include/libxml2/" >> $@
+	echo "CXXFLAGS:= -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -fPIC -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src/" >> $@
 	echo "" >> $@
 	echo "SOURCES:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")" >> $@
-	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)obj/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
+	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
 	echo "OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))" >> $@
 	echo "SOURCES_DIRS:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)" >> $@
 	echo "OBJECTS_DIRS:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))" >> $@
@@ -35,18 +54,18 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "all: \$$(OBJECTS_DIRS) \$$(OBJECTS)" >> $@
 	echo "" >> $@
-	echo "%.d:" >> $@
-	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
-	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\"))\" >> \$$@" >> $@
+	echo "%.d: makefile" >> $@
+	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
+	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\")) makefile\" >> \$$@" >> $@
 	echo "	@echo \"	\\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\" >> \$$@" >> $@
 	echo "" >> $@
-	echo "%/makefile:" >> $@
+	echo "%/makefile: makefile" >> $@
 	echo "	mkdir -p \$$(dir \$$@)" >> $@
 	echo "	cp makefile \$$@" >> $@
 	echo "" >> $@
 	echo "%/: FORCE | %/makefile" >> $@
 	echo "	@accesstime=\`stat -c %Y \$$@\` && \\" >> $@
-	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ && \\" >> $@
+	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\" >> $@
 	echo "	accesstime2=\`stat -c %Y \$$@\` && \\" >> $@
 	echo "	if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\" >> $@
 	echo "		touch .; \\" >> $@
@@ -56,18 +75,39 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "-include \$$(DEPENDENCIES)" >> $@
 
-obj/: FORCE | obj/makefile
-	$(MAKE) -C $@
 
-$(OBJECTS): obj/
+
+obj-debug/: FORCE | obj-debug/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug CXX_OTHER_FLAGS="-g -O0"
+
+obj-release/: FORCE | obj-release/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release CXX_OTHER_FLAGS="-O3"
 
 
-build: bin/$(EXECUTABLE)
 
+$(OBJECTS_DEBUG): obj-debug/
+
+$(OBJECTS_RELEASE): obj-release/
+
+
+build-debug: bin-debug/$(EXECUTABLE)
+
+build-release: bin-release/$(EXECUTABLE)
+
+
+
+clean-debug:
+	$(RM) -r *.o *.d bin-debug obj-debug
+
+clean-release:
+	$(RM) -r *.o *.d bin-release obj-release
 
 
-clean:
-	$(RM) -r *.o *.d bin lib obj test-bin test-obj
 
 FORCE:
 
+
+
+doc:
+	doxygen
+
diff --git a/anormalize2/makefile b/anormalize2/makefile
index 6c93eb7afe..7e83c49181 100644
--- a/anormalize2/makefile
+++ b/anormalize2/makefile
@@ -1,30 +1,49 @@
 SHELL:=/bin/bash
 EXECUTABLE:=anormalize2
 
-LDFLAGS= -L../alib2data/lib -L../alib2algo/lib -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
+LDFLAGS_DEBUG:=-L../alib2data/lib-debug -L../alib2algo/lib-debug -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-OBJECTS:=$(patsubst src/%.cpp, obj/%.o, $(shell find src/ -name *cpp))
+LDFLAGS_RELEASE:=-L../alib2data/lib-release -L../alib2algo/lib-release -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-.PHONY: all build clean
+OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp))
 
-all: build
+OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp))
 
+.PHONY: all build-debug clean-debug doc
 
+all:
+	@echo "What to do master?"
 
-bin/$(EXECUTABLE): obj/ $(OBJECTS)
-	mkdir -p bin
-	$(CXX) $(OBJECTS) -o $@ $(LDFLAGS)
+debug: build-debug
 
-obj/makefile: makefile
+release: build-release
+
+clean: clean-debug clean-release
+	$(RM) -r doc
+
+
+
+bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG)
+
+bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE)
+
+
+
+obj%/makefile: makefile
 	mkdir -p $(dir $@)
 	echo "SHELL:=/bin/bash" > $@
 	echo "SRCDIR:=" >> $@
 	echo "DEPTH:=" >> $@
+	echo "OBJECTS_BASE_DIR:=" >> $@
 	echo "" >> $@
-	echo "CXXFLAGS:= -std=c++11 -Og -g -c -Wall -pedantic -Wextra -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src -I/usr/include/libxml2/" >> $@
+	echo "CXXFLAGS:= -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -fPIC -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src/" >> $@
 	echo "" >> $@
 	echo "SOURCES:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")" >> $@
-	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)obj/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
+	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
 	echo "OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))" >> $@
 	echo "SOURCES_DIRS:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)" >> $@
 	echo "OBJECTS_DIRS:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))" >> $@
@@ -35,18 +54,18 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "all: \$$(OBJECTS_DIRS) \$$(OBJECTS)" >> $@
 	echo "" >> $@
-	echo "%.d:" >> $@
-	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
-	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\"))\" >> \$$@" >> $@
+	echo "%.d: makefile" >> $@
+	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
+	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\")) makefile\" >> \$$@" >> $@
 	echo "	@echo \"	\\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\" >> \$$@" >> $@
 	echo "" >> $@
-	echo "%/makefile:" >> $@
+	echo "%/makefile: makefile" >> $@
 	echo "	mkdir -p \$$(dir \$$@)" >> $@
 	echo "	cp makefile \$$@" >> $@
 	echo "" >> $@
 	echo "%/: FORCE | %/makefile" >> $@
 	echo "	@accesstime=\`stat -c %Y \$$@\` && \\" >> $@
-	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ && \\" >> $@
+	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\" >> $@
 	echo "	accesstime2=\`stat -c %Y \$$@\` && \\" >> $@
 	echo "	if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\" >> $@
 	echo "		touch .; \\" >> $@
@@ -56,18 +75,39 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "-include \$$(DEPENDENCIES)" >> $@
 
-obj/: FORCE | obj/makefile
-	$(MAKE) -C $@
 
-$(OBJECTS): obj/
+
+obj-debug/: FORCE | obj-debug/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug CXX_OTHER_FLAGS="-g -O0"
+
+obj-release/: FORCE | obj-release/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release CXX_OTHER_FLAGS="-O3"
 
 
-build: bin/$(EXECUTABLE)
 
+$(OBJECTS_DEBUG): obj-debug/
+
+$(OBJECTS_RELEASE): obj-release/
+
+
+build-debug: bin-debug/$(EXECUTABLE)
+
+build-release: bin-release/$(EXECUTABLE)
+
+
+
+clean-debug:
+	$(RM) -r *.o *.d bin-debug obj-debug
+
+clean-release:
+	$(RM) -r *.o *.d bin-release obj-release
 
 
-clean:
-	$(RM) -r *.o *.d bin lib obj test-bin test-obj
 
 FORCE:
 
+
+
+doc:
+	doxygen
+
diff --git a/arand2/makefile b/arand2/makefile
index 41eec9290c..233c067d3d 100644
--- a/arand2/makefile
+++ b/arand2/makefile
@@ -1,30 +1,49 @@
 SHELL:=/bin/bash
 EXECUTABLE:=arand2
 
-LDFLAGS= -L../alib2data/lib -L../alib2algo/lib -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
+LDFLAGS_DEBUG:=-L../alib2data/lib-debug -L../alib2algo/lib-debug -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-OBJECTS:=$(patsubst src/%.cpp, obj/%.o, $(shell find src/ -name *cpp))
+LDFLAGS_RELEASE:=-L../alib2data/lib-release -L../alib2algo/lib-release -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-.PHONY: all build clean
+OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp))
 
-all: build
+OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp))
 
+.PHONY: all build-debug clean-debug doc
 
+all:
+	@echo "What to do master?"
 
-bin/$(EXECUTABLE): obj/ $(OBJECTS)
-	mkdir -p bin
-	$(CXX) $(OBJECTS) -o $@ $(LDFLAGS)
+debug: build-debug
 
-obj/makefile: makefile
+release: build-release
+
+clean: clean-debug clean-release
+	$(RM) -r doc
+
+
+
+bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG)
+
+bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE)
+
+
+
+obj%/makefile: makefile
 	mkdir -p $(dir $@)
 	echo "SHELL:=/bin/bash" > $@
 	echo "SRCDIR:=" >> $@
 	echo "DEPTH:=" >> $@
+	echo "OBJECTS_BASE_DIR:=" >> $@
 	echo "" >> $@
-	echo "CXXFLAGS:= -std=c++11 -Og -g -c -Wall -pedantic -Wextra -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src -I/usr/include/libxml2/" >> $@
+	echo "CXXFLAGS:= -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -fPIC -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src/" >> $@
 	echo "" >> $@
 	echo "SOURCES:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")" >> $@
-	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)obj/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
+	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
 	echo "OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))" >> $@
 	echo "SOURCES_DIRS:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)" >> $@
 	echo "OBJECTS_DIRS:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))" >> $@
@@ -35,18 +54,18 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "all: \$$(OBJECTS_DIRS) \$$(OBJECTS)" >> $@
 	echo "" >> $@
-	echo "%.d:" >> $@
-	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
-	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\"))\" >> \$$@" >> $@
+	echo "%.d: makefile" >> $@
+	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
+	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\")) makefile\" >> \$$@" >> $@
 	echo "	@echo \"	\\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\" >> \$$@" >> $@
 	echo "" >> $@
-	echo "%/makefile:" >> $@
+	echo "%/makefile: makefile" >> $@
 	echo "	mkdir -p \$$(dir \$$@)" >> $@
 	echo "	cp makefile \$$@" >> $@
 	echo "" >> $@
 	echo "%/: FORCE | %/makefile" >> $@
 	echo "	@accesstime=\`stat -c %Y \$$@\` && \\" >> $@
-	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ && \\" >> $@
+	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\" >> $@
 	echo "	accesstime2=\`stat -c %Y \$$@\` && \\" >> $@
 	echo "	if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\" >> $@
 	echo "		touch .; \\" >> $@
@@ -56,18 +75,39 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "-include \$$(DEPENDENCIES)" >> $@
 
-obj/: FORCE | obj/makefile
-	$(MAKE) -C $@
 
-$(OBJECTS): obj/
+
+obj-debug/: FORCE | obj-debug/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug CXX_OTHER_FLAGS="-g -O0"
+
+obj-release/: FORCE | obj-release/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release CXX_OTHER_FLAGS="-O3"
 
 
-build: bin/$(EXECUTABLE)
 
+$(OBJECTS_DEBUG): obj-debug/
+
+$(OBJECTS_RELEASE): obj-release/
+
+
+build-debug: bin-debug/$(EXECUTABLE)
+
+build-release: bin-release/$(EXECUTABLE)
+
+
+
+clean-debug:
+	$(RM) -r *.o *.d bin-debug obj-debug
+
+clean-release:
+	$(RM) -r *.o *.d bin-release obj-release
 
 
-clean:
-	$(RM) -r *.o *.d bin lib obj test-bin test-obj
 
 FORCE:
 
+
+
+doc:
+	doxygen
+
diff --git a/astat2/makefile b/astat2/makefile
index fb3e0af5b6..e001526e9e 100644
--- a/astat2/makefile
+++ b/astat2/makefile
@@ -1,30 +1,49 @@
 SHELL:=/bin/bash
 EXECUTABLE:=astat2
 
-LDFLAGS= -L../alib2data/lib -rdynamic -lxml2 -lalib2data -Wl,-rpath,.
+LDFLAGS_DEBUG:=-L../alib2data/lib-debug -L../alib2algo/lib-debug -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-OBJECTS:=$(patsubst src/%.cpp, obj/%.o, $(shell find src/ -name *cpp))
+LDFLAGS_RELEASE:=-L../alib2data/lib-release -L../alib2algo/lib-release -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-.PHONY: all build clean
+OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp))
 
-all: build
+OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp))
 
+.PHONY: all build-debug clean-debug doc
 
+all:
+	@echo "What to do master?"
 
-bin/$(EXECUTABLE): obj/ $(OBJECTS)
-	mkdir -p bin
-	$(CXX) $(OBJECTS) -o $@ $(LDFLAGS)
+debug: build-debug
 
-obj/makefile: makefile
+release: build-release
+
+clean: clean-debug clean-release
+	$(RM) -r doc
+
+
+
+bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG)
+
+bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE)
+
+
+
+obj%/makefile: makefile
 	mkdir -p $(dir $@)
 	echo "SHELL:=/bin/bash" > $@
 	echo "SRCDIR:=" >> $@
 	echo "DEPTH:=" >> $@
+	echo "OBJECTS_BASE_DIR:=" >> $@
 	echo "" >> $@
-	echo "CXXFLAGS:= -std=c++11 -Og -g -c -Wall -pedantic -Wextra -I../../\$$(DEPTH)alib2data/src/ -I/usr/include/libxml2/" >> $@
+	echo "CXXFLAGS:= -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -fPIC -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src/" >> $@
 	echo "" >> $@
 	echo "SOURCES:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")" >> $@
-	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)obj/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
+	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
 	echo "OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))" >> $@
 	echo "SOURCES_DIRS:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)" >> $@
 	echo "OBJECTS_DIRS:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))" >> $@
@@ -35,18 +54,18 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "all: \$$(OBJECTS_DIRS) \$$(OBJECTS)" >> $@
 	echo "" >> $@
-	echo "%.d:" >> $@
-	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
-	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\"))\" >> \$$@" >> $@
+	echo "%.d: makefile" >> $@
+	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
+	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\")) makefile\" >> \$$@" >> $@
 	echo "	@echo \"	\\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\" >> \$$@" >> $@
 	echo "" >> $@
-	echo "%/makefile:" >> $@
+	echo "%/makefile: makefile" >> $@
 	echo "	mkdir -p \$$(dir \$$@)" >> $@
 	echo "	cp makefile \$$@" >> $@
 	echo "" >> $@
 	echo "%/: FORCE | %/makefile" >> $@
 	echo "	@accesstime=\`stat -c %Y \$$@\` && \\" >> $@
-	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ && \\" >> $@
+	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\" >> $@
 	echo "	accesstime2=\`stat -c %Y \$$@\` && \\" >> $@
 	echo "	if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\" >> $@
 	echo "		touch .; \\" >> $@
@@ -56,18 +75,39 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "-include \$$(DEPENDENCIES)" >> $@
 
-obj/: FORCE | obj/makefile
-	$(MAKE) -C $@
 
-$(OBJECTS): obj/
+
+obj-debug/: FORCE | obj-debug/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug CXX_OTHER_FLAGS="-g -O0"
+
+obj-release/: FORCE | obj-release/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release CXX_OTHER_FLAGS="-O3"
 
 
-build: bin/$(EXECUTABLE)
 
+$(OBJECTS_DEBUG): obj-debug/
+
+$(OBJECTS_RELEASE): obj-release/
+
+
+build-debug: bin-debug/$(EXECUTABLE)
+
+build-release: bin-release/$(EXECUTABLE)
+
+
+
+clean-debug:
+	$(RM) -r *.o *.d bin-debug obj-debug
+
+clean-release:
+	$(RM) -r *.o *.d bin-release obj-release
 
 
-clean:
-	$(RM) -r *.o *.d bin lib obj test-bin test-obj
 
 FORCE:
 
+
+
+doc:
+	doxygen
+
diff --git a/atrim2/makefile b/atrim2/makefile
index 54ff5a10e8..77686be709 100644
--- a/atrim2/makefile
+++ b/atrim2/makefile
@@ -1,30 +1,49 @@
 SHELL:=/bin/bash
 EXECUTABLE:=atrim2
 
-LDFLAGS= -L../alib2data/lib -L../alib2algo/lib -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
+LDFLAGS_DEBUG:=-L../alib2data/lib-debug -L../alib2algo/lib-debug -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-OBJECTS:=$(patsubst src/%.cpp, obj/%.o, $(shell find src/ -name *cpp))
+LDFLAGS_RELEASE:=-L../alib2data/lib-release -L../alib2algo/lib-release -rdynamic -lxml2 -lalib2data -lalib2algo -Wl,-rpath,.
 
-.PHONY: all build clean
+OBJECTS_DEBUG:=$(patsubst src/%.cpp, obj-debug/%.o, $(shell find src/ -name *cpp))
 
-all: build
+OBJECTS_RELEASE:=$(patsubst src/%.cpp, obj-release/%.o, $(shell find src/ -name *cpp))
 
+.PHONY: all build-debug clean-debug doc
 
+all:
+	@echo "What to do master?"
 
-bin/$(EXECUTABLE): obj/ $(OBJECTS)
-	mkdir -p bin
-	$(CXX) $(OBJECTS) -o $@ $(LDFLAGS)
+debug: build-debug
 
-obj/makefile: makefile
+release: build-release
+
+clean: clean-debug clean-release
+	$(RM) -r doc
+
+
+
+bin-debug/$(EXECUTABLE): obj-debug/ $(OBJECTS_DEBUG)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_DEBUG) -o $@ $(LDFLAGS_DEBUG)
+
+bin-release/$(EXECUTABLE): obj-release/ $(OBJECTS_RELEASE)
+	mkdir -p $(dir $@)
+	$(CXX) $(OBJECTS_RELEASE) -o $@ $(LDFLAGS_RELEASE)
+
+
+
+obj%/makefile: makefile
 	mkdir -p $(dir $@)
 	echo "SHELL:=/bin/bash" > $@
 	echo "SRCDIR:=" >> $@
 	echo "DEPTH:=" >> $@
+	echo "OBJECTS_BASE_DIR:=" >> $@
 	echo "" >> $@
-	echo "CXXFLAGS:= -std=c++11 -Og -g -c -Wall -pedantic -Wextra -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src -I/usr/include/libxml2/" >> $@
+	echo "CXXFLAGS:= -std=c++11 \$$(CXX_OTHER_FLAGS) -c -Wall -pedantic -Wextra -fPIC -I../../\$$(DEPTH)alib2data/src/ -I../../\$$(DEPTH)alib2algo/src/" >> $@
 	echo "" >> $@
 	echo "SOURCES:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")" >> $@
-	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)obj/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
+	echo "DEPENDENCIES:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))" >> $@
 	echo "OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))" >> $@
 	echo "SOURCES_DIRS:= \$$(shell find ../\$$(DEPTH)src/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)" >> $@
 	echo "OBJECTS_DIRS:= \$$(patsubst ../\$$(DEPTH)src/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))" >> $@
@@ -35,18 +54,18 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "all: \$$(OBJECTS_DIRS) \$$(OBJECTS)" >> $@
 	echo "" >> $@
-	echo "%.d:" >> $@
-	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)obj/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
-	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\"))\" >> \$$@" >> $@
+	echo "%.d: makefile" >> $@
+	echo "	@echo \"\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst ../\$$(DEPTH)\$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,../\$$(DEPTH)src/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\" > \$$@" >> $@
+	echo "	@echo \"\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\")) makefile\" >> \$$@" >> $@
 	echo "	@echo \"	\\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\" >> \$$@" >> $@
 	echo "" >> $@
-	echo "%/makefile:" >> $@
+	echo "%/makefile: makefile" >> $@
 	echo "	mkdir -p \$$(dir \$$@)" >> $@
 	echo "	cp makefile \$$@" >> $@
 	echo "" >> $@
 	echo "%/: FORCE | %/makefile" >> $@
 	echo "	@accesstime=\`stat -c %Y \$$@\` && \\" >> $@
-	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ && \\" >> $@
+	echo "	\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ DEPTH=\$$(DEPTH)../ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\" >> $@
 	echo "	accesstime2=\`stat -c %Y \$$@\` && \\" >> $@
 	echo "	if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\" >> $@
 	echo "		touch .; \\" >> $@
@@ -56,18 +75,39 @@ obj/makefile: makefile
 	echo "" >> $@
 	echo "-include \$$(DEPENDENCIES)" >> $@
 
-obj/: FORCE | obj/makefile
-	$(MAKE) -C $@
 
-$(OBJECTS): obj/
+
+obj-debug/: FORCE | obj-debug/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-debug CXX_OTHER_FLAGS="-g -O0"
+
+obj-release/: FORCE | obj-release/makefile
+	$(MAKE) -C $@ OBJECTS_BASE_DIR=obj-release CXX_OTHER_FLAGS="-O3"
 
 
-build: bin/$(EXECUTABLE)
 
+$(OBJECTS_DEBUG): obj-debug/
+
+$(OBJECTS_RELEASE): obj-release/
+
+
+build-debug: bin-debug/$(EXECUTABLE)
+
+build-release: bin-release/$(EXECUTABLE)
+
+
+
+clean-debug:
+	$(RM) -r *.o *.d bin-debug obj-debug
+
+clean-release:
+	$(RM) -r *.o *.d bin-release obj-release
 
 
-clean:
-	$(RM) -r *.o *.d bin lib obj test-bin test-obj
 
 FORCE:
 
+
+
+doc:
+	doxygen
+
diff --git a/makefile b/makefile
index 3cd64bc98e..46b5505029 100644
--- a/makefile
+++ b/makefile
@@ -20,54 +20,150 @@ SUBDIRS_BINS = acat2 \
 
 SUBDIRS_WITH_MAKE = $(dir $(wildcard */makefile))
 
-.PHONY: $(CORE_LIB) $(SUBDIRS_LIBS) $(SUBDIRS_BINS) build copy test
+.PHONY: $(addsuffix .build-debug  , $(CORE_LIB) $(SUBDIRS_LIBS) $(SUBDIRS_BINS))  \
+	$(addsuffix .build-release, $(CORE_LIB) $(SUBDIRS_LIBS) $(SUBDIRS_BINS))\
+	$(addsuffix .build-debug-tests  , $(CORE_LIB) $(SUBDIRS_LIBS) $(SUBDIRS_BINS))  \
+	$(addsuffix .build-release-tests, $(CORE_LIB) $(SUBDIRS_LIBS) $(SUBDIRS_BINS))\
+	build-debug   build-test-debug   unit-test-debug   copy-debug   test-debug   clean-debug   \
+	build-release build-test-release unit-test-release copy-release test-release clean-release \
+	doc all
 
-all: build copy test
+# ifneq (3.82, $(firstword $(sort $(MAKE_VERSION) 3.81)))
+# 	$(error version at least 3.82 is needed for make to work)
+# endif
 
-build: $(CORE_LIB) $(SUBDIRS_LIBS) $(SUBDIRS_BINS)
+all: debug release doc
 
-$(CORE_LIB):
-	$(MAKE) -C $@
 
-$(SUBDIRS_LIBS): $(CORE_LIB)
-	$(MAKE) -C $@
 
-$(SUBDIRS_BINS): $(SUBDIRS_LIBS)
-	$(MAKE) -C $@
+debug  : build-debug   build-tests-debug   unit-test-debug   copy-debug   test-debug
 
-clean:
+release: build-release build-tests-release unit-test-release copy-release test-release
+
+clean  : clean-debug   clean-release
+	$(RM) -r bin-debug bin-release
+
+build-debug  : $(addsuffix .build-debug  , $(CORE_LIB) $(SUBDIRS_LIBS) $(SUBDIRS_BINS))
+
+build-release: $(addsuffix .build-release, $(CORE_LIB) $(SUBDIRS_LIBS) $(SUBDIRS_BINS))
+
+
+
+build-tests-debug  : build-debug   $(addsuffix .build-tests-debug  , $(CORE_LIB) $(SUBDIRS_LIBS))
+
+build-tests-release: build-release $(addsuffix .build-tests-release, $(CORE_LIB) $(SUBDIRS_LIBS))
+
+
+
+$(addsuffix .build-debug, $(CORE_LIB)):
+	$(MAKE) build-debug -C $(basename $@)
+
+$(addsuffix .build-debug, $(SUBDIRS_LIBS)): $(addsuffix .build-debug, $(CORE_LIB))
+	$(MAKE) build-debug -C $(basename $@)
+
+$(addsuffix .build-debug, $(SUBDIRS_BINS)): $(addsuffix .build-debug, $(SUBDIRS_LIBS))
+	$(MAKE) build-debug -C $(basename $@)
+
+
+
+$(addsuffix .build-release, $(CORE_LIB)):
+	$(MAKE) build-release -C $(basename $@)
+
+$(addsuffix .build-release, $(SUBDIRS_LIBS)): $(addsuffix .build-release, $(CORE_LIB))
+	$(MAKE) build-release -C $(basename $@)
+
+$(addsuffix .build-release, $(SUBDIRS_BINS)): $(addsuffix .build-release, $(SUBDIRS_LIBS))
+	$(MAKE) build-release -C $(basename $@)
+
+
+
+$(addsuffix .build-tests-debug, $(CORE_LIB)): $(addsuffix .build-debug, $(CORE_LIB))
+	$(MAKE) build-tests-debug -C $(basename $@)
+
+$(addsuffix .build-tests-debug, $(SUBDIRS_LIBS)): $(addsuffix .build-tests-debug, $(CORE_LIB)) $(addsuffix .build-debug, $(SUBDIRS_LIBS))
+	$(MAKE) build-tests-debug -C $(basename $@)
+
+
+
+$(addsuffix .build-tests-release, $(CORE_LIB)): $(addsuffix .build-release, $(CORE_LIB))
+	$(MAKE) build-tests-release -C $(basename $@)
+
+$(addsuffix .build-tests-release, $(SUBDIRS_LIBS)): $(addsuffix .build-tests-release, $(CORE_LIB)) $(addsuffix .build-release, $(SUBDIRS_LIBS))
+	$(MAKE) build-tests-release -C $(basename $@)
+
+
+
+clean-debug:
 	for dir in $(SUBDIRS_WITH_MAKE); do \
-	    $(MAKE) -C $$dir clean; \
+	    $(MAKE) clean-debug -C $$dir; \
 	done
 
-copy: $(CORE_LIB) $(SUBDIRS_LIBS) $(SUBDIRS_BINS)
-	mkdir -p $(BINFOLDER)
-	rm -rf $(BINFOLDER)/*
+clean-release:
+	for dir in $(SUBDIRS_WITH_MAKE); do \
+	    $(MAKE) clean-release -C $$dir; \
+	done
+
+
+
+copy-debug: $(addsuffix .build-debug, $(CORE_LIB) $(SUBDIRS_LIBS) $(SUBDIRS_BINS))
+	mkdir -p $(addsuffix -debug, $(BINFOLDER))
+	rm -rf $(addsuffix -debug, $(BINFOLDER))/*
+	for dir in $(CORE_LIB) $(SUBDIRS_LIBS); do \
+	    cp $$dir/lib-debug/* $(addsuffix -debug, $(BINFOLDER)); \
+	done
+	for dir in $(SUBDIRS_BINS); do \
+	    cp $$dir/bin-debug/* $(addsuffix -debug, $(BINFOLDER)); \
+	done
+
+copy-release: $(addsuffix .build-release, $(CORE_LIB) $(SUBDIRS_LIBS) $(SUBDIRS_BINS))
+	mkdir -p $(addsuffix -release, $(BINFOLDER))
+	rm -rf $(addsuffix -release, $(BINFOLDER))/*
 	for dir in $(CORE_LIB) $(SUBDIRS_LIBS); do \
-	    cp $$dir/lib/* $(BINFOLDER); \
+	    cp $$dir/lib-release/* $(addsuffix -release, $(BINFOLDER)); \
 	done
 	for dir in $(SUBDIRS_BINS); do \
-	    cp $$dir/bin/* $(BINFOLDER); \
+	    cp $$dir/bin-release/* $(addsuffix -release, $(BINFOLDER)); \
 	done
 
-install:
-	cp alib/lib/libalib.so $(LIBPATH)
-	cp acat/bin/acat $(APPPATH)
-	cp aconvert/bin/aconvert $(APPPATH)
-	cp aconvert.dot/bin/aconvert.dot $(APPPATH)
-	cp aconvert.gastex/bin/aconvert.gastex $(APPPATH)
-	cp aminimize/bin/aminimize $(APPPATH)
-
-uninstall:
-	rm $(LIBPATH)/libalib.so
-	rm $(APPPATH)/acat
-	rm $(APPPATH)/aconvert
-	rm $(APPPATH)/aconvert.dot
-	rm $(APPPATH)/aconvert.gastex
-	rm $(APPPATH)/aminimize
-
-test: copy
-	./tests.aconversion.sh
+
+
+# install:
+# 	cp alib/lib/libalib.so $(LIBPATH)
+# 	cp acat/bin/acat $(APPPATH)
+# 	cp aconvert/bin/aconvert $(APPPATH)
+# 	cp aconvert.dot/bin/aconvert.dot $(APPPATH)
+# 	cp aconvert.gastex/bin/aconvert.gastex $(APPPATH)
+# 	cp aminimize/bin/aminimize $(APPPATH)
+
+# uninstall:
+# 	rm $(LIBPATH)/libalib.so
+# 	rm $(APPPATH)/acat
+# 	rm $(APPPATH)/aconvert
+# 	rm $(APPPATH)/aconvert.dot
+# 	rm $(APPPATH)/aconvert.gastex
+# 	rm $(APPPATH)/aminimize
+
+unit-test-debug: build-tests-debug
+	for dir in $(CORE_LIB) $(SUBDIRS_LIBS); do \
+	    $(MAKE) unit-test-debug -C $$dir; \
+	done
+
+unit-test-verbose: build-tests-release
+	for dir in $(CORE_LIB) $(SUBDIRS_LIBS); do \
+	    $(MAKE) unit-test-release -C $$dir; \
+	done
+
+
+
+test-debug: copy-debug unit-test-debug
+	./tests.aconversion.sh debug
+
+
+
+test-release: copy-release unit-test-release
+	./tests.aconversion.sh release
+
+
 
 doc:
 	$(MAKE) doc -C alib2data
diff --git a/tests.aconversion.sh b/tests.aconversion.sh
index 2216a35f9f..ff45fc25b5 100755
--- a/tests.aconversion.sh
+++ b/tests.aconversion.sh
@@ -1,5 +1,7 @@
 #!/usr/bin/env bash
 
+# $1 test dir suffix (debug / release)
+
 # SETTINGS
 TESTCASE_ITERATIONS=100
 TESTCASE_TIMEOUT=10
@@ -22,13 +24,13 @@ RES_UNKN=0
 # ----------------------------
 
 for FILE in $EXECUTABLES; do
-	if [ ! -f bin/$FILE ]; then
-		echo "Executable" $FILE "is required for testing. Make sure it is in bin folder."
+	if [ ! -f bin-$1/$FILE ]; then
+		echo "Executable $FILE is required for testing. Make sure it is in bin-$1 folder."
 		exit 1
 	fi
 done
 
-cd bin/
+cd bin-$1/
 rm -f $LOGFILE
 
 # ----------------------------
-- 
GitLab