diff --git a/.travis.yml b/.travis.yml index 4a7b775a..628362d2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,8 @@ # https://docs.travis-ci.com/ language: cpp +sudo: required + addons: apt: sources: diff --git a/Makefile.am b/Makefile.am index 21e5867a..eac914cf 100644 --- a/Makefile.am +++ b/Makefile.am @@ -446,8 +446,12 @@ if ANDROID_HOST LOG_DRIVER = $(top_srcdir)/android/test-driver else # The default Autotools test driver script. +if TESTS_AS_ROOT +LOG_DRIVER = $(top_srcdir)/autotools/root-test-driver $(top_srcdir)/autotools/test-driver +else LOG_DRIVER = $(top_srcdir)/autotools/test-driver -endif +endif !TESTS_AS_ROOT +endif !ANDROID_HOST if LINUX_HOST src_client_linux_linux_dumper_unittest_helper_SOURCES = \ diff --git a/Makefile.in b/Makefile.in index e53104b1..2bb6b406 100644 --- a/Makefile.in +++ b/Makefile.in @@ -2291,8 +2291,9 @@ CLEANFILES = $(am__append_12) @DISABLE_PROCESSOR_FALSE@ src/processor/minidump_stackwalk_machine_readable_test TESTS = $(check_PROGRAMS) $(check_SCRIPTS) +@ANDROID_HOST_FALSE@@TESTS_AS_ROOT_FALSE@LOG_DRIVER = $(top_srcdir)/autotools/test-driver # The default Autotools test driver script. -@ANDROID_HOST_FALSE@LOG_DRIVER = $(top_srcdir)/autotools/test-driver +@ANDROID_HOST_FALSE@@TESTS_AS_ROOT_TRUE@LOG_DRIVER = $(top_srcdir)/autotools/root-test-driver $(top_srcdir)/autotools/test-driver # Since Autotools 1.2, tests are run through a special "test driver" script. # Unfortunately, it's not possible anymore to specify an alternative shell to diff --git a/autotools/root-test-driver b/autotools/root-test-driver new file mode 100755 index 00000000..66bf7ebb --- /dev/null +++ b/autotools/root-test-driver @@ -0,0 +1,3 @@ +#!/bin/sh +# -E to keep the environment variables needed to run the tests. +exec sudo -E "$@" diff --git a/configure b/configure index 5e94512c..e0187ddc 100755 --- a/configure +++ b/configure @@ -626,6 +626,8 @@ ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS +TESTS_AS_ROOT_FALSE +TESTS_AS_ROOT_TRUE RUST_DEMANGLE_LIBS RUST_DEMANGLE_CFLAGS SELFTEST_FALSE @@ -777,6 +779,7 @@ enable_tools enable_system_test_libs enable_selftest with_rust_demangle +with_tests_as_root ' ac_precious_vars='build_alias host_alias @@ -1444,6 +1447,9 @@ Optional Packages: Link against the rust-demangle library to demangle Rust language symbols during symbol dumping (default is no) Pass the path to the crate root. + --with-tests-as-root Run the tests as root. Use this on platforms like + travis-ci.org that require root privileges to use + ptrace (default is no) Some influential environment variables: CC C compiler command @@ -7870,6 +7876,33 @@ fi + +# Check whether --with-tests-as-root was given. +if test "${with_tests_as_root+set}" = set; then : + withval=$with_tests_as_root; case "${withval}" in + yes) + tests_as_root=true + ;; + no) + tests_as_root=false + ;; + *) + as_fn_error $? "--with-tests-as-root can only be \"yes\" or \"no\"" "$LINENO" 5 + ;; + esac +else + tests_as_root=false +fi + + if test x$tests_as_root = xtrue; then + TESTS_AS_ROOT_TRUE= + TESTS_AS_ROOT_FALSE='#' +else + TESTS_AS_ROOT_TRUE='#' + TESTS_AS_ROOT_FALSE= +fi + + ac_config_files="$ac_config_files breakpad.pc breakpad-client.pc Makefile" @@ -8049,6 +8082,10 @@ if test -z "${SELFTEST_TRUE}" && test -z "${SELFTEST_FALSE}"; then as_fn_error $? "conditional \"SELFTEST\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${TESTS_AS_ROOT_TRUE}" && test -z "${TESTS_AS_ROOT_FALSE}"; then + as_fn_error $? "conditional \"TESTS_AS_ROOT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 diff --git a/configure.ac b/configure.ac index ec194ddd..9cca5aa0 100644 --- a/configure.ac +++ b/configure.ac @@ -246,6 +246,25 @@ AC_ARG_WITH(rust-demangle, AC_ARG_VAR([RUST_DEMANGLE_CFLAGS], [Compiler flags for rust-demangle]) AC_ARG_VAR([RUST_DEMANGLE_LIBS], [Linker flags for rust-demangle]) +AC_ARG_WITH(tests-as-root, + AS_HELP_STRING([--with-tests-as-root], + [Run the tests as root. Use this on platforms] + [like travis-ci.org that require root privileges] + [to use ptrace (default is no)]), + [case "${withval}" in + yes) + tests_as_root=true + ;; + no) + tests_as_root=false + ;; + *) + AC_MSG_ERROR(--with-tests-as-root can only be "yes" or "no") + ;; + esac], + [tests_as_root=false]) +AM_CONDITIONAL(TESTS_AS_ROOT, test x$tests_as_root = xtrue) + AC_CONFIG_FILES(m4_flatten([ breakpad.pc breakpad-client.pc diff --git a/scripts/travis-build.sh b/scripts/travis-build.sh index a5f7ad56..1d1beb3d 100755 --- a/scripts/travis-build.sh +++ b/scripts/travis-build.sh @@ -43,7 +43,7 @@ coverity_scan() { # Do an in-tree build and make sure tests pass. build() { - ./configure + ./configure --with-tests-as-root make -j${JOBS} check VERBOSE=1 make distclean } @@ -52,7 +52,7 @@ build() { build_out_of_tree() { mkdir -p build/native pushd build/native >/dev/null - ../../configure + ../../configure --with-tests-as-root make -j${JOBS} distcheck VERBOSE=1 popd >/dev/null }