This is my first M1 Mac and the experience has been a nightmare so far. I cannot install basically any package that requires compilation as it fails every time with error messages that don't mean anything to me. For some context, I am running on a Mac Studio with an M1 Max chip on MacOS Monterey 12.6.
More context:
I installed my R version 4.0.5 using rig
I have installed the XCode command line tools
I have used Homebrew to install many things that I had hoped would help but have no as of yet
Many forum answers across the web have me just trying random things hoping it will work but nothing so far.
As an example, when trying to install systemfonts:
ld: warning: directory not found for option '-L/opt/homebrew/Cellar/libpng/1.6.37/lib'
ld: library not found for -lpng16
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [systemfonts.so] Error 1
ERROR: compilation failed for package 'systemfonts'
* removing '/Users/matt/Library/R/4.0/library/systemfonts'
* restoring previous '/Users/matt/Library/R/4.0/library/systemfonts'
Warning in install.packages :
installation of package 'systemfonts' had non-zero exit status
The downloaded source packages are in
'/private/var/folders/64/sp5m83kj2_5fl9bcwbdv1s200000gn/T/Rtmp26np4o/downloaded_packages'
I honestly don't even know where to begin to figure out the issue. I have almost never had anything like this come up on any previous Mac I've owned.
I still have no solution. Thankfully I can install package binaries or from source when compilation is not required. But I have tried many things to no real success. Something is wrong with the toolchain for compilation on this M1 Mac and I don't really know how to fix it. Hoping an M1 Mac super user will show up and provide some guidance.
I would say that other issue is unrelated. That appears to be a package that assumes x86 and dies on an Apple Silicon mac.
Your issue appears to me to be an issue with homebrew and possibly pkg-config. The configuration step of the build is picking up that there should be a copy of libpng16 in in /opt/homebrew/Cellar/libpng/1.6.37/lib/ but then when the linker stage runs, it's not finding it there. If you open a Terminal and run ls -l /opt/homebrew/Cellar/libpng/1.6.37/lib/ do you see libpng16.dylib and/or libpng16.a?
I have had homebrew packages accidentally get picked up by pkg-config before. They try to avoid it by not symlinking packages that macOS provides in the developer tools, but sometimes stuff happens with paths and wrong things slip in.
Do you have a ~/.R/Makevars file? That can often help get R packages to compile correctly. Here's my current working one from my M1 MacBook Pro:
If you open a Terminal and run ls -l /opt/homebrew/Cellar/libpng/1.6.37/lib/ do you see libpng16.dylib and/or libpng16.a ?
No, I get the following: "/opt/homebrew/Cellar/libpng/1.6.37/lib": No such file or directory (os error 2). For extra context, I do have libpng/1.6.38 and the result of ls -l is:
drwxr-xr-x - matt 23 Sep 12:27 pkgconfig/
lrwxr-xr-x 10 matt 14 Sep 13:42 libpng.a -> libpng16.a
lrwxr-xr-x 14 matt 14 Sep 13:42 libpng.dylib -> libpng16.dylib
.rw-r--r-- 210k matt 23 Sep 12:27 libpng16.16.dylib
.rw-r--r-- 261k matt 14 Sep 13:42 libpng16.a
lrwxr-xr-x 17 matt 14 Sep 13:42 libpng16.dylib -> libpng16.16.dylib
Why isn't the...compiler...linker...using/finding 1.6.38? I hardly even know what questions to be asking.
Do you have a ~/.R/Makevars file?
I don't currently, and I don't recall having ever needed one in 10+ years running R on a Mac. Is this something new for Apple Silicon?
The Makevars file is something that has always existed for R (cross plaform; Mac, Unix, Windows). It's just a way to ensure that the build environment that R picks up is correct by being explicit about various make variables.
My next debugging suggestion would be to run pkg-config --cflags --libs libpng16 to see what the compiler would currently be picking up. When I run it on my M1 MBP with macOS 12.5, XCode 14 (plus the command line utils), R 4.2.1, and homebrew up to date (I ran brew upgrade 5 minutes ago) I get:
So I get the same result as you. Not sure why the compiler is trying to use a version that doesn't exist, when one does. I tried running brew upgrade and brew cleanup and still get the same failure due to:
ld: warning: directory not found for option '-L/opt/homebrew/Cellar/libpng/1.6.37/lib'
ld: library not found for -lpng16
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [systemfonts.so] Error 1
ERROR: compilation failed for package 'systemfonts'
* removing '/Users/matt/Library/R/arm64/4.2/library/systemfonts'
* restoring previous '/Users/matt/Library/R/arm64/4.2/library/systemfonts'
Hmm. Next suggestion. Go to /opt/homebrew/lib/pkgconfig/ and look at the contents of libpng.pc and libpng16.pc to see if one or both of them is out of date. Probably not if manually running pkg-config picked up the correct version.
Could you capture the whole traceback of it trying to install the package into a text file and attach it? I could see if I see anything in that.
I am unable to upload a text file on this website, so here is an ugly PDF of the traceback. Hope it is helpful. This is the results of the following command:
Honestly, at this point, I'd file a bug with systemfonts if I were you. Something wonky is going on with how they're configuring the package and it's breaking on some combination(s) of macOS version and architecture.
I hadn't tried building it on my mac until today (just tried to diagnose from your info) and it's trying to pick up libpng 1.6.37 on mine too, but I've never even had that version installed. This mac is only a month old.
Digging around, I ended up running cat $(R RHOME)/etc/Makeconf and see that by default it's setting PKG_CONFIG_PATH=/usr/lib/pkgconfig:/opt/R/arm64/lib/pkgconfig:/opt/X11/lib/pkgconfig and in the X11 pkgconfig it has its own libpng16.pc file, so that might be getting picked up and messing things up? Quite frankly that's the version of libpng it should be picking up because it's more stable (in path and version) than homebrew's.