# 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.

# TODO(mkrebs): This currently grabs a copy we made from
# src/platform/common-mk; we should instead share it.
include common.mk

BASE_VER ?= 125070
PKG_CONFIG ?= pkg-config

CRASH_OBJS = \
	chrome_collector.o \
	crash_collector.o \
	kernel_collector.o \
	kernel_warning_collector.o \
	udev_collector.o \
	unclean_shutdown_collector.o \
	user_collector.o

PC_DEPS = glib-2.0 gobject-2.0 libpcrecpp libchrome-$(BASE_VER) \
	libchromeos-$(BASE_VER)
PC_CFLAGS := $(shell $(PKG_CONFIG) --cflags $(PC_DEPS))
PC_LIBS := $(shell $(PKG_CONFIG) --libs $(PC_DEPS))

DBUS_PC_DEPS = dbus-1 dbus-glib-1
DBUS_PC_CFLAGS := $(shell $(PKG_CONFIG) --cflags $(DBUS_PC_DEPS))
DBUS_PC_LIBS := $(shell $(PKG_CONFIG) --libs $(DBUS_PC_DEPS))

CPPFLAGS += -I$(SRC)/.. -I$(SYSROOT)/usr/include/google-breakpad $(PC_CFLAGS)
LDLIBS = -lgflags $(PC_LIBS)


# -- Executable crash_reporter --

CXX_BINARY(crash_reporter): CPPFLAGS += $(DBUS_PC_CFLAGS)
CXX_BINARY(crash_reporter): LDLIBS += -lmetrics $(DBUS_PC_LIBS)
CXX_BINARY(crash_reporter): crash_reporter.o $(CRASH_OBJS)
clean: CLEAN(crash_reporter)
all: CXX_BINARY(crash_reporter)


# -- Executable list_proxies --

CXX_BINARY(list_proxies): CPPFLAGS += $(DBUS_PC_CFLAGS)
CXX_BINARY(list_proxies): LDLIBS += $(DBUS_PC_LIBS)
CXX_BINARY(list_proxies): list_proxies.o
clean: CLEAN(list_proxies)
all: CXX_BINARY(list_proxies)


# -- Executable warn_collector --

CC_BINARY(warn_collector): LDLIBS += -lfl -lmetrics
CC_BINARY(warn_collector): lex.yy.o
clean: CLEAN(warn_collector)
all: CC_BINARY(warn_collector)
lex.yy.c: $(SRC)/warn_collector.l
	flex $<
clean: CLEAN(lex.yy.o)
$(eval $(call add_object_rules,lex.yy.o,CC,c,CFLAGS))


# -- Unit Tests --

UNITTEST_LIBS := $(shell gmock-config --libs) $(shell gtest-config --libs)

# Uncomment these to just run specific test(s).
#TEST_BINS += chrome_collector_test
#TEST_BINS += crash_collector_test
#TEST_BINS += kernel_collector_test
#TEST_BINS += udev_collector_test
#TEST_BINS += unclean_shutdown_collector_test
#TEST_BINS += user_collector_test


# Define a template that defines the rules for a unittest.  In case you want
# to add options, etc. for a particular test, the rule to build the test will
# be for "CXX_BINARY(<test name>)".  For example, you could add options with:
#  CXX_BINARY(crash_collector_test): CXXFLAGS += -some-other-option
define TEST_RULES_template
CXX_BINARY($(1)): LDLIBS += $(UNITTEST_LIBS) $(DBUS_PC_LIBS)
CXX_BINARY($(1)): $(1).o $(CRASH_OBJS)
clean: CLEAN($(1))
tests: TEST(CXX_BINARY($(1)))
endef

CC_BINARY(warn_collector_test): warn_collector_test.o

# If $(TEST_BINS) is not already set, assume any filename matching *_test.cc
# is a test.
TEST_BINS ?= $(patsubst $(SRC)/%.cc,%,$(wildcard $(SRC)/*_test.cc))
$(foreach prog,$(TEST_BINS),$(eval $(call TEST_RULES_template,$(prog))))
tests: TEST(CC_BINARY(warn_collector_test))
