# Copyright (c) 2015 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.

bin_PROGRAMS += bin/vpp

bin_vpp_SOURCES =				\
  vpp/vnet/main.c				\
  vpp/app/vpe_cli.c				\
  vpp/app/version.c				\
  vpp/oam/oam.c					\
  vpp/stats/stats.c

bin_vpp_SOURCES +=				\
  vpp/api/api.c					\
  vpp/api/custom_dump.c				\
  vpp/api/json_format.c

if WITH_APICLI
  bin_vpp_SOURCES +=				\
  vpp/api/api_format.c				\
  vpp/api/api_main.c				\
  vpp/api/plugin.c				\
  vpp/api/plugin.h
endif

# uncomment to enable stats upload to gmond
# bin_vpp_SOURCES +=				\
#  vpp/api/gmon.c

bin_vpp_CFLAGS = @APICLI@

nobase_include_HEADERS +=			\
  vpp/api/vpe_all_api_h.h			\
  vpp/api/vpe_msg_enum.h			\
  vpp/api/vpe.api.h

API_FILES += vpp/api/vpe.api

BUILT_SOURCES += .version

vpp/app/version.o:	vpp/app/version.h

.PHONY:	.version

VPP_VERSION = $(shell $(srcdir)/scripts/version)

VPP_BUILD_DATE ?= $$(date)
VPP_BUILD_USER ?= $$(whoami)
VPP_BUILD_HOST ?= $$(hostname)

# update version.h only when version changes, to avoid
# unnecessary re-linking of vpp binary

.version:
	@if [ "$$(cat .version 2> /dev/null)" != "$(VPP_VERSION)" ] ; then		\
	  f="vpp/app/version.h" 							;\
	  echo "  VERSION  $$f ($(VPP_VERSION))"					;\
	  echo $(VPP_VERSION) > .version						;\
          echo "#define VPP_BUILD_DATE \"$(VPP_BUILD_DATE)\"" > $$f                             ;\
          echo "#define VPP_BUILD_USER \"$(VPP_BUILD_USER)\"" >> $$f                            ;\
          echo "#define VPP_BUILD_HOST \"$(VPP_BUILD_HOST)\"" >> $$f                            ;\
	  echo -n "#define VPP_BUILD_TOPDIR " >> $$f					;\
	  echo "\"$$(cd $(srcdir) && git rev-parse --show-toplevel)\"" >> $$f 		;\
	  echo "#define VPP_BUILD_VER \"$(VPP_VERSION)\"" >> $$f			;\
	fi

bin_vpp_LDADD = \
  libvlibmemory.la \
  libvlib.la \
  libvnet.la \
  libsvm.la \
  libsvmdb.la \
  libvppinfra.la \
  -lrt -lm -lpthread -ldl

bin_vpp_LDFLAGS = -Wl,--export-dynamic

bin_PROGRAMS += bin/vppctl
bin_vppctl_SOURCES = vpp/app/vppctl.c
bin_vppctl_LDADD = libvppinfra.la

if ENABLE_TESTS
noinst_PROGRAMS += bin/test_client

bin_test_client_SOURCES = \
  vpp/api/test_client.c

bin_test_client_LDADD = \
  libvlibmemoryclient.la \
  libsvm.la \
  libvppinfra.la \
  -lpthread -lm -lrt

noinst_PROGRAMS += bin/test_client bin/test_ha

bin_test_ha_SOURCES = \
  vpp/api/test_ha.c

bin_test_ha_LDADD = \
  libvlibmemoryclient.la \
  libsvm.la \
  libvppinfra.la \
  -lpthread -lm -lrt
endif

noinst_PROGRAMS += bin/summary_stats_client

bin_summary_stats_client_SOURCES = \
  vpp/api/summary_stats_client.c

bin_summary_stats_client_LDADD = \
  libvlibmemoryclient.la \
  libsvm.la \
  libvppinfra.la \
  -lpthread -lm -lrt

bin_PROGRAMS += bin/vpp_get_metrics

bin_vpp_get_metrics_SOURCES = \
  vpp/api/vpp_get_metrics.c

bin_vpp_get_metrics_LDADD = \
  libsvmdb.la \
  libsvm.la \
  libvppinfra.la \
  -lpthread -lm -lrt

CLEANFILES += vpp/app/version.h

# vi:syntax=automake
