// These part may be overwritten by automated test
// =BEGIN
#define SND_HAS_APS	0
#define SND_HAS_VAS	0
#define SND_HAS_MDA	1
// =END

TARGET			pjsua.exe
UID			0x100039CE 0xE44C2D02
VENDORID	  	0
TARGETTYPE		exe
EPOCSTACKSIZE	 	0x5000

SYSTEMINCLUDE 		\epoc32\include \epoc32\include\variant \epoc32\include\ecom
USERINCLUDE	   	..\inc ..\data

SOURCEPATH		..\data
START RESOURCE		pjsua.rss
HEADER
TARGETPATH 		resource\apps
END //RESOURCE

START RESOURCE		pjsua_reg.rss
TARGETPATH 	  	\private\10003a3f\apps
END //RESOURCE

LIBRARY			euser.lib apparc.lib cone.lib eikcore.lib avkon.lib
LIBRARY			commonengine.lib efsrv.lib estor.lib eikcoctl.lib eikdlg.lib 
LIBRARY			eikctl.lib bafl.lib fbscli.lib aknnotify.lib aknicon.lib
LIBRARY			etext.lib gdi.lib egul.lib insock.lib
LIBRARY			ecom.lib InetProtUtil.lib http.lib esock.lib

LANG 				01

START BITMAP pjsua.mbm
	HEADER
	TARGETPATH \resource\apps
	SOURCEPATH ..\gfx
	SOURCE c12,1 list_icon.bmp list_icon_mask.bmp
	SOURCE c24 pjsua.bmp
END

SOURCEPATH		..\src

#ifdef ENABLE_ABIV2_MODE
DEBUGGABLE_UDEBONLY
#endif

SOURCE pjsuaContainer.cpp PjsuaContainerView.cpp pjsuaApplication.cpp pjsuaDocument.cpp pjsuaAppUi.cpp


/* PJSIP library dependencies */

MACRO			PJ_M_I386=1
MACRO			PJ_SYMBIAN=1

SYSTEMINCLUDE		..\..\..\..\..\pjlib\include
SYSTEMINCLUDE		..\..\..\..\..\pjlib-util\include
SYSTEMINCLUDE		..\..\..\..\..\pjnath\include
SYSTEMINCLUDE		..\..\..\..\..\pjmedia\include
SYSTEMINCLUDE		..\..\..\..\..\pjsip\include

SYSTEMINCLUDE		\epoc32\include\libc

LIBRARY			estlib.lib charconv.lib hal.lib

STATICLIBRARY		pjsua_lib.lib
STATICLIBRARY		pjsip_ua.lib pjsip_simple.lib pjsip.lib
STATICLIBRARY		libgsmcodec.lib libspeexcodec.lib 
STATICLIBRARY		libg7221codec.lib libpassthroughcodec.lib
STATICLIBRARY		pjmedia.lib
STATICLIBRARY		pjmedia_audiodev.lib
STATICLIBRARY		pjsdp.lib
STATICLIBRARY		pjnath.lib
STATICLIBRARY		pjlib_util.lib pjlib.lib
STATICLIBRARY		libsrtp.lib
STATICLIBRARY		libresample.lib

/* Sound device (APS/VAS/MDA) library & capability settings */
#if SND_HAS_APS
	LIBRARY		APSSession2.lib
#endif

#if SND_HAS_VAS
	LIBRARY		VoIPAudioIntfc.lib		
#endif

#if SND_HAS_MDA
	LIBRARY 	mediaclientaudiostream.lib
	LIBRARY 	mediaclientaudioinputstream.lib
#endif

#if SND_HAS_APS || SND_HAS_VAS
	CAPABILITY	NetworkServices LocalServices ReadUserData WriteUserData UserEnvironment MultimediaDD
#else
	CAPABILITY	NetworkServices LocalServices ReadUserData WriteUserData UserEnvironment
#endif


/* PJSUA APP */

SOURCEPATH		..\..

SOURCE 			pjsua_app_cli.c pjsua_app_legacy.c
SOURCE 			pjsua_app.c pjsua_app_common.c pjsua_app_config.c
