PROTOC ?= protoc
CXX  ?= g++
LIBS = -lprotobuf -lboost_filesystem -lboost_system
PROTO_OBJS = drweb_api_error.pb.o drweb_netcheck_api.pb.o
NETCHECK_API_ASYNC_OBJS = drweb_ipc.o drweb_netcheck_api.o drweb_netcheck_scanner.o \
						  drweb_netcheck_api_async_example.o
NETCHECK_API_SYNC_OBJS = drweb_netcheck_api_sync_example.o
NETCHECK_API_SYNC_NOFC_OBJS = drweb_netcheck_api_sync_nofc_example.o
PYPROTO = drweb_api_error_pb2.py drweb_netcheck_api_pb2.py
PROTOS = drweb_api_error.proto drweb_netcheck_api.proto
CXXFLAGS ?= -pthread -O2 -pipe -Wall

all: drweb_netcheck_api_async_example \
	 drweb_netcheck_api_sync_example  \
	 drweb_netcheck_api_sync_nofc_example  \
	 drweb_netcheck_api_example.py

clean:
	rm -f drweb_netcheck_api_async_example
	rm -f drweb_netcheck_api_sync_example
	rm -f drweb_netcheck_api_sync_nofc_example
	rm -f $(PROTO_OBJS)
	rm -f $(NETCHECK_API_ASYNC_OBJS)
	rm -f $(NETCHECK_API_SYNC_OBJS)
	rm -f $(NETCHECK_API_SYNC_NOFC_OBJS)
	rm -f *.pb.*
	rm -f *pb2.py
	rm -f *pb2.pyc

%_pb2.py: $(PROTOS)
	$(PROTOC) --python_out . $^

%.pb.cc: $(PROTOS)
	$(PROTOC) --cpp_out . $^

%.o: %.cpp
	$(CXX) -std=c++11 $(CPPFLAGS) $(CXXFLAGS) -c $^

%.pb.o: %.pb.cc
	$(CXX) -std=c++11 $(CPPFLAGS) $(CXXFLAGS) -c $^

drweb_netcheck_api_async_example: $(PROTO_OBJS) $(NETCHECK_API_ASYNC_OBJS)
	$(CXX) $(CXXFLAGS) -o $@ $(NETCHECK_API_ASYNC_OBJS) $(PROTO_OBJS) $(LDFLAGS) $(LIBS)

drweb_netcheck_api_sync_example: $(PROTO_OBJS) $(NETCHECK_API_SYNC_OBJS)
	$(CXX) $(CXXFLAGS) -o $@ $(NETCHECK_API_SYNC_OBJS) $(PROTO_OBJS) $(LDFLAGS) $(LIBS)

drweb_netcheck_api_sync_nofc_example: $(PROTO_OBJS) $(NETCHECK_API_SYNC_NOFC_OBJS)
	$(CXX) $(CXXFLAGS) -o $@ $(NETCHECK_API_SYNC_NOFC_OBJS) $(PROTO_OBJS) $(LDFLAGS) $(LIBS)

drweb_netcheck_api_example.py: $(PYPROTO)
