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