# # spec file for package signal-sqlcipher # # Copyright (c) 2024 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed # upon. The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. # Please submit bugfixes or comments via http://bugs.opensuse.org/ # #Whether to apply fixes so that libsignal_tokenizer gets compiled with LTO. # On Leap the system LLVM is too old. %if 0%{?suse_version} >= 1650 || 0%{?fedora} >= 42 # FC41: “Expected at most one ThinLTO module per bitcode file” (bsc#1229988) %bcond_without llvm_lto %else %bcond_with llvm_lto %endif %global __provides_exclude ^lib.*\\.so.*$ Name: signal-sqlcipher Version: 2.4.4 Release: 1.1 Summary: Database library for Signal Messenger License: AGPL-3.0-only AND BSD-3-Clause AND MIT AND (MIT OR Apache-2.0) AND (Zlib OR Apache-2.0 OR MIT) Group: System/Libraries Url: https://github.com/signalapp/node-sqlcipher # Source0: https://github.com/signalapp/node-sqlcipher/archive/refs/tags/v%{version}.tar.gz Source1: vendor.tar.zst Patch0: rust-output-path.patch Patch3000: sha2-asm-noexecstack.patch BuildRequires: cargo %if 0%{?suse_version} > 1500 || 0%{?fedora_version} BuildRequires: gcc-c++ >= 11 %else BuildRequires: gcc BuildRequires: gcc-c++ %endif BuildRequires: jq BuildRequires: nodejs-electron-devel %if %{with llvm_lto} BuildRequires: clang %if 0%{?suse_version} BuildRequires: llvm-gold >= 16 %else BuildRequires: llvm-libs %endif %endif %if 0%{?fedora} BuildRequires: python3 BuildRequires: rust-srpm-macros %else BuildRequires: cargo-packaging >= 1.2.0+3 BuildRequires: cargo-auditable BuildRequires: python3-base %endif BuildRequires: zstd %description node-sqlcipher contains sqlcipher and Signal-specific FTS5 segmenting APIs. This package contains the NodeJS native module used by `signal-desktop` and is not intended to be used outside that application. %prep %autosetup -p1 -a1 -n node-sqlcipher-%{version} # https://blogs.gnome.org/mcatanzaro/2020/05/18/patching-vendored-rust-dependencies/ for i in \ sha2-asm \ ; do pushd deps/extension/vendor/$i jq -cj '.files={}' .cargo-checksum.json >tmp && mv tmp .cargo-checksum.json && popd done %build export CC=gcc export CXX=g++ export AR=gcc-ar export NM=gcc-nm export RANLIB=gcc-ranlib %if 0%{?suse_version} && 0%{?suse_version} <= 1500 export CC=gcc-13 export CXX=g++-13 export AR=gcc-ar-13 export NM=gcc-nm-13 export RANLIB=gcc-ranlib-13 %endif export RUSTFLAGS="%{build_rustflags} --verbose" export RUSTC_LOG='rustc_codegen_ssa::back::link=info' export RUST_BACKTRACE=1 export CARGO_TERM_VERBOSE=true # https://github.com/Firstyear/cargo-packaging/pull/10 export CARGO_INCREMENTAL=0 %if 0%{?suse_version} auditable='auditable -vv' %endif #[ 114s] npm ERR! error[E0554]: `#![feature]` may not be used on the stable release channel #[ 114s] npm ERR! --> /home/abuild/rpmbuild/BUILD/Signal-Desktop-5.55.0/node_modules/@signalapp/libsignal-client/vendor/polyval/src/lib.rs:80:5 export RUSTC_BOOTSTRAP=1 export CFLAGS="%{optflags} -fpic -fno-semantic-interposition -fno-fat-lto-objects -fvisibility=hidden" export CXXFLAGS="%{optflags} -fpic -fno-semantic-interposition -fno-fat-lto-objects -fvisibility=hidden" export MAKEFLAGS="%{_smp_mflags}" # The `cc` crate tries to be too clever and passes some default cflags. # Disable these and use only the ones from CFLAGS env. variable export CRATE_CC_NO_DEFAULTS=1 # make `sha2-asm` output build log export CC_ENABLE_DEBUG_OUTPUT=1 %if %{with llvm_lto} LLVM_CPU_FLAGS=$(clang $(echo " $CXXFLAGS " | sed 's/ -mtls-dialect=gnu2 / /') -xc /dev/null --verbose -S 2>&1 | \ grep -F null.s | \ sed 's/-target-feature\s\+/--mattr=/g' | \ sed 's/-mfloat-abi\s\+/--float-abi=/g' | \ sed 's/-target-cpu\s\+/--mcpu=/g' | \ sed 's/ /\n/g' |grep -E '^--(mattr|mcpu|float-abi)') %endif #make LD able to consume rust LTO libraries export LDFLAGS="%{?build_ldflags} \ %if %{with llvm_lto} -Wl,--plugin=LLVMgold.so -Wl,--plugin-opt=O3 $(echo "$LLVM_CPU_FLAGS" | sed 's/^/ -Wl,--plugin-opt=/' | tr "\n" ' ') \ %endif -Wl,--gc-sections -Wl,-O2 " pushd deps/extension cargo -vv $auditable rustc --release --lib --crate-type staticlib \ %if %{with llvm_lto} -- -Clinker-plugin-lto # ^^^ rustc tries to produce fat objects by default, they do not work with the system linker # which only sees native code and does not invoke the plugin # Tell it to produce only LTO bytecode instead of fat binaries %endif popd %electron_rebuild %install install -pvDm755 build/Release/node_sqlcipher.node \ %{buildroot}%{_libexecdir}/signal-desktop/node_modules/@signalapp/sqlcipher/build/Release/node_sqlcipher.node %check %electron_check_native #No rust tests, and we don't bother with the JS test due to needing to vendor more %files %defattr(-,root,root) %license LICENSE %{_libexecdir}/signal-desktop %changelog * Thu Sep 4 2025 Bruno Pitrus - Update to version 2.4.4 for Signal 7.69.0 * Update sqlcipher to v4.10.0 * feat: introduce setLogger method * Thu Aug 14 2025 Bruno Pitrus - Update to version 2.2.2 for Signal 7.66.0 * no user-visible changes * Thu Jul 17 2025 Bruno Pitrus - Update to version 2.1.0 for Signal 7.62.0 * feat: include string version of error in err.code * Wed May 28 2025 Bruno Pitrus - Update to version 2.0.3 for Signal 7.56.0 * fix: always reset statement on error * Wed Apr 30 2025 Bruno Pitrus - Update to version 2.0.1 for Signal 7.53.0 * fix crash after closing the database * Wed Apr 23 2025 Bruno Pitrus - Update to version 2.0.0 for Signal 7.52.0 * Update sqlcipher to 4.7.0 * add initTokenizer() API method * Sat Apr 5 2025 Bruno Pitrus - Initial packaging of version 1.0.0 for Signal 7.49.0 - add rust-output-path.patch - import sha2-asm-noexecstack.patch from signal-desktop