summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2007-04-18 09:24:31 +0000
committerBenny Prijono <bennylp@teluu.com>2007-04-18 09:24:31 +0000
commit44d9c946fc77600985b869552887497c2a539d5c (patch)
tree555aa1d81fdf55d344f06c0fc5f609fe1c8ea31e
parent05faf09b3f03f8b704e00c1ee533fa2534682109 (diff)
Fixed the legacy build system
git-svn-id: http://svn.pjsip.org/repos/pjproject/branches/split-3rd-party@1202 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--Makefile4
-rwxr-xr-xaconfigure34
-rw-r--r--aconfigure.ac16
-rw-r--r--build/os-linux.mak2
-rwxr-xr-xconfigure-legacy43
-rw-r--r--pjmedia/build/Makefile7
-rw-r--r--pjmedia/build/os-auto.mak.in5
-rw-r--r--pjmedia/build/os-darwinos.mak94
-rw-r--r--pjmedia/build/os-linux.mak87
-rw-r--r--pjmedia/build/os-win32.mak95
-rw-r--r--pjmedia/src/pjmedia/errno.c4
-rw-r--r--pjmedia/src/pjmedia/sound_port.c8
-rw-r--r--pjsip/build/Makefile2
-rw-r--r--third_party/Makefile49
-rw-r--r--third_party/Makefile.in49
-rw-r--r--third_party/build/Makefile12
-rw-r--r--third_party/build/os-auto.mak.in17
-rw-r--r--third_party/build/os-darwinos.mak7
-rw-r--r--third_party/build/os-linux.mak7
-rw-r--r--third_party/build/os-win32.mak7
-rw-r--r--third_party/build/portaudio/Makefile69
-rw-r--r--third_party/build/portaudio/Makefile.in141
-rw-r--r--third_party/build/portaudio/os-auto.mak.in73
-rw-r--r--third_party/build/portaudio/os-linux.mak34
-rw-r--r--user.mak.sample2
25 files changed, 560 insertions, 308 deletions
diff --git a/Makefile b/Makefile
index d6862e94..f09c54a7 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
include build.mak
include build/host-$(HOST_NAME).mak
-DIRS = pjlib pjlib-util pjnath pjmedia pjsip pjsip-apps
+DIRS = pjlib pjlib-util pjnath third_party pjmedia pjsip pjsip-apps
ifdef MINSIZE
MAKE_FLAGS := MINSIZE=1
@@ -9,13 +9,11 @@ endif
all clean dep depend distclean doc print realclean:
for dir in $(DIRS); do \
- if [ -d $$dir ]; then \
if $(MAKE) $(MAKE_FLAGS) -C $$dir/build $@; then \
true; \
else \
exit 1; \
fi; \
- fi; \
done
LIBS = pjlib/lib/libpj-$(TARGET_NAME).a \
diff --git a/aconfigure b/aconfigure
index 66fbcf92..9d8286c8 100755
--- a/aconfigure
+++ b/aconfigure
@@ -308,7 +308,7 @@ ac_includes_default="\
# include <unistd.h>
#endif"
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX ac_pjdir CPP EGREP ac_os_objs ac_pjmedia_snd ac_pa_cflags ac_pa_use_alsa ac_no_small_filter ac_no_large_filter ac_no_g711_plc ac_no_speex_aec ac_no_g711_codec ac_no_l16_codec ac_no_gsm_codec ac_no_speex_codec ac_no_ilbc_codec ac_no_ssl openssl_h_present libssl_present libcrypto_present ac_cross_compile ac_linux_poll ac_host ac_main_obj LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CXX CXXFLAGS ac_ct_CXX ac_pjdir CPP EGREP ac_os_objs ac_pjmedia_snd ac_pa_cflags ac_pa_use_alsa ac_no_small_filter ac_no_large_filter ac_no_speex_aec ac_no_g711_codec ac_no_l16_codec ac_no_gsm_codec ac_no_speex_codec ac_no_ilbc_codec ac_no_ssl openssl_h_present libssl_present libcrypto_present ac_cross_compile ac_linux_poll ac_host ac_main_obj LIBOBJS LTLIBOBJS'
ac_subst_files=''
# Initialize some variables set by options.
@@ -1439,7 +1439,7 @@ test -n "$target_alias" &&
program_prefix=${target_alias}-
ac_config_headers="$ac_config_headers pjlib/include/pj/compat/os_auto.h pjlib/include/pj/compat/m_auto.h pjmedia/include/pjmedia/config_auto.h pjmedia/include/pjmedia-codec/config_auto.h pjsip/include/pjsip/sip_autoconf.h"
- ac_config_files="$ac_config_files build.mak build/os-auto.mak pjlib/build/os-auto.mak pjlib-util/build/os-auto.mak pjmedia/build/os-auto.mak pjsip/build/os-auto.mak third_party/Makefile third_party/build/portaudio/Makefile"
+ ac_config_files="$ac_config_files build.mak build/os-auto.mak pjlib/build/os-auto.mak pjlib-util/build/os-auto.mak pjmedia/build/os-auto.mak pjsip/build/os-auto.mak third_party/build/portaudio/os-auto.mak third_party/build/os-auto.mak"
@@ -9013,9 +9013,6 @@ else
echo "${ECHO_T}Checking if large filter is disabled... no" >&6
fi;
-ac_no_g711_plc=yes
-
-
# Check whether --enable-speex-aec or --disable-speex-aec was given.
if test "${enable_speex_aec+set}" = set; then
@@ -10081,8 +10078,8 @@ do
"pjlib-util/build/os-auto.mak" ) CONFIG_FILES="$CONFIG_FILES pjlib-util/build/os-auto.mak" ;;
"pjmedia/build/os-auto.mak" ) CONFIG_FILES="$CONFIG_FILES pjmedia/build/os-auto.mak" ;;
"pjsip/build/os-auto.mak" ) CONFIG_FILES="$CONFIG_FILES pjsip/build/os-auto.mak" ;;
- "third_party/Makefile" ) CONFIG_FILES="$CONFIG_FILES third_party/Makefile" ;;
- "third_party/build/portaudio/Makefile" ) CONFIG_FILES="$CONFIG_FILES third_party/build/portaudio/Makefile" ;;
+ "third_party/build/portaudio/os-auto.mak" ) CONFIG_FILES="$CONFIG_FILES third_party/build/portaudio/os-auto.mak" ;;
+ "third_party/build/os-auto.mak" ) CONFIG_FILES="$CONFIG_FILES third_party/build/os-auto.mak" ;;
"pjlib/include/pj/compat/os_auto.h" ) CONFIG_HEADERS="$CONFIG_HEADERS pjlib/include/pj/compat/os_auto.h" ;;
"pjlib/include/pj/compat/m_auto.h" ) CONFIG_HEADERS="$CONFIG_HEADERS pjlib/include/pj/compat/m_auto.h" ;;
"pjmedia/include/pjmedia/config_auto.h" ) CONFIG_HEADERS="$CONFIG_HEADERS pjmedia/include/pjmedia/config_auto.h" ;;
@@ -10203,7 +10200,6 @@ s,@ac_pa_cflags@,$ac_pa_cflags,;t t
s,@ac_pa_use_alsa@,$ac_pa_use_alsa,;t t
s,@ac_no_small_filter@,$ac_no_small_filter,;t t
s,@ac_no_large_filter@,$ac_no_large_filter,;t t
-s,@ac_no_g711_plc@,$ac_no_g711_plc,;t t
s,@ac_no_speex_aec@,$ac_no_speex_aec,;t t
s,@ac_no_g711_codec@,$ac_no_g711_codec,;t t
s,@ac_no_l16_codec@,$ac_no_l16_codec,;t t
@@ -10707,3 +10703,25 @@ if test "$no_create" != yes; then
fi
+
+echo "$as_me:$LINENO: result:
+
+The configuration for current target has been written to 'build.mak', and 'os-auto.mak' in various build directories.
+
+Customizations can be put in:
+ - 'user.mak'
+ - 'pjlib/include/pj/config_site.h'
+
+The next step now is to run 'make dep' and 'make'.
+" >&5
+echo "${ECHO_T}
+
+The configuration for current target has been written to 'build.mak', and 'os-auto.mak' in various build directories.
+
+Customizations can be put in:
+ - 'user.mak'
+ - 'pjlib/include/pj/config_site.h'
+
+The next step now is to run 'make dep' and 'make'.
+" >&6
+
diff --git a/aconfigure.ac b/aconfigure.ac
index 44a25ade..c22c8268 100644
--- a/aconfigure.ac
+++ b/aconfigure.ac
@@ -17,8 +17,8 @@ AC_CONFIG_FILES([build.mak
pjlib-util/build/os-auto.mak
pjmedia/build/os-auto.mak
pjsip/build/os-auto.mak
- third_party/Makefile
- third_party/build/portaudio/Makefile
+ third_party/build/portaudio/os-auto.mak
+ third_party/build/os-auto.mak
])
@@ -517,3 +517,15 @@ esac
AC_SUBST(CC)
AC_OUTPUT()
+
+AC_MSG_RESULT([
+
+The configuration for current target has been written to 'build.mak', and 'os-auto.mak' in various build directories.
+
+Customizations can be put in:
+ - 'user.mak'
+ - 'pjlib/include/pj/config_site.h'
+
+The next step now is to run 'make dep' and 'make'.
+])
+
diff --git a/build/os-linux.mak b/build/os-linux.mak
index 4c9e4ec3..d3783b84 100644
--- a/build/os-linux.mak
+++ b/build/os-linux.mak
@@ -2,7 +2,7 @@ export OS_CFLAGS := $(CC_DEF)PJ_LINUX=1
export OS_CXXFLAGS :=
-export OS_LDFLAGS := $(CC_LIB)pthread$(LIBEXT2) -lm
+export OS_LDFLAGS := -lportaudio-$(TARGET_NAME) -lgsmcodec-$(TARGET_NAME) -lilbccodec-$(TARGET_NAME) -lspeex-$(TARGET_NAME) -lresample-$(TARGET_NAME) $(CC_LIB)pthread$(LIBEXT2) -lm
export OS_SOURCES :=
diff --git a/configure-legacy b/configure-legacy
index 4e16315e..a84cc5e4 100755
--- a/configure-legacy
+++ b/configure-legacy
@@ -1,5 +1,7 @@
#!/bin/sh
+PJDIR=`pwd`
+
#
# Detect machine, unless the choice has been made already.
#
@@ -91,16 +93,18 @@ if test -f build.mak; then
cp -f build.mak build.mak.old
fi
-echo 'Writing build.mak as follows:'
-echo " MACHINE_NAME = $MACHINE_NAME"
-echo " OS_NAME = $OS_NAME"
-echo " HOST_NAME = $HOST_NAME"
-echo " CC_NAME = $CC_NAME"
-echo " TARGET_NAME = $TARGET_NAME"
-echo " CROSS_COMPILE= $CROSS_COMPILE"
-echo " LINUX_POLL = $LINUX_POLL"
+echo 'build.mak configurations are set as follows:'
+echo " PJDIR = $PJDIR"
+echo " MACHINE_NAME = $MACHINE_NAME"
+echo " OS_NAME = $OS_NAME"
+echo " HOST_NAME = $HOST_NAME"
+echo " CC_NAME = $CC_NAME"
+echo " TARGET_NAME = $TARGET_NAME"
+echo " CROSS_COMPILE = $CROSS_COMPILE"
+echo " LINUX_POLL = $LINUX_POLL"
echo "# Auto-generated build.mak" > build.mak
+echo "export PJDIR := $PJDIR" >> build.mak
echo "export MACHINE_NAME := $MACHINE_NAME" >> build.mak
echo "export OS_NAME := $OS_NAME" >> build.mak
echo "export HOST_NAME := $HOST_NAME" >> build.mak
@@ -109,8 +113,31 @@ echo "export TARGET_NAME := $TARGET_NAME" >> build.mak
echo "export CROSS_COMPILE := $CROSS_COMPILE" >> build.mak
echo "export LINUX_POLL := $LINUX_POLL" >> build.mak
+echo >> build.mak
+
+cat << EOF >> build.mak
+export APP_CC = \$(CROSS_COMPILE)\$(CC_NAME)
+
+export APP_CFLAGS = \$(CC_CFLAGS) \$(OS_CFLAGS) \$(HOST_CFLAGS) \$(M_CFLAGS) \$(CFLAGS) -I\$(PJDIR)/pjlib/include -I\$(PJDIR)/pjlib-util/include -I\$(PJDIR)/pjnath/include -I\$(PJDIR)/pjmedia/include -I\$(PJDIR)/pjsip/include
+
+export APP_CXXFLAGS = \$(APP_CFLAGS)
+
+export APP_LDFLAGS = -L\$(PJDIR)/pjlib/lib -L\$(PJDIR)/pjlib-util/lib -L\$(PJDIR)/pjnath/lib -L\$(PJDIR)/pjmedia/lib -L\$(PJDIR)/pjsip/lib -L\$(PJDIR)/third_party/lib
+
+export APP_LDLIBS = -lpjsua-\$(TARGET_NAME) -lpjsip-ua-\$(TARGET_NAME) -lpjsip-simple-\$(TARGET_NAME) -lpjsip-\$(TARGET_NAME) -lpjmedia-codec-\$(TARGET_NAME) -lpjmedia-\$(TARGET_NAME) -lpjnath-\$(TARGET_NAME) -lpjlib-util-\$(TARGET_NAME) \$(APP_THIRD_PARTY_LIBS) -lpj-\$(TARGET_NAME) \$(CC_LDFLAGS) \$(OS_LDFLAGS) \$(M_LDFLAGS) \$(HOST_LDFLAGS) \$(LDFLAGS)
+
+export PJ_DIR = \$(PJDIR)
+export PJ_CC = \$(APP_CC)
+export PJ_CFLAGS = \$(APP_CFLAGS)
+export PJ_CXXFLAGS = \$(APP_CXXFLAGS)
+export PJ_LDFLAGS = \$(APP_LDFLAGS)
+export PJ_LDLIBS = \$(APP_LDLIBS)
+
+EOF
+
touch user.mak
+
echo
echo "The configuration for current host has been written to 'build.mak'."
echo "Customizations can be put in:"
diff --git a/pjmedia/build/Makefile b/pjmedia/build/Makefile
index 7e9d060d..11ffdc9d 100644
--- a/pjmedia/build/Makefile
+++ b/pjmedia/build/Makefile
@@ -1,7 +1,10 @@
include ../../build.mak
+
+THIRD_PARTY:=$(PJDIR)/third_party
+PA_DIR := $(THIRD_PARTY)/build/portaudio/src
+
include $(PJDIR)/build/common.mak
-THIRD_PARTY:=../../third_party
RULES_MAK := $(PJDIR)/build/rules.mak
PJLIB_LIB:=$(PJDIR)/pjlib/lib/libpj-$(TARGET_NAME)$(LIBEXT)
@@ -38,7 +41,7 @@ export _LDFLAGS := $(subst /,$(HOST_PSEP),$(PJMEDIA_LIB)) \
export PJMEDIA_SRCDIR = ../src/pjmedia
export PJMEDIA_OBJS += $(OS_OBJS) $(M_OBJS) $(CC_OBJS) $(HOST_OBJS) \
alaw_ulaw.o alaw_ulaw_table.o clock_thread.o codec.o \
- conference.o echo_common.o echo_port.o echo_speex.o \
+ conference.o echo_common.o echo_port.o \
echo_suppress.o endpoint.o errno.o \
g711.o jbuf.o master_port.o mem_capture.o mem_player.o \
null_port.o plc_common.o port.o splitcomb.o \
diff --git a/pjmedia/build/os-auto.mak.in b/pjmedia/build/os-auto.mak.in
index 3c95d0d9..7e18ea92 100644
--- a/pjmedia/build/os-auto.mak.in
+++ b/pjmedia/build/os-auto.mak.in
@@ -52,6 +52,11 @@ export CFLAGS += -DPJMEDIA_HAS_SPEEX_CODEC=0
else
export CFLAGS += -I$(THIRD_PARTY)/build/speex -I$(THIRD_PARTY)/speex/include
export CODEC_OBJS += speex_codec.o
+
+ifneq (@ac_no_speex_aec@,1)
+export PJMEDIA_OBJS += echo_speex.o
+endif
+
endif
ifeq ($(AC_NO_ILBC_CODEC),1)
diff --git a/pjmedia/build/os-darwinos.mak b/pjmedia/build/os-darwinos.mak
index ea7492a5..f76d3403 100644
--- a/pjmedia/build/os-darwinos.mak
+++ b/pjmedia/build/os-darwinos.mak
@@ -1,17 +1,91 @@
+
+# PJMEDIA features exclusion
+export CFLAGS +=
+
+# Define the desired sound device backend
+# Valid values are:
+# - pa_unix: PortAudio on Unix (OSS or ALSA)
+# - pa_darwinos: PortAudio on MacOSX (CoreAudio)
+# - pa_old_darwinos: PortAudio on MacOSX (old CoreAudio, for OSX 10.2)
+# - pa_win32: PortAudio on Win32 (WMME)
+# - ds: Win32 DirectSound (dsound.c)
+# - null: Null sound device (nullsound.c)
+AC_PJMEDIA_SND=pa_old_darwinos
+
+# For Unix, specify if ALSA should be supported
+AC_PA_USE_ALSA=0
+
+#
+# Codecs
+#
+AC_NO_G711_CODEC=0
+AC_NO_L16_CODEC=0
+AC_NO_GSM_CODEC=0
+AC_NO_SPEEX_CODEC=0
+AC_NO_ILBC_CODEC=0
+
+export CODEC_OBJS=
+
+ifeq ($(AC_NO_G711_CODEC),1)
+export CFLAGS += -DPJMEDIA_HAS_G711_CODEC=0
+else
+export CODEC_OBJS +=
+endif
+
+ifeq ($(AC_NO_L16_CODEC),1)
+export CFLAGS += -DPJMEDIA_HAS_L16_CODEC=0
+else
+export CODEC_OBJS += l16.o
+endif
+
+ifeq ($(AC_NO_GSM_CODEC),1)
+export CFLAGS += -DPJMEDIA_HAS_GSM_CODEC=0
+else
+export CODEC_OBJS += gsm.o
+endif
+
+ifeq ($(AC_NO_SPEEX_CODEC),1)
+export CFLAGS += -DPJMEDIA_HAS_SPEEX_CODEC=0
+else
+export CFLAGS += -I$(THIRD_PARTY)/build/speex -I$(THIRD_PARTY)/speex/include
+export CODEC_OBJS += speex_codec.o
+
+#ifeq (@ac_no_speex_aec@,1)
+ifeq (0,1)
+export PJMEDIA_OBJS += echo_speex.o
+endif
+
+endif
+
+ifeq ($(AC_NO_ILBC_CODEC),1)
+export CFLAGS += -DPJMEDIA_HAS_ILBC_CODEC=0
+else
+export CODEC_OBJS += ilbc.o
+endif
+
+
+#
+# PortAudio
+#
+ifneq ($(findstring pa,$(AC_PJMEDIA_SND)),)
+export CFLAGS += -I$(THIRD_PARTY)/build/portaudio -I$(THIRD_PARTY)/portaudio/include -DPJMEDIA_SOUND_IMPLEMENTATION=PJMEDIA_SOUND_PORTAUDIO_SOUND
+export SOUND_OBJS = pasound.o
+endif
+
#
-# OS specific configuration for Darwin/MacOS target.
+# Win32 DirectSound
#
+ifeq ($(AC_PJMEDIA_SND),ds)
+export SOUND_OBJS = dsound.o
+export CFLAGS += -DPJMEDIA_SOUND_IMPLEMENTATION=PJMEDIA_SOUND_WIN32_DIRECT_SOUND
+endif
#
-# PJMEDIA_OBJS specified here are object files to be included in PJMEDIA
-# (the library) for this specific operating system. Object files common
-# to all operating systems should go in Makefile instead.
+# Last resort, null sound device
#
-export PJMEDIA_OBJS += $(PA_DIR)/pa_mac_hostapis.o \
- $(PA_DIR)/pa_unix_util.o \
- $(PA_DIR)/pa_mac_core.o
+ifeq ($(AC_PJMEDIA_SND),null)
+export SOUND_OBJS = nullsound.o
+export CFLAGS += -DPJMEDIA_SOUND_IMPLEMENTATION=PJMEDIA_SOUND_NULL_SOUND
+endif
-# $(PA_DIR)/pa_mac_alt.o
-# $(PA_DIR)/ringbuffer.o
-export OS_CFLAGS += $(CC_DEF)PA_USE_COREAUDIO=1 $(CC_DEF)PA_BIG_ENDIAN=1
diff --git a/pjmedia/build/os-linux.mak b/pjmedia/build/os-linux.mak
index adc1936b..f707eb5c 100644
--- a/pjmedia/build/os-linux.mak
+++ b/pjmedia/build/os-linux.mak
@@ -1,14 +1,85 @@
+# Linux
+
+# Define the desired sound device backend
+# Valid values are:
+# - pa_unix: PortAudio on Unix (OSS or ALSA)
+# - pa_darwinos: PortAudio on MacOSX (CoreAudio)
+# - pa_old_darwinos: PortAudio on MacOSX (old CoreAudio, for OSX 10.2)
+# - pa_win32: PortAudio on Win32 (WMME)
+# - ds: Win32 DirectSound (dsound.c)
+# - null: Null sound device (nullsound.c)
+AC_PJMEDIA_SND=pa_unix
+
+#
+# Codecs
+#
+AC_NO_G711_CODEC=0
+AC_NO_L16_CODEC=0
+AC_NO_GSM_CODEC=0
+AC_NO_SPEEX_CODEC=0
+AC_NO_ILBC_CODEC=0
+
+export CODEC_OBJS=
+
+ifeq ($(AC_NO_G711_CODEC),1)
+export CFLAGS += -DPJMEDIA_HAS_G711_CODEC=0
+else
+export CODEC_OBJS +=
+endif
+
+ifeq ($(AC_NO_L16_CODEC),1)
+export CFLAGS += -DPJMEDIA_HAS_L16_CODEC=0
+else
+export CODEC_OBJS += l16.o
+endif
+
+ifeq ($(AC_NO_GSM_CODEC),1)
+export CFLAGS += -DPJMEDIA_HAS_GSM_CODEC=0
+else
+export CODEC_OBJS += gsm.o
+endif
+
+ifeq ($(AC_NO_SPEEX_CODEC),1)
+export CFLAGS += -DPJMEDIA_HAS_SPEEX_CODEC=0
+else
+export CFLAGS += -I$(THIRD_PARTY)/build/speex -I$(THIRD_PARTY)/speex/include
+export CODEC_OBJS += speex_codec.o
+
+ifeq (1,1)
+export PJMEDIA_OBJS += echo_speex.o
+endif
+
+endif
+
+ifeq ($(AC_NO_ILBC_CODEC),1)
+export CFLAGS += -DPJMEDIA_HAS_ILBC_CODEC=0
+else
+export CODEC_OBJS += ilbc.o
+endif
+
+
#
-# OS specific configuration for Linux OS target.
+# PortAudio
#
+ifneq ($(findstring pa,$(AC_PJMEDIA_SND)),)
+export CFLAGS += -I$(THIRD_PARTY)/build/portaudio -I$(THIRD_PARTY)/portaudio/include -DPJMEDIA_SOUND_IMPLEMENTATION=PJMEDIA_SOUND_PORTAUDIO_SOUND
+export SOUND_OBJS = pasound.o
+endif
#
-# PJMEDIA_OBJS specified here are object files to be included in PJMEDIA
-# (the library) for this specific operating system. Object files common
-# to all operating systems should go in Makefile instead.
+# Win32 DirectSound
#
-export PJMEDIA_OBJS += $(PA_DIR)/pa_unix_hostapis.o $(PA_DIR)/pa_unix_util.o \
- $(PA_DIR)/pa_unix_oss.o
-# $(PA_DIR)/pa_linux_alsa.o
+ifeq ($(AC_PJMEDIA_SND),ds)
+export SOUND_OBJS = dsound.o
+export CFLAGS += -DPJMEDIA_SOUND_IMPLEMENTATION=PJMEDIA_SOUND_WIN32_DIRECT_SOUND
+endif
+
+#
+# Last resort, null sound device
+#
+ifeq ($(AC_PJMEDIA_SND),null)
+export SOUND_OBJS = nullsound.o
+export CFLAGS += -DPJMEDIA_SOUND_IMPLEMENTATION=PJMEDIA_SOUND_NULL_SOUND
+endif
+
-export OS_CFLAGS += $(CC_DEF)PA_USE_OSS=1
diff --git a/pjmedia/build/os-win32.mak b/pjmedia/build/os-win32.mak
index 78095336..0767ceec 100644
--- a/pjmedia/build/os-win32.mak
+++ b/pjmedia/build/os-win32.mak
@@ -1,26 +1,87 @@
+# PJMEDIA features exclusion
+export CFLAGS +=
+
+# Define the desired sound device backend
+# Valid values are:
+# - pa_unix: PortAudio on Unix (OSS or ALSA)
+# - pa_darwinos: PortAudio on MacOSX (CoreAudio)
+# - pa_old_darwinos: PortAudio on MacOSX (old CoreAudio, for OSX 10.2)
+# - pa_win32: PortAudio on Win32 (WMME)
+# - ds: Win32 DirectSound (dsound.c)
+# - null: Null sound device (nullsound.c)
+AC_PJMEDIA_SND=pa_win32
+
#
-# OS specific configuration for Win32 OS target.
+# Codecs
#
+AC_NO_G711_CODEC=0
+AC_NO_L16_CODEC=0
+AC_NO_GSM_CODEC=0
+AC_NO_SPEEX_CODEC=0
+AC_NO_ILBC_CODEC=0
+
+export CODEC_OBJS=
+
+ifeq ($(AC_NO_G711_CODEC),1)
+export CFLAGS += -DPJMEDIA_HAS_G711_CODEC=0
+else
+export CODEC_OBJS +=
+endif
+
+ifeq ($(AC_NO_L16_CODEC),1)
+export CFLAGS += -DPJMEDIA_HAS_L16_CODEC=0
+else
+export CODEC_OBJS += l16.o
+endif
+
+ifeq ($(AC_NO_GSM_CODEC),1)
+export CFLAGS += -DPJMEDIA_HAS_GSM_CODEC=0
+else
+export CODEC_OBJS += gsm.o
+endif
+
+ifeq ($(AC_NO_SPEEX_CODEC),1)
+export CFLAGS += -DPJMEDIA_HAS_SPEEX_CODEC=0
+else
+export CFLAGS += -I$(THIRD_PARTY)/build/speex -I$(THIRD_PARTY)/speex/include
+export CODEC_OBJS += speex_codec.o
+
+#ifeq (@ac_no_speex_aec@,1)
+ifeq (0,1)
+export PJMEDIA_OBJS += echo_speex.o
+endif
+
+endif
+
+ifeq ($(AC_NO_ILBC_CODEC),1)
+export CFLAGS += -DPJMEDIA_HAS_ILBC_CODEC=0
+else
+export CODEC_OBJS += ilbc.o
+endif
+
#
-# PJMEDIA_OBJS specified here are object files to be included in PJMEDIA
-# (the library) for this specific operating system. Object files common
-# to all operating systems should go in Makefile instead.
+# PortAudio
#
-export PJMEDIA_OBJS += $(PA_DIR)/pa_win_hostapis.o $(PA_DIR)/pa_win_util.o \
- $(PA_DIR)/pa_win_wmme.o
+ifneq ($(findstring pa,$(AC_PJMEDIA_SND)),)
+export CFLAGS += -I$(THIRD_PARTY)/build/portaudio -I$(THIRD_PARTY)/portaudio/include -DPJMEDIA_SOUND_IMPLEMENTATION=PJMEDIA_SOUND_PORTAUDIO_SOUND
+export SOUND_OBJS = pasound.o
+endif
-export OS_CFLAGS += -DPA_NO_ASIO -DPA_NO_DS \
- -DPJMEDIA_SOUND_IMPLEMENTATION=PJMEDIA_SOUND_PORTAUDIO_SOUND
+#
+# Win32 DirectSound
+#
+ifeq ($(AC_PJMEDIA_SND),ds)
+export SOUND_OBJS = dsound.o
+export CFLAGS += -DPJMEDIA_SOUND_IMPLEMENTATION=PJMEDIA_SOUND_WIN32_DIRECT_SOUND
+endif
-# Example:
-# to activate Null sound, uncomment these two lines below.
-#export SOUND_OBJS = $(NULLSOUND_OBJS)
-#export OS_CFLAGS += $(CC_DEF)PJMEDIA_HAS_NULL_SOUND
+#
+# Last resort, null sound device
+#
+ifeq ($(AC_PJMEDIA_SND),null)
+export SOUND_OBJS = nullsound.o
+export CFLAGS += -DPJMEDIA_SOUND_IMPLEMENTATION=PJMEDIA_SOUND_NULL_SOUND
+endif
-# Example:
-# to include only GSM and exclude Speex codec, uncomment the "export" line below.
-# Note that you'll need to put "#define PJMEDIA_HAS_SPEEX_CODEC 0" in
-# <pj/config_site.h>
-#export CODEC_OBJS = $(GSM_OBJS)
diff --git a/pjmedia/src/pjmedia/errno.c b/pjmedia/src/pjmedia/errno.c
index e23c9a89..c2093430 100644
--- a/pjmedia/src/pjmedia/errno.c
+++ b/pjmedia/src/pjmedia/errno.c
@@ -19,7 +19,9 @@
#include <pjmedia/errno.h>
#include <pjmedia/types.h>
#include <pj/string.h>
-#include <portaudio.h>
+#if PJMEDIA_SOUND_IMPLEMENTATION == PJMEDIA_SOUND_PORTAUDIO_SOUND
+# include <portaudio.h>
+#endif
diff --git a/pjmedia/src/pjmedia/sound_port.c b/pjmedia/src/pjmedia/sound_port.c
index 358f616c..1f64344b 100644
--- a/pjmedia/src/pjmedia/sound_port.c
+++ b/pjmedia/src/pjmedia/sound_port.c
@@ -25,14 +25,6 @@
#include <pj/rand.h>
#include <pj/string.h> /* pj_memset() */
-#ifndef PJMEDIA_SOUND_HAS_AEC
-# define PJMEDIA_SOUND_HAS_AEC 1
-#endif
-
-#if defined(PJMEDIA_SOUND_HAS_AEC) && PJMEDIA_SOUND_HAS_AEC!=0
-# include <speex/speex_echo.h>
-#endif
-
//#define SIMULATE_LOST_PCT 20
#define AEC_TAIL 128 /* default AEC length in ms */
#define AEC_SUSPEND_LIMIT 5 /* seconds of no activity */
diff --git a/pjsip/build/Makefile b/pjsip/build/Makefile
index 66b86f11..e9fc2d32 100644
--- a/pjsip/build/Makefile
+++ b/pjsip/build/Makefile
@@ -89,7 +89,7 @@ export TEST_OBJS += dlg_core_test.o dns_test.o msg_err_test.o \
tsx_basic_test.o tsx_bench.o tsx_uac_test.o \
tsx_uas_test.o txdata_test.o uri_test.o
export TEST_CFLAGS += $(_CFLAGS)
-export TEST_LDFLAGS += $(APP_LDFLAGS) $(APP_LDLIBS)
+export TEST_LDFLAGS += $(PJ_LDFLAGS) $(PJ_LDLIBS)
export TEST_EXE := ../bin/pjsip-test-$(TARGET_NAME)$(HOST_EXE)
diff --git a/third_party/Makefile b/third_party/Makefile
deleted file mode 100644
index 6a43479c..00000000
--- a/third_party/Makefile
+++ /dev/null
@@ -1,49 +0,0 @@
-include ../build.mak
-include $(PJDIR)/build/host-$(HOST_NAME).mak
-
-DIRS = build/resample
-
-ifeq (,1)
-else
-DIRS += build/gsm
-endif
-
-ifeq (,1)
-else
-DIRS += build/ilbc
-endif
-
-ifeq (,1)
-else
-DIRS += build/speex
-endif
-
-ifeq (pa_unix,pa_old_darwinos)
-DIRS += build/portaudio
-endif
-
-ifeq (pa_unix,pa_darwinos)
-DIRS += build/portaudio
-endif
-
-ifeq (pa_unix,pa_win32)
-DIRS += build/portaudio
-endif
-
-ifeq (pa_unix,pa_unix)
-DIRS += build/portaudio
-endif
-
-
-
-all clean dep depend distclean realclean:
- for dir in $(DIRS); do \
- if [ -d $$dir ]; then \
- if $(MAKE) $(MAKE_FLAGS) -C $$dir $@; then \
- true; \
- else \
- exit 1; \
- fi; \
- fi; \
- done
-
diff --git a/third_party/Makefile.in b/third_party/Makefile.in
deleted file mode 100644
index 43c646d4..00000000
--- a/third_party/Makefile.in
+++ /dev/null
@@ -1,49 +0,0 @@
-include ../build.mak
-include $(PJDIR)/build/host-$(HOST_NAME).mak
-
-DIRS = build/resample
-
-ifeq (@ac_no_gsm_codec@,1)
-else
-DIRS += build/gsm
-endif
-
-ifeq (@ac_no_ilbc_codec@,1)
-else
-DIRS += build/ilbc
-endif
-
-ifeq (@ac_no_speex_codec@,1)
-else
-DIRS += build/speex
-endif
-
-ifeq (@ac_pjmedia_snd@,pa_old_darwinos)
-DIRS += build/portaudio
-endif
-
-ifeq (@ac_pjmedia_snd@,pa_darwinos)
-DIRS += build/portaudio
-endif
-
-ifeq (@ac_pjmedia_snd@,pa_win32)
-DIRS += build/portaudio
-endif
-
-ifeq (@ac_pjmedia_snd@,pa_unix)
-DIRS += build/portaudio
-endif
-
-
-
-all clean dep depend distclean realclean:
- for dir in $(DIRS); do \
- if [ -d $$dir ]; then \
- if $(MAKE) $(MAKE_FLAGS) -C $$dir $@; then \
- true; \
- else \
- exit 1; \
- fi; \
- fi; \
- done
-
diff --git a/third_party/build/Makefile b/third_party/build/Makefile
new file mode 100644
index 00000000..204adcf5
--- /dev/null
+++ b/third_party/build/Makefile
@@ -0,0 +1,12 @@
+include ../../build.mak
+include $(PJDIR)/build/common.mak
+
+all clean dep depend distclean realclean:
+ for dir in $(DIRS); do \
+ if $(MAKE) $(MAKE_FLAGS) -C $$dir $@; then \
+ true; \
+ else \
+ exit 1; \
+ fi; \
+ done
+
diff --git a/third_party/build/os-auto.mak.in b/third_party/build/os-auto.mak.in
new file mode 100644
index 00000000..82c90e3b
--- /dev/null
+++ b/third_party/build/os-auto.mak.in
@@ -0,0 +1,17 @@
+DIRS = resample
+
+ifneq (@ac_no_gsm_codec@,1)
+DIRS += gsm
+endif
+
+ifneq (@ac_no_ilbc_codec@,1)
+DIRS += ilbc
+endif
+
+ifneq (@ac_no_speex_codec@,1)
+DIRS += speex
+endif
+
+ifneq ($(findstring pa,@ac_pjmedia_snd@),)
+DIRS += portaudio
+endif
diff --git a/third_party/build/os-darwinos.mak b/third_party/build/os-darwinos.mak
new file mode 100644
index 00000000..2e7dfe06
--- /dev/null
+++ b/third_party/build/os-darwinos.mak
@@ -0,0 +1,7 @@
+DIRS = resample
+DIRS += gsm
+DIRS += ilbc
+DIRS += speex
+DIRS += portaudio
+
+
diff --git a/third_party/build/os-linux.mak b/third_party/build/os-linux.mak
new file mode 100644
index 00000000..2e7dfe06
--- /dev/null
+++ b/third_party/build/os-linux.mak
@@ -0,0 +1,7 @@
+DIRS = resample
+DIRS += gsm
+DIRS += ilbc
+DIRS += speex
+DIRS += portaudio
+
+
diff --git a/third_party/build/os-win32.mak b/third_party/build/os-win32.mak
new file mode 100644
index 00000000..2e7dfe06
--- /dev/null
+++ b/third_party/build/os-win32.mak
@@ -0,0 +1,7 @@
+DIRS = resample
+DIRS += gsm
+DIRS += ilbc
+DIRS += speex
+DIRS += portaudio
+
+
diff --git a/third_party/build/portaudio/Makefile b/third_party/build/portaudio/Makefile
new file mode 100644
index 00000000..e1cfa654
--- /dev/null
+++ b/third_party/build/portaudio/Makefile
@@ -0,0 +1,69 @@
+# @configure_input@
+include ../../../build.mak
+include $(PJDIR)/build/common.mak
+
+export LIBDIR := ../../lib
+
+RULES_MAK := $(PJDIR)/build/rules.mak
+
+export PORTAUDIO_LIB:=../../lib/libportaudio-$(TARGET_NAME)$(LIBEXT)
+
+PORTAUDIO_OBJS += pa_allocation.o \
+ pa_converters.o \
+ pa_cpuload.o \
+ pa_dither.o \
+ pa_debugprint.o \
+ pa_front.o \
+ pa_process.o \
+ pa_skeleton.o \
+ pa_stream.o \
+ pa_trace.o
+
+
+###############################################################################
+# Gather all flags.
+#
+export _CFLAGS += $(CC_CFLAGS) $(OS_CFLAGS) $(HOST_CFLAGS) $(M_CFLAGS) \
+ $(CFLAGS) $(CC_INC). $(CC_INC)src
+export _CXXFLAGS+= $(_CFLAGS) $(CC_CXXFLAGS) $(OS_CXXFLAGS) $(M_CXXFLAGS) \
+ $(HOST_CXXFLAGS) $(CXXFLAGS)
+export _LDFLAGS += $(CC_LDFLAGS) $(OS_LDFLAGS) $(M_LDFLAGS) $(HOST_LDFLAGS) \
+ $(LDFLAGS)
+
+###############################################################################
+# Defines for building PORTAUDIO library
+#
+export PORTAUDIO_SRCDIR = src
+export PORTAUDIO_OBJS +=
+export PORTAUDIO_CFLAGS += $(_CFLAGS)
+
+export CC_OUT CC AR RANLIB HOST_MV HOST_RM HOST_RMDIR HOST_MKDIR OBJEXT LD LDOUT
+###############################################################################
+# Main entry
+#
+# $(TARGET) is defined in os-$(OS_NAME).mak file in current directory.
+#
+TARGETS := libportaudio
+
+all: $(TARGETS)
+
+dep: depend
+distclean: realclean
+
+.PHONY: dep depend libportaudio clean realclean distclean
+
+libportaudio:
+ $(MAKE) -f $(RULES_MAK) APP=PORTAUDIO app=libportaudio $(PORTAUDIO_LIB)
+
+clean:
+ $(MAKE) -f $(RULES_MAK) APP=PORTAUDIO app=libportaudio $@
+
+realclean:
+ $(subst @@,$(subst /,$(HOST_PSEP),.libportaudio-$(TARGET_NAME).depend),$(HOST_RMR))
+
+ $(MAKE) -f $(RULES_MAK) APP=PORTAUDIO app=libportaudio $@
+
+depend:
+ $(MAKE) -f $(RULES_MAK) APP=PORTAUDIO app=libportaudio $@
+ echo '$(PORTAUDIO_LIB): .libportaudio-$(TARGET_NAME).depend' >> .libportaudio-$(TARGET_NAME).depend; \
+
diff --git a/third_party/build/portaudio/Makefile.in b/third_party/build/portaudio/Makefile.in
deleted file mode 100644
index 223e4843..00000000
--- a/third_party/build/portaudio/Makefile.in
+++ /dev/null
@@ -1,141 +0,0 @@
-# @configure_input@
-include ../../../build.mak
-include $(PJDIR)/build/common.mak
-
-export LIBDIR := ../../lib
-
-RULES_MAK := $(PJDIR)/build/rules.mak
-
-export PORTAUDIO_LIB:=../../lib/libportaudio-$(TARGET_NAME)$(LIBEXT)
-
-PORTAUDIO_OBJS := pa_allocation.o \
- pa_converters.o \
- pa_cpuload.o \
- pa_dither.o \
- pa_front.o \
- pa_process.o \
- pa_skeleton.o \
- pa_stream.o \
- pa_trace.o
-
-
-# Define the desired sound device backend
-# Valid values are:
-# - pa_unix: PortAudio on Unix (OSS or ALSA)
-# - pa_darwinos: PortAudio on MacOSX (CoreAudio)
-# - pa_old_darwinos: PortAudio on MacOSX (old CoreAudio, for OSX 10.2)
-# - pa_win32: PortAudio on Win32 (WMME)
-#
-# There are other values below, but these are handled by PJMEDIA's Makefile
-# - ds: Win32 DirectSound (dsound.c)
-# - null: Null sound device (nullsound.c)
-AC_PJMEDIA_SND=@ac_pjmedia_snd@
-
-# For Unix, specify if ALSA should be supported
-AC_PA_USE_ALSA=@ac_pa_use_alsa@
-
-# Additional PortAudio CFLAGS are in @ac_pa_cflags@
-
-
-#
-# PortAudio on Unix
-#
-ifeq ($(AC_PJMEDIA_SND),pa_unix)
-# Host APIs and utils
-export PORTAUDIO_OBJS += pa_unix_hostapis.o pa_unix_util.o
-
-# Include ALSA?
-ifeq ($(AC_PA_USE_ALSA),1)
-export CFLAGS += -DPA_USE_ALSA=1
-export PORTAUDIO_OBJS += pa_linux_alsa.o
-endif
-
-export CFLAGS += -DPA_USE_OSS=1
-export CFLAGS += @ac_pa_cflags@
-export PORTAUDIO_OBJS += pa_unix_oss.o
-endif
-
-
-#
-# PortAudio on MacOS X (using current PortAudio)
-#
-ifeq ($(AC_PJMEDIA_SND),pa_darwinos)
-export PORTAUDIO_OBJS +=pa_mac_hostapis.o \
- pa_unix_util.o \
- pa_mac_core.o \
- pa_mac_core_blocking.o \
- pa_mac_core_utilities.o \
- pa_ringbuffer.o
-export CFLAGS += -DPA_USE_COREAUDIO=1
-export CFLAGS += @ac_pa_cflags@
-endif
-
-#
-# PortAudio on MacOS X (using old PortAudio, for MacOS X 10.2.x)
-#
-ifeq ($(AC_PJMEDIA_SND),pa_old_darwinos)
-export PORTAUDIO_OBJS +=pa_mac_hostapis.o \
- pa_unix_util.o \
- pa_mac_core_old.o
-export CFLAGS += -DPA_USE_COREAUDIO=1
-export CFLAGS += @ac_pa_cflags@
-endif
-
-#
-#
-# PortAudio on Win32 (WMME)
-#
-ifeq ($(AC_PJMEDIA_SND),pa_win32)
-export PORTAUDIO_OBJS += pa_win_hostapis.o pa_win_util.o \
- pa_win_wmme.o
-export CFLAGS += -DPA_NO_ASIO -DPA_NO_DS
-endif
-
-
-###############################################################################
-# Gather all flags.
-#
-export _CFLAGS := $(CC_CFLAGS) $(OS_CFLAGS) $(HOST_CFLAGS) $(M_CFLAGS) \
- $(CFLAGS) $(CC_INC). $(CC_INC)src
-export _CXXFLAGS:= $(_CFLAGS) $(CC_CXXFLAGS) $(OS_CXXFLAGS) $(M_CXXFLAGS) \
- $(HOST_CXXFLAGS) $(CXXFLAGS)
-export _LDFLAGS := $(CC_LDFLAGS) $(OS_LDFLAGS) $(M_LDFLAGS) $(HOST_LDFLAGS) \
- $(LDFLAGS)
-
-###############################################################################
-# Defines for building PORTAUDIO library
-#
-export PORTAUDIO_SRCDIR = src
-export PORTAUDIO_OBJS +=
-export PORTAUDIO_CFLAGS += $(_CFLAGS)
-
-export CC_OUT CC AR RANLIB HOST_MV HOST_RM HOST_RMDIR HOST_MKDIR OBJEXT LD LDOUT
-###############################################################################
-# Main entry
-#
-# $(TARGET) is defined in os-$(OS_NAME).mak file in current directory.
-#
-TARGETS := libportaudio
-
-all: $(TARGETS)
-
-dep: depend
-distclean: realclean
-
-.PHONY: dep depend libportaudio clean realclean distclean
-
-libportaudio:
- $(MAKE) -f $(RULES_MAK) APP=PORTAUDIO app=libportaudio $(PORTAUDIO_LIB)
-
-clean:
- $(MAKE) -f $(RULES_MAK) APP=PORTAUDIO app=libportaudio $@
-
-realclean:
- $(subst @@,$(subst /,$(HOST_PSEP),.libportaudio-$(TARGET_NAME).depend),$(HOST_RMR))
-
- $(MAKE) -f $(RULES_MAK) APP=PORTAUDIO app=libportaudio $@
-
-depend:
- $(MAKE) -f $(RULES_MAK) APP=PORTAUDIO app=libportaudio $@
- echo '$(PORTAUDIO_LIB): .libportaudio-$(TARGET_NAME).depend' >> .libportaudio-$(TARGET_NAME).depend; \
-
diff --git a/third_party/build/portaudio/os-auto.mak.in b/third_party/build/portaudio/os-auto.mak.in
new file mode 100644
index 00000000..288c3f50
--- /dev/null
+++ b/third_party/build/portaudio/os-auto.mak.in
@@ -0,0 +1,73 @@
+# @configure_input@
+
+# Define the desired sound device backend
+# Valid values are:
+# - pa_unix: PortAudio on Unix (OSS or ALSA)
+# - pa_darwinos: PortAudio on MacOSX (CoreAudio)
+# - pa_old_darwinos: PortAudio on MacOSX (old CoreAudio, for OSX 10.2)
+# - pa_win32: PortAudio on Win32 (WMME)
+#
+# There are other values below, but these are handled by PJMEDIA's Makefile
+# - ds: Win32 DirectSound (dsound.c)
+# - null: Null sound device (nullsound.c)
+AC_PJMEDIA_SND=@ac_pjmedia_snd@
+
+# For Unix, specify if ALSA should be supported
+AC_PA_USE_ALSA=@ac_pa_use_alsa@
+
+# Additional PortAudio CFLAGS are in @ac_pa_cflags@
+
+
+#
+# PortAudio on Unix
+#
+ifeq ($(AC_PJMEDIA_SND),pa_unix)
+# Host APIs and utils
+export PORTAUDIO_OBJS += pa_unix_hostapis.o pa_unix_util.o
+
+# Include ALSA?
+ifeq ($(AC_PA_USE_ALSA),1)
+export CFLAGS += -DPA_USE_ALSA=1
+export PORTAUDIO_OBJS += pa_linux_alsa.o
+endif
+
+export CFLAGS += -DPA_USE_OSS=1
+export CFLAGS += @ac_pa_cflags@
+export PORTAUDIO_OBJS += pa_unix_oss.o
+endif
+
+
+#
+# PortAudio on MacOS X (using current PortAudio)
+#
+ifeq ($(AC_PJMEDIA_SND),pa_darwinos)
+export PORTAUDIO_OBJS +=pa_mac_hostapis.o \
+ pa_unix_util.o \
+ pa_mac_core.o \
+ pa_mac_core_blocking.o \
+ pa_mac_core_utilities.o \
+ pa_ringbuffer.o
+export CFLAGS += -DPA_USE_COREAUDIO=1
+export CFLAGS += @ac_pa_cflags@
+endif
+
+#
+# PortAudio on MacOS X (using old PortAudio, for MacOS X 10.2.x)
+#
+ifeq ($(AC_PJMEDIA_SND),pa_old_darwinos)
+export PORTAUDIO_OBJS +=pa_mac_hostapis.o \
+ pa_unix_util.o \
+ pa_mac_core_old.o
+export CFLAGS += -DPA_USE_COREAUDIO=1
+export CFLAGS += @ac_pa_cflags@
+endif
+
+#
+#
+# PortAudio on Win32 (WMME)
+#
+ifeq ($(AC_PJMEDIA_SND),pa_win32)
+export PORTAUDIO_OBJS += pa_win_hostapis.o pa_win_util.o \
+ pa_win_wmme.o
+export CFLAGS += -DPA_NO_ASIO -DPA_NO_DS
+endif
diff --git a/third_party/build/portaudio/os-linux.mak b/third_party/build/portaudio/os-linux.mak
new file mode 100644
index 00000000..508948d3
--- /dev/null
+++ b/third_party/build/portaudio/os-linux.mak
@@ -0,0 +1,34 @@
+# @configure_input@
+
+# Define the desired sound device backend
+# Valid values are:
+# - pa_unix: PortAudio on Unix (OSS or ALSA)
+# - pa_darwinos: PortAudio on MacOSX (CoreAudio)
+# - pa_old_darwinos: PortAudio on MacOSX (old CoreAudio, for OSX 10.2)
+# - pa_win32: PortAudio on Win32 (WMME)
+#
+# There are other values below, but these are handled by PJMEDIA's Makefile
+# - ds: Win32 DirectSound (dsound.c)
+# - null: Null sound device (nullsound.c)
+AC_PJMEDIA_SND=pa_unix
+
+# For Unix, specify if ALSA should be supported
+AC_PA_USE_ALSA=0
+
+#
+# PortAudio on Unix
+#
+ifeq ($(AC_PJMEDIA_SND),pa_unix)
+# Host APIs and utils
+export PORTAUDIO_OBJS += pa_unix_hostapis.o pa_unix_util.o
+
+# Include ALSA?
+ifeq ($(AC_PA_USE_ALSA),1)
+export CFLAGS += -DPA_USE_ALSA=1
+export PORTAUDIO_OBJS += pa_linux_alsa.o
+endif
+
+export CFLAGS += -DPA_USE_OSS=1 -DHAVE_SYS_SOUNDCARD_H
+export PORTAUDIO_OBJS += pa_unix_oss.o
+endif
+
diff --git a/user.mak.sample b/user.mak.sample
new file mode 100644
index 00000000..9a145afc
--- /dev/null
+++ b/user.mak.sample
@@ -0,0 +1,2 @@
+export CFLAGS += -Wno-unused-label -Werror
+export LDFLAGS += -