www.idziorek.net | blog | contact

The Hell of Autotools

March 19, 2018

In this trivial example we compile a custom webkit2gtk+ extension with autotools. For a start we need to provide two files, Makefile.am and configure.ac, beside our actual ext.c source file, which contains the extension code itself.

// File: ext.c //

#include <webkit2/webkit-web-extension.h>
 
G_MODULE_EXPORT void
webkit_web_extension_initialize_with_user_data (WebKitWebExtension *extension,
                                                GVariant           *user_data)
{
    g_print("Hello Extension!\n");
}
# File: Makefile.am #

webextension_LTLIBRARIES = libmyappwebextension.la
webextensiondir = /home/miguel/temp
 
WEB_EXTENSION_CFLAGS = `pkg-config --cflags webkit2gtk-web-extension-4.0`
WEB_EXTENSION_LIBS2 = `pkg-config --libs webkit2gtk-web-extension-4.0`
 
libmyappwebextension_la_SOURCES = ext.c
libmyappwebextension_la_CFLAGS = $(WEB_EXTENSION_CFLAGS)
libmyappwebextension_la_LIBADD = $(WEB_EXTENSION_LIBS)
libmyappwebextension_la_LDFLAGS = -module -avoid-version -no-undefined $(WEB_EXTENSION_LIBS2)
# File: configure.ac #

AC_PREREQ([2.69])
AC_INIT(ext,0.1,test@example.com)
AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([ext.c])
AC_PROG_CC
LT_INIT
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

Put the above files in a new fresh directory and you are ready to see the powers of autotools in action.

Run the following commands on your pash prompt:

touch NEWS README AUTHORS ChangeLog
aclocal
autoconf
automake --add-missing

After this steps, we end up with 18 files in our directory. Finally we can configure, build and install our extension. The following commands will probably look familiar. Note that the configure step generates 6 additional files, totaling in 24 files before the actual make command is run.

./configure 
make
make install

… just to compile one single C file.