# Set to true to write libdbus logs to logcat instead of stderr
# See also config.h to turn on verbose logs
LOG_TO_ANDROID_LOGCAT := true

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \
        dbus-address.c \
        dbus-asv-util.c \
        dbus-auth.c \
        dbus-bus.c \
        dbus-connection.c \
        dbus-credentials.c \
        dbus-dataslot.c \
        dbus-errors.c \
        dbus-file.c \
        dbus-file-unix.c \
        dbus-hash.c \
        dbus-internals.c \
        dbus-keyring.c \
        dbus-list.c \
        dbus-mainloop.c \
        dbus-marshal-basic.c \
        dbus-marshal-byteswap.c \
        dbus-marshal-header.c \
        dbus-marshal-recursive.c \
        dbus-marshal-validate.c \
        dbus-memory.c \
        dbus-mempool.c \
        dbus-message.c \
        dbus-misc.c \
        dbus-nonce.c \
        dbus-object-tree.c \
        dbus-pending-call.c \
        dbus-pipe.c \
        dbus-pipe-unix.c \
        dbus-resources.c \
        dbus-server.c \
        dbus-server-debug-pipe.c \
        dbus-server-launchd.c \
        dbus-server-socket.c \
        dbus-server-unix.c \
        dbus-sha.c \
        dbus-shell.c \
        dbus-signature.c \
        dbus-socket-set.c \
        dbus-socket-set-epoll.c \
        dbus-socket-set-poll.c \
        dbus-spawn.c \
        dbus-string.c \
        dbus-string-util.c \
        dbus-syntax.c \
        dbus-sysdeps.c \
        dbus-sysdeps-pthread.c \
        dbus-sysdeps-unix.c \
        dbus-sysdeps-util.c \
        dbus-sysdeps-util-unix.c \
        dbus-threads.c \
        dbus-timeout.c \
        dbus-transport.c \
        dbus-transport-socket.c \
        dbus-transport-unix.c \
        dbus-userdb.c \
        dbus-userdb-util.c \
        dbus-uuidgen.c \
        dbus-watch.c

LOCAL_C_INCLUDES+= $(LOCAL_PATH)/..

LOCAL_MODULE:=libdbus

LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/..

LOCAL_CFLAGS+= \
	-DDBUS_COMPILATION \
	-DHAVE_MONOTONIC_CLOCK \
	-DDBUS_MACHINE_UUID_FILE=\"/etc/machine-id\" \
	-DDBUS_SYSTEM_CONFIG_FILE=\"/etc/dbus-1/system.conf\" \
	-DDBUS_SESSION_CONFIG_FILE=\"/etc/dbus-1/session.conf\" \
	-Wno-empty-body \
	-Wno-missing-field-initializers \
	-Wno-pointer-sign \
	-Wno-sign-compare \
	-Wno-tautological-compare \
	-Wno-type-limits \
	-Wno-unused-parameter

LOCAL_CLANG := true

ifeq ($(LOG_TO_ANDROID_LOGCAT),true)
ifneq ($(TARGET_ARCH), x86-64)
LOCAL_CFLAGS+= \
	-DDBUS_ANDROID_LOG \
	-DANDROID_MANAGED_SOCKET

LOCAL_SHARED_LIBRARIES+= libcutils liblog
endif
endif

ifeq ($(TARGET_ARCH), x86-64)
LOCAL_CFLAGS+= -D_GNU_SOURCE
endif

ifeq ($(BUILD_EUREKA),true)
# Copy the headers to the build sysroot directory.
include_dir := $(LOCAL_PATH)/..
include_files := $(shell find $(include_dir) -type f -name '*.h')
LOCAL_TOOLCHAIN_PREBUILTS := \
	$(join $(include_files),\
	$(patsubst $(include_dir)/%,:usr/include/%,$(include_files)))
endif
include $(BUILD_SHARED_LIBRARY)
