[MacPorts] #70471: meson checks for some functions are broken are return false positives
MacPorts
noreply at macports.org
Wed Jul 31 15:35:01 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
Keywords: | Port: meson
--------------------------+--------------------
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>
MacPorts <https://www.macports.org/>
Ports system for macOS
More information about the macports-tickets
mailing list