[alsa-devel] [PATCH] alsamixer: define _GNU_SOURCE to get exp10
Fixes Master, Headphones and Speaker stuck at -8 percentage after building with Clang 7.0.1 and getting warned about implicit declaration of exp10, which is behind _GNU_SOURCE as a non-standard feature. Thanks Takashi Iwai for the CFLAGS suggestion on the mailing list. GCC build is not affected, so not adding a compiler check to the configure script.
uClibc-ng has got exp10 since 1.0.12, so the fallback macro is no longer needed. However, alsa-utils relies on gettext so might need further patches to actually work on uClibc systems.
Signed-off-by: makepost makepost@firemail.cc
diff --git a/alsamixer/volume_mapping.c b/alsamixer/volume_mapping.c index 94bd0fe..48cfbe2 100644 --- a/alsamixer/volume_mapping.c +++ b/alsamixer/volume_mapping.c @@ -36,11 +36,6 @@ #include <stdbool.h> #include "volume_mapping.h"
-#ifdef __UCLIBC__ -/* 10^x = 10^(log e^x) = (e^x)^log10 = e^(x * log 10) */ -#define exp10(x) (exp((x) * log(10))) -#endif /* __UCLIBC__ */ - #define MAX_LINEAR_DB_SCALE 24
static inline bool use_linear_dB_scale(long dBmin, long dBmax) diff --git a/configure.ac b/configure.ac index 7938996..0d54942 100644 --- a/configure.ac +++ b/configure.ac @@ -350,6 +350,8 @@ if test x$alsamixer = xtrue; then
AC_MSG_RESULT([$CURSESLIB]) + + CFLAGS="$CFLAGS -D_GNU_SOURCE"
AC_SUBST(CURSESINC)
Dne 16.1.2019 v 02:35 makepost@firemail.cc napsal(a):
Fixes Master, Headphones and Speaker stuck at -8 percentage after building with Clang 7.0.1 and getting warned about implicit declaration of exp10, which is behind _GNU_SOURCE as a non-standard feature. Thanks Takashi Iwai for the CFLAGS suggestion on the mailing list. GCC build is not affected, so not adding a compiler check to the configure script.
uClibc-ng has got exp10 since 1.0.12, so the fallback macro is no longer needed. However, alsa-utils relies on gettext so might need further patches to actually work on uClibc systems.
Signed-off-by: makepost makepost@firemail.cc
diff --git a/alsamixer/volume_mapping.c b/alsamixer/volume_mapping.c index 94bd0fe..48cfbe2 100644 --- a/alsamixer/volume_mapping.c +++ b/alsamixer/volume_mapping.c @@ -36,11 +36,6 @@ #include <stdbool.h> #include "volume_mapping.h"
-#ifdef __UCLIBC__ -/* 10^x = 10^(log e^x) = (e^x)^log10 = e^(x * log 10) */ -#define exp10(x) (exp((x) * log(10))) -#endif /* __UCLIBC__ */
#define MAX_LINEAR_DB_SCALE 24
static inline bool use_linear_dB_scale(long dBmin, long dBmax)
diff --git a/configure.ac b/configure.ac index 7938996..0d54942 100644 --- a/configure.ac +++ b/configure.ac @@ -350,6 +350,8 @@ if test x$alsamixer = xtrue; then
AC_MSG_RESULT([$CURSESLIB])
- CFLAGS="$CFLAGS -D_GNU_SOURCE"
It would be propably better to put this to the local makefile for alsamixer:
diff --git a/alsamixer/Makefile.am b/alsamixer/Makefile.am index 259b29e..249e8f8 100644 --- a/alsamixer/Makefile.am +++ b/alsamixer/Makefile.am @@ -1,4 +1,4 @@ -AM_CFLAGS = @CURSES_CFLAGS@ -DCURSESINC="@CURSESINC@" +AM_CFLAGS = -D_GNU_SOURCE @CURSES_CFLAGS@ -DCURSESINC="@CURSESINC@" LDADD = @CURSESLIB@
bin_PROGRAMS = alsamixer
The reason, why the problem is not visible with the standard gcc/glibc/ncurses is that this definition is activated by ncurses:
$ find alsamixer -type f -exec grep -H GNU_SOURCE {} ; alsamixer/Makefile:CURSES_CFLAGS = -D_GNU_SOURCE -D_DEFAULT_SOURCE alsamixer/Makefile:NCURSESW_CFLAGS = -D_GNU_SOURCE -D_DEFAULT_SOURCE alsamixer/Makefile:AM_CFLAGS = -D_GNU_SOURCE -D_DEFAULT_SOURCE -DCURSESINC="<ncurses.h>"
Jaroslav
These flags vary between systems, on the Gentoo where I have access the Makefile generated from e1aa6d4 contains:
$ ack '^(AM|CURSES|NCURSESW)_CFLAGS' alsamixer/Makefile CURSES_CFLAGS = -I/usr/include/ncursesw NCURSESW_CFLAGS = -I/usr/include/ncursesw AM_CFLAGS = -I/usr/include/ncursesw -DCURSESINC="<ncurses.h>"
Files in /usr/include/ncursesw don't mention _GNU_SOURCE so I'm baffled where GCC gets it from.
Indeed the local alsamixer/Makefile.am is a more suitable place to put the flag. A newbie question follows, should I somehow update the patch with your edit and reply to this message, or did you generate the diff from an already edited version?
On 2019-01-16 14:22, Jaroslav Kysela wrote:
Dne 16.1.2019 v 02:35 makepost@firemail.cc napsal(a):
Fixes Master, Headphones and Speaker stuck at -8 percentage after building with Clang 7.0.1 and getting warned about implicit declaration of exp10, which is behind _GNU_SOURCE as a non-standard feature. Thanks Takashi Iwai for the CFLAGS suggestion on the mailing list. GCC build is not affected, so not adding a compiler check to the configure script.
uClibc-ng has got exp10 since 1.0.12, so the fallback macro is no longer needed. However, alsa-utils relies on gettext so might need further patches to actually work on uClibc systems.
Signed-off-by: makepost makepost@firemail.cc
diff --git a/alsamixer/volume_mapping.c b/alsamixer/volume_mapping.c index 94bd0fe..48cfbe2 100644 --- a/alsamixer/volume_mapping.c +++ b/alsamixer/volume_mapping.c @@ -36,11 +36,6 @@ #include <stdbool.h> #include "volume_mapping.h"
-#ifdef __UCLIBC__ -/* 10^x = 10^(log e^x) = (e^x)^log10 = e^(x * log 10) */ -#define exp10(x) (exp((x) * log(10))) -#endif /* __UCLIBC__ */
#define MAX_LINEAR_DB_SCALE 24
static inline bool use_linear_dB_scale(long dBmin, long dBmax)
diff --git a/configure.ac b/configure.ac index 7938996..0d54942 100644 --- a/configure.ac +++ b/configure.ac @@ -350,6 +350,8 @@ if test x$alsamixer = xtrue; then
AC_MSG_RESULT([$CURSESLIB])
- CFLAGS="$CFLAGS -D_GNU_SOURCE"
It would be propably better to put this to the local makefile for alsamixer:
diff --git a/alsamixer/Makefile.am b/alsamixer/Makefile.am index 259b29e..249e8f8 100644 --- a/alsamixer/Makefile.am +++ b/alsamixer/Makefile.am @@ -1,4 +1,4 @@ -AM_CFLAGS = @CURSES_CFLAGS@ -DCURSESINC="@CURSESINC@" +AM_CFLAGS = -D_GNU_SOURCE @CURSES_CFLAGS@ -DCURSESINC="@CURSESINC@" LDADD = @CURSESLIB@
bin_PROGRAMS = alsamixer
The reason, why the problem is not visible with the standard gcc/glibc/ncurses is that this definition is activated by ncurses:
$ find alsamixer -type f -exec grep -H GNU_SOURCE {} ; alsamixer/Makefile:CURSES_CFLAGS = -D_GNU_SOURCE -D_DEFAULT_SOURCE alsamixer/Makefile:NCURSESW_CFLAGS = -D_GNU_SOURCE -D_DEFAULT_SOURCE alsamixer/Makefile:AM_CFLAGS = -D_GNU_SOURCE -D_DEFAULT_SOURCE -DCURSESINC="<ncurses.h>"
Jaroslav
Dne 17.1.2019 v 01:16 makepost@firemail.cc napsal(a):
These flags vary between systems, on the Gentoo where I have access the Makefile generated from e1aa6d4 contains:
$ ack '^(AM|CURSES|NCURSESW)_CFLAGS' alsamixer/Makefile CURSES_CFLAGS = -I/usr/include/ncursesw NCURSESW_CFLAGS = -I/usr/include/ncursesw AM_CFLAGS = -I/usr/include/ncursesw -DCURSESINC="<ncurses.h>"
Files in /usr/include/ncursesw don't mention _GNU_SOURCE so I'm baffled where GCC gets it from.
Indeed the local alsamixer/Makefile.am is a more suitable place to put the flag. A newbie question follows, should I somehow update the patch with your edit and reply to this message, or did you generate the diff from an already edited version?
Applied to the repository:
http://git.alsa-project.org/?p=alsa-utils.git;a=commitdiff;h=116488e5f2f1b89...
Thanks, Jaroslav
On 2019-01-16 14:22, Jaroslav Kysela wrote:
Dne 16.1.2019 v 02:35 makepost@firemail.cc napsal(a):
Fixes Master, Headphones and Speaker stuck at -8 percentage after building with Clang 7.0.1 and getting warned about implicit declaration of exp10, which is behind _GNU_SOURCE as a non-standard feature. Thanks Takashi Iwai for the CFLAGS suggestion on the mailing list. GCC build is not affected, so not adding a compiler check to the configure script.
uClibc-ng has got exp10 since 1.0.12, so the fallback macro is no longer needed. However, alsa-utils relies on gettext so might need further patches to actually work on uClibc systems.
Signed-off-by: makepost makepost@firemail.cc
diff --git a/alsamixer/volume_mapping.c b/alsamixer/volume_mapping.c index 94bd0fe..48cfbe2 100644 --- a/alsamixer/volume_mapping.c +++ b/alsamixer/volume_mapping.c @@ -36,11 +36,6 @@ #include <stdbool.h> #include "volume_mapping.h"
-#ifdef __UCLIBC__ -/* 10^x = 10^(log e^x) = (e^x)^log10 = e^(x * log 10) */ -#define exp10(x) (exp((x) * log(10))) -#endif /* __UCLIBC__ */
#define MAX_LINEAR_DB_SCALE 24
static inline bool use_linear_dB_scale(long dBmin, long dBmax)
diff --git a/configure.ac b/configure.ac index 7938996..0d54942 100644 --- a/configure.ac +++ b/configure.ac @@ -350,6 +350,8 @@ if test x$alsamixer = xtrue; then
AC_MSG_RESULT([$CURSESLIB])
- CFLAGS="$CFLAGS -D_GNU_SOURCE"
It would be propably better to put this to the local makefile for alsamixer:
diff --git a/alsamixer/Makefile.am b/alsamixer/Makefile.am index 259b29e..249e8f8 100644 --- a/alsamixer/Makefile.am +++ b/alsamixer/Makefile.am @@ -1,4 +1,4 @@ -AM_CFLAGS = @CURSES_CFLAGS@ -DCURSESINC="@CURSESINC@" +AM_CFLAGS = -D_GNU_SOURCE @CURSES_CFLAGS@ -DCURSESINC="@CURSESINC@" LDADD = @CURSESLIB@
bin_PROGRAMS = alsamixer
The reason, why the problem is not visible with the standard gcc/glibc/ncurses is that this definition is activated by ncurses:
$ find alsamixer -type f -exec grep -H GNU_SOURCE {} ; alsamixer/Makefile:CURSES_CFLAGS = -D_GNU_SOURCE -D_DEFAULT_SOURCE alsamixer/Makefile:NCURSESW_CFLAGS = -D_GNU_SOURCE -D_DEFAULT_SOURCE alsamixer/Makefile:AM_CFLAGS = -D_GNU_SOURCE -D_DEFAULT_SOURCE -DCURSESINC="<ncurses.h>"
Jaroslav
participants (2)
-
Jaroslav Kysela
-
makepost@firemail.cc