Opened 4 months ago

Last modified 4 months ago

#70471 new defect

meson checks for some functions are broken are return false positives — at Initial Version

Reported by: barracuda156 Owned by:
Priority: Normal Milestone:
Component: ports Version: 2.9.3
Keywords: Cc: SoapZA, reneeotten (Renee Otten)
Port: meson

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.

Change History (0)

Note: See TracTickets for help on using tickets.