r-spatial / s2

Spherical Geometry Operators Using the S2 Geometry Library
https://r-spatial.github.io/s2/
72 stars 9 forks source link

error: use of undeclared identifier 'MAP_ANONYMOUS' #245

Open ryandesign opened 1 year ago

ryandesign commented 1 year ago

s2 fails to build on OS X 10.10 and earlier:

https://trac.macports.org/ticket/67784

absl/debugging/internal/examine_stack.cc:58:34: error: use of undeclared identifier 'MAP_ANONYMOUS'
                   MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
                                 ^
1 error generated.

MAP_ANONYMOUS is equivalent to MAP_ANON which is available on older systems.

There are several places where you already have code to address this:

https://github.com/r-spatial/s2/blob/4fe0c97df91c98a24f379bfc3d8d4544f4835117/src/absl/base/internal/low_level_alloc.cc#L56-L63

https://github.com/r-spatial/s2/blob/4fe0c97df91c98a24f379bfc3d8d4544f4835117/src/absl/debugging/failure_signal_handler.cc#L154-L156

https://github.com/r-spatial/s2/blob/4fe0c97df91c98a24f379bfc3d8d4544f4835117/src/s2/base/port.h#L574-L581

Note that the comment is outdated: MAP_ANONYMOUS does exist on Darwin in OS X 10.11 (released 2015) and later.

There are two places where similar code needs to be added, or it needs to be moved into a more central include file:

https://github.com/r-spatial/s2/blob/4fe0c97df91c98a24f379bfc3d8d4544f4835117/src/absl/debugging/internal/examine_stack.cc#L57-L58

https://github.com/r-spatial/s2/blob/4fe0c97df91c98a24f379bfc3d8d4544f4835117/src/absl/debugging/internal/stack_consumption.cc#L113-L114

I see no reason to limit the fix to systems where __APPLE__ is defined.

ryandesign commented 1 year ago

There are two places where similar code needs to be added

For example like this:

https://github.com/macports/macports-ports/blob/6102b5d9c70d7c21c9d20f79ce9ff65fc2b77772/R/R-s2/files/MAP_ANON.patch

paleolimbot commented 1 year ago

Thank you for reporting! We are about to update abseil and S2 to newer versions. Do you know if abseil-cpp and the latest version of google/s2geometry are able to compile on macports?

ryandesign commented 1 year ago

I did not see this fix in the upstream abseil repository.

In MacPorts, the abseil port works around the problem by using a compatibility library developed by MacPorts which includes, among other things, the missing MAP_ANONYMOUS definition. It would be better to report the problem to the developers of abseil however so they can fix it.

ryandesign commented 1 year ago

Build status information for abseil and s2geometry in MacPorts are here:

https://ports.macports.org/port/abseil/details/

https://ports.macports.org/port/s2geometry/details/

ryandesign commented 1 year ago

It would be better to report the problem to the developers of abseil however so they can fix it.

https://github.com/abseil/abseil-cpp/pull/1500

ryandesign commented 1 year ago

But abseil also now uses clock_gettime which is only available in macOS 10.12 and later. I reported this to them and they will not fix it; they state abseil requires macOS 10.13 or later. For MacPorts, we have a clock_gettime implementation in our compatibility library.