This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.

It was created by cthelper-test configure 0.0.1, which was
generated by GNU Autoconf 2.69.  Invocation command line was

  $ ./configure 

## --------- ##
## Platform. ##
## --------- ##

hostname = soleta
uname -m = x86_64
uname -r = 3.9.0-rc8+
uname -s = Linux
uname -v = #4 SMP Mon Apr 29 20:10:00 CEST 2013

/usr/bin/uname -p = unknown
/bin/uname -X     = unknown

/bin/arch              = unknown
/usr/bin/arch -k       = unknown
/usr/convex/getsysinfo = unknown
/usr/bin/hostinfo      = unknown
/bin/machine           = unknown
/usr/bin/oslevel       = unknown
/bin/universe          = unknown

PATH: /home/pablo/bin
PATH: /usr/local/bin
PATH: /usr/bin
PATH: /bin
PATH: /usr/local/games
PATH: /usr/games
PATH: /home/pablo/bin
PATH: /u01/app/oracle/product/11.2.0/xe/bin
PATH: /home/pablo/devel/scm/git-arm/arm-2011.03/bin
PATH: /home/pablo/bin
PATH: /u01/app/oracle/product/11.2.0/xe/bin
PATH: /home/pablo/devel/scm/git-arm/arm-2011.03/bin


## ----------- ##
## Core tests. ##
## ----------- ##


## ---------------- ##
## Cache variables. ##
## ---------------- ##

ac_cv_env_CC_set=
ac_cv_env_CC_value=
ac_cv_env_CFLAGS_set=
ac_cv_env_CFLAGS_value=
ac_cv_env_CPPFLAGS_set=
ac_cv_env_CPPFLAGS_value=
ac_cv_env_CPP_set=
ac_cv_env_CPP_value=
ac_cv_env_LDFLAGS_set=
ac_cv_env_LDFLAGS_value=
ac_cv_env_LIBNETFILTER_CONNTRACK_CFLAGS_set=
ac_cv_env_LIBNETFILTER_CONNTRACK_CFLAGS_value=
ac_cv_env_LIBNETFILTER_CONNTRACK_LIBS_set=
ac_cv_env_LIBNETFILTER_CONNTRACK_LIBS_value=
ac_cv_env_LIBNETFILTER_QUEUE_CFLAGS_set=
ac_cv_env_LIBNETFILTER_QUEUE_CFLAGS_value=
ac_cv_env_LIBNETFILTER_QUEUE_LIBS_set=
ac_cv_env_LIBNETFILTER_QUEUE_LIBS_value=
ac_cv_env_LIBS_set=
ac_cv_env_LIBS_value=
ac_cv_env_PKG_CONFIG_LIBDIR_set=
ac_cv_env_PKG_CONFIG_LIBDIR_value=
ac_cv_env_PKG_CONFIG_PATH_set=
ac_cv_env_PKG_CONFIG_PATH_value=
ac_cv_env_PKG_CONFIG_set=
ac_cv_env_PKG_CONFIG_value=
ac_cv_env_YACC_set=
ac_cv_env_YACC_value=
ac_cv_env_YFLAGS_set=
ac_cv_env_YFLAGS_value=
ac_cv_env_build_alias_set=
ac_cv_env_build_alias_value=
ac_cv_env_host_alias_set=
ac_cv_env_host_alias_value=
ac_cv_env_target_alias_set=
ac_cv_env_target_alias_value=

## ----------------- ##
## Output variables. ##
## ----------------- ##

ACLOCAL=''
AMDEPBACKSLASH=''
AMDEP_FALSE=''
AMDEP_TRUE=''
AMTAR=''
AM_BACKSLASH=''
AM_DEFAULT_V=''
AM_DEFAULT_VERBOSITY=''
AM_V=''
AR=''
AUTOCONF=''
AUTOHEADER=''
AUTOMAKE=''
AWK=''
CC=''
CCDEPMODE=''
CFLAGS=''
CPP=''
CPPFLAGS=''
CYGPATH_W=''
DEFS=''
DEPDIR=''
DLLTOOL=''
DSYMUTIL=''
DUMPBIN=''
ECHO_C=''
ECHO_N='-n'
ECHO_T=''
EGREP=''
EXEEXT=''
FGREP=''
GREP=''
INSTALL_DATA=''
INSTALL_PROGRAM=''
INSTALL_SCRIPT=''
INSTALL_STRIP_PROGRAM=''
LD=''
LDFLAGS=''
LEX=''
LEXLIB=''
LEX_OUTPUT_ROOT=''
LIBNETFILTER_CONNTRACK_CFLAGS=''
LIBNETFILTER_CONNTRACK_LIBS=''
LIBNETFILTER_QUEUE_CFLAGS=''
LIBNETFILTER_QUEUE_LIBS=''
LIBOBJS=''
LIBS=''
LIBTOOL=''
LIPO=''
LN_S=''
LTLIBOBJS=''
MAKEINFO=''
MANIFEST_TOOL=''
MKDIR_P=''
NM=''
NMEDIT=''
OBJDUMP=''
OBJEXT=''
OTOOL64=''
OTOOL=''
PACKAGE=''
PACKAGE_BUGREPORT='pablo@netfilter.org'
PACKAGE_NAME='cthelper-test'
PACKAGE_STRING='cthelper-test 0.0.1'
PACKAGE_TARNAME='cthelper-test'
PACKAGE_URL=''
PACKAGE_VERSION='0.0.1'
PATH_SEPARATOR=':'
PKG_CONFIG=''
PKG_CONFIG_LIBDIR=''
PKG_CONFIG_PATH=''
RANLIB=''
SED=''
SET_MAKE=''
SHELL='/bin/bash'
STRIP=''
VERSION=''
YACC=''
YFLAGS=''
ac_ct_AR=''
ac_ct_CC=''
ac_ct_DUMPBIN=''
am__EXEEXT_FALSE=''
am__EXEEXT_TRUE=''
am__fastdepCC_FALSE=''
am__fastdepCC_TRUE=''
am__include=''
am__isrc=''
am__leading_dot=''
am__nodep=''
am__quote=''
am__tar=''
am__untar=''
bindir='${exec_prefix}/bin'
build=''
build_alias=''
build_cpu=''
build_os=''
build_vendor=''
datadir='${datarootdir}'
datarootdir='${prefix}/share'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
dvidir='${docdir}'
exec_prefix='NONE'
host=''
host_alias=''
host_cpu=''
host_os=''
host_vendor=''
htmldir='${docdir}'
includedir='${prefix}/include'
infodir='${datarootdir}/info'
install_sh=''
libdir='${exec_prefix}/lib'
libdl_LIBS=''
libexecdir='${exec_prefix}/libexec'
localedir='${datarootdir}/locale'
localstatedir='${prefix}/var'
mandir='${datarootdir}/man'
mkdir_p=''
oldincludedir='/usr/include'
pdfdir='${docdir}'
prefix='NONE'
program_transform_name='s,x,x,'
psdir='${docdir}'
sbindir='${exec_prefix}/sbin'
sharedstatedir='${prefix}/com'
sysconfdir='${prefix}/etc'
target_alias=''

## ----------- ##
## confdefs.h. ##
## ----------- ##

/* confdefs.h */
#define PACKAGE_NAME "cthelper-test"
#define PACKAGE_TARNAME "cthelper-test"
#define PACKAGE_VERSION "0.0.1"
#define PACKAGE_STRING "cthelper-test 0.0.1"
#define PACKAGE_BUGREPORT "pablo@netfilter.org"
#define PACKAGE_URL ""

configure: caught signal 2
configure: exit 1

## ---------------------- ##
## Running config.status. ##
## ---------------------- ##

This file was extended by cthelper-test config.status 0.0.1, which was
generated by GNU Autoconf 2.69.  Invocation command line was

  CONFIG_FILES    = 
  CONFIG_HEADERS  = 
  CONFIG_LINKS    = 
  CONFIG_COMMANDS = 
  $ ./config.status Makefile depfiles

on soleta

config.status:1016: creating Makefile
config.status:1188: executing depfiles commands

## ---------------------- ##
## Running config.status. ##
## ---------------------- ##

This file was extended by cthelper-test config.status 0.0.1, which was
generated by GNU Autoconf 2.69.  Invocation command line was

  CONFIG_FILES    = 
  CONFIG_HEADERS  = 
  CONFIG_LINKS    = 
  CONFIG_COMMANDS = 
  $ ./config.status Makefile depfiles

on soleta

config.status:1016: creating Makefile
config.status:1188: executing depfiles commands

## ---------------------- ##
## Running config.status. ##
## ---------------------- ##

This file was extended by cthelper-test config.status 0.0.1, which was
generated by GNU Autoconf 2.69.  Invocation command line was

  CONFIG_FILES    = 
  CONFIG_HEADERS  = 
  CONFIG_LINKS    = 
  CONFIG_COMMANDS = 
  $ ./config.status Makefile depfiles

on soleta

config.status:1016: creating Makefile
config.status:1188: executing depfiles commands
