[MacPorts] #70471: meson checks for some functions are broken are return false positives
MacPorts
noreply at macports.org
Wed Jul 31 15:35:27 UTC 2024
#70471: meson checks for some functions are broken are return false positives
---------------------------+--------------------
Reporter: barracuda156 | Owner: (none)
Type: defect | Status: new
Priority: Normal | Milestone:
Component: ports | Version: 2.9.3
Resolution: | Keywords:
Port: meson |
---------------------------+--------------------
Description changed by barracuda156:
Old description:
> Issue with upstream: https://github.com/mesonbuild/meson/issues/13495
>
> Got this when preparing an update for `netatalk`, switching to `meson`:
> ```
> Running compile:
> Working directory:
> /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
> /meson-private/tmp81w99i2x
> Code:
>
> #define strnlen meson_disable_define_of_strnlen
>
> #include <limits.h>
> #undef strnlen
>
> #ifdef __cplusplus
> extern "C"
> #endif
> char strnlen (void);
>
> #if defined __stub_strnlen || defined __stub___strnlen
> fail fail fail this function is not going to work
> #endif
>
> int main(void) {
> return strnlen ();
> }
> -----------
> Command line: `/opt/local/bin/gcc-mp-14 -L/opt/local/libexec/openssl3/lib
> -L/opt/local/lib -L/opt/local/lib/db48
> -I/opt/local/libexec/openssl3/include -I/opt/local/include/db48
> /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
> /meson-private/tmp81w99i2x/testfile.c -o
> /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
> /meson-private/tmp81w99i2x/output.exe -pipe -Os -arch ppc -O0 -std=c11
> -Wl,-headerpad_max_install_names` -> 1
> stderr:
> Undefined symbols:
> "_strnlen", referenced from:
> _main in ccBiqEIa.o
> ld: symbol(s) not found
> collect2: error: ld returned 1 exit status
> -----------
> Running compile:
> Working directory:
> /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
> /meson-private/tmp5uqy20q2
> Code:
>
> int main(void) {
>
> /* With some toolchains (MSYS2/mingw for example) the compiler
> * provides various builtins which are not really implemented and
> * fall back to the stdlib where they aren't provided and fail at
> * build/link time. In case the user provides a header, including
> * the header didn't lead to the function being defined, and the
> * function we are checking isn't a builtin itself we assume the
> * builtin is not functional and we just error out. */
> #if !1 && !defined(strnlen) && !0
> #error "No definition for __builtin_strnlen found in the
> prefix"
> #endif
>
> #ifdef __has_builtin
> #if !__has_builtin(__builtin_strnlen)
> #error "__builtin_strnlen not found"
> #endif
> #elif ! defined(strnlen)
> __builtin_strnlen;
> #endif
> return 0;
> }
> -----------
> Command line: `/opt/local/bin/gcc-mp-14 -L/opt/local/libexec/openssl3/lib
> -L/opt/local/lib -L/opt/local/lib/db48
> -I/opt/local/libexec/openssl3/include -I/opt/local/include/db48
> /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
> /meson-private/tmp5uqy20q2/testfile.c -o
> /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
> /meson-private/tmp5uqy20q2/output.exe -pipe -Os -arch ppc -O0 -std=c11
> -Wl,-headerpad_max_install_names` -> 0
> Checking for function "strnlen" : YES
> Running compile:
> Working directory:
> /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
> /meson-private/tmpwm47abeg
> Code:
>
> #define strndup meson_disable_define_of_strndup
>
> #include <limits.h>
> #undef strndup
>
> #ifdef __cplusplus
> extern "C"
> #endif
> char strndup (void);
>
> #if defined __stub_strndup || defined __stub___strndup
> fail fail fail this function is not going to work
> #endif
>
> int main(void) {
> return strndup ();
> }
> -----------
> Command line: `/opt/local/bin/gcc-mp-14 -L/opt/local/libexec/openssl3/lib
> -L/opt/local/lib -L/opt/local/lib/db48
> -I/opt/local/libexec/openssl3/include -I/opt/local/include/db48
> /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
> /meson-private/tmpwm47abeg/testfile.c -o
> /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
> /meson-private/tmpwm47abeg/output.exe -pipe -Os -arch ppc -O0 -std=c11
> -Wl,-headerpad_max_install_names` -> 1
> stderr:
> Undefined symbols:
> "_strndup", referenced from:
> _main in ccYNuFXj.o
> ld: symbol(s) not found
> collect2: error: ld returned 1 exit status
> -----------
> Running compile:
> Working directory:
> /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
> /meson-private/tmpuk6wfim1
> Code:
>
> int main(void) {
>
> /* With some toolchains (MSYS2/mingw for example) the compiler
> * provides various builtins which are not really implemented and
> * fall back to the stdlib where they aren't provided and fail at
> * build/link time. In case the user provides a header, including
> * the header didn't lead to the function being defined, and the
> * function we are checking isn't a builtin itself we assume the
> * builtin is not functional and we just error out. */
> #if !1 && !defined(strndup) && !0
> #error "No definition for __builtin_strndup found in the
> prefix"
> #endif
>
> #ifdef __has_builtin
> #if !__has_builtin(__builtin_strndup)
> #error "__builtin_strndup not found"
> #endif
> #elif ! defined(strndup)
> __builtin_strndup;
> #endif
> return 0;
> }
> -----------
> Command line: `/opt/local/bin/gcc-mp-14 -L/opt/local/libexec/openssl3/lib
> -L/opt/local/lib -L/opt/local/lib/db48
> -I/opt/local/libexec/openssl3/include -I/opt/local/include/db48
> /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
> /meson-private/tmpuk6wfim1/testfile.c -o
> /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
> /meson-private/tmpuk6wfim1/output.exe -pipe -Os -arch ppc -O0 -std=c11
> -Wl,-headerpad_max_install_names` -> 0
> Checking for function "strndup" : YES
> ```
>
> Notice, `legacy-support` is not used (I even tried deactivating it), so
> `strndup` and `strnlen` are not available. But both are misdetected as
> present.
New description:
Issue with upstream: https://github.com/mesonbuild/meson/issues/13495
Got this when preparing an update for `netatalk`, switching to `meson`:
{{{
Running compile:
Working directory:
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
/meson-private/tmp81w99i2x
Code:
#define strnlen meson_disable_define_of_strnlen
#include <limits.h>
#undef strnlen
#ifdef __cplusplus
extern "C"
#endif
char strnlen (void);
#if defined __stub_strnlen || defined __stub___strnlen
fail fail fail this function is not going to work
#endif
int main(void) {
return strnlen ();
}
-----------
Command line: `/opt/local/bin/gcc-mp-14 -L/opt/local/libexec/openssl3/lib
-L/opt/local/lib -L/opt/local/lib/db48
-I/opt/local/libexec/openssl3/include -I/opt/local/include/db48
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
/meson-private/tmp81w99i2x/testfile.c -o
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
/meson-private/tmp81w99i2x/output.exe -pipe -Os -arch ppc -O0 -std=c11
-Wl,-headerpad_max_install_names` -> 1
stderr:
Undefined symbols:
"_strnlen", referenced from:
_main in ccBiqEIa.o
ld: symbol(s) not found
collect2: error: ld returned 1 exit status
-----------
Running compile:
Working directory:
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
/meson-private/tmp5uqy20q2
Code:
int main(void) {
/* With some toolchains (MSYS2/mingw for example) the compiler
* provides various builtins which are not really implemented and
* fall back to the stdlib where they aren't provided and fail at
* build/link time. In case the user provides a header, including
* the header didn't lead to the function being defined, and the
* function we are checking isn't a builtin itself we assume the
* builtin is not functional and we just error out. */
#if !1 && !defined(strnlen) && !0
#error "No definition for __builtin_strnlen found in the
prefix"
#endif
#ifdef __has_builtin
#if !__has_builtin(__builtin_strnlen)
#error "__builtin_strnlen not found"
#endif
#elif ! defined(strnlen)
__builtin_strnlen;
#endif
return 0;
}
-----------
Command line: `/opt/local/bin/gcc-mp-14 -L/opt/local/libexec/openssl3/lib
-L/opt/local/lib -L/opt/local/lib/db48
-I/opt/local/libexec/openssl3/include -I/opt/local/include/db48
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
/meson-private/tmp5uqy20q2/testfile.c -o
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
/meson-private/tmp5uqy20q2/output.exe -pipe -Os -arch ppc -O0 -std=c11
-Wl,-headerpad_max_install_names` -> 0
Checking for function "strnlen" : YES
Running compile:
Working directory:
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
/meson-private/tmpwm47abeg
Code:
#define strndup meson_disable_define_of_strndup
#include <limits.h>
#undef strndup
#ifdef __cplusplus
extern "C"
#endif
char strndup (void);
#if defined __stub_strndup || defined __stub___strndup
fail fail fail this function is not going to work
#endif
int main(void) {
return strndup ();
}
-----------
Command line: `/opt/local/bin/gcc-mp-14 -L/opt/local/libexec/openssl3/lib
-L/opt/local/lib -L/opt/local/lib/db48
-I/opt/local/libexec/openssl3/include -I/opt/local/include/db48
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
/meson-private/tmpwm47abeg/testfile.c -o
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
/meson-private/tmpwm47abeg/output.exe -pipe -Os -arch ppc -O0 -std=c11
-Wl,-headerpad_max_install_names` -> 1
stderr:
Undefined symbols:
"_strndup", referenced from:
_main in ccYNuFXj.o
ld: symbol(s) not found
collect2: error: ld returned 1 exit status
-----------
Running compile:
Working directory:
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
/meson-private/tmpuk6wfim1
Code:
int main(void) {
/* With some toolchains (MSYS2/mingw for example) the compiler
* provides various builtins which are not really implemented and
* fall back to the stdlib where they aren't provided and fail at
* build/link time. In case the user provides a header, including
* the header didn't lead to the function being defined, and the
* function we are checking isn't a builtin itself we assume the
* builtin is not functional and we just error out. */
#if !1 && !defined(strndup) && !0
#error "No definition for __builtin_strndup found in the
prefix"
#endif
#ifdef __has_builtin
#if !__has_builtin(__builtin_strndup)
#error "__builtin_strndup not found"
#endif
#elif ! defined(strndup)
__builtin_strndup;
#endif
return 0;
}
-----------
Command line: `/opt/local/bin/gcc-mp-14 -L/opt/local/libexec/openssl3/lib
-L/opt/local/lib -L/opt/local/lib/db48
-I/opt/local/libexec/openssl3/include -I/opt/local/include/db48
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
/meson-private/tmpuk6wfim1/testfile.c -o
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_net_netatalk/netatalk/work/build
/meson-private/tmpuk6wfim1/output.exe -pipe -Os -arch ppc -O0 -std=c11
-Wl,-headerpad_max_install_names` -> 0
Checking for function "strndup" : YES
}}}
Notice, `legacy-support` is not used (I even tried deactivating it), so
`strndup` and `strnlen` are not available. But both are misdetected as
present.
--
--
Ticket URL: <https://trac.macports.org/ticket/70471#comment:1>
MacPorts <https://www.macports.org/>
Ports system for macOS
More information about the macports-tickets
mailing list