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

Arun Raghavan arun at accosted.net
Tue Apr 22 00:39:39 PDT 2014


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])])
 
 
 #### 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
 
         return !!good;
     }
-- 
1.9.0



More information about the pulseaudio-discuss mailing list