Home Home > 2013 > 11 > 19 > openSUSE and GCC part 7: autotools and how I do it
Sign up | Login

openSUSE and GCC part 7: autotools and how I do it

November 19th, 2013 by

Last time I was little bit too hard to autotools. Okay they are not easy but they work. I also let last time people to figure how to get a long with autotools. Now I show how I do it.

Let’s dance

First put some good music on and relax. Starting new project and trying to get it compile is very unpleasant experience. Then read blog about autotools and then also see example that I’ve been using. Now you should have files: ‘configure.ac’, ‘Makefile.am’, ‘SDL_DisplayBitmap.c’, ‘LICENSE.TXT’ and ‘image.bmp’ in same directory/folder also you should have rpm libSDL_image-devel installed. Then we zypper needed autotools in.

zypper install libtool automake autoconf

after that we need to make directory contain needed scripts and M4-macros. You don’t need to copy them manually just make like this in console:

aclocal --force
libtoolize -c
automake --copy --add-missing
autoconf --force

So we run ‘aclocal’ to copy those M4-macros after that we ‘libtoolize’ our directory and then ‘automake’ creates needed ‘Makefile.in’ files from ‘Makefile.am’. Last ‘autoconf’ creates configure-script from configure.ac. If everything went fine you ca continue:

./configure
make
./SDL_DisplayBitmap

Okay now it should work as expected. If you are interested you can try also

make dist

and you should have ‘SDL_DisplayBitmap-1.0.tar.gz’ and ‘SDL_DisplayBitmap-1.0.tar.bz2’ to distribute you application.

Let’s dig further

I’ll explain what these sentences mean in ‘configure.ac’:

AC_PREREQ([2.57])
AC_CONFIG_MACRO_DIR([m4])

Just tell what Autoconf is needed at least 2.57 and what is M4-macro directory (in this case it’s ‘m4’)

AC_INIT([SDL_DisplayBitmap], [1.0], [http://lizards.opensuse.org])

Let’s have application named SDL_DisplayBitmap which version is 1.0 and URL to see something more is http://lizards.opensuse.org

AM_INIT_AUTOMAKE([foreign dist-bzip2])

Initialize automake. We want ‘tar.bz2’ package also made.

AC_LANG_C
AC_PROG_CC
AM_PROG_LIBTOOL

Make sure we have C++ and C-compiler and Libtools.

C_OPTIONS="-ansi -Wall -Werror -std=c99 -fno-strict-aliasing"

I use these C-Flags in my applications. You should use yours.

AC_SUBST(C_OPTIONS)

Make them available in Makefile.in/.am

PKG_CHECK_MODULES(SDL, SDL_image)

Check SDL_image from pkg-config and store it in SDL-prefix (SDL_LIBS and SDL_CFLAGS) variable.

AC_OUTPUT([Makefile])

Configure these files from configure here. In our case only use formulate Makefile.in file.

Makefile.am

Now it’s time to listen Scorpions Still loving you if don’t already listening it.

INCLUDES = $(SDL_CFLAGS) $(C_OPTIONS)

This actually old school way of doing it but it compatible downwards. We but our C_OPTIONS from configure.ac and SDL needed build flags in build.

EXTRA_DIST = LICENSE.TXT image.bmp

We also pack these files in distribution tar-ball.

noinst_PROGRAMS = SDL_DisplayBitmap

This tell we want to have binary named: ‘SDL_DisplayBitmap’ that ain’t installed anywhere. If you but bin_PROGRAMS application will be installed to ‘/usr/local/bin’ or ‘prefix/bin’ you mentioned in ‘./configure –prefix=/prefix’ (sbin_PROGRAMS will install it to ‘/usr/local/sbin’).

SDL_DisplayBitmap_SOURCES = SDL_DisplayBitmap.c
SDL_DisplayBitmap_LDFLAGS = $(SDL_LIBS)

Actually tell what sources belongs to SDL_DisplayBitmap and what libs are need to build this.

Yes that was so easy and nice. Next time is time to make RPM from our example application.

Both comments and pings are currently closed.

Comments are closed.