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

It was created by PCRE configure 8.21, which was
generated by GNU Autoconf 2.68.  Invocation command line was

  $ ./configure 

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

hostname = tmatthews-pc
uname -m = x86_64
uname -r = 3.11.4-201.fc19.x86_64
uname -s = Linux
uname -v = #1 SMP Thu Oct 10 14:11:18 UTC 2013

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

/bin/arch              = x86_64
/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/tristan/src/cov-analysis-linux64-6.6.1/bin
PATH: /home/tristan/src/android-ndk-r9
PATH: /home/tristan/src/android-sdk-linux/platform-tools
PATH: /home/tristan/src/android-sdk-linux
PATH: /home/tristan/src/android-sdk-linux/tools
PATH: /opt/bin
PATH: /home/tristan/src/cov-analysis-linux64-6.6.1/bin
PATH: /home/tristan/src/android-ndk-r9
PATH: /home/tristan/src/android-sdk-linux/platform-tools
PATH: /home/tristan/src/android-sdk-linux
PATH: /home/tristan/src/android-sdk-linux/tools
PATH: /opt/bin
PATH: /usr/lib64/qt-3.3/bin
PATH: /usr/lib64/ccache
PATH: /usr/local/bin
PATH: /bin
PATH: /usr/bin
PATH: /usr/local/sbin
PATH: /usr/sbin
PATH: /home/tristan/bin
PATH: /home/tristan/.local/bin
PATH: /home/tristan/bin
PATH: /home/tristan/bin


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

configure:2705: checking for a BSD-compatible install
configure:2773: result: /bin/install -c
configure:2784: checking whether build environment is sane
configure:2834: result: yes
configure:2975: checking for a thread-safe mkdir -p
configure:3014: result: /bin/mkdir -p
configure:3027: checking for gawk
configure:3043: found /bin/gawk
configure:3054: result: gawk
configure:3065: checking whether make sets $(MAKE)
configure:3087: result: yes
configure:3234: checking for gcc
configure:3250: found /usr/lib64/ccache/gcc
configure:3261: result: gcc
configure:3490: checking for C compiler version
configure:3499: gcc --version >&5
gcc (GCC) 4.8.1 20130603 (Red Hat 4.8.1-1)
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

configure:3510: $? = 0
configure:3499: gcc -v >&5
Using built-in specs.
COLLECT_GCC=/bin/gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.1/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-isl=/builddir/build/BUILD/gcc-4.8.1-20130603/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.1-20130603/obj-x86_64-redhat-linux/cloog-install --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.8.1 20130603 (Red Hat 4.8.1-1) (GCC) 
configure:3510: $? = 0
configure:3499: gcc -V >&5
gcc: error: unrecognized command line option '-V'
gcc: fatal error: no input files
compilation terminated.
configure:3510: $? = 4
configure:3499: gcc -qversion >&5
gcc: error: unrecognized command line option '-qversion'
gcc: fatal error: no input files
compilation terminated.
configure:3510: $? = 4
configure:3530: checking whether the C compiler works
configure:3552: gcc    conftest.c  >&5
configure:3556: $? = 0
configure:3604: result: yes
configure:3607: checking for C compiler default output file name
configure:3609: result: a.out
configure:3615: checking for suffix of executables
configure:3622: gcc -o conftest    conftest.c  >&5
configure:3626: $? = 0
configure:3648: result: 
configure:3670: checking whether we are cross compiling
configure:3678: gcc -o conftest    conftest.c  >&5
configure:3682: $? = 0
configure:3689: ./conftest
configure:3693: $? = 0
configure:3708: result: no
configure:3713: checking for suffix of object files
configure:3735: gcc -c   conftest.c >&5
configure:3739: $? = 0
configure:3760: result: o
configure:3764: checking whether we are using the GNU C compiler
configure:3783: gcc -c   conftest.c >&5
configure:3783: $? = 0
configure:3792: result: yes
configure:3801: checking whether gcc accepts -g
configure:3821: gcc -c -g  conftest.c >&5
configure:3821: $? = 0
configure:3862: result: yes
configure:3879: checking for gcc option to accept ISO C89
configure:3943: gcc  -c -g -O2  conftest.c >&5
configure:3943: $? = 0
configure:3956: result: none needed
configure:3987: checking for style of include used by make
configure:4015: result: GNU
configure:4040: checking dependency style of gcc
configure:4150: result: gcc3
configure:4223: checking for g++
configure:4239: found /usr/lib64/ccache/g++
configure:4250: result: g++
configure:4277: checking for C++ compiler version
configure:4286: g++ --version >&5
g++ (GCC) 4.8.1 20130603 (Red Hat 4.8.1-1)
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

configure:4297: $? = 0
configure:4286: g++ -v >&5
Using built-in specs.
COLLECT_GCC=/bin/g++
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.1/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-isl=/builddir/build/BUILD/gcc-4.8.1-20130603/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.1-20130603/obj-x86_64-redhat-linux/cloog-install --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.8.1 20130603 (Red Hat 4.8.1-1) (GCC) 
configure:4297: $? = 0
configure:4286: g++ -V >&5
g++: error: unrecognized command line option '-V'
g++: fatal error: no input files
compilation terminated.
configure:4297: $? = 4
configure:4286: g++ -qversion >&5
g++: error: unrecognized command line option '-qversion'
g++: fatal error: no input files
compilation terminated.
configure:4297: $? = 4
configure:4301: checking whether we are using the GNU C++ compiler
configure:4320: g++ -c   conftest.cpp >&5
configure:4320: $? = 0
configure:4329: result: yes
configure:4338: checking whether g++ accepts -g
configure:4358: g++ -c -g  conftest.cpp >&5
configure:4358: $? = 0
configure:4399: result: yes
configure:4424: checking dependency style of g++
configure:4534: result: gcc3
configure:4592: g++ -c -O2  conftest.cpp >&5
configure:4592: $? = 0
configure:4612: checking how to run the C preprocessor
configure:4643: gcc -E  conftest.c
configure:4643: $? = 0
configure:4657: gcc -E  conftest.c
conftest.c:11:28: fatal error: ac_nonexistent.h: No such file or directory
 #include <ac_nonexistent.h>
                            ^
compilation terminated.
configure:4657: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "PCRE"
| #define PACKAGE_TARNAME "pcre"
| #define PACKAGE_VERSION "8.21"
| #define PACKAGE_STRING "PCRE 8.21"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define PACKAGE "pcre"
| #define VERSION "8.21"
| /* end confdefs.h.  */
| #include <ac_nonexistent.h>
configure:4682: result: gcc -E
configure:4702: gcc -E  conftest.c
configure:4702: $? = 0
configure:4716: gcc -E  conftest.c
conftest.c:11:28: fatal error: ac_nonexistent.h: No such file or directory
 #include <ac_nonexistent.h>
                            ^
compilation terminated.
configure:4716: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "PCRE"
| #define PACKAGE_TARNAME "pcre"
| #define PACKAGE_VERSION "8.21"
| #define PACKAGE_STRING "PCRE 8.21"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define PACKAGE "pcre"
| #define VERSION "8.21"
| /* end confdefs.h.  */
| #include <ac_nonexistent.h>
configure:4745: checking for grep that handles long lines and -e
configure:4803: result: /bin/grep
configure:4808: checking for egrep
configure:4870: result: /bin/grep -E
configure:4875: checking for ANSI C header files
configure:4895: gcc -c -O2  conftest.c >&5
configure:4895: $? = 0
configure:4968: gcc -o conftest -O2   conftest.c  >&5
configure:4968: $? = 0
configure:4968: ./conftest
configure:4968: $? = 0
configure:4979: result: yes
configure:4992: checking for sys/types.h
configure:4992: gcc -c -O2  conftest.c >&5
configure:4992: $? = 0
configure:4992: result: yes
configure:4992: checking for sys/stat.h
configure:4992: gcc -c -O2  conftest.c >&5
configure:4992: $? = 0
configure:4992: result: yes
configure:4992: checking for stdlib.h
configure:4992: gcc -c -O2  conftest.c >&5
configure:4992: $? = 0
configure:4992: result: yes
configure:4992: checking for string.h
configure:4992: gcc -c -O2  conftest.c >&5
configure:4992: $? = 0
configure:4992: result: yes
configure:4992: checking for memory.h
configure:4992: gcc -c -O2  conftest.c >&5
configure:4992: $? = 0
configure:4992: result: yes
configure:4992: checking for strings.h
configure:4992: gcc -c -O2  conftest.c >&5
configure:4992: $? = 0
configure:4992: result: yes
configure:4992: checking for inttypes.h
configure:4992: gcc -c -O2  conftest.c >&5
configure:4992: $? = 0
configure:4992: result: yes
configure:4992: checking for stdint.h
configure:4992: gcc -c -O2  conftest.c >&5
configure:4992: $? = 0
configure:4992: result: yes
configure:4992: checking for unistd.h
configure:4992: gcc -c -O2  conftest.c >&5
configure:4992: $? = 0
configure:4992: result: yes
configure:5004: checking for int64_t
configure:5004: gcc -c -O2  conftest.c >&5
configure:5004: $? = 0
configure:5004: gcc -c -O2  conftest.c >&5
conftest.c: In function 'main':
conftest.c:59:53: warning: integer overflow in expression [-Woverflow]
    < (int64_t) (((((int64_t) 1 << N) << N) - 1) * 2 + 2))];
                                                     ^
conftest.c:58:12: error: storage size of 'test_array' isn't constant
 static int test_array [1 - 2 * !((int64_t) (((((int64_t) 1 << N) << N) - 1) * 2 + 1)
            ^
configure:5004: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "PCRE"
| #define PACKAGE_TARNAME "pcre"
| #define PACKAGE_VERSION "8.21"
| #define PACKAGE_STRING "PCRE 8.21"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define PACKAGE "pcre"
| #define VERSION "8.21"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| /* end confdefs.h.  */
| #include <stdio.h>
| #ifdef HAVE_SYS_TYPES_H
| # include <sys/types.h>
| #endif
| #ifdef HAVE_SYS_STAT_H
| # include <sys/stat.h>
| #endif
| #ifdef STDC_HEADERS
| # include <stdlib.h>
| # include <stddef.h>
| #else
| # ifdef HAVE_STDLIB_H
| #  include <stdlib.h>
| # endif
| #endif
| #ifdef HAVE_STRING_H
| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
| #  include <memory.h>
| # endif
| # include <string.h>
| #endif
| #ifdef HAVE_STRINGS_H
| # include <strings.h>
| #endif
| #ifdef HAVE_INTTYPES_H
| # include <inttypes.h>
| #endif
| #ifdef HAVE_STDINT_H
| # include <stdint.h>
| #endif
| #ifdef HAVE_UNISTD_H
| # include <unistd.h>
| #endif
| 	        enum { N = 64 / 2 - 1 };
| int
| main ()
| {
| static int test_array [1 - 2 * !((int64_t) (((((int64_t) 1 << N) << N) - 1) * 2 + 1)
| 		 < (int64_t) (((((int64_t) 1 << N) << N) - 1) * 2 + 2))];
| test_array [0] = 0
| 
|   ;
|   return 0;
| }
configure:5004: result: yes
configure:5021: checking build system type
configure:5035: result: x86_64-unknown-linux-gnu
configure:5055: checking host system type
configure:5068: result: x86_64-unknown-linux-gnu
configure:5437: checking how to print strings
configure:5464: result: printf
configure:5485: checking for a sed that does not truncate output
configure:5549: result: /bin/sed
configure:5567: checking for fgrep
configure:5629: result: /bin/grep -F
configure:5664: checking for ld used by gcc
configure:5731: result: /bin/ld
configure:5738: checking if the linker (/bin/ld) is GNU ld
configure:5753: result: yes
configure:5765: checking for BSD- or MS-compatible name lister (nm)
configure:5814: result: /bin/nm -B
configure:5944: checking the name lister (/bin/nm -B) interface
configure:5951: gcc -c -O2  conftest.c >&5
configure:5954: /bin/nm -B "conftest.o"
configure:5957: output
0000000000000000 B some_variable
configure:5964: result: BSD nm
configure:5967: checking whether ln -s works
configure:5971: result: yes
configure:5979: checking the maximum length of command line arguments
configure:6104: result: 1572864
configure:6121: checking whether the shell understands some XSI constructs
configure:6131: result: yes
configure:6135: checking whether the shell understands "+="
configure:6141: result: yes
configure:6176: checking how to convert x86_64-unknown-linux-gnu file names to x86_64-unknown-linux-gnu format
configure:6216: result: func_convert_file_noop
configure:6223: checking how to convert x86_64-unknown-linux-gnu file names to toolchain format
configure:6243: result: func_convert_file_noop
configure:6250: checking for /bin/ld option to reload object files
configure:6257: result: -r
configure:6331: checking for objdump
configure:6358: result: objdump
configure:6387: checking how to recognize dependent libraries
configure:6589: result: pass_all
configure:6674: checking for dlltool
configure:6701: result: dlltool
configure:6731: checking how to associate runtime and link libraries
configure:6758: result: printf %s\n
configure:6818: checking for ar
configure:6834: found /bin/ar
configure:6845: result: ar
configure:6882: checking for archiver @FILE support
configure:6899: gcc -c -O2  conftest.c >&5
configure:6899: $? = 0
configure:6902: ar cru libconftest.a @conftest.lst >&5
configure:6905: $? = 0
configure:6910: ar cru libconftest.a @conftest.lst >&5
ar: conftest.o: No such file or directory
configure:6913: $? = 1
configure:6925: result: @
configure:6983: checking for strip
configure:6999: found /bin/strip
configure:7010: result: strip
configure:7082: checking for ranlib
configure:7098: found /bin/ranlib
configure:7109: result: ranlib
configure:7211: checking command to parse /bin/nm -B output from gcc object
configure:7330: gcc -c -O2  conftest.c >&5
configure:7333: $? = 0
configure:7337: /bin/nm -B conftest.o \| sed -n -e 's/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' | sed '/ __gnu_lto/d' \> conftest.nm
configure:7340: $? = 0
configure:7406: gcc -o conftest -O2   conftest.c conftstm.o >&5
configure:7409: $? = 0
configure:7447: result: ok
configure:7484: checking for sysroot
configure:7514: result: no
configure:7591: gcc -c -O2  conftest.c >&5
configure:7594: $? = 0
configure:7757: checking for mt
configure:7787: result: no
configure:7807: checking if : is a manifest tool
configure:7813: : '-?'
configure:7821: result: no
configure:8450: checking for dlfcn.h
configure:8450: gcc -c -O2  conftest.c >&5
configure:8450: $? = 0
configure:8450: result: yes
configure:8645: checking for objdir
configure:8660: result: .libs
configure:8927: checking if gcc supports -fno-rtti -fno-exceptions
configure:8945: gcc -c -O2  -fno-rtti -fno-exceptions conftest.c >&5
cc1: warning: command line option '-fno-rtti' is valid for C++/ObjC++ but not for C [enabled by default]
cc1: warning: command line option '-fno-rtti' is valid for C++/ObjC++ but not for C [enabled by default]
configure:8949: $? = 0
configure:8962: result: no
configure:9272: checking for gcc option to produce PIC
configure:9279: result: -fPIC -DPIC
configure:9287: checking if gcc PIC flag -fPIC -DPIC works
configure:9305: gcc -c -O2  -fPIC -DPIC -DPIC conftest.c >&5
configure:9309: $? = 0
configure:9322: result: yes
configure:9351: checking if gcc static flag -static works
configure:9379: result: yes
configure:9394: checking if gcc supports -c -o file.o
configure:9415: gcc -c -O2  -o out/conftest2.o conftest.c >&5
configure:9419: $? = 0
configure:9441: result: yes
configure:9449: checking if gcc supports -c -o file.o
configure:9496: result: yes
configure:9529: checking whether the gcc linker (/bin/ld -m elf_x86_64) supports shared libraries
configure:10687: result: yes
configure:10724: checking whether -lc should be explicitly linked in
configure:10732: gcc -c -O2  conftest.c >&5
configure:10735: $? = 0
configure:10750: gcc -shared  -fPIC -DPIC conftest.o  -v -Wl,-soname -Wl,conftest -o conftest 2\>\&1 \| /bin/grep  -lc  \>/dev/null 2\>\&1
configure:10753: $? = 0
configure:10767: result: no
configure:10932: checking dynamic linker characteristics
configure:11459: gcc -o conftest -O2   -Wl,-rpath -Wl,/foo conftest.c  >&5
configure:11459: $? = 0
configure:11681: result: GNU/Linux ld.so
configure:11788: checking how to hardcode library paths into programs
configure:11813: result: immediate
configure:12353: checking whether stripping libraries is possible
configure:12358: result: yes
configure:12393: checking if libtool supports shared libraries
configure:12395: result: yes
configure:12398: checking whether to build shared libraries
configure:12419: result: yes
configure:12422: checking whether to build static libraries
configure:12426: result: yes
configure:12449: checking how to run the C++ preprocessor
configure:12476: g++ -E  conftest.cpp
configure:12476: $? = 0
configure:12490: g++ -E  conftest.cpp
conftest.cpp:23:28: fatal error: ac_nonexistent.h: No such file or directory
 #include <ac_nonexistent.h>
                            ^
compilation terminated.
configure:12490: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "PCRE"
| #define PACKAGE_TARNAME "pcre"
| #define PACKAGE_VERSION "8.21"
| #define PACKAGE_STRING "PCRE 8.21"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define PACKAGE "pcre"
| #define VERSION "8.21"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| /* end confdefs.h.  */
| #include <ac_nonexistent.h>
configure:12515: result: g++ -E
configure:12535: g++ -E  conftest.cpp
configure:12535: $? = 0
configure:12549: g++ -E  conftest.cpp
conftest.cpp:23:28: fatal error: ac_nonexistent.h: No such file or directory
 #include <ac_nonexistent.h>
                            ^
compilation terminated.
configure:12549: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "PCRE"
| #define PACKAGE_TARNAME "pcre"
| #define PACKAGE_VERSION "8.21"
| #define PACKAGE_STRING "PCRE 8.21"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define PACKAGE "pcre"
| #define VERSION "8.21"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| /* end confdefs.h.  */
| #include <ac_nonexistent.h>
configure:12719: checking for ld used by g++
configure:12786: result: /bin/ld -m elf_x86_64
configure:12793: checking if the linker (/bin/ld -m elf_x86_64) is GNU ld
configure:12808: result: yes
configure:12863: checking whether the g++ linker (/bin/ld -m elf_x86_64) supports shared libraries
configure:13867: result: yes
configure:13902: g++ -c -O2  conftest.cpp >&5
configure:13905: $? = 0
configure:14425: checking for g++ option to produce PIC
configure:14432: result: -fPIC -DPIC
configure:14440: checking if g++ PIC flag -fPIC -DPIC works
configure:14458: g++ -c -O2  -fPIC -DPIC -DPIC conftest.cpp >&5
configure:14462: $? = 0
configure:14475: result: yes
configure:14498: checking if g++ static flag -static works
configure:14526: result: no
configure:14538: checking if g++ supports -c -o file.o
configure:14559: g++ -c -O2  -o out/conftest2.o conftest.cpp >&5
configure:14563: $? = 0
configure:14585: result: yes
configure:14590: checking if g++ supports -c -o file.o
configure:14637: result: yes
configure:14667: checking whether the g++ linker (/bin/ld -m elf_x86_64) supports shared libraries
configure:14701: result: yes
configure:14844: checking dynamic linker characteristics
configure:15527: result: GNU/Linux ld.so
configure:15580: checking how to hardcode library paths into programs
configure:15605: result: immediate
configure:15664: checking whether ln -s works
configure:15668: result: yes
configure:15953: checking for ANSI C header files
configure:16057: result: yes
configure:16068: checking limits.h usability
configure:16068: gcc -c -O2  conftest.c >&5
configure:16068: $? = 0
configure:16068: result: yes
configure:16068: checking limits.h presence
configure:16068: gcc -E  conftest.c
configure:16068: $? = 0
configure:16068: result: yes
configure:16068: checking for limits.h
configure:16068: result: yes
configure:16068: checking for sys/types.h
configure:16068: result: yes
configure:16068: checking for sys/stat.h
configure:16068: result: yes
configure:16068: checking dirent.h usability
configure:16068: gcc -c -O2  conftest.c >&5
configure:16068: $? = 0
configure:16068: result: yes
configure:16068: checking dirent.h presence
configure:16068: gcc -E  conftest.c
configure:16068: $? = 0
configure:16068: result: yes
configure:16068: checking for dirent.h
configure:16068: result: yes
configure:16068: checking windows.h usability
configure:16068: gcc -c -O2  conftest.c >&5
conftest.c:61:21: fatal error: windows.h: No such file or directory
 #include <windows.h>
                     ^
compilation terminated.
configure:16068: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "PCRE"
| #define PACKAGE_TARNAME "pcre"
| #define PACKAGE_VERSION "8.21"
| #define PACKAGE_STRING "PCRE 8.21"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define PACKAGE "pcre"
| #define VERSION "8.21"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define STDC_HEADERS 1
| #define HAVE_LIMITS_H 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_DIRENT_H 1
| /* end confdefs.h.  */
| #include <stdio.h>
| #ifdef HAVE_SYS_TYPES_H
| # include <sys/types.h>
| #endif
| #ifdef HAVE_SYS_STAT_H
| # include <sys/stat.h>
| #endif
| #ifdef STDC_HEADERS
| # include <stdlib.h>
| # include <stddef.h>
| #else
| # ifdef HAVE_STDLIB_H
| #  include <stdlib.h>
| # endif
| #endif
| #ifdef HAVE_STRING_H
| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
| #  include <memory.h>
| # endif
| # include <string.h>
| #endif
| #ifdef HAVE_STRINGS_H
| # include <strings.h>
| #endif
| #ifdef HAVE_INTTYPES_H
| # include <inttypes.h>
| #endif
| #ifdef HAVE_STDINT_H
| # include <stdint.h>
| #endif
| #ifdef HAVE_UNISTD_H
| # include <unistd.h>
| #endif
| #include <windows.h>
configure:16068: result: no
configure:16068: checking windows.h presence
configure:16068: gcc -E  conftest.c
conftest.c:28:21: fatal error: windows.h: No such file or directory
 #include <windows.h>
                     ^
compilation terminated.
configure:16068: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "PCRE"
| #define PACKAGE_TARNAME "pcre"
| #define PACKAGE_VERSION "8.21"
| #define PACKAGE_STRING "PCRE 8.21"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define PACKAGE "pcre"
| #define VERSION "8.21"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define STDC_HEADERS 1
| #define HAVE_LIMITS_H 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_DIRENT_H 1
| /* end confdefs.h.  */
| #include <windows.h>
configure:16068: result: no
configure:16068: checking for windows.h
configure:16068: result: no
configure:16099: checking for alias support in the linker
configure:16118: g++ -o conftest -O2   -Wl,-alias,__ZN7pcrecpp2RE6no_argE,__ZN7pcrecpp6no_argE conftest.cpp  >&5
/bin/ld: unrecognized -a option `lias'
collect2: error: ld returned 1 exit status
configure:16118: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "PCRE"
| #define PACKAGE_TARNAME "pcre"
| #define PACKAGE_VERSION "8.21"
| #define PACKAGE_STRING "PCRE 8.21"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define PACKAGE "pcre"
| #define VERSION "8.21"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define STDC_HEADERS 1
| #define HAVE_LIMITS_H 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_DIRENT_H 1
| /* end confdefs.h.  */
| namespace pcrecpp {
|                                     class RE { static int no_arg; };
|                                     int RE::no_arg;
|                                   }
| int
| main ()
| {
| 
|   ;
|   return 0;
| }
configure:16124: result: no
configure:16099: checking for alias support in the linker
configure:16118: g++ -o conftest -O2   -Wl,-i__ZN7pcrecpp6no_argE:__ZN7pcrecpp2RE6no_argE conftest.cpp  >&5
/bin/ld: bad -rpath option
collect2: error: ld returned 1 exit status
configure:16118: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "PCRE"
| #define PACKAGE_TARNAME "pcre"
| #define PACKAGE_VERSION "8.21"
| #define PACKAGE_STRING "PCRE 8.21"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define PACKAGE "pcre"
| #define VERSION "8.21"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define STDC_HEADERS 1
| #define HAVE_LIMITS_H 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_DIRENT_H 1
| /* end confdefs.h.  */
| namespace pcrecpp {
|                                     class RE { static int no_arg; };
|                                     int RE::no_arg;
|                                   }
| int
| main ()
| {
| 
|   ;
|   return 0;
| }
configure:16124: result: no
configure:16138: checking string usability
configure:16138: g++ -c -O2  conftest.cpp >&5
configure:16138: $? = 0
configure:16138: result: yes
configure:16138: checking string presence
configure:16138: g++ -E  conftest.cpp
configure:16138: $? = 0
configure:16138: result: yes
configure:16138: checking for string
configure:16138: result: yes
configure:16152: checking bits/type_traits.h usability
configure:16152: g++ -c -O2  conftest.cpp >&5
conftest.cpp:62:30: fatal error: bits/type_traits.h: No such file or directory
 #include <bits/type_traits.h>
                              ^
compilation terminated.
configure:16152: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "PCRE"
| #define PACKAGE_TARNAME "pcre"
| #define PACKAGE_VERSION "8.21"
| #define PACKAGE_STRING "PCRE 8.21"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define PACKAGE "pcre"
| #define VERSION "8.21"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define STDC_HEADERS 1
| #define HAVE_LIMITS_H 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_DIRENT_H 1
| #define HAVE_STRING 1
| /* end confdefs.h.  */
| #include <stdio.h>
| #ifdef HAVE_SYS_TYPES_H
| # include <sys/types.h>
| #endif
| #ifdef HAVE_SYS_STAT_H
| # include <sys/stat.h>
| #endif
| #ifdef STDC_HEADERS
| # include <stdlib.h>
| # include <stddef.h>
| #else
| # ifdef HAVE_STDLIB_H
| #  include <stdlib.h>
| # endif
| #endif
| #ifdef HAVE_STRING_H
| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
| #  include <memory.h>
| # endif
| # include <string.h>
| #endif
| #ifdef HAVE_STRINGS_H
| # include <strings.h>
| #endif
| #ifdef HAVE_INTTYPES_H
| # include <inttypes.h>
| #endif
| #ifdef HAVE_STDINT_H
| # include <stdint.h>
| #endif
| #ifdef HAVE_UNISTD_H
| # include <unistd.h>
| #endif
| #include <bits/type_traits.h>
configure:16152: result: no
configure:16152: checking bits/type_traits.h presence
configure:16152: g++ -E  conftest.cpp
conftest.cpp:29:30: fatal error: bits/type_traits.h: No such file or directory
 #include <bits/type_traits.h>
                              ^
compilation terminated.
configure:16152: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "PCRE"
| #define PACKAGE_TARNAME "pcre"
| #define PACKAGE_VERSION "8.21"
| #define PACKAGE_STRING "PCRE 8.21"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define PACKAGE "pcre"
| #define VERSION "8.21"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define STDC_HEADERS 1
| #define HAVE_LIMITS_H 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_DIRENT_H 1
| #define HAVE_STRING 1
| /* end confdefs.h.  */
| #include <bits/type_traits.h>
configure:16152: result: no
configure:16152: checking for bits/type_traits.h
configure:16152: result: no
configure:16166: checking type_traits.h usability
configure:16166: g++ -c -O2  conftest.cpp >&5
conftest.cpp:62:25: fatal error: type_traits.h: No such file or directory
 #include <type_traits.h>
                         ^
compilation terminated.
configure:16166: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "PCRE"
| #define PACKAGE_TARNAME "pcre"
| #define PACKAGE_VERSION "8.21"
| #define PACKAGE_STRING "PCRE 8.21"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define PACKAGE "pcre"
| #define VERSION "8.21"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define STDC_HEADERS 1
| #define HAVE_LIMITS_H 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_DIRENT_H 1
| #define HAVE_STRING 1
| /* end confdefs.h.  */
| #include <stdio.h>
| #ifdef HAVE_SYS_TYPES_H
| # include <sys/types.h>
| #endif
| #ifdef HAVE_SYS_STAT_H
| # include <sys/stat.h>
| #endif
| #ifdef STDC_HEADERS
| # include <stdlib.h>
| # include <stddef.h>
| #else
| # ifdef HAVE_STDLIB_H
| #  include <stdlib.h>
| # endif
| #endif
| #ifdef HAVE_STRING_H
| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
| #  include <memory.h>
| # endif
| # include <string.h>
| #endif
| #ifdef HAVE_STRINGS_H
| # include <strings.h>
| #endif
| #ifdef HAVE_INTTYPES_H
| # include <inttypes.h>
| #endif
| #ifdef HAVE_STDINT_H
| # include <stdint.h>
| #endif
| #ifdef HAVE_UNISTD_H
| # include <unistd.h>
| #endif
| #include <type_traits.h>
configure:16166: result: no
configure:16166: checking type_traits.h presence
configure:16166: g++ -E  conftest.cpp
conftest.cpp:29:25: fatal error: type_traits.h: No such file or directory
 #include <type_traits.h>
                         ^
compilation terminated.
configure:16166: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "PCRE"
| #define PACKAGE_TARNAME "pcre"
| #define PACKAGE_VERSION "8.21"
| #define PACKAGE_STRING "PCRE 8.21"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define PACKAGE "pcre"
| #define VERSION "8.21"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define STDC_HEADERS 1
| #define HAVE_LIMITS_H 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_DIRENT_H 1
| #define HAVE_STRING 1
| /* end confdefs.h.  */
| #include <type_traits.h>
configure:16166: result: no
configure:16166: checking for type_traits.h
configure:16166: result: no
configure:16192: checking for strtoq
configure:16210: g++ -c -O2  conftest.cpp >&5
configure:16210: $? = 0
configure:16211: result: yes
configure:16228: checking for long long
configure:16228: g++ -c -O2  conftest.cpp >&5
configure:16228: $? = 0
configure:16228: g++ -c -O2  conftest.cpp >&5
conftest.cpp: In function 'int main()':
conftest.cpp:66:14: error: expected primary-expression before 'long'
 if (sizeof ((long long)))
              ^
conftest.cpp:66:14: error: expected ')' before 'long'
conftest.cpp:67:14: error: expected ')' before ';' token
      return 0;
              ^
conftest.cpp:67:14: error: expected ')' before ';' token
configure:16228: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "PCRE"
| #define PACKAGE_TARNAME "pcre"
| #define PACKAGE_VERSION "8.21"
| #define PACKAGE_STRING "PCRE 8.21"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define PACKAGE "pcre"
| #define VERSION "8.21"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define STDC_HEADERS 1
| #define HAVE_LIMITS_H 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_DIRENT_H 1
| #define HAVE_STRING 1
| #define HAVE_STRTOQ 1
| /* end confdefs.h.  */
| #include <stdio.h>
| #ifdef HAVE_SYS_TYPES_H
| # include <sys/types.h>
| #endif
| #ifdef HAVE_SYS_STAT_H
| # include <sys/stat.h>
| #endif
| #ifdef STDC_HEADERS
| # include <stdlib.h>
| # include <stddef.h>
| #else
| # ifdef HAVE_STDLIB_H
| #  include <stdlib.h>
| # endif
| #endif
| #ifdef HAVE_STRING_H
| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
| #  include <memory.h>
| # endif
| # include <string.h>
| #endif
| #ifdef HAVE_STRINGS_H
| # include <strings.h>
| #endif
| #ifdef HAVE_INTTYPES_H
| # include <inttypes.h>
| #endif
| #ifdef HAVE_STDINT_H
| # include <stdint.h>
| #endif
| #ifdef HAVE_UNISTD_H
| # include <unistd.h>
| #endif
| int
| main ()
| {
| if (sizeof ((long long)))
| 	    return 0;
|   ;
|   return 0;
| }
configure:16228: result: yes
configure:16240: checking for unsigned long long
configure:16240: g++ -c -O2  conftest.cpp >&5
configure:16240: $? = 0
configure:16240: g++ -c -O2  conftest.cpp >&5
conftest.cpp: In function 'int main()':
conftest.cpp:67:14: error: expected primary-expression before 'unsigned'
 if (sizeof ((unsigned long long)))
              ^
conftest.cpp:67:14: error: expected ')' before 'unsigned'
conftest.cpp:68:14: error: expected ')' before ';' token
      return 0;
              ^
conftest.cpp:68:14: error: expected ')' before ';' token
configure:16240: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "PCRE"
| #define PACKAGE_TARNAME "pcre"
| #define PACKAGE_VERSION "8.21"
| #define PACKAGE_STRING "PCRE 8.21"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define PACKAGE "pcre"
| #define VERSION "8.21"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define STDC_HEADERS 1
| #define HAVE_LIMITS_H 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_DIRENT_H 1
| #define HAVE_STRING 1
| #define HAVE_STRTOQ 1
| #define HAVE_LONG_LONG 1
| /* end confdefs.h.  */
| #include <stdio.h>
| #ifdef HAVE_SYS_TYPES_H
| # include <sys/types.h>
| #endif
| #ifdef HAVE_SYS_STAT_H
| # include <sys/stat.h>
| #endif
| #ifdef STDC_HEADERS
| # include <stdlib.h>
| # include <stddef.h>
| #else
| # ifdef HAVE_STDLIB_H
| #  include <stdlib.h>
| # endif
| #endif
| #ifdef HAVE_STRING_H
| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
| #  include <memory.h>
| # endif
| # include <string.h>
| #endif
| #ifdef HAVE_STRINGS_H
| # include <strings.h>
| #endif
| #ifdef HAVE_INTTYPES_H
| # include <inttypes.h>
| #endif
| #ifdef HAVE_STDINT_H
| # include <stdint.h>
| #endif
| #ifdef HAVE_UNISTD_H
| # include <unistd.h>
| #endif
| int
| main ()
| {
| if (sizeof ((unsigned long long)))
| 	    return 0;
|   ;
|   return 0;
| }
configure:16240: result: yes
configure:16306: checking for an ANSI C-conforming const
configure:16371: gcc -c -O2  conftest.c >&5
configure:16371: $? = 0
configure:16378: result: yes
configure:16386: checking for size_t
configure:16386: gcc -c -O2  conftest.c >&5
configure:16386: $? = 0
configure:16386: gcc -c -O2  conftest.c >&5
conftest.c: In function 'main':
conftest.c:68:21: error: expected expression before ')' token
 if (sizeof ((size_t)))
                     ^
configure:16386: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "PCRE"
| #define PACKAGE_TARNAME "pcre"
| #define PACKAGE_VERSION "8.21"
| #define PACKAGE_STRING "PCRE 8.21"
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define PACKAGE "pcre"
| #define VERSION "8.21"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define STDC_HEADERS 1
| #define HAVE_LIMITS_H 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_DIRENT_H 1
| #define HAVE_STRING 1
| #define HAVE_STRTOQ 1
| #define HAVE_LONG_LONG 1
| #define HAVE_UNSIGNED_LONG_LONG 1
| /* end confdefs.h.  */
| #include <stdio.h>
| #ifdef HAVE_SYS_TYPES_H
| # include <sys/types.h>
| #endif
| #ifdef HAVE_SYS_STAT_H
| # include <sys/stat.h>
| #endif
| #ifdef STDC_HEADERS
| # include <stdlib.h>
| # include <stddef.h>
| #else
| # ifdef HAVE_STDLIB_H
| #  include <stdlib.h>
| # endif
| #endif
| #ifdef HAVE_STRING_H
| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
| #  include <memory.h>
| # endif
| # include <string.h>
| #endif
| #ifdef HAVE_STRINGS_H
| # include <strings.h>
| #endif
| #ifdef HAVE_INTTYPES_H
| # include <inttypes.h>
| #endif
| #ifdef HAVE_STDINT_H
| # include <stdint.h>
| #endif
| #ifdef HAVE_UNISTD_H
| # include <unistd.h>
| #endif
| int
| main ()
| {
| if (sizeof ((size_t)))
| 	    return 0;
|   ;
|   return 0;
| }
configure:16386: result: yes
configure:16403: checking for bcopy
configure:16403: gcc -o conftest -O2   conftest.c  >&5
conftest.c:55:6: warning: conflicting types for built-in function 'bcopy' [enabled by default]
 char bcopy ();
      ^
configure:16403: $? = 0
configure:16403: result: yes
configure:16403: checking for memmove
configure:16403: gcc -o conftest -O2   conftest.c  >&5
conftest.c:56:6: warning: conflicting types for built-in function 'memmove' [enabled by default]
 char memmove ();
      ^
configure:16403: $? = 0
configure:16403: result: yes
configure:16403: checking for strerror
configure:16403: gcc -o conftest -O2   conftest.c  >&5
configure:16403: $? = 0
configure:16403: result: yes
configure:16417: checking zlib.h usability
configure:16417: gcc -c -O2  conftest.c >&5
configure:16417: $? = 0
configure:16417: result: yes
configure:16417: checking zlib.h presence
configure:16417: gcc -E  conftest.c
configure:16417: $? = 0
configure:16417: result: yes
configure:16417: checking for zlib.h
configure:16417: result: yes
configure:16427: checking for gzopen in -lz
configure:16452: gcc -o conftest -O2   conftest.c -lz   >&5
configure:16452: $? = 0
configure:16461: result: yes
configure:16486: checking bzlib.h usability
configure:16486: gcc -c -O2  conftest.c >&5
configure:16486: $? = 0
configure:16486: result: yes
configure:16486: checking bzlib.h presence
configure:16486: gcc -E  conftest.c
configure:16486: $? = 0
configure:16486: result: yes
configure:16486: checking for bzlib.h
configure:16486: result: yes
configure:16501: checking for libbz2
configure:16519: gcc -o conftest -O2   conftest.c  -lbz2 >&5
conftest.c: In function 'main':
conftest.c:44:8: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
 return (int)BZ2_bzopen("conftest", "rb");
        ^
configure:16519: $? = 0
configure:16520: result: yes
configure:16534: checking readline/readline.h usability
configure:16534: gcc -c -O2  conftest.c >&5
configure:16534: $? = 0
configure:16534: result: yes
configure:16534: checking readline/readline.h presence
configure:16534: gcc -E  conftest.c
configure:16534: $? = 0
configure:16534: result: yes
configure:16534: checking for readline/readline.h
configure:16534: result: yes
configure:16546: checking readline/history.h usability
configure:16546: gcc -c -O2  conftest.c >&5
configure:16546: $? = 0
configure:16546: result: yes
configure:16546: checking readline/history.h presence
configure:16546: gcc -E  conftest.c
configure:16546: $? = 0
configure:16546: result: yes
configure:16546: checking for readline/history.h
configure:16546: result: yes
configure:16556: checking for readline in -lreadline
configure:16581: gcc -o conftest -O2   conftest.c -lreadline   >&5
configure:16581: $? = 0
configure:16590: result: yes
configure:16964: creating ./config.status

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

This file was extended by PCRE config.status 8.21, which was
generated by GNU Autoconf 2.68.  Invocation command line was

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

on tmatthews-pc

config.status:1211: creating Makefile
config.status:1211: creating libpcre.pc
config.status:1211: creating libpcreposix.pc
config.status:1211: creating libpcrecpp.pc
config.status:1211: creating pcre-config
config.status:1211: creating pcre.h
config.status:1211: creating pcre_stringpiece.h
config.status:1211: creating pcrecpparg.h
config.status:1211: creating config.h
config.status:1440: executing depfiles commands
config.status:1440: executing libtool commands
config.status:1440: executing script-chmod commands
config.status:1440: executing delete-old-chartables commands

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

ac_cv_build=x86_64-unknown-linux-gnu
ac_cv_c_compiler_gnu=yes
ac_cv_c_const=yes
ac_cv_c_int64_t=yes
ac_cv_cxx_compiler_gnu=yes
ac_cv_env_CCC_set=
ac_cv_env_CCC_value=
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_CXXCPP_set=
ac_cv_env_CXXCPP_value=
ac_cv_env_CXXFLAGS_set=
ac_cv_env_CXXFLAGS_value=
ac_cv_env_CXX_set=
ac_cv_env_CXX_value=
ac_cv_env_LDFLAGS_set=
ac_cv_env_LDFLAGS_value=
ac_cv_env_LIBS_set=
ac_cv_env_LIBS_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=
ac_cv_func_bcopy=yes
ac_cv_func_memmove=yes
ac_cv_func_strerror=yes
ac_cv_header_bits_type_traits_h=no
ac_cv_header_bzlib_h=yes
ac_cv_header_dirent_h=yes
ac_cv_header_dlfcn_h=yes
ac_cv_header_inttypes_h=yes
ac_cv_header_limits_h=yes
ac_cv_header_memory_h=yes
ac_cv_header_readline_history_h=yes
ac_cv_header_readline_readline_h=yes
ac_cv_header_stdc=yes
ac_cv_header_stdint_h=yes
ac_cv_header_stdlib_h=yes
ac_cv_header_string=yes
ac_cv_header_string_h=yes
ac_cv_header_strings_h=yes
ac_cv_header_sys_stat_h=yes
ac_cv_header_sys_types_h=yes
ac_cv_header_type_traits_h=no
ac_cv_header_unistd_h=yes
ac_cv_header_windows_h=no
ac_cv_header_zlib_h=yes
ac_cv_host=x86_64-unknown-linux-gnu
ac_cv_lib_readline_readline=yes
ac_cv_lib_z_gzopen=yes
ac_cv_objext=o
ac_cv_path_EGREP='/bin/grep -E'
ac_cv_path_FGREP='/bin/grep -F'
ac_cv_path_GREP=/bin/grep
ac_cv_path_SED=/bin/sed
ac_cv_path_install='/bin/install -c'
ac_cv_path_mkdir=/bin/mkdir
ac_cv_prog_AWK=gawk
ac_cv_prog_CPP='gcc -E'
ac_cv_prog_CXXCPP='g++ -E'
ac_cv_prog_ac_ct_AR=ar
ac_cv_prog_ac_ct_CC=gcc
ac_cv_prog_ac_ct_CXX=g++
ac_cv_prog_ac_ct_DLLTOOL=dlltool
ac_cv_prog_ac_ct_OBJDUMP=objdump
ac_cv_prog_ac_ct_RANLIB=ranlib
ac_cv_prog_ac_ct_STRIP=strip
ac_cv_prog_cc_c89=
ac_cv_prog_cc_g=yes
ac_cv_prog_cxx_g=yes
ac_cv_prog_make_make_set=yes
ac_cv_type_long_long=yes
ac_cv_type_size_t=yes
ac_cv_type_unsigned_long_long=yes
am_cv_CC_dependencies_compiler_type=gcc3
am_cv_CXX_dependencies_compiler_type=gcc3
lt_cv_ar_at_file=@
lt_cv_archive_cmds_need_lc=no
lt_cv_deplibs_check_method=pass_all
lt_cv_file_magic_cmd='$MAGIC_CMD'
lt_cv_file_magic_test_file=
lt_cv_ld_reload_flag=-r
lt_cv_nm_interface='BSD nm'
lt_cv_objdir=.libs
lt_cv_path_LD=/bin/ld
lt_cv_path_LDCXX='/bin/ld -m elf_x86_64'
lt_cv_path_NM='/bin/nm -B'
lt_cv_path_mainfest_tool=no
lt_cv_prog_compiler_c_o=yes
lt_cv_prog_compiler_c_o_CXX=yes
lt_cv_prog_compiler_pic='-fPIC -DPIC'
lt_cv_prog_compiler_pic_CXX='-fPIC -DPIC'
lt_cv_prog_compiler_pic_works=yes
lt_cv_prog_compiler_pic_works_CXX=yes
lt_cv_prog_compiler_rtti_exceptions=no
lt_cv_prog_compiler_static_works=yes
lt_cv_prog_compiler_static_works_CXX=no
lt_cv_prog_gnu_ld=yes
lt_cv_prog_gnu_ldcxx=yes
lt_cv_sharedlib_from_linklib_cmd='printf %s\n'
lt_cv_shlibpath_overrides_runpath=no
lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[	 ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[	 ][	 ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\'' | sed '\''/ __gnu_lto/d'\'''
lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/  {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/  {"\2", (void *) \&\2},/p'\'''
lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/  {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \(lib[^ ]*\)$/  {"\2", (void *) \&\2},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/  {"lib\2", (void *) \&\2},/p'\'''
lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\'''
lt_cv_sys_max_cmd_len=1572864
lt_cv_to_host_file_cmd=func_convert_file_noop
lt_cv_to_tool_file_cmd=func_convert_file_noop

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

ACLOCAL='${SHELL} /home/tristan/src/sflphone-android/jni/libpcre/missing --run aclocal-1.11'
AMDEPBACKSLASH='\'
AMDEP_FALSE='#'
AMDEP_TRUE=''
AMTAR='${SHELL} /home/tristan/src/sflphone-android/jni/libpcre/missing --run tar'
AR='ar'
AS='as'
AUTOCONF='${SHELL} /home/tristan/src/sflphone-android/jni/libpcre/missing --run autoconf'
AUTOHEADER='${SHELL} /home/tristan/src/sflphone-android/jni/libpcre/missing --run autoheader'
AUTOMAKE='${SHELL} /home/tristan/src/sflphone-android/jni/libpcre/missing --run automake-1.11'
AWK='gawk'
CC='gcc'
CCDEPMODE='depmode=gcc3'
CFLAGS='-O2'
CPP='gcc -E'
CPPFLAGS=''
CXX='g++'
CXXCPP='g++ -E'
CXXDEPMODE='depmode=gcc3'
CXXFLAGS='-O2'
CYGPATH_W='echo'
DEFS='-DHAVE_CONFIG_H'
DEPDIR='.deps'
DISTCHECK_CONFIGURE_FLAGS='--enable-jit --enable-cpp --enable-unicode-properties'
DLLTOOL='dlltool'
DSYMUTIL=''
DUMPBIN=''
ECHO_C=''
ECHO_N='-n'
ECHO_T=''
EGREP='/bin/grep -E'
EXEEXT=''
EXTRA_LIBPCRECPP_LDFLAGS='                            -version-info 0:0:0                           '
EXTRA_LIBPCREPOSIX_LDFLAGS='                              -version-info 0:0:0'
EXTRA_LIBPCRE_LDFLAGS='                         -version-info 0:1:0'
FGREP='/bin/grep -F'
GREP='/bin/grep'
INSTALL_DATA='${INSTALL} -m 644'
INSTALL_PROGRAM='${INSTALL}'
INSTALL_SCRIPT='${INSTALL}'
INSTALL_STRIP_PROGRAM='$(install_sh) -c -s'
LD='/bin/ld -m elf_x86_64'
LDFLAGS=''
LIBBZ2=''
LIBOBJS=''
LIBREADLINE=''
LIBS=''
LIBTOOL='$(SHELL) $(top_builddir)/libtool'
LIBZ=''
LIPO=''
LN_S='ln -s'
LTLIBOBJS=''
MAKEINFO='${SHELL} /home/tristan/src/sflphone-android/jni/libpcre/missing --run makeinfo'
MANIFEST_TOOL=':'
MKDIR_P='/bin/mkdir -p'
NM='/bin/nm -B'
NMEDIT=''
OBJDUMP='objdump'
OBJEXT='o'
OTOOL64=''
OTOOL=''
PACKAGE='pcre'
PACKAGE_BUGREPORT=''
PACKAGE_NAME='PCRE'
PACKAGE_STRING='PCRE 8.21'
PACKAGE_TARNAME='pcre'
PACKAGE_URL=''
PACKAGE_VERSION='8.21'
PATH_SEPARATOR=':'
PCRE_DATE='2011-12-12'
PCRE_MAJOR='8'
PCRE_MINOR='21'
PCRE_PRERELEASE=''
PCRE_STATIC_CFLAG=''
RANLIB='ranlib'
SED='/bin/sed'
SET_MAKE=''
SHELL='/bin/sh'
STRIP='strip'
VERSION='8.21'
WITH_JIT_FALSE=''
WITH_JIT_TRUE='#'
WITH_PCRE_CPP_FALSE='#'
WITH_PCRE_CPP_TRUE=''
WITH_REBUILD_CHARTABLES_FALSE=''
WITH_REBUILD_CHARTABLES_TRUE='#'
WITH_UTF8_FALSE=''
WITH_UTF8_TRUE='#'
ac_ct_AR='ar'
ac_ct_CC='gcc'
ac_ct_CXX='g++'
ac_ct_DUMPBIN=''
am__EXEEXT_FALSE=''
am__EXEEXT_TRUE='#'
am__fastdepCC_FALSE='#'
am__fastdepCC_TRUE=''
am__fastdepCXX_FALSE='#'
am__fastdepCXX_TRUE=''
am__include='include'
am__isrc=''
am__leading_dot='.'
am__quote=''
am__tar='${AMTAR} chof - "$$tardir"'
am__untar='${AMTAR} xf -'
bindir='${exec_prefix}/bin'
build='x86_64-unknown-linux-gnu'
build_alias=''
build_cpu='x86_64'
build_os='linux-gnu'
build_vendor='unknown'
datadir='${datarootdir}'
datarootdir='${prefix}/share'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
dvidir='${docdir}'
enable_cpp='yes'
exec_prefix='${prefix}'
host='x86_64-unknown-linux-gnu'
host_alias=''
host_cpu='x86_64'
host_os='linux-gnu'
host_vendor='unknown'
htmldir='${docdir}/html'
includedir='${prefix}/include'
infodir='${datarootdir}/info'
install_sh='${SHELL} /home/tristan/src/sflphone-android/jni/libpcre/install-sh'
libdir='${exec_prefix}/lib'
libexecdir='${exec_prefix}/libexec'
localedir='${datarootdir}/locale'
localstatedir='${prefix}/var'
mandir='${datarootdir}/man'
mkdir_p='/bin/mkdir -p'
oldincludedir='/usr/include'
pcre_have_bits_type_traits='0'
pcre_have_long_long='1'
pcre_have_type_traits='0'
pcre_have_ulong_long='1'
pdfdir='${docdir}'
prefix='/usr/local'
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 "PCRE"
#define PACKAGE_TARNAME "pcre"
#define PACKAGE_VERSION "8.21"
#define PACKAGE_STRING "PCRE 8.21"
#define PACKAGE_BUGREPORT ""
#define PACKAGE_URL ""
#define PACKAGE "pcre"
#define VERSION "8.21"
#define STDC_HEADERS 1
#define HAVE_SYS_TYPES_H 1
#define HAVE_SYS_STAT_H 1
#define HAVE_STDLIB_H 1
#define HAVE_STRING_H 1
#define HAVE_MEMORY_H 1
#define HAVE_STRINGS_H 1
#define HAVE_INTTYPES_H 1
#define HAVE_STDINT_H 1
#define HAVE_UNISTD_H 1
#define HAVE_DLFCN_H 1
#define LT_OBJDIR ".libs/"
#define STDC_HEADERS 1
#define HAVE_LIMITS_H 1
#define HAVE_SYS_TYPES_H 1
#define HAVE_SYS_STAT_H 1
#define HAVE_DIRENT_H 1
#define HAVE_STRING 1
#define HAVE_STRTOQ 1
#define HAVE_LONG_LONG 1
#define HAVE_UNSIGNED_LONG_LONG 1
#define HAVE_BCOPY 1
#define HAVE_MEMMOVE 1
#define HAVE_STRERROR 1
#define HAVE_ZLIB_H 1
#define HAVE_BZLIB_H 1
#define HAVE_READLINE_READLINE_H 1
#define HAVE_READLINE_HISTORY_H 1
#define PCREGREP_BUFSIZE 20480
#define NEWLINE 10
#define LINK_SIZE 2
#define POSIX_MALLOC_THRESHOLD 10
#define MATCH_LIMIT 10000000
#define MATCH_LIMIT_RECURSION MATCH_LIMIT
#define MAX_NAME_SIZE 32
#define MAX_NAME_COUNT 10000

configure: exit 0
