[pulseaudio-discuss] [PATCH] build-sys: Add an --enable-debug option

Tanu Kaskinen tanu.kaskinen at linux.intel.com
Thu Apr 24 10:10:34 PDT 2014


On Tue, 2014-04-22 at 13:09 +0530, Arun Raghavan wrote:
> This stops the abuse of __OPTIMIZE__ in builds, and adds an explicit
> configure-time option to enable a debug-friendly build. We can extend
> this with more debug-related options as needed.
> 
> One small side-effect that this change has is that non-debug builds no
> longer have fastpath asserts enabled (which is how it should be).
> ---
>  README                           |  6 +-----
>  bootstrap.sh                     |  2 +-
>  configure.ac                     | 12 +++++-------
>  src/daemon/main.c                |  6 ++----
>  src/modules/gconf/module-gconf.c |  2 +-
>  src/pulsecore/pid.c              |  4 ++--
>  6 files changed, 12 insertions(+), 20 deletions(-)
> 
> diff --git a/README b/README
> index 66c1847..904d1c1 100644
> --- a/README
> +++ b/README
> @@ -34,11 +34,7 @@ AUTHORS:
>  	Several
>  
>  HACKING:
> -	In order to run pulseaudio from the build dir __OPTIMIZE__ should be
> -	disabled (look at src/pulsecore/core-util.h::pa_run_from_build_tree()),
> -	this can be done by passing "CFLAGS=-O0" to the configure script:
> -	  ./autogen.sh
> -	  CFLAGS="-ggdb3 -O0" LDFLAGS="-ggdb3" ./configure
> +	  ./configure
>  	  make
>  	  ./src/pulseaudio -n -F src/default.pa -p $(pwd)/src/
>  
> diff --git a/bootstrap.sh b/bootstrap.sh
> index 08e0fa4..56ddd2a 100755
> --- a/bootstrap.sh
> +++ b/bootstrap.sh
> @@ -55,6 +55,6 @@ autopoint --force
>  AUTOPOINT='intltoolize --automake --copy' autoreconf --force --install --verbose
>  
>  if test "x$NOCONFIGURE" = "x"; then
> -    CFLAGS="$CFLAGS -g -O0" ./configure --sysconfdir=/etc --localstatedir=/var --enable-force-preopen "$@"
> +    CFLAGS="$CFLAGS -g -O0" ./configure --sysconfdir=/etc --localstatedir=/var --enable-force-preopen --enable-debug "$@"
>      make clean
>  fi
> diff --git a/configure.ac b/configure.ac
> index e75973f..75d76b2 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -177,13 +177,11 @@ AX_APPEND_COMPILE_FLAGS(
>      [-Wall -W -Wextra -pipe -Wno-long-long -Wno-overlength-strings -Wunsafe-loop-optimizations -Wundef -Wformat=2 -Wlogical-op -Wsign-compare -Wformat-security -Wmissing-include-dirs -Wformat-nonliteral -Wold-style-definition -Wpointer-arith -Winit-self -Wdeclaration-after-statement -Wfloat-equal -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls -Wmissing-declarations -Wmissing-noreturn -Wshadow -Wendif-labels -Wcast-align -Wstrict-aliasing -Wwrite-strings -Wno-unused-parameter -ffast-math -fno-common -fdiagnostics-show-option],
>      [], [-pedantic -Werror])
>  
> -# Only enable fastpath asserts when doing a debug build, e.g. from bootstrap.sh.
> -AS_CASE([" $CFLAGS "], [*" -O0 "*], [], [AX_APPEND_FLAG(["-DFASTPATH"], [CPPFLAGS])])
> -
> -# Only set _FORTIFY_SOURCE when optimizations are enabled. If optimizations
> -# are disabled, _FORTIFY_SOURCE doesn't do anything, and causes tons of
> -# warnings during compiling on some distributions (at least Fedora).
> -AS_CASE([" $CFLAGS "], [*" -O0 "*], [], [AX_APPEND_FLAG(["-D_FORTIFY_SOURCE=2"], [CPPFLAGS])])
> +AC_ARG_ENABLE([debug],
> +    AS_HELP_STRING([--enable-debug], [Enable a build suitable for debugging]))
> +AS_IF([test "x$enable_debug" != "xno"],
> +    [AX_APPEND_FLAG(["-DDEBUG -D_FORTIFY_SOURCE=2"], [CPPFLAGS])],
> +    [AX_APPEND_FLAG(["-DFASTPATH"], [CPPFLAGS])])

You probably meant != "xyes" in the test, this doesn't make sense
otherwise.

I think the _FORTIFY_SOURCE check should be left as it was, because
_FORTIFY_SOURCE depends on optimizations, not on whether the "debug
mode" is enabled.

>  
> 
>  #### Linker flags ####
> diff --git a/src/daemon/main.c b/src/daemon/main.c
> index 02a8ea6..d0345c9 100644
> --- a/src/daemon/main.c
> +++ b/src/daemon/main.c
> @@ -427,12 +427,10 @@ int main(int argc, char *argv[]) {
>      pa_log_set_level(PA_LOG_NOTICE);
>      pa_log_set_flags(PA_LOG_COLORS|PA_LOG_PRINT_FILE|PA_LOG_PRINT_LEVEL, PA_LOG_RESET);
>  
> -#if defined(__linux__) && defined(__OPTIMIZE__)
> +#ifndef DEBUG
>      /*
>         Disable lazy relocations to make usage of external libraries
> -       more deterministic for our RT threads. We abuse __OPTIMIZE__ as
> -       a check whether we are a debug build or not. This all is
> -       admittedly a bit snake-oilish.
> +       more deterministic for our RT threads.
>      */
>  
>      if (!getenv("LD_BIND_NOW")) {
> diff --git a/src/modules/gconf/module-gconf.c b/src/modules/gconf/module-gconf.c
> index d791b00..61ac6bf 100644
> --- a/src/modules/gconf/module-gconf.c
> +++ b/src/modules/gconf/module-gconf.c
> @@ -339,7 +339,7 @@ int pa__init(pa_module*m) {
>      u->buf_fill = 0;
>  
>      if ((u->fd = pa_start_child_for_read(
> -#if defined(__linux__) && !defined(__OPTIMIZE__)
> +#ifdef DEBUG
>                                pa_run_from_build_tree() ? PA_BUILDDIR "/gconf-helper" :
>  #endif
>                   PA_GCONF_HELPER, NULL, &u->pid)) < 0)
> diff --git a/src/pulsecore/pid.c b/src/pulsecore/pid.c
> index e347884..cae4234 100644
> --- a/src/pulsecore/pid.c
> +++ b/src/pulsecore/pid.c
> @@ -165,14 +165,14 @@ static int proc_name_ours(pid_t pid, const char *procname) {
>          good = pa_startswith(stored, expected);
>          pa_xfree(expected);
>  
> -/*#if !defined(__OPTIMIZE__)*/
> +#ifdef DEBUG
>          if (!good) {
>              /* libtool likes to rename our binary names ... */
>              expected = pa_sprintf_malloc("%lu (lt-%s)", (unsigned long) pid, procname);
>              good = pa_startswith(stored, expected);
>              pa_xfree(expected);
>          }
> -/*#endif*/
> +#endif

The previous #if was probably commented out for a reason. I'd prefer you
to not disable this logic on non-debug builds, because I don't see
significant benefit in doing so, and it can potentially cause trouble
for someone.

-- 
Tanu



More information about the pulseaudio-discuss mailing list