diff options
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | bindings/Makefile.am | 2 | ||||
-rw-r--r-- | bindings/mono/Makefile.am | 39 | ||||
-rw-r--r-- | bindings/mono/app-indicator.sources.xml | 12 | ||||
-rw-r--r-- | bindings/mono/appindicator-sharp.dll.config.in | 7 | ||||
-rw-r--r-- | bindings/mono/appindicator-sharp.pc.in | 12 | ||||
-rw-r--r-- | bindings/mono/libappindicator-api.metadata | 15 | ||||
-rw-r--r-- | configure.ac | 58 |
8 files changed, 144 insertions, 2 deletions
diff --git a/Makefile.am b/Makefile.am index d05078e..a9b445c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,5 +1,6 @@ SUBDIRS = data \ src \ + bindings \ example \ tests \ docs diff --git a/bindings/Makefile.am b/bindings/Makefile.am new file mode 100644 index 0000000..bee9b1d --- /dev/null +++ b/bindings/Makefile.am @@ -0,0 +1,2 @@ +SUBDIRS = \ + mono diff --git a/bindings/mono/Makefile.am b/bindings/mono/Makefile.am new file mode 100644 index 0000000..23e8214 --- /dev/null +++ b/bindings/mono/Makefile.am @@ -0,0 +1,39 @@ +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = appindicator-sharp.pc + +API = libappindicator-api.xml +RAW_API = libappindicator-api.raw +METADATA = libappindicator-api.metadata +ASSEMBLY_NAME = appindicator-sharp +ASSEMBLY = appindicator-sharp.dll +TARGET = $(ASSEMBLY) $(ASSEMBLY).config +assemblydir = $(libdir)/appindicator-sharp +assembly_DATA = $(TARGET) +CLEANFILES = $(ASSEMBLY) $(ASSEMBLY).mdb generated-stamp generated/*.cs $(API) $(RAW_API) +DISTCLEANFILES = $(ASSEMBLY).config +EXTRA_DIST = $(RAW_API) $(METADATA) appindicator-sharp.pc.in appindicator-sharp.dll.config.in + +references = $(GTK_SHARP_LIBS) + +$(RAW_API): app-indicator.sources.xml + $(GAPI_PARSER) app-indicator.sources.xml + +$(API): $(METADATA) $(RAW_API) + cp $(srcdir)/$(RAW_API) $(API) + chmod u+w $(API) + @if test -n '$(METADATA)'; then \ + echo "$(GAPI_FIXUP) --api=$(API) --metadata=$(srcdir)/$(METADATA)"; \ + $(GAPI_FIXUP) --api=$(API) --metadata=$(srcdir)/$(METADATA); \ + fi + +api_includes = $(GTK_SHARP_FLAGS) + +generated-stamp: $(API) + rm -f generated/* && \ + $(GAPI_CODEGEN) --generate $(API) $(api_includes) \ + --outdir=generated --assembly-name=$(ASSEMBLY_NAME) \ + && touch generated-stamp + +$(ASSEMBLY): generated-stamp + @rm -f $(ASSEMBLY).mdb + $(CSC) $(CSFLAGS) -nowarn:0169,0612,0618 -unsafe -out:$(ASSEMBLY) -target:library $(references) $(GENERATED_SOURCES)
\ No newline at end of file diff --git a/bindings/mono/app-indicator.sources.xml b/bindings/mono/app-indicator.sources.xml new file mode 100644 index 0000000..8ee8758 --- /dev/null +++ b/bindings/mono/app-indicator.sources.xml @@ -0,0 +1,12 @@ +<gapi-parser-input> + <api filename="libappindicator-api.raw"> + <library name="libappindicator.so"> + <namespace name="AppIndicator"> + <directory path="../../src/libappindicator"> + <exclude>app-indicator-enum-types.h.in</exclude> + <exclude>app-indicator-enum-types.c.in</exclude> + </directory> + </namespace> + </library> + </api> +</gapi-parser-input> diff --git a/bindings/mono/appindicator-sharp.dll.config.in b/bindings/mono/appindicator-sharp.dll.config.in new file mode 100644 index 0000000..c8caa80 --- /dev/null +++ b/bindings/mono/appindicator-sharp.dll.config.in @@ -0,0 +1,7 @@ +<configuration> + <dllmap dll="libappindicator.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@"/> + <dllmap dll="libgthread-2.0-0.dll" target="libgthread-2.0@LIB_PREFIX@.0@LIB_SUFFIX@"/> +</configuration> diff --git a/bindings/mono/appindicator-sharp.pc.in b/bindings/mono/appindicator-sharp.pc.in new file mode 100644 index 0000000..be5595a --- /dev/null +++ b/bindings/mono/appindicator-sharp.pc.in @@ -0,0 +1,12 @@ +prefix=${pcfiledir}/../.. +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +assemblies_dir=${libdir}/appindicator-sharp + +Name: appindicator +Description: application indicators for .NET +Version: @VERSION@ +Libraries: ${assemblies_dir}/appindicator-sharp.dll ${assemblies_dir}/appindicator-sharp.dll.config +Requires: gtk-sharp-2.0 +Cflags: +Libs: -r:${assemblies_dir}/appindicator-sharp.dll diff --git a/bindings/mono/libappindicator-api.metadata b/bindings/mono/libappindicator-api.metadata new file mode 100644 index 0000000..36c69e1 --- /dev/null +++ b/bindings/mono/libappindicator-api.metadata @@ -0,0 +1,15 @@ +<?xml version="1.0"?> +<metadata> + <attr path="/api/namespace/object[@cname='AppIndicator']" name="name">ApplicationIndicator</attr> + <attr path="/api/namespace/object[@cname='AppIndicator']/signal[@field_name='new_attention_icon']" name="name">NewAttentionIcon</attr> + <attr path="/api/namespace/object[@cname='AppIndicator']/signal[@field_name='new_status']" name="name">NewStatus</attr> + <attr path="/api/namespace/object[@cname='AppIndicator']/signal[@field_name='connection_changed']" name="name">ConnectionChanged</attr> + <attr path="/api/namespace/object[@cname='AppIndicator']/signal[@field_name='new_icon']" name="name">NewIcon</attr> + <attr path="/api/namespace/object[@cname='AppIndicator']/property[@cname='PROP_ID_S']" name="name">ID</attr> + <attr path="/api/namespace/object[@cname='AppIndicator']/property[@cname='PROP_CATEGORY_S']" name="name">Category</attr> + <attr path="/api/namespace/object[@cname='AppIndicator']/property[@cname='PROP_STATUS_S']" name="name">Status</attr> + <attr path="/api/namespace/object[@cname='AppIndicator']/property[@cname='PROP_ICON_NAME_S']" name="name">IconName</attr> + <attr path="/api/namespace/object[@cname='AppIndicator']/property[@cname='PROP_ATTENTION_ICON_NAME_S']" name="name">AttentionIconName</attr> + <attr path="/api/namespace/object[@cname='AppIndicator']/property[@cname='PROP_MENU_S']" name="name">Menu</attr> + <attr path="/api/namespace/object[@cname='AppIndicator']/property[@cname='PROP_CONNECTED_S']" name="name">Connected</attr> +</metadata> diff --git a/configure.ac b/configure.ac index 33d296c..456ca87 100644 --- a/configure.ac +++ b/configure.ac @@ -26,14 +26,15 @@ AC_PATH_PROG([GLIB_GENMARSHAL], [glib-genmarshal]) PKG_PROG_PKG_CONFIG ########################### -# GTK Doc +# GTK Doc ########################### GTK_DOC_CHECK([1.9]) AC_CONFIG_MACRO_DIR(m4) + ########################### -# Dependencies +# Dependencies ########################### GTK_REQUIRED_VERSION=2.12 @@ -48,6 +49,55 @@ AC_SUBST(INDICATOR_CFLAGS) AC_SUBST(INDICATOR_LIBS) ########################### +# Check for Mono support +########################### +MONO_REQUIRED_VERSION=1.0 +PKG_CHECK_MODULES(MONO_DEPENDENCY, mono >= $MONO_REQUIRED_VERSION, has_mono=true, has_mono=false) + +AC_PATH_PROG(AL, al, no) +if test "x$AL" = "xno" ; then + AC_MSG_ERROR([No al tool found. You need to install Mono.]) +fi + +if test "x$has_mono" = "xtrue" ; then + GENERATED_SOURCES=generated/*.cs + AC_PATH_PROG(RUNTIME, mono, no) + + if test "x$RUNTIME" != "no" ; then + RUNTIME=mono + fi + + AC_PATH_PROG(CSC, gmcs, no) + LIB_PREFIX=.so + LIB_SUFFIX= +fi + +if test "x$CSC" = "xno" ; then + AC_MSG_ERROR([No Mono compiler found.]) +fi + +AC_SUBST(RUNTIME) +AC_SUBST(CSC) +AC_SUBST(LIB_PREFIX) +AC_SUBST(LIB_SUFFIX) +AC_SUBST(GENERATED_SOURCES) + +GLIB_SHARP_REQ_VERSION=2.12.1 +GTK_SHARP_REQ_VERSION=2.12 +PKG_CHECK_MODULES(GTK_SHARP, gtk-sharp-2.0 >= $GTK_SHARP_REQ_VERSION) +AC_SUBST(GTK_SHARP_LIBS) +AC_SUBST(GTK_SHARP_CFLAGS) + +PKG_CHECK_MODULES(GAPI, gapi-2.0 >= $GLIB_SHARP_REQ_VERSION) +AC_PATH_PROG(GAPI_PARSER, gapi2-parser, no) +AC_SUBST(GAPI_PARSER) +AC_PATH_PROG(GAPI_CODEGEN, gapi2-codegen, no) +AC_SUBST(GAPI_CODEGEN) +AC_PATH_PROG(GAPI_FIXUP, gapi2-fixup, no) +AC_SUBST(GAPI_FIXUP) + + +########################### # Check to see if we're local ########################### @@ -87,6 +137,10 @@ AC_OUTPUT([ Makefile src/Makefile src/libappindicator/appindicator-0.1.pc +bindings/Makefile +bindings/mono/Makefile +bindings/mono/appindicator-sharp.dll.config +bindings/mono/appindicator-sharp.pc data/Makefile tests/Makefile example/Makefile |