Opened 6 months ago

Closed 6 months ago

#70046 closed defect (fixed)

snappy @1.2: changes a symbol, dependencies need regenerating

Reported by: justinbb Owned by: pguyot (Paul Guyot)
Priority: Normal Milestone:
Component: ports Version:
Keywords: Cc: pguyot (Paul Guyot), dershow
Port: snappy

Description

On macOS 14, after upgrade to snappy 1.2, trying to launch qgis3 (depends on qt5-qtwebkit > leveldb > snappy):

Symbol not found: __ZN6snappy11RawCompressEPKcmPcPm
Referenced from: <6B4C63E9-F153-35F2-B6E3-9B70D5205EB7> /opt/local/lib/libleveldb.1.23.0.dylib
Expected in:     <21F5B8CD-DE83-3E89-BC9F-C6F6CD66E239> /opt/local/lib/libsnappy.1.1.10.dylib

In snappy 1.2, the missing symbol has been replaced by _ZN6snappy11RawCompressEPKcmPcPmNS_18CompressionOptionsE
(Perhaps snappy's soname should have been bumped to 1.2.0 as well?

Workaround: port activate snappy @1.1.10_0
Fix: relink all the ports that link with libsnappy

Change History (13)

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

Cc: pguyot added
Port: snappy added
Summary: snappy 1.2 changes a symbol, dependencies need regeneratingsnappy @1.2: changes a symbol, dependencies need regenerating

Sounds like the developers of snappy should have changed the library version. You should report that bug to them.

comment:2 Changed 6 months ago by pguyot (Paul Guyot)

We probably could add this commit they made after 1.2.0 release as a patch and bump revision. Would it be sufficient for binaries to be rebuilt?

https://github.com/google/snappy/commit/52820ea9c6cb0af6ebe4920f806dbfbb0de9eaab

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

Presumably that commit which changes the version number of the project to 1.2.0 would change the major version number of the library as well. That would clarify the problem by making all ports that link with version 1.1.10 of the library fail to launch. Revbumping all those ports would then link them with the new 1.2.0 version of the library.

comment:4 Changed 6 months ago by pguyot (Paul Guyot)

I confirm that the patch creates libsnappy.1.2.0.dylib.

> port contents snappy
Port snappy @1.2.0_1 contains:
  /opt/local/include/snappy-c.h
  /opt/local/include/snappy-sinksource.h
  /opt/local/include/snappy-stubs-public.h
  /opt/local/include/snappy.h
  /opt/local/lib/cmake/Snappy/SnappyConfig.cmake
  /opt/local/lib/cmake/Snappy/SnappyConfigVersion.cmake
  /opt/local/lib/cmake/Snappy/SnappyTargets-macports.cmake
  /opt/local/lib/cmake/Snappy/SnappyTargets.cmake
  /opt/local/lib/libsnappy.1.2.0.dylib
  /opt/local/lib/libsnappy.1.dylib
  /opt/local/lib/libsnappy.dylib

Do I need to bump revision of every port that depends on snappy in https://github.com/macports/macports-ports/pull/24053?

Some don't need it. qemu links with libsnappy.1.dylib and still works after the update. leveldb needs this since it triggered this ticket. I can check the other ones.

port list depends:snappy
aff4                           @1.0-20180212   security/aff4
apache-arrow                   @13.0.0         devel/apache-arrow
blosc                          @1.21.5         archivers/blosc
caffe                          @20170817       math/caffe
folly                          @2024.01.22.00  devel/folly
hadoop                         @1.2.1          java/hadoop
leveldb                        @1.23           databases/leveldb
mongo-c-driver                 @1.26.2         devel/mongo-c-driver
mongodb                        @6.0.7          databases/mongodb
mongodb-devel                  @6.0.7          databases/mongodb-devel
mvfst                          @2024.01.22.00  devel/mvfst
p5-compress-snappy             @0.240.0        perl/p5-compress-snappy
py-python-snappy               @0.6.1          python/py-python-snappy
py38-python-snappy             @0.6.1          python/py-python-snappy
py39-imagecodecs               @2024.1.1       python/py-imagecodecs
py39-pyarrow                   @13.0.0         devel/apache-arrow
py39-python-snappy             @0.6.1          python/py-python-snappy
py310-imagecodecs              @2024.1.1       python/py-imagecodecs
py310-pyarrow                  @13.0.0         devel/apache-arrow
py310-python-snappy            @0.6.1          python/py-python-snappy
py311-imagecodecs              @2024.1.1       python/py-imagecodecs
py311-pyarrow                  @13.0.0         devel/apache-arrow
py311-python-snappy            @0.6.1          python/py-python-snappy
py312-imagecodecs              @2024.1.1       python/py-imagecodecs
py312-pyarrow                  @13.0.0         devel/apache-arrow
qemu                           @9.0.0          emulators/qemu
qt5-qtwebengine                @5.15.16        aqua/qt5
qt6-qtwebengine                @6.4.3          aqua/qt6
qt513-qtwebengine              @5.13.2         aqua/qt513
rocksdb                        @8.9.1          databases/rocksdb
shogun                         @2.1.0          math/shogun
shogun-devel                   @4.0.0          math/shogun-devel
sparkey                        @0.2.99         databases/sparkey
py38-autobahn                  @21.3.1         python/py-autobahn
py39-autobahn                  @21.3.1         python/py-autobahn
py310-autobahn                 @21.3.1         python/py-autobahn
py311-autobahn                 @21.3.1         python/py-autobahn

comment:5 Changed 6 months ago by pguyot (Paul Guyot)

Owner: set to pguyot
Resolution: fixed
Status: newclosed

In f5bc4a4f4ae73e6f66c5ebc68175acd13933d821/macports-ports (master):

snappy: set version of dylib to 1.2.0

  • Apply, as a patch, a PR content that was merged after upstream 1.2.0 release
  • Bump revision accordingly

Closes: #70046

Signed-off-by: Paul Guyot <pguyot@…>

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

Resolution: fixed
Status: closedreopened

I merged the PR as is since fixing the version number is obviously correct. But you're right, the install name is still libsnappy.1.dylib. For some reason I assumed it was 1.1.10. So then we've returned to the beginning: they removed a symbol but didn't adequately increase the library's major version number, and should do so, which will change the install name to perhaps libsnappy.2.dylib, after which we'll need to revbump everything that links with it.

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

I have emailed the developer of Snappy to try to discover how to report bugs to them.

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

The developer enabled the GitHub repo's issue tracker and I filed https://github.com/google/snappy/issues/183

comment:9 Changed 6 months ago by pguyot (Paul Guyot)

Thank you. I submitted a new PR with a patch that should fix the leveldb issue (and issue with any other port that refers to this symbol), as a way to temporary fix the breakage until upstream provides a better fix as you suggested in your report.

https://github.com/macports/macports-ports/pull/24053

comment:10 Changed 6 months ago by dershow

Cc: dershow added

comment:11 Changed 6 months ago by dershow

I just got the 1.2.0_1 update (which I would guess captures the update pull 24053) and I still get the namespace error from an app that uses leveldb.

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

Yes, 1.2.0_1 only fixed the advertised version number of the library. 1.2.1 will reintroduce the symbol 1.2.0 deleted.

Last edited 6 months ago by ryandesign (Ryan Carsten Schmidt) (previous) (diff)

comment:13 Changed 6 months ago by pguyot (Paul Guyot)

Resolution: fixed
Status: reopenedclosed

In 05d059f1d02405f7bdbfb795ced904d61940e023/macports-ports (master):

snappy: update to 1.2.1

Release eventually fixes ABI compatibility issue created by 1.2.0.
Remove patch accordingly.

See: https://github.com/google/snappy/issues/183
Closes: #70046

Signed-off-by: Paul Guyot <pguyot@…>

Note: See TracTickets for help on using tickets.