#
# $XORP: xorp/libxipc/Jamfile,v 1.4 2008/04/24 15:20:25 bms Exp $
#

SubDir TOP libxipc ;
SubIncludeOnce TOP libxorp ;
SubIncludeOnce TOP libcomm ;
SubIncludeOnce TOP xrl interfaces ;
SubIncludeOnce TOP xrl targets ;
SubDir TOP libxipc ;

Library libxipc :
	hmac_md5.c
	finder_client.cc finder_client_observer.cc
	finder_client_xrl_target.cc finder_messenger.cc
	finder_msgs.cc finder_tcp.cc finder_tcp_messenger.cc
	header.cc hmac.cc permits.cc sockutil.cc xrl.cc
	xrl_args.cc xrl_atom.cc xrl_atom_encoding.cc xrl_atom_list.cc
	xrl_cmd_map.cc xrl_dispatcher.cc xrl_error.cc xrl_parser.cc
	xrl_parser_input.cc
	xrl_pf.cc xrl_pf_factory.cc xrl_pf_inproc.cc xrl_pf_kill.cc
	xrl_pf_stcp.cc xrl_pf_stcp_ph.cc xrl_pf_sudp.cc
	xrl_router.cc xrl_std_router.cc xrl_tokens.cc
	xuid.cc
	;
LibraryFromObjects libxipc$(SUFLIB) :
	common_xif$(SUFOBJ)
	finder_client_base$(SUFOBJ)
	finder_xif$(SUFOBJ)
	;

Library libfinder :
	finder.cc finder_server.cc
	finder_xrl_queue.cc finder_xrl_target.cc
	;
LibraryFromObjects libfinder$(SUFLIB) :
	finder_base$(SUFOBJ)
	finder_client_xif$(SUFOBJ)
	finder_event_observer_xif$(SUFOBJ)
	;

Main call_xrl : call_xrl.cc ;
LinkLibraries call_xrl :
	libxipc
	libcomm
	libxorp
	;

Main xorp_finder : finder_main.cc ;
LinkLibraries xorp_finder :
	libfinder
	libxipc
	libcomm
	libxorp
	;

#
# Tests.
#

if $(MAKE_CHECK) {
 LINKLIBS_REGRESSION_COMMON =
	libfinder
	libxipc
	libcomm
	libxorp
	;
 REGRESSION_TESTS =
	test_finder
	test_finder_messenger
	test_finder_msgs
	test_finder_tcp
	test_finder_to
	test_header
	test_inproc
	test_lemming
	test_stcp
	test_stcppf
	test_sudp
	test_xrl
	test_xrl_atom
	test_xrl_args
	test_xrl_parser
	test_xrl_error
	test_xrl_router
	;

 local _test ;
 for _test in [ FGristFiles $(REGRESSION_TESTS) ] {
        Main $(_test) : $(_test).cc ;
        LinkLibraries $(_test) : $(LINKLIBS_REGRESSION_COMMON) ;
 }

 Objects test_finder_events.cc test_xrl_sender.cc test_xrl_receiver.cc ;

 MainFromObjects test_finder_events :
	test_finder_events$(SUFOBJ)
	test_finder_events_base$(SUFOBJ)
	finder_event_notifier_xif$(SUFOBJ)
	;
 MainFromObjects test_xrl_receiver :
	test_xrl_receiver$(SUFOBJ)
	test_xrls_base$(SUFOBJ)
	;
 MainFromObjects test_xrl_sender :
	test_xrl_sender$(SUFOBJ)
	test_xrls_xif$(SUFOBJ)
	test_xrls_base$(SUFOBJ)
	;
 LinkLibraries test_finder_events test_xrl_sender test_xrl_receiver :
	$(LINKLIBS_REGRESSION_COMMON)
	;
} # MAKE_CHECK

#
# Mark explicit dependencies on files which are autogenerated within
# the XRL tree. This will cause these objects to be built separately
# for libxipc and libfinder, whilst using common sources.
#
# XXX Explicit grist is needed here for the dependencies to be evaluated
# correctly across the board. Python is automatically invoked to regenerate
# XRL derived wrappers.
# This needs to be verified with LOCATE_TARGET for building outside of
# the source dir.
#

Object <libxipc>common_xif$(SUFOBJ) :
	<xrl!interfaces>common_xif.cc ;
Object <libxipc>finder_base$(SUFOBJ) :
	<xrl!targets>finder_base.cc ;
Object <libxipc>finder_client_base$(SUFOBJ) :
	<xrl!targets>finder_client_base.cc ;
Object <libxipc>finder_client_xif$(SUFOBJ) :
	<xrl!interfaces>finder_client_xif.cc ;
Object <libxipc>finder_event_observer_xif$(SUFOBJ) :
	<xrl!interfaces>finder_event_observer_xif.cc ;
Object <libxipc>finder_xif$(SUFOBJ) :
	<xrl!interfaces>finder_xif.cc ;

if $(MAKE_CHECK) {
 Object <libxipc>finder_event_notifier_xif$(SUFOBJ) :
	<xrl!interfaces>finder_event_notifier_xif.cc ;
 Object <libxipc>test_finder_events_base$(SUFOBJ) :
	<xrl!targets>test_finder_events_base.cc ;
 Object <libxipc>test_xrls_base$(SUFOBJ) :
	<xrl!targets>test_xrls_base.cc ;
 Object <libxipc>test_xrls_xif$(SUFOBJ) :
	<xrl!interfaces>test_xrls_xif.cc ;
} # MAKE_CHECK

InstallBin $(PREFIX)/bin : call_xrl ;
InstallBin $(PREFIX)/libxipc : xorp_finder ;
