From 48a1081ddce1d9dee32249b957f1af484b9f5392 Mon Sep 17 00:00:00 2001
From: jpbl <jpbl>
Date: Wed, 31 Aug 2005 18:16:11 +0000
Subject: [PATCH] See ChangeLog

---
 CHANGES                                       |  4 ++
 ChangeLog                                     | 10 ++++-
 configure.ac                                  | 14 +++++--
 src/Makefile.am                               |  6 +--
 src/audio/Makefile.am                         |  2 +-
 src/audio/audiolayer.cpp                      | 14 ++++---
 src/audio/audiolayer.h                        |  2 +-
 .../pacpp/source/portaudiocpp/Makefile.am     |  2 +-
 src/gui/Makefile.am                           |  1 +
 src/gui/qt/Makefile.am                        |  2 +-
 src/gui/qt/configurationpanel.ui.h            |  2 +-
 src/main.cpp                                  | 16 +++++++-
 src/managerimpl.cpp                           | 39 +++++++++++++++----
 src/user_cfg.h                                |  3 +-
 14 files changed, 86 insertions(+), 31 deletions(-)

diff --git a/CHANGES b/CHANGES
index cdbf50b138..fce0b265e8 100644
--- a/CHANGES
+++ b/CHANGES
@@ -4,6 +4,10 @@ SFLphone (0.4.1-pre2) / now
         * Bug fix when trying to use more than 6 lines.
 	* Now, we send a final response to reINVITEs 
 	  (thanks to Mikael Magnusson)
+        * We can build in different build directories.
+          (thanks to Mikael Magnusson)
+	* We actualy check if portaudio and eXosip2 libs
+          are installed
 
 SFLphone (0.4.1-pre1) / 2005-08-11
 	* Use libeXosip2
diff --git a/ChangeLog b/ChangeLog
index 3a7eecc9b0..4c3114ee33 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Jean-Philippe Barette-LaPierre (30 April 2005) version 0.4.1-pre1
+- Changed the order of initialization of modules, in order to
+  removed a race condition.
+- We can build in different build directories.
+  (thanks to Mikael Magnusson)
+- We actualy check if portaudio and eXosip2 libs
+  are installed. (thanks to Mikael Magnusson)
+
 Jean-Philippe Barette-LaPierre (30 April 2005) version 0.4.1-pre1
 - Now, we send a final response to reINVITEs
   (thanks to Mikael Magnusson)
@@ -21,7 +29,7 @@ Laurielle LEA (29 July 2005) version 0.4
 
 Laurielle LEA (27 July 2005) version 0.4
 - Migrate from libeXoSIP 0.9.0 to libeXosip2-1.9.1-pre15 
-(http://www.antisip.com/download/)
+  (http://www.antisip.com/download/)
 
 Laurielle LEA (21 July 2005) version 0.4
 - Change README.
diff --git a/configure.ac b/configure.ac
index e582e9268d..8df70437c9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@ AC_INIT(acinclude.m4)
 AM_CONFIG_HEADER(config.h)
 
 dnl figure out the sflphone version
-VERSION=`sed -ne 's/^#define VERSION "\(.*\)"/\1/p' src/global.h`
+VERSION=`sed -ne 's/^#define VERSION "\(.*\)"/\1/p' ${srcdir}/src/global.h`
 AC_SUBST(VERSION)
 
 dnl get rid of release number
@@ -81,7 +81,10 @@ SFLPHONE_LIBS="$SFLPHONE_LIBS $libosip2_LIBS"
 if test $ac_cv_header_eXosip2_eXosip_h = no; then
    AC_MSG_ERROR([*** missing eXosip2/eXosip.h. You need a working eXosip2 installation. See http://www.antisip.com/download/])
 fi
-libexosip2_LIBS="-leXosip2 "
+
+AC_CHECK_LIB([eXosip2], [eXosip_init],[libexosip2_LIBS="-leXosip2 "],[
+   AC_MSG_ERROR([*** missing eXosip2 library. You need a working eXosip2 installation. See http://www.antisip.com/download/])])
+
 SFLPHONE_LIBS="$SFLPHONE_LIBS $libexosip2_LIBS"
 
 AC_SUBST(LIBQT)
@@ -112,8 +115,11 @@ AM_CONDITIONAL(MAINTENER_CODE, test x$maintener = xyes)
 if test $ac_cv_header_portaudio_h = no; then
    AC_MSG_ERROR([*** missing portaudio.h. You need a working PortAudio installation. See http://www.portaudio.com])
 fi
-portaudio_LIBS="-lportaudio "
-portaudio_CFLAGS="-DAUDIO_PORTAUDIO "
+AC_CHECK_LIB([portaudio], [Pa_GetDeviceCount], [
+   portaudio_LIBS="-lportaudio "
+   portaudio_CFLAGS="-DAUDIO_PORTAUDIO "],
+   [AC_MSG_ERROR([*** missing portaudio V19 library. You need a working PortAudio installation. See http://www.portaudio.com])])
+
 SFLPHONE_LIBS="$SFLPHONE_LIBS $portaudio_LIBS"
 SFLPHONE_CXXFLAGS=="$SFLPHONE_CXXFLAGS $portaudio_CFLAGS"
 AC_SUBST(portaudio_CFLAGS)
diff --git a/src/Makefile.am b/src/Makefile.am
index 7bff0dc923..6460e28926 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -44,9 +44,5 @@ sflphone_CXXFLAGS = -DPREFIX=\"$(prefix)\" -DPROGSHAREDIR=\"${datadir}/sflphone\
 sflphone_LDFLAGS = $(QT_LDFLAGS) $(X_LDFLAGS) -static
 sflphone_LDADD =  gui/libguiframework.la audio/libaudio.la ../stund/libstun.la ../utilspp/libutilspp.la -lpthread $(LIBQT) $(SFLPHONE_LIBS) 
 KDE_CXXFLAGS = $(USE_EXCEPTIONS) 
-AM_CPPFLAGS = $(QT_INCLUDES) $(X_INCLUDES) -Iaudio/pacpp/include  $(libccext2_CFLAGS) $(libccgnu2_CFLAGS) $(portaudio_CFLAGS)
-
-
-
-
+AM_CPPFLAGS = $(QT_INCLUDES) $(X_INCLUDES) -I$(top_srcdir) -Igui/qt -I$(srcdir)/audio/pacpp/include  $(libccext2_CFLAGS) $(libccgnu2_CFLAGS) $(portaudio_CFLAGS)
 
diff --git a/src/audio/Makefile.am b/src/audio/Makefile.am
index 8bd1b8fc92..7c82edb0a4 100644
--- a/src/audio/Makefile.am
+++ b/src/audio/Makefile.am
@@ -18,6 +18,6 @@ libaudio_la_SOURCES = \
 	tonegenerator.cpp tonegenerator.h \
 	ulaw.cpp ulaw.h 
 
-AM_CXXFLAGS = -Ipacpp/include/ $(libccext2_CFLAGS) $(libccrtp1_CFLAGS) $(portaudio_CFLAGS)
+AM_CXXFLAGS = -I$(top_srcdir) -I$(srcdir)/pacpp/include/ $(libccext2_CFLAGS) $(libccrtp1_CFLAGS) $(portaudio_CFLAGS)
 libaudio_la_LIBADD = gsm/libgsm.la pacpp/source/portaudiocpp/libportaudiocpp.la
 
diff --git a/src/audio/audiolayer.cpp b/src/audio/audiolayer.cpp
index dbf1c5e796..be779b9ecf 100644
--- a/src/audio/audiolayer.cpp
+++ b/src/audio/audiolayer.cpp
@@ -35,7 +35,9 @@ AudioLayer::AudioLayer ()
   , _mainSndRingBuffer(SIZEBUF)
   , _micRingBuffer(SIZEBUF)
   , _stream(NULL)
-{}
+{
+  portaudio::System::initialize();
+}
 
 // Destructor
 AudioLayer::~AudioLayer (void) 
@@ -53,20 +55,20 @@ AudioLayer::closeStream (void)
 }
 
 void
-AudioLayer::openDevice (int index) 
+AudioLayer::openDevice (int outputIndex, int inputIndex) 
 {
   closeStream();
   // Set up the parameters required to open a (Callback)Stream:
   portaudio::DirectionSpecificStreamParameters 
-    outParams(portaudio::System::instance().deviceByIndex(index), 
+    outParams(portaudio::System::instance().deviceByIndex(outputIndex), 
 	      2, portaudio::INT16, true, 
-	      portaudio::System::instance().deviceByIndex(index).defaultLowOutputLatency(), 
+	      portaudio::System::instance().deviceByIndex(outputIndex).defaultLowOutputLatency(), 
 	      NULL);
 	
   portaudio::DirectionSpecificStreamParameters 
-    inParams(portaudio::System::instance().deviceByIndex(index), 
+    inParams(portaudio::System::instance().deviceByIndex(inputIndex), 
 	     2, portaudio::INT16, true, 
-	     portaudio::System::instance().deviceByIndex(index).defaultLowInputLatency(), 
+	     portaudio::System::instance().deviceByIndex(inputIndex).defaultLowInputLatency(), 
 	     NULL);
 	 
   portaudio::StreamParameters const params(inParams, outParams, 
diff --git a/src/audio/audiolayer.h b/src/audio/audiolayer.h
index 165e455fa8..61931ba067 100644
--- a/src/audio/audiolayer.h
+++ b/src/audio/audiolayer.h
@@ -42,7 +42,7 @@ public:
 	AudioLayer();
 	~AudioLayer (void);
 
-	void	openDevice 		(int);
+	void	openDevice 		(int, int);
 	void 	startStream		(void);
 	void 	stopStream		(void);
 	void    sleep			(int);
diff --git a/src/audio/pacpp/source/portaudiocpp/Makefile.am b/src/audio/pacpp/source/portaudiocpp/Makefile.am
index 2704bf039c..dbc2826645 100644
--- a/src/audio/pacpp/source/portaudiocpp/Makefile.am
+++ b/src/audio/pacpp/source/portaudiocpp/Makefile.am
@@ -19,4 +19,4 @@ libportaudiocpp_la_SOURCES = \
 	SystemHostApiIterator.cxx 
 
 
-AM_CXXFLAGS = -I../../include
+AM_CXXFLAGS = -I$(srcdir)/../../include
diff --git a/src/gui/Makefile.am b/src/gui/Makefile.am
index 4c0431e0b1..303b8b1879 100644
--- a/src/gui/Makefile.am
+++ b/src/gui/Makefile.am
@@ -5,5 +5,6 @@ noinst_LTLIBRARIES = libguiframework.la
 libguiframework_la_SOURCES = \
 	guiframework.cpp guiframework.h
 
+libguiframework_la_CPPFLAGS = -I$(top_srcdir)
 libguiframework_la_CXXFLAGS = $(libccext2_CFLAGS)
 libguiframework_la_LIBADD = qt/libsflphoneqt.la
\ No newline at end of file
diff --git a/src/gui/qt/Makefile.am b/src/gui/qt/Makefile.am
index d6cd37a5cf..b448fe3a66 100644
--- a/src/gui/qt/Makefile.am
+++ b/src/gui/qt/Makefile.am
@@ -38,7 +38,7 @@ libsflphoneqt_la_CXXFLAGS = -DPREFIX=\"$(prefix)\" -DPROGSHAREDIR=\"${datadir}/s
 libsflphoneqt_la_LIBADD = $(portaudio_LIBS)
 
 KDE_CXXFLAGS = $(USE_EXCEPTIONS)
-AM_CPPFLAGS = -I../../audio/pacpp/include/ $(QT_INCLUDES) $(X_INCLUDES) $(libccext2_CFLAGS) $(portaudio_CFLAGS)
+AM_CPPFLAGS = -I$(top_srcdir) -I$(srcdir)/../../audio/pacpp/include/ $(QT_INCLUDES) $(X_INCLUDES) $(libccext2_CFLAGS) $(portaudio_CFLAGS)
 
 
 %.h: %.ui
diff --git a/src/gui/qt/configurationpanel.ui.h b/src/gui/qt/configurationpanel.ui.h
index 15bf76339d..0f377596d5 100644
--- a/src/gui/qt/configurationpanel.ui.h
+++ b/src/gui/qt/configurationpanel.ui.h
@@ -111,7 +111,7 @@ void ConfigurationPanel::init()
 ((QRadioButton*)stunButtonGroup->find(get_config_fields_int(SIGNALISATION, USE_STUN)))->setChecked(true);
    // For audio tab
   
-((QRadioButton*)DriverChoice->find(get_config_fields_int(AUDIO, DRIVER_NAME)))->setChecked(true);
+((QRadioButton*)DriverChoice->find(get_config_fields_int(AUDIO, OUTPUT_DRIVER_NAME)))->setChecked(true);
 
    codec1->setCurrentText(QString(get_config_fields_str(AUDIO, CODEC1)));
    codec2->setCurrentText(QString(get_config_fields_str(AUDIO, CODEC2)));
diff --git a/src/main.cpp b/src/main.cpp
index 72662bd115..93d944d9fe 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -44,18 +44,30 @@ main (int argc, char **argv) {
   {
     QApplication a(argc, argv);
     Manager::instance().initConfigFile();		
+
+    try {
+      Manager::instance().init();		
+    }
+    catch (const exception &e) {
+      std::cerr << e.what() << std::endl;
+    }
+    catch (...) { 
+      std::cerr << 
+	"An unknown exception occured when initializing the system." << 
+	std::endl;
+    }
+
     GUI = new QtGUIMainWindow (0, 0 ,
 			       Qt::WDestructiveClose |
 			       Qt::WStyle_Customize |
 			       Qt::WStyle_NoBorder);
     Manager::instance().setGui(GUI);
-    Manager::instance().init();		
     
     a.setMainWidget((QtGUIMainWindow*)GUI);
     exit_code = a.exec();
     Manager::instance().terminate();
-  }
 #endif
+  }
 
   return exit_code;
 }
diff --git a/src/managerimpl.cpp b/src/managerimpl.cpp
index de1a7a2675..7495b9f47f 100644
--- a/src/managerimpl.cpp
+++ b/src/managerimpl.cpp
@@ -74,6 +74,8 @@ ManagerImpl::ManagerImpl (void)
   _ringback = false;
   _exist = 0;
   _loaded = false;
+  _gui = NULL;
+  _audiodriverPA = NULL;
 }
 
 ManagerImpl::~ManagerImpl (void) 
@@ -465,9 +467,10 @@ ManagerImpl::unregisterVoIPLink (void)
 int 
 ManagerImpl::quitApplication (void)
 {
-	// Quit VoIP-link library
+  // Quit VoIP-link library
   terminate();
   Config::deleteTree();
+  return 0;
 }
 
 int 
@@ -586,25 +589,45 @@ ManagerImpl::peerHungupCall (short id)
 void 
 ManagerImpl::displayTextMessage (short id, const string& message)
 {
-	_gui->displayTextMessage(id, message);
+  if(_gui) {
+    _gui->displayTextMessage(id, message);
+  }
+  else {
+    std::cout << message << std::endl;
+  }
 }
 
 void 
 ManagerImpl::displayErrorText (short id, const string& message)
 {
-	_gui->displayErrorText(id, message);
+  if(_gui) {
+    _gui->displayErrorText(id, message);
+  }
+  else {
+    std::cerr << message << std::endl;
+  }
 }
 
 void 
 ManagerImpl::displayError (const string& error)
 {
-	_gui->displayStatus(error);
+  if(_gui) {
+    _gui->displayStatus(error);
+  }
+  else {
+    std::cerr << error << std::endl;
+  }
 }
 
 void 
 ManagerImpl::displayStatus (const string& status)
 {
-	_gui->displayStatus(status);
+  if(_gui) {
+    _gui->displayStatus(status);
+  }
+  else {
+    std::cout<< status << std::endl;
+  }
 }
 
 int
@@ -851,7 +874,8 @@ ManagerImpl::initConfigFile (void)
 	fill_config_fields_str(SIGNALISATION, STUN_SERVER, DFT_STUN_SERVER); 
 	fill_config_fields_int(SIGNALISATION, USE_STUN, NO); 
 
-	fill_config_fields_int(AUDIO, DRIVER_NAME, DFT_DRIVER); 
+	fill_config_fields_int(AUDIO, OUTPUT_DRIVER_NAME, DFT_DRIVER); 
+	fill_config_fields_int(AUDIO, INPUT_DRIVER_NAME, DFT_DRIVER); 
 	fill_config_fields_int(AUDIO, NB_CODEC, DFT_NB_CODEC); 
 	fill_config_fields_str(AUDIO, CODEC1, DFT_CODEC); 
 	fill_config_fields_str(AUDIO, CODEC2, DFT_CODEC); 
@@ -891,7 +915,8 @@ ManagerImpl::selectAudioDriver (void)
 	
 #if defined(AUDIO_PORTAUDIO)
 	_audiodriverPA = new AudioLayer();
-	_audiodriverPA->openDevice(get_config_fields_int(AUDIO, DRIVER_NAME));
+	_audiodriverPA->openDevice(get_config_fields_int(AUDIO, OUTPUT_DRIVER_NAME), 
+				   get_config_fields_int(AUDIO, INPUT_DRIVER_NAME));
 #else
 # error You must define one AUDIO driver to use.
 #endif
diff --git a/src/user_cfg.h b/src/user_cfg.h
index c57c2a220b..a8cdc27ae8 100644
--- a/src/user_cfg.h
+++ b/src/user_cfg.h
@@ -63,7 +63,8 @@
 #define SEND_DTMF_AS	"DTMF.sendDTMFas"
 #define STUN_SERVER		"STUN.STUNserver"
 #define USE_STUN		"STUN.useStun"
-#define DRIVER_NAME		"Drivers.driverName"
+#define OUTPUT_DRIVER_NAME		"Drivers.outputDriverName"
+#define INPUT_DRIVER_NAME		"Drivers.inputDriverName"
 #define NB_CODEC		"Codecs.nbCodec"
 #define CODEC1			"Codecs.codec1"
 #define CODEC2			"Codecs.codec2"
-- 
GitLab