[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