ax_extend_srcdir

Synopsis

AX_EXTEND_SRCDIR

Description

The AX_EXTEND_SRCDIR macro extends $srcdir by one path component.

As an example, when working in /home/michael/i3-4.12/build and calling ../configure, your $srcdir is "..". After calling AX_EXTEND_SRCDIR, $srcdir will be set to "../../i3-4.12".

The result of extending $srcdir is that filenames (e.g. in the output of the "backtrace" gdb command) will include one more path component of the absolute source path. The additional path component makes it easy for users to recognize which files belong to the PACKAGE, and – provided a dist tarball was unpacked – which version of PACKAGE was used.

As an example, in "backtrace", you will see:

  #0  main (argc=1, argv=0x7fffffff1fc8) at ../../i3-4.12/src/main.c:187

instead of:

  #0  main (argc=1, argv=0x7fffffff1fc8) at ../src/main.c:187

In case your code uses the __FILE__ preprocessor directive to refer to the filename of the current source file (e.g. in debug messages), using the extended path might be undesirable. For this purpose, AX_EXTEND_SRCDIR defines the output variable AX_EXTEND_SRCDIR_CPPFLAGS, which can be added to AM_CPPFLAGS in Makefile.am in order to define the preprocessor directive STRIPPED__FILE__. As an example, when compiling the file "../../i3-4.12/src/main.c", STRIPPED__FILE__ evaluates to "main.c".

There are some caveats: When $srcdir is "." (i.e. when ./configure was called instead of ../configure in a separate build directory), AX_EXTEND_SRCDIR will still extend $srcdir, but the intended effect will not be achieved because of the way automake specifies file paths: automake defines COMPILE to use "‘test -f ’$source’ || echo ’\$(srcdir)/’‘$source" in order to prefer files in the current directory over specifying $srcdir explicitly.

The AX_EXTEND_SRCDIR author is not aware of any way to influence this automake behavior. Patches very welcome.

To work around this issue, you can use AX_ENABLE_BUILDDIR i.e. by adding the following code to configure.ac:

  AX_ENABLE_BUILDDIR
  dnl ...
  AX_EXTEND_SRCDIR

Then also add this bit to Makefile.am (if you wish to use STRIPPED__FILE__ in your code):

  AM_CPPFLAGS = @AX_EXTEND_SRCDIR_CPPFLAGS@

Source Code

Download the latest version of ax_extend_srcdir.m4 or browse the macro’s revision history.

License

Copyright © 2016 Michael Stapelberg 

Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without any warranty.