VERSION:=$(shell parsechangelog | sed -n 's|Version: ||p' | tr . 0)
CC=g++

CFLAGS=-c -Wall --std=c++11 -fPIC -O2 -fno-strict-aliasing -DNDEBUG -g \
    -DSHARED_LOCALIZATION_VERSION=$(VERSION) \
    -I/usr/local/include/libmongoc-1.0 \
    -I/usr/local/include/libbson-1.0 \
    -I/usr/local/include/mongocxx/v_noabi \
    -I/usr/local/include/bsoncxx/v_noabi

LDFLAGS=

COMMON_LDLIBRARIES= `pkg-config --cflags --libs libmongocxx-static` \
        -l:libboost_filesystem.so.1.58.0 -l:libboost_system.so.1.58.0 \
        -l:libboost_thread.so.1.58.0 -lcrypto -lgmp -pthread \

CLIENT_LDLIBRARIES_PY27=$(COMMON_LDLIBRARIES) -lpython2.7 -l:libboost_python-py27.so.1.58.0
CLIENT_LDLIBRARIES_PY35=$(COMMON_LDLIBRARIES) -lpython3.5m -l:libboost_python-py35.so.1.58.0
MANAGER_LDLIBRARIES=$(COMMON_LDLIBRARIES) -lPocoFoundation
TESTS_LDLIBRARIES=$(CLIENT_LDLIBRARIES_PY27) -lPocoFoundation

CLIENT_SOURCES=src/local_items.cpp src/config.cpp src/items_cache.cpp src/user_info.cpp
MANAGER_SOURCES=src/daemon.cpp src/config.cpp src/local_items_db.cpp src/local_items.cpp

CLIENT_OBJECTS_PY27=$(CLIENT_SOURCES:.cpp=.py27.o)
CLIENT_OBJECTS_PY35=$(CLIENT_SOURCES:.cpp=.py35.o)
MANAGER_OBJECTS=$(MANAGER_SOURCES:.cpp=.o)

build: _shared_localization.py27.so _shared_localization.py35.so SLManager

tests: test functional_test

tests/tests.o: tests/tests.cpp
	$(CC) $(CFLAGS) $< -o $@ -I /usr/include/python2.7/

test: tests/tests.o $(MANAGER_OBJECTS)
	$(CC) -o test $(MANAGER_OBJECTS) tests/tests.o $(TESTS_LDLIBRARIES) -lgmock
	./test

functional_test:
	sudo rm /usr/bin/SLManager || true
	sudo cp SLManager /usr/bin/SLManager || true
	pkill SLManager || true
	ln -s _shared_localization.py27.so _shared_localization.so
	PYTHONPATH=. python2 tests/functional_test.py
	rm _shared_localization.so
	ln -s _shared_localization.py35.so _shared_localization.so
	PYTHONPATH=. python3 tests/functional_test.py
	rm _shared_localization.so
	sudo rm /usr/bin/SLManager

SLManager: $(MANAGER_OBJECTS) src/manager.o
	$(CC) -o SLManager $(MANAGER_OBJECTS) src/manager.o $(MANAGER_LDLIBRARIES)

_shared_localization.py27.so: $(CLIENT_OBJECTS_PY27) src/module.py27.o
	$(CC) -shared -o $@ src/module.py27.o $(CLIENT_OBJECTS_PY27) $(CLIENT_LDLIBRARIES_PY27)

_shared_localization.py35.so: $(CLIENT_OBJECTS_PY35) src/module.py35.o
	$(CC) -shared -o $@ src/module.py35.o $(CLIENT_OBJECTS_PY35) $(CLIENT_LDLIBRARIES_PY35)

src/module.py27.o: src/module.cpp
	$(CC) $(CFLAGS) $< -o $@ -I /usr/include/python2.7/

src/module.py35.o: src/module.cpp
	$(CC) $(CFLAGS) $< -o $@ -I /usr/include/python3.5/

.cpp.o: %.cpp
	$(CC) $(CFLAGS) $< -o $@

%.py27.o: %.cpp
	$(CC) $(CFLAGS) $< -o $@ -I /usr/include/python2.7/

%.py35.o: %.cpp
	$(CC) $(CFLAGS) $< -o $@ -I /usr/include/python3.5/

clean:
	rm -f src/*.o _shared_localization.*.so SLManager test tests/*.{log,o,so,pid}

install::
	install -d $(DESTDIR)/etc/
	install -d $(DESTDIR)/etc/yandex/
	install -d $(DESTDIR)/etc/yandex/mobile/
	install -d $(DESTDIR)/etc/yandex/mobile/shared_localizations/
	install -m664 ./config/default.cfg $(DESTDIR)/etc/yandex/mobile/shared_localizations/

driver:
	driver/build.sh

.PHONY: build install uninstall clean test driver
