#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#

SUBDIRS = . test

pkgconfigdir = $(libdir)/pkgconfig

lib_LTLIBRARIES = libthrift_c_glib.la
pkgconfig_DATA = thrift_c_glib.pc

common_cflags = -g -Wall -W -Werror -Isrc -I src/thrift $(GLIB_CFLAGS)
common_ldflags = -g -Wall -W $(GLIB_LDFLAGS) @GCOV_LDFLAGS@

# this removes optimizations and adds coverage flags
CFLAGS = @GCOV_CFLAGS@

# Define the source files for the module

libthrift_c_glib_la_SOURCES = src/thrift/thrift.c \
                              src/thrift/thrift_struct.c \
                              src/thrift/thrift_application_exception.c \
                              src/thrift/processor/thrift_processor.c \
                              src/thrift/protocol/thrift_protocol.c \
                              src/thrift/protocol/thrift_protocol_factory.c \
                              src/thrift/protocol/thrift_binary_protocol.c \
                              src/thrift/protocol/thrift_binary_protocol_factory.c \
                              src/thrift/transport/thrift_transport.c \
                              src/thrift/transport/thrift_transport_factory.c \
                              src/thrift/transport/thrift_socket.c \
                              src/thrift/transport/thrift_server_transport.c \
                              src/thrift/transport/thrift_server_socket.c \
                              src/thrift/transport/thrift_buffered_transport.c \
                              src/thrift/transport/thrift_framed_transport.c \
                              src/thrift/transport/thrift_memory_buffer.c \
                              src/thrift/server/thrift_server.c \
                              src/thrift/server/thrift_simple_server.c

libthrift_c_glib_la_CFLAGS = $(common_cflags)

include_thriftdir = $(includedir)/thrift/c_glib
include_thrift_HEADERS = \
                         $(top_builddir)/config.h \
                         src/thrift/thrift.h \
                         src/thrift/thrift_application_exception.h \
                         src/thrift/thrift_struct.h

include_protocoldir = $(include_thriftdir)/protocol
include_protocol_HEADERS = src/thrift/protocol/thrift_protocol.h \
                           src/thrift/protocol/thrift_protocol_factory.h \
                           src/thrift/protocol/thrift_binary_protocol.h \
                           src/thrift/protocol/thrift_binary_protocol_factory.h

include_transportdir = $(include_thriftdir)/transport
include_transport_HEADERS = src/thrift/transport/thrift_buffered_transport.h \
                            src/thrift/transport/thrift_framed_transport.h \
                            src/thrift/transport/thrift_memory_buffer.h \
                            src/thrift/transport/thrift_server_socket.h \
                            src/thrift/transport/thrift_server_transport.h \
                            src/thrift/transport/thrift_socket.h \
                            src/thrift/transport/thrift_transport.h \
                            src/thrift/transport/thrift_transport_factory.h

include_serverdir = $(include_thriftdir)/server
include_server_HEADERS = src/thrift/server/thrift_server.h \
                         src/thrift/server/thrift_simple_server.h

include_processordir = $(include_thriftdir)/processor
include_processor_HEADERS = src/thrift/processor/thrift_processor.h


EXTRA_DIST = \
             README \
             test/glib.suppress \
             thrift_c_glib.pc.in

CLEANFILES = \
             *.gcno \
             *.gcda
