From efc062dd6da1fa826630ba4aa568bbb2b68194e9 Mon Sep 17 00:00:00 2001 From: Eric Koegel Date: Sat, 25 Mar 2017 11:57:03 +0300 Subject: [PATCH] Add support for GOBJECT-INTROSPECTION GOjbect Introspection allows various other languages to automatically generate bindings they can use. For details see: https://wiki.gnome.org/action/show/Projects/GObjectIntrospection --- .gitignore | 9 +++++ Makefile.am | 3 +- configure.ac.in | 8 ++++- garcon-gtk/Makefile.am | 37 +++++++++++++++++-- garcon/Makefile.am | 33 +++++++++++++++++ m4/introspection.m4 | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 182 insertions(+), 4 deletions(-) create mode 100644 m4/introspection.m4 diff --git a/.gitignore b/.gitignore index 5bd358e..0c5963e 100644 --- a/.gitignore +++ b/.gitignore @@ -51,10 +51,12 @@ config.status config.sub configure configure.in +configure.ac depcomp garcon-1.pc garcon-config.h POTFILES +INSTALL data/xfce/xfce-accessories.directory data/xfce/xfce-development.directory data/xfce/xfce-education.directory @@ -71,10 +73,17 @@ data/xfce/xfce-settings.directory data/xfce/xfce-system.directory garcon-gtk/garcon-gtk2-1.pc garcon-gtk/garcon-gtk3-1.pc +garcon-gtk/libgarcon-gtk3-1.gir +garcon-gtk/libgarcon-gtk3-1.typelib garcon/garcon-2.pc garcon/garcon-marshal.c garcon/garcon-marshal.h +garcon/stamp-garcon-marshal.h +garcon/libgarcon-2.gir +garcon/libgarcon-2.typelib gtk-doc.m4 tests/test-display-menu tests/test-display-menu-gtk2 tests/test-display-menu-gtk3 +m4/* +po/.intltool-merge-cache diff --git a/Makefile.am b/Makefile.am index f111da1..5f827c3 100644 --- a/Makefile.am +++ b/Makefile.am @@ -58,4 +58,5 @@ DISTCLEANFILES = \ intltool-update DISTCHECK_CONFIGURE_FLAGS = \ - --enable-gtk-doc + --enable-gtk-doc \ + --enable-introspection diff --git a/configure.ac.in b/configure.ac.in index 4247cca..0ab66fb 100644 --- a/configure.ac.in +++ b/configure.ac.in @@ -44,7 +44,8 @@ dnl *** Initialize autoconf *** dnl *************************** AC_COPYRIGHT([Copyright (c) 2007-2011 Jannis Pohlmann ]) AC_INIT([garcon], [garcon_version], [http://bugzilla.xfce.org/]) -AC_PREREQ([2.50]) +AC_PREREQ([2.60]) +AC_CONFIG_MACRO_DIR([m4]) AC_REVISION([@REVISION@]) AC_CANONICAL_TARGET() @@ -128,6 +129,11 @@ XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-1], [4.10.0]) XDT_CHECK_PACKAGE([GTK3], [gtk+-3.0], [3.14.0]) XDT_CHECK_PACKAGE([LIBXFCE4UI2], [libxfce4ui-2], [4.11.1]) +dnl *************************************** +dnl *** Check for gobject-introspection *** +dnl *************************************** +GOBJECT_INTROSPECTION_CHECK([1.30.0]) + dnl ************************* dnl *** Check for gtk-doc *** dnl ************************* diff --git a/garcon-gtk/Makefile.am b/garcon-gtk/Makefile.am index 32db683..ee6a087 100644 --- a/garcon-gtk/Makefile.am +++ b/garcon-gtk/Makefile.am @@ -73,7 +73,7 @@ libgarcon_gtk2_1_la_LIBADD = \ $(GTHREAD_LIBS) \ $(LIBXFCE4UI_LIBS) -libgarcon_gtk2_DEPENDENCIES = \ +libgarcon_gtk2_1_la_DEPENDENCIES = \ $(top_builddir)/garcon/libgarcon-$(GARCON_VERSION_API).la @@ -114,7 +114,7 @@ libgarcon_gtk3_1_la_LIBADD = \ $(GTHREAD_LIBS) \ $(LIBXFCE4UI2_LIBS) -libgarcon_gtk3_DEPENDENCIES = \ +libgarcon_gtk3_1_la_DEPENDENCIES = \ $(top_builddir)/garcon/libgarcon-$(GARCON_VERSION_API).la @@ -123,3 +123,36 @@ pkgconfig_DATA = garcon-gtk2-1.pc garcon-gtk3-1.pc # Required for gtk-doc and make distcheck dist-hook: all + +include $(INTROSPECTION_MAKEFILE) +INTROSPECTION_GIRS = +INTROSPECTION_SCANNER_ENV = CC="$(CC)" +INTROSPECTION_SCANNER_ARGS = \ + --add-include-path=$(srcdir) \ + --warn-all \ + --identifier-prefix=garcon \ + --identifier-prefix=Garcon +INTROSPECTION_COMPILER_ARGS = \ + --includedir=$(srcdir) \ + --includedir=. + +if HAVE_INTROSPECTION +introspection_sources = $(filter-out %private.h %.c, $(libgarcon_gtk3_1_la_SOURCES)) + +libgarcon-gtk3-1.gir: libgarcon-gtk3-1.la $(top_builddir)/garcon/libgarcon-2.gir Makefile +libgarcon_gtk3_1_gir_INCLUDES = GObject-2.0 GLib-2.0 Gio-2.0 Gtk-3.0 libxfce4util-1.0 libxfce4ui-2 +libgarcon_gtk3_1_gir_CFLAGS = $(AM_CPPFLAGS) +libgarcon_gtk3_1_gir_LIBS = libgarcon-gtk3-1.la +libgarcon_gtk3_1_gir_FILES = $(introspection_sources) +libgarcon_gtk3_1_gir_EXPORT_PACKAGES = libgarcon-gtk3-1 +INTROSPECTION_GIRS += libgarcon-gtk3-1.gir + +girdir = $(datadir)/gir-1.0 +gir_DATA = $(INTROSPECTION_GIRS) + +typelibdir = $(libdir)/girepository-1.0 +typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib) + +DISTCLEANFILES = $(gir_DATA) $(typelib_DATA) +endif +# endif HAVE_INTROSPECTION diff --git a/garcon/Makefile.am b/garcon/Makefile.am index d57e0ca..5fcc0d5 100644 --- a/garcon/Makefile.am +++ b/garcon/Makefile.am @@ -180,3 +180,36 @@ garcon-marshal.c: garcon-marshal.list Makefile # Required for gtk-doc and make distcheck dist-hook: all + +include $(INTROSPECTION_MAKEFILE) +INTROSPECTION_GIRS = +INTROSPECTION_SCANNER_ENV = CC="$(CC)" +INTROSPECTION_SCANNER_ARGS = \ + --add-include-path=$(srcdir) \ + --warn-all \ + --identifier-prefix=garcon \ + --identifier-prefix=Garcon +INTROSPECTION_COMPILER_ARGS = \ + --includedir=$(srcdir) \ + --includedir=. + +if HAVE_INTROSPECTION +introspection_sources = $(filter-out %private.h %.c, $(libgarcon_2_la_SOURCES)) + +libgarcon-2.gir: libgarcon-2.la Makefile +libgarcon_2_gir_INCLUDES = GObject-2.0 GLib-2.0 Gio-2.0 Gtk-3.0 libxfce4util-1.0 libxfce4ui-2 +libgarcon_2_gir_CFLAGS = $(AM_CPPFLAGS) +libgarcon_2_gir_LIBS = libgarcon-2.la +libgarcon_2_gir_FILES = $(introspection_sources) +libgarcon_2_gir_EXPORT_PACKAGES = libgarcon-2 +INTROSPECTION_GIRS += libgarcon-2.gir + +girdir = $(datadir)/gir-1.0 +gir_DATA = $(INTROSPECTION_GIRS) + +typelibdir = $(libdir)/girepository-1.0 +typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib) + +DISTCLEANFILES += $(gir_DATA) $(typelib_DATA) +endif +# endif HAVE_INTROSPECTION diff --git a/m4/introspection.m4 b/m4/introspection.m4 new file mode 100644 index 0000000..aa7b3b4 --- /dev/null +++ b/m4/introspection.m4 @@ -0,0 +1,96 @@ +dnl -*- mode: autoconf -*- +dnl Copyright 2009 Johan Dahlin +dnl +dnl This file is free software; the author(s) gives unlimited +dnl permission to copy and/or distribute it, with or without +dnl modifications, as long as this notice is preserved. +dnl + +# serial 1 + +m4_define([_GOBJECT_INTROSPECTION_CHECK_INTERNAL], +[ + AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first + AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first + AC_BEFORE([LT_INIT],[$0])dnl setup libtool first + + dnl enable/disable introspection + m4_if([$2], [require], + [dnl + enable_introspection=yes + ],[dnl + AC_ARG_ENABLE(introspection, + AS_HELP_STRING([--enable-introspection[=@<:@no/auto/yes@:>@]], + [Enable introspection for this build]),, + [enable_introspection=auto]) + ])dnl + + AC_MSG_CHECKING([for gobject-introspection]) + + dnl presence/version checking + AS_CASE([$enable_introspection], + [no], [dnl + found_introspection="no (disabled, use --enable-introspection to enable)" + ],dnl + [yes],[dnl + PKG_CHECK_EXISTS([gobject-introspection-1.0],, + AC_MSG_ERROR([gobject-introspection-1.0 is not installed])) + PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1], + found_introspection=yes, + AC_MSG_ERROR([You need to have gobject-introspection >= $1 installed to build AC_PACKAGE_NAME])) + ],dnl + [auto],[dnl + PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1], found_introspection=yes, found_introspection=no) + dnl Canonicalize enable_introspection + enable_introspection=$found_introspection + ],dnl + [dnl + AC_MSG_ERROR([invalid argument passed to --enable-introspection, should be one of @<:@no/auto/yes@:>@]) + ])dnl + + AC_MSG_RESULT([$found_introspection]) + + INTROSPECTION_SCANNER= + INTROSPECTION_COMPILER= + INTROSPECTION_GENERATE= + INTROSPECTION_GIRDIR= + INTROSPECTION_TYPELIBDIR= + if test "x$found_introspection" = "xyes"; then + INTROSPECTION_SCANNER=`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0` + INTROSPECTION_COMPILER=`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0` + INTROSPECTION_GENERATE=`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0` + INTROSPECTION_GIRDIR=`$PKG_CONFIG --variable=girdir gobject-introspection-1.0` + INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --variable=typelibdir gobject-introspection-1.0)" + INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0` + INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0` + INTROSPECTION_MAKEFILE=`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection + fi + AC_SUBST(INTROSPECTION_SCANNER) + AC_SUBST(INTROSPECTION_COMPILER) + AC_SUBST(INTROSPECTION_GENERATE) + AC_SUBST(INTROSPECTION_GIRDIR) + AC_SUBST(INTROSPECTION_TYPELIBDIR) + AC_SUBST(INTROSPECTION_CFLAGS) + AC_SUBST(INTROSPECTION_LIBS) + AC_SUBST(INTROSPECTION_MAKEFILE) + + AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = "xyes") +]) + + +dnl Usage: +dnl GOBJECT_INTROSPECTION_CHECK([minimum-g-i-version]) + +AC_DEFUN([GOBJECT_INTROSPECTION_CHECK], +[ + _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1]) +]) + +dnl Usage: +dnl GOBJECT_INTROSPECTION_REQUIRE([minimum-g-i-version]) + + +AC_DEFUN([GOBJECT_INTROSPECTION_REQUIRE], +[ + _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1], [require]) +]) -- 2.11.0