Message ID | a4d4f393cbf2c09fee38e9144429690c@firemail.cc (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | alsamixer: define _GNU_SOURCE to get exp10 | expand |
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=116488e5f2f1b897084bd151381ee254e1cc177d 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
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)
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>