#
#    Copyright 2004-2006 Intel Corporation
# 
#    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.
#

#
# Makefile for DTN2/apps
#

ifeq ($(SRCDIR),)
BUILDDIR := ..
SRCDIR := ..
endif

SINGLE_SOURCE_APPS := 			\
	dtncat/dtncat			\
	dtncp/dtncp			\
	dtncpd/dtncpd			\
	dtnping/dtnping			\
	dtnping/dtntraceroute		\
	dtnping/dtnreporter		\
	dtnperf/dtnperf-server		\
	dtnrecv/dtnrecv			\
	dtnsink/dtnsink			\
	num2sdnv/num2sdnv		\

OTHER_APPS :=				\
	dtnmoteproxy/dtnmoteproxy	\
	dtntest/dtntest			\
	dtntunnel/dtntunnel		\
	dtnperf/dtnperf-client		\
	tca_admin/tca_admin		\
	dtnsend/dtnsend			\
	dtnsource/dtnsource		\
	num2sdnv/sdnv2num		\

APPS := $(SINGLE_SOURCE_APPS) $(OTHER_APPS)

all: $(DTN_LIBS++) $(DTN_LIBS_STATIC) $(APPS) $(MANPAGES)
include ../Rules.make
include $(SRCDIR)/dtn-version.mk

DTN_LIBS_STATIC := ../applib/libdtnapi.a ../applib/libdtnapi++.a
DTN_LIBS := ../applib/libdtnapi.a $(OASYS_COMPAT_LDFLAGS)
DTN_LIBS++ := $(DTN_LIBS) ../applib/libdtnapi++.a $(OASYS_LDFLAGS) $(EXTLIB_LDFLAGS)

# Fake build target in case the api lib doesn't exist, but allows us
# to include it as a dependency above so the apps get properly rebuilt
# for the 'all' target
$(DTN_LIBS_STATIC):
	@echo "ERROR: $@ must be built before the apps can"
	exit 1

CFLAGS += -I$(SRCDIR)/applib
CXXFLAGS += -I$(SRCDIR)/applib
LDFLAGS += -L../applib

BINFILES += $(APPS)

#
# For dtnmoteproxy, don't worry about cast alignment
#
dtnmoteproxy/dtnmoteproxy.o: dtnmoteproxy/dtnmoteproxy.c
	@rm -f $@; mkdir -p $(@D)
	$(CC) $(CPPFLAGS) -Wno-cast-align $(CFLAGS) -c $< -o $@

dtnmoteproxy/serialsource.o: dtnmoteproxy/serialsource.c
	@rm -f $@; mkdir -p $(@D)
	$(CC) $(CPPFLAGS) -Wno-cast-align $(CFLAGS) -c $< -o $@

dtnmoteproxy/dtnmoteproxy: dtnmoteproxy/dtnmoteproxy.o \
			   dtnmoteproxy/serialsource.o
	$(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) $(DTN_LIBS)

#
# Rules for dtntest
#
dtntest/dtntest: dtntest/dtntest.o  $(DTN_LIBS_STATIC)
	$(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS) $(DTN_LIBS++)
#
# Rules for dtnsend
#
dtnsend/dtnsend: dtnsend/dtnsend.o  $(DTN_LIBS_STATIC)
	$(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS) $(DTN_LIBS++)

#
# Rules for dtnsource
#
dtnsource/dtnsource: dtnsource/dtnsource.o  $(DTN_LIBS_STATIC)
	$(CXX) $(CXXFLAGS) $< -o $@ $(LDFLAGS) $(DTN_LIBS++)

#
# num2sdnv and sdnv2num are the same app
#
num2sdnv/sdnv2num: num2sdnv/num2sdnv
	cp $< $@

#
# Rules for dtntunnel
#
dtntunnel/dtntunnel: dtntunnel/DTNTunnel.o \
		     dtntunnel/TCPTunnel.o \
		     dtntunnel/UDPTunnel.o \
		     $(DTN_LIBS_STATIC)
	$(CXX) $(CXXFLAGS) $^ -o $@ $(LDFLAGS) $(DTN_LIBS++)


#
# Rules for dtnperf-client
#
dtnperf/dtnperf-client: dtnperf/utils.o \
			dtnperf/bundle_tools.o \
			dtnperf/dtnperf-client.o \
		    $(DTN_LIBS_STATIC)

	$(CXX) $(CXXFLAGS) $^ -o $@ $(LDFLAGS) $(DTN_LIBS++)


#
# Rules for tca_admin
#
tca_admin/tca_admin: tca_admin/tca_admin.o \
                tca_admin/TcaEndpointID.o \
                ../servlib/routing/TcaControlBundle.o \
                tca_admin/TcaRegistry.o \
                tca_admin/TcaController.o \
                tca_admin/libs/gateway_prot_clnt.o \
                tca_admin/libs/gateway_prot_xdr.o \
                tca_admin/libs/gateway_rpc.o \
                tca_admin/libs/sha1.o \
		$(DTN_LIBS_STATIC)
	$(CXX) $(CXXFLAGS) $^ -o $@ $(LDFLAGS) $(DTN_LIBS++)

#
# Default rule for all single source apps
#
$(SINGLE_SOURCE_APPS): %: %.o $(DTN_LIBS_STATIC)
	$(CC) $(CFLAGS) $< -o $@ $(LDFLAGS) $(DTN_LIBS)
