aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2009-12-17 00:08:42 -0600
committerTed Gould <ted@gould.cx>2009-12-17 00:08:42 -0600
commit97f6e62d618747a03ba44486f70a2230af5177fd (patch)
tree89c8aebd9d1d147c07bf6c1cedd8ddd583e5a0be
parent985c449e8efe4e258d286857f6a71a7726b43561 (diff)
parent8a26b8c15e726e090f7cab7afd366f764f2ab73c (diff)
downloadayatana-indicator-application-97f6e62d618747a03ba44486f70a2230af5177fd.tar.gz
ayatana-indicator-application-97f6e62d618747a03ba44486f70a2230af5177fd.tar.bz2
ayatana-indicator-application-97f6e62d618747a03ba44486f70a2230af5177fd.zip
Mono and Pythong bindings living together.
-rw-r--r--acinclude.m4247
-rw-r--r--bindings/Makefile.am3
-rw-r--r--bindings/mono/Makefile.am2
-rw-r--r--bindings/mono/appindicator-sharp-0.1.pc.in6
-rw-r--r--bindings/mono/appindicator-sharp.dll.config.in2
-rw-r--r--bindings/python/Makefile.am40
-rw-r--r--bindings/python/__init__.py27
-rw-r--r--bindings/python/appindicator-arg-types.py27
-rw-r--r--bindings/python/appindicator.defs121
-rw-r--r--bindings/python/appindicator.override65
-rw-r--r--bindings/python/appindicatormodule.c49
-rw-r--r--configure.ac30
-rw-r--r--src/Makefile.am4
13 files changed, 615 insertions, 8 deletions
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644
index 0000000..3e98bd3
--- /dev/null
+++ b/acinclude.m4
@@ -0,0 +1,247 @@
+## ------------------------
+## Python file handling
+## From Andrew Dalke
+## Updated by James Henstridge
+## ------------------------
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+# Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program 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 General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+
+# Adds support for distributing Python modules and packages. To
+# install modules, copy them to $(pythondir), using the python_PYTHON
+# automake variable. To install a package with the same name as the
+# automake package, install to $(pkgpythondir), or use the
+# pkgpython_PYTHON automake variable.
+
+# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as
+# locations to install python extension modules (shared libraries).
+# Another macro is required to find the appropriate flags to compile
+# extension modules.
+
+# If your package is configured with a different prefix to python,
+# users will have to add the install directory to the PYTHONPATH
+# environment variable, or create a .pth file (see the python
+# documentation for details).
+
+# If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will
+# cause an error if the version of python installed on the system
+# doesn't meet the requirement. MINIMUM-VERSION should consist of
+# numbers and dots only.
+
+AC_DEFUN([AM_PATH_PYTHON],
+ [
+ dnl Find a Python interpreter. Python versions prior to 1.5 are not
+ dnl supported because the default installation locations changed from
+ dnl $prefix/lib/site-python in 1.4 to $prefix/lib/python1.5/site-packages
+ dnl in 1.5.
+ m4_define([_AM_PYTHON_INTERPRETER_LIST],
+ [python python2 python2.4 python2.3 python2.2 dnl
+python2.1 python2.0 python1.6 python1.5])
+
+ m4_if([$1],[],[
+ dnl No version check is needed.
+ # Find any Python interpreter.
+ if test -z "$PYTHON"; then
+ PYTHON=:
+ AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST)
+ fi
+ am_display_PYTHON=python
+ ], [
+ dnl A version check is needed.
+ if test -n "$PYTHON"; then
+ # If the user set $PYTHON, use it and don't search something else.
+ AC_MSG_CHECKING([whether $PYTHON version >= $1])
+ AM_PYTHON_CHECK_VERSION([$PYTHON], [$1],
+ [AC_MSG_RESULT(yes)],
+ [AC_MSG_ERROR(too old)])
+ am_display_PYTHON=$PYTHON
+ else
+ # Otherwise, try each interpreter until we find one that satisfies
+ # VERSION.
+ AC_CACHE_CHECK([for a Python interpreter with version >= $1],
+ [am_cv_pathless_PYTHON],[
+ for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do
+ test "$am_cv_pathless_PYTHON" = none && break
+ AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break])
+ done])
+ # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON.
+ if test "$am_cv_pathless_PYTHON" = none; then
+ PYTHON=:
+ else
+ AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON])
+ fi
+ am_display_PYTHON=$am_cv_pathless_PYTHON
+ fi
+ ])
+
+ if test "$PYTHON" = :; then
+ dnl Run any user-specified action, or abort.
+ m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])])
+ else
+
+ dnl Query Python for its version number. Getting [:3] seems to be
+ dnl the best way to do this; it's what "site.py" does in the standard
+ dnl library.
+
+ AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version],
+ [am_cv_python_version=`$PYTHON -c "import sys; print sys.version[[:3]]"`])
+ AC_SUBST([PYTHON_VERSION], [$am_cv_python_version])
+
+ dnl Use the values of $prefix and $exec_prefix for the corresponding
+ dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made
+ dnl distinct variables so they can be overridden if need be. However,
+ dnl general consensus is that you shouldn't need this ability.
+
+ AC_SUBST([PYTHON_PREFIX], ['${prefix}'])
+ AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}'])
+
+ dnl At times (like when building shared libraries) you may want
+ dnl to know which OS platform Python thinks this is.
+
+ AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform],
+ [am_cv_python_platform=`$PYTHON -c "import sys; print sys.platform"`])
+ AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform])
+
+
+ dnl Set up 4 directories:
+
+ dnl pythondir -- where to install python scripts. This is the
+ dnl site-packages directory, not the python standard library
+ dnl directory like in previous automake betas. This behavior
+ dnl is more consistent with lispdir.m4 for example.
+ dnl Query distutils for this directory. distutils does not exist in
+ dnl Python 1.5, so we fall back to the hardcoded directory if it
+ dnl doesn't work.
+ AC_CACHE_CHECK([for $am_display_PYTHON script directory],
+ [am_cv_python_pythondir],
+ [am_cv_python_pythondir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(0,0,prefix='$PYTHON_PREFIX')" 2>/dev/null ||
+ echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"`])
+ AC_SUBST([pythondir], [$am_cv_python_pythondir])
+
+ dnl pkgpythondir -- $PACKAGE directory under pythondir. Was
+ dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is
+ dnl more consistent with the rest of automake.
+
+ AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE])
+
+ dnl pyexecdir -- directory for installing python extension modules
+ dnl (shared libraries)
+ dnl Query distutils for this directory. distutils does not exist in
+ dnl Python 1.5, so we fall back to the hardcoded directory if it
+ dnl doesn't work.
+ AC_CACHE_CHECK([for $am_display_PYTHON extension module directory],
+ [am_cv_python_pyexecdir],
+ [am_cv_python_pyexecdir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(1,0,prefix='$PYTHON_EXEC_PREFIX')" 2>/dev/null ||
+ echo "${PYTHON_EXEC_PREFIX}/lib/python${PYTHON_VERSION}/site-packages"`])
+ AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir])
+
+ dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE)
+
+ AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE])
+
+ dnl Run any user-specified action.
+ $2
+ fi
+
+])
+
+
+# AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+# ---------------------------------------------------------------------------
+# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION.
+# Run ACTION-IF-FALSE otherwise.
+# This test uses sys.hexversion instead of the string equivalent (first
+# word of sys.version), in order to cope with versions such as 2.2c1.
+# hexversion has been introduced in Python 1.5.2; it's probably not
+# worth to support older versions (1.5.1 was released on October 31, 1998).
+AC_DEFUN([AM_PYTHON_CHECK_VERSION],
+ [prog="import sys, string
+# split strings by '.' and convert to numeric. Append some zeros
+# because we need at least 4 digits for the hex conversion.
+minver = map(int, string.split('$2', '.')) + [[0, 0, 0]]
+minverhex = 0
+for i in xrange(0, 4): minverhex = (minverhex << 8) + minver[[i]]
+sys.exit(sys.hexversion < minverhex)"
+ AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])])
+python.m4
+
+
+## this one is commonly used with AM_PATH_PYTHONDIR ...
+dnl AM_CHECK_PYMOD(MODNAME [,SYMBOL [,ACTION-IF-FOUND [,ACTION-IF-NOT-FOUND]]])
+dnl Check if a module containing a given symbol is visible to python.
+AC_DEFUN([AM_CHECK_PYMOD],
+[AC_REQUIRE([AM_PATH_PYTHON])
+py_mod_var=`echo $1['_']$2 | sed 'y%./+-%__p_%'`
+AC_MSG_CHECKING(for ifelse([$2],[],,[$2 in ])python module $1)
+AC_CACHE_VAL(py_cv_mod_$py_mod_var, [
+ifelse([$2],[], [prog="
+import sys
+try:
+ import $1
+except ImportError:
+ sys.exit(1)
+except:
+ sys.exit(0)
+sys.exit(0)"], [prog="
+import $1
+$1.$2"])
+if $PYTHON -c "$prog" 1>&AC_FD_CC 2>&AC_FD_CC
+ then
+ eval "py_cv_mod_$py_mod_var=yes"
+ else
+ eval "py_cv_mod_$py_mod_var=no"
+ fi
+])
+py_val=`eval "echo \`echo '$py_cv_mod_'$py_mod_var\`"`
+if test "x$py_val" != xno; then
+ AC_MSG_RESULT(yes)
+ ifelse([$3], [],, [$3
+])dnl
+else
+ AC_MSG_RESULT(no)
+ ifelse([$4], [],, [$4
+])dnl
+fi
+])
+
+dnl a macro to check for ability to create python extensions
+dnl AM_CHECK_PYTHON_HEADERS([ACTION-IF-POSSIBLE], [ACTION-IF-NOT-POSSIBLE])
+dnl function also defines PYTHON_INCLUDES
+AC_DEFUN([AM_CHECK_PYTHON_HEADERS],
+[AC_REQUIRE([AM_PATH_PYTHON])
+AC_MSG_CHECKING(for headers required to compile python extensions)
+dnl deduce PYTHON_INCLUDES
+py_prefix=`$PYTHON -c "import sys; print sys.prefix"`
+py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"`
+PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}"
+if test "$py_prefix" != "$py_exec_prefix"; then
+ PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}"
+fi
+AC_SUBST(PYTHON_INCLUDES)
+dnl check if the headers exist:
+save_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES"
+AC_TRY_CPP([#include <Python.h>],dnl
+[AC_MSG_RESULT(found)
+$1],dnl
+[AC_MSG_RESULT(not found)
+$2])
+CPPFLAGS="$save_CPPFLAGS"
+])
diff --git a/bindings/Makefile.am b/bindings/Makefile.am
index bee9b1d..71abb6c 100644
--- a/bindings/Makefile.am
+++ b/bindings/Makefile.am
@@ -1,2 +1,3 @@
SUBDIRS = \
- mono
+ mono \
+ python
diff --git a/bindings/mono/Makefile.am b/bindings/mono/Makefile.am
index b03cde8..87f1e5a 100644
--- a/bindings/mono/Makefile.am
+++ b/bindings/mono/Makefile.am
@@ -11,7 +11,7 @@ METADATA = libappindicator-api.metadata
ASSEMBLY_NAME = appindicator-sharp
ASSEMBLY = appindicator-sharp.dll
TARGET = $(ASSEMBLY) $(ASSEMBLY).config
-assemblydir = $(libdir)/appindicator-sharp
+assemblydir = $(libdir)/appindicator-sharp-0.1
assembly_DATA = $(TARGET)
CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb generated-stamp generated/*.cs $(API) $(RAW_API) $(TEST)
DISTCLEANFILES = $(ASSEMBLY).config
diff --git a/bindings/mono/appindicator-sharp-0.1.pc.in b/bindings/mono/appindicator-sharp-0.1.pc.in
index 16872ae..33ff1d7 100644
--- a/bindings/mono/appindicator-sharp-0.1.pc.in
+++ b/bindings/mono/appindicator-sharp-0.1.pc.in
@@ -1,6 +1,6 @@
-prefix=${pcfiledir}/../..
-exec_prefix=${prefix}
-libdir=${exec_prefix}/lib
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
assemblies_dir=${libdir}/appindicator-sharp-0.1
Name: appindicator-sharp
diff --git a/bindings/mono/appindicator-sharp.dll.config.in b/bindings/mono/appindicator-sharp.dll.config.in
index c8caa80..d0e9e1e 100644
--- a/bindings/mono/appindicator-sharp.dll.config.in
+++ b/bindings/mono/appindicator-sharp.dll.config.in
@@ -1,5 +1,5 @@
<configuration>
- <dllmap dll="libappindicator.dll" target="libappindicator@LIB_PREFIX@.0@LIB_SUFFIX@"/>
+ <dllmap dll="appindicator-sharp.dll" target="libappindicator@LIB_PREFIX@.0@LIB_SUFFIX@"/>
<dllmap dll="libgtk-2.0-0.dll" target="libgtk-2.0@LIB_PREFIX@.0@LIB_SUFFIX@"/>
<dllmap dll="libglib-2.0-0.dll" target="libglib-2.0@LIB_PREFIX@.0@LIB_SUFFIX@"/>
<dllmap dll="libgobject-2.0-0.dll" target="libgobject-2.0@LIB_PREFIX@.0@LIB_SUFFIX@"/>
diff --git a/bindings/python/Makefile.am b/bindings/python/Makefile.am
new file mode 100644
index 0000000..0b606db
--- /dev/null
+++ b/bindings/python/Makefile.am
@@ -0,0 +1,40 @@
+defsdir = $(datadir)/pygtk/2.0/defs
+defs_DATA = appindicator.defs
+
+#CFLAGS = -Wall -Werror
+INCLUDES = \
+ -I$(top_srcdir)/src \
+ -DG_LOG_DOMAIN=\"appindicator-python\" \
+ -DDATADIR=\"$(datadir)\" \
+ -DLIBDIR=\"$(libdir)\" \
+ $(APPINDICATOR_PYTHON_CFLAGS) \
+ $(PYTHON_INCLUDES)
+
+pkgpythondir = $(pyexecdir)
+pkgpyexecdir = $(pyexecdir)
+
+pkgappindicatordir = $(pkgpythondir)/appindicator
+pkgappindicator_PYTHON = __init__.py
+
+appindicatordir = $(pkgpyexecdir)/appindicator
+appindicator_LTLIBRARIES = _appindicator.la
+
+_appindicator_la_LDFLAGS = -module -avoid-version -export-symbols-regex init_appindicator -lpyglib-2.0-python2.6
+_appindicator_la_LIBADD = $(APPINDICATOR_PYTHON_LIBS) -L$(top_builddir)/src/.libs -lappindicator
+_appindicator_la_SOURCES = appindicatormodule.c
+nodist__appindicator_la_SOURCES = appindicator.c
+
+CLEANFILES = appindicator.c
+EXTRA_DIST = appindicator.override appindicator-arg-types.py $(defs_DATA)
+appindicator.c: $(defs_DATA) appindicator.override
+
+%.c: %.defs
+ (cd $(srcdir) \
+ && $(PYGTK_CODEGEN) \
+ --register $(PYGTK_DEFSDIR)/gtk-types.defs \
+ --register $(PYGTK_DEFSDIR)/gdk-types.defs \
+ --load-types appindicator-arg-types.py \
+ --override $*.override \
+ --prefix py$* $*.defs) > gen-$*.c \
+ && cp gen-$*.c $*.c \
+ && rm -f gen-$*.c
diff --git a/bindings/python/__init__.py b/bindings/python/__init__.py
new file mode 100644
index 0000000..20e2140
--- /dev/null
+++ b/bindings/python/__init__.py
@@ -0,0 +1,27 @@
+# Python bindings for libappindicator.
+#
+# Copyright 2009 Canonical Ltd.
+#
+# Authors:
+# Eitan Isaacson <eitan@ascender.com>
+# Neil Jagdish Patel <neil.patel@canonical.com>
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of either or both of the following licenses:
+#
+# 1) the GNU Lesser General Public License version 3, as published by the
+# Free Software Foundation; and/or
+# 2) the GNU Lesser General Public License version 2.1, as published by
+# the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranties of
+# MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
+# PURPOSE. See the applicable version of the GNU Lesser General Public
+# License for more details.
+#
+# You should have received a copy of both the GNU Lesser General Public
+# License version 3 and version 2.1 along with this program. If not, see
+# <http://www.gnu.org/licenses/>
+
+from _appindicator import *
diff --git a/bindings/python/appindicator-arg-types.py b/bindings/python/appindicator-arg-types.py
new file mode 100644
index 0000000..9d74aa0
--- /dev/null
+++ b/bindings/python/appindicator-arg-types.py
@@ -0,0 +1,27 @@
+# Python bindings for libappindicator.
+#
+# Copyright 2009 Canonical Ltd.
+#
+# Authors:
+# Eitan Isaacson <eitan@ascender.com>
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of either or both of the following licenses:
+#
+# 1) the GNU Lesser General Public License version 3, as published by the
+# Free Software Foundation; and/or
+# 2) the GNU Lesser General Public License version 2.1, as published by
+# the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranties of
+# MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
+# PURPOSE. See the applicable version of the GNU Lesser General Public
+# License for more details.
+#
+# You should have received a copy of both the GNU Lesser General Public
+# License version 3 and version 2.1 along with this program. If not, see
+# <http://www.gnu.org/licenses/>
+
+import argtypes
+
diff --git a/bindings/python/appindicator.defs b/bindings/python/appindicator.defs
new file mode 100644
index 0000000..0349b64
--- /dev/null
+++ b/bindings/python/appindicator.defs
@@ -0,0 +1,121 @@
+;; -*- scheme -*-
+; object definitions ...
+(define-object Indicator
+ (in-module "App")
+ (parent "GObject")
+ (c-name "AppIndicator")
+ (gtype-id "APP_TYPE_INDICATOR")
+)
+
+;; Enumerations and flags ...
+
+(define-enum IndicatorCategory
+ (in-module "App")
+ (c-name "AppIndicatorCategory")
+ (gtype-id "APP_INDICATOR_TYPE_INDICATOR_CATEGORY")
+ (values
+ '("application-status" "APP_INDICATOR_CATEGORY_APPLICATION_STATUS")
+ '("communications" "APP_INDICATOR_CATEGORY_COMMUNICATIONS")
+ '("system-services" "APP_INDICATOR_CATEGORY_SYSTEM_SERVICES")
+ '("hardware" "APP_INDICATOR_CATEGORY_HARDWARE")
+ '("other" "APP_INDICATOR_CATEGORY_OTHER")
+ )
+)
+
+(define-enum IndicatorStatus
+ (in-module "App")
+ (c-name "AppIndicatorStatus")
+ (gtype-id "APP_INDICATOR_TYPE_INDICATOR_STATUS")
+ (values
+ '("passive" "APP_INDICATOR_STATUS_PASSIVE")
+ '("active" "APP_INDICATOR_STATUS_ACTIVE")
+ '("attention" "APP_INDICATOR_STATUS_ATTENTION")
+ )
+)
+
+
+;; From app-indicator.h
+
+(define-function app_indicator_get_type
+ (c-name "app_indicator_get_type")
+ (return-type "GType")
+)
+
+(define-function app_indicator_new
+ (c-name "app_indicator_new")
+ (is-constructor-of "AppIndicator")
+ (return-type "AppIndicator*")
+ (parameters
+ '("const-gchar*" "id")
+ '("const-gchar*" "icon_name")
+ '("AppIndicatorCategory" "category")
+ )
+)
+
+(define-method set_status
+ (of-object "AppIndicator")
+ (c-name "app_indicator_set_status")
+ (return-type "none")
+ (parameters
+ '("AppIndicatorStatus" "status")
+ )
+)
+
+(define-method set_attention_icon
+ (of-object "AppIndicator")
+ (c-name "app_indicator_set_attention_icon")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "icon_name")
+ )
+)
+
+(define-method set_menu
+ (of-object "AppIndicator")
+ (c-name "app_indicator_set_menu")
+ (return-type "none")
+ (parameters
+ '("GtkMenu*" "menu")
+ )
+)
+
+(define-method set_icon
+ (of-object "AppIndicator")
+ (c-name "app_indicator_set_icon")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "icon_name")
+ )
+)
+
+(define-method get_id
+ (of-object "AppIndicator")
+ (c-name "app_indicator_get_id")
+ (return-type "const-gchar*")
+)
+
+(define-method get_category
+ (of-object "AppIndicator")
+ (c-name "app_indicator_get_category")
+ (return-type "AppIndicatorCategory")
+)
+
+(define-method get_status
+ (of-object "AppIndicator")
+ (c-name "app_indicator_get_status")
+ (return-type "AppIndicatorStatus")
+)
+
+(define-method get_icon
+ (of-object "AppIndicator")
+ (c-name "app_indicator_get_icon")
+ (return-type "const-gchar*")
+)
+
+(define-method get_attention_icon
+ (of-object "AppIndicator")
+ (c-name "app_indicator_get_attention_icon")
+ (return-type "const-gchar*")
+)
+
+
diff --git a/bindings/python/appindicator.override b/bindings/python/appindicator.override
new file mode 100644
index 0000000..a01a9a6
--- /dev/null
+++ b/bindings/python/appindicator.override
@@ -0,0 +1,65 @@
+/*
+Python bindings for libappindicator.
+
+Copyright 2009 Canonical Ltd.
+
+Authors:
+ Eitan Isaacson <eitan@ascender.com> (original)
+ Neil Jagdish Patel <neil.patel@canonical.com>
+
+This program is free software: you can redistribute it and/or modify it
+under the terms of either or both of the following licenses:
+
+1) the GNU Lesser General Public License version 3, as published by the
+Free Software Foundation; and/or
+2) the GNU Lesser General Public License version 2.1, as published by
+the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranties of
+MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
+PURPOSE. See the applicable version of the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of both the GNU Lesser General Public
+License version 3 and version 2.1 along with this program. If not, see
+<http://www.gnu.org/licenses/>
+*/
+%%
+headers
+#include <Python.h>
+#include "../src/libappindicator/app-indicator.h"
+#include "../src/libappindicator/app-indicator-enum-types.h"
+#include <glib.h>
+#include "pygobject.h"
+#include "pyglib.h"
+#include <pygtk/pygtk.h>
+
+typedef PyObject* (*to_pyobject_func) (gpointer data);
+
+#define APP_TYPE_INDICATOR APP_INDICATOR_TYPE
+
+void
+_appindicator_add_constants(PyObject *module, const gchar *strip_prefix)
+{
+#ifdef VERSION
+ PyModule_AddStringConstant(module, "__version__", VERSION);
+#endif
+ pyg_enum_add(module,
+ "IndicatorCategory",
+ strip_prefix,
+ APP_INDICATOR_TYPE_INDICATOR_CATEGORY);
+
+ pyg_enum_add(module,
+ "IndicatorStatus",
+ strip_prefix,
+ APP_INDICATOR_TYPE_INDICATOR_STATUS);
+
+ if (PyErr_Occurred())
+ PyErr_Print();
+}
+%%
+modulename appindicator
+%%
+import gobject.GObject as PyGObject_Type
+import gtk.Menu as PyGtkMenu_Type
diff --git a/bindings/python/appindicatormodule.c b/bindings/python/appindicatormodule.c
new file mode 100644
index 0000000..b66639c
--- /dev/null
+++ b/bindings/python/appindicatormodule.c
@@ -0,0 +1,49 @@
+/*
+Python bindings for libappindicator.
+
+Copyright 2009 Canonical Ltd.
+
+Authors:
+ Eitan Isaacson <eitan@ascender.com>
+ Neil Jagdish Patel <neil.patel@canonical.com>
+
+This program is free software: you can redistribute it and/or modify it
+under the terms of either or both of the following licenses:
+
+1) the GNU Lesser General Public License version 3, as published by the
+Free Software Foundation; and/or
+2) the GNU Lesser General Public License version 2.1, as published by
+the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranties of
+MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
+PURPOSE. See the applicable version of the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of both the GNU Lesser General Public
+License version 3 and version 2.1 along with this program. If not, see
+<http://www.gnu.org/licenses/>
+*/
+#include <pygobject.h>
+
+void pyappindicator_register_classes (PyObject *d);
+extern PyMethodDef pyappindicator_functions[];
+
+DL_EXPORT(void)
+init_appindicator(void)
+{
+ PyObject *m, *d;
+
+ init_pygobject ();
+
+ m = Py_InitModule ("_appindicator", pyappindicator_functions);
+ d = PyModule_GetDict (m);
+
+ pyappindicator_register_classes (d);
+
+ _appindicator_add_constants (m, "APP_INDICATOR_");
+ if (PyErr_Occurred ()) {
+ Py_FatalError ("can't initialise module appindicator");
+ }
+}
diff --git a/configure.ac b/configure.ac
index ca1793a..1ff33d8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -132,6 +132,35 @@ fi
AC_SUBST(DBUSSERVICEDIR)
###########################
+# Python
+###########################
+
+PYGTK_REQUIRED=2.14.0
+PYGOBJECT_REQUIRED=0.22
+
+AM_PATH_PYTHON(2.3.5)
+AM_CHECK_PYTHON_HEADERS(,[AC_MSG_ERROR(could not find Python headers)])
+
+PKG_CHECK_MODULES(APPINDICATOR_PYTHON,
+ [
+ pygtk-2.0 >= $PYGTK_REQUIRED
+ gtk+-2.0 >= $GTK_REQUIRED_VERSION
+ pygobject-2.0 >= $PYGOBJECT_REQUIRED
+ ])
+AC_SUBST(APPINDICATOR_PYTHON_CFLAGS)
+AC_SUBST(APPINDICATOR_PYTHON_LIBS)
+
+AC_MSG_CHECKING(for pygtk defs)
+PYGTK_DEFSDIR=`$PKG_CONFIG --variable=defsdir pygtk-2.0`
+AC_SUBST(PYGTK_DEFSDIR)
+AC_MSG_RESULT($PYGTK_DEFSDIR)
+
+AC_MSG_CHECKING(for pygtk codegen)
+PYGTK_CODEGEN="$PYTHON `$PKG_CONFIG --variable=codegendir pygtk-2.0`/codegen.py"
+AC_SUBST(PYGTK_CODEGEN)
+AC_MSG_RESULT($PYGTK_CODEGEN)
+
+###########################
# Files
###########################
@@ -145,6 +174,7 @@ bindings/mono/appindicator-sharp.dll.config
bindings/mono/appindicator-sharp-0.1.pc
bindings/mono/examples/Makefile
bindings/mono/examples/indicator-example
+bindings/python/Makefile
data/Makefile
tests/Makefile
example/Makefile
diff --git a/src/Makefile.am b/src/Makefile.am
index ee4b7a7..f101d12 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -107,14 +107,14 @@ DBUS_SPECS = \
%-client.h: %.xml
dbus-binding-tool \
- --prefix=_$(subst -,_,$(<:.xml=))_client \
+ --prefix=_$(notdir $(subst -,_,$(<:.xml=)))_client \
--mode=glib-client \
--output=$@ \
$<
%-server.h: %.xml
dbus-binding-tool \
- --prefix=_$(subst -,_,$(<:.xml=))_server \
+ --prefix=_$(notdir $(subst -,_,$(<:.xml=)))_server \
--mode=glib-server \
--output=$@ \
$<