You are not logged in.
Today I found out that toggldesktop doesn't build because openssl supposedly removed support for RSA_SSLV23_PADDING in 3.0.0:
~/build/toggldesktop/src/toggldesktop-7.5.363/third_party/poco/Crypto/src/RSACipherImpl.cpp: In function
‘int Poco::Crypto::{anonymous}::mapPaddingMode(RSAPaddingMode)’:
~/build/toggldesktop/src/toggldesktop-7.5.363/third_party/poco/Crypto/src/RSACipherImpl.cpp:54:32: error:
‘RSA_SSLV23_PADDING’ was not declared in this scope; did you mean ‘RSA_NO_PADDING’?
54 | return RSA_SSLV23_PADDING;
| ^~~~~~~~~~~~~~~~~~
| RSA_NO_PADDINGI tried to downgrade openssl, but that broke curl. My experiments show that curl>=8.6.0 doesn't work with openssl==3.1.4-1 (and likely earlier versions):
$ curl https://google.com
curl: /usr/lib/libssl.so.3: version `OPENSSL_3.2.0' not found (required by /usr/lib/libcurl.so.4)
$ ldd /usr/lib/libcurl.so.4.8.0
/usr/lib/libcurl.so.4.8.0: /usr/lib/libssl.so.3: version `OPENSSL_3.2.0' not found (required by /usr/lib/libcurl.so.4.8.0)
...
libssl.so.3 => /usr/lib/libssl.so.3 (0x00007c91b8fa5000)
libcrypto.so.3 => /usr/lib/libcrypto.so.3 (0x00007c91b8a00000)
...First the output is somewhat confusing. It looks like /usr/lib/libssl.so.3 needs OPENSSL_3.2.0. But then one might notice the "required by" part. Do you know what "/usr/lib/libssl.so.3:" in the middle mean?
Also, since ldd produces the same message, I assume that somewhere inside /usr/lib/libcurl.so.4.8.0 it's declared that it needs openssl>=3.2.0. Do you know where?
Returning to the issue with toggldesktop, one way to solve the issue is probably to downgrade openssl. But many packages are likely to depend on it. And downgrade to what? 1.1.1.q-1? I don't think I like that.
The other is to fix the source code, if there's an easy fix.
The issue is supposedly not with toggldesktop itself, but with its poco dependency. And they seem to have fixed the issue. So another way is to somehow make toggldesktop use a newer poco.
And there might be a way to link toggledesktop with an older openssl (e.g. openssl-1.0) using pkg-config.
What would you suggest? Any other way?
Offline
CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):
Compatibility with CMake < 3.5 will be removed from a future version of
CMake.
Update the VERSION argument <min> value or use a ...<max> suffix to tell
CMake that the project does not need compatibility with older versions.
-- The C compiler identification is GNU 13.2.1
-- The CXX compiler identification is GNU 13.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found PkgConfig: /usr/bin/pkg-config (found version "2.1.0")
-- Found OpenSSL: /usr/lib/libcrypto.so (found version "3.2.1") found components: Crypto
CMake Warning at /usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake:76 (find_package):
Found package configuration file:
/usr/lib/cmake/Poco/PocoUtilConfig.cmake
but it set PocoUtil_FOUND to FALSE so package "PocoUtil" is considered to
be NOT FOUND. Reason given by package:
The following imported targets are referenced, but are missing: Poco::XML
Poco::JSON
Call Stack (most recent call first):
/usr/lib/cmake/Poco/PocoNetSSLConfig.cmake:3 (find_dependency)
/usr/lib/cmake/Poco/PocoConfig.cmake:29 (find_package)
CMakeLists.txt:64 (find_package)
CMake Warning at /usr/lib/cmake/Poco/PocoConfig.cmake:29 (find_package):
Found package configuration file:
/usr/lib/cmake/Poco/PocoNetSSLConfig.cmake
but it set PocoNetSSL_FOUND to FALSE so package "PocoNetSSL" is considered
to be NOT FOUND. Reason given by package:
PocoNetSSL could not be found because dependency PocoUtil could not be
found.
Call Stack (most recent call first):
CMakeLists.txt:64 (find_package)
CMake Warning at CMakeLists.txt:64 (find_package):
Found package configuration file:
/usr/lib/cmake/Poco/PocoConfig.cmake
but it set Poco_FOUND to FALSE so package "Poco" is considered to be NOT
FOUND. Reason given by package:
Failed to find Poco component "NetSSL" config file at
"/usr/lib/cmake/Poco/PocoNetSSL/PocoNetSSLConfig.cmake"Adding an additional patch that adds the JSON and XML poco components allowed the package to build for me in a clean chroot:
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 806bb4a..295092b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -61,7 +61,7 @@ endif()
if(NOT USE_BUNDLED_LIBRARIES)
# Look for Poco
- find_package(Poco COMPONENTS Crypto DataSQLite NetSSL)
+ find_package(Poco COMPONENTS JSON XML Crypto DataSQLite NetSSL)
# Look for JSON
find_package(jsoncpp CONFIG)Offline
I was able to fix it by installing openssl-1.1 and running:
$ PKG_CONFIG_PATH=/usr/lib/openssl-1.1/pkgconfig makepkg -siWhich is the fourth way I suggested. The strange thing is, I had poco installed from the official repositories. And when I tried to install the built package it conflicted with the poco package. Because my package contained the poco library as well. As such I removed poco from the dependecies (PKGBUILD/depends), removed the poco package from the system, installed the built package. And now it seems to work.
Now that I think about it, from the comments at toggldesktop it seems that it uses poco as a separate package, but if that fails it falls back to building poco by itself. For the former it supposedly needs -DENABLE_XML=ON and -DENABLE_JSON=ON (or seemingly your change).
As such it seems like I used the first option, but I don't remember making such changes. And the first option sounds better from what I can gather.
Also it's strange I didn't saw the errors you provided. Or it didn't stop after triggering them?
Last edited by x-yuri (2024-02-17 15:30:44)
Offline
Now that I think about it, from the comments at toggldesktop it seems that it uses poco as a separate package, but if that fails it falls back to building poco by itself. For the former it supposedly needs -DENABLE_XML=ON and -DENABLE_JSON=ON (or seemingly your change).
-DENABLE_XML=ON and -DENABLE_JSON=ON are the default https://github.com/pocoproject/poco/blo … #L178-L179 and as such enabled in the poco package provided by Arch. You need the change I made in addition at least for the version in the Arch repo.
Also it's strange I didn't saw the errors you provided. Or it didn't stop after triggering them?
It falls back to building poco from its old bundled copy as you observed.
Why is using openssl-1.1 which is EOL and no longer receives security updates without a contract and conflicting with the system poco package preferable to a one line patch?
Offline
First, you misunderstood me. I said the first option is preferable. And the first option is what it does first: it tries to use a standalone package.
I tried to build it as is and there are indeed some warnings:
==> Starting build()...
CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):
Compatibility with CMake < 3.5 will be removed from a future version of
CMake.
Update the VERSION argument <min> value or use a ...<max> suffix to tell
CMake that the project does not need compatibility with older versions.
-- Found OpenSSL: /usr/lib/libcrypto.so (found version "3.2.1") found components: Crypto
CMake Warning at /usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake:76 (find_package):
Found package configuration file:
/usr/lib/cmake/Poco/PocoUtilConfig.cmake
but it set PocoUtil_FOUND to FALSE so package "PocoUtil" is considered to
be NOT FOUND. Reason given by package:
The following imported targets are referenced, but are missing: Poco::XML
Poco::JSON
Call Stack (most recent call first):
/usr/lib/cmake/Poco/PocoNetSSLConfig.cmake:3 (find_dependency)
/usr/lib/cmake/Poco/PocoConfig.cmake:29 (find_package)
CMakeLists.txt:64 (find_package)
CMake Warning at /usr/lib/cmake/Poco/PocoConfig.cmake:29 (find_package):
Found package configuration file:
/usr/lib/cmake/Poco/PocoNetSSLConfig.cmake
but it set PocoNetSSL_FOUND to FALSE so package "PocoNetSSL" is considered
to be NOT FOUND. Reason given by package:
PocoNetSSL could not be found because dependency PocoUtil could not be
found.
Call Stack (most recent call first):
CMakeLists.txt:64 (find_package)
CMake Warning at CMakeLists.txt:64 (find_package):
Found package configuration file:
/usr/lib/cmake/Poco/PocoConfig.cmake
but it set Poco_FOUND to FALSE so package "Poco" is considered to be NOT
FOUND. Reason given by package:
Failed to find Poco component "NetSSL" config file at
"/usr/lib/cmake/Poco/PocoNetSSL/PocoNetSSLConfig.cmake"
-- Checking for one of the modules 'QxtCore-qt5'I have little to no experience with cmake. Can you possibly explain what it means? CMakeLists.txt references Poco as a dependency, cmake finds the files (/usr/lib/cmake/Poco), but it sets PocoUtil and everything up the stack NOT FOUND because, as it says, Poco::XML Poco::JSON are referenced but are missing. They're supposedly referenced here, because as you said ENABLE_XML and ENABLE_JSON are ON. But why are they missing? I have the poco package installed, which means all its components must be available. I tried to run cmake with --debug-find, but it doesn't seem to provide any useful information (which paths it tried) in this case. And I can't find source code of find_package(). Like the one I can find for find_dependency(). I was thinking of adding some debug statements.
Last edited by x-yuri (2024-02-18 14:00:38)
Offline