diff options
author | Philip Chimento <philip@endlessm.com> | 2013-07-22 23:43:53 -0700 |
---|---|---|
committer | Philip Chimento <philip@endlessm.com> | 2013-07-22 23:43:53 -0700 |
commit | 9619c0f8b7bf8ba45a0e688eea782dedf817424d (patch) | |
tree | 0af576888e1e986c78b8fb679ea72800d21d3cbe /m4 | |
parent | ae9928b88ac2bcc82921e04e8cf4df5e18be174d (diff) |
Autoconf macros for checking GIR files
EOS_PROG_GJS checks for the existence of GJS in the path;
EOS_CHECK_GJS_GIR checks that a GIR can be loaded in GJS, optionally
with a certain version number; and EOS_CHECK_GJS_GIR_API checks for
particular API being available in a GIR in GJS.
[endlessm/eos-sdk#168]
Diffstat (limited to 'm4')
-rw-r--r-- | m4/eos-gir.m4 | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/m4/eos-gir.m4 b/m4/eos-gir.m4 new file mode 100644 index 0000000..c1a2ebf --- /dev/null +++ b/m4/eos-gir.m4 @@ -0,0 +1,86 @@ +dnl Copyright 2013 Endless Mobile, Inc. +dnl +dnl Macros to check for GObject introspection libraries + +# EOS_PROG_GJS +# ------------ +# Checks for the presence of GJS in the path. + +AC_DEFUN_ONCE([EOS_PROG_GJS], [ + AC_PATH_PROG([GJS], [gjs], [notfound]) +]) + +# _EOS_GJS_IFELSE(program, [action-if-true], [action-if-false]) +# ------------------------------------------------------------- +# Comparable to AC_RUN_IFELSE(), but runs the program using GJS +# instead of trying to compile it and link it. + +AC_DEFUN([_EOS_GJS_IFELSE], [ + AC_REQUIRE([EOS_PROG_GJS]) + echo "$1" >conftest.js + $GJS conftest.js >/dev/null 2>&1 + AS_IF([test $? -eq 0], [$2], [$3]) +]) + +# EOS_CHECK_GJS_GIR(<module>, [<version>]) +# ------------------------------------ +# Example: +# EOS_CHECK_GJS_GIR([Gtk], [3.0]) +# +# Check that the GIR <module> is importable in GJS. The API +# version must be at least <version>, if given. Note that the +# API version is different from the release version; GTK +# currently has API version 3.0, but that could mean any +# release from the 3.0, 3.2, 3.4,... series. To check for +# specific API that was added in a later version, use +# EOS_CHECK_GJS_GIR_API. + +AC_DEFUN([EOS_CHECK_GJS_GIR], [ + AS_IF([test -z "$2"], [ + AC_MSG_CHECKING([for $1]) + _EOS_GJS_IFELSE([const Library = imports.gi.$1;], + [AC_MSG_RESULT([yes])], + [AC_MSG_FAILURE([no])] + ) + ], [ + AC_MSG_CHECKING([for version $2 of $1]) + _EOS_GJS_IFELSE([ + imports.gi.versions@<:@\"$1\"@:>@ = \"$2\"; + const Library = imports.gi.$1; + ], + [AC_MSG_RESULT([yes])], + [ + AC_MSG_RESULT([no]) + GIRNAME="gir1.2-m4_tolower($1)-$2" + AC_MSG_ERROR([You do not have at least API version $2 of +the GObject Introspection bindings for the $1 library. +If on Ubuntu, try installing the '$GIRNAME' package.]) + ] + ) + ]) +]) + +# EOS_CHECK_GJS_GIR_API(<module>, <symbol>) +# ----------------------------------------- +# Example: +# EOS_CHECK_GJS_GIR_API([Gtk], [ListBox]) +# +# Check that <symbol> is defined inside the GIR <module> and +# is discoverable (not undefined) in GJS. + +AC_DEFUN([EOS_CHECK_GJS_GIR_API], [ + AC_MSG_CHECKING([for $1.$2]) + _EOS_GJS_IFELSE([ + const Library = imports.gi.$1; + if(typeof Library.$2 === 'undefined') + throw 1; + ], + [AC_MSG_RESULT([yes])], + [ + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Your GObject Introspection bindings for +the $1 library do not define the symbol $1.$2. +Perhaps you need a newer version of the library?]) + ]) +]) + |