Opened 6 months ago

Closed 5 months ago

Last modified 5 months ago

#70107 closed defect (fixed)

fastfetch: dyld[----]: Symbol not found : (_AVCaptureDeviceTypeExternal)

Reported by: TopHatProductions115new (TopHatProductions115) Owned by: herbygillot (Herby Gillot)
Priority: Normal Milestone:
Component: ports Version: 2.9.3
Keywords: Cc:
Port: fastfetch

Description

The fastfetch package recently stopped working recently. Whenever I attempt to run it, I receive an error that looks like this:

dyld[----]: Symbol not found : (_AVCaptureDeviceTypeExternal)
  Referenced from: '/opt/local/bin/fastfetch'
  Expected in: '/System/Library/Frameworks/AVFoundation.framework/Versions/A/AVFoundation'
[1]    ----  abort      fastfetch

I've tried updating packages and reinstalling fastfetch, but the error still appears.

I'm running macOS 12.7.5, in a VM. Please let me know if you want more information attached to this ticket.

Change History (6)

comment:1 Changed 6 months ago by TopHatProductions115new (TopHatProductions115)

comment:2 Changed 6 months ago by ryandesign (Ryan Carsten Schmidt)

Cc: herbygillot removed
Owner: set to herbygillot
Status: newassigned
Summary: Unable to Run fastfetchfastfetch: dyld[----]: Symbol not found : (_AVCaptureDeviceTypeExternal)

Would this potentially be related to the issue?

Perhaps, to the extent that you are on macOS 12, and the error message says it cannot find AVCaptureDeviceTypeExternal, and AVCaptureDeviceTypeExternal seems to have been introduced in macOS 14.

The only place AVCaptureDeviceTypeExternal is used in the code is here:

https://github.com/fastfetch-cli/fastfetch/blob/7c1b6c6a10b9272772e6db634715f1d57839dec9/src/detection/camera/camera_apple.m#L16-L25

    #ifdef MAC_OS_VERSION_14_0
    if (@available(macOS 14.0, *))
    {
        deviceType = AVCaptureDeviceTypeExternal;
    }
    else
    #endif
    {
        deviceType = AVCaptureDeviceTypeExternalUnknown;
    }

I can't explain why code guarded by checks (both compile-time and runtime) for macOS 14 would ever be used on macOS versions earlier than 14.

The code was just changed two weeks ago specifically for the purpose of better supporting older macOS versions; the author of this PR said it worked for them on macOS 10.13:

https://github.com/fastfetch-cli/fastfetch/pull/936

On macOS 12 the newest macOS SDK provided by your Xcode and/or command line tools should be 13. MAC_OS_VERSION_14_0 is only defined in the macOS 14 and later SDKs. So the code that references AVCaptureDeviceTypeExternal should have been hidden by that #ifdef and should not have been seen by your compiler. What version of Xcode and the command line tools do you have installed? Have you done anything unusual with them, like manually added the macOS 14 SDK or made any modifications to the SDKs? Do you recall whether the port compiled from source on your system or whether you received a binary from our servers?

comment:3 Changed 6 months ago by ryandesign (Ryan Carsten Schmidt)

Ah, I see: The Portfile contains the line platforms any. This means the Portfile author believes the port installs the same exact files regardless of which version of which OS the user is using. This is evidently incorrect and needs to be removed. You must have received a binary built on our macOS 14 build machine. The revision should be increased when this line is removed so that users are prompted to upgrade to the fixed version.

comment:4 Changed 6 months ago by ryandesign (Ryan Carsten Schmidt)

Any Portfile setting platforms any and not setting supported_archs is potentially suspicious. The list of those Portfiles:

port file all|sort -u|xargs grep -El '^[[:space:]]*platforms.*[[:space:]]any'|xargs grep -EL '^[[:space:]]*supported_archs'

comment:5 Changed 5 months ago by ryandesign (Ryan Carsten Schmidt)

Resolution: fixed
Status: assignedclosed

In dcc8afbc6daeb322d0a0f1fdd84d6a13b96979cc/macports-ports (master):

fastfetch: Not platforms any

Closes: #70107
Closes: #70237

comment:6 Changed 5 months ago by ryandesign (Ryan Carsten Schmidt)

I filed #70240 to track enhancing port lint to notice this type of problem.

Note: See TracTickets for help on using tickets.