From 2eb4828cdb3ada06de1662af59bc17ca72296dc2 Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Sat, 27 Feb 2016 16:19:57 +0100 Subject: [PATCH] Update autotools to Vala usage --- .gitignore | 9 ++- configure.ac | 37 ++++++------- docs/reference/matrix-glib/Makefile.am | 4 +- m4/valac.m4 | 76 ++++++++++++++++++++++++++ src/Makefile.am | 62 ++++++++++++++++++++- src/Matrix-0.0.deps | 3 + vala-globals.mk | 5 ++ 7 files changed, 174 insertions(+), 22 deletions(-) create mode 100644 m4/valac.m4 create mode 100644 src/Matrix-0.0.deps create mode 100644 vala-globals.mk diff --git a/.gitignore b/.gitignore index 10732ce..f8ffe65 100644 --- a/.gitignore +++ b/.gitignore @@ -27,7 +27,8 @@ Makefile.in .libs/ /stamp-h1 /gtk-doc.make -/m4/ +/m4/* +!/m4/valac.m4 /GPATH /GRTAGS /GSYMS @@ -54,3 +55,9 @@ Makefile.in /docs/reference/matrix-glib/matrix-glib.signals /docs/reference/matrix-glib/matrix-glib.types /docs/reference/matrix-glib/*.bak + +# Vala related files +/src/Matrix-0.0.vapi +/src/vala-temp +/src/vala-stamp +/src/matrix-glib.h \ No newline at end of file diff --git a/configure.ac b/configure.ac index dfcad69..c6803ec 100644 --- a/configure.ac +++ b/configure.ac @@ -83,31 +83,27 @@ AC_SUBST([LT_CURRENT], matrix_glib_lt_current) AC_SUBST([LT_REVISION], matrix_glib_lt_revision) AC_SUBST([LT_AGE], matrix_glib_lt_age) -AC_SUBST([MATRIX_GLIB_MAJOR_MINOR_VERSION], matrix_glib_major_minor_version) - -# This is used to identify a set of API compatible between versions -# - If new versions are compatible with the actual one, just leave -# this untouched -# - If new version breaks API change it in order to allow parallel -# installations with old versions. Change name of pc files to use -# a new API, too -AC_SUBST([API_VERSION], matrix_glib_api_version) - AC_SUBST([MATRIX_GLIB_VERSION], matrix_glib_base_version) ### Dependencies -GLIB_REQUIRED=2.38.0 +GLIB_REQUIRED=2.40.0 +VALA_REQUIRED=0.30.0 +LIBVALA_REQUIRED=0.30 +GIO_REQUIRED=2.22 SOUP_REQUIRED=2.44.2 JSON_REQUIRED=0.16.2 # Check GLib PKG_CHECK_MODULES([GLIB], - [glib-2.0 >= $GLIB_REQUIRED]) + [glib-2.0 >= $GLIB_REQUIRED + gobject-2.0 >= $GLIB_REQUIRED]) -# Check GObject -PKG_CHECK_MODULES([GOBJECT], - [gobject-2.0 >= $GLIB_REQUIRED]) +# Check for vala +VALAC_CHECK + +# Check for GIO +PKG_CHECK_MODULES([GIO], [gio-2.0 >= $GIO_REQUIRED]) # Check for libSoup PKG_CHECK_MODULES([SOUP], [libsoup-2.4 >= $SOUP_REQUIRED]) @@ -139,8 +135,14 @@ fi AC_SUBST([MATRIX_GLIB_MAJOR_VERSION], matrix_glib_major_version) AC_SUBST([MATRIX_GLIB_MINOR_VERSION], matrix_glib_minor_version) AC_SUBST([MATRIX_GLIB_MICRO_VERSION], matrix_glib_micro_version) + +# This is used to identify a set of API compatible between versions +# - If new versions are compatible with the actual one, just leave +# this untouched +# - If new version breaks API change it in order to allow parallel +# installations with old versions. Change name of pc files to use +# a new API, too AC_SUBST([MATRIX_GLIB_API_VERSION], matrix_glib_api_version) -AC_SUBST([MATRIX_GLIB_API_VERSION_U], [AS_TR_SH(matrix_glib_api_version)]) m4_ifdef([GTK_DOC_CHECK], [ GTK_DOC_CHECK([1.20], [--flavour no-tmpl]) @@ -151,9 +153,6 @@ AM_CONDITIONAL([ENABLE_GTK_DOC], false) AC_PATH_PROG([GLIB_MKENUMS], [glib-mkenums]) AC_PATH_PROG([GLIB_GENMARSHAL], [glib-genmarshal]) -LIBMATRIX_GLIB_LIBS='$(top_builddir)/src/libmatrix-glib-$(MATRIX_GLIB_API_VERSION).la' -AC_SUBST(LIBMATRIX_GLIB_LIBS) - AC_CONFIG_FILES([ Makefile src/Makefile diff --git a/docs/reference/matrix-glib/Makefile.am b/docs/reference/matrix-glib/Makefile.am index 1006f18..aec0e49 100644 --- a/docs/reference/matrix-glib/Makefile.am +++ b/docs/reference/matrix-glib/Makefile.am @@ -79,7 +79,9 @@ expand_content_files= # e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) GTKDOC_CFLAGS= -GTKDOC_LIBS=$(LIBMATRIX_GLIB_LIBS) $(NULL) +GTKDOC_LIBS = \ + $(top_builddir)/src/libmatrix-glib-$(MATRIX_GLIB_API_VERSION).la \ + $(NULL) # This includes the standard gtk-doc make rules, copied by gtkdocize. include $(top_srcdir)/gtk-doc.make diff --git a/m4/valac.m4 b/m4/valac.m4 new file mode 100644 index 0000000..f889bef --- /dev/null +++ b/m4/valac.m4 @@ -0,0 +1,76 @@ +dnl vapigen.m4 +dnl +dnl Copyright 2014 Daniel Espinosa +dnl +dnl This library is free software; you can redistribute it and/or +dnl modify it under the terms of the GNU Lesser General Public +dnl License as published by the Free Software Foundation; either +dnl version 2.1 of the License, or (at your option) any later version. +dnl +dnl This library is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl Lesser General Public License for more details. +dnl +dnl You should have received a copy of the GNU Lesser General Public +dnl License along with this library; if not, write to the Free Software +dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +# VALAC_CHECK([VERSION], [API_VERSION]) +# -------------------------------------- +# Check valac existence and version. +m4_define([_VALAC_CHECK_INTERNAL], +[ + AC_REQUIRE([PKG_PROG_PKG_CONFIG]) + AS_IF([ test "x$2" = "x" ], [ + AM_PROG_VALAC($1) + AS_IF([ test "x$VALAC" = "xno"], [ + check_prog=no + AC_MSG_ERROR([valac is not installed]) + ], [ + check_prog=yes + VALAC_VERSION=`$VALAC --api-version` + VAPIDIR=$datadir/vala-$VALAC_VERSION/vapi + VAPIDIR_UNVERSIONED=$datadir/vala-$VALAC_VERSION/vapi + ]) + ], [ + AS_IF([ test "x$1" = "x"], [ + vala_pkg="libvala-$2" + ], [ + vala_pkg="libvala-$2 >= $1" + ]) + AC_MSG_CHECKING([for $vala_pkg]) + PKG_CHECK_EXISTS([ $vala_pkg ], [ + vala_pkg_found=yes + VAPIGEN=`$PKG_CONFIG --variable=vapigen libvala-$2` + VAPIGEN_MAKEFILE=`$PKG_CONFIG --variable=datadir libvala-$2`/vala/Makefile.vapigen + VAPIDIR=`$PKG_CONFIG --variable=vapidir libvala-$2` + GEN_INTROSPECT=`$PKG_CONFIG --variable=gen_introspect libvala-$2` + vala_datadir=`$PKG_CONFIG --variable=datadir libvala-$2` + VAPIDIR_UNVERSIONED=$vala_datadir/vala/vapi + VALA_GEN_INTROSPECT=`$PKG_CONFIG --variable=vala_gen_introspect libvala-$2` + ], [ + vala_pkg_found=no + AC_MSG_ERROR([no package libvala-$2 is installed]) + ]) + AC_MSG_RESULT([$vala_pkg_found]) + ]) + AC_SUBST([VAPIGEN]) + AC_SUBST([VAPIGEN_VAPIDIR]) + AC_SUBST([VAPIDIR]) + AC_SUBST([VAPIDIR_UNVERSIONED]) + AC_SUBST([VAPIGEN_MAKEFILE]) + AC_SUBST([GEN_INTROSPECT]) + AC_SUBST([VALA_GEN_INTROSPECT]) + AC_SUBST([VALAC_VERSION]) +]) + +dnl Check VAPIGEN +# VALAC_CHECK([VERSION], [API_VERSION], [DEFAULT]) +# -------------------------------------- +# Check vapigen existence and version. +AC_DEFUN([VALAC_CHECK], +[ + _VALAC_CHECK_INTERNAL($1,$2,$3) +] +) diff --git a/src/Makefile.am b/src/Makefile.am index 892f34b..a8082d2 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,13 +1,69 @@ +include $(top_srcdir)/vala-globals.mk + AM_CPPFLAGS = -DG_LOG_DOMAIN=\"Matrix-GLib\" # Empty variables for elements to be added later CLEANFILES = BUILT_SOURCES = EXTRA_DIST = +AM_VALAFLAGS = + +# Name of the public header file +PUBLIC_HEADER = matrix-glib.h # Libraries to create lib_LTLIBRARIES = libmatrix-glib-0.0.la +# Vala source files +libmatrix_glib_0_0_la_VALA_SOURCES = \ + $(NULL) + +AM_CPPFLAGS += \ + -include $(CONFIG_HEADER) \ + -I$(top_srcdir) \ + -g \ + -Wall \ + $(GLIB_CFLAGS) \ + $(GOBJECT_CFLAGS) \ + $(SOUP_CFLAGS) \ + $(JSON_CFLAGS) \ + $(VALA_CFLAGS) \ + $(NULL) + +AM_VALAFLAGS += \ + --library=Matrix-$(MATRIX_GLIB_API_VERSION) \ + $(VALA_PKG_LIST) \ + --vapi=Matrix-$(MATRIX_GLIB_API_VERSION).vapi \ + -H $(PUBLIC_HEADER) \ + -C \ + --use-header \ + --gir=Matrix-$(MATRIX_GLIB_API_VERSION).gir \ + $(NULL) + +vala-stamp: $(libmatrix_glib_0_0_la_VALA_SOURCES) + @rm -f vala-temp + @touch vala-temp + $(AM_V_GEN) $(VALAC) $(AM_VALAFLAGS) $^ + @mv -f vala-temp $@ + +CLEANFILES += \ + $(PUBLIC_HEADER) \ + $(libmatrix_glib_0_0_la_VALA_SOURCES:.vala=.c) \ + $(NULL) + +$(libmatrix_glib_0_0_la_VALA_SOURCES:.vala=.c): vala-stamp + @if test -f $@; then :; else \ + trap 'rm -rf vala-lock vala-stamp' 1 2 13 15; \ + if mkdir vala-lock 2> /dev/null; then \ + rm -f vala-stamp; \ + $(MAKE) $(AM_MAKEFLAGS) vala-stamp; \ + rmdir vala-lock; \ + else \ + while test -d vala-lock; do sleep 1; done; \ + test -f vala-stamp; exit $$?; \ + fi \ + fi + # Binaries to create bin_PROGRAMS = test-api-client @@ -32,6 +88,7 @@ matrix_enum_headers = \ libmatrix_glib_0_0_la_SOURCES = \ $(INST_H_BUILT_FILES) \ matrix-marshalers.c \ + $(libmatrix_glib_0_0_la_VALA_SOURCES:.vala=.c) \ matrix-version.c \ matrix-types.c \ matrix-api.c \ @@ -60,6 +117,8 @@ libmatrix_glib_0_0_la_LIBADD = \ libmatrix_glib_0_0_la_LDFLAGS = \ -version-info "$(LT_CURRENT)":"$(LT_REVISION)":"$(LT_AGE)" +$(PUBLIC_HEADER): vala-stamp + BUILT_SOURCES += \ matrix-enumtypes.c \ matrix-enumtypes.h \ @@ -68,7 +127,7 @@ BUILT_SOURCES += \ $(NULL) test_api_client_SOURCES = test-api-client.c -test_api_client_CFLAGS = $(libmatrix_glib_0_0_la_CFLAGS) +test_api_client_CFLAGS = $(libmatrix_glib_0_0_la_CFLAGS) $(AM_CFLAGS) test_api_client_LDADD = \ $(libmatrix_glib_0_0_la_LIBADD) \ libmatrix-glib-$(MATRIX_GLIB_API_VERSION).la \ @@ -152,6 +211,7 @@ typelibs_DATA = Matrix-$(MATRIX_GLIB_API_VERSION).typelib headerdir = $(includedir)/matrix-glib-$(MATRIX_GLIB_API_VERSION) header_DATA = \ + $(PUBLIC_HEADER) \ $(INST_H_SRC_FILES) \ $(INST_H_BUILT_FILES) \ $(NULL) diff --git a/src/Matrix-0.0.deps b/src/Matrix-0.0.deps new file mode 100644 index 0000000..b39c797 --- /dev/null +++ b/src/Matrix-0.0.deps @@ -0,0 +1,3 @@ +gio-2.0 +Json-1.0 +libsoup-2.4 diff --git a/vala-globals.mk b/vala-globals.mk new file mode 100644 index 0000000..c82b70d --- /dev/null +++ b/vala-globals.mk @@ -0,0 +1,5 @@ +VALA_PKG_LIST = \ + --pkg=gio-2.0 \ + --pkg=Json-1.0 \ + --pkg=libsoup-2.4 \ + $(NULL)