alsamixer: define _GNU_SOURCE to get exp10
diff mbox series

Message ID a4d4f393cbf2c09fee38e9144429690c@firemail.cc
State New
Headers show
Series
  • alsamixer: define _GNU_SOURCE to get exp10
Related show

Commit Message

makepost@firemail.cc Jan. 16, 2019, 1:35 a.m. UTC
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>

Comments

Jaroslav Kysela Jan. 16, 2019, 12:22 p.m. UTC | #1
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
makepost@firemail.cc Jan. 17, 2019, 12:16 a.m. UTC | #2
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
Jaroslav Kysela Jan. 18, 2019, 8:42 a.m. UTC | #3
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

Patch
diff mbox series

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)