# Copyright (c) 2017 Cisco and/or its affiliates.
# Licensed 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.

lib_LTLIBRARIES += libvppcom.la libvcl_ldpreload.la

libvppcom_la_SOURCES =
libvcl_ldpreload_la_SOURCES =
libvppcom_la_DEPENDENCIES =			\
	libsvm.la				\
	libvlibmemoryclient.la

libvppcom_la_LIBADD = $(libvppcom_la_DEPENDENCIES) -lpthread -lrt -ldl

libvppcom_la_SOURCES +=				\
  vcl/vppcom.c					\
  vcl/vcl_bapi.c				\
  vcl/vcl_cfg.c					\
  vcl/vcl_debug.h				\
  vcl/vcl_event.c				\
  vcl/vcl_private.h				\
  $(libvppinfra_la_SOURCES)			\
  $(libsvm_la_SOURCES)				\
  $(libvlibmemoryclient_la_SOURCES)

nobase_include_HEADERS +=			\
  vcl/vcl_event.h				\
  vcl/vppcom.h

libvcl_ldpreload_la_LIBADD =  $(libvppcom_la_DEPENDENCIES) -lpthread -lrt -ldl

libvcl_ldpreload_la_SOURCES +=			\
  vcl/ldp_socket_wrapper.c			\
  vcl/ldp.c					\
  $(libvppcom_la_SOURCES)

nobase_include_HEADERS +=			\
  vcl/ldp_socket_wrapper.h			\
  vcl/ldp_glibc_socket.h			\
  vcl/ldp.h

noinst_PROGRAMS +=				\
	vcl_test_server				\
	vcl_test_client				\
	sock_test_server			\
	sock_test_client			\
	test_vcl_listener_server		\
	test_vcl_listener_client


test_vcl_listener_server_SOURCES = vcl/test_vcl_listener_server.c
test_vcl_listener_server_LDADD = libvppcom.la

test_vcl_listener_client_SOURCES = vcl/test_vcl_listener_client.c
test_vcl_listener_client_LDADD = libvppcom.la

vcl_test_server_SOURCES = vcl/vcl_test_server.c
vcl_test_server_LDADD = libvppcom.la


vcl_test_client_SOURCES = vcl/vcl_test_client.c
vcl_test_client_LDADD = libvppcom.la

sock_test_server_SOURCES = vcl/sock_test_server.c
sock_test_client_SOURCES = vcl/sock_test_client.c

nobase_include_HEADERS +=			\
  vcl/sock_test_common.h			\
  vcl/sock_test.h				\
  vcl/vcl_test.h

# vi:syntax=automake
