Opened 9 months ago
Last modified 4 weeks ago
#2423 open defect
Undeclared constant 'M_PI' in xvid_vbr macro 'DEG2RAD'
Reported by: | bug | Owned by: | beastd |
---|---|---|---|
Priority: | normal | Component: | build system |
Version: | HEAD | Severity: | blocker |
Keywords: | xvid_vbr maths constants | Cc: | LigH |
Blocked By: | Blocking: | ||
Reproduced by developer: | no | Analyzed by developer: | no |
Description (last modified by )
Summary of the bug:
Undeclared constant 'M_PI' in xvid_vbr macro 'DEG2RAD'
How to reproduce:
Compiling mencoder in media-autobuild suite (MSYS2/MinGW, GCC 13.2)
xvid_vbr.c: In function 'vbr_init_2pass2': xvid_vbr.c:44:18: error: 'M_PI' undeclared (first use in this function) 44 | #define DEG2RAD (M_PI / 180.0) | ^~~~ xvid_vbr.c:887:53: note: in expansion of macro 'DEG2RAD' 887 | (1.0 + sin(DEG2RAD * (state->average_frame * 90.0 / state->alt_curve_low_diff))); | ^~~~~~~ xvid_vbr.c:44:18: note: each undeclared identifier is reported only once for each function it appears in 44 | #define DEG2RAD (M_PI / 180.0) | ^~~~ xvid_vbr.c:887:53: note: in expansion of macro 'DEG2RAD' 887 | (1.0 + sin(DEG2RAD * (state->average_frame * 90.0 / state->alt_curve_low_diff))); | ^~~~~~~ xvid_vbr.c: In function 'vbr_getquant_2pass2': xvid_vbr.c:44:18: error: 'M_PI' undeclared (first use in this function) 44 | #define DEG2RAD (M_PI / 180.0) | ^~~~ xvid_vbr.c:1250:84: note: in expansion of macro 'DEG2RAD' 1250 | sin(DEG2RAD * ((dbytes - state->average_frame) * 90.0 / state->alt_curve_high_diff))); | ^~~~~~~
Attachments (5)
Change History (35)
comment:1 by , 9 months ago
Description: | modified (diff) |
---|
by , 8 months ago
Attachment: | 0001-xvid_vbr-Include-lavu-mathematics.h-to-make-sure-the.patch added |
---|
comment:2 by , 8 months ago
Status: | new → open |
---|
comment:3 by , 8 months ago
The reason might be GCC 14.1 with stricter default warnings-as-errors than 13.2 before.
Patch applied; error moved to libaf/af_equalizer.c
comment:4 by , 8 months ago
Cc: | added |
---|
comment:5 by , 8 months ago
Ah OK that might be related. GCC 14 will definitely need some more work...
I have put a patch on the mplayer development mailing list:
https://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2024-April/074173.html
But it is not really the way to fix those problems, but if you need GCC 14 build, it should probably work in practice.
comment:6 by , 8 months ago
I may mention it in the M-AB-S issues, but will probably wait for your official commit and the closing of this ticket (there is only little need for mplayer/mencoder in these days). For now, thank you for your efforts.
comment:7 by , 7 months ago
So that was in April ... the mailing list contains a few steps of success but no final result, AFAICS.
And April is the last archived month of this mailing list. May 2024 does not even exist anymore.
comment:9 by , 3 months ago
Could you please try to build again with latest MPlayer development version (SVN r38666)?
Edit:
And possibly with attachment:0001-xvid_vbr-Include-lavu-mathematics.h-to-make-sure-the.patch applied on top.
by , 3 months ago
Attachment: | mplayer_unpatched.zip added |
---|
Build and install logs of unpatched mplayer
by , 3 months ago
Attachment: | 0001-Include-lavu-mathematics.h-everywhere-M_PI-is-used.patch added |
---|
comment:11 by , 3 months ago
Please give it a try with this new patch attachment:0001-Include-lavu-mathematics.h-everywhere-M_PI-is-used.patch I just attached.
comment:12 by , 3 months ago
On it. Will attach when done. The logs are huge now, many more warnings and errors...
comment:13 by , 3 months ago
@LigH: The latest errors look as if they are because of your LDFLAGS
-D_FORTIFY_SOURCE=2 -fstack-protector-strong -mtune=generic -O2 -pipe -D__USE_MINGW_ANSI_STDIO=1 -static-libgcc -static-libstdc++
Not really sure about this, but maybe try to add standard C++ lib to the LDFLAGS:
-D_FORTIFY_SOURCE=2 -fstack-protector-strong -mtune=generic -O2 -pipe -D__USE_MINGW_ANSI_STDIO=1 -static-libgcc -static-libstdc++ -lstdc++
Did statically linking standard C++ lib work before?
comment:14 by , 3 months ago
I am not really a developer, I only let the media-autobuild suite run and hope that it builds mplayer successfully; if not, I can interpret the errors as halfwit and ask more competent people for opinions.
I mentioned your suggestion in the M-AB-S issue 2702
comment:16 by , 2 months ago
Solution in M-AB-S: Use gnu11
instead of c11
as C++ version in configure, and CXX
instead of CC
as compiler and linker
follow-up: 21 comment:18 by , 5 weeks ago
1 month later ... was it useful?
I think so!
Not yet entirely sure on how we fix in MPlayer sources, but I think I understand more of the background now...
With latest M-AB-S it worked for you, right?
Could you also try to build with my latest patch applied and without the grep_or_sed gnu11 configure 's/c11/gnu11/g'
(in build/media-suite_compile.sh
around line 2514) of the M-AB-S fix?
comment:21 by , 4 weeks ago
Sorry if it was somehow misleading.
I meant the latest patch in this ticket: attachment:0001-Include-lavu-mathematics.h-everywhere-M_PI-is-used.patch
Alternatively it's also on the developer list here:
https://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2024-December/074244.html
Replying to beastd:
Could you also try to build with my latest patch applied and without the
grep_or_sed gnu11 configure 's/c11/gnu11/g'
(inbuild/media-suite_compile.sh
around line 2514) of the M-AB-S fix?
The idea is that my patch makes the gnu11
part of the M-AB-S fix unnecessary.
comment:22 by , 4 weeks ago
I tested that patch already in comment:12, see my attachment there. I could not find a valid method to add the stdc++ lib (as you suggested in comment:13) in M-AB-S. All attempts are documented in M-AB-S issue 2702, linked in comment:14.
comment:23 by , 4 weeks ago
I meant did you re-test with my patch and this line of the M-AB-S fix removed?
Or am I misunderstanding building MPlayer with M-AB-S works again for you since that commit?
https://github.com/m-ab-s/media-autobuild_suite/commit/e986b33ca115517dc4e48655bb0a9db933619605
follow-up: 25 comment:24 by , 4 weeks ago
Building mplayer did not work, whatever I tried, until Chris Degawa commited the changes in comment:16; so I see no reason to revert it and try your patch once again, because I would be back to the fruitless efforts before that commit, it would mean to go back to comment:12 as far as I understand it.
Building mplayer works in M-AB-S as it is right now. With Chris Degawa's commit from comment:16.
comment:25 by , 4 weeks ago
Replying to LigH:
Building mplayer did not work, whatever I tried, until Chris Degawa commited the changes in comment:16; so I see no reason to revert it and try your patch once again, because I would be back to the fruitless efforts before that commit, it would mean to go back to comment:12 as far as I understand it.
You misunderstand me.
I want you to only revert one line of Degawa's change because that should be fixed when my patch is applied. If it works that would be confirmed.
I also want to fix the remaining problem, but I'm not clear on how to do it as of now.
Normally we do not use a C++ compiler to do the linking step and it might have undesired side effects. That's why I'm trying to understand that part of the problem and if there is possibly a better alternative.
follow-up: 27 comment:26 by , 4 weeks ago
Christopher Degawa is the competent person here, not me. I believe to have understood that if you want to link the C++ Standard library, you have to use the C++ linker.
I commented out the one line with grep_or_sed gnu11 configure 's/c11/gnu11/g'
and the constant M_PI
was unknown again.
So I un-commented that line again.
Instead, now I commented out sed -i '/%\$(EXESUF):/{n; s/\$(CC)/\$(CXX)/g};/mencoder$(EXESUF)/{n; s/\$(CC)/\$(CXX)/g}' Makefile
which caused the linker to fail due to undefined references to several std::
methods (especially std::__cxx11::
).
comment:27 by , 4 weeks ago
Replying to LigH:
I commented out the one line with
grep_or_sed gnu11 configure 's/c11/gnu11/g'
and the constantM_PI
was unknown again.
Thanks for testing.
But was my patch applied to the MPlayer source?
If yes could you give me the compiler errors?
So I un-commented that line again.
Instead, now I commented out
sed -i '/%\$(EXESUF):/{n; s/\$(CC)/\$(CXX)/g};/mencoder$(EXESUF)/{n; s/\$(CC)/\$(CXX)/g}' Makefile
which caused the linker to fail due to undefined references to severalstd::
methods (especiallystd::__cxx11::
).
Yes, that was to be expected. That's why I didn't ask you to do it.
follow-up: 29 comment:28 by , 4 weeks ago
OK, I am sorry, it was late night when I tried it. New attempt, edits in media-suite_compile.sh lines 2583-2587:
grep_or_sed windows libmpcodecs/ad_spdif.c '/#include "mp_msg.h/ a\#include <windows.h>' # grep_or_sed gnu11 configure 's/c11/gnu11/g' do_patch "https://trac.mplayerhq.hu/raw-attachment/ticket/2423/0001-Include-lavu-mathematics.h-everywhere-M_PI-is-used.patch" # shellcheck disable=SC2016 sed -i '/%\$(EXESUF):/{n; s/\$(CC)/\$(CXX)/g};/mencoder$(EXESUF)/{n; s/\$(CC)/\$(CXX)/g}' Makefile
And mplayer builds.
comment:29 by , 4 weeks ago
Replying to LigH:
And mplayer builds.
Ok, great. Thanks for confirming!
If there are no comments on the developer list, I plan to commit the patch to the SVN repo soon.
For the C++ linking problem I need to investigate a bit more what a solution could look like.
We cannot just use the solution from M-AB-S because MPlayer is written in C and therefore unconditionally using a C++ compiler for linking is not a good idea.
comment:30 by , 4 weeks ago
The name giving part (M_PI
problem) of this issue is solved with MPlayer SVN r38667 .
The C++ (static) linking problem that was found as well, is not solved yet.
Thus I keep this ticket open for now.
Thanks for the report!
Do you know what changed so this is a problem now?
For me it always worked so far. Unfortunately
M_PI
seems to be in not even a single C standard so far...Does attachment:0001-xvid_vbr-Include-lavu-mathematics.h-to-make-sure-the.patch fix the problem for your builds?