]> sjero.net Git - linphone/commitdiff
macos gtk build works, with bundle
authorSimon Morlat <simon.morlat@linphone.org>
Fri, 25 Mar 2011 10:12:32 +0000 (11:12 +0100)
committerSimon Morlat <simon.morlat@linphone.org>
Fri, 25 Mar 2011 10:12:32 +0000 (11:12 +0100)
Makefile.am
README.macos
build/macos/environment.sh
build/macos/linphone.bundle
configure.ac
gtk/Makefile.am
gtk/gtkrc.mac [new file with mode: 0644]
gtk/main.c

index cef6503c605304e48cd9ecfb14c3d05301413148..bdfbefcb7008a37440043f6a4f4b9340a7c041eb 100644 (file)
@@ -59,7 +59,7 @@ ISS_SCRIPT_PATH=$(shell cd $(top_srcdir) && pwd)/$(ISS_SCRIPT)
 #path to Inno Setup 5 compiler
 ISCC=ISCC.exe
 PACKAGE_WIN32_FILELIST=$(PACKAGE)-win32.filelist
-PACKAGE_BUNDLE_FILE=$(top_srcdir)/build/macos/reltime.bundle
+PACKAGE_BUNDLE_FILE=$(top_srcdir)/build/macos/$(PACKAGE).bundle
 
 EXTRA_DIST = config.rpath  BUGS linphone.kdevelop  \
                                intltool-extract.in     \
@@ -194,6 +194,7 @@ bundle:
        LINPHONE_INSTALL_PREFIX=$(INSTALLDIR_WITH_PREFIX) \
        LIBLINPHONE_INSTALL_PREFIX=$(INSTALLDIR_WITH_PREFIX) \
        ige-mac-bundler $(PACKAGE_BUNDLE_FILE)
+       cd $$HOME/Desktop && zip -r Linphone-$(VERSION).app.zip $$HOME/Desktop/Linphone.app
 
 
 
index 251b622751bf559b67dd8275cb6251a7079d0e34..4cc36071c559305f0ca6491a46e46a3e277d0661 100644 (file)
@@ -1,4 +1,51 @@
-Compiling linphone on macos X
+**********************************
+* Compiling linphone on macos X  *
+**********************************
+
+
+You have two options: using gtk-osx framework (http://gtk-osx.sourceforge.net/) which results in a Linphone GTK well integrated into Mac OS
+environment. The other option is using MacPort, in which case Linphone will run as an X11 application inside Mac OS.
+
+At the date of March 25, 2011, no video support is available yet.
+
+
+Compiling using gtk-osx
+=======================
+
+Requirements:
+* gtk-osx framework
+* xcode (for gcc)
+* macport (to retrieve dependencies easily, such as libosip2, libeXosip2, libspeex
+* linphone git tree
+
+Steps:
+
+- Install gtk-osx jhbuild environment as described at
+http://sourceforge.net/apps/trac/gtk-osx/wiki/Build
+It will build gtk for osx as well as many dependencies.
+
+- Install ige-mac-bundler following instructions here (git clone method is preferred):
+http://sourceforge.net/apps/trac/gtk-osx/wiki/Bundle
+
+- Install some linphone dependencies with macports
+ $ port install speex-dev
+ $ port install osip2
+ $ port install eXosip2
+
+- Now you can compile linphone
+
+$ jhbuild shell
+$ PKG_CONFIG_PATH=$HOME/gtk/inst/lib/pkgconfig:/opt/local/lib/pkgconfig/ ./configure --disable-video --disable-strict
+$ make
+
+- You can generate a bundle using
+$ make bundle
+
+The bundle is generated in ~/Desktop/Linphone and can safely be exported to other places and computers.
+
+
+Compiling using MacPort
+=======================
 
 This procedure works for audio, video still not fully supported.
 It was tested on macos X (leopard) on september 2009.
@@ -16,7 +63,6 @@ Steps:
        - gettext
        - intltool
        - gtk2
-       - libglade2
        - speex-dev
        - osip2
        - eXosip2
@@ -30,14 +76,6 @@ Steps:
 * install to /opt/local
        sudo make install 
 
-*********************
-Using gtk-osx (jhbuild environnment)
-
-After installing jhbuild and get gtk built,
-
-$ jhbuild shell
-
-$ PKG_CONFIG_PATH=$HOME/gtk/inst/lib/pkgconfig:/opt/local/lib/pkgconfig/ ./configure --disable-video --disable-strict
 
 
 
index f331e77a13ba939881c8697bf94616101691899d..69191845b580aa380279096ba0be3fff93bc1523 100644 (file)
@@ -1,3 +1,3 @@
 export EXTRA_ARGS="--workdir $bundle_res"
-unset GDK_PIXBUF_MODULE_FILE
+
 
index 2b1e1f7ffc2f5ae527ed3dc349cfd0a11c6abf29..b38d550aca22e5f64a514418b69447aa9dd6edb0 100644 (file)
@@ -80,7 +80,7 @@
   </binary>
 
   <binary>
-     ${prefix}/lib/gdk-pixbuf-2.0/*
+     ${prefix}/lib/gdk-pixbuf-2.0
   </binary>
 
   <!-- Copy in GTK+ theme engines. Note the use of the
        "dest" property. The destination must then start with the macro
        "${bundle}", which refers to the bundle root directory.
   -->
-  <data dest="${bundle}/Contents/Resources/share/linphone">
-    ${prefix:linphone}/share/*
+  <data>
+    ${prefix:linphone}/share
   </data>
 
   <!-- Copy in the themes data. You may want to trim this to save space
        theme of choice if they provide and example, or you can just
        change the source path. -->
 
-  <!--data dest="${bundle}/Contents/Resources/etc/${gtkdir}/gtkrc">
-    ${project}/src/gtkrc
-  </data-->
+  <data dest="${bundle}/Contents/Resources/etc/${gtkdir}/gtkrc">
+    ${project}/../../gtk/gtkrc.mac
+  </data>
 
   <data dest="${bundle}/Contents/Resources/share/sounds/linphone">
       ${prefix:linphone}/share/sounds/linphone/
index 66e65a12faee6f170a60b6d53454083e7763e5f1..81042d2bb746e3d2d62f004058f5d98b455ad494 100644 (file)
@@ -61,6 +61,7 @@ case $target_os in
        *darwin*)
                dnl use macport installation
                ACLOCAL_MACOS_FLAGS="-I /opt/local/share/aclocal"
+               build_macos=yes
        ;;
 esac
 
@@ -132,8 +133,9 @@ AC_ARG_ENABLE(gtk_ui,
 
 if test "$gtk_ui" = "true" ; then
        PKG_CHECK_MODULES(LIBGTK, gtk+-2.0 >= 2.4.0 gthread-2.0)
-       AC_SUBST(LIBGTK_CFLAGS)
-       AC_SUBST(LIBGTK_LIBS)
+       if test "$build_macos" = "yes" ; then
+               PKG_CHECK_MODULES(LIBGTKMAC,[ige-mac-integration >= 0.9.7 ])
+       fi
 else
        echo "GTK interface compilation is disabled."
 fi
@@ -159,13 +161,13 @@ AC_ARG_WITH( configdir,
 
 AC_DEFINE_UNQUOTED(LINPHONE_CONFIG_DIR,"$configdir",[Windows appdata subdir where linphonerc can be found])
 
-AC_ARG_ENABLE(manual,
-      [  --disable-manual    Do not attempt to build html linphone's user documentation],
+AC_ARG_ENABLE(relativeprefix,
+      [  --enable-relativeprefix    Build a linphone that finds its resources relatively to the directory where it is installed],
       [case "${enableval}" in
-        yes) build_manual=yes ;;
-        no)  build_manual=false ;;
-        *) AC_MSG_ERROR(bad value ${enableval} for --enable-manual) ;;
-      esac],[build_manual=yes])
+        yes) relativeprefix=yes ;;
+        no)  relativeprefix=no ;;
+        *) AC_MSG_ERROR(bad value ${enableval} for --enable-relativeprefix) ;;
+      esac],[relativeprefix=auto])
 
 AC_ARG_ENABLE(date,
       [  --enable-date    Use build date in internal version number],
@@ -232,9 +234,22 @@ else
        package_prefix=${prefix}
 fi
 
-if test x$mingw_found = xyes ; then
-dnl allow binaries to install everywhere
-package_prefix="."
+
+
+if test "$relativeprefix" = "auto" ; then
+       case $target_os in
+               *darwin*)
+               relativeprefix=yes
+               ;;
+               *mingw*)
+               relativeprefix=yes
+               ;;
+       esac
+fi
+
+if test "$relativeprefix" = "yes" ; then
+       dnl allow binaries to install everywhere
+       package_prefix="."
 fi
 
 dnl Set PACKAGE_LOCALE_DIR in config.h.
index 58f5306596b972c31ac4c72e8dd6f45268d7ba25..c51234eb395418437505e9a7ad35d77c19840d8e 100644 (file)
@@ -21,7 +21,8 @@ EXTRA_DIST=   $(PIXMAPS) \
                linphone.iss \
                $(LINPHONE_ICO_RC_FILE) \
                $(LINPHONE_ICO_FILE)
-
+               gtkrc \
+               gtkrc.mac
 
 if BUILD_GTK_UI
 
@@ -48,7 +49,7 @@ linphone_SOURCES=     \
 linphone_LDADD=$(ORTP_LIBS) \
                $(MEDIASTREAMER_LIBS) \
                $(top_builddir)/coreapi/liblinphone.la \
-                       $(LIBGTK_LIBS) $(INTLLIBS) 
+                       $(LIBGTK_LIBS) $(LIBGTKMAC_LIBS) $(INTLLIBS) 
 
 
 if BUILD_WIN32
@@ -71,8 +72,7 @@ endif
 AM_CFLAGS= -DIN_LINPHONE -I$(top_srcdir)/coreapi/ \
                $(MEDIASTREAMER_CFLAGS) \
                $(ORTP_CFLAGS) \
-               $(STRICT_OPTIONS) $(LIBGTK_CFLAGS) $(IPV6_CFLAGS) \
-               $(OSIP_CFLAGS) 
+               $(STRICT_OPTIONS) $(LIBGTK_CFLAGS) $(LIBGTKMAC_CFLAGS) $(IPV6_CFLAGS)
 
 
 version_date.h: $(top_srcdir)/configure.ac
diff --git a/gtk/gtkrc.mac b/gtk/gtkrc.mac
new file mode 100644 (file)
index 0000000..8a39b00
--- /dev/null
@@ -0,0 +1 @@
+include "../../share/themes/Mac4Lin_GTK_Aqua_v1.0/gtk-2.0/gtkrc"
index b35b8f4c49aa5a79148f4cac4e4b9aad62be7b28..85e46d76dc6852628f51c7c0be4646e17a8634d0 100644 (file)
@@ -17,7 +17,6 @@ along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
 
-//#define USE_LIBGLADE 1
 
 #define VIDEOSELFVIEW_DEFAULT 1
 
@@ -25,15 +24,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #include "lpconfig.h"
 
 
-
-#ifdef USE_LIBGLADE
-#include <glade/glade.h>
-#endif
-
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
 
+#ifdef __APPLE__
+#include <gtkosxapplication.h>
+#endif
+
 #ifdef WIN32
 #define chdir _chdir
 #endif
@@ -246,40 +244,6 @@ static void linphone_gtk_configure_window(GtkWidget *w, const char *window_name)
        }
 }
 
-#ifdef USE_LIBGLADE
-
-GtkWidget *linphone_gtk_create_window(const char *window_name){
-       GtkWidget *w;
-       GladeXML *gxml;
-       char path[2048];
-       snprintf(path,sizeof(path),"%s/%s.glade",BUILD_TREE_XML_DIR,window_name);
-       if (access(path,F_OK)!=0){
-               snprintf(path,sizeof(path),"%s/%s.glade",INSTALLED_XML_DIR,window_name);
-               if (access(path,F_OK)!=0){
-                       g_error("Could not locate neither %s/%s.glade and %s/%s.glade .",BUILD_TREE_XML_DIR,window_name,
-                               INSTALLED_XML_DIR,window_name);
-                       return NULL;
-               }
-       }
-       gxml=glade_xml_new(path,NULL,NULL);
-       glade_xml_signal_autoconnect(gxml);
-       w=glade_xml_get_widget(gxml,window_name);
-       if (w==NULL) g_error("Could not retrieve '%s' window from xml file",window_name);
-       linphone_gtk_configure_window(w,window_name);
-       return w;
-}
-
-GtkWidget *linphone_gtk_get_widget(GtkWidget *window, const char *name){
-       GtkWidget *w;
-       GladeXML *gxml=glade_get_widget_tree(window);
-       if (gxml==NULL) g_error("Could not retrieve XML tree of window %s",name);
-       w=glade_xml_get_widget(gxml,name);
-       if (w==NULL) g_error("Could not retrieve widget %s",name);
-       return GTK_WIDGET(w);
-}
-
-#else
-
 static int get_ui_file(const char *name, char *path, int pathsize){
        snprintf(path,pathsize,"%s/%s.ui",BUILD_TREE_XML_DIR,name);
        if (access(path,F_OK)!=0){
@@ -358,7 +322,6 @@ GtkWidget *linphone_gtk_get_widget(GtkWidget *window, const char *name){
        return GTK_WIDGET(w);
 }
 
-#endif
 
 void linphone_gtk_display_something(GtkMessageType type,const gchar *message){
        GtkWidget *dialog;
@@ -1219,7 +1182,11 @@ static void linphone_gtk_configure_main_window(){
        if (title) {
                gtk_window_set_title(GTK_WINDOW(w),title);
 #if GTK_CHECK_VERSION(2,16,0)
+#ifdef __APPLE__
+               gtk_menu_item_set_label(GTK_MENU_ITEM(linphone_gtk_get_widget(w,"main_menu")),_("Windows"));
+#else
                gtk_menu_item_set_label(GTK_MENU_ITEM(linphone_gtk_get_widget(w,"main_menu")),title);
+#endif
 #endif
        }
        if (start_call_icon){
@@ -1299,7 +1266,11 @@ gboolean linphone_gtk_close(GtkWidget *mw){
                linphone_core_terminate_all_calls(lc);
        }
        linphone_core_enable_video_preview(lc,FALSE);
+#ifdef __APPLE__
+       gtk_window_iconify(GTK_WINDOW(mw));
+#else
        gtk_widget_hide(mw);
+#endif
        return TRUE;
 }
 
@@ -1324,6 +1295,16 @@ static void linphone_gtk_init_main_window(){
        /*prevent the main window from being destroyed by a user click on WM controls, instead we hide it*/
        g_signal_connect (G_OBJECT (main_window), "delete-event",
                G_CALLBACK (linphone_gtk_close), main_window);
+#ifdef __APPLE__
+       {
+               GtkWidget *menubar=linphone_gtk_get_widget(main_window,"menubar1");
+               gtk_widget_destroy(linphone_gtk_get_widget(main_window,"imagemenuitem5"));
+               GtkOSXApplication *theMacApp = (GtkOSXApplication*)g_object_new(GTK_TYPE_OSX_APPLICATION, NULL);
+               gtk_osxapplication_set_menu_bar(theMacApp,GTK_MENU_SHELL(menubar));
+               gtk_widget_hide(menubar);
+               gtk_osxapplication_ready(theMacApp);
+       }
+#endif
 }
 
 
@@ -1470,8 +1451,11 @@ int main(int argc, char *argv[]){
        add_pixmap_directory("pixmaps");
        add_pixmap_directory(PACKAGE_DATA_DIR "/pixmaps/linphone");
 
-       
-       
+#ifdef __APPLE__
+       GtkOSXApplication *theMacApp = (GtkOSXApplication*)g_object_new(GTK_TYPE_OSX_APPLICATION, NULL);
+       g_signal_connect(G_OBJECT(theMacApp),"NSApplicationDidBecomeActive",(GCallback)linphone_gtk_show_main_window,NULL);
+       g_signal_connect(G_OBJECT(theMacApp),"NSApplicationWillTerminate",(GCallback)gtk_main_quit,NULL);
+#endif
        
        the_ui=linphone_gtk_create_window("main");
        
@@ -1488,7 +1472,9 @@ int main(int argc, char *argv[]){
        gtk_timeout_add(30,(GtkFunction)linphone_gtk_iterate,(gpointer)linphone_gtk_get_core());
        gtk_timeout_add(30,(GtkFunction)linphone_gtk_check_logs,(gpointer)NULL);
        linphone_gtk_init_main_window();
+#ifndef __APPLE__
        linphone_gtk_init_status_icon();
+#endif
        if (!iconified){
                linphone_gtk_show_main_window();
                linphone_gtk_check_soundcards();
@@ -1500,8 +1486,10 @@ int main(int argc, char *argv[]){
        gdk_threads_leave();
        linphone_gtk_destroy_log_window();
        linphone_core_destroy(the_core);
+#ifndef __APPLE__
        /*workaround a bug on win32 that makes status icon still present in the systray even after program exit.*/
        gtk_status_icon_set_visible(icon,FALSE);
+#endif
        free(progpath);
        return 0;
 }