# Makefile.in generated by automake 1.13.4 from Makefile.am.
# demo/Makefile.  Generated from Makefile.in by configure.

# Copyright (C) 1994-2013 Free Software Foundation, Inc.

# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.



# Copyright (C) 1999-2005 Open Source Telecom Corporation.
# Copyright (C) 2006-2010 David Sugar, Tycho Softworks.
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__make_running_with_option = \
  case $${target_option-} in \
      ?) ;; \
      *) echo "am__make_running_with_option: internal error: invalid" \
              "target option '$${target_option-}' specified" >&2; \
         exit 1;; \
  esac; \
  has_opt=no; \
  sane_makeflags=$$MAKEFLAGS; \
  if $(am__is_gnu_make); then \
    sane_makeflags=$$MFLAGS; \
  else \
    case $$MAKEFLAGS in \
      *\\[\ \	]*) \
        bs=\\; \
        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
    esac; \
  fi; \
  skip_next=no; \
  strip_trailopt () \
  { \
    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
  }; \
  for flg in $$sane_makeflags; do \
    test $$skip_next = yes && { skip_next=no; continue; }; \
    case $$flg in \
      *=*|--*) continue;; \
        -*I) strip_trailopt 'I'; skip_next=yes;; \
      -*I?*) strip_trailopt 'I';; \
        -*O) strip_trailopt 'O'; skip_next=yes;; \
      -*O?*) strip_trailopt 'O';; \
        -*l) strip_trailopt 'l'; skip_next=yes;; \
      -*l?*) strip_trailopt 'l';; \
      -[dEDm]) skip_next=yes;; \
      -[JT]) skip_next=yes;; \
    esac; \
    case $$flg in \
      *$$target_option*) has_opt=yes; break;; \
    esac; \
  done; \
  test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/ccrtp
pkgincludedir = $(includedir)/ccrtp
pkglibdir = $(libdir)/ccrtp
pkglibexecdir = $(libexecdir)/ccrtp
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = x86_64-unknown-linux-gnu
host_triplet = x86_64-unknown-linux-gnu
target_triplet = x86_64-unknown-linux-gnu
noinst_PROGRAMS = rtpsend$(EXEEXT) rtplisten$(EXEEXT) \
	rtphello$(EXEEXT) rtpduphello$(EXEEXT) audiorx$(EXEEXT) \
	audiotx$(EXEEXT) ccrtptest$(EXEEXT) $(am__EXEEXT_1)
subdir = demo
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am README
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/libgcrypt_local.m4 \
	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/ost_debug.m4 \
	$(top_srcdir)/m4/ost_maint.m4 $(top_srcdir)/m4/ost_prog.m4 \
	$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/ccrtp-config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
##am__EXEEXT_1 =  \
##	ccsrtptest$(EXEEXT)
am__EXEEXT_1 = ccsrtptest$(EXEEXT)
PROGRAMS = $(noinst_PROGRAMS)
am_audiorx_OBJECTS = audiorx.$(OBJEXT)
audiorx_OBJECTS = $(am_audiorx_OBJECTS)
audiorx_DEPENDENCIES = ../src/libccrtp.la
AM_V_lt = $(am__v_lt_$(V))
am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
am__v_lt_0 = --silent
am__v_lt_1 = 
am_audiotx_OBJECTS = audiotx.$(OBJEXT)
audiotx_OBJECTS = $(am_audiotx_OBJECTS)
audiotx_DEPENDENCIES = ../src/libccrtp.la
am_ccrtptest_OBJECTS = ccrtptest.$(OBJEXT)
ccrtptest_OBJECTS = $(am_ccrtptest_OBJECTS)
ccrtptest_DEPENDENCIES = ../src/libccrtp.la
am__ccsrtptest_SOURCES_DIST = ccsrtptest.cpp
##am_ccsrtptest_OBJECTS =  \
##	ccsrtptest.$(OBJEXT)
am_ccsrtptest_OBJECTS = ccsrtptest.$(OBJEXT)
ccsrtptest_OBJECTS = $(am_ccsrtptest_OBJECTS)
##ccsrtptest_DEPENDENCIES =  \
##	../src/libccrtp.la
ccsrtptest_DEPENDENCIES = ../src/libccrtp.la
am_rtpduphello_OBJECTS = rtpduphello.$(OBJEXT)
rtpduphello_OBJECTS = $(am_rtpduphello_OBJECTS)
rtpduphello_DEPENDENCIES = ../src/libccrtp.la
am_rtphello_OBJECTS = rtphello.$(OBJEXT)
rtphello_OBJECTS = $(am_rtphello_OBJECTS)
rtphello_DEPENDENCIES = ../src/libccrtp.la
am_rtplisten_OBJECTS = rtplisten.$(OBJEXT)
rtplisten_OBJECTS = $(am_rtplisten_OBJECTS)
rtplisten_DEPENDENCIES = ../src/libccrtp.la
am_rtpsend_OBJECTS = rtpsend.$(OBJEXT)
rtpsend_OBJECTS = $(am_rtpsend_OBJECTS)
rtpsend_DEPENDENCIES = ../src/libccrtp.la
AM_V_P = $(am__v_P_$(V))
am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
am__v_GEN_0 = @echo "  GEN     " $@;
am__v_GEN_1 = 
AM_V_at = $(am__v_at_$(V))
am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
am__v_at_0 = @
am__v_at_1 = 
DEFAULT_INCLUDES = -I. -I$(top_builddir)
depcomp =
am__depfiles_maybe =
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
	$(AM_CXXFLAGS) $(CXXFLAGS)
AM_V_CXX = $(am__v_CXX_$(V))
am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY))
am__v_CXX_0 = @echo "  CXX     " $@;
am__v_CXX_1 = 
CXXLD = $(CXX)
CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CXXLD = $(am__v_CXXLD_$(V))
am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
am__v_CXXLD_0 = @echo "  CXXLD   " $@;
am__v_CXXLD_1 = 
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
	$(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_$(V))
am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
am__v_CC_0 = @echo "  CC      " $@;
am__v_CC_1 = 
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
	$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_$(V))
am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
am__v_CCLD_0 = @echo "  CCLD    " $@;
am__v_CCLD_1 = 
SOURCES = $(audiorx_SOURCES) $(audiotx_SOURCES) $(ccrtptest_SOURCES) \
	$(ccsrtptest_SOURCES) $(rtpduphello_SOURCES) \
	$(rtphello_SOURCES) $(rtplisten_SOURCES) $(rtpsend_SOURCES)
DIST_SOURCES = $(audiorx_SOURCES) $(audiotx_SOURCES) \
	$(ccrtptest_SOURCES) $(am__ccsrtptest_SOURCES_DIST) \
	$(rtpduphello_SOURCES) $(rtphello_SOURCES) \
	$(rtplisten_SOURCES) $(rtpsend_SOURCES)
am__can_run_installinfo = \
  case $$AM_UPDATE_INFO_DIR in \
    n|no|NO) false;; \
    *) (install-info --version) >/dev/null 2>&1;; \
  esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates.  Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
  BEGIN { nonempty = 0; } \
  { items[$$0] = 1; nonempty = 1; } \
  END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique.  This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
  list='$(am__tagged_files)'; \
  unique=`for i in $$list; do \
    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
  done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = ${SHELL} /home/lisional/git/sflphone-android/jni/libccrtp/sources/autoconf/missing aclocal-1.13
AMTAR = $${TAR-tar}
AM_DEFAULT_VERBOSITY = 1
AR = ar
AS = as
AUTOCONF = ${SHELL} /home/lisional/git/sflphone-android/jni/libccrtp/sources/autoconf/missing autoconf
AUTOHEADER = ${SHELL} /home/lisional/git/sflphone-android/jni/libccrtp/sources/autoconf/missing autoheader
AUTOMAKE = ${SHELL} /home/lisional/git/sflphone-android/jni/libccrtp/sources/autoconf/missing automake-1.13
AWK = gawk
CC = gcc
CCDEPMODE = depmode=none
CFLAGS = -g -O2
COMMONCPP_CFLAGS = -Wno-long-long -fexceptions -DNEW_STDCPP -pthread -fno-check-new -finline -fvisibility=hidden -DUCOMMON_VISIBILITY=1 
COMMONCPP_LIBS = -lcommoncpp -lucommon -lrt -ldl -lpthread 
CPP = gcc -E
CPPFLAGS = 
CXX = g++
CXXCPP = g++ -E
CXXDEPMODE = depmode=none
CXXFLAGS = -g -O2 -Wno-long-long -fexceptions -DNEW_STDCPP -pthread -fno-check-new -finline -fvisibility=hidden -DUCOMMON_VISIBILITY=1 
CYGPATH_W = echo
DEFS = -DHAVE_CONFIG_H
DEPDIR = .deps
DLLTOOL = dlltool
DOXYGEN = /usr/bin/doxygen
DSYMUTIL = 
DUMPBIN = 
ECHO_C = 
ECHO_N = -n
ECHO_T = 
EGREP = /usr/bin/grep -E
EXEEXT = 
FGREP = /usr/bin/grep -F
FTPDIR = 
GNULIBS = -lcommoncpp -lucommon -lrt -ldl -lpthread  -lgcrypt -ldl -lgpg-error 
GREP = /usr/bin/grep
INSTALL = /usr/bin/install -c
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
INSTALL_SCRIPT = ${INSTALL}
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
KDOC_DIR = $(top_srcdir)/doc
LD = /usr/bin/ld -m elf_x86_64
LDFLAGS = 
LIBGCRYPT_CFLAGS = 
LIBGCRYPT_CONFIG = /usr/bin/libgcrypt-config
LIBGCRYPT_LIBS = -lgcrypt -ldl -lgpg-error
LIBOBJS = 
LIBS = -lgcrypt -ldl -lgpg-error 
LIBTOOL = $(SHELL) $(top_builddir)/libtool
LIPO = 
LN_S = ln -s
LTLIBOBJS = 
LT_CCXX_VERSION = -version-info 2:5:0
LT_MAJOR = 2
LT_MINOR = 0
LT_RELEASE = 
LT_SUBVER = 2.0
LT_VERSION = -version-info 2:5:0
MAINT = #
MAKEINFO = ${SHELL} /home/lisional/git/sflphone-android/jni/libccrtp/sources/autoconf/missing makeinfo
MANIFEST_TOOL = :
MKDIR_P = /usr/bin/mkdir -p
NM = /usr/bin/nm -B
NMEDIT = 
OBJDUMP = objdump
OBJEXT = o
OTOOL = 
OTOOL64 = 
PACKAGE = ccrtp
PACKAGE_BUGREPORT = 
PACKAGE_NAME = ccrtp
PACKAGE_STRING = ccrtp 2.0.8
PACKAGE_TARNAME = ccrtp
PACKAGE_URL = 
PACKAGE_VERSION = 2.0.8
PATH_SEPARATOR = :
PKG_CONFIG = /usr/bin/pkg-config
PKG_CONFIG_LIBDIR = 
PKG_CONFIG_PATH = 
RANLIB = ranlib
SED = /usr/bin/sed
SET_MAKE = 
SHELL = /bin/sh
STRIP = strip
VERSION = 2.0.8
WARN_FLAGS = -fno-strict-aliasing -Wall -ansi -pedantic
abs_builddir = /home/lisional/git/sflphone-android/jni/libccrtp/sources/demo
abs_srcdir = /home/lisional/git/sflphone-android/jni/libccrtp/sources/demo
abs_top_builddir = /home/lisional/git/sflphone-android/jni/libccrtp/sources
abs_top_srcdir = /home/lisional/git/sflphone-android/jni/libccrtp/sources
ac_ct_AR = ar
ac_ct_CC = gcc
ac_ct_CXX = g++
ac_ct_DUMPBIN = 
am__include = include
am__leading_dot = .
am__quote = 
am__tar = $${TAR-tar} chof - "$$tardir"
am__untar = $${TAR-tar} xf -
bindir = ${exec_prefix}/bin
build = x86_64-unknown-linux-gnu
build_alias = 
build_cpu = x86_64
build_os = linux-gnu
build_vendor = unknown
builddir = .
datadir = ${datarootdir}
datarootdir = ${prefix}/share
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
dvidir = ${docdir}
exec_prefix = ${prefix}
host = x86_64-unknown-linux-gnu
host_alias = 
host_cpu = x86_64
host_os = linux-gnu
host_vendor = unknown
htmldir = ${docdir}
includedir = ${prefix}/include
infodir = ${datarootdir}/info
install_sh = ${SHELL} /home/lisional/git/sflphone-android/jni/libccrtp/sources/autoconf/install-sh
libdir = ${exec_prefix}/lib
libexecdir = ${exec_prefix}/libexec
localedir = ${datarootdir}/locale
localstatedir = ${prefix}/var
mandir = ${datarootdir}/man
mkdir_p = $(MKDIR_P)
oldincludedir = /usr/include
pdfdir = ${docdir}
prefix = /usr/local
program_transform_name = s,x,x,
psdir = ${docdir}
sbindir = ${exec_prefix}/sbin
sharedstatedir = ${prefix}/com
srcdir = .
sysconfdir = ${prefix}/etc
target = x86_64-unknown-linux-gnu
target_alias = 
target_cpu = x86_64
target_os = linux-gnu
target_vendor = unknown
top_build_prefix = ../
top_builddir = ..
top_srcdir = ..
AUTOMAKE_OPTIONS = no-dependencies dist-shar
#ignored for programs
#$(LT_VERSION) -release $(LT_RELEASE)
AM_CXXFLAGS = -fno-strict-aliasing -Wall -ansi -pedantic -I$(top_srcdir)/src -I$(top_srcdir)/src/ccrtp
ccxxincludedir = $(includedir)/cc++
srtp_src = ccsrtptest
#srtp_src = ccsrtptest
ccsrtptest_SOURCES = ccsrtptest.cpp
#ccsrtptest_SOURCES = ccsrtptest.cpp
ccsrtptest_LDADD = ../src/libccrtp.la -lcommoncpp -lucommon -lrt -ldl -lpthread  -lgcrypt -ldl -lgpg-error 
#ccsrtptest_LDADD = ../src/libccrtp.la -lcommoncpp -lucommon -lrt -ldl -lpthread  -lgcrypt -ldl -lgpg-error 
rtpsend_SOURCES = rtpsend.cpp
rtpsend_LDADD = ../src/libccrtp.la -lcommoncpp -lucommon -lrt -ldl -lpthread  -lgcrypt -ldl -lgpg-error 
rtplisten_SOURCES = rtplisten.cpp
rtplisten_LDADD = ../src/libccrtp.la -lcommoncpp -lucommon -lrt -ldl -lpthread  -lgcrypt -ldl -lgpg-error 
rtphello_SOURCES = rtphello.cpp
rtphello_LDADD = ../src/libccrtp.la -lcommoncpp -lucommon -lrt -ldl -lpthread  -lgcrypt -ldl -lgpg-error 
rtpduphello_SOURCES = rtpduphello.cpp
rtpduphello_LDADD = ../src/libccrtp.la -lcommoncpp -lucommon -lrt -ldl -lpthread  -lgcrypt -ldl -lgpg-error 
audiorx_SOURCES = audiorx.cpp audio.h
audiorx_LDADD = ../src/libccrtp.la -lcommoncpp -lucommon -lrt -ldl -lpthread  -lgcrypt -ldl -lgpg-error 
audiotx_SOURCES = audiotx.cpp
audiotx_LDADD = ../src/libccrtp.la -lcommoncpp -lucommon -lrt -ldl -lpthread  -lgcrypt -ldl -lgpg-error 
ccrtptest_SOURCES = ccrtptest.cpp
ccrtptest_LDADD = ../src/libccrtp.la -lcommoncpp -lucommon -lrt -ldl -lpthread  -lgcrypt -ldl -lgpg-error 
all: all-am

.SUFFIXES:
.SUFFIXES: .cpp .lo .o .obj
$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am  $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu demo/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu demo/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure: # $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): # $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):

clean-noinstPROGRAMS:
	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
	echo " rm -f" $$list; \
	rm -f $$list || exit $$?; \
	test -n "$(EXEEXT)" || exit 0; \
	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
	echo " rm -f" $$list; \
	rm -f $$list

audiorx$(EXEEXT): $(audiorx_OBJECTS) $(audiorx_DEPENDENCIES) $(EXTRA_audiorx_DEPENDENCIES) 
	@rm -f audiorx$(EXEEXT)
	$(AM_V_CXXLD)$(CXXLINK) $(audiorx_OBJECTS) $(audiorx_LDADD) $(LIBS)

audiotx$(EXEEXT): $(audiotx_OBJECTS) $(audiotx_DEPENDENCIES) $(EXTRA_audiotx_DEPENDENCIES) 
	@rm -f audiotx$(EXEEXT)
	$(AM_V_CXXLD)$(CXXLINK) $(audiotx_OBJECTS) $(audiotx_LDADD) $(LIBS)

ccrtptest$(EXEEXT): $(ccrtptest_OBJECTS) $(ccrtptest_DEPENDENCIES) $(EXTRA_ccrtptest_DEPENDENCIES) 
	@rm -f ccrtptest$(EXEEXT)
	$(AM_V_CXXLD)$(CXXLINK) $(ccrtptest_OBJECTS) $(ccrtptest_LDADD) $(LIBS)

ccsrtptest$(EXEEXT): $(ccsrtptest_OBJECTS) $(ccsrtptest_DEPENDENCIES) $(EXTRA_ccsrtptest_DEPENDENCIES) 
	@rm -f ccsrtptest$(EXEEXT)
	$(AM_V_CXXLD)$(CXXLINK) $(ccsrtptest_OBJECTS) $(ccsrtptest_LDADD) $(LIBS)

rtpduphello$(EXEEXT): $(rtpduphello_OBJECTS) $(rtpduphello_DEPENDENCIES) $(EXTRA_rtpduphello_DEPENDENCIES) 
	@rm -f rtpduphello$(EXEEXT)
	$(AM_V_CXXLD)$(CXXLINK) $(rtpduphello_OBJECTS) $(rtpduphello_LDADD) $(LIBS)

rtphello$(EXEEXT): $(rtphello_OBJECTS) $(rtphello_DEPENDENCIES) $(EXTRA_rtphello_DEPENDENCIES) 
	@rm -f rtphello$(EXEEXT)
	$(AM_V_CXXLD)$(CXXLINK) $(rtphello_OBJECTS) $(rtphello_LDADD) $(LIBS)

rtplisten$(EXEEXT): $(rtplisten_OBJECTS) $(rtplisten_DEPENDENCIES) $(EXTRA_rtplisten_DEPENDENCIES) 
	@rm -f rtplisten$(EXEEXT)
	$(AM_V_CXXLD)$(CXXLINK) $(rtplisten_OBJECTS) $(rtplisten_LDADD) $(LIBS)

rtpsend$(EXEEXT): $(rtpsend_OBJECTS) $(rtpsend_DEPENDENCIES) $(EXTRA_rtpsend_DEPENDENCIES) 
	@rm -f rtpsend$(EXEEXT)
	$(AM_V_CXXLD)$(CXXLINK) $(rtpsend_OBJECTS) $(rtpsend_LDADD) $(LIBS)

mostlyclean-compile:
	-rm -f *.$(OBJEXT)

distclean-compile:
	-rm -f *.tab.c

.cpp.o:
	$(AM_V_CXX)$(CXXCOMPILE) -c -o $@ $<

.cpp.obj:
	$(AM_V_CXX)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`

.cpp.lo:
	$(AM_V_CXX)$(LTCXXCOMPILE) -c -o $@ $<

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs

ID: $(am__tagged_files)
	$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-am
TAGS: tags

tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
	set x; \
	here=`pwd`; \
	$(am__define_uniq_tagged_files); \
	shift; \
	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
	  test -n "$$unique" || unique=$$empty_fix; \
	  if test $$# -gt 0; then \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      "$$@" $$unique; \
	  else \
	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	      $$unique; \
	  fi; \
	fi
ctags: ctags-am

CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
	$(am__define_uniq_tagged_files); \
	test -z "$(CTAGS_ARGS)$$unique" \
	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
	     $$unique

GTAGS:
	here=`$(am__cd) $(top_builddir) && pwd` \
	  && $(am__cd) $(top_srcdir) \
	  && gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-am

cscopelist-am: $(am__tagged_files)
	list='$(am__tagged_files)'; \
	case "$(srcdir)" in \
	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
	  *) sdir=$(subdir)/$(srcdir) ;; \
	esac; \
	for i in $$list; do \
	  if test -f "$$i"; then \
	    echo "$(subdir)/$$i"; \
	  else \
	    echo "$$sdir/$$i"; \
	  fi; \
	done >> $(top_builddir)/cscope.files

distclean-tags:
	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags

distdir: $(DISTFILES)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	list='$(DISTFILES)'; \
	  dist_files=`for file in $$list; do echo $$file; done | \
	  sed -e "s|^$$srcdirstrip/||;t" \
	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
	case $$dist_files in \
	  */*) $(MKDIR_P) `echo "$$dist_files" | \
			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
			   sort -u` ;; \
	esac; \
	for file in $$dist_files; do \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  if test -d $$d/$$file; then \
	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
	    if test -d "$(distdir)/$$file"; then \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
	    fi; \
	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
	  else \
	    test -f "$(distdir)/$$file" \
	    || cp -p $$d/$$file "$(distdir)/$$file" \
	    || exit 1; \
	  fi; \
	done
check-am: all-am
check: check-am
all-am: Makefile $(PROGRAMS)
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-am
install-strip:
	if test -z '$(STRIP)'; then \
	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	      install; \
	else \
	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
	fi
mostlyclean-generic:

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)

maintainer-clean-generic:
	@echo "This command is intended for maintainers to use"
	@echo "it deletes files that may require special tools to rebuild."
clean: clean-am

clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
	mostlyclean-am

distclean: distclean-am
	-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
	distclean-tags

dvi: dvi-am

dvi-am:

html: html-am

html-am:

info: info-am

info-am:

install-data-am:

install-dvi: install-dvi-am

install-dvi-am:

install-exec-am:

install-html: install-html-am

install-html-am:

install-info: install-info-am

install-info-am:

install-man:

install-pdf: install-pdf-am

install-pdf-am:

install-ps: install-ps-am

install-ps-am:

installcheck-am:

maintainer-clean: maintainer-clean-am
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-am

mostlyclean-am: mostlyclean-compile mostlyclean-generic \
	mostlyclean-libtool

pdf: pdf-am

pdf-am:

ps: ps-am

ps-am:

uninstall-am:

.MAKE: install-am install-strip

.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
	clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \
	ctags-am distclean distclean-compile distclean-generic \
	distclean-libtool distclean-tags distdir dvi dvi-am html \
	html-am info info-am install install-am install-data \
	install-data-am install-dvi install-dvi-am install-exec \
	install-exec-am install-html install-html-am install-info \
	install-info-am install-man install-pdf install-pdf-am \
	install-ps install-ps-am install-strip installcheck \
	installcheck-am installdirs maintainer-clean \
	maintainer-clean-generic mostlyclean mostlyclean-compile \
	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
	tags tags-am uninstall uninstall-am


# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
