[alsa-devel] [PATCH alsa-lib] fix _GNU_SOURCE handling & header inclusion

Takashi Iwai tiwai at suse.de
Mon Oct 12 10:39:01 CEST 2015


On Fri, 09 Oct 2015 23:47:40 +0200,
Mike Frysinger wrote:
> 
> From: Mike Frysinger <vapier at chromium.org>
> 
> The configure script blindly adds -D_GNU_SOURCE to all build settings,
> even on non-GNU systems.  This isn't too much of a big deal (even if
> it uses the wrong variable -- CFLAGS instead of CPPFLAGS), except that
> the alsa-lib source itself determines whether to use GNU features when
> this is defined (such as versionsort).  So when we build on non-glibc
> systems, we get build failures like:
> src/ucm/parser.c:1268:18: error: 'versionsort' undeclared (first use in this function)
>  #define SORTFUNC versionsort
>                   ^
> src/ucm/parser.c:1272:54: note: in expansion of macro 'SORTFUNC'
>   err = scandir(filename, &namelist, filename_filter, SORTFUNC);
>                                                       ^
> 
> The correct way to add these flags is to use the autoconf helper
> AC_USE_SYSTEM_EXTENSIONS.  Unfortunately, that triggers some more
> bugs in the alsa build.  This macro adds defines to config.h and
> not directly to CPPFLAGS, so it relies on files correctly including
> config.h before anything else.  A number of alsa files do not do
> this leading to build failures.  The fix there is to shuffle the
> includes around so that the local ones come first.
> 
> Signed-off-by: Mike Frysinger <vapier at gentoo.org>

Thanks, applied now.


Takashi

> ---
>  configure.ac               | 4 +---
>  src/conf.c                 | 2 +-
>  src/timer/timer.c          | 9 ++-------
>  src/timer/timer_hw.c       | 6 ------
>  src/timer/timer_local.h    | 5 ++---
>  src/timer/timer_query.c    | 6 ------
>  src/timer/timer_query_hw.c | 6 ------
>  src/ucm/ucm_local.h        | 2 +-
>  8 files changed, 7 insertions(+), 33 deletions(-)
> 
> diff --git a/configure.ac b/configure.ac
> index a14e52d..9cb8614 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -27,11 +27,9 @@ AC_PREFIX_DEFAULT(/usr)
>  
>  dnl Checks for programs.
>  
> -CFLAGS="$CFLAGS -D_GNU_SOURCE"
> -
> -
>  AC_PROG_CC
>  AC_PROG_CPP
> +AC_USE_SYSTEM_EXTENSIONS
>  AC_PROG_INSTALL
>  AC_PROG_LN_S 
>  AC_DISABLE_STATIC
> diff --git a/src/conf.c b/src/conf.c
> index c6a83ee..91fca25 100644
> --- a/src/conf.c
> +++ b/src/conf.c
> @@ -414,12 +414,12 @@ beginning:</P>
>  */
>  
>  
> +#include "local.h"
>  #include <stdarg.h>
>  #include <limits.h>
>  #include <sys/stat.h>
>  #include <dirent.h>
>  #include <locale.h>
> -#include "local.h"
>  #ifdef HAVE_LIBPTHREAD
>  #include <pthread.h>
>  #endif
> diff --git a/src/timer/timer.c b/src/timer/timer.c
> index b71a9f8..a25e4f7 100644
> --- a/src/timer/timer.c
> +++ b/src/timer/timer.c
> @@ -67,15 +67,10 @@ This example shows opening a timer device and reading of timer events.
>   * \anchor example_test_timer
>   */
>  
> -#include <stdio.h>
> -#include <stdlib.h>
> -#include <unistd.h>
> -#include <string.h>
> -#include <fcntl.h>
> -#include <signal.h>
> -#include <sys/ioctl.h>
>  #include "timer_local.h"
>  
> +#include <signal.h>
> +
>  static int snd_timer_open_conf(snd_timer_t **timer,
>  			       const char *name, snd_config_t *timer_root,
>  			       snd_config_t *timer_conf, int mode)
> diff --git a/src/timer/timer_hw.c b/src/timer/timer_hw.c
> index e833fc8..e61b994 100644
> --- a/src/timer/timer_hw.c
> +++ b/src/timer/timer_hw.c
> @@ -19,12 +19,6 @@
>   *
>   */
>  
> -#include <stdio.h>
> -#include <stdlib.h>
> -#include <unistd.h>
> -#include <string.h>
> -#include <fcntl.h>
> -#include <sys/ioctl.h>
>  #include "timer_local.h"
>  
>  #ifndef PIC
> diff --git a/src/timer/timer_local.h b/src/timer/timer_local.h
> index 8040b05..eef3b06 100644
> --- a/src/timer/timer_local.h
> +++ b/src/timer/timer_local.h
> @@ -19,10 +19,9 @@
>   *
>   */
>  
> -#include <stdio.h>
> -#include <stdlib.h>
> -#include <limits.h>
>  #include "local.h"
> +#include <limits.h>
> +#include <sys/ioctl.h>
>  
>  #ifndef DOC_HIDDEN
>  typedef struct {
> diff --git a/src/timer/timer_query.c b/src/timer/timer_query.c
> index 50b098a..93d2455 100644
> --- a/src/timer/timer_query.c
> +++ b/src/timer/timer_query.c
> @@ -26,12 +26,6 @@
>   *
>   */
>  
> -#include <stdio.h>
> -#include <stdlib.h>
> -#include <unistd.h>
> -#include <string.h>
> -#include <fcntl.h>
> -#include <sys/ioctl.h>
>  #include "timer_local.h"
>  
>  static int snd_timer_query_open_conf(snd_timer_query_t **timer,
> diff --git a/src/timer/timer_query_hw.c b/src/timer/timer_query_hw.c
> index 289ca52..d0c4391 100644
> --- a/src/timer/timer_query_hw.c
> +++ b/src/timer/timer_query_hw.c
> @@ -19,12 +19,6 @@
>   *
>   */
>  
> -#include <stdio.h>
> -#include <stdlib.h>
> -#include <unistd.h>
> -#include <string.h>
> -#include <fcntl.h>
> -#include <sys/ioctl.h>
>  #include "timer_local.h"
>  
>  #ifndef PIC
> diff --git a/src/ucm/ucm_local.h b/src/ucm/ucm_local.h
> index c1655c7..3a5d2c2 100644
> --- a/src/ucm/ucm_local.h
> +++ b/src/ucm/ucm_local.h
> @@ -36,8 +36,8 @@
>  #define UC_MGR_DEBUG
>  #endif
>  
> -#include <pthread.h>
>  #include "local.h"
> +#include <pthread.h>
>  #include "use-case.h"
>  
>  #define MAX_FILE		256
> -- 
> 2.5.2
> 
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> 


More information about the Alsa-devel mailing list