configure: support rustc-demangle installations in the sysroot
Currently, `./configure` supports `--with-rustc-demangle=${path_to_crate_root}` as the only mechanism to enable rustc-demangle support. This CL adds support for cases where keeping or synthesizing a full `cargo` build tree is hacky in comparison to simply installing `rustc_demangle.h` in e.g., /usr/include, and putting `librustc_demangle.a` in e.g., `/usr/lib64`. Bug: b:235999011 Change-Id: Id5fe2a24c4b6e33c4df0e10c86ba99c7cf890ab2 Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3733672 Reviewed-by: Mike Frysinger <vapier@chromium.org>
This commit is contained in:
parent
3e2a341168
commit
90a0d9a9ff
2 changed files with 126 additions and 4 deletions
95
configure
vendored
95
configure
vendored
|
@ -785,6 +785,7 @@ enable_tools
|
|||
enable_system_test_libs
|
||||
enable_selftest
|
||||
with_rustc_demangle
|
||||
enable_system_rustc_demangle
|
||||
with_tests_as_root
|
||||
'
|
||||
ac_precious_vars='build_alias
|
||||
|
@ -1454,6 +1455,12 @@ Optional Features:
|
|||
the local copies (default is local)
|
||||
--enable-selftest Run extra tests with "make check" (may conflict with
|
||||
optimizations) (default is no)
|
||||
--enable-system-rustc-demangle
|
||||
Link against the rustc-demangle library to demangle
|
||||
Rust language symbols during symbol dumping (default
|
||||
is no). This assumes that rustc-demangle is
|
||||
installed in your sysroot, and all headers from it
|
||||
are available in your standard include path
|
||||
|
||||
Optional Packages:
|
||||
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
|
||||
|
@ -7661,14 +7668,98 @@ else
|
|||
with_rustc_demangle=no
|
||||
fi
|
||||
|
||||
|
||||
RUSTC_DEMANGLE_BASE_CFLAGS="-DHAVE_RUSTC_DEMANGLE"
|
||||
RUSTC_DEMANGLE_BASE_LIBS="-lrustc_demangle -lpthread -ldl"
|
||||
|
||||
if test "x${with_rustc_demangle}" != xno; then
|
||||
if ! test -f "${with_rustc_demangle}/Cargo.toml"; then
|
||||
as_fn_error $? "You must pass the path to the rustc-demangle crate for --with-rustc-demangle" "$LINENO" 5
|
||||
fi
|
||||
RUSTC_DEMANGLE_CFLAGS="-DHAVE_RUSTC_DEMANGLE -I${with_rustc_demangle}/crates/capi/include"
|
||||
RUSTC_DEMANGLE_LIBS="-L${with_rustc_demangle}/target/release -lrustc_demangle -lpthread -ldl"
|
||||
RUSTC_DEMANGLE_CFLAGS="-I${with_rustc_demangle}/crates/capi/include ${RUSTC_DEMANGLE_BASE_CFLAGS}"
|
||||
RUSTC_DEMANGLE_LIBS="-L${with_rustc_demangle}/target/release ${RUSTC_DEMANGLE_BASE_LIBS}"
|
||||
fi
|
||||
|
||||
# Check whether --enable-system-rustc-demangle was given.
|
||||
if test "${enable_system_rustc_demangle+set}" = set; then :
|
||||
enableval=$enable_system_rustc_demangle;
|
||||
else
|
||||
enable_system_rustc_demangle=no
|
||||
fi
|
||||
|
||||
|
||||
if test "x${enable_system_rustc_demangle}" != xno; then
|
||||
if test "x${with_rustc_demangle}" != xno; then
|
||||
as_fn_error $? "--enable-system-rustc-demangle and --with-rustc-demangle are mutually exclusive." "$LINENO" 5
|
||||
fi
|
||||
|
||||
RUSTC_DEMANGLE_CFLAGS="${RUSTC_DEMANGLE_BASE_CFLAGS}"
|
||||
RUSTC_DEMANGLE_LIBS="${RUSTC_DEMANGLE_BASE_LIBS}"
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rustc_demangle in -lrustc_demangle" >&5
|
||||
$as_echo_n "checking for rustc_demangle in -lrustc_demangle... " >&6; }
|
||||
if ${ac_cv_lib_rustc_demangle_rustc_demangle+:} false; then :
|
||||
$as_echo_n "(cached) " >&6
|
||||
else
|
||||
ac_check_lib_save_LIBS=$LIBS
|
||||
LIBS="-lrustc_demangle $RUSTC_DEMANGLE_LIBS $LIBS"
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
/* Override any GCC internal prototype to avoid an error.
|
||||
Use char because int might match the return type of a GCC
|
||||
builtin and then its argument prototype would still apply. */
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
char rustc_demangle ();
|
||||
int
|
||||
main ()
|
||||
{
|
||||
return rustc_demangle ();
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_link "$LINENO"; then :
|
||||
ac_cv_lib_rustc_demangle_rustc_demangle=yes
|
||||
else
|
||||
ac_cv_lib_rustc_demangle_rustc_demangle=no
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
LIBS=$ac_check_lib_save_LIBS
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rustc_demangle_rustc_demangle" >&5
|
||||
$as_echo "$ac_cv_lib_rustc_demangle_rustc_demangle" >&6; }
|
||||
if test "x$ac_cv_lib_rustc_demangle_rustc_demangle" = xyes; then :
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define HAVE_LIBRUSTC_DEMANGLE 1
|
||||
_ACEOF
|
||||
|
||||
LIBS="-lrustc_demangle $LIBS"
|
||||
|
||||
else
|
||||
as_fn_error $? "librustc_demangle.a must be present when --enable-system-rustc-demangle is specified" "$LINENO" 5
|
||||
fi
|
||||
|
||||
for ac_header in rustc_demangle.h
|
||||
do :
|
||||
ac_fn_c_check_header_mongrel "$LINENO" "rustc_demangle.h" "ac_cv_header_rustc_demangle_h" "$ac_includes_default"
|
||||
if test "x$ac_cv_header_rustc_demangle_h" = xyes; then :
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define HAVE_RUSTC_DEMANGLE_H 1
|
||||
_ACEOF
|
||||
|
||||
else
|
||||
as_fn_error $? "rustc_demangle.h must be present when --enable-system-rustc-demangle is specified" "$LINENO" 5
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
fi
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
35
configure.ac
35
configure.ac
|
@ -173,13 +173,44 @@ AC_ARG_WITH(rustc-demangle,
|
|||
[symbol dumping (default is no)]
|
||||
[Pass the path to the crate root.]),,
|
||||
[with_rustc_demangle=no])
|
||||
|
||||
RUSTC_DEMANGLE_BASE_CFLAGS="-DHAVE_RUSTC_DEMANGLE"
|
||||
RUSTC_DEMANGLE_BASE_LIBS="-lrustc_demangle -lpthread -ldl"
|
||||
|
||||
if test "x${with_rustc_demangle}" != xno; then
|
||||
if ! test -f "${with_rustc_demangle}/Cargo.toml"; then
|
||||
AC_MSG_ERROR(You must pass the path to the rustc-demangle crate for --with-rustc-demangle)
|
||||
fi
|
||||
RUSTC_DEMANGLE_CFLAGS="-DHAVE_RUSTC_DEMANGLE -I${with_rustc_demangle}/crates/capi/include"
|
||||
RUSTC_DEMANGLE_LIBS="-L${with_rustc_demangle}/target/release -lrustc_demangle -lpthread -ldl"
|
||||
RUSTC_DEMANGLE_CFLAGS="-I${with_rustc_demangle}/crates/capi/include ${RUSTC_DEMANGLE_BASE_CFLAGS}"
|
||||
RUSTC_DEMANGLE_LIBS="-L${with_rustc_demangle}/target/release ${RUSTC_DEMANGLE_BASE_LIBS}"
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE(system-rustc-demangle,
|
||||
AS_HELP_STRING([--enable-system-rustc-demangle],
|
||||
[Link against the rustc-demangle library]
|
||||
[to demangle Rust language symbols during]
|
||||
[symbol dumping (default is no). This assumes]
|
||||
[that rustc-demangle is installed in your sysroot,]
|
||||
[and all headers from it are available in your]
|
||||
[standard include path]
|
||||
),,
|
||||
[enable_system_rustc_demangle=no])
|
||||
|
||||
if test "x${enable_system_rustc_demangle}" != xno; then
|
||||
if test "x${with_rustc_demangle}" != xno; then
|
||||
AC_MSG_ERROR([--enable-system-rustc-demangle and --with-rustc-demangle are mutually exclusive.])
|
||||
fi
|
||||
|
||||
RUSTC_DEMANGLE_CFLAGS="${RUSTC_DEMANGLE_BASE_CFLAGS}"
|
||||
RUSTC_DEMANGLE_LIBS="${RUSTC_DEMANGLE_BASE_LIBS}"
|
||||
|
||||
AC_CHECK_LIB([rustc_demangle], [rustc_demangle], [],
|
||||
[AC_MSG_ERROR(librustc_demangle.a must be present when --enable-system-rustc-demangle is specified)],
|
||||
[$RUSTC_DEMANGLE_LIBS])
|
||||
AC_CHECK_HEADERS(rustc_demangle.h, [],
|
||||
[AC_MSG_ERROR(rustc_demangle.h must be present when --enable-system-rustc-demangle is specified)])
|
||||
fi
|
||||
|
||||
AC_ARG_VAR([RUSTC_DEMANGLE_CFLAGS], [Compiler flags for rustc-demangle])
|
||||
AC_ARG_VAR([RUSTC_DEMANGLE_LIBS], [Linker flags for rustc-demangle])
|
||||
|
||||
|
|
Loading…
Reference in a new issue