🌎 Owen Smith

Simple Features for R on OSX with homebrew

February 21, 2023


While in the past I have used conda for managing my R environments for individual courses, for a spatial statistics course I am taking this semester I decided to use just a bare metal R installation. This has a couple advantages, like being able to run natively on my M1 chip or also being able to link the *.h files of R packages for other work, and so far I haven’t ran into issues when using it. However, today when attempting to install the Simple Features (SF) library, I finally ran into some issues with trying to link to existing geospatial libraries:

checking GDAL: checking whether PROJ is available for linking:... yes
checking GDAL: checking whether PROJ is available fur running:... yes
configure: GDAL: 3.6.2
configure: pkg-config proj exists, will use it
configure: using proj.h.
checking PROJ: checking whether PROJ and sqlite3 are available for linking:... no
configure: error: libproj or sqlite3 not found in standard or given locations.
ERROR: configuration failed for package ‘sf’
* removing ‘/opt/homebrew/lib/R/4.2/site-library/sf’

Using pkg-config I can see that I do have all the required libraries

$ pkg-config sqlite3 gdal proj geos --libs --cflags

# Returns
-I/opt/homebrew/Cellar/gdal/3.6.2/include
-I/opt/homebrew/Cellar/proj/9.1.1/include
-I/opt/homebrew/Cellar/libtiff/4.4.0_1/include
-I/opt/homebrew/Cellar/geos/3.11.1/include
-L/opt/homebrew/Cellar/gdal/3.6.2/lib
-L/opt/homebrew/Cellar/proj/9.1.1/lib
-L/opt/homebrew/Cellar/geos/3.11.1/lib
-lsqlite3 -lgdal -lproj -lgeos_c

So while I am not entirely sure why SF install is unable to properly link the correct proj version, to fix it is just a matter of specifying the configuration arguments when installing the package. For the sake of future usage so I don’t have to change the proj path and version, I used pkg-config to pull the paths and just passed them to install.packages in the shell.

proj_lib=`pkg-config proj --cflags |  cut -d ' ' -f1 | cut -c 3-`
proj_inc=`pkg-config proj --libs |  cut -d ' ' -f1 | cut -c 3-`

Rscript -e "
install.packages(
  'sf',
  repos='http://cran.us.r-project.org',
  configure.args = '--with-proj-include=${proj_inc} --with-proj-lib=${proj_inc}'
)
"
> library(sf)
Linking to GEOS 3.11.1, GDAL 3.6.2, PROJ 9.1.1; sf_use_s2() is TRUE

The above code succesfully compiles SF and I haven’t ran into any issues when using the library. When I get time I’ll look into why the normal method can’t link to the proper headers.


March 7, 2023 - Update

The same issue occurs when attempting to install Terra. The same solution that was used for simple features works to succesfully install.

proj_lib=`pkg-config proj --cflags |  cut -d ' ' -f1 | cut -c 3-`
proj_inc=`pkg-config proj --libs |  cut -d ' ' -f1 | cut -c 3-`

Rscript -e "
install.packages(
  'terra',
  repos='http://cran.us.r-project.org',
  configure.args = '--with-proj-include=${proj_inc} --with-proj-lib=${proj_inc}'
)
"