From 1f7a462788b27a83ea7e0660273e6864ed71e17f Mon Sep 17 00:00:00 2001 From: Yann Leboulanger <asterix@lagaule.org> Date: Wed, 14 Nov 2007 19:47:52 +0000 Subject: [PATCH] [James Newton] osx port for Gajim. a GREAT thanks!!! --- Makefile.am | 12 +- README.osx | 99 +++ TODO.osx | 38 + autogen.sh | 14 +- configure.ac | 77 ++ data/nibs/Gajim.nib/classes.nib | 4 + data/nibs/Gajim.nib/info.nib | 21 + data/nibs/Gajim.nib/keyedobjects.nib | Bin 0 -> 6413 bytes data/pixmaps/gajim.icns | Bin 0 -> 42918 bytes launch.sh | 9 +- setup_osx.py | 362 +++++++++ src/Makefile.am | 3 +- src/common/config.py | 19 +- src/common/dbus_support.py | 9 +- src/common/helpers.py | 8 +- src/common/proxy65_manager.py | 2 +- src/common/sleepy.py | 4 +- src/config.py | 53 +- src/conversation_textview.py | 4 + src/dialogs.py | 5 + src/features_window.py | 7 + src/gajim-remote.py | 3 + src/gajim.py | 30 +- src/groupchat_control.py | 2 +- src/network_manager_listener.py | 38 +- src/notify.py | 13 + src/osx/.deps/idle_la-idle.Plo | 1 + src/osx/.deps/nsapp.Plo | 1 + src/osx/Makefile | 761 ++++++++++++++++++ src/osx/Makefile.am | 45 ++ src/osx/Makefile.in | 761 ++++++++++++++++++ src/osx/__init__.py | 45 ++ src/osx/__init__.pyo | Bin 0 -> 1367 bytes src/osx/dbus.py | 131 +++ src/osx/growl/.deps/_growlImage.Plo | 1 + src/osx/growl/.deps/_growl_la-_growl.Plo | 1 + src/osx/growl/Growl.py | 247 ++++++ src/osx/growl/Makefile | 651 +++++++++++++++ src/osx/growl/Makefile.am | 41 + src/osx/growl/Makefile.in | 651 +++++++++++++++ src/osx/growl/_growl.c | 239 ++++++ src/osx/growl/_growlImage.m | 274 +++++++ src/osx/growl/setup.py | 25 + src/osx/growler.py | 63 ++ src/osx/idle.c | 174 ++++ src/osx/nsapp.h | 19 + src/osx/nsapp.m | 239 ++++++ src/osx/setup.py | 20 + .../syncmenu/.deps/syncmenu_la-pysyncmenu.Plo | 1 + .../syncmenu/.deps/syncmenu_la-sync-menu.Plo | 1 + src/osx/syncmenu/Makefile | 575 +++++++++++++ src/osx/syncmenu/Makefile.am | 21 + src/osx/syncmenu/Makefile.in | 575 +++++++++++++ src/osx/syncmenu/pysyncmenu.c | 55 ++ src/osx/syncmenu/setup.py | 27 + src/osx/syncmenu/sync-menu.c | 722 +++++++++++++++++ src/osx/syncmenu/sync-menu.h | 27 + src/osx/syncmenu/test-menu.c | 107 +++ src/osx/syncmenu/test-menu.py | 78 ++ src/roster_window.py | 84 +- src/statusicon.py | 18 +- 61 files changed, 7448 insertions(+), 69 deletions(-) create mode 100644 README.osx create mode 100644 TODO.osx create mode 100644 data/nibs/Gajim.nib/classes.nib create mode 100644 data/nibs/Gajim.nib/info.nib create mode 100644 data/nibs/Gajim.nib/keyedobjects.nib create mode 100644 data/pixmaps/gajim.icns create mode 100644 setup_osx.py create mode 100644 src/osx/.deps/idle_la-idle.Plo create mode 100644 src/osx/.deps/nsapp.Plo create mode 100644 src/osx/Makefile create mode 100644 src/osx/Makefile.am create mode 100644 src/osx/Makefile.in create mode 100644 src/osx/__init__.py create mode 100644 src/osx/__init__.pyo create mode 100644 src/osx/dbus.py create mode 100644 src/osx/growl/.deps/_growlImage.Plo create mode 100644 src/osx/growl/.deps/_growl_la-_growl.Plo create mode 100644 src/osx/growl/Growl.py create mode 100644 src/osx/growl/Makefile create mode 100644 src/osx/growl/Makefile.am create mode 100644 src/osx/growl/Makefile.in create mode 100644 src/osx/growl/_growl.c create mode 100644 src/osx/growl/_growlImage.m create mode 100644 src/osx/growl/setup.py create mode 100644 src/osx/growler.py create mode 100644 src/osx/idle.c create mode 100644 src/osx/nsapp.h create mode 100644 src/osx/nsapp.m create mode 100644 src/osx/setup.py create mode 100644 src/osx/syncmenu/.deps/syncmenu_la-pysyncmenu.Plo create mode 100644 src/osx/syncmenu/.deps/syncmenu_la-sync-menu.Plo create mode 100644 src/osx/syncmenu/Makefile create mode 100644 src/osx/syncmenu/Makefile.am create mode 100644 src/osx/syncmenu/Makefile.in create mode 100644 src/osx/syncmenu/pysyncmenu.c create mode 100644 src/osx/syncmenu/setup.py create mode 100644 src/osx/syncmenu/sync-menu.c create mode 100644 src/osx/syncmenu/sync-menu.h create mode 100644 src/osx/syncmenu/test-menu.c create mode 100644 src/osx/syncmenu/test-menu.py diff --git a/Makefile.am b/Makefile.am index 50329095c..59a6d995d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -48,6 +48,16 @@ MAINTAINERCLEANFILES = \ compile \ depcomp \ config.guess \ + config.log \ config.sub \ + config.status \ aclocal.m4 \ - libtool + libtool \ + po/POTFILES.in \ + src/trayicon_la-eggtrayicon.loT \ + m4/intltool.m4 + +MAINTAINERCLEANDIRS = \ + autom4te.cache \ + build \ + dist diff --git a/README.osx b/README.osx new file mode 100644 index 000000000..64c45ad85 --- /dev/null +++ b/README.osx @@ -0,0 +1,99 @@ +Introduction +------------ + +This is an alpha release of Gajim for OS/X using native GTK+. It is not finished +nor is it relatively stable. The native port of GTK+ is alpha and not stable +yet, though it has proven to be usable for Gajim. Having said that it is usable, +basic functionality works. See the TODO file for a list of what is and is not +working. + + + +Installing +---------- + +Install the GTK+ framework into your /Library/Frameworks directory. It can be +found at http://codepunks.org/misc/gtk/osx. + +Copy the Gajim.app into the /Applications directory or any other directory. + + +Installing language dictionaries +-------------------------------- + +The codepunks.org build of the GTK+ framework comes with the US English +dictionary pre-installed. If you wish to install a different dictionary download +the appropriate dictionary from here: + +http://ftp.gnu.org/gnu/aspell/dict/ + +Then follow these instructions: + +source /Library/Frameworks/GTK+.framework/Versions/Current/bin/env +tar -jxf aspell-<lang>-<version>.tbz2 +cd aspell-<lang>-<version> +./configure +make +make install + + +Compiling Requirements +---------------------- +These instructions were gathered for building a universal binary on a PPC. The +steps for building on an i386 should be essentially the same. + +Requirements: +- OS/X 10.4, i386 or ppc +- Universal MacPython 2.5 + http://www.pythonmac.org/packages/py25-fat/index.html +- Latest XCode (2.4.0 or greater) +- py2app + http://svn.pythonmac.org/py2app/py2app/trunk/doc/index.html + +Install all of the requirements. Make sure that the universal MacPython is +installed before py2app. Then ensure that this is the first python in your +PATH. + + export PATH=/Library/Frameworks/Python.framework/Versions/2.5/bin:$PATH + +Then install py2app. + + +Compiling +--------- + +In the top level run the configure script. If this is source is from subversion +then run the autogen.sh script. Follow it up with a make: + + ./configure + or + ./autogen.sh + make + +Once that is done Gajim can be run from the source tree. You may also create an +app bundle suitable for use or distribution. To do that run: + + python setup_osx.py build + +The Gajim.app bundle is created in the dist directory. This bundle is ready +for use as is. Copy it to your /Applications directory and you're good to go. + +You now have a self contained (almost, requires GTK+.framework still) universal +native build of Gajim. + +Optionally to create a distribution of the Gajim app bundle do: + + python setup_osx.py dist + + + +Development +----------- + +It is possible to run Gajim correctly from the app bundle but still use the +python code in the source tree. This line must be added to the _run() function +in the Gajim.app/Resources/__boot__.py file. It needs to be located just after +the sys module is imported. Font forget to fix the path to match your +environment. + +sys.path = ["/Users/user/Source/gajim/src"] + sys.path diff --git a/TODO.osx b/TODO.osx new file mode 100644 index 000000000..7216d3aea --- /dev/null +++ b/TODO.osx @@ -0,0 +1,38 @@ +The bits that work +------------------ + +-idle checking +-dbus and gajim-remote, using dbus from GTK+.framework. +-systray icon +-app bundle with universal binaries. Depends on the GTK+.framework. +-notifications through growl, internal fallback works fine as well +-spell checking +-running apps and opening files/urls +-playing sounds +-Network monitoring +-Mostly everything else except for whats below. + + + +The bits that dont work +----------------------- + +-Application start/stop/doc/DnD handling +-finish the .app bundle + - setup gajim-remote, maybe install it to /usr/local + - fix user session management +-integrate the Gajim and gajim-remote scripts with autoconf and add GTK + framework detection +-Pass icons to OS/X menu +-set the LSEnvironment in Info.plist for gtk paths instead of hard coding in + gajim.py +-Maybe setup the pasteboard services for an OS/X alternative to the + gajim_remote +-CFBundleDocumentTypes.NSDocument + + +Native GTK bugs +---------------- + +-cut and paste blows up Finder and the os/x GUI server. very very nasty. +-with mutiple displays, popup menus show up on the wrong display diff --git a/autogen.sh b/autogen.sh index dbf2cc812..76c221430 100755 --- a/autogen.sh +++ b/autogen.sh @@ -8,11 +8,19 @@ echo "See README.html for build requirements." exit 1 fi - set -x + AM_ARGS="--add-missing --gnu --copy" + CONF_ARGS="" + if test x`uname -s 2>/dev/null` = 'xDarwin';then + . /Library/Frameworks/GTK+.framework/Versions/Current/env + #export PATH=/Library/Frameworks/GTK+.framework/Versions/Current/bin/:$PATH + #export PKG_CONFIG_PATH=/Library/Frameworks/GTK+.framework/Versions/Current/lib/pkgconfig + AM_ARGS="${AM_ARGS} --ignore-deps" + CONF_ARGS="${CONF_ARGS} --disable-idle --without-x" + fi intltoolize --force --automake \ && aclocal -I ./m4 \ && libtoolize --copy --force --automake \ && autoheader \ && autoconf \ - && automake --add-missing --gnu --copy \ - && ./configure $@ + && automake ${AM_ARGS} \ + && ./configure ${CONF_ARGS} $@ diff --git a/configure.ac b/configure.ac index f859ad970..0087842f7 100644 --- a/configure.ac +++ b/configure.ac @@ -6,6 +6,9 @@ AC_CONFIG_HEADER(config.h) AC_CONFIG_MACRO_DIR([m4]) AM_MAINTAINER_MODE +dnl Make Objective-C work with automake +AM_CONDITIONAL([am__fastdepOBJC], false) + IT_PROG_INTLTOOL([0.35.0]) PKG_PROG_PKG_CONFIG([0.19]) @@ -128,6 +131,75 @@ AC_ARG_ENABLE(trayicon, test "x$enable_trayicon" = "xyes" && have_trayicon=true || have_trayicon=false AM_CONDITIONAL(BUILD_TRAYICON, $have_trayicon) +dnl **** +dnl Cocoa +dnl **** +AC_ARG_ENABLE([cocoa], + [ --disable-cocoa build cocoa integration [default auto]], + enable_cocoa=$enableval, enable_cocoa=yes) + +if test "x$enable_cocoa" = "xyes";then + dnl There is no pkgconfig for cocoa; lets do a header check + temp_save_cflags="$CFLAGS" + CFLAGS="$CFLAGS -ObjC" + AC_CHECK_HEADER(Cocoa/Cocoa.h, [have_cocoa=true], [have_cocoa=false]) + AC_CHECK_HEADER(AppKit/AppKit.h, [have_appkit=true], [have_appkit=false]) + CFLAGS="$temp_save_cflags" + + if test "x$have_cocoa" = "xtrue";then + COCOA_LIBS="$COCOA_LIBS -Xlinker -framework -Xlinker Cocoa" + fi + if test "x$have_appkit" = "xtrue";then + COCOA_LIBS="$COCOA_LIBS -Xlinker -framework -Xlinker AppKit" + fi + if test "x$COCOA_LIBS" != "x";then + AC_SUBST(COCOA_LIBS) + true + fi +fi +AM_CONDITIONAL(BUILD_COCOA, $have_cocoa) + +dnl **** +dnl Carbon +dnl **** +AC_ARG_ENABLE([carbon], + [ --disable-carbon build with carbon [default auto]], + enable_carbon=$enableval, enable_carbon=yes) + +if test "x$enable_carbon" = "xyes";then + dnl There is no pkgconfig for carbon; lets do a header check + AC_CHECK_HEADER(Carbon/Carbon.h, [have_carbon=true], [have_carbon=false]) + AC_CHECK_HEADER(IOKit/IOKitLib.h, [have_iokit=true], [have_iokit=false]) + + if test "x$have_carbon" = "xtrue";then + CARBON_LIBS="$CARBON_LIBS -Xlinker -framework -Xlinker Carbon" + fi + if test "x$have_iokit" = "xtrue";then + CARBON_LIBS="$CARBON_LIBS -Xlinker -framework -Xlinker IOKit" + fi + if test "x$CARBON_LIBS" != "x";then + AC_SUBST(CARBON_LIBS) + have_idle_osx=true + dnl Disable X11 idle + have_idle=false + AM_CONDITIONAL(BUILD_IDLE, false) + dnl Disable custom trayicon + have_trayicon=gtk+ + AM_CONDITIONAL(BUILD_TRAYICON, false) + dnl Hack to work around failure in gettext package detection on OS/X + if test "x$GMSGFMT" = "x";then + AC_SUBST(GMSGFMT, msgfmt) + AC_SUBST(MSGFMT, msgfmt) + AC_SUBST(XGETTEXT, xgettext) + fi + else + have_carbon=false + have_idle_osx=false + fi +fi +AM_CONDITIONAL(BUILD_IDLE_OSX, $have_carbon) +AM_CONDITIONAL(BUILD_CARBON, $have_carbon) + ACLOCAL_AMFLAGS="\${ACLOCAL_FLAGS}" AC_SUBST(ACLOCAL_AMFLAGS) @@ -159,6 +231,9 @@ AC_CONFIG_FILES([ data/defs.py src/Makefile src/common/Makefile + src/osx/Makefile + src/osx/growl/Makefile + src/osx/syncmenu/Makefile scripts/gajim scripts/gajim-remote po/Makefile.in @@ -171,4 +246,6 @@ echo " idle module ...... ${have_idle} remote control ... ${have_remote} trayicon ......... ${have_trayicon} + idle module OSX .. ${have_idle_osx} + cocoa ............ ${have_cocoa} *****************************" diff --git a/data/nibs/Gajim.nib/classes.nib b/data/nibs/Gajim.nib/classes.nib new file mode 100644 index 000000000..b9b4b09f6 --- /dev/null +++ b/data/nibs/Gajim.nib/classes.nib @@ -0,0 +1,4 @@ +{ + IBClasses = ({CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }); + IBVersion = 1; +} \ No newline at end of file diff --git a/data/nibs/Gajim.nib/info.nib b/data/nibs/Gajim.nib/info.nib new file mode 100644 index 000000000..90bdefffb --- /dev/null +++ b/data/nibs/Gajim.nib/info.nib @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>IBDocumentLocation</key> + <string>69 10 356 240 0 0 1280 832 </string> + <key>IBEditorPositions</key> + <dict> + <key>29</key> + <string>245 312 185 44 0 0 1280 832 </string> + </dict> + <key>IBFramework Version</key> + <string>446.1</string> + <key>IBOpenObjects</key> + <array> + <integer>29</integer> + </array> + <key>IBSystem Version</key> + <string>8R218</string> +</dict> +</plist> diff --git a/data/nibs/Gajim.nib/keyedobjects.nib b/data/nibs/Gajim.nib/keyedobjects.nib new file mode 100644 index 0000000000000000000000000000000000000000..bc313d484ed50e29c78da3564417e80d2ac9b29b GIT binary patch literal 6413 zcmb7I33wD$wm$dvQr)$5-MTCxtN{Z=HUlaq>|qa(Ku8E7K%kQ}q#@~s?hczQmqkS6 zvB|#1fNVxqcV!S|Tt*p`MZ^t<$2dA}IPW>mQ%B}hRXU(Be)E#AyKdKV&VT-M&VQ<^ zcv^Wd8cR(*4+JPUzzHsJg9P%JWPhZjEI1<&DM-ezXfPbgOOA!76(om?rvyr3(Fsh? z&K(+<9VpGHJ&^-hTJ;Wiz&k#(Zzub-Qh&@Z$RTzV6i}fv+zaW@2l~N47y{Wa1|~ol zX249C1@mA&EP%!EAS{E2VI{1E4X_<{z)q-!eQ*e#hG*becmZC5*Wh({6W)gR;1awK zAHXN@7hHV?pTpPi9sC`>haU+g4&o#p(t+GZdXS!^7wJa^k!&)Y<d8yAf_q9ykW}EF z7@1Axk_AMNWn>NRUrRQUt+>CM>?Qk14X%!n7jgfK<TyD+-Xf>Td2)fgOFkx_k~z5l z8*+{OOs?Y=*VID|(vvo(O=vTkK{II%9Z7R(J}sbQX%Y3)mGlMrB0WxjM^Dg~=t=rA zeTAN)zo)O#*XZl?4f+TACVh*ZrhlYo=-c!idX}D}=jjFdF1<+KqnGIW^aJ`K{fK@{ zFVj!xpXe3(-}EZ|GyRNyLBAfA9I7lYzsxvj-~$~P7{H+()Q1Mp5E7sfBtm0o0!^VA zG=~<D1TCQz+yTkZ8rncxNP#<{9khoI&=ESpU65+!c(|SKe1Cam0JEN$otsfo5{O2F z#liAmY<9nJD1`M8j@T8^uiPJv2BP-ah1t2ogQZcdlIYm%+-!eEz*>*b&aFMoJaVf^ z^BUX0INLznH_Oh=52EAp!02G8G(0n!pIl=4GY#4>uuRQgmMi-z{8bx)?JVI}_-_I@ zFoFnYh9gt)nt|a^EXyDAPYy)JpuNDX7@nA)ojWodj)_^~pjaptiP=Jk!(y?J#1Y{Y zb3`|BNVo+Uq=leok@7BZH{64fThW@BgiAQiLRUO=AEcq(PSIE-7@Ca!GNxfCmiS{B zfN-9LZqOZiK+gg@zCg6lUWCxbF6arpptqHqtjd@l*~qo56lCYtE$onOI~mZo8u~)- zA_P(yjfE@X2TdIPA#DO<nSJ|(OTzv-0!#>l@aSO3#2nW4a<oc#Y>Pu-*e)0bS<o93 z6vq&VjY0r{n0@7NDA)%hAO}W5F66-|$cNEF7L7zRaffItI*88VUXgwd3en407zg8_ zXmob&Fn@8N+>9e!87T>fh9W^I@4-ayLot*<DFk2=o<AANAP7@nDwIP7gfJ^vflwuq zm=y|CghRoSVd0Vq%&_EX!1T)CjI3~JmOnZb9pnXL<pCsqcqp?1bBn=YRaobkkpyQ2 zO0E4u<qNJ~zs|9RKxjf2K2c9JIFA^nq5tU+fhfeF5<Qz)#SEJOGGl>?sF)~9L_gs# z$O?vn6~Q@yoQiWW8!zetbKriMi%A$6h+5%U1z`v-7y`50+Brp2{mKF*Q!D(DsW#sN z7Vd(Du*l3h_JEzmxEYMJ^{@BET`n<Qiu$Gx>q--*6=iPB9}C#VAA;r8upD|L7x5_U z5?x`IM!ji)$fR(j!VJeBtBhbo-Qoqh3Rdre)v(5d)c~mo7GoF2BH{8nO~7dFy|zTe z)BOmhd%b9i*-iX++1-TM-C|}}sG>0@poy7)35@qO`z0x(ygVruP8t|Ne<N(PRVG^9 zABp%wlLMI{>kuM654&n>EEOI@w|lWn`Uj%1V94$@Dq10o=C{JwZxz`Agi&L`Xd#ji zMoSaM1*;AYTa|DGj>0jlg{RC=!x@#aa3Ey1q$n35FBU>YVNPW*mNdveC0LO&-G=%c zq!q>jkqQ%o$>z-%k0Zttf{HeXD*2*S`Zo&S#Po6<F)c*vI5A^0io=z)UThz4m~=D? zM@j<`iwaD5sMH@RwN4!24+YA9<@hu@K7)?iqvMp@({UEgq4Nti9UR9Ah&vHMJCl>K zgM+1kq~WnLyjRF6o4^{D;cx5bP0AMSc5|p7p~uVUF%>;_yuHUDTtSalYZK53o!w<R zE3}+hoQ^X6{KD)PX!a{Kdk>oJ^6$)EyNSiS<17~BmW5}UwT192L#AO|{{nuzfd7F$ zeh_Ksq3f+4Y<c=;od;Fi7x$1?7!FsAt8FQB-OcJj;v(){#7!hiq-zB=150@}DucDP zM3s0+`$McHk>N5?i3VR0oiJh$PU?~RqybDO38WE8B#lWE(v&oVGq9c{k(O`*_QPJ% z8h#*cNeUE^cA~rJDEf;5qKg<NMu;3yAjXSgk%zrDSd@yfVu;8PlSOZlA`(TJ2#RFU zLNpioqN@mt9zqc@G4p*}mPyAO!c01$d6Z_-jC77iPr9Po=2jM0pz@%wXOvhIt_Rxg z87D>bsuNa{M$#chx{HXIfz1=m8yqN~Rur`_x39%qmw?rK=ma~D^c6kLM(bl!)E^2S zB~1{1`Ynk;Moe&-acGF4ZyZCODc*K2M!>{sjIH-2JHVU58;LxclV?lZ0vtm%$&BU( zruid&yahs*n#3)7e~X|5GCppD6eFX9#lZM=Vo=_I(qQaHl;f=^%fvu4%1k@TDQ1+7 zF-^CLGQo;69Ji0QhsJH+;JK2_K<Z|REHNCdW?Py;=0I9OZXhxvh_`pOcK~D_6jX_H zRMrXRaJP?{W8yzz=RfA70eLu%m#juU^2EqEW|2GEPJHwRB@bJaY!D+&N=Dg~Y%(cn zjWwG7E7iotC?nhB=F#-%xak`PcUcDah%u(Y!o2)oV5V(#ziBlQJK{D(bBpMMb(Ran zxVYut$US!H)A38l3mB^^isF}v3HkPot?m4GP_P?{ux;z(v{bP9im@HjZ^yhXIXBfM zTD?(;MVPzV8)h?gw={-b*5nLKCGXTqZ2%!nGNra0Z{i}>eOJKRhOi$35KU^6)8TeN zZfTHTl)(T0irW%di&rO~*Ae+O`WYss)Dby#lr<e}9>0Zx$KeD@W+Rl#mZT|MMrr(t zB*9)3w*Dx1BT(Wdqa>!FAeN!frH@0#OyLiheBBm<t#q)T(l`bxVKQ5YX>}NI+T%Sm z^+LfO6kda9q#X*iEW#+b15iT8qYS72hH=#OU3JD2(RhIvQ)j$#EJDok2SX-8OSouL zB2}9s#CF@<o)sxb)_w%LALjsW5kd-9pn*U%{LOJ<G{dcoXH7QG#C2Qzn6o4WQq6BG zs20|D5X0+%z|ES?LHGmkcLC~4Z`^jrkBT4jKa3x9mh`|WY<}ClMEjEVkC8?=iBhnj zQ<3)Oc&r%DsXaafkJF)a7|o*Dbhx-*%oX#*e6c{x%<bHzb6#isvvi8)p-#m^H+9N< zj@bcewM#k%(#8!8mIvBKlZMX>1tPUlM#qu%RdHVvZdw<cOtnKMm^D3{Kn_mOrZ5s& z*=tW)<f|Fs_z05<XK;?L$48nUuz>2p2u!SQ&R&uNqpew6Wb#Pbf%(XD0=XH1agN1t z)Ck3TGCurt$EfYun}fU+;A0TQvdhQDz5^S)3$kh!$S`Xf_rOOabNVV4voY(jDLEd& zDhoATP1n%1^bxv_uBRL5M!Jb^rd#M%x{Yq9JLpbYMIWWrbQj%CAESHdUb>I&rw8cc zw1z%G57I;QFg-$#(qr^V`V@VdK0}|S&xs}C0kKp(D3*zb#B%YlSRwvPtQ4!nYOzMF z6_1E@V!hZPHi}JRv)CfGifv-M*dca`D)FeO7Q4i5@tD{n_KJOCzc?Ts7d7GuG1DLk zY!zE*kR}Fc&e|HJ5nIh3Hb_&pj4fqf8l)i>CGu>L#%wbqY>h!0Fc(|NzF`|!J=U6~ zu|;g0LF%(+>>69o7PAD_h@~4Ok*#H$7~V*k&GxA^uI%;aH|6-t+BH5`({JdtYI@DO z)ynK^KMVKA*HqwvM0^?20pC(}gJJmOnvV~hlkk1dIoh12Vp$f^Ag!c}k<=P|d-E#3 zm$^c(Ib=seN3x@n<6g&oj&w(NM^8s@M~0)HV}N6jBhxX|k>wcf$Z_O4MmY)`g^m(O z*fHG^b<A}vb*yu2aO`yKa~yL#?|92`!SS)<FODxAKRTVx1ZSeNm9wL>lQY$s?(E~t za^^b6IV+rD=X7V(S?QeVob9~dInTMkxx%^5x!t+b`KWW3^OW;V=OyP?&hMPpU9u~| zmFQ~jy2I7l)z)>VtG%nEtCwqlE60`V8s!@88sjQ<mAa<8glmy&iEF8ArK`%d-*wpa zitD25s_RqNXRg1x{^@qR6?a2-3-`V5``mrpgWMC`A@}|6dF}=7h3;ziZucJdKKB84 zjr*Yc756FkY4>IKpWJ_wK%$aUa!VfRPN}`rQMya&EZr^LD-DsxNMoh(Qjs)KDwZmw zury0rEIlA?kTywMq;1j;=>_SybV52Qy(0ZydQCbfeJK4T{p`^_hNqsVfhWO}=IQ3? z?aA=;^9=9|@??5Oc}9Dtc@}yWdmivS=y}L<z*FNn=sD~;>Uq-hwCAMfHP3sV_dOqa zKK6X#C0>Wu<(0f%uj19b4ZU}Hdw6?!`*{0$OS}Q^WN*+r)mz~Wdt=^(-sRpk-YV}t z?-B3cz5nq3;Qh(_vkWqoow8f@$g-@;KAFi}t}i!~8_A93rgC#RNp2-4%WdQoxt-iW z?j)zmUF3V@u5y~(O)ilu<QeiTd5%0+o-Ye|k-S7+DsPlG%Uk8`@=kfTd`vzizbd~b zzahUVpO-Jnm*fxRpX8qvP^jWm+=@rhl!i(ZrH_)Wj8H}@c}l)gpcE=&l_knjWtp;E zS)r^{Rx4|jb;@StfKsD8p&U|<D9<a$l@rQI<%)7u`BeE#`K$7!^0jhZC8|Spsglan zM74>UthQF$s_ANxI#DfFOVvqgnL0(Cs;*NvsGHO+>Na(UTBTO2yVV-?xOzf;Nqt#8 zrJh#bR?n*E)o<1RQNL5aSN~7_QT?ap)0k#x^|S_BW9<&Djh3Rd(}rqU+HfsL%hg6{ zqcx!|(w1mTwPo6JZH2Z{Tdi%>s<i#u<JuG2A?=8EOnXmzU;9w|So=h~qFvSgto^UA zfiJ<A=xgF@=4;_=>Feg};q&`Sd;#BNU(h$zSK$l!9`UXBZS-ySZS`&U?etao-tfKY zJMBB;d&hUqcfohjcgc6z_nGgyPIQOv(k0!iE4rrZx}n$88|VpovYw?6*K_n-eUv_0 zAES@e$Lo{ys9veh)MxAW>+|#l`a=DHUZWq>59>$uC-tZGXZ7dxSM@XcdHo~SiY2o) zEQPgW9atxp%DS+7SXUISZmb9E#rm+mtUnvb2D2e-7|UiO*hrSg@>u~ZWaC&7o5+e; zDVxN?Yz~{t<}-m}w*+-@72CqLu^p_6RkPh}4?DmPv1i#y_6mE8{gGW{SJ|g1kk{DX z*pKWd_Ol@wMaD#<*eEq78D+*4qudA?(~O7_GiDgGj5)?!W4<AbMaB|isj<vhZmcj? z8mo=9#yVqzvB}tCY%_KkRYtY3+t_35GY%Lv#zEt-anyLyIL_<yhP)AP%$xG&Jc+mB z$-E6u;q7<_-ifF3F8m(em8bD;ya(^a`|!TJKOe{k^C5f~&*mfeNS?>@c>yov<9HFD z$cuR?pTx`f6kfr@d^(TunS3^%%ja{!7xM@BgZv@Bg0JFh`Fg&QZ{}P14qnBp`EI_4 z@8bt}4L`^a^JDxe{tSPPzrc_46Z|AU#b4#G^FQ!&{5*e`U*@0iEBp)oCI6a#&wm2z Q5AWFQ?YH(e{#{S`7pMXXC;$Ke literal 0 HcmV?d00001 diff --git a/data/pixmaps/gajim.icns b/data/pixmaps/gajim.icns new file mode 100644 index 0000000000000000000000000000000000000000..37516d5e80152b50a41bbf8885ac9ee0960585eb GIT binary patch literal 42918 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 literal 0 HcmV?d00001 diff --git a/launch.sh b/launch.sh index 08b9110a0..1b23c5c4d 100755 --- a/launch.sh +++ b/launch.sh @@ -1,3 +1,10 @@ #!/bin/bash -cd `dirname $0`/src +BASE=`pwd`/`dirname $0` +OS=`uname -s` + +if [ "x${OS}" == "xDarwin" ]; then + export RESOURCEPATH="${BASE}/dist/Gajim.app/Contents/Resources" +fi + +cd ${BASE}/src exec -a gajim python -OOt gajim.py $@ diff --git a/setup_osx.py b/setup_osx.py new file mode 100644 index 000000000..960686597 --- /dev/null +++ b/setup_osx.py @@ -0,0 +1,362 @@ +""" +Usage: + python setup_osx.py [build | dist] +""" + +from setuptools import setup +import sys, glob, os, commands, types +from os import system, unlink, symlink, getcwd, mkdir, utime +from shutil import move, copy, copytree, rmtree + +### +### Globals +### + +GTK_DIR="/Library/Frameworks/GTK+.framework/Versions/Current" +NAME = 'Gajim' +VERSION = '0.11' +DESCRIPTION = 'A full featured Jabber client' +AUTHOR = 'Gajim Development Team' +URL = 'http://www.gajim.org/' +DOWNLOAD_URL = 'http://www.gajim.org/downloads.php' +LICENSE = 'GPL' +PWD = getcwd() +APP_RS = "dist/Gajim.app/Contents/Resources" + +GAJIM_SCRIPT = \ +'#!/bin/bash \n\ +export DYLD_LIBRARY_PATH=%s/lib \n\ +export PATH=%s/bin:$PATH \n\ +exec ${0}.bin \n\ +' % (GTK_DIR, GTK_DIR) + +GAJIM_REMOTE_SCRIPT = \ +'#!/bin/bash \n\ +export DYLD_LIBRARY_PATH=%s/lib \n\ +TOPDIR=${0%%/MacOS/gajim-remote} \n\ +echo "${TOPDIR}" | grep -e "^/" \n\ +[ $? -ne 0 ] && TOPDIR=`pwd`/${TOPDIR} \n\ +export RESOURCEPATH=${TOPDIR}/Resources \n\ +export PYTHONHOME=${RESOURCEPATH}/lib/python2.5 \n\ +export PYTHONPATH=${RESOURCEPATH}/lib/python2.5/lib-dynload:${RESOURCEPATH}/lib/python2.5/site-packages.zip:${PYTHONPATH} \n\ +cd ${RESOURCEPATH} \n\ +exec ${TOPDIR}/MacOS/Python ${RESOURCEPATH}/gajim-remote.py $* \n\ +' % GTK_DIR + +### +### Functions +### + +def check(ret): + if type(ret) == types.ListType: + if ret[0] != 0: + raise Exception("Command failed: " + ret[1]) + elif type(ret) == types.IntType: + if ret != 0: + raise Exception("Command failed") + return + + +def force(func): + try: + func() + except: + pass + return + + +def writeScript(filename, contents): + script = file(filename, "w+") + script.write(contents) + script.close() + system("chmod +x %s" % filename) + return + + +def cleanup(): + force(lambda:rmtree("build")) + force(lambda:rmtree("dist")) + +def stageInstall(): + check(system("make DATADIR=%s/build/inst LIBDIR=%s/build/inst prefix=%s/build/inst DOCDIR=%s/build/inst/share/doc install" % (PWD, PWD, PWD, PWD))) + force(lambda:unlink("src/osx/growl/_growl.so")) + force(lambda:unlink("src/osx/growl/_growlImage.so")) + force(lambda:unlink("src/osx/idle.so")) + force(lambda:unlink("src/osx/nsapp.so")) + force(lambda:unlink("src/osx/syncmenu.so")) + force(lambda:unlink("src/gtkspell.so")) + symlink("%s/build/inst/lib/gajim/_growl.so" % PWD, "src/osx/growl/_growl.so") + symlink("%s/build/inst/lib/gajim/_growlImage.so" % PWD, + "src/osx/growl/_growlImage.so") + symlink("%s/build/inst/lib/gajim/idle.so" % PWD, "src/osx/idle.so") + symlink("%s/build/inst/lib/gajim/nsapp.so" % PWD, "src/osx/nsapp.so") + symlink("%s/build/inst/lib/gajim/syncmenu.so" % PWD, "src/osx/syncmenu.so") + if os.path.isfile("build/inst/lib/gajim/gtkspell.so"): + symlink("%s/build/inst/lib/gajim/gtkspell.so" % PWD, "src/gtkspell.so") + return + + +def buildApp(): + sys.path.append('src') + sys.path.append(GTK_DIR + "/lib/python2.5/site-packages") + sys.path.append(GTK_DIR + "/lib/python2.5/site-packages/gtk-2.0") + OPTIONS = {'argv_emulation':True, + 'excludes':'docutils,Crypto,dbus,OpenSSL,cairo,gtk,gobject,atk,pangocairo', + 'iconfile':'data/pixmaps/gajim.icns', + 'includes':'osx,ConfigParser,compiler,UserString,history_manager', + 'plist':{'LSMinimumSystemVersion':'10.4.0', + 'NSHumanReadableCopyright':'GNU General Public License', + 'CFBundleIdentifier':'org.gajim', + 'NSMainNibFile':'Gajim', + }, + } + setup( + name = NAME, version = VERSION, description = DESCRIPTION, + author = AUTHOR, url = URL, download_url = DOWNLOAD_URL, + license = LICENSE, + app=['src/gajim.py'], + data_files=['data/nibs/Gajim.nib'], + options={'py2app': OPTIONS}, + setup_requires=['py2app'], + ) + return + + +def finishApp(): + # setup gajim dirs + copytree("build/inst/share/gajim/data", APP_RS + "/data") + copy("data/pixmaps/gajim.icns", APP_RS + "/data/pixmaps") + copytree("build/inst/locale", APP_RS + "/locale") + copytree("build/inst/share/man", APP_RS + "/man") + force(lambda:unlink("dist/Gajim.app/Contents/data")) + symlink("Resources/data", "dist/Gajim.app/Contents/data") + copy("src/gajim-remote.py", "dist/Gajim.app/Contents/Resources") + # Nuke libs that are in the framework + move("dist/Gajim.app/Contents/Frameworks/Python.framework", + "dist/Gajim.app/Contents/Python.framework") + rmtree("dist/Gajim.app/Contents/Frameworks") + mkdir("dist/Gajim.app/Contents/Frameworks") + move("dist/Gajim.app/Contents/Python.framework", + "dist/Gajim.app/Contents/Frameworks/Python.framework") + # Adjust the running of the app + move("dist/Gajim.app/Contents/MacOS/Gajim", + "dist/Gajim.app/Contents/MacOS/Gajim.bin") + writeScript("dist/Gajim.app/Contents/MacOS/Gajim", GAJIM_SCRIPT) + # Setup the gajim-remote script + writeScript("dist/Gajim.app/Contents/MacOS/gajim-remote", + GAJIM_REMOTE_SCRIPT) + # Touch the top dir so Finder knows to update its idea of this bundle + utime("dist/Gajim.app", None) + return + + +def distApp(): + force(lambda:rmtree("dist/Gajim")) + force(lambda:rmtree("dist/Gajim.tar.bz2")) + mkdir("dist/Gajim") + check(system("tar -cf - -C dist Gajim.app | tar -xf - -C dist/Gajim")) + copy("README.osx", "dist/Gajim/README") + copy("TODO.osx", "dist/Gajim/TODO") + check(system("tar -C dist -jcf dist/Gajim-OSX-`date | awk '{printf(\"%s-%s-%s\", $6, $2, $3);}'`.tar.bz2 Gajim")) + rmtree("dist/Gajim") + return + + + +### +### Start +### +if ((len(sys.argv) != 2) or ((sys.argv[1] != "build") and + (sys.argv[1] != "dist"))): + print "usage: python setup_osx.py [build]" + print " or: python setup_osx.py [dist]" + sys.exit(1) +elif sys.argv[1] == "build": + sys.argv[1] = "py2app" + cleanup() + stageInstall() + buildApp() + finishApp() +elif sys.argv[1] == "dist": + distApp() +""" +Usage: + python setup_osx.py [build | dist] +""" + +from setuptools import setup +import sys, glob, os, commands, types +from os import system, unlink, symlink, getcwd, mkdir, utime +from shutil import move, copy, copytree, rmtree + +### +### Globals +### + +GTK_DIR="/Library/Frameworks/GTK+.framework/Versions/Current" +NAME = 'Gajim' +VERSION = '0.11' +DESCRIPTION = 'A full featured Jabber client' +AUTHOR = 'Gajim Development Team' +URL = 'http://www.gajim.org/' +DOWNLOAD_URL = 'http://www.gajim.org/downloads.php' +LICENSE = 'GPL' +PWD = getcwd() +APP_RS = "dist/Gajim.app/Contents/Resources" + +GAJIM_SCRIPT = \ +'#!/bin/bash \n\ +export DYLD_LIBRARY_PATH=%s/lib \n\ +export PATH=%s/bin:$PATH \n\ +exec ${0}.bin \n\ +' % (GTK_DIR, GTK_DIR) + +GAJIM_REMOTE_SCRIPT = \ +'#!/bin/bash \n\ +export DYLD_LIBRARY_PATH=%s/lib \n\ +TOPDIR=${0%%/MacOS/gajim-remote} \n\ +echo "${TOPDIR}" | grep -e "^/" \n\ +[ $? -ne 0 ] && TOPDIR=`pwd`/${TOPDIR} \n\ +export RESOURCEPATH=${TOPDIR}/Resources \n\ +export PYTHONHOME=${RESOURCEPATH}/lib/python2.5 \n\ +export PYTHONPATH=${RESOURCEPATH}/lib/python2.5/lib-dynload:${RESOURCEPATH}/lib/python2.5/site-packages.zip:${PYTHONPATH} \n\ +cd ${RESOURCEPATH} \n\ +exec ${TOPDIR}/MacOS/Python ${RESOURCEPATH}/gajim-remote.py $* \n\ +' % GTK_DIR + +### +### Functions +### + +def check(ret): + if type(ret) == types.ListType: + if ret[0] != 0: + raise Exception("Command failed: " + ret[1]) + elif type(ret) == types.IntType: + if ret != 0: + raise Exception("Command failed") + return + + +def force(func): + try: + func() + except: + pass + return + + +def writeScript(filename, contents): + script = file(filename, "w+") + script.write(contents) + script.close() + system("chmod +x %s" % filename) + return + + +def cleanup(): + force(lambda:rmtree("build")) + force(lambda:rmtree("dist")) + +def stageInstall(): + check(system("make DATADIR=%s/build/inst LIBDIR=%s/build/inst prefix=%s/build/inst DOCDIR=%s/build/inst/share/doc install" % (PWD, PWD, PWD, PWD))) + force(lambda:unlink("src/osx/growl/_growl.so")) + force(lambda:unlink("src/osx/growl/_growlImage.so")) + force(lambda:unlink("src/osx/idle.so")) + force(lambda:unlink("src/osx/nsapp.so")) + force(lambda:unlink("src/osx/syncmenu.so")) + force(lambda:unlink("src/gtkspell.so")) + symlink("%s/build/inst/lib/gajim/_growl.so" % PWD, "src/osx/growl/_growl.so") + symlink("%s/build/inst/lib/gajim/_growlImage.so" % PWD, + "src/osx/growl/_growlImage.so") + symlink("%s/build/inst/lib/gajim/idle.so" % PWD, "src/osx/idle.so") + symlink("%s/build/inst/lib/gajim/nsapp.so" % PWD, "src/osx/nsapp.so") + symlink("%s/build/inst/lib/gajim/syncmenu.so" % PWD, "src/osx/syncmenu.so") + if os.path.isfile("build/inst/lib/gajim/gtkspell.so"): + symlink("%s/build/inst/lib/gajim/gtkspell.so" % PWD, "src/gtkspell.so") + return + + +def buildApp(): + sys.path.append('src') + sys.path.append(GTK_DIR + "/lib/python2.5/site-packages") + sys.path.append(GTK_DIR + "/lib/python2.5/site-packages/gtk-2.0") + OPTIONS = {'argv_emulation':True, + 'excludes':'docutils,Crypto,dbus,OpenSSL,cairo,gtk,gobject,atk,pangocairo', + 'iconfile':'data/pixmaps/gajim.icns', + 'includes':'osx,ConfigParser,compiler,UserString,history_manager', + 'plist':{'LSMinimumSystemVersion':'10.4.0', + 'NSHumanReadableCopyright':'GNU General Public License', + 'CFBundleIdentifier':'org.gajim', + 'NSMainNibFile':'Gajim', + }, + } + setup( + name = NAME, version = VERSION, description = DESCRIPTION, + author = AUTHOR, url = URL, download_url = DOWNLOAD_URL, + license = LICENSE, + app=['src/gajim.py'], + data_files=['data/nibs/Gajim.nib'], + options={'py2app': OPTIONS}, + setup_requires=['py2app'], + ) + return + + +def finishApp(): + # setup gajim dirs + copytree("build/inst/share/gajim/data", APP_RS + "/data") + copy("data/pixmaps/gajim.icns", APP_RS + "/data/pixmaps") + copytree("build/inst/locale", APP_RS + "/locale") + copytree("build/inst/share/man", APP_RS + "/man") + force(lambda:unlink("dist/Gajim.app/Contents/data")) + symlink("Resources/data", "dist/Gajim.app/Contents/data") + copy("src/gajim-remote.py", "dist/Gajim.app/Contents/Resources") + # Nuke libs that are in the framework + move("dist/Gajim.app/Contents/Frameworks/Python.framework", + "dist/Gajim.app/Contents/Python.framework") + rmtree("dist/Gajim.app/Contents/Frameworks") + mkdir("dist/Gajim.app/Contents/Frameworks") + move("dist/Gajim.app/Contents/Python.framework", + "dist/Gajim.app/Contents/Frameworks/Python.framework") + # Adjust the running of the app + move("dist/Gajim.app/Contents/MacOS/Gajim", + "dist/Gajim.app/Contents/MacOS/Gajim.bin") + writeScript("dist/Gajim.app/Contents/MacOS/Gajim", GAJIM_SCRIPT) + # Setup the gajim-remote script + writeScript("dist/Gajim.app/Contents/MacOS/gajim-remote", + GAJIM_REMOTE_SCRIPT) + # Touch the top dir so Finder knows to update its idea of this bundle + utime("dist/Gajim.app", None) + return + + +def distApp(): + force(lambda:rmtree("dist/Gajim")) + force(lambda:rmtree("dist/Gajim.tar.bz2")) + mkdir("dist/Gajim") + check(system("tar -cf - -C dist Gajim.app | tar -xf - -C dist/Gajim")) + copy("README.osx", "dist/Gajim/README") + copy("TODO.osx", "dist/Gajim/TODO") + check(system("tar -C dist -jcf dist/Gajim-OSX-`date | awk '{printf(\"%s-%s-%s\", $6, $2, $3);}'`.tar.bz2 Gajim")) + rmtree("dist/Gajim") + return + + + +### +### Start +### +if ((len(sys.argv) != 2) or ((sys.argv[1] != "build") and + (sys.argv[1] != "dist"))): + print "usage: python setup_osx.py [build]" + print " or: python setup_osx.py [dist]" + sys.exit(1) +elif sys.argv[1] == "build": + sys.argv[1] = "py2app" + cleanup() + stageInstall() + buildApp() + finishApp() +elif sys.argv[1] == "dist": + distApp() diff --git a/src/Makefile.am b/src/Makefile.am index 30eb995a9..27a734196 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,9 +1,10 @@ -SUBDIRS = common +SUBDIRS = common osx CLEANFILES = \ trayicon.c INCLUDES = \ $(PYTHON_INCLUDES) +export MACOSX_DEPLOYMENT_TARGET=10.4 if BUILD_GTKSPELL gtkspelllib_LTLIBRARIES = gtkspell.la diff --git a/src/common/config.py b/src/common/config.py index 5408fe14e..878fa58e1 100644 --- a/src/common/config.py +++ b/src/common/config.py @@ -26,6 +26,7 @@ ## +import sys import re import copy import defs @@ -50,6 +51,16 @@ opt_treat_incoming_messages = ['', 'chat', 'normal'] class Config: DEFAULT_ICONSET = 'dcraven' + if sys.platform == 'darwin': + DEFAULT_OPENWITH = 'open' + DEFAULT_BROWSER = 'open -a firefox' + DEFAULT_MAILAPP = 'open -a thunderbird' + DEFAULT_FILE_MANAGER = 'open' + else: + DEFAULT_OPENWITH = 'gnome-open' + DEFAULT_BROWSER = 'firefox' + DEFAULT_MAILAPP = 'mozilla-thunderbird -compose' + DEFAULT_FILE_MANAGER = 'xffm' __options = { # name: [ type, default_value, help_string ] @@ -108,10 +119,10 @@ class Config: 'sounds_on': [ opt_bool, True ], # 'aplay', 'play', 'esdplay', 'artsplay' detected first time only 'soundplayer': [ opt_str, '' ], - 'openwith': [ opt_str, 'gnome-open' ], - 'custombrowser': [ opt_str, 'firefox' ], - 'custommailapp': [ opt_str, 'mozilla-thunderbird -compose' ], - 'custom_file_manager': [ opt_str, 'xffm' ], + 'openwith': [ opt_str, DEFAULT_OPENWITH ], + 'custombrowser': [ opt_str, DEFAULT_BROWSER ], + 'custommailapp': [ opt_str, DEFAULT_MAILAPP ], + 'custom_file_manager': [ opt_str, DEFAULT_FILE_MANAGER ], 'gc-hpaned-position': [opt_int, 430], 'gc_refer_to_nick_char': [opt_str, ',', _('Character to add after nickname when using nick completion (tab) in group chat.')], 'gc_proposed_nick_char': [opt_str, '_', _('Character to propose to add after desired nickname when desired nickname is used by someone else in group chat.')], diff --git a/src/common/dbus_support.py b/src/common/dbus_support.py index d91a727bd..71695036a 100644 --- a/src/common/dbus_support.py +++ b/src/common/dbus_support.py @@ -20,7 +20,7 @@ ## along with Gajim. If not, see <http://www.gnu.org/licenses/>. ## -import os +import os, sys from common import gajim from common import exceptions @@ -28,10 +28,13 @@ from common import exceptions _GAJIM_ERROR_IFACE = 'org.gajim.dbus.Error' try: + if sys.platform == 'darwin': + import osx.dbus + osx.dbus.load(True) import dbus import dbus.service import dbus.glib - supported = True # does use have D-Bus bindings? + supported = True # does user have D-Bus bindings? except ImportError: supported = False if not os.name == 'nt': # only say that to non Windows users @@ -103,7 +106,7 @@ class SessionBus: session_bus = SessionBus() def get_interface(interface, path): - '''Returns an interface on the current SessionBus. If the interface isn't + '''Returns an interface on the current SessionBus. If the interface isn\'t running, it tries to start it first.''' if not supported: return None diff --git a/src/common/helpers.py b/src/common/helpers.py index 623ab522f..7cc5658a2 100644 --- a/src/common/helpers.py +++ b/src/common/helpers.py @@ -30,6 +30,7 @@ import urllib import errno import select import sha +import sys from encodings.punycode import punycode_encode from encodings import idna @@ -39,6 +40,9 @@ from i18n import ngettext from xmpp_stringprep import nodeprep, resourceprep, nameprep +if sys.platform == 'darwin': + from osx import nsapp + try: import winsound # windows-only built-in module for playing wav import win32api @@ -474,7 +478,9 @@ def play_sound_file(path_to_soundfile): return if path_to_soundfile is None or not os.path.exists(path_to_soundfile): return - if os.name == 'nt': + if sys.platform == 'darwin': + nsapp.playFile(path_to_soundfile) + elif os.name == 'nt': try: winsound.PlaySound(path_to_soundfile, winsound.SND_FILENAME|winsound.SND_ASYNC) diff --git a/src/common/proxy65_manager.py b/src/common/proxy65_manager.py index 542119a7a..29627478f 100644 --- a/src/common/proxy65_manager.py +++ b/src/common/proxy65_manager.py @@ -258,7 +258,7 @@ class HostTester(Socks5, IdleObject): except Exception, ee: (errnum, errstr) = ee # 56 is for freebsd - if errnum in (errno.EINPROGRESS, errno.EALREADY, errno.EWOULDBLOCK, 56): + if errnum in (errno.EINPROGRESS, errno.EALREADY, errno.EWOULDBLOCK): # still trying to connect return # win32 needs this diff --git a/src/common/sleepy.py b/src/common/sleepy.py index b515b9821..bcc5f73c3 100644 --- a/src/common/sleepy.py +++ b/src/common/sleepy.py @@ -25,7 +25,7 @@ ## from common import gajim -import os +import os, sys STATE_UNKNOWN = 'OS probably not supported' @@ -47,6 +47,8 @@ try: lastInputInfo = LASTINPUTINFO() lastInputInfo.cbSize = ctypes.sizeof(lastInputInfo) + elif sys.platform == 'darwin': + import osx.idle as idle else: # unix import idle except: diff --git a/src/config.py b/src/config.py index 61ba66aa1..4112ba67d 100644 --- a/src/config.py +++ b/src/config.py @@ -24,7 +24,7 @@ import gtk import gobject -import os +import os, sys import common.config import common.sleepy from common.i18n import Q_ @@ -259,7 +259,7 @@ class PreferencesWindow: self.auto_popup_away_checkbutton.set_active(st) # sounds - if os.name == 'nt': + if ((os.name == 'nt') or (sys.platform == 'darwin')): # if windows, player must not become visible on show_all soundplayer_hbox = self.xml.get_widget('soundplayer_hbox') soundplayer_hbox.set_no_show_all(True) @@ -397,6 +397,12 @@ class PreferencesWindow: 'applications_combobox') self.xml.get_widget('custom_apps_frame').hide() self.xml.get_widget('custom_apps_frame').set_no_show_all(True) + + if sys.platform == 'darwin': + self.applications_combobox.remove_text(3) + self.applications_combobox.remove_text(2) + self.applications_combobox.remove_text(1) + if gajim.config.get('autodetect_browser_mailer'): self.applications_combobox.set_active(0) # else autodetect_browser_mailer is False. @@ -408,7 +414,10 @@ class PreferencesWindow: elif gajim.config.get('openwith') == 'exo-open': self.applications_combobox.set_active(3) elif gajim.config.get('openwith') == 'custom': - self.applications_combobox.set_active(4) + if sys.platform == 'darwin': + self.applications_combobox.set_active(1) + else: + self.applications_combobox.set_active(4) self.xml.get_widget('custom_apps_frame').show() self.xml.get_widget('custom_browser_entry').set_text( @@ -898,19 +907,27 @@ class PreferencesWindow: def on_applications_combobox_changed(self, widget): gajim.config.set('autodetect_browser_mailer', False) - if widget.get_active() == 4: - self.xml.get_widget('custom_apps_frame').show() - gajim.config.set('openwith', 'custom') - else: + if sys.platform == 'darwin': if widget.get_active() == 0: gajim.config.set('autodetect_browser_mailer', True) + self.xml.get_widget('custom_apps_frame').hide() elif widget.get_active() == 1: - gajim.config.set('openwith', 'gnome-open') - elif widget.get_active() == 2: - gajim.config.set('openwith', 'kfmclient exec') - elif widget.get_active() == 3: - gajim.config.set('openwith', 'exo-open') - self.xml.get_widget('custom_apps_frame').hide() + self.xml.get_widget('custom_apps_frame').show() + gajim.config.set('openwith', 'custom') + else: + if widget.get_active() == 4: + self.xml.get_widget('custom_apps_frame').show() + gajim.config.set('openwith', 'custom') + else: + if widget.get_active() == 0: + gajim.config.set('autodetect_browser_mailer', True) + elif widget.get_active() == 1: + gajim.config.set('openwith', 'gnome-open') + elif widget.get_active() == 2: + gajim.config.set('openwith', 'kfmclient exec') + elif widget.get_active() == 3: + gajim.config.set('openwith', 'exo-open') + self.xml.get_widget('custom_apps_frame').hide() gajim.interface.save_config() def on_custom_browser_entry_changed(self, widget): @@ -2105,7 +2122,7 @@ class AccountsWindow: else: gajim.interface.roster.regroup = False gajim.interface.roster.draw_roster() - gajim.interface.roster.actions_menu_needs_rebuild = True + gajim.interface.roster.set_actions_menu_needs_rebuild() elif not gajim.config.get('enable_zeroconf') and widget.get_active(): self.xml.get_widget('zeroconf_notebook').set_sensitive(True) @@ -2137,7 +2154,7 @@ class AccountsWindow: else: gajim.interface.roster.regroup = False gajim.interface.roster.draw_roster() - gajim.interface.roster.actions_menu_needs_rebuild = True + gajim.interface.roster.set_actions_menu_needs_rebuild() gajim.interface.save_config() self.on_checkbutton_toggled(widget, 'enable_zeroconf') @@ -2564,7 +2581,7 @@ class RemoveAccountWindow: else: gajim.interface.roster.regroup = False gajim.interface.roster.draw_roster() - gajim.interface.roster.actions_menu_needs_rebuild = True + gajim.interface.roster.set_actions_menu_needs_rebuild() if gajim.interface.instances.has_key('accounts'): gajim.interface.instances['accounts'].init_accounts() self.window.destroy() @@ -2760,7 +2777,7 @@ class ManageBookmarksWindow: gajim.connections[account_unicode].bookmarks.append(bmdict) gajim.connections[account_unicode].store_bookmarks() - gajim.interface.roster.actions_menu_needs_rebuild = True + gajim.interface.roster.set_actions_menu_needs_rebuild() self.window.destroy() def on_cancel_button_clicked(self, widget): @@ -3347,5 +3364,5 @@ class AccountCreationWizardWindow: else: gajim.interface.roster.regroup = False gajim.interface.roster.draw_roster() - gajim.interface.roster.actions_menu_needs_rebuild = True + gajim.interface.roster.set_actions_menu_needs_rebuild() gajim.interface.save_config() diff --git a/src/conversation_textview.py b/src/conversation_textview.py index c14336067..53b3a68b1 100644 --- a/src/conversation_textview.py +++ b/src/conversation_textview.py @@ -318,6 +318,10 @@ class ConversationTextview: return True def smooth_scroll_timeout(self): + gobject.idle_add(self.do_smooth_scroll_timeout) + return + + def do_smooth_scroll_timeout(self): if not self.smooth_id: # we finished scrolling return diff --git a/src/dialogs.py b/src/dialogs.py index 2635f82a5..821562bc6 100644 --- a/src/dialogs.py +++ b/src/dialogs.py @@ -881,7 +881,9 @@ class AboutDialog: artists = ['Anders Ström', 'Christophe Got', 'Dennis Craven', 'Guillaume Morin', 'Josef VybÃral', 'Membris Khan'] dlg.set_artists(artists) + gobject.idle_add(self.dorun, dlg) + def dorun(self, dlg): rep = dlg.run() dlg.destroy() @@ -1932,6 +1934,7 @@ class SingleMessageWindow: self.message_tv_buffer.place_cursor(end_iter) def save_pos(self): + print 'save_pos' if gajim.config.get('saveposition'): # save the window size and position x, y = self.window.get_position() @@ -1943,6 +1946,7 @@ class SingleMessageWindow: gajim.interface.save_config() def on_single_message_window_delete_event(self, window, ev): + print 'delete_event' self.save_pos() def prepare_widgets_for(self, action): @@ -2019,6 +2023,7 @@ class SingleMessageWindow: self.window.destroy() def on_close_button_clicked(self, widget): + print 'close' self.save_pos() self.window.destroy() diff --git a/src/features_window.py b/src/features_window.py index be22f2433..a20083297 100644 --- a/src/features_window.py +++ b/src/features_window.py @@ -19,6 +19,7 @@ ## import os +import sys import gtk import gobject import gtkgui_helpers @@ -219,6 +220,12 @@ class FeaturesWindow: def notification_available(self): if os.name == 'nt': return False + elif sys.platform == 'darwin': + try: + import osx.growler + except: + return False + return True from common import dbus_support if self.dbus_available() and dbus_support.get_notifications_interface(): return True diff --git a/src/gajim-remote.py b/src/gajim-remote.py index abbaa0090..892375a39 100755 --- a/src/gajim-remote.py +++ b/src/gajim-remote.py @@ -40,6 +40,9 @@ def send_error(error_message): sys.exit(1) try: + if sys.platform == 'darwin': + import osx.dbus + osx.dbus.load(False) import dbus import dbus.service import dbus.glib diff --git a/src/gajim.py b/src/gajim.py index b5d1f7c7f..51d616106 100755 --- a/src/gajim.py +++ b/src/gajim.py @@ -25,10 +25,17 @@ ## along with Gajim. If not, see <http://www.gnu.org/licenses/>. ## + import sys import os import urllib +if sys.platform == 'darwin': + OSX_FRAMEWORK='/Library/Frameworks/GTK+.framework/Versions/Current' + sys.path.append('%s/lib/python2.5/site-packages' % OSX_FRAMEWORK) + sys.path.append('%s/lib/python2.5/site-packages/gtk-2.0' % OSX_FRAMEWORK) + os.environ['PATH'] = '%s/bin:' % OSX_FRAMEWORK + os.environ['PATH'] + import logging consoleloghandler = logging.StreamHandler() consoleloghandler.setLevel(1) @@ -294,6 +301,9 @@ def pid_alive(): if get_p(pid) in ('python.exe', 'gajim.exe'): return True return False + elif sys.platform == 'darwin': + from osx import checkPID + return checkPID(pid, 'gajim') try: if not os.path.exists('/proc'): return True # no /proc, assume Gajim is running @@ -356,6 +366,9 @@ def on_exit(): # delete pid file on normal exit if os.path.exists(pid_filename): os.remove(pid_filename) + if sys.platform == 'darwin': + import osx + osx.shutdown() import atexit atexit.register(on_exit) @@ -1430,7 +1443,7 @@ class Interface: # We received a bookmark item from the server (JEP48) # Auto join GC windows if neccessary - self.roster.actions_menu_needs_rebuild = True + self.roster.set_actions_menu_needs_rebuild() invisible_show = gajim.SHOW_LIST.index('invisible') # do not autojoin if we are invisible if gajim.connections[account].connected == invisible_show: @@ -1793,7 +1806,7 @@ class Interface: '''SIGNED_IN event is emitted when we sign in, so handle it''' # block signed in notifications for 30 seconds gajim.block_signed_in_notifications[account] = True - self.roster.actions_menu_needs_rebuild = True + self.roster.set_actions_menu_needs_rebuild() if self.sleeper.getState() != common.sleepy.STATE_UNKNOWN and \ gajim.connections[account].connected in (2, 3): # we go online or free for chat, so we activate auto status @@ -2736,9 +2749,10 @@ class Interface: self.systray_enabled = False self.systray_capabilities = False - - if os.name == 'nt' and gtk.pygtk_version >= (2, 10, 0) and\ - gtk.gtk_version >= (2, 10, 0): + + if (((os.name == 'nt') or (sys.platform == 'darwin')) and + (gtk.pygtk_version >= (2, 10, 0)) and + (gtk.gtk_version >= (2, 10, 0))): import statusicon self.systray = statusicon.StatusIcon() self.systray_capabilities = True @@ -2792,7 +2806,7 @@ if __name__ == '__main__': print >> sys.stderr, "Encodings: d:%s, fs:%s, p:%s" % \ (sys.getdefaultencoding(), sys.getfilesystemencoding(), locale.getpreferredencoding()) - if os.name != 'nt': + if ((os.name != 'nt') and (sys.platform != 'darwin')): # Session Management support try: import gnome.ui @@ -2820,5 +2834,9 @@ if __name__ == '__main__': check_paths.check_and_possibly_create_paths() + if sys.platform == 'darwin': + import osx + osx.init() + Interface() gtk.main() diff --git a/src/groupchat_control.py b/src/groupchat_control.py index 65ad1fc00..6d0259006 100644 --- a/src/groupchat_control.py +++ b/src/groupchat_control.py @@ -1709,7 +1709,7 @@ class GroupchatControl(ChatControlBase): gajim.connections[self.account].bookmarks.append(bm) gajim.connections[self.account].store_bookmarks() - gajim.interface.roster.actions_menu_needs_rebuild = True + gajim.interface.roster.set_actions_menu_needs_rebuild() dialogs.InformationDialog( _('Bookmark has been added successfully'), diff --git a/src/network_manager_listener.py b/src/network_manager_listener.py index 15d07ad66..e6d42fee1 100644 --- a/src/network_manager_listener.py +++ b/src/network_manager_listener.py @@ -18,6 +18,7 @@ ## along with Gajim. If not, see <http://www.gnu.org/licenses/>. ## +import sys from common import gajim def device_now_active(self, *args): @@ -34,23 +35,26 @@ def device_no_longer_active(self, *args): supported = False -try: - from common.dbus_support import system_bus +if sys.platform == 'darwin': + supported = True +else: + try: + from common.dbus_support import system_bus - bus = system_bus.SystemBus() + bus = system_bus.SystemBus() - if 'org.freedesktop.NetworkManager' in bus.list_names(): - supported = True - bus.add_signal_receiver(device_no_longer_active, - 'DeviceNoLongerActive', - 'org.freedesktop.NetworkManager', - 'org.freedesktop.NetworkManager', - '/org/freedesktop/NetworkManager') + if 'org.freedesktop.NetworkManager' in bus.list_names(): + supported = True + bus.add_signal_receiver(device_no_longer_active, + 'DeviceNoLongerActive', + 'org.freedesktop.NetworkManager', + 'org.freedesktop.NetworkManager', + '/org/freedesktop/NetworkManager') - bus.add_signal_receiver(device_now_active, - 'DeviceNowActive', - 'org.freedesktop.NetworkManager', - 'org.freedesktop.NetworkManager', - '/org/freedesktop/NetworkManager') -except: - pass + bus.add_signal_receiver(device_now_active, + 'DeviceNowActive', + 'org.freedesktop.NetworkManager', + 'org.freedesktop.NetworkManager', + '/org/freedesktop/NetworkManager') + except: + pass diff --git a/src/notify.py b/src/notify.py index 8cdc25de1..aae559a9c 100644 --- a/src/notify.py +++ b/src/notify.py @@ -46,6 +46,14 @@ try: except ImportError: USER_HAS_PYNOTIFY = False +USER_HAS_GROWL = True +try: + import osx.growler + osx.growler.init() +except: + USER_HAS_GROWL = False + + def get_show_in_roster(event, account, contact): '''Return True if this event must be shown in roster, else False''' if event == 'gc_message_received': @@ -344,6 +352,11 @@ def popup(event_type, jid, account, msg_type = '', path_to_image = None, except gobject.GError, e: # Connection to notification-daemon failed, see #2893 gajim.log.debug(str(e)) + # try os/x growl + if USER_HAS_GROWL: + osx.growler.notify(event_type, jid, account, msg_type, path_to_image, + title, text) + return # go old style instance = dialogs.PopupNotificationWindow(event_type, jid, account, diff --git a/src/osx/.deps/idle_la-idle.Plo b/src/osx/.deps/idle_la-idle.Plo new file mode 100644 index 000000000..9ce06a81e --- /dev/null +++ b/src/osx/.deps/idle_la-idle.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/osx/.deps/nsapp.Plo b/src/osx/.deps/nsapp.Plo new file mode 100644 index 000000000..9ce06a81e --- /dev/null +++ b/src/osx/.deps/nsapp.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/osx/Makefile b/src/osx/Makefile new file mode 100644 index 000000000..d92ee6843 --- /dev/null +++ b/src/osx/Makefile @@ -0,0 +1,761 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# src/osx/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 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. + + + +srcdir = . +top_srcdir = ../.. + +pkgdatadir = $(datadir)/gajim +pkglibdir = $(libdir)/gajim +pkgincludedir = $(includedir)/gajim +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = /usr/bin/install -c +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 = i686-pc-linux-gnu +host_triplet = i686-pc-linux-gnu +subdir = src/osx +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ + $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(idlelibdir)" "$(DESTDIR)$(nsapplibdir)" +idlelibLTLIBRARIES_INSTALL = $(INSTALL) +nsapplibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(idlelib_LTLIBRARIES) $(nsapplib_LTLIBRARIES) +am__DEPENDENCIES_1 = +#idle_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am__idle_la_SOURCES_DIST = idle.c +#am_idle_la_OBJECTS = idle_la-idle.lo +idle_la_OBJECTS = $(am_idle_la_OBJECTS) +#am_idle_la_rpath = -rpath $(idlelibdir) +#nsapp_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am__nsapp_la_SOURCES_DIST = nsapp.m +#am_nsapp_la_OBJECTS = nsapp.lo +nsapp_la_OBJECTS = $(am_nsapp_la_OBJECTS) +#am_nsapp_la_rpath = -rpath $(nsapplibdir) +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +OBJCCOMPILE = $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) +LTOBJCCOMPILE = $(LIBTOOL) --mode=compile $(OBJC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_OBJCFLAGS) $(OBJCFLAGS) +OBJCLD = $(OBJC) +OBJCLINK = $(LIBTOOL) --mode=link $(OBJCLD) $(AM_OBJCFLAGS) \ + $(OBJCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(idle_la_SOURCES) $(nsapp_la_SOURCES) +DIST_SOURCES = $(am__idle_la_SOURCES_DIST) \ + $(am__nsapp_la_SOURCES_DIST) +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-exec-recursive install-info-recursive \ + install-recursive installcheck-recursive installdirs-recursive \ + pdf-recursive ps-recursive uninstall-info-recursive \ + uninstall-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/asterix/gajim/missing --run aclocal-1.9 +ACLOCAL_AMFLAGS = -I ../m4 +ALL_LINGUAS = +AMDEP_FALSE = # +AMDEP_TRUE = +AMTAR = ${SHELL} /home/asterix/gajim/missing --run tar +AR = ar +AUTOCONF = ${SHELL} /home/asterix/gajim/missing --run autoconf +AUTOHEADER = ${SHELL} /home/asterix/gajim/missing --run autoheader +AUTOMAKE = ${SHELL} /home/asterix/gajim/missing --run automake-1.9 +AWK = gawk +BUILD_CARBON_FALSE = +BUILD_CARBON_TRUE = # +BUILD_COCOA_FALSE = +BUILD_COCOA_TRUE = # +BUILD_GTKSPELL_FALSE = # +BUILD_GTKSPELL_TRUE = +BUILD_IDLE_FALSE = # +BUILD_IDLE_OSX_FALSE = +BUILD_IDLE_OSX_TRUE = # +BUILD_IDLE_TRUE = +BUILD_REMOTE_CONTROL_FALSE = # +BUILD_REMOTE_CONTROL_TRUE = +BUILD_TRAYICON_FALSE = # +BUILD_TRAYICON_TRUE = +CARBON_LIBS = +CATALOGS = +CATOBJEXT = .gmo +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +COCOA_LIBS = +CPP = gcc -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DATADIR = /usr/local/share +DATADIRNAME = share +DBUS_CFLAGS = -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include +DBUS_LIBS = -ldbus-1 +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DOCDIR = /usr/local/share/doc/gajim +ECHO = echo +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +F77 = +FFLAGS = +GETTEXT_PACKAGE = gajim +GMOFILES = +GMSGFMT = /usr/bin/msgfmt +GREP = /bin/grep +GTKSPELL_CFLAGS = -I/usr/include/gtkspell-2.0 -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 +GTKSPELL_LIBS = -lgtkspell -laspell -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lfontconfig -lXext -lXrender -lXinerama -lXi -lXrandr -lXcursor -lXcomposite -lXdamage -lpango-1.0 -lcairo -lX11 -lXfixes -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s +INSTOBJEXT = .mo +INTLLIBS = +INTLTOOL_CAVES_RULE = %.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_DESKTOP_RULE = %.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_DIRECTORY_RULE = %.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_EXTRACT = $(top_builddir)/intltool-extract +INTLTOOL_KBD_RULE = %.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_KEYS_RULE = %.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_MERGE = $(top_builddir)/intltool-merge +INTLTOOL_OAF_RULE = %.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< $@ +INTLTOOL_PERL = /usr/bin/perl +INTLTOOL_POLICY_RULE = %.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_PONG_RULE = %.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_PROP_RULE = %.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_SCHEMAS_RULE = %.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_SERVER_RULE = %.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_SERVICE_RULE = %.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_SHEET_RULE = %.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_SOUNDLIST_RULE = %.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_THEME_RULE = %.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_UI_RULE = %.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_UPDATE = $(top_builddir)/intltool-update +INTLTOOL_XAM_RULE = %.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_XML_NOMERGE_RULE = %.xml: %.xml.in $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< $@ +INTLTOOL_XML_RULE = %.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +LDFLAGS = +LIBDIR = /usr/local/lib +LIBOBJS = +LIBS = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LN_S = ln -s +LTLIBOBJS = +MAINT = # +MAINTAINER_MODE_FALSE = +MAINTAINER_MODE_TRUE = # +MAKEINFO = ${SHELL} /home/asterix/gajim/missing --run makeinfo +MKINSTALLDIRS = ./mkinstalldirs +MSGFMT = /usr/bin/msgfmt +MSGFMT_OPTS = -c +OBJEXT = o +PACKAGE = gajim +PACKAGE_BUGREPORT = http://trac.gajim.org/ +PACKAGE_NAME = Gajim - A Jabber Instant Messager +PACKAGE_STRING = Gajim - A Jabber Instant Messager 0.11.2.2-svn +PACKAGE_TARNAME = gajim +PACKAGE_VERSION = 0.11.2.2-svn +PATH_SEPARATOR = : +PKG_CONFIG = /usr/bin/pkg-config +POFILES = +POSUB = po +PO_IN_DATADIR_FALSE = +PO_IN_DATADIR_TRUE = +PYGTK_CFLAGS = -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/pygtk-2.0 +PYGTK_DEFS = /usr/share/pygtk/2.0/defs +PYGTK_LIBS = -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lfontconfig -lXext -lXrender -lXinerama -lXi -lXrandr -lXcursor -lXcomposite -lXdamage -lpango-1.0 -lcairo -lX11 -lXfixes -lgmodule-2.0 -ldl -lffi -lgobject-2.0 -lglib-2.0 +PYTHON = /usr/bin/python +PYTHON_EXEC_PREFIX = ${exec_prefix} +PYTHON_INCLUDES = -I/usr/include/python2.4 +PYTHON_PLATFORM = linux2 +PYTHON_PREFIX = ${prefix} +PYTHON_VERSION = 2.4 +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/sh +STRIP = strip +USE_NLS = yes +VERSION = 0.11.2.2-svn +XGETTEXT = /usr/bin/xgettext +XMKMF = +XSCRNSAVER_CFLAGS = +XSCRNSAVER_LIBS = -lXss +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_F77 = +am__fastdepCC_FALSE = # +am__fastdepCC_TRUE = +am__fastdepCXX_FALSE = # +am__fastdepCXX_TRUE = +am__fastdepOBJC_FALSE = +am__fastdepOBJC_TRUE = # +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = i686-pc-linux-gnu +build_alias = +build_cpu = i686 +build_os = linux-gnu +build_vendor = pc +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = i686-pc-linux-gnu +host_alias = +host_cpu = i686 +host_os = linux-gnu +host_vendor = pc +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = /home/asterix/gajim/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} +pkgpyexecdir = ${pyexecdir}/gajim +pkgpythondir = ${pythondir}/gajim +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +pyexecdir = ${exec_prefix}/lib/python2.4/site-packages +pythondir = ${prefix}/lib/python2.4/site-packages +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +sysconfdir = ${prefix}/etc +target_alias = +SUBDIRS = growl syncmenu +OBJC = gcc +INCLUDES = \ + $(PYTHON_INCLUDES) + +#idlelib_LTLIBRARIES = idle.la +#idlelibdir = $(libdir)/gajim +#idle_la_LIBADD = $(CARBON_LIBS) +#idle_la_SOURCES = idle.c +#idle_la_LDFLAGS = \ +# -module -avoid-version -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 + +#idle_la_CFLAGS = -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 $(PYTHON_INCLUDES) +#nsapplib_LTLIBRARIES = nsapp.la +#nsapplibdir = $(libdir)/gajim +#nsapp_la_LIBADD = $(COCOA_LIBS) +#nsapp_la_SOURCES = nsapp.m +#nsapp_la_LDFLAGS = \ +# -module -avoid-version -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 + +#nsapp_la_CFLAGS = -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 $(PYTHON_INCLUDES) +#AM_OBJCFLAGS = $(nsapp_la_CFLAGS) +DISTCLEANFILES = +EXTRA_DIST = +MAINTAINERCLEANFILES = Makefile.in +all: all-recursive + +.SUFFIXES: +.SUFFIXES: .c .lo .m .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 \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/osx/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/osx/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 +install-idlelibLTLIBRARIES: $(idlelib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(idlelibdir)" || $(mkdir_p) "$(DESTDIR)$(idlelibdir)" + @list='$(idlelib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=install $(idlelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(idlelibdir)/$$f'"; \ + $(LIBTOOL) --mode=install $(idlelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(idlelibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-idlelibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @set -x; list='$(idlelib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(idlelibdir)/$$p'"; \ + $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(idlelibdir)/$$p"; \ + done + +clean-idlelibLTLIBRARIES: + -test -z "$(idlelib_LTLIBRARIES)" || rm -f $(idlelib_LTLIBRARIES) + @list='$(idlelib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +install-nsapplibLTLIBRARIES: $(nsapplib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(nsapplibdir)" || $(mkdir_p) "$(DESTDIR)$(nsapplibdir)" + @list='$(nsapplib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=install $(nsapplibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(nsapplibdir)/$$f'"; \ + $(LIBTOOL) --mode=install $(nsapplibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(nsapplibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-nsapplibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @set -x; list='$(nsapplib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(nsapplibdir)/$$p'"; \ + $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(nsapplibdir)/$$p"; \ + done + +clean-nsapplibLTLIBRARIES: + -test -z "$(nsapplib_LTLIBRARIES)" || rm -f $(nsapplib_LTLIBRARIES) + @list='$(nsapplib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +idle.la: $(idle_la_OBJECTS) $(idle_la_DEPENDENCIES) + $(LINK) $(am_idle_la_rpath) $(idle_la_LDFLAGS) $(idle_la_OBJECTS) $(idle_la_LIBADD) $(LIBS) +nsapp.la: $(nsapp_la_OBJECTS) $(nsapp_la_DEPENDENCIES) + $(OBJCLINK) $(am_nsapp_la_rpath) $(nsapp_la_LDFLAGS) $(nsapp_la_OBJECTS) $(nsapp_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/idle_la-idle.Plo +include ./$(DEPDIR)/nsapp.Plo + +.c.o: + if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ + then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ + then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: + if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ + then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LTCOMPILE) -c -o $@ $< + +idle_la-idle.lo: idle.c + if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(idle_la_CFLAGS) $(CFLAGS) -MT idle_la-idle.lo -MD -MP -MF "$(DEPDIR)/idle_la-idle.Tpo" -c -o idle_la-idle.lo `test -f 'idle.c' || echo '$(srcdir)/'`idle.c; \ + then mv -f "$(DEPDIR)/idle_la-idle.Tpo" "$(DEPDIR)/idle_la-idle.Plo"; else rm -f "$(DEPDIR)/idle_la-idle.Tpo"; exit 1; fi +# source='idle.c' object='idle_la-idle.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(idle_la_CFLAGS) $(CFLAGS) -c -o idle_la-idle.lo `test -f 'idle.c' || echo '$(srcdir)/'`idle.c + +.m.o: +# if $(OBJCCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +# then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi + source='$<' object='$@' libtool=no \ + DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) \ + $(OBJCCOMPILE) -c -o $@ $< + +.m.obj: +# if $(OBJCCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +# then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi + source='$<' object='$@' libtool=no \ + DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) \ + $(OBJCCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.m.lo: +# if $(LTOBJCCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +# then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi + source='$<' object='$@' libtool=yes \ + DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) \ + $(LTOBJCCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +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)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(mkdir_p) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(LTLIBRARIES) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(idlelibdir)" "$(DESTDIR)$(nsapplibdir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-idlelibLTLIBRARIES clean-libtool \ + clean-nsapplibLTLIBRARIES mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: install-idlelibLTLIBRARIES \ + install-nsapplibLTLIBRARIES + +install-exec-am: + +install-info: install-info-recursive + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-idlelibLTLIBRARIES uninstall-info-am \ + uninstall-nsapplibLTLIBRARIES + +uninstall-info: uninstall-info-recursive + +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ + clean clean-generic clean-idlelibLTLIBRARIES clean-libtool \ + clean-nsapplibLTLIBRARIES clean-recursive ctags \ + ctags-recursive distclean distclean-compile distclean-generic \ + distclean-libtool distclean-recursive distclean-tags distdir \ + dvi dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-exec install-exec-am \ + install-idlelibLTLIBRARIES install-info install-info-am \ + install-man install-nsapplibLTLIBRARIES install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic \ + maintainer-clean-recursive mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \ + pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-idlelibLTLIBRARIES uninstall-info-am \ + uninstall-nsapplibLTLIBRARIES + + +export MACOSX_DEPLOYMENT_TARGET=10.4 +# 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: diff --git a/src/osx/Makefile.am b/src/osx/Makefile.am new file mode 100644 index 000000000..1ccc8309a --- /dev/null +++ b/src/osx/Makefile.am @@ -0,0 +1,45 @@ +SUBDIRS = growl syncmenu + +ACLOCAL_AMFLAGS = -I ../m4 + +OBJC = gcc + +export MACOSX_DEPLOYMENT_TARGET=10.4 +INCLUDES = \ + $(PYTHON_INCLUDES) + +if BUILD_IDLE_OSX +idlelib_LTLIBRARIES = idle.la +idlelibdir = $(libdir)/gajim + +idle_la_LIBADD = $(CARBON_LIBS) + +idle_la_SOURCES = idle.c + +idle_la_LDFLAGS = \ + -module -avoid-version -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 + +idle_la_CFLAGS = -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 $(PYTHON_INCLUDES) +endif + +if BUILD_COCOA +nsapplib_LTLIBRARIES = nsapp.la +nsapplibdir = $(libdir)/gajim + +nsapp_la_LIBADD = $(COCOA_LIBS) + +nsapp_la_SOURCES = nsapp.m + +nsapp_la_LDFLAGS = \ + -module -avoid-version -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 + +nsapp_la_CFLAGS = -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 $(PYTHON_INCLUDES) + +AM_OBJCFLAGS = $(nsapp_la_CFLAGS) +endif + +DISTCLEANFILES = + +EXTRA_DIST = + +MAINTAINERCLEANFILES = Makefile.in diff --git a/src/osx/Makefile.in b/src/osx/Makefile.in new file mode 100644 index 000000000..93d4919d6 --- /dev/null +++ b/src/osx/Makefile.in @@ -0,0 +1,761 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 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. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +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 = @build@ +host_triplet = @host@ +subdir = src/osx +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ + $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(idlelibdir)" "$(DESTDIR)$(nsapplibdir)" +idlelibLTLIBRARIES_INSTALL = $(INSTALL) +nsapplibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(idlelib_LTLIBRARIES) $(nsapplib_LTLIBRARIES) +am__DEPENDENCIES_1 = +@BUILD_IDLE_OSX_TRUE@idle_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am__idle_la_SOURCES_DIST = idle.c +@BUILD_IDLE_OSX_TRUE@am_idle_la_OBJECTS = idle_la-idle.lo +idle_la_OBJECTS = $(am_idle_la_OBJECTS) +@BUILD_IDLE_OSX_TRUE@am_idle_la_rpath = -rpath $(idlelibdir) +@BUILD_COCOA_TRUE@nsapp_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am__nsapp_la_SOURCES_DIST = nsapp.m +@BUILD_COCOA_TRUE@am_nsapp_la_OBJECTS = nsapp.lo +nsapp_la_OBJECTS = $(am_nsapp_la_OBJECTS) +@BUILD_COCOA_TRUE@am_nsapp_la_rpath = -rpath $(nsapplibdir) +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +OBJCCOMPILE = $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) +LTOBJCCOMPILE = $(LIBTOOL) --mode=compile $(OBJC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_OBJCFLAGS) $(OBJCFLAGS) +OBJCLD = $(OBJC) +OBJCLINK = $(LIBTOOL) --mode=link $(OBJCLD) $(AM_OBJCFLAGS) \ + $(OBJCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(idle_la_SOURCES) $(nsapp_la_SOURCES) +DIST_SOURCES = $(am__idle_la_SOURCES_DIST) \ + $(am__nsapp_la_SOURCES_DIST) +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-exec-recursive install-info-recursive \ + install-recursive installcheck-recursive installdirs-recursive \ + pdf-recursive ps-recursive uninstall-info-recursive \ + uninstall-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = -I ../m4 +ALL_LINGUAS = @ALL_LINGUAS@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUILD_CARBON_FALSE = @BUILD_CARBON_FALSE@ +BUILD_CARBON_TRUE = @BUILD_CARBON_TRUE@ +BUILD_COCOA_FALSE = @BUILD_COCOA_FALSE@ +BUILD_COCOA_TRUE = @BUILD_COCOA_TRUE@ +BUILD_GTKSPELL_FALSE = @BUILD_GTKSPELL_FALSE@ +BUILD_GTKSPELL_TRUE = @BUILD_GTKSPELL_TRUE@ +BUILD_IDLE_FALSE = @BUILD_IDLE_FALSE@ +BUILD_IDLE_OSX_FALSE = @BUILD_IDLE_OSX_FALSE@ +BUILD_IDLE_OSX_TRUE = @BUILD_IDLE_OSX_TRUE@ +BUILD_IDLE_TRUE = @BUILD_IDLE_TRUE@ +BUILD_REMOTE_CONTROL_FALSE = @BUILD_REMOTE_CONTROL_FALSE@ +BUILD_REMOTE_CONTROL_TRUE = @BUILD_REMOTE_CONTROL_TRUE@ +BUILD_TRAYICON_FALSE = @BUILD_TRAYICON_FALSE@ +BUILD_TRAYICON_TRUE = @BUILD_TRAYICON_TRUE@ +CARBON_LIBS = @CARBON_LIBS@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +COCOA_LIBS = @COCOA_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIR = @DATADIR@ +DATADIRNAME = @DATADIRNAME@ +DBUS_CFLAGS = @DBUS_CFLAGS@ +DBUS_LIBS = @DBUS_LIBS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCDIR = @DOCDIR@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@ +GTKSPELL_LIBS = @GTKSPELL_LIBS@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_CAVES_RULE = @INTLTOOL_CAVES_RULE@ +INTLTOOL_DESKTOP_RULE = @INTLTOOL_DESKTOP_RULE@ +INTLTOOL_DIRECTORY_RULE = @INTLTOOL_DIRECTORY_RULE@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@ +INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_POLICY_RULE = @INTLTOOL_POLICY_RULE@ +INTLTOOL_PONG_RULE = @INTLTOOL_PONG_RULE@ +INTLTOOL_PROP_RULE = @INTLTOOL_PROP_RULE@ +INTLTOOL_SCHEMAS_RULE = @INTLTOOL_SCHEMAS_RULE@ +INTLTOOL_SERVER_RULE = @INTLTOOL_SERVER_RULE@ +INTLTOOL_SERVICE_RULE = @INTLTOOL_SERVICE_RULE@ +INTLTOOL_SHEET_RULE = @INTLTOOL_SHEET_RULE@ +INTLTOOL_SOUNDLIST_RULE = @INTLTOOL_SOUNDLIST_RULE@ +INTLTOOL_THEME_RULE = @INTLTOOL_THEME_RULE@ +INTLTOOL_UI_RULE = @INTLTOOL_UI_RULE@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_XAM_RULE = @INTLTOOL_XAM_RULE@ +INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@ +INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@ +LDFLAGS = @LDFLAGS@ +LIBDIR = @LIBDIR@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_DEFS = @PYGTK_DEFS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XMKMF = @XMKMF@ +XSCRNSAVER_CFLAGS = @XSCRNSAVER_CFLAGS@ +XSCRNSAVER_LIBS = @XSCRNSAVER_LIBS@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__fastdepOBJC_FALSE = @am__fastdepOBJC_FALSE@ +am__fastdepOBJC_TRUE = @am__fastdepOBJC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +SUBDIRS = growl syncmenu +OBJC = gcc +INCLUDES = \ + $(PYTHON_INCLUDES) + +@BUILD_IDLE_OSX_TRUE@idlelib_LTLIBRARIES = idle.la +@BUILD_IDLE_OSX_TRUE@idlelibdir = $(libdir)/gajim +@BUILD_IDLE_OSX_TRUE@idle_la_LIBADD = $(CARBON_LIBS) +@BUILD_IDLE_OSX_TRUE@idle_la_SOURCES = idle.c +@BUILD_IDLE_OSX_TRUE@idle_la_LDFLAGS = \ +@BUILD_IDLE_OSX_TRUE@ -module -avoid-version -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 + +@BUILD_IDLE_OSX_TRUE@idle_la_CFLAGS = -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 $(PYTHON_INCLUDES) +@BUILD_COCOA_TRUE@nsapplib_LTLIBRARIES = nsapp.la +@BUILD_COCOA_TRUE@nsapplibdir = $(libdir)/gajim +@BUILD_COCOA_TRUE@nsapp_la_LIBADD = $(COCOA_LIBS) +@BUILD_COCOA_TRUE@nsapp_la_SOURCES = nsapp.m +@BUILD_COCOA_TRUE@nsapp_la_LDFLAGS = \ +@BUILD_COCOA_TRUE@ -module -avoid-version -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 + +@BUILD_COCOA_TRUE@nsapp_la_CFLAGS = -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 $(PYTHON_INCLUDES) +@BUILD_COCOA_TRUE@AM_OBJCFLAGS = $(nsapp_la_CFLAGS) +DISTCLEANFILES = +EXTRA_DIST = +MAINTAINERCLEANFILES = Makefile.in +all: all-recursive + +.SUFFIXES: +.SUFFIXES: .c .lo .m .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/osx/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/osx/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-idlelibLTLIBRARIES: $(idlelib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(idlelibdir)" || $(mkdir_p) "$(DESTDIR)$(idlelibdir)" + @list='$(idlelib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=install $(idlelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(idlelibdir)/$$f'"; \ + $(LIBTOOL) --mode=install $(idlelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(idlelibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-idlelibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @set -x; list='$(idlelib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(idlelibdir)/$$p'"; \ + $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(idlelibdir)/$$p"; \ + done + +clean-idlelibLTLIBRARIES: + -test -z "$(idlelib_LTLIBRARIES)" || rm -f $(idlelib_LTLIBRARIES) + @list='$(idlelib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +install-nsapplibLTLIBRARIES: $(nsapplib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(nsapplibdir)" || $(mkdir_p) "$(DESTDIR)$(nsapplibdir)" + @list='$(nsapplib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=install $(nsapplibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(nsapplibdir)/$$f'"; \ + $(LIBTOOL) --mode=install $(nsapplibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(nsapplibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-nsapplibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @set -x; list='$(nsapplib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(nsapplibdir)/$$p'"; \ + $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(nsapplibdir)/$$p"; \ + done + +clean-nsapplibLTLIBRARIES: + -test -z "$(nsapplib_LTLIBRARIES)" || rm -f $(nsapplib_LTLIBRARIES) + @list='$(nsapplib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +idle.la: $(idle_la_OBJECTS) $(idle_la_DEPENDENCIES) + $(LINK) $(am_idle_la_rpath) $(idle_la_LDFLAGS) $(idle_la_OBJECTS) $(idle_la_LIBADD) $(LIBS) +nsapp.la: $(nsapp_la_OBJECTS) $(nsapp_la_DEPENDENCIES) + $(OBJCLINK) $(am_nsapp_la_rpath) $(nsapp_la_LDFLAGS) $(nsapp_la_OBJECTS) $(nsapp_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/idle_la-idle.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nsapp.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +idle_la-idle.lo: idle.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(idle_la_CFLAGS) $(CFLAGS) -MT idle_la-idle.lo -MD -MP -MF "$(DEPDIR)/idle_la-idle.Tpo" -c -o idle_la-idle.lo `test -f 'idle.c' || echo '$(srcdir)/'`idle.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/idle_la-idle.Tpo" "$(DEPDIR)/idle_la-idle.Plo"; else rm -f "$(DEPDIR)/idle_la-idle.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='idle.c' object='idle_la-idle.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(idle_la_CFLAGS) $(CFLAGS) -c -o idle_la-idle.lo `test -f 'idle.c' || echo '$(srcdir)/'`idle.c + +.m.o: +@am__fastdepOBJC_TRUE@ if $(OBJCCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepOBJC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepOBJC_FALSE@ $(OBJCCOMPILE) -c -o $@ $< + +.m.obj: +@am__fastdepOBJC_TRUE@ if $(OBJCCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepOBJC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepOBJC_FALSE@ $(OBJCCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.m.lo: +@am__fastdepOBJC_TRUE@ if $(LTOBJCCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepOBJC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepOBJC_FALSE@ $(LTOBJCCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +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)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(mkdir_p) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(LTLIBRARIES) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(idlelibdir)" "$(DESTDIR)$(nsapplibdir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-idlelibLTLIBRARIES clean-libtool \ + clean-nsapplibLTLIBRARIES mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: install-idlelibLTLIBRARIES \ + install-nsapplibLTLIBRARIES + +install-exec-am: + +install-info: install-info-recursive + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-idlelibLTLIBRARIES uninstall-info-am \ + uninstall-nsapplibLTLIBRARIES + +uninstall-info: uninstall-info-recursive + +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ + clean clean-generic clean-idlelibLTLIBRARIES clean-libtool \ + clean-nsapplibLTLIBRARIES clean-recursive ctags \ + ctags-recursive distclean distclean-compile distclean-generic \ + distclean-libtool distclean-recursive distclean-tags distdir \ + dvi dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-exec install-exec-am \ + install-idlelibLTLIBRARIES install-info install-info-am \ + install-man install-nsapplibLTLIBRARIES install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic \ + maintainer-clean-recursive mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \ + pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-idlelibLTLIBRARIES uninstall-info-am \ + uninstall-nsapplibLTLIBRARIES + + +export MACOSX_DEPLOYMENT_TARGET=10.4 +# 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: diff --git a/src/osx/__init__.py b/src/osx/__init__.py new file mode 100644 index 000000000..ee21386cb --- /dev/null +++ b/src/osx/__init__.py @@ -0,0 +1,45 @@ +import sys, commands +from network_manager_listener import device_now_active, device_no_longer_active +import nsapp + + +if sys.platform != "darwin": + raise ImportError("System platform is not OS/X") + + +net_device_active = True + + +### +### Utility functions +### + +def checkPID(pid, procname): + out = commands.getstatusoutput("ps -wwp %d" % pid) + arr = out[1].split("\n") + if ((len(arr) == 2) and (arr[1].find(procname) >= 0)): + return True + return False + + +def init(): + nsapp.init() + nsapp.setNetworkCB(netDeviceChanged) + return + + +def shutdown(): + import dbus + dbus.shutdown() + return + + +def netDeviceChanged(): + global net_device_active + if net_device_active: + net_device_active = False + device_no_longer_active(None) + else: + net_device_active = True + device_now_active(None) + return diff --git a/src/osx/__init__.pyo b/src/osx/__init__.pyo new file mode 100644 index 0000000000000000000000000000000000000000..af16f9e9ac981327f99fc035ac2bb3416b31fa57 GIT binary patch literal 1367 zcmaJ=OK;Oa5T1=4Cr+D^K6q3dh>#Gz6#oDYAX-2@5Rk(G<zg9o+iYTcE$^mjrSwAi z#ay{CGfqh)Bpl6TclI&g_swkatKa+m>Gj7H)?W+%-=dinx(r|rFlhz?CIT`6^A_X| zOdQBvn7ANlQyV62kO0bqtOYX%^Z<nHK<2=mfFA-%f%7gTK4dQZ#5;SCwRx}una6`& z$T~deQ{HjVMF69K@R)tVBCk{`<5Dl<B(>^Fn#bGGIM?N+tk-MSqqU@7s?t2g;rPZ_ zSq!T@u@|~7hRO^}ZHJ%7;kT4BxM&XADVmAVS>(cOQHDoI;nsnbL)?y)yJmIU0!*`N z5yQ-dSqt=Y5IE;u9asroX~V1yx(mYkFeVvn56Ka}k?EnY%<yEntcEW#Oo-XZ^%Q|p zXb|k6v!q3;iy|pAV;|t;Qd(mZyD)lTtA(`$zET<gW5~8~ZmL{0D@k4RN-j%FR4-JS z@tswz(=sU}N59q!$p=3qxsd^FjOgCTCr5}QiUnwmvoCQJPIV!}1of@eb$FS~R1umw z4Yj!r<5-o-#__A_rlByE>HN$28P$`?gE++BiRg-yZl#Zya~Y^^O&RV0RYN^caPB8+ zxp6>3jTj|^E=^KZ%!6{;U0gNNj-*}cdVc!O4lqzkd&X^aI!&-!vJDj;MRX`4d5`Hd zF$U2S{RSN6BV%yfd;B_X0kB7~c7$>Z81Y~@+4qHE_GY@UnO>HRJUYPjP5vhJA;zAe ztyBA$JjE%0e{~6QifZU16h%OS6Kpx4UK8a$#$1lI?_*n#h>#`iQHOZ_o|?B5ahLt? zLAiKrq)Qo5&+;YzJje~3Ej20K3pBHb4)qfq;fcMLhtvWJabKDn6Opv`2|5HvC5y4y z6ME6P!rm%n9TB|fAvr$S#nJtPwuJw@sB~@L*R`%0WpqS)`{bym5vdyyo`4&gr<AqX pLaCd5w57?z87bL@8W#$62Y5ryP#F)fhka)t29DS9yT0dpe*oQ|>%IU0 literal 0 HcmV?d00001 diff --git a/src/osx/dbus.py b/src/osx/dbus.py new file mode 100644 index 000000000..41f1e83c5 --- /dev/null +++ b/src/osx/dbus.py @@ -0,0 +1,131 @@ +### +### Internal dbus management. This can go away once native gtk+ is in fink or +### macports and we can require their dbus. +### + + + +import os, sys, commands, signal + +if sys.platform != "darwin": + raise ImportError("System platform is not OS/X") + +import osx, osx.nsapp +from common.configpaths import gajimpaths + + +_GTK_BASE = "/Library/Frameworks/GTK+.framework/Versions/Current" + + +def readEnv(): + gajimpaths.add_from_root(u'dbus.env', u'dbus.env') + try: + dbus_env = file(gajimpaths[u'dbus.env'], "r") + except: + return False + try: + line1 = dbus_env.readline() + line2 = dbus_env.readline() + dbus_env.close() + except: + print "Invalid dbus.env file" + return False + return parseEnv(line1, line2) + + +def parseEnv(line1, line2): + try: + if not line1 or not line2: + return False + if (not line1.startswith("DBUS_SESSION_BUS_ADDRESS=") or + not line2.startswith("DBUS_SESSION_BUS_PID=")): + return False + arr = line2.split("=") + pid = arr[1].strip().strip('"') + if not osx.checkPID(int(pid), "dbus-daemon"): + return False + line1 = line1.strip() + loc = line1.find("=") + address = line1[loc + 1:] + address = address.strip().strip('"') + return [address, pid] + except Exception, e: + print "Invalid dbus.env file", e + return False + return None + + +def setEnv(env): + os.environ['DBUS_SESSION_BUS_ADDRESS'] = env[0] + os.environ['DBUS_SESSION_BUS_PID'] = env[1] + return + + +def writeEnv(env): + gajimpaths.add_from_root(u'dbus.env', u'dbus.env') + try: + dbus_env = file(gajimpaths[u'dbus.env'], "w+") + dbus_env.write("DBUS_SESSION_BUS_ADDRESS=\"" + env[0] + "\"\n") + dbus_env.write("DBUS_SESSION_BUS_PID=\"" + env[1] + "\"\n") + dbus_env.close() + except Exception, e: + print "Failed to write file: %s" % gajimpaths[u'dbus.env'] + print str(e) + return + + +def checkUUID(): + if os.path.exists(_GTK_BASE + "/var/lib/dbus/machine-id"): + return + ret = commands.getstatusoutput(_GTK_BASE + "/bin/dbus-uuidgen --ensure") + if ret[0] != 0: + print "Failed to initialize dbus machine UUID:", ret[1] + return + + +def load(start): + # Look for existing external session and just use it if it exists + if (('DBUS_SESSION_BUS_ADDRESS' in os.environ) and + ('DBUS_SESSION_BUS_PID' in os.environ) and + osx.checkPID(int(os.environ['DBUS_SESSION_BUS_PID']), 'dbus-daemon')): + return True + + # Look for our own internal session + env = readEnv() + if env: + # We have a valid existing dbus session, yay + setEnv(env) + return True + + # Initialize the machine's UUID if not done yet + checkUUID() + + if start: + # None found, start a new session + print "Starting new dbus session" + #cmd = os.path.join(osx.nsapp.getBundlePath(), + # "Contents/Resources/bin/dbus-launch --exit-with-session") + cmd = _GTK_BASE + "/bin/dbus-launch --exit-with-session" + ret = commands.getstatusoutput(cmd) + arr = ret[1].split("\n") + if len(arr) != 2: + print "Failed to start internal dbus session:" + print ret[1] + return + env = parseEnv(arr[0].strip(), arr[1].strip()) + if not env: + print "Failed to start internal dbus session:" + print ret[1] + return + setEnv(env) + writeEnv(env) + return True + return False + + +def shutdown(): + env = readEnv() + if not env: + return + os.kill(int(env[1]), signal.SIGINT) + return diff --git a/src/osx/growl/.deps/_growlImage.Plo b/src/osx/growl/.deps/_growlImage.Plo new file mode 100644 index 000000000..9ce06a81e --- /dev/null +++ b/src/osx/growl/.deps/_growlImage.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/osx/growl/.deps/_growl_la-_growl.Plo b/src/osx/growl/.deps/_growl_la-_growl.Plo new file mode 100644 index 000000000..9ce06a81e --- /dev/null +++ b/src/osx/growl/.deps/_growl_la-_growl.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/osx/growl/Growl.py b/src/osx/growl/Growl.py new file mode 100644 index 000000000..15e037673 --- /dev/null +++ b/src/osx/growl/Growl.py @@ -0,0 +1,247 @@ +""" +A Python module that enables posting notifications to the Growl daemon. +See <http://growl.info/> for more information. +""" +__version__ = "0.7" +__author__ = "Mark Rowe <bdash@users.sourceforge.net>" +__copyright__ = "(C) 2003 Mark Rowe <bdash@users.sourceforge.net>. Released under the BSD license." +__contributors__ = ["Ingmar J Stein (Growl Team)", + "Rui Carmo (http://the.taoofmac.com)", + "Jeremy Rossi <jeremy@jeremyrossi.com>" + ] + +try: + import _growl +except: + _growl = False +import types +import struct +import md5 +import socket + +GROWL_UDP_PORT=9887 +GROWL_PROTOCOL_VERSION=1 +GROWL_TYPE_REGISTRATION=0 +GROWL_TYPE_NOTIFICATION=1 + +GROWL_APP_NAME="ApplicationName" +GROWL_APP_ICON="ApplicationIcon" +GROWL_NOTIFICATIONS_DEFAULT="DefaultNotifications" +GROWL_NOTIFICATIONS_ALL="AllNotifications" +GROWL_NOTIFICATIONS_USER_SET="AllowedUserNotifications" + +GROWL_NOTIFICATION_NAME="NotificationName" +GROWL_NOTIFICATION_TITLE="NotificationTitle" +GROWL_NOTIFICATION_DESCRIPTION="NotificationDescription" +GROWL_NOTIFICATION_ICON="NotificationIcon" +GROWL_NOTIFICATION_APP_ICON="NotificationAppIcon" +GROWL_NOTIFICATION_PRIORITY="NotificationPriority" + +GROWL_NOTIFICATION_STICKY="NotificationSticky" +GROWL_NOTIFICATION_CLICK_CONTEXT="NotificationClickContext" + +GROWL_APP_REGISTRATION="GrowlApplicationRegistrationNotification" +GROWL_APP_REGISTRATION_CONF="GrowlApplicationRegistrationConfirmationNotification" +GROWL_NOTIFICATION="GrowlNotification" +GROWL_SHUTDOWN="GrowlShutdown" +GROWL_PING="Honey, Mind Taking Out The Trash" +GROWL_PONG="What Do You Want From Me, Woman" +GROWL_IS_READY="Lend Me Some Sugar; I Am Your Neighbor!" + +GROWL_NOTIFICATION_CLICKED="GrowlClicked!" +GROWL_NOTIFICATION_TIMED_OUT="GrowlTimedOut!" +GROWL_KEY_CLICKED_CONTEXT="ClickedContext" + + +growlPriority = {"Very Low":-2,"Moderate":-1,"Normal":0,"High":1,"Emergency":2} + +class netgrowl: + """Builds a Growl Network Registration packet. + Defaults to emulating the command-line growlnotify utility.""" + + __notAllowed__ = [GROWL_APP_ICON, GROWL_NOTIFICATION_ICON, GROWL_NOTIFICATION_APP_ICON] + + def __init__(self, hostname, password ): + self.hostname = hostname + self.password = password + self.socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) + + def send(self, data): + self.socket.sendto(data, (self.hostname, GROWL_UDP_PORT)) + + def PostNotification(self, userInfo): + if userInfo.has_key(GROWL_NOTIFICATION_PRIORITY): + priority = userInfo[GROWL_NOTIFICATION_PRIORITY] + else: + priority = 0 + if userInfo.has_key(GROWL_NOTIFICATION_STICKY): + sticky = userInfo[GROWL_NOTIFICATION_STICKY] + else: + priority = False + data = self.encodeNotify(userInfo[GROWL_APP_NAME], + userInfo[GROWL_NOTIFICATION_NAME], + userInfo[GROWL_NOTIFICATION_TITLE], + userInfo[GROWL_NOTIFICATION_DESCRIPTION], + priority, + sticky) + return self.send(data) + + def PostRegistration(self, userInfo): + data = self.encodeRegistration(userInfo[GROWL_APP_NAME], + userInfo[GROWL_NOTIFICATIONS_ALL], + userInfo[GROWL_NOTIFICATIONS_DEFAULT]) + return self.send(data) + + def encodeRegistration(self, application, notifications, defaultNotifications): + data = struct.pack("!BBH", + GROWL_PROTOCOL_VERSION, + GROWL_TYPE_REGISTRATION, + len(application) ) + data += struct.pack("BB", + len(notifications), + len(defaultNotifications) ) + data += application + for i in notifications: + encoded = i.encode("utf-8") + data += struct.pack("!H", len(encoded)) + data += encoded + for i in defaultNotifications: + data += struct.pack("B", i) + return self.encodePassword(data) + + def encodeNotify(self, application, notification, title, description, + priority = 0, sticky = False): + + application = application.encode("utf-8") + notification = notification.encode("utf-8") + title = title.encode("utf-8") + description = description.encode("utf-8") + flags = (priority & 0x07) * 2 + if priority < 0: + flags |= 0x08 + if sticky: + flags = flags | 0x0001 + data = struct.pack("!BBHHHHH", + GROWL_PROTOCOL_VERSION, + GROWL_TYPE_NOTIFICATION, + flags, + len(notification), + len(title), + len(description), + len(application) ) + data += notification + data += title + data += description + data += application + return self.encodePassword(data) + + def encodePassword(self, data): + checksum = md5.new() + checksum.update(data) + if self.password: + checksum.update(self.password) + data += checksum.digest() + return data + +class _ImageHook(type): + def __getattribute__(self, attr): + global Image + if Image is self: + from _growlImage import Image + + return getattr(Image, attr) + +class Image(object): + __metaclass__ = _ImageHook + +class _RawImage(object): + def __init__(self, data): self.rawImageData = data + +class GrowlNotifier(object): + """ + A class that abstracts the process of registering and posting + notifications to the Growl daemon. + + You can either pass `applicationName', `notifications', + `defaultNotifications' and `applicationIcon' to the constructor + or you may define them as class-level variables in a sub-class. + + `defaultNotifications' is optional, and defaults to the value of + `notifications'. `applicationIcon' is also optional but defaults + to a pointless icon so is better to be specified. + """ + + applicationName = 'GrowlNotifier' + notifications = [] + defaultNotifications = [] + applicationIcon = None + _notifyMethod = _growl + _notify_cb = None + + def __init__(self, applicationName=None, notifications=None, defaultNotifications=None, applicationIcon=None, hostname=None, password=None, notify_cb=None): + assert(applicationName is not None, 'an application name is required') + self.applicationName = applicationName + + assert(notifications, 'a sequence of one or more notification names is required') + self.notifications = list(notifications) + if defaultNotifications is not None: + self.defaultNotifications = list(defaultNotifications) + else: + self.defaultNotifications = list(self.notifications) + + if applicationIcon is not None: + self.applicationIcon = self._checkIcon(applicationIcon) + + if hostname is not None and password is not None: + self._notifyMethod = netgrowl(hostname, password) + elif hostname is not None or password is not None: + raise KeyError, "Hostname and Password are both required for a network notification" + + if notify_cb is not None: + self._notify_cb = notify_cb + else: + self._notify_cb = self.notifyCB + + if hostname is None and password is None: + self._notifyMethod.Init(applicationName, self._notify_cb) + + def _checkIcon(self, data): + if isinstance(data, str): + return _RawImage(data) + else: + return data + + def register(self): + if self.applicationIcon is not None: + self.applicationIcon = self._checkIcon(self.applicationIcon) + + regInfo = {GROWL_APP_NAME: self.applicationName, + GROWL_NOTIFICATIONS_ALL: self.notifications, + GROWL_NOTIFICATIONS_DEFAULT: self.defaultNotifications, + GROWL_APP_ICON:self.applicationIcon, + } + self._notifyMethod.PostRegistration(regInfo) + + def notify(self, noteType, title, description, icon=None, sticky=False, priority=None, context=None): + assert noteType in self.notifications + notifyInfo = {GROWL_NOTIFICATION_NAME: noteType, + GROWL_APP_NAME: self.applicationName, + GROWL_NOTIFICATION_TITLE: title, + GROWL_NOTIFICATION_DESCRIPTION: description, + } + if sticky: + notifyInfo[GROWL_NOTIFICATION_STICKY] = 1 + + if priority is not None: + notifyInfo[GROWL_NOTIFICATION_PRIORITY] = priority + + if icon: + notifyInfo[GROWL_NOTIFICATION_ICON] = self._checkIcon(icon) + + if context: + notifyInfo[GROWL_NOTIFICATION_CLICK_CONTEXT] = context + + self._notifyMethod.PostNotification(notifyInfo) + + def notifyCB(self, userdata): + print "Got notify in pyland", userdata diff --git a/src/osx/growl/Makefile b/src/osx/growl/Makefile new file mode 100644 index 000000000..66866c8b4 --- /dev/null +++ b/src/osx/growl/Makefile @@ -0,0 +1,651 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# src/osx/growl/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 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. + + + +srcdir = . +top_srcdir = ../../.. + +pkgdatadir = $(datadir)/gajim +pkglibdir = $(libdir)/gajim +pkgincludedir = $(includedir)/gajim +top_builddir = ../../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = /usr/bin/install -c +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 = i686-pc-linux-gnu +host_triplet = i686-pc-linux-gnu +subdir = src/osx/growl +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ + $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(_growlImagelibdir)" \ + "$(DESTDIR)$(_growllibdir)" +_growlImagelibLTLIBRARIES_INSTALL = $(INSTALL) +_growllibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(_growlImagelib_LTLIBRARIES) $(_growllib_LTLIBRARIES) +am__DEPENDENCIES_1 = +#_growl_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am___growl_la_SOURCES_DIST = _growl.c +#am__growl_la_OBJECTS = _growl_la-_growl.lo +_growl_la_OBJECTS = $(am__growl_la_OBJECTS) +#am__growl_la_rpath = -rpath $(_growllibdir) +#_growlImage_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am___growlImage_la_SOURCES_DIST = _growlImage.m +#am__growlImage_la_OBJECTS = _growlImage.lo +_growlImage_la_OBJECTS = $(am__growlImage_la_OBJECTS) +#am__growlImage_la_rpath = -rpath \ +# $(_growlImagelibdir) +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +OBJCCOMPILE = $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) +LTOBJCCOMPILE = $(LIBTOOL) --mode=compile $(OBJC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_OBJCFLAGS) $(OBJCFLAGS) +OBJCLD = $(OBJC) +OBJCLINK = $(LIBTOOL) --mode=link $(OBJCLD) $(AM_OBJCFLAGS) \ + $(OBJCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(_growl_la_SOURCES) $(_growlImage_la_SOURCES) +DIST_SOURCES = $(am___growl_la_SOURCES_DIST) \ + $(am___growlImage_la_SOURCES_DIST) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/asterix/gajim/missing --run aclocal-1.9 +ACLOCAL_AMFLAGS = ${ACLOCAL_FLAGS} +ALL_LINGUAS = +AMDEP_FALSE = # +AMDEP_TRUE = +AMTAR = ${SHELL} /home/asterix/gajim/missing --run tar +AR = ar +AUTOCONF = ${SHELL} /home/asterix/gajim/missing --run autoconf +AUTOHEADER = ${SHELL} /home/asterix/gajim/missing --run autoheader +AUTOMAKE = ${SHELL} /home/asterix/gajim/missing --run automake-1.9 +AWK = gawk +BUILD_CARBON_FALSE = +BUILD_CARBON_TRUE = # +BUILD_COCOA_FALSE = +BUILD_COCOA_TRUE = # +BUILD_GTKSPELL_FALSE = # +BUILD_GTKSPELL_TRUE = +BUILD_IDLE_FALSE = # +BUILD_IDLE_OSX_FALSE = +BUILD_IDLE_OSX_TRUE = # +BUILD_IDLE_TRUE = +BUILD_REMOTE_CONTROL_FALSE = # +BUILD_REMOTE_CONTROL_TRUE = +BUILD_TRAYICON_FALSE = # +BUILD_TRAYICON_TRUE = +CARBON_LIBS = +CATALOGS = +CATOBJEXT = .gmo +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +COCOA_LIBS = +CPP = gcc -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DATADIR = /usr/local/share +DATADIRNAME = share +DBUS_CFLAGS = -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include +DBUS_LIBS = -ldbus-1 +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DOCDIR = /usr/local/share/doc/gajim +ECHO = echo +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +F77 = +FFLAGS = +GETTEXT_PACKAGE = gajim +GMOFILES = +GMSGFMT = /usr/bin/msgfmt +GREP = /bin/grep +GTKSPELL_CFLAGS = -I/usr/include/gtkspell-2.0 -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 +GTKSPELL_LIBS = -lgtkspell -laspell -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lfontconfig -lXext -lXrender -lXinerama -lXi -lXrandr -lXcursor -lXcomposite -lXdamage -lpango-1.0 -lcairo -lX11 -lXfixes -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s +INSTOBJEXT = .mo +INTLLIBS = +INTLTOOL_CAVES_RULE = %.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_DESKTOP_RULE = %.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_DIRECTORY_RULE = %.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_EXTRACT = $(top_builddir)/intltool-extract +INTLTOOL_KBD_RULE = %.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_KEYS_RULE = %.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_MERGE = $(top_builddir)/intltool-merge +INTLTOOL_OAF_RULE = %.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< $@ +INTLTOOL_PERL = /usr/bin/perl +INTLTOOL_POLICY_RULE = %.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_PONG_RULE = %.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_PROP_RULE = %.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_SCHEMAS_RULE = %.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_SERVER_RULE = %.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_SERVICE_RULE = %.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_SHEET_RULE = %.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_SOUNDLIST_RULE = %.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_THEME_RULE = %.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_UI_RULE = %.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_UPDATE = $(top_builddir)/intltool-update +INTLTOOL_XAM_RULE = %.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_XML_NOMERGE_RULE = %.xml: %.xml.in $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< $@ +INTLTOOL_XML_RULE = %.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +LDFLAGS = +LIBDIR = /usr/local/lib +LIBOBJS = +LIBS = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LN_S = ln -s +LTLIBOBJS = +MAINT = # +MAINTAINER_MODE_FALSE = +MAINTAINER_MODE_TRUE = # +MAKEINFO = ${SHELL} /home/asterix/gajim/missing --run makeinfo +MKINSTALLDIRS = ./mkinstalldirs +MSGFMT = /usr/bin/msgfmt +MSGFMT_OPTS = -c +OBJEXT = o +PACKAGE = gajim +PACKAGE_BUGREPORT = http://trac.gajim.org/ +PACKAGE_NAME = Gajim - A Jabber Instant Messager +PACKAGE_STRING = Gajim - A Jabber Instant Messager 0.11.2.2-svn +PACKAGE_TARNAME = gajim +PACKAGE_VERSION = 0.11.2.2-svn +PATH_SEPARATOR = : +PKG_CONFIG = /usr/bin/pkg-config +POFILES = +POSUB = po +PO_IN_DATADIR_FALSE = +PO_IN_DATADIR_TRUE = +PYGTK_CFLAGS = -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/pygtk-2.0 +PYGTK_DEFS = /usr/share/pygtk/2.0/defs +PYGTK_LIBS = -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lfontconfig -lXext -lXrender -lXinerama -lXi -lXrandr -lXcursor -lXcomposite -lXdamage -lpango-1.0 -lcairo -lX11 -lXfixes -lgmodule-2.0 -ldl -lffi -lgobject-2.0 -lglib-2.0 +PYTHON = /usr/bin/python +PYTHON_EXEC_PREFIX = ${exec_prefix} +PYTHON_INCLUDES = -I/usr/include/python2.4 +PYTHON_PLATFORM = linux2 +PYTHON_PREFIX = ${prefix} +PYTHON_VERSION = 2.4 +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/sh +STRIP = strip +USE_NLS = yes +VERSION = 0.11.2.2-svn +XGETTEXT = /usr/bin/xgettext +XMKMF = +XSCRNSAVER_CFLAGS = +XSCRNSAVER_LIBS = -lXss +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_F77 = +am__fastdepCC_FALSE = # +am__fastdepCC_TRUE = +am__fastdepCXX_FALSE = # +am__fastdepCXX_TRUE = +am__fastdepOBJC_FALSE = +am__fastdepOBJC_TRUE = # +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = i686-pc-linux-gnu +build_alias = +build_cpu = i686 +build_os = linux-gnu +build_vendor = pc +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = i686-pc-linux-gnu +host_alias = +host_cpu = i686 +host_os = linux-gnu +host_vendor = pc +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = /home/asterix/gajim/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} +pkgpyexecdir = ${pyexecdir}/gajim +pkgpythondir = ${pythondir}/gajim +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +pyexecdir = ${exec_prefix}/lib/python2.4/site-packages +pythondir = ${prefix}/lib/python2.4/site-packages +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +sysconfdir = ${prefix}/etc +target_alias = +OBJC = gcc +INCLUDES = \ + $(PYTHON_INCLUDES) + +#_growllib_LTLIBRARIES = _growl.la +#_growllibdir = $(libdir)/gajim +#_growl_la_LIBADD = $(CARBON_LIBS) +#_growl_la_SOURCES = _growl.c +#_growl_la_LDFLAGS = \ +# -module -avoid-version -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 + +#_growl_la_CFLAGS = -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 $(PYTHON_INCLUDES) +#_growlImagelib_LTLIBRARIES = _growlImage.la +#_growlImagelibdir = $(libdir)/gajim +#_growlImage_la_LIBADD = $(COCOA_LIBS) +#_growlImage_la_SOURCES = _growlImage.m +#_growlImage_la_LDFLAGS = \ +# -module -avoid-version -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 + +#_growlImage_la_CFLAGS = -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 $(PYTHON_INCLUDES) +#AM_OBJCFLAGS = $(_growlImage_la_CFLAGS) +DISTCLEANFILES = +EXTRA_DIST = +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .m .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 \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/osx/growl/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/osx/growl/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 +install-_growlImagelibLTLIBRARIES: $(_growlImagelib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(_growlImagelibdir)" || $(mkdir_p) "$(DESTDIR)$(_growlImagelibdir)" + @list='$(_growlImagelib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=install $(_growlImagelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(_growlImagelibdir)/$$f'"; \ + $(LIBTOOL) --mode=install $(_growlImagelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(_growlImagelibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-_growlImagelibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @set -x; list='$(_growlImagelib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(_growlImagelibdir)/$$p'"; \ + $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(_growlImagelibdir)/$$p"; \ + done + +clean-_growlImagelibLTLIBRARIES: + -test -z "$(_growlImagelib_LTLIBRARIES)" || rm -f $(_growlImagelib_LTLIBRARIES) + @list='$(_growlImagelib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +install-_growllibLTLIBRARIES: $(_growllib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(_growllibdir)" || $(mkdir_p) "$(DESTDIR)$(_growllibdir)" + @list='$(_growllib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=install $(_growllibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(_growllibdir)/$$f'"; \ + $(LIBTOOL) --mode=install $(_growllibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(_growllibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-_growllibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @set -x; list='$(_growllib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(_growllibdir)/$$p'"; \ + $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(_growllibdir)/$$p"; \ + done + +clean-_growllibLTLIBRARIES: + -test -z "$(_growllib_LTLIBRARIES)" || rm -f $(_growllib_LTLIBRARIES) + @list='$(_growllib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +_growl.la: $(_growl_la_OBJECTS) $(_growl_la_DEPENDENCIES) + $(LINK) $(am__growl_la_rpath) $(_growl_la_LDFLAGS) $(_growl_la_OBJECTS) $(_growl_la_LIBADD) $(LIBS) +_growlImage.la: $(_growlImage_la_OBJECTS) $(_growlImage_la_DEPENDENCIES) + $(OBJCLINK) $(am__growlImage_la_rpath) $(_growlImage_la_LDFLAGS) $(_growlImage_la_OBJECTS) $(_growlImage_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/_growlImage.Plo +include ./$(DEPDIR)/_growl_la-_growl.Plo + +.c.o: + if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ + then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ + then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: + if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ + then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LTCOMPILE) -c -o $@ $< + +_growl_la-_growl.lo: _growl.c + if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_growl_la_CFLAGS) $(CFLAGS) -MT _growl_la-_growl.lo -MD -MP -MF "$(DEPDIR)/_growl_la-_growl.Tpo" -c -o _growl_la-_growl.lo `test -f '_growl.c' || echo '$(srcdir)/'`_growl.c; \ + then mv -f "$(DEPDIR)/_growl_la-_growl.Tpo" "$(DEPDIR)/_growl_la-_growl.Plo"; else rm -f "$(DEPDIR)/_growl_la-_growl.Tpo"; exit 1; fi +# source='_growl.c' object='_growl_la-_growl.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_growl_la_CFLAGS) $(CFLAGS) -c -o _growl_la-_growl.lo `test -f '_growl.c' || echo '$(srcdir)/'`_growl.c + +.m.o: +# if $(OBJCCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +# then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi + source='$<' object='$@' libtool=no \ + DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) \ + $(OBJCCOMPILE) -c -o $@ $< + +.m.obj: +# if $(OBJCCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +# then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi + source='$<' object='$@' libtool=no \ + DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) \ + $(OBJCCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.m.lo: +# if $(LTOBJCCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +# then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi + source='$<' object='$@' libtool=yes \ + DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) \ + $(LTOBJCCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +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)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$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 $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(_growlImagelibdir)" "$(DESTDIR)$(_growllibdir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-_growlImagelibLTLIBRARIES clean-_growllibLTLIBRARIES \ + clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-_growlImagelibLTLIBRARIES \ + install-_growllibLTLIBRARIES + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -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: uninstall-_growlImagelibLTLIBRARIES \ + uninstall-_growllibLTLIBRARIES uninstall-info-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean \ + clean-_growlImagelibLTLIBRARIES clean-_growllibLTLIBRARIES \ + clean-generic clean-libtool ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install \ + install-_growlImagelibLTLIBRARIES install-_growllibLTLIBRARIES \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + 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 uninstall \ + uninstall-_growlImagelibLTLIBRARIES \ + uninstall-_growllibLTLIBRARIES uninstall-am uninstall-info-am + + +export MACOSX_DEPLOYMENT_TARGET=10.4 +# 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: diff --git a/src/osx/growl/Makefile.am b/src/osx/growl/Makefile.am new file mode 100644 index 000000000..df48b58d8 --- /dev/null +++ b/src/osx/growl/Makefile.am @@ -0,0 +1,41 @@ +OBJC = gcc + +export MACOSX_DEPLOYMENT_TARGET=10.4 +INCLUDES = \ + $(PYTHON_INCLUDES) + +if BUILD_CARBON +_growllib_LTLIBRARIES = _growl.la +_growllibdir = $(libdir)/gajim + +_growl_la_LIBADD = $(CARBON_LIBS) + +_growl_la_SOURCES = _growl.c + +_growl_la_LDFLAGS = \ + -module -avoid-version -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 + +_growl_la_CFLAGS = -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 $(PYTHON_INCLUDES) +endif + +if BUILD_COCOA +_growlImagelib_LTLIBRARIES = _growlImage.la +_growlImagelibdir = $(libdir)/gajim + +_growlImage_la_LIBADD = $(COCOA_LIBS) + +_growlImage_la_SOURCES = _growlImage.m + +_growlImage_la_LDFLAGS = \ + -module -avoid-version -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 + +_growlImage_la_CFLAGS = -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 $(PYTHON_INCLUDES) + +AM_OBJCFLAGS = $(_growlImage_la_CFLAGS) +endif + +DISTCLEANFILES = + +EXTRA_DIST = + +MAINTAINERCLEANFILES = Makefile.in diff --git a/src/osx/growl/Makefile.in b/src/osx/growl/Makefile.in new file mode 100644 index 000000000..44222f33e --- /dev/null +++ b/src/osx/growl/Makefile.in @@ -0,0 +1,651 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 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. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +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 = @build@ +host_triplet = @host@ +subdir = src/osx/growl +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ + $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(_growlImagelibdir)" \ + "$(DESTDIR)$(_growllibdir)" +_growlImagelibLTLIBRARIES_INSTALL = $(INSTALL) +_growllibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(_growlImagelib_LTLIBRARIES) $(_growllib_LTLIBRARIES) +am__DEPENDENCIES_1 = +@BUILD_CARBON_TRUE@_growl_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am___growl_la_SOURCES_DIST = _growl.c +@BUILD_CARBON_TRUE@am__growl_la_OBJECTS = _growl_la-_growl.lo +_growl_la_OBJECTS = $(am__growl_la_OBJECTS) +@BUILD_CARBON_TRUE@am__growl_la_rpath = -rpath $(_growllibdir) +@BUILD_COCOA_TRUE@_growlImage_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am___growlImage_la_SOURCES_DIST = _growlImage.m +@BUILD_COCOA_TRUE@am__growlImage_la_OBJECTS = _growlImage.lo +_growlImage_la_OBJECTS = $(am__growlImage_la_OBJECTS) +@BUILD_COCOA_TRUE@am__growlImage_la_rpath = -rpath \ +@BUILD_COCOA_TRUE@ $(_growlImagelibdir) +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +OBJCCOMPILE = $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS) +LTOBJCCOMPILE = $(LIBTOOL) --mode=compile $(OBJC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_OBJCFLAGS) $(OBJCFLAGS) +OBJCLD = $(OBJC) +OBJCLINK = $(LIBTOOL) --mode=link $(OBJCLD) $(AM_OBJCFLAGS) \ + $(OBJCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(_growl_la_SOURCES) $(_growlImage_la_SOURCES) +DIST_SOURCES = $(am___growl_la_SOURCES_DIST) \ + $(am___growlImage_la_SOURCES_DIST) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUILD_CARBON_FALSE = @BUILD_CARBON_FALSE@ +BUILD_CARBON_TRUE = @BUILD_CARBON_TRUE@ +BUILD_COCOA_FALSE = @BUILD_COCOA_FALSE@ +BUILD_COCOA_TRUE = @BUILD_COCOA_TRUE@ +BUILD_GTKSPELL_FALSE = @BUILD_GTKSPELL_FALSE@ +BUILD_GTKSPELL_TRUE = @BUILD_GTKSPELL_TRUE@ +BUILD_IDLE_FALSE = @BUILD_IDLE_FALSE@ +BUILD_IDLE_OSX_FALSE = @BUILD_IDLE_OSX_FALSE@ +BUILD_IDLE_OSX_TRUE = @BUILD_IDLE_OSX_TRUE@ +BUILD_IDLE_TRUE = @BUILD_IDLE_TRUE@ +BUILD_REMOTE_CONTROL_FALSE = @BUILD_REMOTE_CONTROL_FALSE@ +BUILD_REMOTE_CONTROL_TRUE = @BUILD_REMOTE_CONTROL_TRUE@ +BUILD_TRAYICON_FALSE = @BUILD_TRAYICON_FALSE@ +BUILD_TRAYICON_TRUE = @BUILD_TRAYICON_TRUE@ +CARBON_LIBS = @CARBON_LIBS@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +COCOA_LIBS = @COCOA_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIR = @DATADIR@ +DATADIRNAME = @DATADIRNAME@ +DBUS_CFLAGS = @DBUS_CFLAGS@ +DBUS_LIBS = @DBUS_LIBS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCDIR = @DOCDIR@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@ +GTKSPELL_LIBS = @GTKSPELL_LIBS@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_CAVES_RULE = @INTLTOOL_CAVES_RULE@ +INTLTOOL_DESKTOP_RULE = @INTLTOOL_DESKTOP_RULE@ +INTLTOOL_DIRECTORY_RULE = @INTLTOOL_DIRECTORY_RULE@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@ +INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_POLICY_RULE = @INTLTOOL_POLICY_RULE@ +INTLTOOL_PONG_RULE = @INTLTOOL_PONG_RULE@ +INTLTOOL_PROP_RULE = @INTLTOOL_PROP_RULE@ +INTLTOOL_SCHEMAS_RULE = @INTLTOOL_SCHEMAS_RULE@ +INTLTOOL_SERVER_RULE = @INTLTOOL_SERVER_RULE@ +INTLTOOL_SERVICE_RULE = @INTLTOOL_SERVICE_RULE@ +INTLTOOL_SHEET_RULE = @INTLTOOL_SHEET_RULE@ +INTLTOOL_SOUNDLIST_RULE = @INTLTOOL_SOUNDLIST_RULE@ +INTLTOOL_THEME_RULE = @INTLTOOL_THEME_RULE@ +INTLTOOL_UI_RULE = @INTLTOOL_UI_RULE@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_XAM_RULE = @INTLTOOL_XAM_RULE@ +INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@ +INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@ +LDFLAGS = @LDFLAGS@ +LIBDIR = @LIBDIR@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_DEFS = @PYGTK_DEFS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XMKMF = @XMKMF@ +XSCRNSAVER_CFLAGS = @XSCRNSAVER_CFLAGS@ +XSCRNSAVER_LIBS = @XSCRNSAVER_LIBS@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__fastdepOBJC_FALSE = @am__fastdepOBJC_FALSE@ +am__fastdepOBJC_TRUE = @am__fastdepOBJC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +OBJC = gcc +INCLUDES = \ + $(PYTHON_INCLUDES) + +@BUILD_CARBON_TRUE@_growllib_LTLIBRARIES = _growl.la +@BUILD_CARBON_TRUE@_growllibdir = $(libdir)/gajim +@BUILD_CARBON_TRUE@_growl_la_LIBADD = $(CARBON_LIBS) +@BUILD_CARBON_TRUE@_growl_la_SOURCES = _growl.c +@BUILD_CARBON_TRUE@_growl_la_LDFLAGS = \ +@BUILD_CARBON_TRUE@ -module -avoid-version -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 + +@BUILD_CARBON_TRUE@_growl_la_CFLAGS = -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 $(PYTHON_INCLUDES) +@BUILD_COCOA_TRUE@_growlImagelib_LTLIBRARIES = _growlImage.la +@BUILD_COCOA_TRUE@_growlImagelibdir = $(libdir)/gajim +@BUILD_COCOA_TRUE@_growlImage_la_LIBADD = $(COCOA_LIBS) +@BUILD_COCOA_TRUE@_growlImage_la_SOURCES = _growlImage.m +@BUILD_COCOA_TRUE@_growlImage_la_LDFLAGS = \ +@BUILD_COCOA_TRUE@ -module -avoid-version -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 + +@BUILD_COCOA_TRUE@_growlImage_la_CFLAGS = -Xcompiler -isysroot -Xcompiler /Developer/SDKs/MacOSX10.4u.sdk -Xcompiler -arch -Xcompiler ppc -Xcompiler -arch -Xcompiler i386 $(PYTHON_INCLUDES) +@BUILD_COCOA_TRUE@AM_OBJCFLAGS = $(_growlImage_la_CFLAGS) +DISTCLEANFILES = +EXTRA_DIST = +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .m .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/osx/growl/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/osx/growl/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-_growlImagelibLTLIBRARIES: $(_growlImagelib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(_growlImagelibdir)" || $(mkdir_p) "$(DESTDIR)$(_growlImagelibdir)" + @list='$(_growlImagelib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=install $(_growlImagelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(_growlImagelibdir)/$$f'"; \ + $(LIBTOOL) --mode=install $(_growlImagelibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(_growlImagelibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-_growlImagelibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @set -x; list='$(_growlImagelib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(_growlImagelibdir)/$$p'"; \ + $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(_growlImagelibdir)/$$p"; \ + done + +clean-_growlImagelibLTLIBRARIES: + -test -z "$(_growlImagelib_LTLIBRARIES)" || rm -f $(_growlImagelib_LTLIBRARIES) + @list='$(_growlImagelib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +install-_growllibLTLIBRARIES: $(_growllib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(_growllibdir)" || $(mkdir_p) "$(DESTDIR)$(_growllibdir)" + @list='$(_growllib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=install $(_growllibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(_growllibdir)/$$f'"; \ + $(LIBTOOL) --mode=install $(_growllibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(_growllibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-_growllibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @set -x; list='$(_growllib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(_growllibdir)/$$p'"; \ + $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(_growllibdir)/$$p"; \ + done + +clean-_growllibLTLIBRARIES: + -test -z "$(_growllib_LTLIBRARIES)" || rm -f $(_growllib_LTLIBRARIES) + @list='$(_growllib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +_growl.la: $(_growl_la_OBJECTS) $(_growl_la_DEPENDENCIES) + $(LINK) $(am__growl_la_rpath) $(_growl_la_LDFLAGS) $(_growl_la_OBJECTS) $(_growl_la_LIBADD) $(LIBS) +_growlImage.la: $(_growlImage_la_OBJECTS) $(_growlImage_la_DEPENDENCIES) + $(OBJCLINK) $(am__growlImage_la_rpath) $(_growlImage_la_LDFLAGS) $(_growlImage_la_OBJECTS) $(_growlImage_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_growlImage.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_growl_la-_growl.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +_growl_la-_growl.lo: _growl.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_growl_la_CFLAGS) $(CFLAGS) -MT _growl_la-_growl.lo -MD -MP -MF "$(DEPDIR)/_growl_la-_growl.Tpo" -c -o _growl_la-_growl.lo `test -f '_growl.c' || echo '$(srcdir)/'`_growl.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/_growl_la-_growl.Tpo" "$(DEPDIR)/_growl_la-_growl.Plo"; else rm -f "$(DEPDIR)/_growl_la-_growl.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='_growl.c' object='_growl_la-_growl.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_growl_la_CFLAGS) $(CFLAGS) -c -o _growl_la-_growl.lo `test -f '_growl.c' || echo '$(srcdir)/'`_growl.c + +.m.o: +@am__fastdepOBJC_TRUE@ if $(OBJCCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepOBJC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepOBJC_FALSE@ $(OBJCCOMPILE) -c -o $@ $< + +.m.obj: +@am__fastdepOBJC_TRUE@ if $(OBJCCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepOBJC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepOBJC_FALSE@ $(OBJCCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.m.lo: +@am__fastdepOBJC_TRUE@ if $(LTOBJCCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepOBJC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepOBJC_FALSE@ DEPDIR=$(DEPDIR) $(OBJCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepOBJC_FALSE@ $(LTOBJCCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +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)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$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 $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(_growlImagelibdir)" "$(DESTDIR)$(_growllibdir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-_growlImagelibLTLIBRARIES clean-_growllibLTLIBRARIES \ + clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-_growlImagelibLTLIBRARIES \ + install-_growllibLTLIBRARIES + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -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: uninstall-_growlImagelibLTLIBRARIES \ + uninstall-_growllibLTLIBRARIES uninstall-info-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean \ + clean-_growlImagelibLTLIBRARIES clean-_growllibLTLIBRARIES \ + clean-generic clean-libtool ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install \ + install-_growlImagelibLTLIBRARIES install-_growllibLTLIBRARIES \ + install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + 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 uninstall \ + uninstall-_growlImagelibLTLIBRARIES \ + uninstall-_growllibLTLIBRARIES uninstall-am uninstall-info-am + + +export MACOSX_DEPLOYMENT_TARGET=10.4 +# 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: diff --git a/src/osx/growl/_growl.c b/src/osx/growl/_growl.c new file mode 100644 index 000000000..11ac07e93 --- /dev/null +++ b/src/osx/growl/_growl.c @@ -0,0 +1,239 @@ +/* + * Copyright 2004-2005 The Growl Project. + * Created by Jeremy Rossi <jeremy@jeremyrossi.com> + * Released under the BSD license. + */ + +#include <Python.h> +#include <CoreFoundation/CoreFoundation.h> + +#define str(cfstr) CFStringGetCStringPtr(cfstr, kCFStringEncodingMacRoman) +#define cfstr(str) CFStringCreateWithCString(kCFAllocatorDefault, str, kCFStringEncodingMacRoman) + +static PyObject * _notify_cb = NULL; + + +static PyObject * growl_PostDictionary(CFStringRef name, PyObject *self, PyObject *args) { + int i, j; + + PyObject *inputDict; + PyObject *pKeys = NULL; + PyObject *pKey, *pValue; + + CFMutableDictionaryRef note = CFDictionaryCreateMutable(kCFAllocatorDefault, + /*capacity*/ 0, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks); + + if (!PyArg_ParseTuple(args, "O!", &PyDict_Type, &inputDict)) + goto error; + + pKeys = PyDict_Keys(inputDict); + for (i = 0; i < PyList_Size(pKeys); ++i) { + CFStringRef convertedKey; + + /* Converting the PyDict key to NSString and used for key in note */ + pKey = PyList_GetItem(pKeys, i); + if (!pKey) + // Exception already set + goto error; + pValue = PyDict_GetItem(inputDict, pKey); + if (!pValue) { + // XXX Neeed a real Error message here. + PyErr_SetString(PyExc_TypeError," "); + goto error; + } + if (PyUnicode_Check(pKey)) { + convertedKey = CFStringCreateWithBytes(kCFAllocatorDefault, + (const UInt8 *)PyUnicode_AS_DATA(pKey), + PyUnicode_GET_DATA_SIZE(pKey), + kCFStringEncodingUnicode, + false); + } else if (PyString_Check(pKey)) { + convertedKey = CFStringCreateWithCString(kCFAllocatorDefault, + PyString_AsString(pKey), + kCFStringEncodingUTF8); + } else { + PyErr_SetString(PyExc_TypeError,"The Dict keys must be strings/unicode"); + goto error; + } + + /* Converting the PyDict value to NSString or NSData based on class */ + if (PyString_Check(pValue)) { + CFStringRef convertedValue = CFStringCreateWithCString(kCFAllocatorDefault, + PyString_AS_STRING(pValue), + kCFStringEncodingUTF8); + CFDictionarySetValue(note, convertedKey, convertedValue); + CFRelease(convertedValue); + } else if (PyUnicode_Check(pValue)) { + CFStringRef convertedValue = CFStringCreateWithBytes(kCFAllocatorDefault, + (const UInt8 *)PyUnicode_AS_DATA(pValue), + PyUnicode_GET_DATA_SIZE(pValue), + kCFStringEncodingUnicode, + false); + CFDictionarySetValue(note, convertedKey, convertedValue); + CFRelease(convertedValue); + } else if (PyInt_Check(pValue)) { + long v = PyInt_AS_LONG(pValue); + CFNumberRef convertedValue = CFNumberCreate(kCFAllocatorDefault, + kCFNumberLongType, + &v); + CFDictionarySetValue(note, convertedKey, convertedValue); + CFRelease(convertedValue); + } else if (pValue == Py_None) { + CFDataRef convertedValue = CFDataCreate(kCFAllocatorDefault, NULL, 0); + CFDictionarySetValue(note, convertedKey, convertedValue); + CFRelease(convertedValue); + } else if (PyList_Check(pValue)) { + int size = PyList_Size(pValue); + CFMutableArrayRef listHolder = CFArrayCreateMutable(kCFAllocatorDefault, + size, + &kCFTypeArrayCallBacks); + for (j = 0; j < size; ++j) { + PyObject *lValue = PyList_GetItem(pValue, j); + if (PyString_Check(lValue)) { + CFStringRef convertedValue = CFStringCreateWithCString(kCFAllocatorDefault, + PyString_AS_STRING(lValue), + kCFStringEncodingUTF8); + CFArrayAppendValue(listHolder, convertedValue); + CFRelease(convertedValue); + } else if (PyUnicode_Check(lValue)) { + CFStringRef convertedValue = CFStringCreateWithBytes(kCFAllocatorDefault, + (const UInt8 *)PyUnicode_AS_DATA(lValue), + PyUnicode_GET_DATA_SIZE(lValue), + kCFStringEncodingUnicode, + false); + CFArrayAppendValue(listHolder, convertedValue); + CFRelease(convertedValue); + } else { + CFRelease(convertedKey); + PyErr_SetString(PyExc_TypeError,"The lists must only contain strings"); + goto error; + } + } + CFDictionarySetValue(note, convertedKey, listHolder); + CFRelease(listHolder); + } else if (PyObject_HasAttrString(pValue, "rawImageData")) { + PyObject *lValue = PyObject_GetAttrString(pValue, "rawImageData"); + if (!lValue) { + goto error; + } else if (PyString_Check(lValue)) { + CFDataRef convertedValue = CFDataCreate(kCFAllocatorDefault, + (const UInt8 *)PyString_AsString(lValue), + PyString_Size(lValue)); + CFDictionarySetValue(note, convertedKey, convertedValue); + CFRelease(convertedValue); + } else { + CFRelease(convertedKey); + PyErr_SetString(PyExc_TypeError, "Icon with rawImageData attribute present must ensure it is a string."); + goto error; + } + } else { + CFRelease(convertedKey); + PyErr_SetString(PyExc_TypeError, "Value is not of Str/List"); + goto error; + } + CFRelease(convertedKey); + } + + Py_BEGIN_ALLOW_THREADS + CFNotificationCenterPostNotification(CFNotificationCenterGetDistributedCenter(), + /*name*/ name, + /*object*/ NULL, + /*userInfo*/ note, + /*deliverImmediately*/ false); + CFRelease(note); + Py_END_ALLOW_THREADS + + Py_DECREF(pKeys); + + Py_INCREF(Py_None); + return Py_None; + +error: + CFRelease(note); + + Py_XDECREF(pKeys); + + return NULL; +} + +static void growl_NotifyCB(CFNotificationCenterRef center, void *observer, + CFStringRef name, const void *object, + CFDictionaryRef userInfo) +{ + CFIndex size, len; + const void * keys[1]; + const void * values[1]; + CFArrayRef arr; + CFStringRef cfstr; + CFRange cfrange; + UInt8 *buff; + int i; + PyObject * pylist; + + cfrange.location = 0; + CFDictionaryGetKeysAndValues(userInfo, keys, values); + arr = (CFArrayRef)values[0]; + size = CFArrayGetCount(arr); + pylist = PyList_New(size); + for (i=0; i < size; ++i) + { + cfstr = (CFStringRef)CFArrayGetValueAtIndex(arr, i); + cfrange.length = CFStringGetLength(cfstr); + CFStringGetBytes(cfstr, cfrange, kCFStringEncodingUnicode, 0, false, + NULL, 0, &len); + buff = (UInt8*)malloc(len); + CFStringGetBytes(cfstr, cfrange, kCFStringEncodingUnicode, 0, false, + buff, len, &len); + PyList_SetItem(pylist, i, + PyUnicode_DecodeUTF16((char*)buff, len, NULL, NULL)); + free(buff); + } + + PyObject_CallObject(_notify_cb, Py_BuildValue("(O)", pylist)); + Py_DECREF(pylist); +} + +static PyObject * growl_Init(PyObject *self, PyObject *args) +{ + char* name = NULL; + + if (!PyArg_ParseTuple(args, "sO", &name, &_notify_cb)) + return NULL; + + Py_INCREF(_notify_cb); + + char* buff = (char*)malloc(strlen(name) + 14); + strcpy(buff, name); + strcat(buff, "GrowlClicked!"); + CFStringRef cfbuff = cfstr(buff); + CFNotificationCenterAddObserver( + CFNotificationCenterGetDistributedCenter(), NULL, &growl_NotifyCB, + cfbuff, NULL, CFNotificationSuspensionBehaviorDeliverImmediately); + free(buff); + CFRelease(cfbuff); + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * growl_PostRegistration(PyObject *self, PyObject *args) { + return growl_PostDictionary(CFSTR("GrowlApplicationRegistrationNotification"), self, args); +} + +static PyObject * growl_PostNotification(PyObject *self, PyObject *args) { + return growl_PostDictionary(CFSTR("GrowlNotification"), self, args); +} + +static PyMethodDef GrowlMethods[] = { + {"Init", growl_Init, METH_VARARGS, "Initialize notifications with GrowlHelperApp"}, + {"PostNotification", growl_PostNotification, METH_VARARGS, "Send a notification to GrowlHelperApp"}, + {"PostRegistration", growl_PostRegistration, METH_VARARGS, "Send a registration to GrowlHelperApp"}, + {NULL, NULL, 0, NULL} /* Sentinel */ +}; + + +PyMODINIT_FUNC init_growl(void) { + Py_InitModule("_growl", GrowlMethods); +} diff --git a/src/osx/growl/_growlImage.m b/src/osx/growl/_growlImage.m new file mode 100644 index 000000000..d4b2b72f9 --- /dev/null +++ b/src/osx/growl/_growlImage.m @@ -0,0 +1,274 @@ +/* + * Copyright 2004 Mark Rowe <bdash@users.sourceforge.net> + * Released under the BSD license. + */ + +#include "Python.h" +#import <Cocoa/Cocoa.h> + +typedef struct +{ + PyObject_HEAD + NSImage *theImage; +} ImageObject; + + +static PyTypeObject ImageObject_Type; + +#define ImageObject_Check(v) ((v)->ob_type == &ImageObject_Type) + +static ImageObject * +newImageObject(NSImage *img) +{ + ImageObject *self; + if (! img) + { + PyErr_SetString(PyExc_TypeError, "Invalid image."); + return NULL; + } + + self = PyObject_New(ImageObject, &ImageObject_Type); + if (! self) + return NULL; + + self->theImage = [img retain]; + return self; +} + +static void +ImageObject_dealloc(ImageObject *self) +{ + PyObject_Del(self); +} + +static PyObject * +ImageObject_getAttr(PyObject *self, PyObject *attr) +{ + char *theAttr = PyString_AsString(attr); + NSAutoreleasePool *pool = nil; + + if (strcmp(theAttr, "rawImageData") == 0) + { + pool = [[NSAutoreleasePool alloc] init]; + NSData *imageData = [((ImageObject *) self)->theImage TIFFRepresentation]; + PyObject *pyImageData = PyString_FromStringAndSize([imageData bytes], [imageData length]); + [pool release]; + return pyImageData; + } + else + return PyObject_GenericGetAttr(self, attr); +} + + +static PyObject * +ImageObject_imageFromPath(PyTypeObject *cls, PyObject *args) +{ + ImageObject *self; + char *fileName_ = NULL; + NSString *fileName = nil; + NSImage *theImage = nil; + NSAutoreleasePool *pool = nil; + + if (! PyArg_ParseTuple(args, "et:imageFromPath", + Py_FileSystemDefaultEncoding, &fileName_)) + return NULL; + + pool = [[NSAutoreleasePool alloc] init]; + + fileName = [NSString stringWithUTF8String:fileName_]; + theImage = [[[NSImage alloc] initWithContentsOfFile:fileName] autorelease]; + self = newImageObject(theImage); + + [pool release]; + return (PyObject *) self; +} + +static PyObject * +ImageObject_imageWithData(PyTypeObject *cls, PyObject *args) +{ + ImageObject *self; + char *imageData = NULL; + int imageDataSize = 0; + NSImage *theImage = nil; + NSAutoreleasePool *pool = nil; + + if (! PyArg_ParseTuple(args, "s#:imageWithData", + &imageData, &imageDataSize)) + return NULL; + + pool = [[NSAutoreleasePool alloc] init]; + + + theImage = [[[NSImage alloc] initWithData:[NSData dataWithBytes:imageData + length:imageDataSize]] autorelease]; + self = newImageObject(theImage); + + [pool release]; + return (PyObject *) self; +} + +static PyObject * +ImageObject_imageWithIconForFile(PyTypeObject *cls, PyObject *args) +{ + ImageObject *self; + char *fileName_ = NULL; + NSString *fileName = nil; + NSImage *theImage = nil; + NSAutoreleasePool *pool = nil; + + if (! PyArg_ParseTuple(args, "et:imageWithIconForFile", + Py_FileSystemDefaultEncoding, &fileName_)) + return NULL; + + pool = [[NSAutoreleasePool alloc] init]; + + fileName = [NSString stringWithUTF8String:fileName_]; + theImage = [[NSWorkspace sharedWorkspace] iconForFile:fileName]; + self = newImageObject(theImage); + + [pool release]; + return (PyObject *) self; +} + +static PyObject * +ImageObject_imageWithIconForFileType(PyTypeObject *cls, PyObject *args) +{ + ImageObject *self; + char *fileType = NULL; + NSImage *theImage = nil; + NSAutoreleasePool *pool = nil; + + if (! PyArg_ParseTuple(args, "s:imageWithIconForFileType", + &fileType)) + return NULL; + + pool = [[NSAutoreleasePool alloc] init]; + + theImage = [[NSWorkspace sharedWorkspace] iconForFileType:[NSString stringWithUTF8String:fileType]]; + self = newImageObject(theImage); + + [pool release]; + return (PyObject *) self; +} + +static PyObject * +ImageObject_imageWithIconForCurrentApplication(PyTypeObject *cls, PyObject *args) +{ + ImageObject *self; + NSAutoreleasePool *pool = nil; + + if (! PyArg_ParseTuple(args, ":imageWithIconForCurrentApplication")) + return NULL; + + pool = [[NSAutoreleasePool alloc] init]; + + self = newImageObject([NSApp applicationIconImage]); + + [pool release]; + return (PyObject *) self; +} + +static PyObject * +ImageObject_imageWithIconForApplication(PyTypeObject *cls, PyObject *args) +{ + ImageObject *self; + char *appName_ = NULL; + NSString *appName = nil; + NSString *appPath = nil; + NSImage *theImage = nil; + NSAutoreleasePool *pool = nil; + + if (! PyArg_ParseTuple(args, "et:imageWithIconForApplication", + Py_FileSystemDefaultEncoding, &appName_)) + return NULL; + + pool = [[NSAutoreleasePool alloc] init]; + + appName = [NSString stringWithUTF8String:appName_]; + appPath = [[NSWorkspace sharedWorkspace] fullPathForApplication:appName]; + if (! appPath) + { + PyErr_Format(PyExc_RuntimeError, "Application named '%s' not found", appName_); + self = NULL; + goto done; + } + theImage = [[NSWorkspace sharedWorkspace] iconForFile:appPath]; + self = newImageObject(theImage); + +done: + [pool release]; + return (PyObject *) self; +} + + +static PyMethodDef ImageObject_methods[] = { + {"imageFromPath", (PyCFunction)ImageObject_imageFromPath, METH_VARARGS | METH_CLASS}, + {"imageWithData", (PyCFunction)ImageObject_imageWithData, METH_VARARGS | METH_CLASS}, + {"imageWithIconForFile", (PyCFunction)ImageObject_imageWithIconForFile, METH_VARARGS | METH_CLASS}, + {"imageWithIconForFileType", (PyCFunction)ImageObject_imageWithIconForFileType, METH_VARARGS | METH_CLASS}, + {"imageWithIconForCurrentApplication", (PyCFunction)ImageObject_imageWithIconForCurrentApplication, METH_VARARGS | METH_CLASS}, + {"imageWithIconForApplication", (PyCFunction)ImageObject_imageWithIconForApplication, METH_VARARGS | METH_CLASS}, + {NULL, NULL} /* sentinel */ +}; + +static PyTypeObject ImageObject_Type = { + PyObject_HEAD_INIT(NULL) + 0, /*ob_size*/ + "_growlImage.Image", /*tp_name*/ + sizeof(ImageObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + /* methods */ + (destructor)ImageObject_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + ImageObject_getAttr, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_CLASS, /*tp_flags*/ + 0, /*tp_doc*/ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + ImageObject_methods, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + PyType_GenericAlloc, /*tp_alloc*/ + 0, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ +}; + +static PyMethodDef _growlImage_methods[] = { + {NULL, NULL} +}; + +PyMODINIT_FUNC +init_growlImage(void) +{ + PyObject *m; + + if (PyType_Ready(&ImageObject_Type) < 0) + return; + + m = Py_InitModule("_growlImage", _growlImage_methods); + + PyModule_AddObject(m, "Image", (PyObject *)&ImageObject_Type); +} diff --git a/src/osx/growl/setup.py b/src/osx/growl/setup.py new file mode 100644 index 000000000..5a7235dee --- /dev/null +++ b/src/osx/growl/setup.py @@ -0,0 +1,25 @@ +#!/usr/bin/python +from distutils.core import setup, Extension +import sys + +_growl = Extension('_growl', + extra_link_args = ["-framework","CoreFoundation"], + sources = ['libgrowl.c']) +_growlImage = Extension('_growlImage', + extra_link_args = ["-framework","Cocoa"], + sources = ['growlImage.m']) + +if sys.platform.startswith("darwin"): + modules = [_growl, _growlImage] +else: + modules = [] + +setup(name="py-Growl", + version="0.0.7", + description="Python bindings for posting notifications to the Growl daemon", + author="Mark Rowe", + author_email="bdash@users.sourceforge.net", + url="http://growl.info", + py_modules=["Growl"], + ext_modules = modules ) + diff --git a/src/osx/growler.py b/src/osx/growler.py new file mode 100644 index 000000000..c3ea320cf --- /dev/null +++ b/src/osx/growler.py @@ -0,0 +1,63 @@ +import sys, os +from growl.Growl import GrowlNotifier +from common import gajim, helpers + + +if sys.platform != "darwin": + raise ImportError("System platform is not OS/X") + + +GENERIC_NOTIF = _('Generic') +notifications = [ + _('Contact Signed In'), _('Contact Signed Out'), _('New Message'), + _('New Single Message'), _('New Private Message'), _('New E-mail'), + _('File Transfer Request'), _('File Transfer Error'), + _('File Transfer Completed'), _('File Transfer Stopped'), + _('Groupchat Invitation'), _('Contact Changed Status'), + _('Connection Failed'), GENERIC_NOTIF + ] + +growler = None + + + +def init(): + global growler, notifications + icon = file(os.path.join(gajim.DATA_DIR, "pixmaps", "gajim.icns"), "r") + growler = GrowlNotifier(applicationName = "Gajim", + notifications = notifications, + applicationIcon = icon.read(), + notify_cb = notifyCB) + growler.register() + return + + +def notify(event_type, jid, account, msg_type, path_to_image, title, text): + global notifications + if not event_type in notifications: + event_type = GENERIC_NOTIF + if not text: + text = gajim.get_name_from_jid(account, jid) # default value of text + text = filterString(text) + if not title: + title = event_type + title = filterString(title) + if not path_to_image: + path_to_image = os.path.abspath( + os.path.join(gajim.DATA_DIR, 'pixmaps', 'events', + 'chat_msg_recv.png')) # img to display + icon = file(path_to_image, "r") + context = [account, jid, msg_type] + growler.notify(event_type, title, text, icon.read(), False, None, + context) + return + + +def notifyCB(data): + gajim.interface.handle_event(data[0], data[1], data[2]) + + +def filterString(string): + string = string.replace(""", "'") + return string + diff --git a/src/osx/idle.c b/src/osx/idle.c new file mode 100644 index 000000000..c24c30438 --- /dev/null +++ b/src/osx/idle.c @@ -0,0 +1,174 @@ +/***** + This is a modified form of idler.c. The original copyright notice follows. + **/ + +/***************************************** + * idler.c + * + * Uses IOKit to figure out the idle time of the system. The idle time + * is stored as a property of the IOHIDSystem class; the name is + * HIDIdleTime. Stored as a 64-bit int, measured in ns. + * + * The program itself just prints to stdout the time that the computer +has + * been idle in seconds. + * + * Compile with gcc -Wall -framework IOKit -framework Carbon idler.c -o + * idler + * + * Copyright (c) 2003, Stanford University + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions +are + * met: + * Redistributions of source code must retain the above copyright +notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright +notice, + * this list of conditions and the following disclaimer in the +documentation + * and/or other materials provided with the distribution. + * + * Neither the name of Stanford University nor the names of its +contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <CoreFoundation/CoreFoundation.h> +#include <CoreServices/CoreServices.h> +#include <IOKit/IOKitLib.h> + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +#include <Python.h> + +/* 10^9 -- number of ns in a second */ +#define NS_SECONDS 1000000000 + + +static mach_port_t __idle_osx_master_port; +io_registry_entry_t __idle_osx_service; + + +static PyObject * idle_init(PyObject *self, PyObject *args) +{ + io_iterator_t iter; + CFMutableDictionaryRef hid_match; + + IOMasterPort(MACH_PORT_NULL, &__idle_osx_master_port); + + /* Get IOHIDSystem */ + hid_match = IOServiceMatching("IOHIDSystem"); + IOServiceGetMatchingServices(__idle_osx_master_port, hid_match, &iter); + if (iter == 0) { + printf("Error accessing IOHIDSystem\n"); + } + + __idle_osx_service = IOIteratorNext(iter); + if (__idle_osx_service == 0) { + printf("Iterator's empty!\n"); + } + + IOObjectRelease(iter); + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * idle_getIdleSec(PyObject *self, PyObject *args) +{ + CFMutableDictionaryRef properties = 0; + CFTypeRef obj = NULL; + uint64_t tHandle = 0; + + if (IORegistryEntryCreateCFProperties(__idle_osx_service, &properties, + kCFAllocatorDefault, 0) == + KERN_SUCCESS && properties != NULL) + { + obj = CFDictionaryGetValue(properties, CFSTR("HIDIdleTime")); + CFRetain(obj); + } + else + { + printf("Couldn't grab properties of system\n"); + } + + if (obj) + { + CFTypeID type = CFGetTypeID(obj); + + if (type == CFDataGetTypeID()) + { + CFDataGetBytes((CFDataRef) obj, + CFRangeMake(0, sizeof(tHandle)), + (UInt8*) &tHandle); + } + else if (type == CFNumberGetTypeID()) + { + CFNumberGetValue((CFNumberRef)obj, + kCFNumberSInt64Type, + &tHandle); + } + else + { + printf("%d: unsupported type\n", (int)type); + } + + CFRelease(obj); + + // essentially divides by 10^9 + tHandle >>= 30; + } + else + { + printf("Can't find idle time\n"); + } + + CFRelease((CFTypeRef)properties); + return Py_BuildValue("L", tHandle); +} + +static PyObject * idle_close(PyObject *self, PyObject *args) +{ + /* Release our resources */ + IOObjectRelease(__idle_osx_service); + + Py_INCREF(Py_None); + return Py_None; +} + +static PyMethodDef idleMethods[] = +{ + {"init", idle_init, METH_VARARGS, "init idle"}, + {"getIdleSec", idle_getIdleSec, METH_VARARGS, "Get idle time in seconds"}, + {"close", idle_close, METH_VARARGS, "close idle"}, + {NULL, NULL, 0, NULL} +}; + +PyMODINIT_FUNC initidle(void) +{ + (void) Py_InitModule("idle", idleMethods); +} diff --git a/src/osx/nsapp.h b/src/osx/nsapp.h new file mode 100644 index 000000000..dd86960c2 --- /dev/null +++ b/src/osx/nsapp.h @@ -0,0 +1,19 @@ +#import <Cocoa/Cocoa.h> + + +@interface NSApplication (Gajim) + +- (void) initGajim; +- (void) initGUI; +- (BOOL) initNetNotify; +- (void) orderFrontStandardAboutPanel: (id)sender; +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender; +- (BOOL) application:(NSApplication *)theApplication + openFile:(NSString *)filename; +- (void) application:(NSApplication *)sender openFiles:(NSArray *)filenames; +- (BOOL) applicationOpenUntitledFile:(NSApplication *)theApplication; +- (BOOL) applicationShouldOpenUntitledFile:(NSApplication *)sender; + ++ (void) netNotifyCB: (NSNotification*)notif; + +@end diff --git a/src/osx/nsapp.m b/src/osx/nsapp.m new file mode 100644 index 000000000..4e7b6bde4 --- /dev/null +++ b/src/osx/nsapp.m @@ -0,0 +1,239 @@ +#import "nsapp.h" +#include <notify.h> + +#include <AppKit/NSSound.h> + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +#include <Python.h> + + +#define GAJIM_POOL_ALLOC \ + NSAutoreleasePool *gajim_pool = [[NSAutoreleasePool alloc] init]; +#define GAJIM_POOL_FREE [gajim_pool release]; + + +static PyObject *netChangedCB = NULL; +static NSFileHandle* netNotifyFH = nil; +static int netNotifyToken = -1; + + +@implementation NSApplication (Gajim) + +- (void) initGUI +{ + [NSBundle loadNibNamed:@"Gajim" owner:NSApp]; +} + ++ (void) netNotifyCB: (NSNotification*) notif +{ + NSLog(@"Network changed notification"); + + if (netChangedCB) + { + PyObject_CallObject(netChangedCB, NULL); + } + + [[notif object] readInBackgroundAndNotify]; +} + +- (BOOL) initNetNotify +{ + int fd = 0; + + if (notify_register_file_descriptor( + "com.apple.system.config.network_change", &fd, 0, + &netNotifyToken) != NOTIFY_STATUS_OK) + { + return FALSE; + } + + netNotifyFH = [[NSFileHandle alloc] initWithFileDescriptor: fd]; + [[NSNotificationCenter defaultCenter] addObserver: [self class] + selector: @selector(netNotifyCB:) + name: NSFileHandleReadCompletionNotification + object: netNotifyFH]; + [netNotifyFH readInBackgroundAndNotify]; + + return TRUE; +} + +- (void) initGajim +{ + GAJIM_POOL_ALLOC + + [self initGUI]; + [self initNetNotify]; + + [NSApp setDelegate:self]; + [NSApp finishLaunching]; + + GAJIM_POOL_FREE +} + +- (void) orderFrontStandardAboutPanel: (id)sender +{ + PyRun_SimpleString("\n\ +import gobject\n\ +import dialogs\n\ +def doAbout():\n\ + dialogs.AboutDialog()\n\ + return None\n\ +gobject.idle_add(doAbout)\n\ +"); +} + +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender +{ +/* + PyRun_SimpleString("\n\ +import gajim\n\ +import gobject\n\ +def doQuit():\n\ + gajim.interface.roster.on_quit_menuitem_activate(None)\n\ + return None\n\ +gobject.idle_add(doQuit)\n\ +"); +*/ + return NSTerminateNow; +} + +- (BOOL) application:(NSApplication *)theApplication + openFile:(NSString *)filename +{ + NSLog(@"openFile"); + NSLog(filename); + return YES; +} + +- (void)application:(NSApplication *)sender openFiles:(NSArray *)filenames +{ + NSLog(@"openFiles"); + + NSEnumerator* iter = [filenames objectEnumerator]; + NSString* str; + while ((str = [iter nextObject])) + { + NSLog(str); + } + return; +} + +- (BOOL)applicationOpenUntitledFile:(NSApplication *)theApplication +{ + NSLog(@"openUntitledFile"); + return YES; +} + +- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender +{ + NSLog(@"shouldOpenUntitledFile"); + return YES; +} + +@end + + +static PyObject * nsapp_init(PyObject *self, PyObject *args) +{ + [NSApp initGajim]; + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * nsapp_setNetworkCB(PyObject *self, PyObject *args) +{ + PyArg_UnpackTuple(args, "netcb", 1, 1, &netChangedCB); + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * nsapp_requestUserAttention(PyObject *self, PyObject *args) +{ + GAJIM_POOL_ALLOC + [NSApp requestUserAttention:NSInformationalRequest]; + GAJIM_POOL_FREE + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * nsapp_playFile(PyObject *self, PyObject *args) +{ + GAJIM_POOL_ALLOC + + const char* cstr = NULL; + + if (!PyArg_ParseTuple(args, "s", &cstr)) + { + return NULL; + } + + NSSound* snd = [[NSSound alloc] initWithContentsOfFile: + [[NSString alloc] initWithUTF8String: cstr] + byReference: YES]; + if (!snd) + { + Py_INCREF(Py_None); + return Py_None; + } + + if (![snd play]) + { + Py_INCREF(Py_None); + return Py_None; + } + + GAJIM_POOL_FREE + + return Py_BuildValue("b", 1); +} + +static PyObject * nsapp_getBundlePath(PyObject *self, PyObject *args) +{ + GAJIM_POOL_ALLOC + + NSBundle* bundle = [NSBundle mainBundle]; + if (!bundle) + { + Py_INCREF(Py_None); + return Py_None; + } + + NSString* nspath = [bundle bundlePath]; + if (!nspath) + { + Py_INCREF(Py_None); + return Py_None; + } + + const char* path = [nspath UTF8String]; + PyObject* pypath = Py_BuildValue("s", path); + + GAJIM_POOL_FREE + + return pypath; +} + +static PyMethodDef nsappMethods[] = +{ + {"init", nsapp_init, METH_VARARGS, "init nsapp"}, + {"setNetworkCB", nsapp_setNetworkCB, METH_VARARGS, + "Callback to call when the network state changes"}, + {"getBundlePath", nsapp_getBundlePath, METH_VARARGS, + "Get the path to the bundle we were run from"}, + {"playFile", nsapp_playFile, METH_VARARGS, + "Play a sound file"}, + {"requestUserAttention", nsapp_requestUserAttention, METH_VARARGS, + "Sends a request for the users attention to the window manager"}, + {NULL, NULL, 0, NULL} +}; + +PyMODINIT_FUNC initnsapp(void) +{ + (void) Py_InitModule("nsapp", nsappMethods); +} diff --git a/src/osx/setup.py b/src/osx/setup.py new file mode 100644 index 000000000..2eaeb1bb9 --- /dev/null +++ b/src/osx/setup.py @@ -0,0 +1,20 @@ +from distutils.core import setup, Extension + +setup( + name = 'Gajim', + version = '0.11', + description = 'A full featured Jabber client', + author = 'Gajim Development Team', + url = 'http://www.gajim.org/', + download_url = 'http://www.gajim.org/downloads.php', + license = 'GPL', + + ext_modules=[ + Extension('idle', ['idle.c'], + extra_compile_args=['-Wall'], + extra_link_args=['-framework', 'IOKit', '-framework', 'Carbon']), + Extension('nsapp', ['nsapp.m'], + extra_compile_args=['-Wall'], + extra_link_args=['-framework', 'AppKit', '-framework', 'Cocoa']), + ] +) diff --git a/src/osx/syncmenu/.deps/syncmenu_la-pysyncmenu.Plo b/src/osx/syncmenu/.deps/syncmenu_la-pysyncmenu.Plo new file mode 100644 index 000000000..9ce06a81e --- /dev/null +++ b/src/osx/syncmenu/.deps/syncmenu_la-pysyncmenu.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/osx/syncmenu/.deps/syncmenu_la-sync-menu.Plo b/src/osx/syncmenu/.deps/syncmenu_la-sync-menu.Plo new file mode 100644 index 000000000..9ce06a81e --- /dev/null +++ b/src/osx/syncmenu/.deps/syncmenu_la-sync-menu.Plo @@ -0,0 +1 @@ +# dummy diff --git a/src/osx/syncmenu/Makefile b/src/osx/syncmenu/Makefile new file mode 100644 index 000000000..82364336a --- /dev/null +++ b/src/osx/syncmenu/Makefile @@ -0,0 +1,575 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# src/osx/syncmenu/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 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. + + + +srcdir = . +top_srcdir = ../../.. + +pkgdatadir = $(datadir)/gajim +pkglibdir = $(libdir)/gajim +pkgincludedir = $(includedir)/gajim +top_builddir = ../../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = /usr/bin/install -c +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 = i686-pc-linux-gnu +host_triplet = i686-pc-linux-gnu +subdir = src/osx/syncmenu +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ + $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(syncmenulibdir)" +syncmenulibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(syncmenulib_LTLIBRARIES) +syncmenu_la_LIBADD = +am__syncmenu_la_SOURCES_DIST = sync-menu.c pysyncmenu.c +#am_syncmenu_la_OBJECTS = syncmenu_la-sync-menu.lo \ +# syncmenu_la-pysyncmenu.lo +syncmenu_la_OBJECTS = $(am_syncmenu_la_OBJECTS) +#am_syncmenu_la_rpath = -rpath $(syncmenulibdir) +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(syncmenu_la_SOURCES) +DIST_SOURCES = $(am__syncmenu_la_SOURCES_DIST) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/asterix/gajim/missing --run aclocal-1.9 +ACLOCAL_AMFLAGS = ${ACLOCAL_FLAGS} +ALL_LINGUAS = +AMDEP_FALSE = # +AMDEP_TRUE = +AMTAR = ${SHELL} /home/asterix/gajim/missing --run tar +AR = ar +AUTOCONF = ${SHELL} /home/asterix/gajim/missing --run autoconf +AUTOHEADER = ${SHELL} /home/asterix/gajim/missing --run autoheader +AUTOMAKE = ${SHELL} /home/asterix/gajim/missing --run automake-1.9 +AWK = gawk +BUILD_CARBON_FALSE = +BUILD_CARBON_TRUE = # +BUILD_COCOA_FALSE = +BUILD_COCOA_TRUE = # +BUILD_GTKSPELL_FALSE = # +BUILD_GTKSPELL_TRUE = +BUILD_IDLE_FALSE = # +BUILD_IDLE_OSX_FALSE = +BUILD_IDLE_OSX_TRUE = # +BUILD_IDLE_TRUE = +BUILD_REMOTE_CONTROL_FALSE = # +BUILD_REMOTE_CONTROL_TRUE = +BUILD_TRAYICON_FALSE = # +BUILD_TRAYICON_TRUE = +CARBON_LIBS = +CATALOGS = +CATOBJEXT = .gmo +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +COCOA_LIBS = +CPP = gcc -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DATADIR = /usr/local/share +DATADIRNAME = share +DBUS_CFLAGS = -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include +DBUS_LIBS = -ldbus-1 +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DOCDIR = /usr/local/share/doc/gajim +ECHO = echo +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +F77 = +FFLAGS = +GETTEXT_PACKAGE = gajim +GMOFILES = +GMSGFMT = /usr/bin/msgfmt +GREP = /bin/grep +GTKSPELL_CFLAGS = -I/usr/include/gtkspell-2.0 -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 +GTKSPELL_LIBS = -lgtkspell -laspell -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lfontconfig -lXext -lXrender -lXinerama -lXi -lXrandr -lXcursor -lXcomposite -lXdamage -lpango-1.0 -lcairo -lX11 -lXfixes -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s +INSTOBJEXT = .mo +INTLLIBS = +INTLTOOL_CAVES_RULE = %.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_DESKTOP_RULE = %.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_DIRECTORY_RULE = %.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_EXTRACT = $(top_builddir)/intltool-extract +INTLTOOL_KBD_RULE = %.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_KEYS_RULE = %.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_MERGE = $(top_builddir)/intltool-merge +INTLTOOL_OAF_RULE = %.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -p $(top_srcdir)/po $< $@ +INTLTOOL_PERL = /usr/bin/perl +INTLTOOL_POLICY_RULE = %.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_PONG_RULE = %.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_PROP_RULE = %.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_SCHEMAS_RULE = %.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_SERVER_RULE = %.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_SERVICE_RULE = %.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_SHEET_RULE = %.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_SOUNDLIST_RULE = %.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_THEME_RULE = %.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_UI_RULE = %.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_UPDATE = $(top_builddir)/intltool-update +INTLTOOL_XAM_RULE = %.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +INTLTOOL_XML_NOMERGE_RULE = %.xml: %.xml.in $(INTLTOOL_MERGE) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u /tmp $< $@ +INTLTOOL_XML_RULE = %.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@ +LDFLAGS = +LIBDIR = /usr/local/lib +LIBOBJS = +LIBS = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LN_S = ln -s +LTLIBOBJS = +MAINT = # +MAINTAINER_MODE_FALSE = +MAINTAINER_MODE_TRUE = # +MAKEINFO = ${SHELL} /home/asterix/gajim/missing --run makeinfo +MKINSTALLDIRS = ./mkinstalldirs +MSGFMT = /usr/bin/msgfmt +MSGFMT_OPTS = -c +OBJEXT = o +PACKAGE = gajim +PACKAGE_BUGREPORT = http://trac.gajim.org/ +PACKAGE_NAME = Gajim - A Jabber Instant Messager +PACKAGE_STRING = Gajim - A Jabber Instant Messager 0.11.2.2-svn +PACKAGE_TARNAME = gajim +PACKAGE_VERSION = 0.11.2.2-svn +PATH_SEPARATOR = : +PKG_CONFIG = /usr/bin/pkg-config +POFILES = +POSUB = po +PO_IN_DATADIR_FALSE = +PO_IN_DATADIR_TRUE = +PYGTK_CFLAGS = -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/pygtk-2.0 +PYGTK_DEFS = /usr/share/pygtk/2.0/defs +PYGTK_LIBS = -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lfontconfig -lXext -lXrender -lXinerama -lXi -lXrandr -lXcursor -lXcomposite -lXdamage -lpango-1.0 -lcairo -lX11 -lXfixes -lgmodule-2.0 -ldl -lffi -lgobject-2.0 -lglib-2.0 +PYTHON = /usr/bin/python +PYTHON_EXEC_PREFIX = ${exec_prefix} +PYTHON_INCLUDES = -I/usr/include/python2.4 +PYTHON_PLATFORM = linux2 +PYTHON_PREFIX = ${prefix} +PYTHON_VERSION = 2.4 +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/sh +STRIP = strip +USE_NLS = yes +VERSION = 0.11.2.2-svn +XGETTEXT = /usr/bin/xgettext +XMKMF = +XSCRNSAVER_CFLAGS = +XSCRNSAVER_LIBS = -lXss +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_F77 = +am__fastdepCC_FALSE = # +am__fastdepCC_TRUE = +am__fastdepCXX_FALSE = # +am__fastdepCXX_TRUE = +am__fastdepOBJC_FALSE = +am__fastdepOBJC_TRUE = # +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = i686-pc-linux-gnu +build_alias = +build_cpu = i686 +build_os = linux-gnu +build_vendor = pc +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = i686-pc-linux-gnu +host_alias = +host_cpu = i686 +host_os = linux-gnu +host_vendor = pc +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = /home/asterix/gajim/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} +pkgpyexecdir = ${pyexecdir}/gajim +pkgpythondir = ${pythondir}/gajim +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +pyexecdir = ${exec_prefix}/lib/python2.4/site-packages +pythondir = ${prefix}/lib/python2.4/site-packages +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +sysconfdir = ${prefix}/etc +target_alias = +GTKPATH = "/Library/Frameworks/GTK+.framework/Versions/Current/bin" +INCLUDES = $(PYTHON_INCLUDES) +GTKLDFLAGS = `$(GTKPATH)/pkg-config --libs gtk+-2.0 pygobject-2.0` +GTKCFLAGS = `$(GTKPATH)/pkg-config --cflags gtk+-2.0 pygobject-2.0` +#syncmenulib_LTLIBRARIES = syncmenu.la +#syncmenulibdir = $(libdir)/gajim +#syncmenu_la_SOURCES = sync-menu.c pysyncmenu.c +#syncmenu_la_LDFLAGS = -module -avoid-version $(GTKLDFLAGS) +#syncmenu_la_CFLAGS = $(GTKCFLAGS) -Wall -g $(INCLUDES) +DISTCLEANFILES = +EXTRA_DIST = +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .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 \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/osx/syncmenu/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/osx/syncmenu/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 +install-syncmenulibLTLIBRARIES: $(syncmenulib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(syncmenulibdir)" || $(mkdir_p) "$(DESTDIR)$(syncmenulibdir)" + @list='$(syncmenulib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=install $(syncmenulibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(syncmenulibdir)/$$f'"; \ + $(LIBTOOL) --mode=install $(syncmenulibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(syncmenulibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-syncmenulibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @set -x; list='$(syncmenulib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(syncmenulibdir)/$$p'"; \ + $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(syncmenulibdir)/$$p"; \ + done + +clean-syncmenulibLTLIBRARIES: + -test -z "$(syncmenulib_LTLIBRARIES)" || rm -f $(syncmenulib_LTLIBRARIES) + @list='$(syncmenulib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +syncmenu.la: $(syncmenu_la_OBJECTS) $(syncmenu_la_DEPENDENCIES) + $(LINK) $(am_syncmenu_la_rpath) $(syncmenu_la_LDFLAGS) $(syncmenu_la_OBJECTS) $(syncmenu_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/syncmenu_la-pysyncmenu.Plo +include ./$(DEPDIR)/syncmenu_la-sync-menu.Plo + +.c.o: + if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ + then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ + then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: + if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ + then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LTCOMPILE) -c -o $@ $< + +syncmenu_la-sync-menu.lo: sync-menu.c + if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(syncmenu_la_CFLAGS) $(CFLAGS) -MT syncmenu_la-sync-menu.lo -MD -MP -MF "$(DEPDIR)/syncmenu_la-sync-menu.Tpo" -c -o syncmenu_la-sync-menu.lo `test -f 'sync-menu.c' || echo '$(srcdir)/'`sync-menu.c; \ + then mv -f "$(DEPDIR)/syncmenu_la-sync-menu.Tpo" "$(DEPDIR)/syncmenu_la-sync-menu.Plo"; else rm -f "$(DEPDIR)/syncmenu_la-sync-menu.Tpo"; exit 1; fi +# source='sync-menu.c' object='syncmenu_la-sync-menu.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(syncmenu_la_CFLAGS) $(CFLAGS) -c -o syncmenu_la-sync-menu.lo `test -f 'sync-menu.c' || echo '$(srcdir)/'`sync-menu.c + +syncmenu_la-pysyncmenu.lo: pysyncmenu.c + if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(syncmenu_la_CFLAGS) $(CFLAGS) -MT syncmenu_la-pysyncmenu.lo -MD -MP -MF "$(DEPDIR)/syncmenu_la-pysyncmenu.Tpo" -c -o syncmenu_la-pysyncmenu.lo `test -f 'pysyncmenu.c' || echo '$(srcdir)/'`pysyncmenu.c; \ + then mv -f "$(DEPDIR)/syncmenu_la-pysyncmenu.Tpo" "$(DEPDIR)/syncmenu_la-pysyncmenu.Plo"; else rm -f "$(DEPDIR)/syncmenu_la-pysyncmenu.Tpo"; exit 1; fi +# source='pysyncmenu.c' object='syncmenu_la-pysyncmenu.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(syncmenu_la_CFLAGS) $(CFLAGS) -c -o syncmenu_la-pysyncmenu.lo `test -f 'pysyncmenu.c' || echo '$(srcdir)/'`pysyncmenu.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +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)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$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 $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(syncmenulibdir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-syncmenulibLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-syncmenulibLTLIBRARIES + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -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: uninstall-info-am uninstall-syncmenulibLTLIBRARIES + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-syncmenulibLTLIBRARIES ctags 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-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip install-syncmenulibLTLIBRARIES installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-info-am \ + uninstall-syncmenulibLTLIBRARIES + + +export MACOSX_DEPLOYMENT_TARGET=10.4 +# 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: diff --git a/src/osx/syncmenu/Makefile.am b/src/osx/syncmenu/Makefile.am new file mode 100644 index 000000000..797476559 --- /dev/null +++ b/src/osx/syncmenu/Makefile.am @@ -0,0 +1,21 @@ +GTKPATH="/Library/Frameworks/GTK+.framework/Versions/Current/bin" + +export MACOSX_DEPLOYMENT_TARGET=10.4 +INCLUDES = $(PYTHON_INCLUDES) + +GTKLDFLAGS=`$(GTKPATH)/pkg-config --libs gtk+-2.0 pygobject-2.0` +GTKCFLAGS=`$(GTKPATH)/pkg-config --cflags gtk+-2.0 pygobject-2.0` + +if BUILD_COCOA +syncmenulib_LTLIBRARIES = syncmenu.la +syncmenulibdir = $(libdir)/gajim +syncmenu_la_SOURCES = sync-menu.c pysyncmenu.c +syncmenu_la_LDFLAGS = -module -avoid-version $(GTKLDFLAGS) +syncmenu_la_CFLAGS = $(GTKCFLAGS) -Wall -g $(INCLUDES) +endif + +DISTCLEANFILES = + +EXTRA_DIST = + +MAINTAINERCLEANFILES = Makefile.in diff --git a/src/osx/syncmenu/Makefile.in b/src/osx/syncmenu/Makefile.in new file mode 100644 index 000000000..bae1c97d9 --- /dev/null +++ b/src/osx/syncmenu/Makefile.in @@ -0,0 +1,575 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 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. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = ../../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +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 = @build@ +host_triplet = @host@ +subdir = src/osx/syncmenu +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/acinclude.m4 \ + $(top_srcdir)/m4/intltool.m4 $(top_srcdir)/m4/nls.m4 \ + $(top_srcdir)/m4/python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__installdirs = "$(DESTDIR)$(syncmenulibdir)" +syncmenulibLTLIBRARIES_INSTALL = $(INSTALL) +LTLIBRARIES = $(syncmenulib_LTLIBRARIES) +syncmenu_la_LIBADD = +am__syncmenu_la_SOURCES_DIST = sync-menu.c pysyncmenu.c +@BUILD_COCOA_TRUE@am_syncmenu_la_OBJECTS = syncmenu_la-sync-menu.lo \ +@BUILD_COCOA_TRUE@ syncmenu_la-pysyncmenu.lo +syncmenu_la_OBJECTS = $(am_syncmenu_la_OBJECTS) +@BUILD_COCOA_TRUE@am_syncmenu_la_rpath = -rpath $(syncmenulibdir) +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(syncmenu_la_SOURCES) +DIST_SOURCES = $(am__syncmenu_la_SOURCES_DIST) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +ALL_LINGUAS = @ALL_LINGUAS@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BUILD_CARBON_FALSE = @BUILD_CARBON_FALSE@ +BUILD_CARBON_TRUE = @BUILD_CARBON_TRUE@ +BUILD_COCOA_FALSE = @BUILD_COCOA_FALSE@ +BUILD_COCOA_TRUE = @BUILD_COCOA_TRUE@ +BUILD_GTKSPELL_FALSE = @BUILD_GTKSPELL_FALSE@ +BUILD_GTKSPELL_TRUE = @BUILD_GTKSPELL_TRUE@ +BUILD_IDLE_FALSE = @BUILD_IDLE_FALSE@ +BUILD_IDLE_OSX_FALSE = @BUILD_IDLE_OSX_FALSE@ +BUILD_IDLE_OSX_TRUE = @BUILD_IDLE_OSX_TRUE@ +BUILD_IDLE_TRUE = @BUILD_IDLE_TRUE@ +BUILD_REMOTE_CONTROL_FALSE = @BUILD_REMOTE_CONTROL_FALSE@ +BUILD_REMOTE_CONTROL_TRUE = @BUILD_REMOTE_CONTROL_TRUE@ +BUILD_TRAYICON_FALSE = @BUILD_TRAYICON_FALSE@ +BUILD_TRAYICON_TRUE = @BUILD_TRAYICON_TRUE@ +CARBON_LIBS = @CARBON_LIBS@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +COCOA_LIBS = @COCOA_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIR = @DATADIR@ +DATADIRNAME = @DATADIRNAME@ +DBUS_CFLAGS = @DBUS_CFLAGS@ +DBUS_LIBS = @DBUS_LIBS@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCDIR = @DOCDIR@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GREP = @GREP@ +GTKSPELL_CFLAGS = @GTKSPELL_CFLAGS@ +GTKSPELL_LIBS = @GTKSPELL_LIBS@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INSTOBJEXT = @INSTOBJEXT@ +INTLLIBS = @INTLLIBS@ +INTLTOOL_CAVES_RULE = @INTLTOOL_CAVES_RULE@ +INTLTOOL_DESKTOP_RULE = @INTLTOOL_DESKTOP_RULE@ +INTLTOOL_DIRECTORY_RULE = @INTLTOOL_DIRECTORY_RULE@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +INTLTOOL_KBD_RULE = @INTLTOOL_KBD_RULE@ +INTLTOOL_KEYS_RULE = @INTLTOOL_KEYS_RULE@ +INTLTOOL_MERGE = @INTLTOOL_MERGE@ +INTLTOOL_OAF_RULE = @INTLTOOL_OAF_RULE@ +INTLTOOL_PERL = @INTLTOOL_PERL@ +INTLTOOL_POLICY_RULE = @INTLTOOL_POLICY_RULE@ +INTLTOOL_PONG_RULE = @INTLTOOL_PONG_RULE@ +INTLTOOL_PROP_RULE = @INTLTOOL_PROP_RULE@ +INTLTOOL_SCHEMAS_RULE = @INTLTOOL_SCHEMAS_RULE@ +INTLTOOL_SERVER_RULE = @INTLTOOL_SERVER_RULE@ +INTLTOOL_SERVICE_RULE = @INTLTOOL_SERVICE_RULE@ +INTLTOOL_SHEET_RULE = @INTLTOOL_SHEET_RULE@ +INTLTOOL_SOUNDLIST_RULE = @INTLTOOL_SOUNDLIST_RULE@ +INTLTOOL_THEME_RULE = @INTLTOOL_THEME_RULE@ +INTLTOOL_UI_RULE = @INTLTOOL_UI_RULE@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_XAM_RULE = @INTLTOOL_XAM_RULE@ +INTLTOOL_XML_NOMERGE_RULE = @INTLTOOL_XML_NOMERGE_RULE@ +INTLTOOL_XML_RULE = @INTLTOOL_XML_RULE@ +LDFLAGS = @LDFLAGS@ +LIBDIR = @LIBDIR@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGFMT_OPTS = @MSGFMT_OPTS@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POFILES = @POFILES@ +POSUB = @POSUB@ +PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ +PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ +PYGTK_CFLAGS = @PYGTK_CFLAGS@ +PYGTK_DEFS = @PYGTK_DEFS@ +PYGTK_LIBS = @PYGTK_LIBS@ +PYTHON = @PYTHON@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XMKMF = @XMKMF@ +XSCRNSAVER_CFLAGS = @XSCRNSAVER_CFLAGS@ +XSCRNSAVER_LIBS = @XSCRNSAVER_LIBS@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__fastdepOBJC_FALSE = @am__fastdepOBJC_FALSE@ +am__fastdepOBJC_TRUE = @am__fastdepOBJC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +GTKPATH = "/Library/Frameworks/GTK+.framework/Versions/Current/bin" +INCLUDES = $(PYTHON_INCLUDES) +GTKLDFLAGS = `$(GTKPATH)/pkg-config --libs gtk+-2.0 pygobject-2.0` +GTKCFLAGS = `$(GTKPATH)/pkg-config --cflags gtk+-2.0 pygobject-2.0` +@BUILD_COCOA_TRUE@syncmenulib_LTLIBRARIES = syncmenu.la +@BUILD_COCOA_TRUE@syncmenulibdir = $(libdir)/gajim +@BUILD_COCOA_TRUE@syncmenu_la_SOURCES = sync-menu.c pysyncmenu.c +@BUILD_COCOA_TRUE@syncmenu_la_LDFLAGS = -module -avoid-version $(GTKLDFLAGS) +@BUILD_COCOA_TRUE@syncmenu_la_CFLAGS = $(GTKCFLAGS) -Wall -g $(INCLUDES) +DISTCLEANFILES = +EXTRA_DIST = +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/osx/syncmenu/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/osx/syncmenu/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +install-syncmenulibLTLIBRARIES: $(syncmenulib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(syncmenulibdir)" || $(mkdir_p) "$(DESTDIR)$(syncmenulibdir)" + @list='$(syncmenulib_LTLIBRARIES)'; for p in $$list; do \ + if test -f $$p; then \ + f=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=install $(syncmenulibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(syncmenulibdir)/$$f'"; \ + $(LIBTOOL) --mode=install $(syncmenulibLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(syncmenulibdir)/$$f"; \ + else :; fi; \ + done + +uninstall-syncmenulibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @set -x; list='$(syncmenulib_LTLIBRARIES)'; for p in $$list; do \ + p=$(am__strip_dir) \ + echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(syncmenulibdir)/$$p'"; \ + $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(syncmenulibdir)/$$p"; \ + done + +clean-syncmenulibLTLIBRARIES: + -test -z "$(syncmenulib_LTLIBRARIES)" || rm -f $(syncmenulib_LTLIBRARIES) + @list='$(syncmenulib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +syncmenu.la: $(syncmenu_la_OBJECTS) $(syncmenu_la_DEPENDENCIES) + $(LINK) $(am_syncmenu_la_rpath) $(syncmenu_la_LDFLAGS) $(syncmenu_la_OBJECTS) $(syncmenu_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syncmenu_la-pysyncmenu.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syncmenu_la-sync-menu.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +syncmenu_la-sync-menu.lo: sync-menu.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(syncmenu_la_CFLAGS) $(CFLAGS) -MT syncmenu_la-sync-menu.lo -MD -MP -MF "$(DEPDIR)/syncmenu_la-sync-menu.Tpo" -c -o syncmenu_la-sync-menu.lo `test -f 'sync-menu.c' || echo '$(srcdir)/'`sync-menu.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/syncmenu_la-sync-menu.Tpo" "$(DEPDIR)/syncmenu_la-sync-menu.Plo"; else rm -f "$(DEPDIR)/syncmenu_la-sync-menu.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sync-menu.c' object='syncmenu_la-sync-menu.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(syncmenu_la_CFLAGS) $(CFLAGS) -c -o syncmenu_la-sync-menu.lo `test -f 'sync-menu.c' || echo '$(srcdir)/'`sync-menu.c + +syncmenu_la-pysyncmenu.lo: pysyncmenu.c +@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(syncmenu_la_CFLAGS) $(CFLAGS) -MT syncmenu_la-pysyncmenu.lo -MD -MP -MF "$(DEPDIR)/syncmenu_la-pysyncmenu.Tpo" -c -o syncmenu_la-pysyncmenu.lo `test -f 'pysyncmenu.c' || echo '$(srcdir)/'`pysyncmenu.c; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/syncmenu_la-pysyncmenu.Tpo" "$(DEPDIR)/syncmenu_la-pysyncmenu.Plo"; else rm -f "$(DEPDIR)/syncmenu_la-pysyncmenu.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pysyncmenu.c' object='syncmenu_la-pysyncmenu.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(syncmenu_la_CFLAGS) $(CFLAGS) -c -o syncmenu_la-pysyncmenu.lo `test -f 'pysyncmenu.c' || echo '$(srcdir)/'`pysyncmenu.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +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)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$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 $(LTLIBRARIES) +installdirs: + for dir in "$(DESTDIR)$(syncmenulibdir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +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: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-syncmenulibLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-syncmenulibLTLIBRARIES + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -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: uninstall-info-am uninstall-syncmenulibLTLIBRARIES + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-syncmenulibLTLIBRARIES ctags 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-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip install-syncmenulibLTLIBRARIES installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-info-am \ + uninstall-syncmenulibLTLIBRARIES + + +export MACOSX_DEPLOYMENT_TARGET=10.4 +# 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: diff --git a/src/osx/syncmenu/pysyncmenu.c b/src/osx/syncmenu/pysyncmenu.c new file mode 100644 index 000000000..d2e304f9f --- /dev/null +++ b/src/osx/syncmenu/pysyncmenu.c @@ -0,0 +1,55 @@ +#include <errno.h> +#include <string.h> +#include <Python.h> +#include <pygobject.h> +#include "sync-menu.h" + + +PyDoc_STRVAR(pysync_menu_takeover_menu__doc__, +"Receives: a GtkMenuShell\n" +"Returns:\n"); + +static PyObject *pysync_menu_takeover_menu(PyObject *s, PyObject *args) +{ + PyObject *obj = NULL; + + if (!PyArg_ParseTuple(args, "O:GtkMenuShell", &obj)) + { + PyErr_SetString(PyExc_TypeError, "Failed to process parameter1"); + return NULL; + } + + Py_INCREF(obj); + + GtkMenuShell* menu = pyg_boxed_get(obj, GtkMenuShell); + if (!menu) + { + PyErr_SetString(PyExc_TypeError, "Failed to process parameter2"); + return NULL; + } + + sync_menu_takeover_menu(menu); + + Py_INCREF(Py_None); + return Py_None; +} + +static PyMethodDef syncmenuModuleMethods[] = +{ + {"takeover_menu", (PyCFunction)pysync_menu_takeover_menu, + METH_VARARGS, pysync_menu_takeover_menu__doc__}, + {NULL} +}; + +PyDoc_STRVAR(modsyncmenu__doc__, + "GTK+ Integration for the Mac OS X Menubar.\n"); + +void initsyncmenu(void) +{ + if (!Py_InitModule3("syncmenu", syncmenuModuleMethods, modsyncmenu__doc__)) + { + PyErr_SetString(PyExc_ImportError, + "Py_InitModule3(\"syncmenu\") failed"); + return; + } +} diff --git a/src/osx/syncmenu/setup.py b/src/osx/syncmenu/setup.py new file mode 100644 index 000000000..7b20709f9 --- /dev/null +++ b/src/osx/syncmenu/setup.py @@ -0,0 +1,27 @@ +from distutils.core import setup, Extension +import commands + + +retval, output = commands.getstatusoutput("pkg-config --cflags gtk+-2.0 pygtk-2.0") +if retval != 0: + print "Failed to find package details for gtk+-2.0" + print + print output + sys.exit(1) +cflags = output.strip().split() +retval, output = commands.getstatusoutput("pkg-config --libs gtk+-2.0 pygtk-2.0") +if retval != 0: + print "Failed to find package details for gtk+-2.0" + print + print output + sys.exit(1) +libs = output.strip().split() + + +setup(name='syncmenu', version='0.2', + author='James Newton', author_email='baron@codepunks.org', + ext_modules=[ + Extension('syncmenu', ['pysyncmenu.c', 'sync-menu.c'], + extra_link_args=libs + ['-framework', 'Carbon'], + extra_compile_args=['-Wall'] + cflags) + ]) diff --git a/src/osx/syncmenu/sync-menu.c b/src/osx/syncmenu/sync-menu.c new file mode 100644 index 000000000..dde97d7f1 --- /dev/null +++ b/src/osx/syncmenu/sync-menu.c @@ -0,0 +1,722 @@ +/* GTK+ Integration for the Mac OS X Menubar. + * + * Copyright (C) 2007 Pioneer Research Center USA, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include <gtk/gtk.h> +#include <gdk/gdkkeysyms.h> + +#include <Carbon/Carbon.h> + +#include "sync-menu.h" + + +/* TODO + * + * - Setup shortcuts, possibly transforming ctrl->cmd + * - Sync menus + * - Create on demand? (can this be done with gtk+? ie fill in menu items when the menu is opened) + * - Figure out what to do per app/window... + * - Toggle/radio items + * + */ + +#define GTK_QUARTZ_MENU_CREATOR 'GTKC' +#define GTK_QUARTZ_ITEM_WIDGET 'GWID' + + +static void sync_menu_shell (GtkMenuShell *menu_shell, + MenuRef carbon_menu, + gboolean toplevel); + + +/* + * utility functions + */ + +static GtkWidget * +find_menu_label (GtkWidget *widget) +{ + GtkWidget *label = NULL; + + if (GTK_IS_LABEL (widget)) + return widget; + + if (GTK_IS_CONTAINER (widget)) + { + GList *children; + GList *l; + + children = gtk_container_get_children (GTK_CONTAINER (widget)); + + for (l = children; l; l = l->next) + { + label = find_menu_label (l->data); + if (label) + break; + } + + g_list_free (children); + } + + return label; +} + +static const gchar * +get_menu_label_text (GtkWidget *menu_item, + GtkWidget **label) +{ + *label = find_menu_label (menu_item); + if (!*label) + return NULL; + + return gtk_label_get_text (GTK_LABEL (*label)); +} + +static gboolean +accel_find_func (GtkAccelKey *key, + GClosure *closure, + gpointer data) +{ + return (GClosure *) data == closure; +} + + +/* + * CarbonMenu functions + */ + +typedef struct +{ + MenuRef menu; +} CarbonMenu; + +static GQuark carbon_menu_quark = 0; + +static CarbonMenu * +carbon_menu_new (void) +{ + return g_slice_new0 (CarbonMenu); +} + +static void +carbon_menu_free (CarbonMenu *menu) +{ + g_slice_free (CarbonMenu, menu); +} + +static CarbonMenu * +carbon_menu_get (GtkWidget *widget) +{ + return g_object_get_qdata (G_OBJECT (widget), carbon_menu_quark); +} + +static void +carbon_menu_connect (GtkWidget *menu, + MenuRef menuRef) +{ + CarbonMenu *carbon_menu = carbon_menu_get (menu); + + if (!carbon_menu) + { + carbon_menu = carbon_menu_new (); + + g_object_set_qdata_full (G_OBJECT (menu), carbon_menu_quark, + carbon_menu, + (GDestroyNotify) carbon_menu_free); + } + + carbon_menu->menu = menuRef; +} + + +/* + * CarbonMenuItem functions + */ + +typedef struct +{ + MenuRef menu; + MenuItemIndex index; + MenuRef submenu; + GClosure *accel_closure; +} CarbonMenuItem; + +static GQuark carbon_menu_item_quark = 0; + +static CarbonMenuItem * +carbon_menu_item_new (void) +{ + return g_slice_new0 (CarbonMenuItem); +} + +static void +carbon_menu_item_free (CarbonMenuItem *menu_item) +{ + if (menu_item->accel_closure) + g_closure_unref (menu_item->accel_closure); + + g_slice_free (CarbonMenuItem, menu_item); +} + +static CarbonMenuItem * +carbon_menu_item_get (GtkWidget *widget) +{ + return g_object_get_qdata (G_OBJECT (widget), carbon_menu_item_quark); +} + +static void +carbon_menu_item_update_state (CarbonMenuItem *carbon_item, + GtkWidget *widget) +{ + gboolean sensitive; + gboolean visible; + UInt32 set_attrs = 0; + UInt32 clear_attrs = 0; + + g_object_get (widget, + "sensitive", &sensitive, + "visible", &visible, + NULL); + + if (!sensitive) + set_attrs |= kMenuItemAttrDisabled; + else + clear_attrs |= kMenuItemAttrDisabled; + + if (!visible) + set_attrs |= kMenuItemAttrHidden; + else + clear_attrs |= kMenuItemAttrHidden; + + ChangeMenuItemAttributes (carbon_item->menu, carbon_item->index, + set_attrs, clear_attrs); +} + +static void +carbon_menu_item_update_active (CarbonMenuItem *carbon_item, + GtkWidget *widget) +{ + gboolean active; + + g_object_get (widget, + "active", &active, + NULL); + + CheckMenuItem (carbon_item->menu, carbon_item->index, + active); +} + +static void +carbon_menu_item_update_submenu (CarbonMenuItem *carbon_item, + GtkWidget *widget) +{ + GtkWidget *submenu; + + submenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (widget)); + + if (submenu) + { + GtkWidget *label = NULL; + + carbon_item->submenu = NULL; + GetMenuItemHierarchicalMenu(carbon_item->menu, carbon_item->index, + &carbon_item->submenu); + if (!carbon_item->submenu) + { + const gchar *label_text; + CFStringRef cfstr = NULL; + + label_text = get_menu_label_text (widget, &label); + if (label_text) + cfstr = CFStringCreateWithCString (NULL, label_text, + kCFStringEncodingUTF8); + CreateNewMenu (0, 0, &carbon_item->submenu); + SetMenuTitleWithCFString (carbon_item->submenu, cfstr); + SetMenuItemHierarchicalMenu (carbon_item->menu, carbon_item->index, + carbon_item->submenu); + if (cfstr) + CFRelease (cfstr); + } + + sync_menu_shell (GTK_MENU_SHELL (submenu), carbon_item->submenu, FALSE); + } + else + { + SetMenuItemHierarchicalMenu (carbon_item->menu, carbon_item->index, + NULL); + carbon_item->submenu = NULL; + } +} + +static void +carbon_menu_item_update_label (CarbonMenuItem *carbon_item, + GtkWidget *widget) +{ + GtkWidget *label; + const gchar *label_text; + CFStringRef cfstr = NULL; + + label_text = get_menu_label_text (widget, &label); + if (label_text) + cfstr = CFStringCreateWithCString (NULL, label_text, + kCFStringEncodingUTF8); + + SetMenuItemTextWithCFString (carbon_item->menu, carbon_item->index, + cfstr); + + if (cfstr) + CFRelease (cfstr); +} + +static void +carbon_menu_item_update_accelerator (CarbonMenuItem *carbon_item, + GtkWidget *widget) +{ + GtkWidget *label; + + get_menu_label_text (widget, &label); + + if (GTK_IS_ACCEL_LABEL (label) && + GTK_ACCEL_LABEL (label)->accel_closure) + { + GtkAccelKey *key; + + key = gtk_accel_group_find (GTK_ACCEL_LABEL (label)->accel_group, + accel_find_func, + GTK_ACCEL_LABEL (label)->accel_closure); + + if (key && + key->accel_key && + key->accel_flags & GTK_ACCEL_VISIBLE) + { + GdkDisplay *display = gtk_widget_get_display (widget); + GdkKeymap *keymap = gdk_keymap_get_for_display (display); + GdkKeymapKey *keys; + gint n_keys; + + if (gdk_keymap_get_entries_for_keyval (keymap, key->accel_key, + &keys, &n_keys)) + { + UInt8 modifiers = 0; + + SetMenuItemCommandKey (carbon_item->menu, carbon_item->index, + true, keys[0].keycode); + + g_free (keys); + + if (key->accel_mods) + { + if (key->accel_mods & GDK_SHIFT_MASK) + modifiers |= kMenuShiftModifier; + + if (key->accel_mods & GDK_MOD1_MASK) + modifiers |= kMenuOptionModifier; + } + + if (!(key->accel_mods & GDK_CONTROL_MASK)) + { + modifiers |= kMenuNoCommandModifier; + } + + SetMenuItemModifiers (carbon_item->menu, carbon_item->index, + modifiers); + + return; + } + } + } + + /* otherwise, clear the menu shortcut */ + SetMenuItemModifiers (carbon_item->menu, carbon_item->index, + kMenuNoModifiers | kMenuNoCommandModifier); + ChangeMenuItemAttributes (carbon_item->menu, carbon_item->index, + 0, kMenuItemAttrUseVirtualKey); + SetMenuItemCommandKey (carbon_item->menu, carbon_item->index, + false, 0); +} + +static void +carbon_menu_item_accel_changed (GtkAccelGroup *accel_group, + guint keyval, + GdkModifierType modifier, + GClosure *accel_closure, + GtkWidget *widget) +{ + CarbonMenuItem *carbon_item = carbon_menu_item_get (widget); + GtkWidget *label; + + get_menu_label_text (widget, &label); + + if (GTK_IS_ACCEL_LABEL (label) && + GTK_ACCEL_LABEL (label)->accel_closure == accel_closure) + carbon_menu_item_update_accelerator (carbon_item, widget); +} + +static void +carbon_menu_item_update_accel_closure (CarbonMenuItem *carbon_item, + GtkWidget *widget) +{ + GtkAccelGroup *group; + GtkWidget *label; + + get_menu_label_text (widget, &label); + + if (carbon_item->accel_closure) + { + group = gtk_accel_group_from_accel_closure (carbon_item->accel_closure); + if (group) + g_signal_handlers_disconnect_by_func (group, + carbon_menu_item_accel_changed, + widget); + + g_closure_unref (carbon_item->accel_closure); + carbon_item->accel_closure = NULL; + } + + if (GTK_IS_ACCEL_LABEL (label)) + carbon_item->accel_closure = GTK_ACCEL_LABEL (label)->accel_closure; + + if (carbon_item->accel_closure) + { + g_closure_ref (carbon_item->accel_closure); + + group = gtk_accel_group_from_accel_closure (carbon_item->accel_closure); + + g_signal_connect_object (group, "accel-changed", + G_CALLBACK (carbon_menu_item_accel_changed), + widget, 0); + } + + carbon_menu_item_update_accelerator (carbon_item, widget); +} + +static void +carbon_menu_item_notify (GObject *object, + GParamSpec *pspec, + CarbonMenuItem *carbon_item) +{ + if (!strcmp (pspec->name, "sensitive") || + !strcmp (pspec->name, "visible")) + { + carbon_menu_item_update_state (carbon_item, GTK_WIDGET (object)); + } + else if (!strcmp (pspec->name, "active")) + { + carbon_menu_item_update_active (carbon_item, GTK_WIDGET (object)); + } + else if (!strcmp (pspec->name, "submenu")) + { + carbon_menu_item_update_submenu (carbon_item, GTK_WIDGET (object)); + } +} + +static void +carbon_menu_item_notify_label (GObject *object, + GParamSpec *pspec, + gpointer data) +{ + CarbonMenuItem *carbon_item = carbon_menu_item_get (GTK_WIDGET (object)); + + if (!strcmp (pspec->name, "label")) + { + carbon_menu_item_update_label (carbon_item, + GTK_WIDGET (object)); + } + else if (!strcmp (pspec->name, "accel-closure")) + { + carbon_menu_item_update_accel_closure (carbon_item, + GTK_WIDGET (object)); + } +} + +static CarbonMenuItem * +carbon_menu_item_connect (GtkWidget *menu_item, + GtkWidget *label, + MenuRef menu, + MenuItemIndex index) +{ + CarbonMenuItem *carbon_item = carbon_menu_item_get (menu_item); + + if (!carbon_item) + { + carbon_item = carbon_menu_item_new (); + + g_object_set_qdata_full (G_OBJECT (menu_item), carbon_menu_item_quark, + carbon_item, + (GDestroyNotify) carbon_menu_item_free); + + g_signal_connect (menu_item, "notify", + G_CALLBACK (carbon_menu_item_notify), + carbon_item); + + if (label) + g_signal_connect_swapped (label, "notify::label", + G_CALLBACK (carbon_menu_item_notify_label), + menu_item); + } + + carbon_item->menu = menu; + carbon_item->index = index; + + return carbon_item; +} + + +/* + * carbon event handler + */ + +static OSStatus +menu_event_handler_func (EventHandlerCallRef event_handler_call_ref, + EventRef event_ref, + void *data) +{ + UInt32 event_class = GetEventClass (event_ref); + UInt32 event_kind = GetEventKind (event_ref); + MenuRef menu_ref; + + switch (event_class) + { + case kEventClassCommand: + /* This is called when activating (is that the right GTK+ term?) + * a menu item. + */ + if (event_kind == kEventCommandProcess) + { + HICommand command; + OSStatus err; + + //g_print ("Menu: kEventClassCommand/kEventCommandProcess\n"); + + err = GetEventParameter (event_ref, kEventParamDirectObject, + typeHICommand, 0, + sizeof (command), 0, &command); + + if (err == noErr) + { + GtkWidget *widget = NULL; + + if (command.commandID == kHICommandQuit) + { + gtk_main_quit (); /* Just testing... */ + return noErr; + } + + /* Get any GtkWidget associated with the item. */ + err = GetMenuItemProperty (command.menu.menuRef, + command.menu.menuItemIndex, + GTK_QUARTZ_MENU_CREATOR, + GTK_QUARTZ_ITEM_WIDGET, + sizeof (widget), 0, &widget); + if (err == noErr && widget) + { + gtk_menu_item_activate (GTK_MENU_ITEM (widget)); + return noErr; + } + } + } + break; + + case kEventClassMenu: + GetEventParameter (event_ref, + kEventParamDirectObject, + typeMenuRef, + NULL, + sizeof (menu_ref), + NULL, + &menu_ref); + + switch (event_kind) + { + case kEventMenuTargetItem: + /* This is called when an item is selected (what is the + * GTK+ term? prelight?) + */ + //g_print ("kEventClassMenu/kEventMenuTargetItem\n"); + break; + + case kEventMenuOpening: + /* Is it possible to dynamically build the menu here? We + * can at least set visibility/sensitivity. + */ + //g_print ("kEventClassMenu/kEventMenuOpening\n"); + break; + + case kEventMenuClosed: + //g_print ("kEventClassMenu/kEventMenuClosed\n"); + break; + + default: + break; + } + + break; + + default: + break; + } + + return CallNextEventHandler (event_handler_call_ref, event_ref); +} + +static void +setup_menu_event_handler (void) +{ + EventHandlerUPP menu_event_handler_upp; + EventHandlerRef menu_event_handler_ref; + const EventTypeSpec menu_events[] = { + { kEventClassCommand, kEventCommandProcess }, + { kEventClassMenu, kEventMenuTargetItem }, + { kEventClassMenu, kEventMenuOpening }, + { kEventClassMenu, kEventMenuClosed } + }; + + /* FIXME: We might have to install one per window? */ + + menu_event_handler_upp = NewEventHandlerUPP (menu_event_handler_func); + InstallEventHandler (GetApplicationEventTarget (), menu_event_handler_upp, + GetEventTypeCount (menu_events), menu_events, 0, + &menu_event_handler_ref); + +#if 0 + /* FIXME: Remove the handler with: */ + RemoveEventHandler(menu_event_handler_ref); + DisposeEventHandlerUPP(menu_event_handler_upp); +#endif +} + +static void +sync_menu_shell (GtkMenuShell *menu_shell, + MenuRef carbon_menu, + gboolean toplevel) +{ + GList *children; + GList *l; + MenuItemIndex carbon_index = 1; + + carbon_menu_connect (GTK_WIDGET (menu_shell), carbon_menu); + + children = gtk_container_get_children (GTK_CONTAINER (menu_shell)); + + UInt16 carbon_item_count = CountMenuItems(carbon_menu); + + for (l = children; l; l = l->next) + { + GtkWidget *menu_item = l->data; + CarbonMenuItem *carbon_item; + + if (GTK_IS_TEAROFF_MENU_ITEM (menu_item)) + continue; + + if (toplevel && g_object_get_data (G_OBJECT (menu_item), + "gtk-empty-menu-item")) + continue; + + GtkWidget *label = NULL; + const gchar *label_text = NULL; + + label_text = get_menu_label_text (menu_item, &label); + if (label_text && strcmp(label_text, "_SKIP_") == 0) + { + carbon_index++; + continue; + } + else if (!label_text) + label_text = ""; + + MenuItemAttributes attributes = 0; + if (GTK_IS_SEPARATOR_MENU_ITEM (menu_item)) + attributes |= kMenuItemAttrSeparator; + if (!GTK_WIDGET_IS_SENSITIVE (menu_item)) + attributes |= kMenuItemAttrDisabled; + if (!GTK_WIDGET_VISIBLE (menu_item)) + attributes |= kMenuItemAttrHidden; + + CFStringRef cfstr = CFStringCreateWithCString (NULL, label_text, + kCFStringEncodingUTF8); + if (carbon_index > carbon_item_count) + AppendMenuItemTextWithCFString(carbon_menu, cfstr, attributes, 0, + NULL); + else if (!toplevel && (carbon_index > carbon_item_count)) + InsertMenuItemTextWithCFString (carbon_menu, cfstr, + carbon_index, attributes, 0); + else + SetMenuItemTextWithCFString(carbon_menu, carbon_index, cfstr); + CFRelease (cfstr); + + MenuItemAttributes c_attributes = kMenuItemAttrSectionHeader | + kMenuItemAttrAutoDisable; + if (!(attributes & kMenuItemAttrDisabled)) + c_attributes |= kMenuItemAttrDisabled; + if (!(attributes & kMenuItemAttrSeparator)) + c_attributes |= kMenuItemAttrSeparator; + if (!(attributes & kMenuItemAttrHidden)) + c_attributes |= kMenuItemAttrHidden; + ChangeMenuItemAttributes(carbon_menu, carbon_index, + attributes, c_attributes); + SetMenuItemProperty (carbon_menu, carbon_index, + GTK_QUARTZ_MENU_CREATOR, + GTK_QUARTZ_ITEM_WIDGET, + sizeof (menu_item), &menu_item); + + carbon_item = carbon_menu_item_connect (menu_item, label, + carbon_menu, + carbon_index); + + if (GTK_IS_CHECK_MENU_ITEM (menu_item)) + carbon_menu_item_update_active (carbon_item, menu_item); + + carbon_menu_item_update_accel_closure (carbon_item, menu_item); + + if (gtk_menu_item_get_submenu (GTK_MENU_ITEM (menu_item))) + carbon_menu_item_update_submenu (carbon_item, menu_item); + + carbon_index++; + } + + while (carbon_index <= carbon_item_count) + { + DeleteMenuItem (carbon_menu, carbon_index); + carbon_index++; + } + + g_list_free (children); +} + +void +sync_menu_takeover_menu (GtkMenuShell *menu_shell) +{ + static MenuRef carbon_menubar = NULL; + + g_return_if_fail (GTK_IS_MENU_SHELL (menu_shell)); + + if (carbon_menu_quark == 0) + carbon_menu_quark = g_quark_from_static_string ("CarbonMenu"); + + if (carbon_menu_item_quark == 0) + carbon_menu_item_quark = g_quark_from_static_string ("CarbonMenuItem"); + + if (!carbon_menubar) + { + carbon_menubar = AcquireRootMenu(); + setup_menu_event_handler (); + } + + sync_menu_shell (menu_shell, carbon_menubar, TRUE); +} diff --git a/src/osx/syncmenu/sync-menu.h b/src/osx/syncmenu/sync-menu.h new file mode 100644 index 000000000..0715a31e2 --- /dev/null +++ b/src/osx/syncmenu/sync-menu.h @@ -0,0 +1,27 @@ +/* GTK+ Integration for the Mac OS X Menubar. + * + * Copyright (C) 2007 Pioneer Research Center USA, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include <gtk/gtk.h> + +G_BEGIN_DECLS + +void sync_menu_takeover_menu (GtkMenuShell *menu_shell); + +G_END_DECLS diff --git a/src/osx/syncmenu/test-menu.c b/src/osx/syncmenu/test-menu.c new file mode 100644 index 000000000..102ec5287 --- /dev/null +++ b/src/osx/syncmenu/test-menu.c @@ -0,0 +1,107 @@ +#include <gtk/gtk.h> + +#include "sync-menu.h" + +GtkWidget *open_item; +GtkWidget *copy_item; + +static void +menu_item_activate_cb (GtkWidget *item, + gpointer user_data) +{ + gboolean visible; + gboolean sensitive; + + g_print ("Item activated: %s\n", (gchar *) user_data); + + g_object_get (G_OBJECT (copy_item), + "visible", &visible, + "sensitive", &sensitive, + NULL); + + if (item == open_item) { + gtk_widget_set_sensitive (copy_item, !sensitive); + /*g_object_set (G_OBJECT (copy_item), "visible", !visible, NULL);*/ + } +} + +static GtkWidget * +test_setup_menu (void) +{ + GtkWidget *menubar; + GtkWidget *menu; + GtkWidget *item; + + menubar = gtk_menu_bar_new (); + + item = gtk_menu_item_new_with_label ("File"); + gtk_menu_shell_append (GTK_MENU_SHELL (menubar), item); + menu = gtk_menu_new (); + gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu); + item = gtk_menu_item_new_with_label ("Open"); + open_item = item; + g_signal_connect (item, "activate", G_CALLBACK (menu_item_activate_cb), "open"); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + item = gtk_menu_item_new_with_label ("Quit"); + g_signal_connect (item, "activate", G_CALLBACK (menu_item_activate_cb), "quit"); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + + item = gtk_menu_item_new_with_label ("Edit"); + + gtk_menu_shell_append (GTK_MENU_SHELL (menubar), item); + menu = gtk_menu_new (); + gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu); + item = gtk_menu_item_new_with_label ("Copy"); + copy_item = item; + g_signal_connect (item, "activate", G_CALLBACK (menu_item_activate_cb), "copy"); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + item = gtk_menu_item_new_with_label ("Paste"); + g_signal_connect (item, "activate", G_CALLBACK (menu_item_activate_cb), "paste"); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + + item = gtk_menu_item_new_with_label ("Help"); + gtk_menu_shell_append (GTK_MENU_SHELL (menubar), item); + menu = gtk_menu_new (); + gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), menu); + item = gtk_menu_item_new_with_label ("About"); + g_signal_connect (item, "activate", G_CALLBACK (menu_item_activate_cb), "about"); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + + return menubar; +} + +int +main (int argc, char **argv) +{ + GtkWidget *window; + GtkWidget *vbox; + GtkWidget *menubar; + + gtk_init (&argc, &argv); + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_default_size (GTK_WINDOW (window), 400, 300); + g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL); + + vbox = gtk_vbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (window), vbox); + + menubar = test_setup_menu (); + gtk_box_pack_start (GTK_BOX (vbox), + menubar, + FALSE, TRUE, 0); + + gtk_box_pack_start (GTK_BOX (vbox), + gtk_label_new ("Some window content here"), + TRUE, TRUE, 0); + + gtk_widget_show_all (window); + + gtk_widget_hide (menubar); + + sync_menu_takeover_menu (GTK_MENU_SHELL (menubar)); + + gtk_main (); + + return 0; +} diff --git a/src/osx/syncmenu/test-menu.py b/src/osx/syncmenu/test-menu.py new file mode 100644 index 000000000..b9c4471c8 --- /dev/null +++ b/src/osx/syncmenu/test-menu.py @@ -0,0 +1,78 @@ +import gtk, syncmenu + + +open_item = None +copy_item = None + + +def menu_item_activate_cb(item, user_data): + global open_item, copy_item + print "Item activated: %s" % user_data + + #g_object_get (G_OBJECT (copy_item), + # "visible", &visible, + # "sensitive", &sensitive, + # NULL) + + #if (item == open_item) { + #gtk_widget_set_sensitive (copy_item, !sensitive) + #/*g_object_set (G_OBJECT (copy_item), "visible", !visible, NULL)*/ + + +def test_setup_menu(): + global open_item, copy_item + menubar = gtk.MenuBar() + + item = gtk.MenuItem("File") + menubar.append(item) + menu = gtk.Menu() + item.set_submenu(menu) + item = gtk.MenuItem("Open") + open_item = item + item.connect("activate", menu_item_activate_cb, "open") + menu.append(item) + item = gtk.MenuItem("Quit") + item.connect("activate", menu_item_activate_cb, "quit") + menu.append(item) + + item = gtk.MenuItem("Edit") + + menubar.append(item) + menu = gtk.Menu() + item.set_submenu(menu) + item = gtk.MenuItem("Copy") + copy_item = item + item.connect("activate", menu_item_activate_cb, "copy") + menu.append(item) + item = gtk.MenuItem("Paste") + item.connect("activate", menu_item_activate_cb, "paste") + menu.append(item) + + item = gtk.MenuItem("Help") + menubar.append(item) + menu = gtk.Menu() + item.set_submenu(menu) + item = gtk.MenuItem("About") + item.connect("activate", menu_item_activate_cb, "about") + menu.append(item) + + return menubar + + +window = gtk.Window(gtk.WINDOW_TOPLEVEL) +window.set_default_size(400, 300) +window.connect("destroy", gtk.main_quit, None) + +vbox = gtk.VBox(False, 0) +window.add(vbox) + +menubar = test_setup_menu() +vbox.pack_start(menubar, False, True, 0) +vbox.pack_start(gtk.Label("Some window content here"), True, True, 0) + +window.show_all() +menubar.hide() + +syncmenu.takeover_menu(menubar) + +gtk.main() diff --git a/src/roster_window.py b/src/roster_window.py index d52b149e1..18557f94d 100644 --- a/src/roster_window.py +++ b/src/roster_window.py @@ -61,6 +61,11 @@ if dbus_support.supported: from music_track_listener import MusicTrackListener import dbus +import sys +if sys.platform == 'darwin': + from osx import syncmenu + + #(icon, name, type, jid, account, editable, second pixbuf) ( C_IMG, # image to show state (online, new message etc) @@ -903,9 +908,17 @@ class RosterWindow: return advanced_menuitem_menu - def make_menu(self): - '''create the main window's menus''' - if not self.actions_menu_needs_rebuild: + def set_actions_menu_needs_rebuild(self): + self.actions_menu_needs_rebuild = True + # Force the rebuild now since the on_activates on the menu itself does + # not work with the os/x top level menubar + if sys.platform == 'darwin': + self.make_menu(force = True) + return + + def make_menu(self, force = False): + '''create the main window\'s menus''' + if not force and not self.actions_menu_needs_rebuild: return new_chat_menuitem = self.xml.get_widget('new_chat_menuitem') single_message_menuitem = self.xml.get_widget('send_single_message_menuitem') @@ -1171,6 +1184,9 @@ class RosterWindow: advanced_menuitem.set_submenu(advanced_sub_menu) advanced_sub_menu.show_all() + if sys.platform == 'darwin': + syncmenu.takeover_menu(self.xml.get_widget('menubar')) + self.actions_menu_needs_rebuild = False def _add_history_manager_menuitem(self, menu): @@ -1973,7 +1989,7 @@ class RosterWindow: dialogs.AddSpecialNotificationDialog(jid) def make_contact_menu(self, event, iter): - '''Make contact's popup menu''' + '''Make contact\'s popup menu''' model = self.tree.get_model() jid = model[iter][C_JID].decode('utf-8') tree_path = model.get_path(iter) @@ -2206,7 +2222,7 @@ class RosterWindow: status_menuitems.append(status_menuitem) if len(contacts) > 1: # several resources def resources_submenu(action, room_jid = None, room_account = None): - ''' Build a submenu with contact's resources. + ''' Build a submenu with contact\'s resources. room_jid and room_account are for action self.on_invite_to_room ''' sub_menu = gtk.Menu() @@ -2767,7 +2783,7 @@ class RosterWindow: menu.popup(None, None, None, event_button, event.time) def make_transport_menu(self, event, iter): - '''Make transport's popup menu''' + '''Make transport\'s popup menu''' model = self.tree.get_model() jid = model[iter][C_JID].decode('utf-8') path = model.get_path(iter) @@ -3806,6 +3822,10 @@ class RosterWindow: self.chg_contact_status(contact, 'offline', '', account) self.actions_menu_needs_rebuild = True self.update_status_combobox() + # Force the rebuild now since the on_activates on the menu itself does + # not work with the os/x top level menubar + if sys.platform == 'darwin': + self.make_menu(force = True) def new_private_chat(self, gc_contact, account, session = None): contact = gajim.contacts.contact_from_gc_contact(gc_contact) @@ -4164,6 +4184,9 @@ class RosterWindow: gtk.main_quit() def on_quit_menuitem_activate(self, widget): + gobject.idle_add(self.on_quit_menuitem_activate_real, widget) + + def on_quit_menuitem_activate_real(self, widget): accounts = gajim.connections.keys() get_msg = False for acct in accounts: @@ -5154,6 +5177,52 @@ class RosterWindow: self._last_selected_contact.append((jid, account)) self.draw_contact(jid, account, selected = True) + def setup_for_osx(self): + # Massage the GTK menu so it will match up to the OS/X nib style menu + # when passed to sync-menu and merged + main_menu = self.xml.get_widget('menubar') + app_item = gtk.MenuItem('Gajim') + main_menu.insert(app_item, 0) + win_item = gtk.MenuItem('Window') + main_menu.insert(win_item, 4) + actions_menu = self.xml.get_widget('actions_menu_menu') + quit_item = self.xml.get_widget('quit_menuitem') + actions_menu.remove(quit_item) + actions_menu.remove(self.xml.get_widget('separator1')) + edit_menu = self.xml.get_widget('edit_menu_menu') + edit_menu.remove(self.xml.get_widget('preferences_menuitem')) + edit_menu.remove(self.xml.get_widget('separator2')) + help_menu = self.xml.get_widget('help_menu_menu') + about_item = self.xml.get_widget('about_menuitem') + help_menu.remove(about_item) + # Build up App menu + app_menu = gtk.Menu() + app_item.set_submenu(app_menu) + app_menu.append(about_item) + app_menu.append(gtk.MenuItem('__SKIP__')) + prefs_item = gtk.MenuItem('Preferences...') + prefs_item.connect("activate", self.on_preferences_menuitem_activate) + accels = gtk.AccelGroup() + self.xml.get_widget('roster_window').add_accel_group(accels) + prefs_item.add_accelerator('activate', accels, ord(','), + gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE) + app_menu.append(prefs_item) + app_menu.append(gtk.MenuItem('__SKIP__')) + app_menu.append(gtk.MenuItem('__SKIP__')) + app_menu.append(gtk.MenuItem('__SKIP__')) + app_menu.append(gtk.MenuItem('__SKIP__')) + app_menu.append(gtk.MenuItem('__SKIP__')) + app_menu.append(gtk.MenuItem('__SKIP__')) + app_menu.append(gtk.MenuItem('__SKIP__')) + app_menu.append(quit_item) + app_menu.show_all() + # Do the merge baby! + syncmenu.takeover_menu(main_menu) + self.make_menu(force = True) + # Hide the GTK menubar itself and let the OS/X menubar do its thing + self.xml.get_widget('menubar').hide() + return + def __init__(self): self.xml = gtkgui_helpers.get_glade('roster_window.glade') self.window = self.xml.get_widget('roster_window') @@ -5370,3 +5439,6 @@ class RosterWindow: # Create zeroconf in config file zeroconf = common.zeroconf.connection_zeroconf.ConnectionZeroconf( gajim.ZEROCONF_ACC_NAME) + + if sys.platform == 'darwin': + self.setup_for_osx() diff --git a/src/statusicon.py b/src/statusicon.py index 1f2316015..4a49f8669 100644 --- a/src/statusicon.py +++ b/src/statusicon.py @@ -19,12 +19,16 @@ ## along with Gajim. If not, see <http://www.gnu.org/licenses/>. ## +import sys import gtk import systray from common import gajim from common import helpers +if sys.platform == 'darwin': + import osx + class StatusIcon(systray.Systray): '''Class for the notification area icon''' #FIXME: when we migrate to GTK 2.10 stick only to this class @@ -44,13 +48,15 @@ class StatusIcon(systray.Systray): self.on_status_icon_right_clicked) self.set_img() - self.status_icon.props.visible = True + self.status_icon.set_visible(True) + self.subscribe_events() def on_status_icon_right_clicked(self, widget, event_button, event_time): self.make_menu(event_button, event_time) def hide_icon(self): - self.status_icon.props.visible = False + self.status_icon.set_visible(False) + self.unsubscribe_events() def on_status_icon_left_clicked(self, widget): self.on_left_click() @@ -62,16 +68,18 @@ class StatusIcon(systray.Systray): text = helpers.get_notification_icon_tooltip_text() self.status_icon.set_tooltip(text) if gajim.events.get_nb_systray_events(): + if sys.platform == 'darwin': + osx.nsapp.requestUserAttention() state = 'event' - self.status_icon.props.blinking = True + self.status_icon.set_blinking(True) else: state = self.status - self.status_icon.props.blinking = False + self.status_icon.set_blinking(False) #FIXME: do not always use 16x16 (ask actually used size and use that) image = gajim.interface.roster.jabber_state_images['16'][state] if image.get_storage_type() == gtk.IMAGE_PIXBUF: - self.status_icon.props.pixbuf = image.get_pixbuf() + self.status_icon.set_from_pixbuf(image.get_pixbuf()) #FIXME: oops they forgot to support GIF animation? #or they were lazy to get it to work under Windows! WTF! #elif image.get_storage_type() == gtk.IMAGE_ANIMATION: