1*9712c20fSFrederick Mayle# Copyright 2006 Google LLC 2*9712c20fSFrederick Mayle# 3*9712c20fSFrederick Mayle# Redistribution and use in source and binary forms, with or without 4*9712c20fSFrederick Mayle# modification, are permitted provided that the following conditions are 5*9712c20fSFrederick Mayle# met: 6*9712c20fSFrederick Mayle# 7*9712c20fSFrederick Mayle# * Redistributions of source code must retain the above copyright 8*9712c20fSFrederick Mayle# notice, this list of conditions and the following disclaimer. 9*9712c20fSFrederick Mayle# * Redistributions in binary form must reproduce the above 10*9712c20fSFrederick Mayle# copyright notice, this list of conditions and the following disclaimer 11*9712c20fSFrederick Mayle# in the documentation and/or other materials provided with the 12*9712c20fSFrederick Mayle# distribution. 13*9712c20fSFrederick Mayle# * Neither the name of Google LLC nor the names of its 14*9712c20fSFrederick Mayle# contributors may be used to endorse or promote products derived from 15*9712c20fSFrederick Mayle# this software without specific prior written permission. 16*9712c20fSFrederick Mayle# 17*9712c20fSFrederick Mayle# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18*9712c20fSFrederick Mayle# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19*9712c20fSFrederick Mayle# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20*9712c20fSFrederick Mayle# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21*9712c20fSFrederick Mayle# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22*9712c20fSFrederick Mayle# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23*9712c20fSFrederick Mayle# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24*9712c20fSFrederick Mayle# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25*9712c20fSFrederick Mayle# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26*9712c20fSFrederick Mayle# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27*9712c20fSFrederick Mayle# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28*9712c20fSFrederick Mayle 29*9712c20fSFrederick Mayle 30*9712c20fSFrederick MayleAC_PREREQ([2.71]) 31*9712c20fSFrederick Mayle 32*9712c20fSFrederick MayleAC_INIT([breakpad],[0.1],[[email protected]]) 33*9712c20fSFrederick Maylednl Sanity check: the argument is just a file that should exist. 34*9712c20fSFrederick MayleAC_CONFIG_SRCDIR(README.md) 35*9712c20fSFrederick MayleAC_CONFIG_AUX_DIR(autotools) 36*9712c20fSFrederick MayleAC_CONFIG_MACRO_DIR([m4]) 37*9712c20fSFrederick MayleAC_CANONICAL_HOST 38*9712c20fSFrederick Mayle 39*9712c20fSFrederick MayleAM_INIT_AUTOMAKE(subdir-objects tar-ustar 1.13) 40*9712c20fSFrederick MayleAC_CONFIG_HEADERS(src/config.h) 41*9712c20fSFrederick MayleAM_MAINTAINER_MODE 42*9712c20fSFrederick Mayle 43*9712c20fSFrederick MayleAM_PROG_AR 44*9712c20fSFrederick MayleAM_PROG_AS 45*9712c20fSFrederick MayleAC_PROG_CC 46*9712c20fSFrederick MayleAM_PROG_CC_C_O 47*9712c20fSFrederick MayleAC_PROG_CPP 48*9712c20fSFrederick MayleAC_PROG_CXX 49*9712c20fSFrederick MayleAC_PROG_RANLIB 50*9712c20fSFrederick Mayle 51*9712c20fSFrederick Maylednl This must come before all the feature tests below. 52*9712c20fSFrederick MayleAC_ARG_ENABLE(m32, 53*9712c20fSFrederick Mayle AS_HELP_STRING([--enable-m32], 54*9712c20fSFrederick Mayle [Compile/build with -m32] 55*9712c20fSFrederick Mayle [(default is no)]),, 56*9712c20fSFrederick Mayle [enable_m32=no]) 57*9712c20fSFrederick Mayleif test "x$enable_m32" = xyes; then 58*9712c20fSFrederick Mayle CFLAGS="${CFLAGS} -m32" 59*9712c20fSFrederick Mayle CXXFLAGS="${CXXFLAGS} -m32" 60*9712c20fSFrederick Maylefi 61*9712c20fSFrederick Mayle 62*9712c20fSFrederick MayleAC_SYS_LARGEFILE 63*9712c20fSFrederick MayleAX_PTHREAD 64*9712c20fSFrederick MayleAC_CHECK_HEADERS([a.out.h sys/mman.h sys/random.h]) 65*9712c20fSFrederick MayleAC_CHECK_FUNCS([arc4random getcontext getrandom memfd_create]) 66*9712c20fSFrederick MayleAM_CONDITIONAL([HAVE_GETCONTEXT], [test "x$ac_cv_func_getcontext" = xyes]) 67*9712c20fSFrederick MayleAM_CONDITIONAL([HAVE_MEMFD_CREATE], [test "x$ac_cv_func_memfd_create" = xyes]) 68*9712c20fSFrederick Mayle 69*9712c20fSFrederick MayleAX_CXX_COMPILE_STDCXX(17, , mandatory) 70*9712c20fSFrederick Mayle 71*9712c20fSFrederick Maylednl Test supported warning flags. 72*9712c20fSFrederick MayleWARN_CXXFLAGS= 73*9712c20fSFrederick Maylednl This warning flag is used by clang. Its default behavior is to warn when 74*9712c20fSFrederick Maylednl given an unknown flag rather than error out. 75*9712c20fSFrederick MayleAC_LANG_PUSH([C++]) 76*9712c20fSFrederick MayleAX_CHECK_COMPILE_FLAG([-Werror=unknown-warning-option],[ 77*9712c20fSFrederick Mayle ax_compiler_flags_test="-Werror=unknown-warning-option" 78*9712c20fSFrederick Mayle],[ 79*9712c20fSFrederick Mayle ax_compiler_flags_test="" 80*9712c20fSFrederick Mayle]) 81*9712c20fSFrederick MayleAX_APPEND_COMPILE_FLAGS(m4_flatten([ 82*9712c20fSFrederick Mayle -Wmissing-braces 83*9712c20fSFrederick Mayle -Wnon-virtual-dtor 84*9712c20fSFrederick Mayle -Woverloaded-virtual 85*9712c20fSFrederick Mayle -Wreorder 86*9712c20fSFrederick Mayle -Wsign-compare 87*9712c20fSFrederick Mayle -Wunused-local-typedefs 88*9712c20fSFrederick Mayle -Wunused-variable 89*9712c20fSFrederick Mayle -Wvla 90*9712c20fSFrederick Mayle]), [WARN_CXXFLAGS], [${ax_compiler_flags_test}]) 91*9712c20fSFrederick MayleAS_VAR_APPEND([WARN_CXXFLAGS], " -Werror") 92*9712c20fSFrederick MayleAC_LANG_POP([C++]) 93*9712c20fSFrederick MayleAC_SUBST([WARN_CXXFLAGS]) 94*9712c20fSFrederick Mayle 95*9712c20fSFrederick Maylednl Test support for O_CLOEXEC 96*9712c20fSFrederick MayleAX_CHECK_DEFINE([fcntl.h], [O_CLOEXEC], [], 97*9712c20fSFrederick Mayle [AC_DEFINE([O_CLOEXEC], [0], [Fallback definition for old systems])]) 98*9712c20fSFrederick Mayle 99*9712c20fSFrederick Mayle# Only build Linux client libs when compiling for Linux 100*9712c20fSFrederick Maylecase $host in 101*9712c20fSFrederick Mayle *-*-linux* | *-android* ) 102*9712c20fSFrederick Mayle LINUX_HOST=true 103*9712c20fSFrederick Mayle ;; 104*9712c20fSFrederick Mayleesac 105*9712c20fSFrederick MayleAM_CONDITIONAL(LINUX_HOST, test x$LINUX_HOST = xtrue) 106*9712c20fSFrederick Mayle 107*9712c20fSFrederick Mayle# Only use Android support headers when compiling for Android 108*9712c20fSFrederick Maylecase $host in 109*9712c20fSFrederick Mayle *-android*) 110*9712c20fSFrederick Mayle ANDROID_HOST=true 111*9712c20fSFrederick Mayle ;; 112*9712c20fSFrederick Mayleesac 113*9712c20fSFrederick MayleAM_CONDITIONAL(ANDROID_HOST, test x$ANDROID_HOST = xtrue) 114*9712c20fSFrederick Mayle 115*9712c20fSFrederick Mayle# Some tools (like mac ones) only support x86 currently. 116*9712c20fSFrederick Maylecase $host_cpu in 117*9712c20fSFrederick Mayle i?86|x86_64) 118*9712c20fSFrederick Mayle X86_HOST=true 119*9712c20fSFrederick Mayle ;; 120*9712c20fSFrederick Mayleesac 121*9712c20fSFrederick MayleAM_CONDITIONAL(X86_HOST, test x$X86_HOST = xtrue) 122*9712c20fSFrederick Mayle 123*9712c20fSFrederick MayleAC_ARG_ENABLE(processor, 124*9712c20fSFrederick Mayle AS_HELP_STRING([--disable-processor], 125*9712c20fSFrederick Mayle [Don't build processor library] 126*9712c20fSFrederick Mayle [(default is no)]),, 127*9712c20fSFrederick Mayle [enable_processor=yes]) 128*9712c20fSFrederick MayleAM_CONDITIONAL(DISABLE_PROCESSOR, test "x$enable_processor" != xyes) 129*9712c20fSFrederick Mayle 130*9712c20fSFrederick MayleAC_ARG_ENABLE(tools, 131*9712c20fSFrederick Mayle AS_HELP_STRING([--disable-tools], 132*9712c20fSFrederick Mayle [Don't build tool binaries] 133*9712c20fSFrederick Mayle [(default is no)]),, 134*9712c20fSFrederick Mayle [enable_tools=yes]) 135*9712c20fSFrederick MayleAM_CONDITIONAL(DISABLE_TOOLS, test "x$enable_tools" != xyes) 136*9712c20fSFrederick Mayle 137*9712c20fSFrederick Mayleif test x$LINUX_HOST = xfalse -a "x$enable_processor" != xyes -a "x$enable_tools" != xyes; then 138*9712c20fSFrederick Mayle AC_MSG_ERROR([--disable-processor and --disable-tools were specified, and not building for Linux. Nothing to build!]) 139*9712c20fSFrederick Maylefi 140*9712c20fSFrederick Mayle 141*9712c20fSFrederick MayleAC_ARG_ENABLE(system-test-libs, 142*9712c20fSFrederick Mayle AS_HELP_STRING([--enable-system-test-libs], 143*9712c20fSFrederick Mayle [Use gtest/gmock/etc... from the system instead ] 144*9712c20fSFrederick Mayle [of the local copies (default is local)]),, 145*9712c20fSFrederick Mayle [enable_system_test_libs=no]) 146*9712c20fSFrederick MayleAM_CONDITIONAL(SYSTEM_TEST_LIBS, test "x$enable_system_test_libs" = xyes) 147*9712c20fSFrederick Mayle 148*9712c20fSFrederick MayleAC_ARG_VAR([GMOCK_CFLAGS], [Compiler flags for gmock]) 149*9712c20fSFrederick MayleAC_ARG_VAR([GMOCK_LIBS], [Linker flags for gmock]) 150*9712c20fSFrederick MayleAC_ARG_VAR([GTEST_CFLAGS], [Compiler flags for gtest]) 151*9712c20fSFrederick MayleAC_ARG_VAR([GTEST_LIBS], [Linker flags for gtest]) 152*9712c20fSFrederick Mayleif test "x$enable_system_test_libs" = xyes; then 153*9712c20fSFrederick Mayle : "${GMOCK_CFLAGS:=-pthread}" 154*9712c20fSFrederick Mayle : "${GMOCK_LIBS:=-lgmock -lgtest -pthread -lpthread}" 155*9712c20fSFrederick Mayle : "${GTEST_CFLAGS:=-pthread}" 156*9712c20fSFrederick Mayle : "${GTEST_LIBS:=-lgtest -pthread -lpthread}" 157*9712c20fSFrederick Maylefi 158*9712c20fSFrederick Mayle 159*9712c20fSFrederick MayleAC_ARG_ENABLE(selftest, 160*9712c20fSFrederick Mayle AS_HELP_STRING([--enable-selftest], 161*9712c20fSFrederick Mayle [Run extra tests with "make check" ] 162*9712c20fSFrederick Mayle [(may conflict with optimizations) ] 163*9712c20fSFrederick Mayle [(default is no)]),, 164*9712c20fSFrederick Mayle [enable_selftest=no]) 165*9712c20fSFrederick MayleAM_CONDITIONAL(SELFTEST, test "x$enable_selftest" = xyes) 166*9712c20fSFrederick Mayle 167*9712c20fSFrederick MayleAC_ARG_WITH(rustc-demangle, 168*9712c20fSFrederick Mayle AS_HELP_STRING([--with-rustc-demangle=/path/to/rustc-demangle], 169*9712c20fSFrederick Mayle [Link against the rustc-demangle library] 170*9712c20fSFrederick Mayle [to demangle Rust language symbols during] 171*9712c20fSFrederick Mayle [symbol dumping (default is no)] 172*9712c20fSFrederick Mayle [Pass the path to the crate root.]),, 173*9712c20fSFrederick Mayle [with_rustc_demangle=no]) 174*9712c20fSFrederick Mayle 175*9712c20fSFrederick MayleRUSTC_DEMANGLE_BASE_CFLAGS="-DHAVE_RUSTC_DEMANGLE" 176*9712c20fSFrederick MayleRUSTC_DEMANGLE_BASE_LIBS="-lrustc_demangle -lpthread -ldl" 177*9712c20fSFrederick Mayle 178*9712c20fSFrederick Mayleif test "x${with_rustc_demangle}" != xno; then 179*9712c20fSFrederick Mayle if ! test -f "${with_rustc_demangle}/Cargo.toml"; then 180*9712c20fSFrederick Mayle AC_MSG_ERROR(You must pass the path to the rustc-demangle crate for --with-rustc-demangle) 181*9712c20fSFrederick Mayle fi 182*9712c20fSFrederick Mayle RUSTC_DEMANGLE_CFLAGS="-I${with_rustc_demangle}/crates/capi/include ${RUSTC_DEMANGLE_BASE_CFLAGS}" 183*9712c20fSFrederick Mayle RUSTC_DEMANGLE_LIBS="-L${with_rustc_demangle}/target/release ${RUSTC_DEMANGLE_BASE_LIBS}" 184*9712c20fSFrederick Maylefi 185*9712c20fSFrederick Mayle 186*9712c20fSFrederick MayleAC_ARG_ENABLE(system-rustc-demangle, 187*9712c20fSFrederick Mayle AS_HELP_STRING([--enable-system-rustc-demangle], 188*9712c20fSFrederick Mayle [Link against the rustc-demangle library] 189*9712c20fSFrederick Mayle [to demangle Rust language symbols during] 190*9712c20fSFrederick Mayle [symbol dumping (default is no). This assumes] 191*9712c20fSFrederick Mayle [that rustc-demangle is installed in your sysroot,] 192*9712c20fSFrederick Mayle [and all headers from it are available in your] 193*9712c20fSFrederick Mayle [standard include path] 194*9712c20fSFrederick Mayle ),, 195*9712c20fSFrederick Mayle [enable_system_rustc_demangle=no]) 196*9712c20fSFrederick Mayle 197*9712c20fSFrederick Mayleif test "x${enable_system_rustc_demangle}" != xno; then 198*9712c20fSFrederick Mayle if test "x${with_rustc_demangle}" != xno; then 199*9712c20fSFrederick Mayle AC_MSG_ERROR([--enable-system-rustc-demangle and --with-rustc-demangle are mutually exclusive.]) 200*9712c20fSFrederick Mayle fi 201*9712c20fSFrederick Mayle 202*9712c20fSFrederick Mayle RUSTC_DEMANGLE_CFLAGS="${RUSTC_DEMANGLE_BASE_CFLAGS}" 203*9712c20fSFrederick Mayle RUSTC_DEMANGLE_LIBS="${RUSTC_DEMANGLE_BASE_LIBS}" 204*9712c20fSFrederick Mayle 205*9712c20fSFrederick Mayle AC_CHECK_LIB([rustc_demangle], [rustc_demangle], [], 206*9712c20fSFrederick Mayle [AC_MSG_ERROR(librustc_demangle.a must be present when --enable-system-rustc-demangle is specified)], 207*9712c20fSFrederick Mayle [$RUSTC_DEMANGLE_LIBS]) 208*9712c20fSFrederick Mayle AC_CHECK_HEADERS(rustc_demangle.h, [], 209*9712c20fSFrederick Mayle [AC_MSG_ERROR(rustc_demangle.h must be present when --enable-system-rustc-demangle is specified)]) 210*9712c20fSFrederick Maylefi 211*9712c20fSFrederick Mayle 212*9712c20fSFrederick MayleAC_ARG_VAR([RUSTC_DEMANGLE_CFLAGS], [Compiler flags for rustc-demangle]) 213*9712c20fSFrederick MayleAC_ARG_VAR([RUSTC_DEMANGLE_LIBS], [Linker flags for rustc-demangle]) 214*9712c20fSFrederick Mayle 215*9712c20fSFrederick MayleAC_ARG_ENABLE(zstd, 216*9712c20fSFrederick Mayle AS_HELP_STRING([--enable-zstd], 217*9712c20fSFrederick Mayle [Enable decompression of ELF sections with zstd]),, 218*9712c20fSFrederick Mayle [enable_zstd=no]) 219*9712c20fSFrederick Mayleif test "x${enable_zstd}" != xno; then 220*9712c20fSFrederick Mayle AC_CHECK_LIB(zstd, ZSTD_decompress, [], 221*9712c20fSFrederick Mayle [AC_MSG_ERROR([zstd library not found.])]) 222*9712c20fSFrederick Mayle AC_CHECK_HEADER(zstd.h, [], 223*9712c20fSFrederick Mayle [AC_MSG_ERROR([zstd header not found.])]) 224*9712c20fSFrederick Maylefi 225*9712c20fSFrederick Mayle 226*9712c20fSFrederick MayleAC_ARG_WITH(tests-as-root, 227*9712c20fSFrederick Mayle AS_HELP_STRING([--with-tests-as-root], 228*9712c20fSFrederick Mayle [Run the tests as root. Use this on platforms] 229*9712c20fSFrederick Mayle [like travis-ci.org that require root privileges] 230*9712c20fSFrederick Mayle [to use ptrace (default is no)]),, 231*9712c20fSFrederick Mayle [with_tests_as_root=no]) 232*9712c20fSFrederick MayleAM_CONDITIONAL(TESTS_AS_ROOT, test "x$with_tests_as_root" = xyes) 233*9712c20fSFrederick Mayle 234*9712c20fSFrederick MayleAC_CONFIG_FILES(m4_flatten([ 235*9712c20fSFrederick Mayle breakpad.pc 236*9712c20fSFrederick Mayle breakpad-client.pc 237*9712c20fSFrederick Mayle Makefile 238*9712c20fSFrederick Mayle])) 239*9712c20fSFrederick Mayle 240*9712c20fSFrederick MayleAC_OUTPUT 241