[R-SIG-Mac] R/compilers can't find libintl.h on MacOS X
Kevin Ushey
kev|nu@hey @end|ng |rom gm@||@com
Thu Apr 24 18:18:43 CEST 2025
Hi Gavin,
If you want to use gettext from Homebrew, you need to make sure the
compiler include paths are set up correctly. As a reference, R
installations from Homebrew use (among other tweaks, but I think these
are the most relevant):
CPPFLAGS = -I/opt/homebrew/opt/gettext/include
-I/opt/homebrew/opt/readline/include -I/opt/homebrew/opt/xz/include
-I/opt/homebrew/include
LDFLAGS = -L/opt/homebrew/opt/gettext/lib
-L/opt/homebrew/opt/readline/lib -L/opt/homebrew/opt/xz/lib
-L/opt/homebrew/lib
in their etc/Makeconf, so you probably need something similar in your
own Makevars file (or wherever else is appropriate for you to set
these).
You might also be able to use `-I/opt/homebrew/include`, but that's a
bit more dangerous since (depending on what you've installed with
Homebrew) you could end up unintentionally shadowing certain header
files that were expected to be found in other locations. Adding `-H`
to CPPFLAGS can be useful in this scenario; it will tell the compiler
to dump the include paths used when resolving headers.
Caveat emptor and all that, but I've had success using CRAN R releases
on macOS with Homebrew-installed libraries. The main wrinkles come
when /usr/local/include gets full of "junk" that messes up compiler
header searches, but that's less of an issue on arm64 since Homebrew
stuff gets placed in /opt/homebrew, and /opt/homebrew/include is not
added to the compiler include search paths by default.
Best,
Kevin
On Wed, Apr 23, 2025 at 11:27 PM Duncan Murdoch
<murdoch.duncan using gmail.com> wrote:
>
> I didn't use sudo, but adding it doesn't help.
>
> Here's the latest failed run:
>
> https://github.com/dmurdoch/parseLatex/actions/runs/14634872157/job/41063801330
>
> It fails to create opt/R/arm64. I also tried x86_64, with similar results.
>
> Duncan Murdoch
>
> On 2025-04-23 4:17 p.m., Simon Urbanek wrote:
> >
> >
> >> On Apr 24, 2025, at 4:50 AM, Duncan Murdoch <murdoch.duncan using gmail.com> wrote:
> >>
> >> I am getting the same missing libintl.h error on my MacOS Github action. What do you recommend as the fix? My current script is here:
> >>
> >> https://github.com/dmurdoch/parseLatex/blob/main/.github/workflows/R-CMD-check.yaml
> >>
> >> I've tried a couple of things (install using brew: fails because it is already installed, but R isn't looking there; install using the curl command below: fails because of permissions.
> >>
> >
> >
> > For the latter - did you forget sudo in front of the tar?
> >
> > Without exact output we can only guess ...
> >
> > Cheers,
> > Simon
> >
> >
> >> Duncan Murdoch
> >>
> >>
> >> On 2025-04-19 5:40 p.m., Simon Urbanek wrote:
> >>> Gavin,
> >>> there are few issues here with different possible solutions.
> >>> In general, you cannot mix R from Homebrew and CRAN - they use different toolchains and libraries so you have to pick one.
> >>> 1) Despite what you said, what you are showing below is output from CRAN R, so one option (which I'd recommend) is to go the CRAN way. First, simply remove (or rename) /opt/homebrew so it doesn't break things (may or may not be necessary). Then the error you see is because mgcv seems to require gettext so install it from https://mac.r-project.org/bin/ - either follow the instructions there (which will work even from more complex cases) or in your case you can simply use
> >>> curl https://mac.r-project.org/bin/darwin20/arm64/gettext-0.22.5-darwin.20-arm64.tar.xz | tar xz -C /
> >>> (if you don't have write permissions in /opt/R either run "sudo chown -R $USER /opt/R" or put "sudo" before the tar above).
> >>> Once you got whatever you needed compiled you can rename /opt/homebrew back since we only need to remove it for compilation. The above works, because R itself already has the necessary static library built-in (as it uses it itself) so all you need are the gettext headers to appease mgcv.
> >>> 2) If you want to go fully the Homebrew way then you have to make sure you are picking up R from Homebrew and not CRAN. Then you cannot use CRAN binaries, you are entirely on your own since we don't support that setup, so I do NOT recommend it, but it's possible. Typically, that requires you to install the full compiler toolchain from Homebrew as well as well compiling all R packages from sources. In that scenario you don't use anything from mac.R-project.org but instead rely fully on Homebrew. This includes OpenMP, because the compilers in Homebrew are not from Apple so they use their own OpenMP.
> >>> 3) If the mgcv package on CRAN does not come with OpenMP support then I'd contact the maintainers and ask them why they don't enable it. Packages that benefit significantly from OpenMP typically enable it for their CRAN binaries (good example is data.table), so if it is not enabled it may mean that the authors don't recommend it or there is no significant benefit.
> >>> Cheers,
> >>> Simon
> >>>> On Apr 20, 2025, at 12:45 AM, Gavin Simpson <ucfagls using gmail.com> wrote:
> >>>>
> >>>> Dear list
> >>>>
> >>>> I seem to be running into a new issue after upgrading to R 4.5.0 that
> >>>> seems related to this
> >>>>
> >>>> * configure is now able to find an external libintl on macOS (the code
> >>>> from an older GNU gettext distribution failed to try linking with the
> >>>> macOS Core Foundation framework).
> >>>>
> >>>> I'm pretty new to MacOS and I have installed R from homebrew, and
> >>>> typically use the MacOS X binaries kindly provided by CRAN. However,
> >>>> for a couple of packages I make extensive use of, I want to make use
> >>>> of openMP, and so I have been following the excellent instructions on
> >>>> the mac.r-project.org pages to install the relevant fortran compiler
> >>>> and libomp.
> >>>>
> >>>> Specifically, I am trying to in compile the latest mgcv sources with
> >>>> openMP support. I have been doing this successfully for some time for
> >>>> the 4.3 and 4.4 releases of R. But after upgrading to R 4.5.0,
> >>>> compiling mgcv now throws an compilation error
> >>>>
> >>>> In file included from magic.c:27:
> >>>> ./general.h:4:10: fatal error: 'libintl.h' file not found
> >>>> 4 | #include <libintl.h>
> >>>> | ^~~~~~~~~~~
> >>>>
> >>>> (The full compile log is included below if neccessary.)
> >>>>
> >>>> I do have gettext installed and I do have libintl.h on my system
> >>>>
> >>>> % find /opt -name "libintl.*" -print
> >>>> /opt/homebrew/include/libintl.h
> >>>> /opt/homebrew/lib/libintl.dylib
> >>>> /opt/homebrew/lib/libintl.8.dylib
> >>>> /opt/homebrew/lib/libintl.a
> >>>> /opt/homebrew/Cellar/gettext/0.24/include/libintl.h
> >>>> /opt/homebrew/Cellar/gettext/0.24/lib/libintl.dylib
> >>>> /opt/homebrew/Cellar/gettext/0.24/lib/libintl.8.dylib
> >>>> /opt/homebrew/Cellar/gettext/0.24/lib/libintl.a
> >>>>
> >>>> My $PATH is
> >>>>
> >>>> % print $PATH
> >>>> /opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/opt/X11/bin:/usr/local/laps:/usr/local/munki:/usr/local/munkireport:/Applications/quarto/bin:/Users/au690221/.local/bin:/Users/au690221/.local/bin
> >>>>
> >>>> I have edited ./src/Makevars in mgcv's sources such that it reads
> >>>>
> >>>> % cat ./repo/src/Makevars
> >>>> PKG_LIBS = $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS) $(SHLIB_OPENMP_CFLAGS)
> >>>> PKG_CFLAGS = $(SHLIB_OPENMP_CFLAGS)
> >>>>
> >>>> PKG_LIBS += -lomp
> >>>> PKG_CPPFLAGS = -Xclang -fopenmp
> >>>> ## *Both* the above must be *uncommented* for release
> >>>>
> >>>> #PKG_CFLAGS = -g -O0 -Wall -pedantic $(SHLIB_OPENMP_CFLAGS)
> >>>> ## Actually it now seems that you need to reset optimization flag in
> >>>> ## cd /usr/local/lib/R/etc/
> >>>> ## sudo pico Makeconf
> >>>> ## This file can add flags but not modify what's in the above!
> >>>> ## `#' out previous line for release (but not without uncommenting openMP)
> >>>>
> >>>> But I have tried it with the final pair of PKG_LIBS definitions that
> >>>> add omp support commented out also.
> >>>>
> >>>> My system details are
> >>>>
> >>>>> sessionInfo()
> >>>> R version 4.5.0 (2025-04-11)
> >>>> Platform: aarch64-apple-darwin20
> >>>> Running under: macOS Sequoia 15.4.1
> >>>>
> >>>> Matrix products: default
> >>>> BLAS: /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRblas.0.dylib
> >>>> LAPACK: /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRlapack.dylib;
> >>>> LAPACK version 3.12.1
> >>>>
> >>>> locale:
> >>>> [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
> >>>>
> >>>> time zone: Europe/Copenhagen
> >>>> tzcode source: internal
> >>>>
> >>>> attached base packages:
> >>>> [1] stats graphics grDevices utils datasets methods base
> >>>>
> >>>> loaded via a namespace (and not attached):
> >>>> [1] compiler_4.5.0
> >>>>
> >>>> and
> >>>>
> >>>> % clang -v
> >>>> Apple clang version 17.0.0 (clang-1700.0.13.3)
> >>>> Target: arm64-apple-darwin24.4.0
> >>>> Thread model: posix
> >>>> InstalledDir: /Library/Developer/CommandLineTools/usr/bin
> >>>>
> >>>> (So I have installed LLVM 18.1.8 from https://mac.r-project.org/openmp/ )
> >>>>
> >>>> I suspect I will need to solve this by adding the homebrew lib
> >>>> location to my LD_PATH or similar, but I'm not very familiar with this
> >>>> process in general and especially so on MacOS X.
> >>>>
> >>>> I'd appreciate any help with resolving this issue.
> >>>>
> >>>> TIA
> >>>>
> >>>> Gavin
> >>>>
> >>>> % R CMD INSTALL mgcv_1.9-3.tar.gz
> >>>> * installing to library ‘/Users/au690221/Library/R/arm64/4.5/library’
> >>>> * installing *source* package ‘mgcv’ ...
> >>>> ** this is package ‘mgcv’ version ‘1.9-3’
> >>>> ** using staged installation
> >>>> ** libs
> >>>> using C compiler: ‘Apple clang version 17.0.0 (clang-1700.0.13.3)’
> >>>> using SDK: ‘MacOSX15.4.sdk’
> >>>> clang -arch arm64
> >>>> -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG
> >>>> -I/opt/R/arm64/include -fPIC -falign-functions=64 -Wall -g -O2 -c
> >>>> coxph.c -o coxph.o
> >>>> clang -arch arm64
> >>>> -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG
> >>>> -I/opt/R/arm64/include -fPIC -falign-functions=64 -Wall -g -O2 -c
> >>>> davies.c -o davies.o
> >>>> clang -arch arm64
> >>>> -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG
> >>>> -I/opt/R/arm64/include -fPIC -falign-functions=64 -Wall -g -O2 -c
> >>>> discrete.c -o discrete.o
> >>>> clang -arch arm64
> >>>> -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG
> >>>> -I/opt/R/arm64/include -fPIC -falign-functions=64 -Wall -g -O2 -c
> >>>> gdi.c -o gdi.o
> >>>> clang -arch arm64
> >>>> -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG
> >>>> -I/opt/R/arm64/include -fPIC -falign-functions=64 -Wall -g -O2 -c
> >>>> init.c -o init.o
> >>>> clang -arch arm64
> >>>> -I"/Library/Frameworks/R.framework/Resources/include" -DNDEBUG
> >>>> -I/opt/R/arm64/include -fPIC -falign-functions=64 -Wall -g -O2 -c
> >>>> magic.c -o magic.o
> >>>> In file included from magic.c:27:
> >>>> ./general.h:4:10: fatal error: 'libintl.h' file not found
> >>>> 4 | #include <libintl.h>
> >>>> | ^~~~~~~~~~~
> >>>> 1 error generated.
> >>>> make: *** [magic.o] Error 1
> >>>> ERROR: compilation failed for package ‘mgcv’
> >>>> * removing ‘/Users/au690221/Library/R/arm64/4.5/library/mgcv’
> >>>> * restoring previous ‘/Users/au690221/Library/R/arm64/4.5/library/mgcv’
> >>>> --
> >>>> Gavin Simpson, PhD [he/him/his]
> >>>> [tw] @ucfagls [OrciD] 0000-0002-9084-8413
> >>>> [web] fromthebottomoftheheap.net
> >>>> • Assistant Professor
> >>>> • Department of Animal & Veterinary Sciences, Aarhus University
> >>>> • Adjunct Professor, Department of Biology, University of Regina.
> >>>>
> >>>> _______________________________________________
> >>>> R-SIG-Mac mailing list
> >>>> R-SIG-Mac using r-project.org
> >>>> https://stat.ethz.ch/mailman/listinfo/r-sig-mac
> >>>>
> >>> _______________________________________________
> >>> R-SIG-Mac mailing list
> >>> R-SIG-Mac using r-project.org
> >>> https://stat.ethz.ch/mailman/listinfo/r-sig-mac
> >>
> >>
> >>
> >>
> >
>
> _______________________________________________
> R-SIG-Mac mailing list
> R-SIG-Mac using r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-mac
More information about the R-SIG-Mac
mailing list