# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

include common.mk

DBUSXX_XML2CPP = dbusxx-xml2cpp

# Create a generator for DBUS-C++ headers.
# TODO(wad): integrate into common.mk.
GEN_DBUSXX(%):
	$(call check_deps)
	$(call old_or_no_timestamp,\
		mkdir -p "$(dir $(TARGET_OR_MEMBER))" && \
		$(DBUSXX_XML2CPP) $< --adaptor=$(TARGET_OR_MEMBER))

PROTOC ?= protoc

ifeq ($(strip $(BASE_VER)),)
$(error BASE_VER is not set. Make sure you set it to the correct revision number of libchrome)
endif

PC_DEPS = dbus-c++-1 glib-2.0 gthread-2.0 gobject-2.0 libmtp \
	libchrome-$(BASE_VER) libbrillo-$(BASE_VER) protobuf
PC_CFLAGS := $(shell $(PKG_CONFIG) --cflags $(PC_DEPS))
PC_LIBS := $(shell $(PKG_CONFIG) --libs $(PC_DEPS))

CPPFLAGS += -I$(SRC)/include -I$(SRC) -I$(OUT) -I$(OUT)mtpd_server $(PC_CFLAGS)
CPPFLAGS += -std=gnu++11
LDLIBS += -ludev $(PC_LIBS)

## protobuffer targets
# Detailed instructions on how to work with these rules can be found in the
# common-mk package.  These rules are for including protobufs that live in the
# dbus directory of the system_api repo. To add a new one from this location to
# the build, just add the name of the generated .cc file to the bindings
# variable and include approriate depends targets[.
#
# To add protobufs from a different location then you need to copy all the proto
# variables and use a new prefix for them, setting the path variable as you
# need.
SYSTEM_API_PROTO_BINDINGS = mtp_file_entry.pb.cc \
                            mtp_storage_info.pb.cc
SYSTEM_API_PROTO_PATH = $(SYSROOT)/usr/include/chromeos/dbus
SYSTEM_API_PROTO_HEADERS = $(patsubst %.cc,%.h,$(SYSTEM_API_PROTO_BINDINGS))
SYSTEM_API_PROTO_OBJS = $(patsubst %.cc,%.o,$(SYSTEM_API_PROTO_BINDINGS))
$(SYSTEM_API_PROTO_HEADERS): %.h: %.cc ;
$(SYSTEM_API_PROTO_BINDINGS): %.pb.cc: $(SYSTEM_API_PROTO_PATH)/%.proto
	$(PROTOC) --proto_path=$(SYSTEM_API_PROTO_PATH) --cpp_out=. $<
clean: CLEAN($(SYSTEM_API_PROTO_BINDINGS))
clean: CLEAN($(SYSTEM_API_PROTO_HEADERS))
clean: CLEAN($(SYSTEM_API_PROTO_OBJS))
# Add rules for compiling generated protobuffer code, as the CXX_OBJECTS list
# is built before these source files exists and, as such, does not contain them.
$(eval $(call add_object_rules,$(SYSTEM_API_PROTO_OBJS),CXX,cc,CXXFLAGS))

GEN_DBUSXX(mtpd_server/mtpd_server.h): $(SRC)/mtpd.xml
mtpd_server/mtpd_server.h: GEN_DBUSXX(mtpd_server/mtpd_server.h)
clean: CLEAN(mtpd_server/mtpd_server.h)

# Require the header to be generated first.
$(patsubst %.o,%.o.depends,$(CXX_OBJECTS)): mtpd_server/mtpd_server.h \
	mtp_file_entry.pb.h mtp_storage_info.pb.h

CXX_BINARY(mtpd): $(filter-out %_testrunner.o %_unittest.o,$(CXX_OBJECTS)) \
	mtp_file_entry.pb.o mtp_storage_info.pb.o
clean: CLEAN(mtpd)

CXX_BINARY(mtpd_testrunner): $(filter-out %main.o,$(CXX_OBJECTS)) \
	mtp_file_entry.pb.o mtp_storage_info.pb.o
CXX_BINARY(mtpd_testrunner): LDLIBS += -lgtest -lgmock -lpthread
clean: CLEAN(mtpd_testrunner)

# Some shortcuts
mtpd: CXX_BINARY(mtpd)
all: mtpd

user_tests: TEST(CXX_BINARY(mtpd_testrunner))
tests: user_tests
