mirror of
				https://github.com/Raymo111/i3lock-color.git
				synced 2025-10-30 23:28:21 -04:00 
			
		
		
		
	initial merge commit
This commit is contained in:
		
						commit
						8011b0c9ab
					
				
					 19 changed files with 1678 additions and 84 deletions
				
			
		
							
								
								
									
										27
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -3,3 +3,30 @@ i3lock
 | 
			
		|||
tags
 | 
			
		||||
*.swp
 | 
			
		||||
*.gz
 | 
			
		||||
 | 
			
		||||
################################################################################
 | 
			
		||||
# https://raw.githubusercontent.com/github/gitignore/master/Autotools.gitignore
 | 
			
		||||
################################################################################
 | 
			
		||||
 | 
			
		||||
# http://www.gnu.org/software/automake
 | 
			
		||||
 | 
			
		||||
Makefile.in
 | 
			
		||||
/ar-lib
 | 
			
		||||
/test-driver
 | 
			
		||||
 | 
			
		||||
# http://www.gnu.org/software/autoconf
 | 
			
		||||
 | 
			
		||||
/autom4te.cache
 | 
			
		||||
/autoscan.log
 | 
			
		||||
/autoscan-*.log
 | 
			
		||||
/aclocal.m4
 | 
			
		||||
/compile
 | 
			
		||||
/config.h.in
 | 
			
		||||
/config.guess
 | 
			
		||||
/config.sub
 | 
			
		||||
/configure
 | 
			
		||||
/configure.scan
 | 
			
		||||
/depcomp
 | 
			
		||||
/install-sh
 | 
			
		||||
/missing
 | 
			
		||||
/stamp-h1
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,5 +25,5 @@ before_install:
 | 
			
		|||
  - sudo apt-get update
 | 
			
		||||
  - sudo apt-get --force-yes -y install -t xenial libxkbcommon-dev libxkbcommon-x11-dev
 | 
			
		||||
script:
 | 
			
		||||
  - make -j
 | 
			
		||||
  - autoreconf -fi && mkdir -p build && cd build && (../configure || (cat config.log; false)) && make -j CFLAGS="-Wformat -Wformat-security -Wextra -Wno-unused-parameter -Werror"
 | 
			
		||||
  - clang-format-3.5 -i *.[ch] && git diff --exit-code || (echo 'Code was not formatted using clang-format!'; false)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										80
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										80
									
								
								Makefile
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,80 +0,0 @@
 | 
			
		|||
TOPDIR=$(shell pwd)
 | 
			
		||||
UNAME=$(shell uname)
 | 
			
		||||
 | 
			
		||||
INSTALL=install
 | 
			
		||||
PREFIX=/usr
 | 
			
		||||
SYSCONFDIR=/etc
 | 
			
		||||
PKG_CONFIG=pkg-config
 | 
			
		||||
MANDIR=/usr/share/man
 | 
			
		||||
 | 
			
		||||
# Check if pkg-config is installed, we need it for building CFLAGS/LIBS
 | 
			
		||||
ifeq ($(shell which $(PKG_CONFIG) 2>/dev/null 1>/dev/null || echo 1),1)
 | 
			
		||||
$(error "$(PKG_CONFIG) was not found")
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
CFLAGS += -std=c99
 | 
			
		||||
CFLAGS += -pipe
 | 
			
		||||
CFLAGS += -Wall
 | 
			
		||||
CFLAGS += -O2
 | 
			
		||||
SIMD_CFLAGS += -funroll-loops
 | 
			
		||||
SIMD_CFLAGS += -msse2
 | 
			
		||||
CPPFLAGS += -D_GNU_SOURCE
 | 
			
		||||
CPPFLAGS += -DXKBCOMPOSE=$(shell if test -e /usr/include/xkbcommon/xkbcommon-compose.h ; then echo 1 ; else echo 0 ; fi )
 | 
			
		||||
CFLAGS += $(shell $(PKG_CONFIG) --cflags cairo xcb-composite xcb-xinerama xcb-randr xcb-atom xcb-image xcb-xkb xkbcommon xkbcommon-x11 x11)
 | 
			
		||||
LIBS += $(shell $(PKG_CONFIG) --libs cairo xcb-composite xcb-xinerama xcb-randr xcb-atom xcb-image xcb-xkb xkbcommon xkbcommon-x11 x11)
 | 
			
		||||
LIBS += -lev
 | 
			
		||||
LIBS += -lm
 | 
			
		||||
 | 
			
		||||
# OpenBSD lacks PAM, use bsd_auth(3) instead.
 | 
			
		||||
ifneq ($(UNAME),OpenBSD)
 | 
			
		||||
  LIBS += -lpam
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
FILES:=$(wildcard *.c)
 | 
			
		||||
FILES:=$(FILES:.c=.o)
 | 
			
		||||
 | 
			
		||||
ifeq ($(wildcard .git),)
 | 
			
		||||
  # not in git repository
 | 
			
		||||
  VERSION := $(shell [ -f $(TOPDIR)/I3LOCK_VERSION ] && cat $(TOPDIR)/I3LOCK_VERSION | cut -d '-' -f 1)
 | 
			
		||||
  I3LOCK_VERSION:='$(shell [ -f $(TOPDIR)/I3LOCK_VERSION ] && cat $(TOPDIR)/I3LOCK_VERSION)'
 | 
			
		||||
else
 | 
			
		||||
  VERSION:=$(shell git describe --tags --abbrev=0)
 | 
			
		||||
  I3LOCK_VERSION:="$(shell git describe --tags --always) ($(shell git log --pretty=format:%cd --date=short -n1))"
 | 
			
		||||
endif
 | 
			
		||||
CPPFLAGS += -DVERSION=\"${I3LOCK_VERSION}\"
 | 
			
		||||
 | 
			
		||||
.PHONY: install clean uninstall
 | 
			
		||||
 | 
			
		||||
all: i3lock
 | 
			
		||||
 | 
			
		||||
debug: CFLAGS += -g
 | 
			
		||||
debug: i3lock
 | 
			
		||||
 | 
			
		||||
blur_simd.o : CFLAGS += $(SIMD_CFLAGS)
 | 
			
		||||
i3lock: ${FILES}
 | 
			
		||||
	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -f i3lock ${FILES} i3lock-${VERSION}.tar.gz
 | 
			
		||||
 | 
			
		||||
install: all
 | 
			
		||||
	$(INSTALL) -d $(DESTDIR)$(PREFIX)/bin
 | 
			
		||||
	$(INSTALL) -d $(DESTDIR)$(SYSCONFDIR)/pam.d
 | 
			
		||||
	$(INSTALL) -d $(DESTDIR)$(MANDIR)/man1
 | 
			
		||||
	$(INSTALL) -m 755 i3lock $(DESTDIR)$(PREFIX)/bin/i3lock
 | 
			
		||||
	$(INSTALL) -m 644 i3lock.pam $(DESTDIR)$(SYSCONFDIR)/pam.d/i3lock
 | 
			
		||||
	gzip -kf i3lock.1
 | 
			
		||||
	$(INSTALL) -m 644 i3lock.1.gz $(DESTDIR)$(MANDIR)/man1/i3lock.1.gz
 | 
			
		||||
 | 
			
		||||
uninstall:
 | 
			
		||||
	rm -f $(DESTDIR)$(PREFIX)/bin/i3lock
 | 
			
		||||
	rm -f $(DESTDIR)$(MANDIR)/man1/i3lock.1.gz
 | 
			
		||||
 | 
			
		||||
dist: clean
 | 
			
		||||
	[ ! -d i3lock-${VERSION} ] || rm -rf i3lock-${VERSION}
 | 
			
		||||
	[ ! -e i3lock-${VERSION}.tar.bz2 ] || rm i3lock-${VERSION}.tar.bz2
 | 
			
		||||
	mkdir i3lock-${VERSION}
 | 
			
		||||
	cp *.c *.h i3lock.1 i3lock.pam Makefile LICENSE README.md CHANGELOG i3lock-${VERSION}
 | 
			
		||||
	sed -e 's/^\s*I3LOCK_VERSION:=\(.*\)/I3LOCK_VERSION:=$(shell /bin/echo '${I3LOCK_VERSION}' | sed 's/\\/\\\\/g')/g;s/^VERSION:=\(.*\)/VERSION:=${VERSION}/g' Makefile > i3lock-${VERSION}/Makefile
 | 
			
		||||
	tar cfj i3lock-${VERSION}.tar.bz2 i3lock-${VERSION}
 | 
			
		||||
	rm -rf i3lock-${VERSION}
 | 
			
		||||
							
								
								
									
										53
									
								
								Makefile.am
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								Makefile.am
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,53 @@
 | 
			
		|||
@CODE_COVERAGE_RULES@
 | 
			
		||||
 | 
			
		||||
echo-version:
 | 
			
		||||
	@echo "@I3LOCK_VERSION@"
 | 
			
		||||
 | 
			
		||||
bin_PROGRAMS = i3lock
 | 
			
		||||
 | 
			
		||||
dist_man1_MANS = i3lock.1
 | 
			
		||||
 | 
			
		||||
pamddir = $(sysconfdir)/pam.d
 | 
			
		||||
pamd_files = pam/i3lock
 | 
			
		||||
pamd_DATA = $(pamd_files)
 | 
			
		||||
 | 
			
		||||
AM_CPPFLAGS = \
 | 
			
		||||
	@AX_EXTEND_SRCDIR_CPPFLAGS@
 | 
			
		||||
 | 
			
		||||
i3lock_CFLAGS = \
 | 
			
		||||
	$(AM_CFLAGS) \
 | 
			
		||||
	$(XCB_CFLAGS) \
 | 
			
		||||
	$(XCB_IMAGE_CFLAGS) \
 | 
			
		||||
	$(XCB_UTIL_CFLAGS) \
 | 
			
		||||
	$(XKBCOMMON_CFLAGS) \
 | 
			
		||||
	$(CAIRO_CFLAGS) \
 | 
			
		||||
	$(CODE_COVERAGE_CFLAGS)
 | 
			
		||||
 | 
			
		||||
i3lock_CPPFLAGS = \
 | 
			
		||||
	$(AM_CPPFLAGS) \
 | 
			
		||||
	$(CODE_COVERAGE_CPPFLAGS)
 | 
			
		||||
 | 
			
		||||
i3lock_LDADD = \
 | 
			
		||||
	$(XCB_LIBS) \
 | 
			
		||||
	$(XCB_IMAGE_LIBS) \
 | 
			
		||||
	$(XCB_UTIL_LIBS) \
 | 
			
		||||
	$(XKBCOMMON_LIBS) \
 | 
			
		||||
	$(CAIRO_LIBS) \
 | 
			
		||||
	$(CODE_COVERAGE_LDFLAGS)
 | 
			
		||||
 | 
			
		||||
i3lock_SOURCES = \
 | 
			
		||||
	cursors.h \
 | 
			
		||||
	i3lock.c \
 | 
			
		||||
	i3lock.h \
 | 
			
		||||
	randr.c \
 | 
			
		||||
	randr.h \
 | 
			
		||||
	unlock_indicator.c \
 | 
			
		||||
	unlock_indicator.h \
 | 
			
		||||
	xcb.c \
 | 
			
		||||
	xcb.h
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST = \
 | 
			
		||||
	$(pamd_files) \
 | 
			
		||||
	CHANGELOG \
 | 
			
		||||
	LICENSE \
 | 
			
		||||
	README.md
 | 
			
		||||
							
								
								
									
										145
									
								
								configure.ac
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								configure.ac
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,145 @@
 | 
			
		|||
#                                               -*- Autoconf -*-
 | 
			
		||||
# Run autoreconf -fi to generate a configure script from this file.
 | 
			
		||||
 | 
			
		||||
AC_PREREQ([2.69])
 | 
			
		||||
AC_INIT([i3lock], [2.10], [https://github.com/i3/i3lock/issues])
 | 
			
		||||
# For AX_EXTEND_SRCDIR
 | 
			
		||||
AX_ENABLE_BUILDDIR
 | 
			
		||||
AM_INIT_AUTOMAKE([foreign subdir-objects -Wall no-dist-gzip dist-bzip2])
 | 
			
		||||
# Default to silent rules, use V=1 to get verbose compilation output.
 | 
			
		||||
AM_SILENT_RULES([yes])
 | 
			
		||||
# Make it possible to disable maintainer mode to disable re-generation of build
 | 
			
		||||
# system files.
 | 
			
		||||
AM_MAINTAINER_MODE([enable])
 | 
			
		||||
AC_CONFIG_SRCDIR([i3lock.c])
 | 
			
		||||
AC_CONFIG_HEADERS([config.h])
 | 
			
		||||
AC_CONFIG_MACRO_DIR([m4])
 | 
			
		||||
 | 
			
		||||
dnl Verify macros defined in m4/ such as AX_SANITIZERS are not present in the
 | 
			
		||||
dnl output, i.e. are replaced as expected. This line results in a better error
 | 
			
		||||
dnl message when using aclocal < 1.13 (which does not understand
 | 
			
		||||
dnl AC_CONFIG_MACRO_DIR) without passing the -I m4 parameter.
 | 
			
		||||
m4_pattern_forbid([AX_SANITIZERS])
 | 
			
		||||
 | 
			
		||||
# Verify we are using GNU make because we use '%'-style pattern rules in
 | 
			
		||||
# Makefile.am, which are a GNU make extension. Pull requests to replace
 | 
			
		||||
# '%'-style pattern rules with a more portable alternative are welcome.
 | 
			
		||||
AX_CHECK_GNU_MAKE
 | 
			
		||||
AS_VAR_IF([_cv_gnu_make_command], [""], [AC_MSG_ERROR([the i3lock Makefile.am requires GNU make])])
 | 
			
		||||
 | 
			
		||||
AX_EXTEND_SRCDIR
 | 
			
		||||
 | 
			
		||||
AS_IF([test -d ${srcdir}/.git],
 | 
			
		||||
      [
 | 
			
		||||
        VERSION="$(git -C ${srcdir} describe --tags --abbrev=0)"
 | 
			
		||||
        I3LOCK_VERSION="$(git -C ${srcdir} describe --tags --always) ($(git -C ${srcdir} log --pretty=format:%cd --date=short -n1), branch \\\"$(git -C ${srcdir} describe --tags --always --all | sed s:heads/::)\\\")"
 | 
			
		||||
        # Mirrors what libi3/is_debug_build.c does:
 | 
			
		||||
        is_release=$(test $(echo "${I3LOCK_VERSION}" | cut -d '(' -f 1 | wc -m) -lt 10 && echo yes || echo no)
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        VERSION="$(cut -d '-' -f 1 ${srcdir}/I3LOCK_VERSION | cut -d ' ' -f 1)"
 | 
			
		||||
        I3LOCK_VERSION="$(sed -e 's/@<:@\"?\\@:>@/\\&/g' ${srcdir}/I3LOCK_VERSION)"
 | 
			
		||||
        is_release="$(grep -q non-git ${srcdir}/I3LOCK_VERSION && echo no || echo yes)"
 | 
			
		||||
      ])
 | 
			
		||||
AC_SUBST([I3LOCK_VERSION], [$I3LOCK_VERSION])
 | 
			
		||||
AC_DEFINE_UNQUOTED([I3LOCK_VERSION], ["${I3LOCK_VERSION}"], [i3lock version])
 | 
			
		||||
 | 
			
		||||
AX_CODE_COVERAGE
 | 
			
		||||
 | 
			
		||||
dnl is_release must be lowercase because AX_CHECK_ENABLE_DEBUG calls m4_tolower
 | 
			
		||||
dnl on its fourth argument.
 | 
			
		||||
AX_CHECK_ENABLE_DEBUG([yes], , [UNUSED_NDEBUG], [$is_release])
 | 
			
		||||
 | 
			
		||||
AC_PROG_CC_C99
 | 
			
		||||
 | 
			
		||||
# For strnlen() and vasprintf().
 | 
			
		||||
AC_USE_SYSTEM_EXTENSIONS
 | 
			
		||||
 | 
			
		||||
# Checks for typedefs, structures, and compiler characteristics.
 | 
			
		||||
AC_CHECK_HEADER_STDBOOL
 | 
			
		||||
dnl The error message should include the specific type which could not be
 | 
			
		||||
dnl found, but I do not see a way to achieve that.
 | 
			
		||||
AC_CHECK_TYPES([mode_t, off_t, pid_t, size_t, ssize_t], , [AC_MSG_FAILURE([cannot find required type])])
 | 
			
		||||
 | 
			
		||||
# Checks for library functions.
 | 
			
		||||
AC_FUNC_FORK
 | 
			
		||||
AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
 | 
			
		||||
AC_FUNC_STRNLEN
 | 
			
		||||
AC_CHECK_FUNCS([atexit dup2 ftruncate getcwd gettimeofday localtime_r memchr memset mkdir rmdir setlocale socket strcasecmp strchr strdup strerror strncasecmp strndup strrchr strspn strstr strtol strtoul], , [AC_MSG_FAILURE([cannot find the $ac_func function, which i3lock requires])])
 | 
			
		||||
 | 
			
		||||
# Checks for libraries.
 | 
			
		||||
 | 
			
		||||
AC_SEARCH_LIBS([floor], [m], , [AC_MSG_FAILURE([cannot find the required floor() function despite trying to link with -lm])])
 | 
			
		||||
 | 
			
		||||
# libev does not ship with a pkg-config file :(.
 | 
			
		||||
AC_SEARCH_LIBS([ev_run], [ev], , [AC_MSG_FAILURE([cannot find the required ev_run() function despite trying to link with -lev])])
 | 
			
		||||
 | 
			
		||||
AC_SEARCH_LIBS([shm_open], [rt])
 | 
			
		||||
 | 
			
		||||
AC_SEARCH_LIBS([pam_authenticate], [pam])
 | 
			
		||||
 | 
			
		||||
AC_SEARCH_LIBS([iconv_open], [iconv], , [AC_MSG_FAILURE([cannot find the required iconv_open() function despite trying to link with -liconv])])
 | 
			
		||||
 | 
			
		||||
dnl Each prefix corresponds to a source tarball which users might have
 | 
			
		||||
dnl downloaded in a newer version and would like to overwrite.
 | 
			
		||||
PKG_CHECK_MODULES([XCB], [xcb xcb-xkb xcb-xinerama xcb-randr])
 | 
			
		||||
PKG_CHECK_MODULES([XCB_IMAGE], [xcb-image])
 | 
			
		||||
PKG_CHECK_MODULES([XCB_UTIL], [xcb-event xcb-util xcb-atom])
 | 
			
		||||
PKG_CHECK_MODULES([XKBCOMMON], [xkbcommon xkbcommon-x11])
 | 
			
		||||
PKG_CHECK_MODULES([CAIRO], [cairo])
 | 
			
		||||
 | 
			
		||||
# Checks for programs.
 | 
			
		||||
AC_PROG_AWK
 | 
			
		||||
AC_PROG_CPP
 | 
			
		||||
AC_PROG_INSTALL
 | 
			
		||||
AC_PROG_MAKE_SET
 | 
			
		||||
AC_PROG_RANLIB
 | 
			
		||||
AC_PROG_LN_S
 | 
			
		||||
 | 
			
		||||
AM_PROG_AR
 | 
			
		||||
 | 
			
		||||
AX_FLAGS_WARN_ALL
 | 
			
		||||
AX_CHECK_COMPILE_FLAG([-Wunused-value], [AX_APPEND_FLAG([-Wunused-value], [AM_CFLAGS])])
 | 
			
		||||
AC_SUBST(AM_CFLAGS)
 | 
			
		||||
 | 
			
		||||
# Checks for header files.
 | 
			
		||||
AC_CHECK_HEADERS([fcntl.h float.h inttypes.h limits.h locale.h netinet/in.h paths.h stddef.h stdint.h stdlib.h string.h sys/param.h sys/socket.h sys/time.h unistd.h], , [AC_MSG_FAILURE([cannot find the $ac_header header, which i3lock requires])])
 | 
			
		||||
 | 
			
		||||
AC_CONFIG_FILES([Makefile])
 | 
			
		||||
 | 
			
		||||
# Enable address sanitizer for non-release builds. The performance hit is a
 | 
			
		||||
# 50% increase of wallclock time for the testsuite on my machine.
 | 
			
		||||
if test x$is_release = xyes; then
 | 
			
		||||
	default_sanitizers=
 | 
			
		||||
else
 | 
			
		||||
	default_sanitizers=address
 | 
			
		||||
fi
 | 
			
		||||
AX_SANITIZERS(, [$default_sanitizers], [AC_DEFINE([I3LOCK_ASAN_ENABLED], [], [Enable ASAN])])
 | 
			
		||||
 | 
			
		||||
AC_OUTPUT
 | 
			
		||||
 | 
			
		||||
in_git_worktree=`git rev-parse --is-inside-work-tree 2>/dev/null`
 | 
			
		||||
if [[ "$in_git_worktree" = "true" ]]; then
 | 
			
		||||
	git_dir=`git rev-parse --git-dir 2>/dev/null`
 | 
			
		||||
	srcdir=`dirname "$git_dir"`
 | 
			
		||||
	exclude_dir=`pwd | sed "s,^$srcdir,,g"`
 | 
			
		||||
	if ! grep -q "^$exclude_dir" "$git_dir/info/exclude"; then
 | 
			
		||||
		echo "$exclude_dir" >> "$git_dir/info/exclude"
 | 
			
		||||
	fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
echo \
 | 
			
		||||
"--------------------------------------------------------------------------------
 | 
			
		||||
build configured:
 | 
			
		||||
 | 
			
		||||
AS_HELP_STRING([i3lock version:], [`echo ${I3LOCK_VERSION} | sed 's,\\\\,,g'`])
 | 
			
		||||
AS_HELP_STRING([is release version:], [${is_release}])
 | 
			
		||||
 | 
			
		||||
AS_HELP_STRING([enable debug flags:], [${ax_enable_debug}])
 | 
			
		||||
AS_HELP_STRING([code coverage:], [${CODE_COVERAGE_ENABLED}])
 | 
			
		||||
AS_HELP_STRING([enabled sanitizers:], [${ax_enabled_sanitizers}])
 | 
			
		||||
 | 
			
		||||
To compile, run:
 | 
			
		||||
 | 
			
		||||
  cd `pwd` && make -j8
 | 
			
		||||
--------------------------------------------------------------------------------"
 | 
			
		||||
							
								
								
									
										8
									
								
								i3lock.c
									
										
									
									
									
								
							
							
						
						
									
										8
									
								
								i3lock.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -6,6 +6,8 @@
 | 
			
		|||
 * See LICENSE for licensing information
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
#include <config.h>
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <locale.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -333,7 +335,7 @@ static void clear_password_memory(void) {
 | 
			
		|||
    /* A volatile pointer to the password buffer to prevent the compiler from
 | 
			
		||||
     * optimizing this out. */
 | 
			
		||||
    volatile char *vpassword = password;
 | 
			
		||||
    for (int c = 0; c < sizeof(password); c++)
 | 
			
		||||
    for (size_t c = 0; c < sizeof(password); c++)
 | 
			
		||||
        /* We store a non-random pattern which consists of the (irrelevant)
 | 
			
		||||
         * index plus (!) the value of the beep variable. This prevents the
 | 
			
		||||
         * compiler from optimizing the calls away, since the value of 'beep'
 | 
			
		||||
| 
						 | 
				
			
			@ -647,7 +649,7 @@ static void handle_key_press(xcb_key_press_event_t *event) {
 | 
			
		|||
            return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if ((input_position + 8) >= sizeof(password))
 | 
			
		||||
    if ((input_position + 8) >= (int)sizeof(password))
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
| 
						 | 
				
			
			@ -1067,7 +1069,7 @@ int main(int argc, char *argv[]) {
 | 
			
		|||
    while ((o = getopt_long(argc, argv, optstring, longopts, &longoptind)) != -1) {
 | 
			
		||||
        switch (o) {
 | 
			
		||||
            case 'v':
 | 
			
		||||
                errx(EXIT_SUCCESS, "version " VERSION " © 2010 Michael Stapelberg");
 | 
			
		||||
                errx(EXIT_SUCCESS, "version " I3LOCK_VERSION " © 2010 Michael Stapelberg");
 | 
			
		||||
            case 'n':
 | 
			
		||||
                dont_fork = true;
 | 
			
		||||
                break;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										71
									
								
								m4/ax_append_flag.m4
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								m4/ax_append_flag.m4
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,71 @@
 | 
			
		|||
# ===========================================================================
 | 
			
		||||
#      http://www.gnu.org/software/autoconf-archive/ax_append_flag.html
 | 
			
		||||
# ===========================================================================
 | 
			
		||||
#
 | 
			
		||||
# SYNOPSIS
 | 
			
		||||
#
 | 
			
		||||
#   AX_APPEND_FLAG(FLAG, [FLAGS-VARIABLE])
 | 
			
		||||
#
 | 
			
		||||
# DESCRIPTION
 | 
			
		||||
#
 | 
			
		||||
#   FLAG is appended to the FLAGS-VARIABLE shell variable, with a space
 | 
			
		||||
#   added in between.
 | 
			
		||||
#
 | 
			
		||||
#   If FLAGS-VARIABLE is not specified, the current language's flags (e.g.
 | 
			
		||||
#   CFLAGS) is used.  FLAGS-VARIABLE is not changed if it already contains
 | 
			
		||||
#   FLAG.  If FLAGS-VARIABLE is unset in the shell, it is set to exactly
 | 
			
		||||
#   FLAG.
 | 
			
		||||
#
 | 
			
		||||
#   NOTE: Implementation based on AX_CFLAGS_GCC_OPTION.
 | 
			
		||||
#
 | 
			
		||||
# LICENSE
 | 
			
		||||
#
 | 
			
		||||
#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
 | 
			
		||||
#   Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
 | 
			
		||||
#
 | 
			
		||||
#   This program is free software: you can redistribute it and/or modify it
 | 
			
		||||
#   under the terms of the GNU General Public License as published by the
 | 
			
		||||
#   Free Software Foundation, either version 3 of the License, or (at your
 | 
			
		||||
#   option) any later version.
 | 
			
		||||
#
 | 
			
		||||
#   This program is distributed in the hope that it will be useful, but
 | 
			
		||||
#   WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
 | 
			
		||||
#   Public License for more details.
 | 
			
		||||
#
 | 
			
		||||
#   You should have received a copy of the GNU General Public License along
 | 
			
		||||
#   with this program. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
#
 | 
			
		||||
#   As a special exception, the respective Autoconf Macro's copyright owner
 | 
			
		||||
#   gives unlimited permission to copy, distribute and modify the configure
 | 
			
		||||
#   scripts that are the output of Autoconf when processing the Macro. You
 | 
			
		||||
#   need not follow the terms of the GNU General Public License when using
 | 
			
		||||
#   or distributing such scripts, even though portions of the text of the
 | 
			
		||||
#   Macro appear in them. The GNU General Public License (GPL) does govern
 | 
			
		||||
#   all other use of the material that constitutes the Autoconf Macro.
 | 
			
		||||
#
 | 
			
		||||
#   This special exception to the GPL applies to versions of the Autoconf
 | 
			
		||||
#   Macro released by the Autoconf Archive. When you make and distribute a
 | 
			
		||||
#   modified version of the Autoconf Macro, you may extend this special
 | 
			
		||||
#   exception to the GPL to apply to your modified version as well.
 | 
			
		||||
 | 
			
		||||
#serial 6
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([AX_APPEND_FLAG],
 | 
			
		||||
[dnl
 | 
			
		||||
AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_SET_IF
 | 
			
		||||
AS_VAR_PUSHDEF([FLAGS], [m4_default($2,_AC_LANG_PREFIX[FLAGS])])
 | 
			
		||||
AS_VAR_SET_IF(FLAGS,[
 | 
			
		||||
  AS_CASE([" AS_VAR_GET(FLAGS) "],
 | 
			
		||||
    [*" $1 "*], [AC_RUN_LOG([: FLAGS already contains $1])],
 | 
			
		||||
    [
 | 
			
		||||
     AS_VAR_APPEND(FLAGS,[" $1"])
 | 
			
		||||
     AC_RUN_LOG([: FLAGS="$FLAGS"])
 | 
			
		||||
    ])
 | 
			
		||||
  ],
 | 
			
		||||
  [
 | 
			
		||||
  AS_VAR_SET(FLAGS,[$1])
 | 
			
		||||
  AC_RUN_LOG([: FLAGS="$FLAGS"])
 | 
			
		||||
  ])
 | 
			
		||||
AS_VAR_POPDEF([FLAGS])dnl
 | 
			
		||||
])dnl AX_APPEND_FLAG
 | 
			
		||||
							
								
								
									
										122
									
								
								m4/ax_cflags_warn_all.m4
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								m4/ax_cflags_warn_all.m4
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,122 @@
 | 
			
		|||
# ===========================================================================
 | 
			
		||||
#    http://www.gnu.org/software/autoconf-archive/ax_cflags_warn_all.html
 | 
			
		||||
# ===========================================================================
 | 
			
		||||
#
 | 
			
		||||
# SYNOPSIS
 | 
			
		||||
#
 | 
			
		||||
#   AX_CFLAGS_WARN_ALL   [(shellvar [,default, [A/NA]])]
 | 
			
		||||
#   AX_CXXFLAGS_WARN_ALL [(shellvar [,default, [A/NA]])]
 | 
			
		||||
#   AX_FCFLAGS_WARN_ALL  [(shellvar [,default, [A/NA]])]
 | 
			
		||||
#
 | 
			
		||||
# DESCRIPTION
 | 
			
		||||
#
 | 
			
		||||
#   Try to find a compiler option that enables most reasonable warnings.
 | 
			
		||||
#
 | 
			
		||||
#   For the GNU compiler it will be -Wall (and -ansi -pedantic) The result
 | 
			
		||||
#   is added to the shellvar being CFLAGS, CXXFLAGS, or FCFLAGS by default.
 | 
			
		||||
#
 | 
			
		||||
#   Currently this macro knows about the GCC, Solaris, Digital Unix, AIX,
 | 
			
		||||
#   HP-UX, IRIX, NEC SX-5 (Super-UX 10), Cray J90 (Unicos 10.0.0.8), and
 | 
			
		||||
#   Intel compilers.  For a given compiler, the Fortran flags are much more
 | 
			
		||||
#   experimental than their C equivalents.
 | 
			
		||||
#
 | 
			
		||||
#    - $1 shell-variable-to-add-to : CFLAGS, CXXFLAGS, or FCFLAGS
 | 
			
		||||
#    - $2 add-value-if-not-found : nothing
 | 
			
		||||
#    - $3 action-if-found : add value to shellvariable
 | 
			
		||||
#    - $4 action-if-not-found : nothing
 | 
			
		||||
#
 | 
			
		||||
#   NOTE: These macros depend on AX_APPEND_FLAG.
 | 
			
		||||
#
 | 
			
		||||
# LICENSE
 | 
			
		||||
#
 | 
			
		||||
#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
 | 
			
		||||
#   Copyright (c) 2010 Rhys Ulerich <rhys.ulerich@gmail.com>
 | 
			
		||||
#
 | 
			
		||||
#   This program is free software; you can redistribute it and/or modify it
 | 
			
		||||
#   under the terms of the GNU General Public License as published by the
 | 
			
		||||
#   Free Software Foundation; either version 3 of the License, or (at your
 | 
			
		||||
#   option) any later version.
 | 
			
		||||
#
 | 
			
		||||
#   This program is distributed in the hope that it will be useful, but
 | 
			
		||||
#   WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
 | 
			
		||||
#   Public License for more details.
 | 
			
		||||
#
 | 
			
		||||
#   You should have received a copy of the GNU General Public License along
 | 
			
		||||
#   with this program. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
#
 | 
			
		||||
#   As a special exception, the respective Autoconf Macro's copyright owner
 | 
			
		||||
#   gives unlimited permission to copy, distribute and modify the configure
 | 
			
		||||
#   scripts that are the output of Autoconf when processing the Macro. You
 | 
			
		||||
#   need not follow the terms of the GNU General Public License when using
 | 
			
		||||
#   or distributing such scripts, even though portions of the text of the
 | 
			
		||||
#   Macro appear in them. The GNU General Public License (GPL) does govern
 | 
			
		||||
#   all other use of the material that constitutes the Autoconf Macro.
 | 
			
		||||
#
 | 
			
		||||
#   This special exception to the GPL applies to versions of the Autoconf
 | 
			
		||||
#   Macro released by the Autoconf Archive. When you make and distribute a
 | 
			
		||||
#   modified version of the Autoconf Macro, you may extend this special
 | 
			
		||||
#   exception to the GPL to apply to your modified version as well.
 | 
			
		||||
 | 
			
		||||
#serial 15
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([AX_FLAGS_WARN_ALL],[dnl
 | 
			
		||||
AS_VAR_PUSHDEF([FLAGS],[_AC_LANG_PREFIX[]FLAGS])dnl
 | 
			
		||||
AS_VAR_PUSHDEF([VAR],[ac_cv_[]_AC_LANG_ABBREV[]flags_warn_all])dnl
 | 
			
		||||
AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for maximum warnings],
 | 
			
		||||
VAR,[VAR="no, unknown"
 | 
			
		||||
ac_save_[]FLAGS="$[]FLAGS"
 | 
			
		||||
for ac_arg dnl
 | 
			
		||||
in "-warn all  % -warn all"   dnl Intel
 | 
			
		||||
   "-pedantic  % -Wall"       dnl GCC
 | 
			
		||||
   "-xstrconst % -v"          dnl Solaris C
 | 
			
		||||
   "-std1      % -verbose -w0 -warnprotos" dnl Digital Unix
 | 
			
		||||
   "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX
 | 
			
		||||
   "-ansi -ansiE % -fullwarn" dnl IRIX
 | 
			
		||||
   "+ESlit     % +w1"         dnl HP-UX C
 | 
			
		||||
   "-Xc        % -pvctl[,]fullmsg" dnl NEC SX-5 (Super-UX 10)
 | 
			
		||||
   "-h conform % -h msglevel 2" dnl Cray C (Unicos)
 | 
			
		||||
   #
 | 
			
		||||
do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'`
 | 
			
		||||
   AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
 | 
			
		||||
                     [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break])
 | 
			
		||||
done
 | 
			
		||||
FLAGS="$ac_save_[]FLAGS"
 | 
			
		||||
])
 | 
			
		||||
AS_VAR_POPDEF([FLAGS])dnl
 | 
			
		||||
AX_REQUIRE_DEFINED([AX_APPEND_FLAG])
 | 
			
		||||
case ".$VAR" in
 | 
			
		||||
     .ok|.ok,*) m4_ifvaln($3,$3) ;;
 | 
			
		||||
   .|.no|.no,*) m4_default($4,[m4_ifval($2,[AX_APPEND_FLAG([$2], [$1])])]) ;;
 | 
			
		||||
   *) m4_default($3,[AX_APPEND_FLAG([$VAR], [$1])]) ;;
 | 
			
		||||
esac
 | 
			
		||||
AS_VAR_POPDEF([VAR])dnl
 | 
			
		||||
])dnl AX_FLAGS_WARN_ALL
 | 
			
		||||
dnl  implementation tactics:
 | 
			
		||||
dnl   the for-argument contains a list of options. The first part of
 | 
			
		||||
dnl   these does only exist to detect the compiler - usually it is
 | 
			
		||||
dnl   a global option to enable -ansi or -extrawarnings. All other
 | 
			
		||||
dnl   compilers will fail about it. That was needed since a lot of
 | 
			
		||||
dnl   compilers will give false positives for some option-syntax
 | 
			
		||||
dnl   like -Woption or -Xoption as they think of it is a pass-through
 | 
			
		||||
dnl   to later compile stages or something. The "%" is used as a
 | 
			
		||||
dnl   delimiter. A non-option comment can be given after "%%" marks
 | 
			
		||||
dnl   which will be shown but not added to the respective C/CXXFLAGS.
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([AX_CFLAGS_WARN_ALL],[dnl
 | 
			
		||||
AC_LANG_PUSH([C])
 | 
			
		||||
AX_FLAGS_WARN_ALL([$1], [$2], [$3], [$4])
 | 
			
		||||
AC_LANG_POP([C])
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([AX_CXXFLAGS_WARN_ALL],[dnl
 | 
			
		||||
AC_LANG_PUSH([C++])
 | 
			
		||||
AX_FLAGS_WARN_ALL([$1], [$2], [$3], [$4])
 | 
			
		||||
AC_LANG_POP([C++])
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([AX_FCFLAGS_WARN_ALL],[dnl
 | 
			
		||||
AC_LANG_PUSH([Fortran])
 | 
			
		||||
AX_FLAGS_WARN_ALL([$1], [$2], [$3], [$4])
 | 
			
		||||
AC_LANG_POP([Fortran])
 | 
			
		||||
])
 | 
			
		||||
							
								
								
									
										74
									
								
								m4/ax_check_compile_flag.m4
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								m4/ax_check_compile_flag.m4
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,74 @@
 | 
			
		|||
# ===========================================================================
 | 
			
		||||
#   http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
 | 
			
		||||
# ===========================================================================
 | 
			
		||||
#
 | 
			
		||||
# SYNOPSIS
 | 
			
		||||
#
 | 
			
		||||
#   AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
 | 
			
		||||
#
 | 
			
		||||
# DESCRIPTION
 | 
			
		||||
#
 | 
			
		||||
#   Check whether the given FLAG works with the current language's compiler
 | 
			
		||||
#   or gives an error.  (Warnings, however, are ignored)
 | 
			
		||||
#
 | 
			
		||||
#   ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
 | 
			
		||||
#   success/failure.
 | 
			
		||||
#
 | 
			
		||||
#   If EXTRA-FLAGS is defined, it is added to the current language's default
 | 
			
		||||
#   flags (e.g. CFLAGS) when the check is done.  The check is thus made with
 | 
			
		||||
#   the flags: "CFLAGS EXTRA-FLAGS FLAG".  This can for example be used to
 | 
			
		||||
#   force the compiler to issue an error when a bad flag is given.
 | 
			
		||||
#
 | 
			
		||||
#   INPUT gives an alternative input source to AC_COMPILE_IFELSE.
 | 
			
		||||
#
 | 
			
		||||
#   NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
 | 
			
		||||
#   macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
 | 
			
		||||
#
 | 
			
		||||
# LICENSE
 | 
			
		||||
#
 | 
			
		||||
#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
 | 
			
		||||
#   Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
 | 
			
		||||
#
 | 
			
		||||
#   This program is free software: you can redistribute it and/or modify it
 | 
			
		||||
#   under the terms of the GNU General Public License as published by the
 | 
			
		||||
#   Free Software Foundation, either version 3 of the License, or (at your
 | 
			
		||||
#   option) any later version.
 | 
			
		||||
#
 | 
			
		||||
#   This program is distributed in the hope that it will be useful, but
 | 
			
		||||
#   WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
 | 
			
		||||
#   Public License for more details.
 | 
			
		||||
#
 | 
			
		||||
#   You should have received a copy of the GNU General Public License along
 | 
			
		||||
#   with this program. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
#
 | 
			
		||||
#   As a special exception, the respective Autoconf Macro's copyright owner
 | 
			
		||||
#   gives unlimited permission to copy, distribute and modify the configure
 | 
			
		||||
#   scripts that are the output of Autoconf when processing the Macro. You
 | 
			
		||||
#   need not follow the terms of the GNU General Public License when using
 | 
			
		||||
#   or distributing such scripts, even though portions of the text of the
 | 
			
		||||
#   Macro appear in them. The GNU General Public License (GPL) does govern
 | 
			
		||||
#   all other use of the material that constitutes the Autoconf Macro.
 | 
			
		||||
#
 | 
			
		||||
#   This special exception to the GPL applies to versions of the Autoconf
 | 
			
		||||
#   Macro released by the Autoconf Archive. When you make and distribute a
 | 
			
		||||
#   modified version of the Autoconf Macro, you may extend this special
 | 
			
		||||
#   exception to the GPL to apply to your modified version as well.
 | 
			
		||||
 | 
			
		||||
#serial 4
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([AX_CHECK_COMPILE_FLAG],
 | 
			
		||||
[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
 | 
			
		||||
AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
 | 
			
		||||
AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
 | 
			
		||||
  ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
 | 
			
		||||
  _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
 | 
			
		||||
  AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
 | 
			
		||||
    [AS_VAR_SET(CACHEVAR,[yes])],
 | 
			
		||||
    [AS_VAR_SET(CACHEVAR,[no])])
 | 
			
		||||
  _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
 | 
			
		||||
AS_VAR_IF(CACHEVAR,yes,
 | 
			
		||||
  [m4_default([$2], :)],
 | 
			
		||||
  [m4_default([$3], :)])
 | 
			
		||||
AS_VAR_POPDEF([CACHEVAR])dnl
 | 
			
		||||
])dnl AX_CHECK_COMPILE_FLAGS
 | 
			
		||||
							
								
								
									
										124
									
								
								m4/ax_check_enable_debug.m4
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								m4/ax_check_enable_debug.m4
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,124 @@
 | 
			
		|||
# ===========================================================================
 | 
			
		||||
#   http://www.gnu.org/software/autoconf-archive/ax_check_enable_debug.html
 | 
			
		||||
# ===========================================================================
 | 
			
		||||
#
 | 
			
		||||
# SYNOPSIS
 | 
			
		||||
#
 | 
			
		||||
#   AX_CHECK_ENABLE_DEBUG([enable by default=yes/info/profile/no], [ENABLE DEBUG VARIABLES ...], [DISABLE DEBUG VARIABLES NDEBUG ...], [IS-RELEASE])
 | 
			
		||||
#
 | 
			
		||||
# DESCRIPTION
 | 
			
		||||
#
 | 
			
		||||
#   Check for the presence of an --enable-debug option to configure, with
 | 
			
		||||
#   the specified default value used when the option is not present.  Return
 | 
			
		||||
#   the value in the variable $ax_enable_debug.
 | 
			
		||||
#
 | 
			
		||||
#   Specifying 'yes' adds '-g -O0' to the compilation flags for all
 | 
			
		||||
#   languages. Specifying 'info' adds '-g' to the compilation flags.
 | 
			
		||||
#   Specifying 'profile' adds '-g -pg' to the compilation flags and '-pg' to
 | 
			
		||||
#   the linking flags. Otherwise, nothing is added.
 | 
			
		||||
#
 | 
			
		||||
#   Define the variables listed in the second argument if debug is enabled,
 | 
			
		||||
#   defaulting to no variables.  Defines the variables listed in the third
 | 
			
		||||
#   argument if debug is disabled, defaulting to NDEBUG.  All lists of
 | 
			
		||||
#   variables should be space-separated.
 | 
			
		||||
#
 | 
			
		||||
#   If debug is not enabled, ensure AC_PROG_* will not add debugging flags.
 | 
			
		||||
#   Should be invoked prior to any AC_PROG_* compiler checks.
 | 
			
		||||
#
 | 
			
		||||
#   IS-RELEASE can be used to change the default to 'no' when making a
 | 
			
		||||
#   release.  Set IS-RELEASE to 'yes' or 'no' as appropriate. By default, it
 | 
			
		||||
#   uses the value of $ax_is_release, so if you are using the AX_IS_RELEASE
 | 
			
		||||
#   macro, there is no need to pass this parameter.
 | 
			
		||||
#
 | 
			
		||||
#     AX_IS_RELEASE([git-directory])
 | 
			
		||||
#     AX_CHECK_ENABLE_DEBUG()
 | 
			
		||||
#
 | 
			
		||||
# LICENSE
 | 
			
		||||
#
 | 
			
		||||
#   Copyright (c) 2011 Rhys Ulerich <rhys.ulerich@gmail.com>
 | 
			
		||||
#   Copyright (c) 2014, 2015 Philip Withnall <philip@tecnocode.co.uk>
 | 
			
		||||
#
 | 
			
		||||
#   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.
 | 
			
		||||
 | 
			
		||||
#serial 5
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([AX_CHECK_ENABLE_DEBUG],[
 | 
			
		||||
    AC_BEFORE([$0],[AC_PROG_CC])dnl
 | 
			
		||||
    AC_BEFORE([$0],[AC_PROG_CXX])dnl
 | 
			
		||||
    AC_BEFORE([$0],[AC_PROG_F77])dnl
 | 
			
		||||
    AC_BEFORE([$0],[AC_PROG_FC])dnl
 | 
			
		||||
 | 
			
		||||
    AC_MSG_CHECKING(whether to enable debugging)
 | 
			
		||||
 | 
			
		||||
    ax_enable_debug_default=m4_tolower(m4_normalize(ifelse([$1],,[no],[$1])))
 | 
			
		||||
    ax_enable_debug_is_release=m4_tolower(m4_normalize(ifelse([$4],,
 | 
			
		||||
                                                              [$ax_is_release],
 | 
			
		||||
                                                              [$4])))
 | 
			
		||||
 | 
			
		||||
    # If this is a release, override the default.
 | 
			
		||||
    AS_IF([test "$ax_enable_debug_is_release" = "yes"],
 | 
			
		||||
      [ax_enable_debug_default="no"])
 | 
			
		||||
 | 
			
		||||
    m4_define(ax_enable_debug_vars,[m4_normalize(ifelse([$2],,,[$2]))])
 | 
			
		||||
    m4_define(ax_disable_debug_vars,[m4_normalize(ifelse([$3],,[NDEBUG],[$3]))])
 | 
			
		||||
 | 
			
		||||
    AC_ARG_ENABLE(debug,
 | 
			
		||||
	[AS_HELP_STRING([--enable-debug=]@<:@yes/info/profile/no@:>@,[compile with debugging])],
 | 
			
		||||
	[],enable_debug=$ax_enable_debug_default)
 | 
			
		||||
 | 
			
		||||
    # empty mean debug yes
 | 
			
		||||
    AS_IF([test "x$enable_debug" = "x"],
 | 
			
		||||
      [enable_debug="yes"])
 | 
			
		||||
 | 
			
		||||
    # case of debug
 | 
			
		||||
    AS_CASE([$enable_debug],
 | 
			
		||||
      [yes],[
 | 
			
		||||
	AC_MSG_RESULT(yes)
 | 
			
		||||
	CFLAGS="${CFLAGS} -g -O0"
 | 
			
		||||
	CXXFLAGS="${CXXFLAGS} -g -O0"
 | 
			
		||||
	FFLAGS="${FFLAGS} -g -O0"
 | 
			
		||||
	FCFLAGS="${FCFLAGS} -g -O0"
 | 
			
		||||
	OBJCFLAGS="${OBJCFLAGS} -g -O0"
 | 
			
		||||
      ],
 | 
			
		||||
      [info],[
 | 
			
		||||
	AC_MSG_RESULT(info)
 | 
			
		||||
	CFLAGS="${CFLAGS} -g"
 | 
			
		||||
	CXXFLAGS="${CXXFLAGS} -g"
 | 
			
		||||
	FFLAGS="${FFLAGS} -g"
 | 
			
		||||
	FCFLAGS="${FCFLAGS} -g"
 | 
			
		||||
	OBJCFLAGS="${OBJCFLAGS} -g"
 | 
			
		||||
      ],
 | 
			
		||||
      [profile],[
 | 
			
		||||
	AC_MSG_RESULT(profile)
 | 
			
		||||
	CFLAGS="${CFLAGS} -g -pg"
 | 
			
		||||
	CXXFLAGS="${CXXFLAGS} -g -pg"
 | 
			
		||||
	FFLAGS="${FFLAGS} -g -pg"
 | 
			
		||||
	FCFLAGS="${FCFLAGS} -g -pg"
 | 
			
		||||
	OBJCFLAGS="${OBJCFLAGS} -g -pg"
 | 
			
		||||
	LDFLAGS="${LDFLAGS} -pg"
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
	AC_MSG_RESULT(no)
 | 
			
		||||
	dnl Ensure AC_PROG_CC/CXX/F77/FC/OBJC will not enable debug flags
 | 
			
		||||
	dnl by setting any unset environment flag variables
 | 
			
		||||
	AS_IF([test "x${CFLAGS+set}" != "xset"],
 | 
			
		||||
	  [CFLAGS=""])
 | 
			
		||||
	AS_IF([test "x${CXXFLAGS+set}" != "xset"],
 | 
			
		||||
	  [CXXFLAGS=""])
 | 
			
		||||
	AS_IF([test "x${FFLAGS+set}" != "xset"],
 | 
			
		||||
	  [FFLAGS=""])
 | 
			
		||||
	AS_IF([test "x${FCFLAGS+set}" != "xset"],
 | 
			
		||||
	  [FCFLAGS=""])
 | 
			
		||||
	AS_IF([test "x${OBJCFLAGS+set}" != "xset"],
 | 
			
		||||
	  [OBJCFLAGS=""])
 | 
			
		||||
      ])
 | 
			
		||||
 | 
			
		||||
    dnl Define various variables if debugging is disabled.
 | 
			
		||||
    dnl assert.h is a NOP if NDEBUG is defined, so define it by default.
 | 
			
		||||
    AS_IF([test "x$enable_debug" = "xyes"],
 | 
			
		||||
      [m4_map_args_w(ax_enable_debug_vars, [AC_DEFINE(], [,,[Define if debugging is enabled])])],
 | 
			
		||||
      [m4_map_args_w(ax_disable_debug_vars, [AC_DEFINE(], [,,[Define if debugging is disabled])])])
 | 
			
		||||
    ax_enable_debug=$enable_debug
 | 
			
		||||
])
 | 
			
		||||
							
								
								
									
										84
									
								
								m4/ax_check_gnu_make.m4
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								m4/ax_check_gnu_make.m4
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,84 @@
 | 
			
		|||
# ===========================================================================
 | 
			
		||||
#     http://www.gnu.org/software/autoconf-archive/ax_check_gnu_make.html
 | 
			
		||||
# ===========================================================================
 | 
			
		||||
#
 | 
			
		||||
# SYNOPSIS
 | 
			
		||||
#
 | 
			
		||||
#   AX_CHECK_GNU_MAKE()
 | 
			
		||||
#
 | 
			
		||||
# DESCRIPTION
 | 
			
		||||
#
 | 
			
		||||
#   This macro searches for a GNU version of make. If a match is found:
 | 
			
		||||
#
 | 
			
		||||
#     * The makefile variable `ifGNUmake' is set to the empty string, otherwise
 | 
			
		||||
#       it is set to "#". This is useful for including a special features in a
 | 
			
		||||
#       Makefile, which cannot be handled by other versions of make.
 | 
			
		||||
#     * The variable `_cv_gnu_make_command` is set to the command to invoke
 | 
			
		||||
#       GNU make if it exists, the empty string otherwise.
 | 
			
		||||
#     * The variable `ax_cv_gnu_make_command` is set to the command to invoke
 | 
			
		||||
#       GNU make by copying `_cv_gnu_make_command`, otherwise it is unset.
 | 
			
		||||
#     * If GNU Make is found, its version is extracted from the output of
 | 
			
		||||
#       `make --version` as the last field of a record of space-separated
 | 
			
		||||
#       columns and saved into the variable `ax_check_gnu_make_version`.
 | 
			
		||||
#
 | 
			
		||||
#   Here is an example of its use:
 | 
			
		||||
#
 | 
			
		||||
#   Makefile.in might contain:
 | 
			
		||||
#
 | 
			
		||||
#     # A failsafe way of putting a dependency rule into a makefile
 | 
			
		||||
#     $(DEPEND):
 | 
			
		||||
#             $(CC) -MM $(srcdir)/*.c > $(DEPEND)
 | 
			
		||||
#
 | 
			
		||||
#     @ifGNUmake@ ifeq ($(DEPEND),$(wildcard $(DEPEND)))
 | 
			
		||||
#     @ifGNUmake@ include $(DEPEND)
 | 
			
		||||
#     @ifGNUmake@ endif
 | 
			
		||||
#
 | 
			
		||||
#   Then configure.in would normally contain:
 | 
			
		||||
#
 | 
			
		||||
#     AX_CHECK_GNU_MAKE()
 | 
			
		||||
#     AC_OUTPUT(Makefile)
 | 
			
		||||
#
 | 
			
		||||
#   Then perhaps to cause gnu make to override any other make, we could do
 | 
			
		||||
#   something like this (note that GNU make always looks for GNUmakefile
 | 
			
		||||
#   first):
 | 
			
		||||
#
 | 
			
		||||
#     if  ! test x$_cv_gnu_make_command = x ; then
 | 
			
		||||
#             mv Makefile GNUmakefile
 | 
			
		||||
#             echo .DEFAULT: > Makefile ;
 | 
			
		||||
#             echo \  $_cv_gnu_make_command \$@ >> Makefile;
 | 
			
		||||
#     fi
 | 
			
		||||
#
 | 
			
		||||
#   Then, if any (well almost any) other make is called, and GNU make also
 | 
			
		||||
#   exists, then the other make wraps the GNU make.
 | 
			
		||||
#
 | 
			
		||||
# LICENSE
 | 
			
		||||
#
 | 
			
		||||
#   Copyright (c) 2008 John Darrington <j.darrington@elvis.murdoch.edu.au>
 | 
			
		||||
#   Copyright (c) 2015 Enrico M. Crisostomo <enrico.m.crisostomo@gmail.com>
 | 
			
		||||
#
 | 
			
		||||
#   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.
 | 
			
		||||
 | 
			
		||||
#serial 8
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([AX_CHECK_GNU_MAKE],dnl
 | 
			
		||||
  [AC_PROG_AWK
 | 
			
		||||
  AC_CACHE_CHECK([for GNU make],[_cv_gnu_make_command],[dnl
 | 
			
		||||
    _cv_gnu_make_command="" ;
 | 
			
		||||
dnl Search all the common names for GNU make
 | 
			
		||||
    for a in "$MAKE" make gmake gnumake ; do
 | 
			
		||||
      if test -z "$a" ; then continue ; fi ;
 | 
			
		||||
      if "$a" --version 2> /dev/null | grep GNU 2>&1 > /dev/null ; then
 | 
			
		||||
        _cv_gnu_make_command=$a ;
 | 
			
		||||
        AX_CHECK_GNU_MAKE_HEADLINE=$("$a" --version 2> /dev/null | grep "GNU Make")
 | 
			
		||||
        ax_check_gnu_make_version=$(echo ${AX_CHECK_GNU_MAKE_HEADLINE} | ${AWK} -F " " '{ print $(NF); }')
 | 
			
		||||
        break ;
 | 
			
		||||
      fi
 | 
			
		||||
    done ;])
 | 
			
		||||
dnl If there was a GNU version, then set @ifGNUmake@ to the empty string, '#' otherwise
 | 
			
		||||
  AS_VAR_IF([_cv_gnu_make_command], [""], [AS_VAR_SET([ifGNUmake], ["#"])],   [AS_VAR_SET([ifGNUmake], [""])])
 | 
			
		||||
  AS_VAR_IF([_cv_gnu_make_command], [""], [AS_UNSET(ax_cv_gnu_make_command)], [AS_VAR_SET([ax_cv_gnu_make_command], [${_cv_gnu_make_command}])])
 | 
			
		||||
  AC_SUBST([ifGNUmake])
 | 
			
		||||
])
 | 
			
		||||
							
								
								
									
										74
									
								
								m4/ax_check_link_flag.m4
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								m4/ax_check_link_flag.m4
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,74 @@
 | 
			
		|||
# ===========================================================================
 | 
			
		||||
#    http://www.gnu.org/software/autoconf-archive/ax_check_link_flag.html
 | 
			
		||||
# ===========================================================================
 | 
			
		||||
#
 | 
			
		||||
# SYNOPSIS
 | 
			
		||||
#
 | 
			
		||||
#   AX_CHECK_LINK_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT])
 | 
			
		||||
#
 | 
			
		||||
# DESCRIPTION
 | 
			
		||||
#
 | 
			
		||||
#   Check whether the given FLAG works with the linker or gives an error.
 | 
			
		||||
#   (Warnings, however, are ignored)
 | 
			
		||||
#
 | 
			
		||||
#   ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
 | 
			
		||||
#   success/failure.
 | 
			
		||||
#
 | 
			
		||||
#   If EXTRA-FLAGS is defined, it is added to the linker's default flags
 | 
			
		||||
#   when the check is done.  The check is thus made with the flags: "LDFLAGS
 | 
			
		||||
#   EXTRA-FLAGS FLAG".  This can for example be used to force the linker to
 | 
			
		||||
#   issue an error when a bad flag is given.
 | 
			
		||||
#
 | 
			
		||||
#   INPUT gives an alternative input source to AC_LINK_IFELSE.
 | 
			
		||||
#
 | 
			
		||||
#   NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
 | 
			
		||||
#   macro in sync with AX_CHECK_{PREPROC,COMPILE}_FLAG.
 | 
			
		||||
#
 | 
			
		||||
# LICENSE
 | 
			
		||||
#
 | 
			
		||||
#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
 | 
			
		||||
#   Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
 | 
			
		||||
#
 | 
			
		||||
#   This program is free software: you can redistribute it and/or modify it
 | 
			
		||||
#   under the terms of the GNU General Public License as published by the
 | 
			
		||||
#   Free Software Foundation, either version 3 of the License, or (at your
 | 
			
		||||
#   option) any later version.
 | 
			
		||||
#
 | 
			
		||||
#   This program is distributed in the hope that it will be useful, but
 | 
			
		||||
#   WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
 | 
			
		||||
#   Public License for more details.
 | 
			
		||||
#
 | 
			
		||||
#   You should have received a copy of the GNU General Public License along
 | 
			
		||||
#   with this program. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
#
 | 
			
		||||
#   As a special exception, the respective Autoconf Macro's copyright owner
 | 
			
		||||
#   gives unlimited permission to copy, distribute and modify the configure
 | 
			
		||||
#   scripts that are the output of Autoconf when processing the Macro. You
 | 
			
		||||
#   need not follow the terms of the GNU General Public License when using
 | 
			
		||||
#   or distributing such scripts, even though portions of the text of the
 | 
			
		||||
#   Macro appear in them. The GNU General Public License (GPL) does govern
 | 
			
		||||
#   all other use of the material that constitutes the Autoconf Macro.
 | 
			
		||||
#
 | 
			
		||||
#   This special exception to the GPL applies to versions of the Autoconf
 | 
			
		||||
#   Macro released by the Autoconf Archive. When you make and distribute a
 | 
			
		||||
#   modified version of the Autoconf Macro, you may extend this special
 | 
			
		||||
#   exception to the GPL to apply to your modified version as well.
 | 
			
		||||
 | 
			
		||||
#serial 4
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([AX_CHECK_LINK_FLAG],
 | 
			
		||||
[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
 | 
			
		||||
AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_ldflags_$4_$1])dnl
 | 
			
		||||
AC_CACHE_CHECK([whether the linker accepts $1], CACHEVAR, [
 | 
			
		||||
  ax_check_save_flags=$LDFLAGS
 | 
			
		||||
  LDFLAGS="$LDFLAGS $4 $1"
 | 
			
		||||
  AC_LINK_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
 | 
			
		||||
    [AS_VAR_SET(CACHEVAR,[yes])],
 | 
			
		||||
    [AS_VAR_SET(CACHEVAR,[no])])
 | 
			
		||||
  LDFLAGS=$ax_check_save_flags])
 | 
			
		||||
AS_VAR_IF(CACHEVAR,yes,
 | 
			
		||||
  [m4_default([$2], :)],
 | 
			
		||||
  [m4_default([$3], :)])
 | 
			
		||||
AS_VAR_POPDEF([CACHEVAR])dnl
 | 
			
		||||
])dnl AX_CHECK_LINK_FLAGS
 | 
			
		||||
							
								
								
									
										273
									
								
								m4/ax_code_coverage.m4
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										273
									
								
								m4/ax_code_coverage.m4
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,273 @@
 | 
			
		|||
# ===========================================================================
 | 
			
		||||
#     http://www.gnu.org/software/autoconf-archive/ax_code_coverage.html
 | 
			
		||||
# ===========================================================================
 | 
			
		||||
#
 | 
			
		||||
# SYNOPSIS
 | 
			
		||||
#
 | 
			
		||||
#   AX_CODE_COVERAGE()
 | 
			
		||||
#
 | 
			
		||||
# DESCRIPTION
 | 
			
		||||
#
 | 
			
		||||
#   Defines CODE_COVERAGE_CPPFLAGS, CODE_COVERAGE_CFLAGS,
 | 
			
		||||
#   CODE_COVERAGE_CXXFLAGS and CODE_COVERAGE_LDFLAGS which should be
 | 
			
		||||
#   included in the CPPFLAGS, CFLAGS CXXFLAGS and LIBS/LDFLAGS variables of
 | 
			
		||||
#   every build target (program or library) which should be built with code
 | 
			
		||||
#   coverage support. Also defines CODE_COVERAGE_RULES which should be
 | 
			
		||||
#   substituted in your Makefile; and $enable_code_coverage which can be
 | 
			
		||||
#   used in subsequent configure output. CODE_COVERAGE_ENABLED is defined
 | 
			
		||||
#   and substituted, and corresponds to the value of the
 | 
			
		||||
#   --enable-code-coverage option, which defaults to being disabled.
 | 
			
		||||
#
 | 
			
		||||
#   Test also for gcov program and create GCOV variable that could be
 | 
			
		||||
#   substituted.
 | 
			
		||||
#
 | 
			
		||||
#   Note that all optimisation flags in CFLAGS must be disabled when code
 | 
			
		||||
#   coverage is enabled.
 | 
			
		||||
#
 | 
			
		||||
#   Usage example:
 | 
			
		||||
#
 | 
			
		||||
#   configure.ac:
 | 
			
		||||
#
 | 
			
		||||
#     AX_CODE_COVERAGE
 | 
			
		||||
#
 | 
			
		||||
#   Makefile.am:
 | 
			
		||||
#
 | 
			
		||||
#     @CODE_COVERAGE_RULES@
 | 
			
		||||
#     my_program_LIBS = ... $(CODE_COVERAGE_LDFLAGS) ...
 | 
			
		||||
#     my_program_CPPFLAGS = ... $(CODE_COVERAGE_CPPFLAGS) ...
 | 
			
		||||
#     my_program_CFLAGS = ... $(CODE_COVERAGE_CFLAGS) ...
 | 
			
		||||
#     my_program_CXXFLAGS = ... $(CODE_COVERAGE_CXXFLAGS) ...
 | 
			
		||||
#
 | 
			
		||||
#   This results in a "check-code-coverage" rule being added to any
 | 
			
		||||
#   Makefile.am which includes "@CODE_COVERAGE_RULES@" (assuming the module
 | 
			
		||||
#   has been configured with --enable-code-coverage). Running `make
 | 
			
		||||
#   check-code-coverage` in that directory will run the module's test suite
 | 
			
		||||
#   (`make check`) and build a code coverage report detailing the code which
 | 
			
		||||
#   was touched, then print the URI for the report.
 | 
			
		||||
#
 | 
			
		||||
#   This code was derived from Makefile.decl in GLib, originally licenced
 | 
			
		||||
#   under LGPLv2.1+.
 | 
			
		||||
#
 | 
			
		||||
# LICENSE
 | 
			
		||||
#
 | 
			
		||||
#   Copyright (c) 2012, 2016 Philip Withnall
 | 
			
		||||
#   Copyright (c) 2012 Xan Lopez
 | 
			
		||||
#   Copyright (c) 2012 Christian Persch
 | 
			
		||||
#   Copyright (c) 2012 Paolo Borelli
 | 
			
		||||
#   Copyright (c) 2012 Dan Winship
 | 
			
		||||
#   Copyright (c) 2015 Bastien ROUCARIES
 | 
			
		||||
#
 | 
			
		||||
#   This library is free software; you can redistribute it and/or modify it
 | 
			
		||||
#   under the terms of the GNU Lesser General Public License as published by
 | 
			
		||||
#   the Free Software Foundation; either version 2.1 of the License, or (at
 | 
			
		||||
#   your option) any later version.
 | 
			
		||||
#
 | 
			
		||||
#   This library is distributed in the hope that it will be useful, but
 | 
			
		||||
#   WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
 | 
			
		||||
#   General Public License for more details.
 | 
			
		||||
#
 | 
			
		||||
#   You should have received a copy of the GNU Lesser General Public License
 | 
			
		||||
#   along with this program. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 | 
			
		||||
#serial 15
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([AX_CODE_COVERAGE],[
 | 
			
		||||
	dnl Check for --enable-code-coverage
 | 
			
		||||
	AC_REQUIRE([AC_PROG_SED])
 | 
			
		||||
 | 
			
		||||
	# allow to override gcov location
 | 
			
		||||
	AC_ARG_WITH([gcov],
 | 
			
		||||
	  [AS_HELP_STRING([--with-gcov[=GCOV]], [use given GCOV for coverage (GCOV=gcov).])],
 | 
			
		||||
	  [_AX_CODE_COVERAGE_GCOV_PROG_WITH=$with_gcov],
 | 
			
		||||
	  [_AX_CODE_COVERAGE_GCOV_PROG_WITH=gcov])
 | 
			
		||||
 | 
			
		||||
	AC_MSG_CHECKING([whether to build with code coverage support])
 | 
			
		||||
	AC_ARG_ENABLE([code-coverage],
 | 
			
		||||
	  AS_HELP_STRING([--enable-code-coverage],
 | 
			
		||||
	  [Whether to enable code coverage support]),,
 | 
			
		||||
	  enable_code_coverage=no)
 | 
			
		||||
 | 
			
		||||
	AM_CONDITIONAL([CODE_COVERAGE_ENABLED], [test x$enable_code_coverage = xyes])
 | 
			
		||||
	AC_SUBST([CODE_COVERAGE_ENABLED], [$enable_code_coverage])
 | 
			
		||||
	AC_MSG_RESULT($enable_code_coverage)
 | 
			
		||||
 | 
			
		||||
	AS_IF([ test "$enable_code_coverage" = "yes" ], [
 | 
			
		||||
		# check for gcov
 | 
			
		||||
		AC_CHECK_TOOL([GCOV],
 | 
			
		||||
		  [$_AX_CODE_COVERAGE_GCOV_PROG_WITH],
 | 
			
		||||
		  [:])
 | 
			
		||||
		AS_IF([test "X$GCOV" = "X:"],
 | 
			
		||||
		  [AC_MSG_ERROR([gcov is needed to do coverage])])
 | 
			
		||||
		AC_SUBST([GCOV])
 | 
			
		||||
 | 
			
		||||
		dnl Check if gcc is being used
 | 
			
		||||
		AS_IF([ test "$GCC" = "no" ], [
 | 
			
		||||
			AC_MSG_ERROR([not compiling with gcc, which is required for gcov code coverage])
 | 
			
		||||
		])
 | 
			
		||||
 | 
			
		||||
		# List of supported lcov versions.
 | 
			
		||||
		lcov_version_list="1.6 1.7 1.8 1.9 1.10 1.11 1.12"
 | 
			
		||||
 | 
			
		||||
		AC_CHECK_PROG([LCOV], [lcov], [lcov])
 | 
			
		||||
		AC_CHECK_PROG([GENHTML], [genhtml], [genhtml])
 | 
			
		||||
 | 
			
		||||
		AS_IF([ test "$LCOV" ], [
 | 
			
		||||
			AC_CACHE_CHECK([for lcov version], ax_cv_lcov_version, [
 | 
			
		||||
				ax_cv_lcov_version=invalid
 | 
			
		||||
				lcov_version=`$LCOV -v 2>/dev/null | $SED -e 's/^.* //'`
 | 
			
		||||
				for lcov_check_version in $lcov_version_list; do
 | 
			
		||||
					if test "$lcov_version" = "$lcov_check_version"; then
 | 
			
		||||
						ax_cv_lcov_version="$lcov_check_version (ok)"
 | 
			
		||||
					fi
 | 
			
		||||
				done
 | 
			
		||||
			])
 | 
			
		||||
		], [
 | 
			
		||||
			lcov_msg="To enable code coverage reporting you must have one of the following lcov versions installed: $lcov_version_list"
 | 
			
		||||
			AC_MSG_ERROR([$lcov_msg])
 | 
			
		||||
		])
 | 
			
		||||
 | 
			
		||||
		case $ax_cv_lcov_version in
 | 
			
		||||
			""|invalid[)]
 | 
			
		||||
				lcov_msg="You must have one of the following versions of lcov: $lcov_version_list (found: $lcov_version)."
 | 
			
		||||
				AC_MSG_ERROR([$lcov_msg])
 | 
			
		||||
				LCOV="exit 0;"
 | 
			
		||||
			;;
 | 
			
		||||
		esac
 | 
			
		||||
 | 
			
		||||
		AS_IF([ test -z "$GENHTML" ], [
 | 
			
		||||
			AC_MSG_ERROR([Could not find genhtml from the lcov package])
 | 
			
		||||
		])
 | 
			
		||||
 | 
			
		||||
		dnl Build the code coverage flags
 | 
			
		||||
		CODE_COVERAGE_CPPFLAGS="-DNDEBUG"
 | 
			
		||||
		CODE_COVERAGE_CFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
 | 
			
		||||
		CODE_COVERAGE_CXXFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
 | 
			
		||||
		CODE_COVERAGE_LDFLAGS="-lgcov"
 | 
			
		||||
 | 
			
		||||
		AC_SUBST([CODE_COVERAGE_CPPFLAGS])
 | 
			
		||||
		AC_SUBST([CODE_COVERAGE_CFLAGS])
 | 
			
		||||
		AC_SUBST([CODE_COVERAGE_CXXFLAGS])
 | 
			
		||||
		AC_SUBST([CODE_COVERAGE_LDFLAGS])
 | 
			
		||||
	])
 | 
			
		||||
 | 
			
		||||
[CODE_COVERAGE_RULES='
 | 
			
		||||
# Code coverage
 | 
			
		||||
#
 | 
			
		||||
# Optional:
 | 
			
		||||
#  - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.
 | 
			
		||||
#    Multiple directories may be specified, separated by whitespace.
 | 
			
		||||
#    (Default: $(top_builddir))
 | 
			
		||||
#  - CODE_COVERAGE_OUTPUT_FILE: Filename and path for the .info file generated
 | 
			
		||||
#    by lcov for code coverage. (Default:
 | 
			
		||||
#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info)
 | 
			
		||||
#  - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage
 | 
			
		||||
#    reports to be created. (Default:
 | 
			
		||||
#    $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage)
 | 
			
		||||
#  - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,
 | 
			
		||||
#    set to 0 to disable it and leave empty to stay with the default.
 | 
			
		||||
#    (Default: empty)
 | 
			
		||||
#  - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov
 | 
			
		||||
#    instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
 | 
			
		||||
#  - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov
 | 
			
		||||
#    instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
 | 
			
		||||
#  - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov
 | 
			
		||||
#  - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the
 | 
			
		||||
#    collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
 | 
			
		||||
#  - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov
 | 
			
		||||
#    instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
 | 
			
		||||
#  - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering
 | 
			
		||||
#    lcov instance. (Default: empty)
 | 
			
		||||
#  - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov
 | 
			
		||||
#    instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
 | 
			
		||||
#  - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the
 | 
			
		||||
#    genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
 | 
			
		||||
#  - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml
 | 
			
		||||
#    instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
 | 
			
		||||
#  - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore
 | 
			
		||||
#
 | 
			
		||||
# The generated report will be titled using the $(PACKAGE_NAME) and
 | 
			
		||||
# $(PACKAGE_VERSION). In order to add the current git hash to the title,
 | 
			
		||||
# use the git-version-gen script, available online.
 | 
			
		||||
 | 
			
		||||
# Optional variables
 | 
			
		||||
CODE_COVERAGE_DIRECTORY ?= $(top_builddir)
 | 
			
		||||
CODE_COVERAGE_OUTPUT_FILE ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage.info
 | 
			
		||||
CODE_COVERAGE_OUTPUT_DIRECTORY ?= $(PACKAGE_NAME)-$(PACKAGE_VERSION)-coverage
 | 
			
		||||
CODE_COVERAGE_BRANCH_COVERAGE ?=
 | 
			
		||||
CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= $(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
 | 
			
		||||
--rc lcov_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
 | 
			
		||||
CODE_COVERAGE_LCOV_SHOPTS ?= $(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
 | 
			
		||||
CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool "$(GCOV)"
 | 
			
		||||
CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= $(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
 | 
			
		||||
CODE_COVERAGE_LCOV_OPTIONS ?= $(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
 | 
			
		||||
CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=
 | 
			
		||||
CODE_COVERAGE_LCOV_RMOPTS ?= $(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
 | 
			
		||||
CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\
 | 
			
		||||
$(if $(CODE_COVERAGE_BRANCH_COVERAGE),\
 | 
			
		||||
--rc genhtml_branch_coverage=$(CODE_COVERAGE_BRANCH_COVERAGE))
 | 
			
		||||
CODE_COVERAGE_GENHTML_OPTIONS ?= $(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULTS)
 | 
			
		||||
CODE_COVERAGE_IGNORE_PATTERN ?=
 | 
			
		||||
 | 
			
		||||
code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))
 | 
			
		||||
code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))
 | 
			
		||||
code_coverage_v_lcov_cap_0 = @echo "  LCOV   --capture"\
 | 
			
		||||
 $(CODE_COVERAGE_OUTPUT_FILE);
 | 
			
		||||
code_coverage_v_lcov_ign = $(code_coverage_v_lcov_ign_$(V))
 | 
			
		||||
code_coverage_v_lcov_ign_ = $(code_coverage_v_lcov_ign_$(AM_DEFAULT_VERBOSITY))
 | 
			
		||||
code_coverage_v_lcov_ign_0 = @echo "  LCOV   --remove /tmp/*"\
 | 
			
		||||
 $(CODE_COVERAGE_IGNORE_PATTERN);
 | 
			
		||||
code_coverage_v_genhtml = $(code_coverage_v_genhtml_$(V))
 | 
			
		||||
code_coverage_v_genhtml_ = $(code_coverage_v_genhtml_$(AM_DEFAULT_VERBOSITY))
 | 
			
		||||
code_coverage_v_genhtml_0 = @echo "  GEN   " $(CODE_COVERAGE_OUTPUT_DIRECTORY);
 | 
			
		||||
code_coverage_quiet = $(code_coverage_quiet_$(V))
 | 
			
		||||
code_coverage_quiet_ = $(code_coverage_quiet_$(AM_DEFAULT_VERBOSITY))
 | 
			
		||||
code_coverage_quiet_0 = --quiet
 | 
			
		||||
 | 
			
		||||
# sanitizes the test-name: replaces with underscores: dashes and dots
 | 
			
		||||
code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))
 | 
			
		||||
 | 
			
		||||
# Use recursive makes in order to ignore errors during check
 | 
			
		||||
check-code-coverage:
 | 
			
		||||
ifeq ($(CODE_COVERAGE_ENABLED),yes)
 | 
			
		||||
	-$(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) -k check
 | 
			
		||||
	$(A''M_V_at)$(MAKE) $(AM_MAKEFLAGS) code-coverage-capture
 | 
			
		||||
else
 | 
			
		||||
	@echo "Need to reconfigure with --enable-code-coverage"
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Capture code coverage data
 | 
			
		||||
code-coverage-capture: code-coverage-capture-hook
 | 
			
		||||
ifeq ($(CODE_COVERAGE_ENABLED),yes)
 | 
			
		||||
	$(code_coverage_v_lcov_cap)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name "$(call code_coverage_sanitize,$(PACKAGE_NAME)-$(PACKAGE_VERSION))" --no-checksum --compat-libtool $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_OPTIONS)
 | 
			
		||||
	$(code_coverage_v_lcov_ign)$(LCOV) $(code_coverage_quiet) $(addprefix --directory ,$(CODE_COVERAGE_DIRECTORY)) --remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" $(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_LCOV_SHOPTS) $(CODE_COVERAGE_LCOV_RMOPTS)
 | 
			
		||||
	-@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp
 | 
			
		||||
	$(code_coverage_v_genhtml)LANG=C $(GENHTML) $(code_coverage_quiet) $(addprefix --prefix ,$(CODE_COVERAGE_DIRECTORY)) --output-directory "$(CODE_COVERAGE_OUTPUT_DIRECTORY)" --title "$(PACKAGE_NAME)-$(PACKAGE_VERSION) Code Coverage" --legend --show-details "$(CODE_COVERAGE_OUTPUT_FILE)" $(CODE_COVERAGE_GENHTML_OPTIONS)
 | 
			
		||||
	@echo "file://$(abs_builddir)/$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html"
 | 
			
		||||
else
 | 
			
		||||
	@echo "Need to reconfigure with --enable-code-coverage"
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Hook rule executed before code-coverage-capture, overridable by the user
 | 
			
		||||
code-coverage-capture-hook:
 | 
			
		||||
 | 
			
		||||
ifeq ($(CODE_COVERAGE_ENABLED),yes)
 | 
			
		||||
clean: code-coverage-clean
 | 
			
		||||
code-coverage-clean:
 | 
			
		||||
	-$(LCOV) --directory $(top_builddir) -z
 | 
			
		||||
	-rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp $(CODE_COVERAGE_OUTPUT_DIRECTORY)
 | 
			
		||||
	-find . -name "*.gcda" -o -name "*.gcov" -delete
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
GITIGNOREFILES ?=
 | 
			
		||||
GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
 | 
			
		||||
 | 
			
		||||
A''M_DISTCHECK_CONFIGURE_FLAGS ?=
 | 
			
		||||
A''M_DISTCHECK_CONFIGURE_FLAGS += --disable-code-coverage
 | 
			
		||||
 | 
			
		||||
.PHONY: check-code-coverage code-coverage-capture code-coverage-capture-hook code-coverage-clean
 | 
			
		||||
']
 | 
			
		||||
 | 
			
		||||
	AC_SUBST([CODE_COVERAGE_RULES])
 | 
			
		||||
	m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([CODE_COVERAGE_RULES])])
 | 
			
		||||
])
 | 
			
		||||
							
								
								
									
										70
									
								
								m4/ax_configure_args.m4
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								m4/ax_configure_args.m4
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,70 @@
 | 
			
		|||
# ===========================================================================
 | 
			
		||||
#     http://www.gnu.org/software/autoconf-archive/ax_configure_args.html
 | 
			
		||||
# ===========================================================================
 | 
			
		||||
#
 | 
			
		||||
# SYNOPSIS
 | 
			
		||||
#
 | 
			
		||||
#   AX_CONFIGURE_ARGS
 | 
			
		||||
#
 | 
			
		||||
# DESCRIPTION
 | 
			
		||||
#
 | 
			
		||||
#   Helper macro for AX_ENABLE_BUILDDIR.
 | 
			
		||||
#
 | 
			
		||||
#   The traditional way of starting a subdir-configure is running the script
 | 
			
		||||
#   with ${1+"$@"} but since autoconf 2.60 this is broken. Instead we have
 | 
			
		||||
#   to rely on eval'ing $ac_configure_args however some old autoconf
 | 
			
		||||
#   versions do not provide that. To ensure maximum portability of autoconf
 | 
			
		||||
#   extension macros this helper can be AC_REQUIRE'd so that
 | 
			
		||||
#   $ac_configure_args will alsways be present.
 | 
			
		||||
#
 | 
			
		||||
#   Sadly, the traditional "exec $SHELL" of the enable_builddir macros is
 | 
			
		||||
#   spoiled now and must be replaced by "eval + exit $?".
 | 
			
		||||
#
 | 
			
		||||
#   Example:
 | 
			
		||||
#
 | 
			
		||||
#     AC_DEFUN([AX_ENABLE_SUBDIR],[dnl
 | 
			
		||||
#       AC_REQUIRE([AX_CONFIGURE_ARGS])dnl
 | 
			
		||||
#       eval $SHELL $ac_configure_args || exit $?
 | 
			
		||||
#       ...])
 | 
			
		||||
#
 | 
			
		||||
# LICENSE
 | 
			
		||||
#
 | 
			
		||||
#   Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
 | 
			
		||||
#
 | 
			
		||||
#   This program is free software; you can redistribute it and/or modify it
 | 
			
		||||
#   under the terms of the GNU General Public License as published by the
 | 
			
		||||
#   Free Software Foundation; either version 3 of the License, or (at your
 | 
			
		||||
#   option) any later version.
 | 
			
		||||
#
 | 
			
		||||
#   This program is distributed in the hope that it will be useful, but
 | 
			
		||||
#   WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
 | 
			
		||||
#   Public License for more details.
 | 
			
		||||
#
 | 
			
		||||
#   You should have received a copy of the GNU General Public License along
 | 
			
		||||
#   with this program. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
#
 | 
			
		||||
#   As a special exception, the respective Autoconf Macro's copyright owner
 | 
			
		||||
#   gives unlimited permission to copy, distribute and modify the configure
 | 
			
		||||
#   scripts that are the output of Autoconf when processing the Macro. You
 | 
			
		||||
#   need not follow the terms of the GNU General Public License when using
 | 
			
		||||
#   or distributing such scripts, even though portions of the text of the
 | 
			
		||||
#   Macro appear in them. The GNU General Public License (GPL) does govern
 | 
			
		||||
#   all other use of the material that constitutes the Autoconf Macro.
 | 
			
		||||
#
 | 
			
		||||
#   This special exception to the GPL applies to versions of the Autoconf
 | 
			
		||||
#   Macro released by the Autoconf Archive. When you make and distribute a
 | 
			
		||||
#   modified version of the Autoconf Macro, you may extend this special
 | 
			
		||||
#   exception to the GPL to apply to your modified version as well.
 | 
			
		||||
 | 
			
		||||
#serial 9
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([AX_CONFIGURE_ARGS],[
 | 
			
		||||
   # [$]@ is unsable in 2.60+ but earlier autoconf had no ac_configure_args
 | 
			
		||||
   if test "${ac_configure_args+set}" != "set" ; then
 | 
			
		||||
      ac_configure_args=
 | 
			
		||||
      for ac_arg in ${1+"[$]@"}; do
 | 
			
		||||
         ac_configure_args="$ac_configure_args '$ac_arg'"
 | 
			
		||||
      done
 | 
			
		||||
   fi
 | 
			
		||||
])
 | 
			
		||||
							
								
								
									
										302
									
								
								m4/ax_enable_builddir.m4
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										302
									
								
								m4/ax_enable_builddir.m4
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,302 @@
 | 
			
		|||
# ===========================================================================
 | 
			
		||||
#    http://www.gnu.org/software/autoconf-archive/ax_enable_builddir.html
 | 
			
		||||
# ===========================================================================
 | 
			
		||||
#
 | 
			
		||||
# SYNOPSIS
 | 
			
		||||
#
 | 
			
		||||
#   AX_ENABLE_BUILDDIR [(dirstring-or-command [,Makefile.mk [,-all]])]
 | 
			
		||||
#
 | 
			
		||||
# DESCRIPTION
 | 
			
		||||
#
 | 
			
		||||
#   If the current configure was run within the srcdir then we move all
 | 
			
		||||
#   configure-files into a subdir and let the configure steps continue
 | 
			
		||||
#   there. We provide an option --disable-builddir to suppress the move into
 | 
			
		||||
#   a separate builddir.
 | 
			
		||||
#
 | 
			
		||||
#   Defaults:
 | 
			
		||||
#
 | 
			
		||||
#     $1 = $host (overridden with $HOST)
 | 
			
		||||
#     $2 = Makefile.mk
 | 
			
		||||
#     $3 = -all
 | 
			
		||||
#
 | 
			
		||||
#   This macro must be called before AM_INIT_AUTOMAKE. It creates a default
 | 
			
		||||
#   toplevel srcdir Makefile from the information found in the created
 | 
			
		||||
#   toplevel builddir Makefile. It just copies the variables and
 | 
			
		||||
#   rule-targets, each extended with a default rule-execution that recurses
 | 
			
		||||
#   into the build directory of the current "HOST". You can override the
 | 
			
		||||
#   auto-dection through `config.guess` and build-time of course, as in
 | 
			
		||||
#
 | 
			
		||||
#     make HOST=i386-mingw-cross
 | 
			
		||||
#
 | 
			
		||||
#   which can of course set at configure time as well using
 | 
			
		||||
#
 | 
			
		||||
#     configure --host=i386-mingw-cross
 | 
			
		||||
#
 | 
			
		||||
#   After the default has been created, additional rules can be appended
 | 
			
		||||
#   that will not just recurse into the subdirectories and only ever exist
 | 
			
		||||
#   in the srcdir toplevel makefile - these parts are read from the $2 =
 | 
			
		||||
#   Makefile.mk file
 | 
			
		||||
#
 | 
			
		||||
#   The automatic rules are usually scanning the toplevel Makefile for lines
 | 
			
		||||
#   like '#### $host |$builddir' to recognize the place where to recurse
 | 
			
		||||
#   into. Usually, the last one is the only one used. However, almost all
 | 
			
		||||
#   targets have an additional "*-all" rule which makes the script to
 | 
			
		||||
#   recurse into _all_ variants of the current HOST (!!) setting. The "-all"
 | 
			
		||||
#   suffix can be overriden for the macro as well.
 | 
			
		||||
#
 | 
			
		||||
#   a special rule is only given for things like "dist" that will copy the
 | 
			
		||||
#   tarball from the builddir to the sourcedir (or $(PUB)) for reason of
 | 
			
		||||
#   convenience.
 | 
			
		||||
#
 | 
			
		||||
# LICENSE
 | 
			
		||||
#
 | 
			
		||||
#   Copyright (c) 2009 Guido U. Draheim <guidod@gmx.de>
 | 
			
		||||
#   Copyright (c) 2009 Alan Jenkins <alan-jenkins@tuffmail.co.uk>
 | 
			
		||||
#
 | 
			
		||||
#   This program is free software; you can redistribute it and/or modify it
 | 
			
		||||
#   under the terms of the GNU General Public License as published by the
 | 
			
		||||
#   Free Software Foundation; either version 3 of the License, or (at your
 | 
			
		||||
#   option) any later version.
 | 
			
		||||
#
 | 
			
		||||
#   This program is distributed in the hope that it will be useful, but
 | 
			
		||||
#   WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
 | 
			
		||||
#   Public License for more details.
 | 
			
		||||
#
 | 
			
		||||
#   You should have received a copy of the GNU General Public License along
 | 
			
		||||
#   with this program. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
#
 | 
			
		||||
#   As a special exception, the respective Autoconf Macro's copyright owner
 | 
			
		||||
#   gives unlimited permission to copy, distribute and modify the configure
 | 
			
		||||
#   scripts that are the output of Autoconf when processing the Macro. You
 | 
			
		||||
#   need not follow the terms of the GNU General Public License when using
 | 
			
		||||
#   or distributing such scripts, even though portions of the text of the
 | 
			
		||||
#   Macro appear in them. The GNU General Public License (GPL) does govern
 | 
			
		||||
#   all other use of the material that constitutes the Autoconf Macro.
 | 
			
		||||
#
 | 
			
		||||
#   This special exception to the GPL applies to versions of the Autoconf
 | 
			
		||||
#   Macro released by the Autoconf Archive. When you make and distribute a
 | 
			
		||||
#   modified version of the Autoconf Macro, you may extend this special
 | 
			
		||||
#   exception to the GPL to apply to your modified version as well.
 | 
			
		||||
 | 
			
		||||
#serial 25
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([AX_ENABLE_BUILDDIR],[
 | 
			
		||||
AC_REQUIRE([AC_CANONICAL_HOST])[]dnl
 | 
			
		||||
AC_REQUIRE([AC_CANONICAL_TARGET])[]dnl
 | 
			
		||||
AC_REQUIRE([AX_CONFIGURE_ARGS])[]dnl
 | 
			
		||||
AC_REQUIRE([AM_AUX_DIR_EXPAND])[]dnl
 | 
			
		||||
AC_BEFORE([$0],[AM_INIT_AUTOMAKE])dnl
 | 
			
		||||
AS_VAR_PUSHDEF([SUB],[ax_enable_builddir])dnl
 | 
			
		||||
AS_VAR_PUSHDEF([AUX],[ax_enable_builddir_auxdir])dnl
 | 
			
		||||
AS_VAR_PUSHDEF([SED],[ax_enable_builddir_sed])dnl
 | 
			
		||||
SUB="."
 | 
			
		||||
AC_ARG_ENABLE([builddir], AS_HELP_STRING(
 | 
			
		||||
  [--disable-builddir],[disable automatic build in subdir of sources])
 | 
			
		||||
  ,[SUB="$enableval"], [SUB="auto"])
 | 
			
		||||
if test ".$ac_srcdir_defaulted" != ".no" ; then
 | 
			
		||||
if test ".$srcdir" = ".." ; then
 | 
			
		||||
  if test -f config.status ; then
 | 
			
		||||
    AC_MSG_NOTICE(toplevel srcdir already configured... skipping subdir build)
 | 
			
		||||
  else
 | 
			
		||||
    test ".$SUB" = "."  && SUB="."
 | 
			
		||||
    test ".$SUB" = ".no"  && SUB="."
 | 
			
		||||
    test ".$TARGET" = "." && TARGET="$target"
 | 
			
		||||
    test ".$SUB" = ".auto" && SUB="m4_ifval([$1], [$1],[$TARGET])"
 | 
			
		||||
    if test ".$SUB" != ".." ; then    # we know where to go and
 | 
			
		||||
      AS_MKDIR_P([$SUB])
 | 
			
		||||
      echo __.$SUB.__ > $SUB/conftest.tmp
 | 
			
		||||
      cd $SUB
 | 
			
		||||
      if grep __.$SUB.__ conftest.tmp >/dev/null 2>/dev/null ; then
 | 
			
		||||
        rm conftest.tmp
 | 
			
		||||
        AC_MSG_RESULT([continue configure in default builddir "./$SUB"])
 | 
			
		||||
      else
 | 
			
		||||
        AC_MSG_ERROR([could not change to default builddir "./$SUB"])
 | 
			
		||||
      fi
 | 
			
		||||
      srcdir=`echo "$SUB" |
 | 
			
		||||
              sed -e 's,^\./,,;s,[[^/]]$,&/,;s,[[^/]]*/,../,g;s,[[/]]$,,;'`
 | 
			
		||||
      # going to restart from subdirectory location
 | 
			
		||||
      test -f $srcdir/config.log   && mv $srcdir/config.log   .
 | 
			
		||||
      test -f $srcdir/confdefs.h   && mv $srcdir/confdefs.h   .
 | 
			
		||||
      test -f $srcdir/conftest.log && mv $srcdir/conftest.log .
 | 
			
		||||
      test -f $srcdir/$cache_file  && mv $srcdir/$cache_file  .
 | 
			
		||||
      AC_MSG_RESULT(....exec $SHELL $srcdir/[$]0 "--srcdir=$srcdir" "--enable-builddir=$SUB" ${1+"[$]@"})
 | 
			
		||||
      case "[$]0" in # restart
 | 
			
		||||
       [[\\/]]* | ?:[[\\/]]*) # Asbolute name
 | 
			
		||||
         eval $SHELL "'[$]0'" "'--srcdir=$srcdir'" "'--enable-builddir=$SUB'" $ac_configure_args ;;
 | 
			
		||||
       *) eval $SHELL "'$srcdir/[$]0'" "'--srcdir=$srcdir'" "'--enable-builddir=$SUB'" $ac_configure_args ;;
 | 
			
		||||
      esac ; exit $?
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
fi fi
 | 
			
		||||
test ".$SUB" = ".auto" && SUB="."
 | 
			
		||||
dnl ac_path_prog uses "set dummy" to override $@ which would defeat the "exec"
 | 
			
		||||
AC_PATH_PROG(SED,gsed sed, sed)
 | 
			
		||||
AUX="$am_aux_dir"
 | 
			
		||||
AS_VAR_POPDEF([SED])dnl
 | 
			
		||||
AS_VAR_POPDEF([AUX])dnl
 | 
			
		||||
AS_VAR_POPDEF([SUB])dnl
 | 
			
		||||
AC_CONFIG_COMMANDS([buildir],[dnl .............. config.status ..............
 | 
			
		||||
AS_VAR_PUSHDEF([SUB],[ax_enable_builddir])dnl
 | 
			
		||||
AS_VAR_PUSHDEF([TOP],[top_srcdir])dnl
 | 
			
		||||
AS_VAR_PUSHDEF([SRC],[ac_top_srcdir])dnl
 | 
			
		||||
AS_VAR_PUSHDEF([AUX],[ax_enable_builddir_auxdir])dnl
 | 
			
		||||
AS_VAR_PUSHDEF([SED],[ax_enable_builddir_sed])dnl
 | 
			
		||||
pushdef([END],[Makefile.mk])dnl
 | 
			
		||||
pushdef([_ALL],[ifelse([$3],,[-all],[$3])])dnl
 | 
			
		||||
  SRC="$ax_enable_builddir_srcdir"
 | 
			
		||||
  if test ".$SUB" = ".." ; then
 | 
			
		||||
    if test -f "$TOP/Makefile" ; then
 | 
			
		||||
      AC_MSG_NOTICE([skipping TOP/Makefile - left untouched])
 | 
			
		||||
    else
 | 
			
		||||
      AC_MSG_NOTICE([skipping TOP/Makefile - not created])
 | 
			
		||||
    fi
 | 
			
		||||
  else
 | 
			
		||||
    if test -f "$SRC/Makefile" ; then
 | 
			
		||||
      a=`grep "^VERSION " "$SRC/Makefile"` ; b=`grep "^VERSION " Makefile`
 | 
			
		||||
      test "$a" != "$b" && rm "$SRC/Makefile"
 | 
			
		||||
    fi
 | 
			
		||||
    if test -f "$SRC/Makefile" ; then
 | 
			
		||||
	echo "$SRC/Makefile : $SRC/Makefile.in" > $tmp/conftemp.mk
 | 
			
		||||
	echo "	[]@ echo 'REMOVED,,,' >\$[]@" >> $tmp/conftemp.mk
 | 
			
		||||
      eval "${MAKE-make} -f $tmp/conftemp.mk 2>/dev/null >/dev/null"
 | 
			
		||||
      if grep '^REMOVED,,,' "$SRC/Makefile" >/dev/null
 | 
			
		||||
      then rm $SRC/Makefile ; fi
 | 
			
		||||
      cp $tmp/conftemp.mk $SRC/makefiles.mk~      ## DEBUGGING
 | 
			
		||||
    fi
 | 
			
		||||
    if test ! -f "$SRC/Makefile" ; then
 | 
			
		||||
      AC_MSG_NOTICE([create TOP/Makefile guessed from local Makefile])
 | 
			
		||||
      x='`' ; cat >$tmp/conftemp.sed <<_EOF
 | 
			
		||||
/^\$/n
 | 
			
		||||
x
 | 
			
		||||
/^\$/bS
 | 
			
		||||
x
 | 
			
		||||
/\\\\\$/{H;d;}
 | 
			
		||||
{H;s/.*//;x;}
 | 
			
		||||
bM
 | 
			
		||||
:S
 | 
			
		||||
x
 | 
			
		||||
/\\\\\$/{h;d;}
 | 
			
		||||
{h;s/.*//;x;}
 | 
			
		||||
:M
 | 
			
		||||
s/\\(\\n\\)	/\\1 /g
 | 
			
		||||
/^	/d
 | 
			
		||||
/^[[	 ]]*[[\\#]]/d
 | 
			
		||||
/^VPATH *=/d
 | 
			
		||||
s/^srcdir *=.*/srcdir = ./
 | 
			
		||||
s/^top_srcdir *=.*/top_srcdir = ./
 | 
			
		||||
/[[:=]]/!d
 | 
			
		||||
/^\\./d
 | 
			
		||||
dnl Now handle rules (i.e. lines containing ":" but not " = ").
 | 
			
		||||
/ = /b
 | 
			
		||||
/ .= /b
 | 
			
		||||
/:/!b
 | 
			
		||||
s/:.*/:/
 | 
			
		||||
s/ /  /g
 | 
			
		||||
s/ \\([[a-z]][[a-z-]]*[[a-zA-Z0-9]]\\)\\([[ :]]\\)/ \\1 \\1[]_ALL\\2/g
 | 
			
		||||
s/^\\([[a-z]][[a-z-]]*[[a-zA-Z0-9]]\\)\\([[ :]]\\)/\\1 \\1[]_ALL\\2/
 | 
			
		||||
s/  / /g
 | 
			
		||||
/^all all[]_ALL[[ :]]/i\\
 | 
			
		||||
all-configured : all[]_ALL
 | 
			
		||||
dnl dist-all exists... and would make for dist-all-all
 | 
			
		||||
s/ [[a-zA-Z0-9-]]*[]_ALL [[a-zA-Z0-9-]]*[]_ALL[]_ALL//g
 | 
			
		||||
/[]_ALL[]_ALL/d
 | 
			
		||||
a\\
 | 
			
		||||
	@ HOST="\$(HOST)\" \\\\\\
 | 
			
		||||
	; test ".\$\$HOST" = "." && HOST=$x sh $AUX/config.guess $x \\\\\\
 | 
			
		||||
	; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\
 | 
			
		||||
	; use=$x basename "\$\@" _ALL $x; n=$x echo \$\$BUILD | wc -w $x \\\\\\
 | 
			
		||||
	; echo "MAKE \$\$HOST : \$\$n * \$\@"; if test "\$\$n" -eq "0" ; then : \\\\\\
 | 
			
		||||
	; BUILD=$x grep "^####.*|" Makefile |tail -1| sed -e 's/.*|//' $x ; fi \\\\\\
 | 
			
		||||
	; test ".\$\$BUILD" = "." && BUILD="." \\\\\\
 | 
			
		||||
	; test "\$\$use" = "\$\@" && BUILD=$x echo "\$\$BUILD" | tail -1 $x \\\\\\
 | 
			
		||||
	; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\
 | 
			
		||||
	; (cd "\$\$i" && test ! -f configure && \$(MAKE) \$\$use) || exit; done
 | 
			
		||||
dnl special rule add-on: "dist" copies the tarball to $(PUB). (source tree)
 | 
			
		||||
/dist[]_ALL *:/a\\
 | 
			
		||||
	@ HOST="\$(HOST)\" \\\\\\
 | 
			
		||||
	; test ".\$\$HOST" = "." && HOST=$x sh $AUX/config.guess $x \\\\\\
 | 
			
		||||
	; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\
 | 
			
		||||
	; found=$x echo \$\$BUILD | wc -w $x \\\\\\
 | 
			
		||||
	; echo "MAKE \$\$HOST : \$\$found \$(PACKAGE)-\$(VERSION).tar.*" \\\\\\
 | 
			
		||||
	; if test "\$\$found" -eq "0" ; then : \\\\\\
 | 
			
		||||
	; BUILD=$x grep "^#### .*|" Makefile |tail -1| sed -e 's/.*|//' $x \\\\\\
 | 
			
		||||
	; fi ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\
 | 
			
		||||
	; for f in \$\$i/\$(PACKAGE)-\$(VERSION).tar.* \\\\\\
 | 
			
		||||
	; do test -f "\$\$f" && mv "\$\$f" \$(PUB). ; done ; break ; done
 | 
			
		||||
dnl special rule add-on: "dist-foo" copies all the archives to $(PUB). (source tree)
 | 
			
		||||
/dist-[[a-zA-Z0-9]]*[]_ALL *:/a\\
 | 
			
		||||
	@ HOST="\$(HOST)\" \\\\\\
 | 
			
		||||
	; test ".\$\$HOST" = "." && HOST=$x sh ./config.guess $x \\\\\\
 | 
			
		||||
	; BUILD=$x grep "^#### \$\$HOST " Makefile | sed -e 's/.*|//' $x \\\\\\
 | 
			
		||||
	; found=$x echo \$\$BUILD | wc -w $x \\\\\\
 | 
			
		||||
	; echo "MAKE \$\$HOST : \$\$found \$(PACKAGE)-\$(VERSION).*" \\\\\\
 | 
			
		||||
	; if test "\$\$found" -eq "0" ; then : \\\\\\
 | 
			
		||||
	; BUILD=$x grep "^#### .*|" Makefile |tail -1| sed -e 's/.*|//' $x \\\\\\
 | 
			
		||||
	; fi ; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\
 | 
			
		||||
	; for f in \$\$i/\$(PACKAGE)-\$(VERSION).* \\\\\\
 | 
			
		||||
	; do test -f "\$\$f" && mv "\$\$f" \$(PUB). ; done ; break ; done
 | 
			
		||||
dnl special rule add-on: "distclean" removes all local builddirs completely
 | 
			
		||||
/distclean[]_ALL *:/a\\
 | 
			
		||||
	@ HOST="\$(HOST)\" \\\\\\
 | 
			
		||||
	; test ".\$\$HOST" = "." && HOST=$x sh $AUX/config.guess $x \\\\\\
 | 
			
		||||
	; BUILD=$x grep "^#### .*|" Makefile | sed -e 's/.*|//' $x \\\\\\
 | 
			
		||||
	; use=$x basename "\$\@" _ALL $x; n=$x echo \$\$BUILD | wc -w $x \\\\\\
 | 
			
		||||
	; echo "MAKE \$\$HOST : \$\$n * \$\@ (all local builds)" \\\\\\
 | 
			
		||||
	; test ".\$\$BUILD" = "." && BUILD="." \\\\\\
 | 
			
		||||
	; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\
 | 
			
		||||
	; echo "# rm -r \$\$i"; done ; echo "# (sleep 3)" ; sleep 3 \\\\\\
 | 
			
		||||
	; for i in \$\$BUILD ; do test ".\$\$i" = "." && continue \\\\\\
 | 
			
		||||
	; echo "\$\$i" | grep "^/" > /dev/null && continue \\\\\\
 | 
			
		||||
	; echo "\$\$i" | grep "^../" > /dev/null && continue \\\\\\
 | 
			
		||||
	; echo "rm -r \$\$i"; (rm -r "\$\$i") ; done ; rm Makefile
 | 
			
		||||
_EOF
 | 
			
		||||
      cp "$tmp/conftemp.sed" "$SRC/makefile.sed~"            ## DEBUGGING
 | 
			
		||||
      $SED -f $tmp/conftemp.sed Makefile >$SRC/Makefile
 | 
			
		||||
      if test -f "$SRC/m4_ifval([$2],[$2],[END])" ; then
 | 
			
		||||
        AC_MSG_NOTICE([extend TOP/Makefile with TOP/m4_ifval([$2],[$2],[END])])
 | 
			
		||||
        cat $SRC/END >>$SRC/Makefile
 | 
			
		||||
      fi ; xxxx="####"
 | 
			
		||||
      echo "$xxxx CONFIGURATIONS FOR TOPLEVEL MAKEFILE: " >>$SRC/Makefile
 | 
			
		||||
      # sanity check
 | 
			
		||||
      if grep '^; echo "MAKE ' $SRC/Makefile >/dev/null ; then
 | 
			
		||||
        AC_MSG_NOTICE([buggy sed found - it deletes tab in "a" text parts])
 | 
			
		||||
        $SED -e '/^@ HOST=/s/^/	/' -e '/^; /s/^/	/' $SRC/Makefile \
 | 
			
		||||
          >$SRC/Makefile~
 | 
			
		||||
        (test -s $SRC/Makefile~ && mv $SRC/Makefile~ $SRC/Makefile) 2>/dev/null
 | 
			
		||||
      fi
 | 
			
		||||
    else
 | 
			
		||||
      xxxx="\\#\\#\\#\\#"
 | 
			
		||||
      # echo "/^$xxxx *$ax_enable_builddir_host /d" >$tmp/conftemp.sed
 | 
			
		||||
      echo "s!^$xxxx [[^|]]* | *$SUB *\$!$xxxx ...... $SUB!" >$tmp/conftemp.sed
 | 
			
		||||
      $SED -f "$tmp/conftemp.sed" "$SRC/Makefile" >$tmp/mkfile.tmp
 | 
			
		||||
        cp "$tmp/conftemp.sed" "$SRC/makefiles.sed~"         ## DEBUGGING
 | 
			
		||||
        cp "$tmp/mkfile.tmp"   "$SRC/makefiles.out~"         ## DEBUGGING
 | 
			
		||||
      if cmp -s "$SRC/Makefile" "$tmp/mkfile.tmp" 2>/dev/null ; then
 | 
			
		||||
        AC_MSG_NOTICE([keeping TOP/Makefile from earlier configure])
 | 
			
		||||
        rm "$tmp/mkfile.tmp"
 | 
			
		||||
      else
 | 
			
		||||
        AC_MSG_NOTICE([reusing TOP/Makefile from earlier configure])
 | 
			
		||||
        mv "$tmp/mkfile.tmp" "$SRC/Makefile"
 | 
			
		||||
      fi
 | 
			
		||||
    fi
 | 
			
		||||
    AC_MSG_NOTICE([build in $SUB (HOST=$ax_enable_builddir_host)])
 | 
			
		||||
    xxxx="####"
 | 
			
		||||
    echo "$xxxx" "$ax_enable_builddir_host" "|$SUB" >>$SRC/Makefile
 | 
			
		||||
  fi
 | 
			
		||||
popdef([END])dnl
 | 
			
		||||
AS_VAR_POPDEF([SED])dnl
 | 
			
		||||
AS_VAR_POPDEF([AUX])dnl
 | 
			
		||||
AS_VAR_POPDEF([SRC])dnl
 | 
			
		||||
AS_VAR_POPDEF([TOP])dnl
 | 
			
		||||
AS_VAR_POPDEF([SUB])dnl
 | 
			
		||||
],[dnl
 | 
			
		||||
ax_enable_builddir_srcdir="$srcdir"                    # $srcdir
 | 
			
		||||
ax_enable_builddir_host="$HOST"                        # $HOST / $host
 | 
			
		||||
ax_enable_builddir_version="$VERSION"                  # $VERSION
 | 
			
		||||
ax_enable_builddir_package="$PACKAGE"                  # $PACKAGE
 | 
			
		||||
ax_enable_builddir_auxdir="$ax_enable_builddir_auxdir" # $AUX
 | 
			
		||||
ax_enable_builddir_sed="$ax_enable_builddir_sed"       # $SED
 | 
			
		||||
ax_enable_builddir="$ax_enable_builddir"               # $SUB
 | 
			
		||||
])dnl
 | 
			
		||||
])
 | 
			
		||||
							
								
								
									
										86
									
								
								m4/ax_extend_srcdir.m4
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								m4/ax_extend_srcdir.m4
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,86 @@
 | 
			
		|||
# ===========================================================================
 | 
			
		||||
#     http://www.gnu.org/software/autoconf-archive/ax_extend_srcdir.html
 | 
			
		||||
# ===========================================================================
 | 
			
		||||
#
 | 
			
		||||
# 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@
 | 
			
		||||
#
 | 
			
		||||
# LICENSE
 | 
			
		||||
#
 | 
			
		||||
#   Copyright (c) 2016 Michael Stapelberg <michael@i3wm.org>
 | 
			
		||||
#
 | 
			
		||||
#   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.
 | 
			
		||||
 | 
			
		||||
#serial 3
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([AX_EXTEND_SRCDIR],
 | 
			
		||||
[dnl
 | 
			
		||||
AS_CASE([$srcdir],
 | 
			
		||||
  [.|.*|/*],
 | 
			
		||||
  [
 | 
			
		||||
    # pwd -P is specified in IEEE 1003.1 from 2004
 | 
			
		||||
    as_dir=`cd "$srcdir" && pwd -P`
 | 
			
		||||
    as_base=`AS_BASENAME([$as_dir])`
 | 
			
		||||
    srcdir=${srcdir}/../${as_base}
 | 
			
		||||
 | 
			
		||||
    AC_SUBST([AX_EXTEND_SRCDIR_CPPFLAGS], ["-DSTRIPPED__FILE__=AS_ESCAPE([\"$$(basename $<)\"])"])
 | 
			
		||||
  ])
 | 
			
		||||
])dnl AX_EXTEND_SRCDIR
 | 
			
		||||
							
								
								
									
										37
									
								
								m4/ax_require_defined.m4
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								m4/ax_require_defined.m4
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,37 @@
 | 
			
		|||
# ===========================================================================
 | 
			
		||||
#    http://www.gnu.org/software/autoconf-archive/ax_require_defined.html
 | 
			
		||||
# ===========================================================================
 | 
			
		||||
#
 | 
			
		||||
# SYNOPSIS
 | 
			
		||||
#
 | 
			
		||||
#   AX_REQUIRE_DEFINED(MACRO)
 | 
			
		||||
#
 | 
			
		||||
# DESCRIPTION
 | 
			
		||||
#
 | 
			
		||||
#   AX_REQUIRE_DEFINED is a simple helper for making sure other macros have
 | 
			
		||||
#   been defined and thus are available for use.  This avoids random issues
 | 
			
		||||
#   where a macro isn't expanded.  Instead the configure script emits a
 | 
			
		||||
#   non-fatal:
 | 
			
		||||
#
 | 
			
		||||
#     ./configure: line 1673: AX_CFLAGS_WARN_ALL: command not found
 | 
			
		||||
#
 | 
			
		||||
#   It's like AC_REQUIRE except it doesn't expand the required macro.
 | 
			
		||||
#
 | 
			
		||||
#   Here's an example:
 | 
			
		||||
#
 | 
			
		||||
#     AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG])
 | 
			
		||||
#
 | 
			
		||||
# LICENSE
 | 
			
		||||
#
 | 
			
		||||
#   Copyright (c) 2014 Mike Frysinger <vapier@gentoo.org>
 | 
			
		||||
#
 | 
			
		||||
#   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.
 | 
			
		||||
 | 
			
		||||
#serial 1
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([AX_REQUIRE_DEFINED], [dnl
 | 
			
		||||
  m4_ifndef([$1], [m4_fatal([macro ]$1[ is not defined; is a m4 file missing?])])
 | 
			
		||||
])dnl AX_REQUIRE_DEFINED
 | 
			
		||||
							
								
								
									
										130
									
								
								m4/ax_sanitizers.m4
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										130
									
								
								m4/ax_sanitizers.m4
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,130 @@
 | 
			
		|||
# ===========================================================================
 | 
			
		||||
#      http://www.gnu.org/software/autoconf-archive/ax_sanitizers.html
 | 
			
		||||
# ===========================================================================
 | 
			
		||||
#
 | 
			
		||||
# SYNOPSIS
 | 
			
		||||
#
 | 
			
		||||
#   AX_SANITIZERS([SANITIZERS], [ENABLED-BY-DEFAULT], [ACTION-SUCCESS])
 | 
			
		||||
#
 | 
			
		||||
# DESCRIPTION
 | 
			
		||||
#
 | 
			
		||||
#   Offers users to enable one or more sanitizers (see
 | 
			
		||||
#   https://github.com/google/sanitizers) with the corresponding
 | 
			
		||||
#   --enable-<sanitizer>-sanitizer option.
 | 
			
		||||
#
 | 
			
		||||
#   SANITIZERS is a whitespace-separated list of sanitizers to offer via
 | 
			
		||||
#   --enable-<sanitizer>-sanitizer options, e.g. "address memory" for the
 | 
			
		||||
#   address sanitizer and the memory sanitizer. If SANITIZERS is not specified,
 | 
			
		||||
#   all known sanitizers to AX_SANITIZERS will be offered, which at the time of
 | 
			
		||||
#   writing are "address memory undefined".
 | 
			
		||||
#   NOTE that SANITIZERS is expanded at autoconf time, not at configure time,
 | 
			
		||||
#   i.e. you cannot use shell variables in SANITIZERS.
 | 
			
		||||
#
 | 
			
		||||
#   ENABLED-BY-DEFAULT is a whitespace-separated list of sanitizers which
 | 
			
		||||
#   should be enabled by default, e.g. "memory undefined". Note that not all
 | 
			
		||||
#   sanitizers can be combined, e.g. memory sanitizer cannot be enabled when
 | 
			
		||||
#   address sanitizer is already enabled.
 | 
			
		||||
#   Set ENABLED-BY-DEFAULT to a single whitespace in order to disable all
 | 
			
		||||
#   sanitizers by default.
 | 
			
		||||
#   ENABLED-BY-DEFAULT is expanded at configure time, so you can use shell
 | 
			
		||||
#   variables.
 | 
			
		||||
#
 | 
			
		||||
#   ACTION-SUCCESS allows to specify shell commands to execute on success, i.e.
 | 
			
		||||
#   when one of the sanitizers was successfully enabled. This is a good place
 | 
			
		||||
#   to call AC_DEFINE for any precompiler constants you might need to make your
 | 
			
		||||
#   code play nice with sanitizers.
 | 
			
		||||
#
 | 
			
		||||
#   The variable ax_enabled_sanitizers contains a whitespace-separated list of
 | 
			
		||||
#   all enabled sanitizers, so that you can print them at the end of configure,
 | 
			
		||||
#   if you wish.
 | 
			
		||||
#
 | 
			
		||||
#   The additional --enable-sanitizers option allows users to enable/disable
 | 
			
		||||
#   all sanitizers, effectively overriding ENABLED-BY-DEFAULT.
 | 
			
		||||
#
 | 
			
		||||
# EXAMPLES
 | 
			
		||||
#
 | 
			
		||||
#   AX_SANITIZERS([address])
 | 
			
		||||
#     dnl offer users to enable address sanitizer via --enable-address-sanitizer
 | 
			
		||||
#
 | 
			
		||||
#   is_debug_build=…
 | 
			
		||||
#   if test "x$is_debug_build" = "xyes"; then
 | 
			
		||||
#     default_sanitizers="address memory"
 | 
			
		||||
#   else
 | 
			
		||||
#     default_sanitizers=
 | 
			
		||||
#   fi
 | 
			
		||||
#   AX_SANITIZERS([address memory], [$default_sanitizers])
 | 
			
		||||
#     dnl enable address sanitizer and memory sanitizer by default for debug
 | 
			
		||||
#     dnl builds, e.g. when building from git instead of a dist tarball.
 | 
			
		||||
#
 | 
			
		||||
#   AX_SANITIZERS(, , [
 | 
			
		||||
#     AC_DEFINE([SANITIZERS_ENABLED],
 | 
			
		||||
#               [],
 | 
			
		||||
#               [At least one sanitizer was enabled])])
 | 
			
		||||
#     dnl enable all sanitizers known to AX_SANITIZERS by default and set the
 | 
			
		||||
#     dnl SANITIZERS_ENABLED precompiler constant.
 | 
			
		||||
#
 | 
			
		||||
#   AX_SANITIZERS(, [ ])
 | 
			
		||||
#     dnl provide all sanitizers, but enable none by default.
 | 
			
		||||
#
 | 
			
		||||
# LICENSE
 | 
			
		||||
#
 | 
			
		||||
#   Copyright (c) 2016 Michael Stapelberg <michael@i3wm.org>
 | 
			
		||||
#
 | 
			
		||||
#   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.
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([AX_SANITIZERS],
 | 
			
		||||
[AX_REQUIRE_DEFINED([AX_CHECK_COMPILE_FLAG])
 | 
			
		||||
AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG])
 | 
			
		||||
AX_REQUIRE_DEFINED([AX_APPEND_FLAG])
 | 
			
		||||
AC_ARG_ENABLE(sanitizers,
 | 
			
		||||
  AS_HELP_STRING(
 | 
			
		||||
    [--enable-sanitizers],
 | 
			
		||||
    [enable all known sanitizers]),
 | 
			
		||||
  [ax_sanitizers_default=$enableval],
 | 
			
		||||
  [ax_sanitizers_default=])
 | 
			
		||||
ax_enabled_sanitizers=
 | 
			
		||||
m4_foreach_w([mysan], m4_default($1, [address memory undefined]), [
 | 
			
		||||
  dnl If ax_sanitizers_default is unset, i.e. the user neither explicitly
 | 
			
		||||
  dnl enabled nor explicitly disabled all sanitizers, we get the default value
 | 
			
		||||
  dnl for this sanitizer based on whether it is listed in ENABLED-BY-DEFAULT.
 | 
			
		||||
  AS_IF([test "x$ax_sanitizers_default" = "x"], [dnl
 | 
			
		||||
          ax_sanitizer_default=
 | 
			
		||||
          for mycheck in m4_default([$2], [address memory undefined]); do
 | 
			
		||||
            AS_IF([test "x$mycheck" = "x[]mysan"], [ax_sanitizer_default=yes])
 | 
			
		||||
          done
 | 
			
		||||
          AS_IF([test "x$ax_sanitizer_default" = "x"], [ax_sanitizer_default=no])
 | 
			
		||||
        ],
 | 
			
		||||
        [ax_sanitizer_default=$ax_sanitizers_default])
 | 
			
		||||
  AC_ARG_ENABLE(mysan[]-sanitizer,
 | 
			
		||||
    AS_HELP_STRING(
 | 
			
		||||
      [--enable-[]mysan[]-sanitizer],
 | 
			
		||||
      [enable -fsanitize=mysan]),
 | 
			
		||||
    [ax_sanitizer_enabled=$enableval],
 | 
			
		||||
    [ax_sanitizer_enabled=$ax_sanitizer_default])
 | 
			
		||||
 | 
			
		||||
AS_IF([test "x$ax_sanitizer_enabled" = "xyes"], [
 | 
			
		||||
dnl Not using AX_APPEND_COMPILE_FLAGS and AX_APPEND_LINK_FLAGS because they
 | 
			
		||||
dnl lack the ability to specify ACTION-SUCCESS.
 | 
			
		||||
  AX_CHECK_COMPILE_FLAG([-fsanitize=[]mysan], [
 | 
			
		||||
    AX_CHECK_LINK_FLAG([-fsanitize=[]mysan], [
 | 
			
		||||
      AX_APPEND_FLAG([-fsanitize=[]mysan], [])
 | 
			
		||||
dnl If and only if libtool is being used, LDFLAGS needs to contain -Wc,-fsanitize=….
 | 
			
		||||
dnl See e.g. https://sources.debian.net/src/systemd/231-7/configure.ac/?hl=128#L135
 | 
			
		||||
dnl TODO: how can recognize that situation and add -Wc,?
 | 
			
		||||
      AX_APPEND_FLAG([-fsanitize=[]mysan], [LDFLAGS])
 | 
			
		||||
dnl TODO: add -fPIE -pie for memory
 | 
			
		||||
      # -fno-omit-frame-pointer results in nicer stack traces in error
 | 
			
		||||
      # messages, see http://clang.llvm.org/docs/AddressSanitizer.html#usage
 | 
			
		||||
      AX_CHECK_COMPILE_FLAG([-fno-omit-frame-pointer], [
 | 
			
		||||
        AX_APPEND_FLAG([-fno-omit-frame-pointer], [])])
 | 
			
		||||
dnl TODO: at least for clang, we should specify exactly -O1, not -O2 or -O0, so that performance is reasonable but stacktraces are not tampered with (due to inlining), see http://clang.llvm.org/docs/AddressSanitizer.html#usage
 | 
			
		||||
      m4_default([$3], :)
 | 
			
		||||
      ax_enabled_sanitizers="[]mysan $ax_enabled_sanitizers"
 | 
			
		||||
    ])
 | 
			
		||||
  ])
 | 
			
		||||
])
 | 
			
		||||
])dnl
 | 
			
		||||
])dnl AX_SANITIZERS
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue