pkgsrc-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

turn off CHECK_SHLIBS on macOS?



Hello,

Building gettext-tools on macOS fails:

    => Creating binary package /Users/dev/usr/pkgsrc/devel/gettext-tools/work/.packages/gettext-tools-0.22.5.tgz
    ===> Building binary package for gettext-tools-0.22.5
    => Creating binary package /Users/dev/usr/pkgsrc/packages/All/gettext-tools-0.22.5.tgz
    ===> Installing binary package of gettext-tools-0.22.5
    pkg_add: gettext-tools-0.22.5: missing required library: @rpath/lib/libgettextlib-0.22.5.dylib
    pkg_add: gettext-tools-0.22.5: missing required library: @rpath/lib/libgettextpo.dylib
    pkg_add: gettext-tools-0.22.5: missing required library: @rpath/lib/libgettextsrc-0.22.5.dylib
    pkg_add: gettext-tools-0.22.5: missing required library: @rpath/lib/libgettextsrc.dylib
    pkg_add: gettext-tools-0.22.5: missing required library: @rpath/lib/libiconv.2.dylib
    pkg_add: gettext-tools-0.22.5: missing required library: @rpath/lib/libintl.8.dylib
    pkg_add: gettext-tools-0.22.5: missing required library: @rpath/lib/libncurses.6.dylib
    pkg_add: gettext-tools-0.22.5: missing required library: @rpath/lib/libtextstyle.0.dylib
    pkg_add: gettext-tools-0.22.5: missing required library: @rpath/lib/libtextstyle.dylib
    pkg_add: 1 package addition failed
    *** Error code 1

the +BUILD_INFO file contains:

    PROVIDES=/Users/dev/pkg/lib/libgettextlib-0.22.5.dylib
    PROVIDES=/Users/dev/pkg/lib/libgettextlib.dylib
    PROVIDES=/Users/dev/pkg/lib/libgettextpo.0.dylib
    PROVIDES=/Users/dev/pkg/lib/libgettextpo.dylib
    PROVIDES=/Users/dev/pkg/lib/libgettextsrc-0.22.5.dylib
    PROVIDES=/Users/dev/pkg/lib/libgettextsrc.dylib
    PROVIDES=/Users/dev/pkg/lib/libtextstyle.0.dylib
    PROVIDES=/Users/dev/pkg/lib/libtextstyle.dylib
    REQUIRES=@rpath/lib/libgettextlib-0.22.5.dylib
    REQUIRES=@rpath/lib/libgettextpo.dylib
    REQUIRES=@rpath/lib/libgettextsrc-0.22.5.dylib
    REQUIRES=@rpath/lib/libgettextsrc.dylib
    REQUIRES=@rpath/lib/libiconv.2.dylib
    REQUIRES=@rpath/lib/libintl.8.dylib
    REQUIRES=@rpath/lib/libncurses.6.dylib
    REQUIRES=@rpath/lib/libtextstyle.0.dylib
    REQUIRES=@rpath/lib/libtextstyle.dylib

Something somewhere is doing 'otool -L' and generating REQUIRES lines.

By the way, notice the circular dependency: the package both PROVIDES and REQUIRES libgettextlib-0.22.5.dylib, because the output of otool -L looks like this:

    % otool -L work/.destdir/Users/dev/pkg/lib/libgettextlib-0.22.5.dylib 
    work/.destdir/Users/dev/pkg/lib/libgettextlib-0.22.5.dylib:
        @rpath/lib/libgettextlib-0.22.5.dylib (compatibility version 0.0.0, current version 0.0.0)
        /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 3208.0.0)
        @rpath/lib/libintl.8.dylib (compatibility version 13.0.0, current version 13.0.0)
        @rpath/lib/libiconv.2.dylib (compatibility version 9.0.0, current version 9.1.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1351.0.0)

The first line is always the library's owned "shared library ID."

So it would be better to parse the output of 'otool -l' (lowercase L):

    % otool -l work/.destdir/Users/dev/pkg/lib/libgettextlib-0.22.5.dylib | grep -A2 LC_LOAD_DYLIB
              cmd LC_LOAD_DYLIB
          cmdsize 104
             name /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (offset 24)
    --
              cmd LC_LOAD_DYLIB
          cmdsize 56
             name @rpath/lib/libintl.8.dylib (offset 24)
    --
              cmd LC_LOAD_DYLIB
          cmdsize 56
             name @rpath/lib/libiconv.2.dylib (offset 24)
    --
              cmd LC_LOAD_DYLIB
          cmdsize 56
             name /usr/lib/libSystem.B.dylib (offset 24)

or 'dyld_info -linked_dylibs':

    % dyld_info -linked_dylibs work/.destdir/Users/dev/pkg/lib/libgettextlib-0.22.5.dylib 
    work/.destdir/Users/dev/pkg/lib/libgettextlib-0.22.5.dylib [arm64]:
        -linked_dylibs:
            attributes     load path
                           /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
                           @rpath/lib/libintl.8.dylib
                           @rpath/lib/libiconv.2.dylib
                           /usr/lib/libSystem.B.dylib

and then resolve the rpaths:

    % otool -l work/.destdir/Users/dev/pkg/lib/libgettextlib-0.22.5.dylib | grep -A2 LC_RPATH 
              cmd LC_RPATH
          cmdsize 32
             path @loader_path/.. (offset 12)

In the meantime, is it possible to turn off CHECK_SHLIBS entirely?

This doesn't work:

    CHECK_SHLIBS=no bmake reinstall

The only way I could get it to install was by patching mk/platform/Darwin.mk:

--- mk/platform/Darwin.mk.orig	2025-08-11 12:53:06
+++ mk/platform/Darwin.mk	2025-08-11 12:53:16
@@ -46,7 +46,7 @@
 .else
 ECHO_N?=	${ECHO} -n
 .endif
-LDD?=		/usr/bin/otool -L
+LDD=
 IMAKE_MAKE?=	${MAKE}		# program which gets invoked by imake
 PKGLOCALEDIR?=	share
 PS?=		/bin/ps


Home | Main Index | Thread Index | Old Index