librewolf/librewolf.spec
slava86 132fa23382 [<0;25;22M]
116.0.3-1 .. 117.0-1
2023-08-29 23:17:00 +03:00

268 lines
7.2 KiB
RPMSpec

%if %{without debug}
%global debug_package %{nil}
%endif
%global optflags %{optflags} -g1
%global real_version 117.0-1
%global rpm_version %(echo %{real_version} | sed -e "s/-/_/")
#========= switches of system libraries ==========
#=================================================
##
# in the 202110 platform,
# the nss version is lower
####
%if %{mdvver} < 202310
%bcond_with nss
%else
%bcond_without nss
%endif
%bcond_without nspr
%bcond_with icu
%bcond_without libevent
%bcond_without libvpx
%bcond_without webp
%bcond_without zlib
#=================================================
##
# switches with alternative python 3 and llvm
####
%bcond_with py3_alt
%bcond_without clang_alt
#=================================================
%bcond_with verbose
%bcond_with debug
#=================================================
%global llvm_alt_ver 17
%global llvm_alt_path /opt/llvm%{llvm_alt_ver}
#=================================================
%global wolfdir %{_libdir}/%{name}
%global _privatelibs mozsqlite3.*|mozgtk.*|ipcclientcerts.*|xul.*
%global _privatelibs %{_privatelibs}|softokn3.*|mozsandbox.*|nss3.*
%global _privatelibs %{_privatelibs}|mozavutil.*|smime3.*|mozwayland.*
%global _privatelibs %{_privatelibs}|plds4.*|nssutil3.*|ssl3.*
%global _privatelibs %{_privatelibs}|clearkey.*|nspr4.*|lgpllibs.*
%global _privatelibs %{_privatelibs}|mozavcodec.*|nssckbi.*|freeblpriv3.*
%global _privatelibs %{_privatelibs}|plc4.*
%global __provides_exclude ^lib(%{_privatelibs}).so.++$
%global __requires_exclude ^lib(%{_privatelibs}).so.++$
%global __provides_exclude_from ^(%{_libdir}/%{name}/.*\\.so.*)$
Summary: A custom version of Firefox, focused on privacy, security and freedom
Name: librewolf
Version: %{rpm_version}
Release: 1
License: MPL 2.0 and GNU AGPL 3.0
Group: Networking/WWW
Url: https://gitlab.com/librewolf-community/browser/source
# generate source %%{SOURCE1}
Source0: %{name}-%{real_version}.source.tar.gz
Source1: %{name}_get_source
Source2: cbindgen-vendor.tar.xz
Source3: %{name}.desktop
Source4: %{name}.rpmlintrc
ExclusiveArch: %{x86_64} %{arm64}
BuildRequires: atomic-devel
%if %{without clang_alt}
BuildRequires: clang-devel
%else
BuildRequires: llvm%{llvm_alt_ver}
%endif
BuildRequires: cargo
BuildRequires: nasm
BuildRequires: nss-static-devel
BuildRequires: nodejs
%if %{with py3_alt}
BuildRequires: pkgconfig(python-3.10)
%else
BuildRequires: pkgconfig(python3)
%endif
BuildRequires: pkgconfig(alsa)
BuildRequires: pkgconfig(dbus-glib-1)
BuildRequires: pkgconfig(gtk+-3.0)
BuildRequires: pkgconfig(gtk+-unix-print-3.0)
%if %{with libevent}
BuildRequires: pkgconfig(libevent)
%endif
BuildRequires: pkgconfig(libpulse)
BuildRequires: pkgconfig(pango)
BuildRequires: pkgconfig(xrandr)
BuildRequires: pkgconfig(xcomposite)
BuildRequires: pkgconfig(xcursor)
BuildRequires: pkgconfig(xdamage)
BuildRequires: pkgconfig(xfixes)
BuildRequires: pkgconfig(xi)
BuildRequires: pkgconfig(xtst)
BuildRequires: rust rustfmt
%if %{with libvpx}
BuildRequires: pkgconfig(vpx) >= 1.10.0
%endif
%if %{with webp}
BuildRequires: pkgconfig(libwebp) >= 1.0.2
%endif
%description
This project is a custom and independent version of Firefox,
with the primary goals of privacy, security and user freedom.
LibreWolf is designed to increase protection against tracking
and fingerprinting techniques, while also including
a few security improvements.
his is achieved through our privacy and security oriented
settings and patches. LibreWolf also aims to remove all the telemetry,
data collection and annoyances,as well as disabling
anti-freedom features like DRM.
%files
%license LICENSE
%doc README.txt
%{_bindir}/%{name}
%{_datadir}/applications/%{name}.desktop
%{_iconsdir}/hicolor/*/apps/%{name}.png
%dir %{wolfdir}
%{wolfdir}/*
#------------------------------------------------------------------
%prep
%autosetup -p1 -n %{name}-%{real_version}
echo "#===========================================" >> mozconfig
echo "# options build rosa linux" >> mozconfig
echo "#===========================================" >> mozconfig
echo "export MOZCONFIG="`pwd`"/mozconfig" >> mozconfig
echo "mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-%{name}" >> mozconfig
echo "ac_add_options --host=%{_host}" >> mozconfig
echo "ac_add_options --prefix=%{_prefix}" >> mozconfig
echo "ac_add_options --libdir=%{_libdir}" >> mozconfig
echo "mk_add_options MOZ_PARALLEL_BUILD=%{_smp_build_ncpus}" >> mozconfig
echo "ac_add_options --enable-default-toolkit=cairo-gtk3-x11-wayland" >> mozconfig
%if %{with nss}
echo "ac_add_options --with-system-nss" >> mozconfig
%else
echo "ac_add_options --without-system-nss" >> mozconfig
%endif
%if %{with nspr}
echo "ac_add_options --with-system-nspr" >> mozconfig
%else
echo "ac_add_options --without-system-nspr" >> mozconfig
%endif
%if %{with icu}
echo "ac_add_options --with-system-icu" >> mozconfig
%else
echo "ac_add_options --without-system-icu" >> mozconfig
%endif
%if %{with libevent}
echo "ac_add_options --with-system-libevent" >> mozconfig
%else
echo "ac_add_options --without-system-libevent" >> mozconfig
%endif
%if %{with libvpx}
echo "ac_add_options --with-system-libvpx" >> mozconfig
%else
echo "ac_add_options --without-system-libvpx" >> mozconfig
%endif
%if %{with webp}
echo "ac_add_options --with-system-webp" >> mozconfig
%else
echo "ac_add_options --without-system-webp" >> mozconfig
%endif
%if %{with zlib}
echo "ac_add_options --with-system-zlib" >> mozconfig
%else
echo "ac_add_options --without-system-zlib" >> mozconfig
%endif
echo "ac_add_options --without-sysroot" >> mozconfig
echo "ac_add_options --without-wasm-sandboxed-libraries" >> mozconfig
%{__sed} -i -e "s|enable-bootstrap|disable-bootstrap|" mozconfig
%if %{with debug}
%{__sed} -i -e "s|disable-debug|enable-debug|" mozconfig
%endif
%build
%setup_compile_flags
%if %{with clang_alt}
export PATH="%{llvm_alt_path}/bin:$PATH"
export CC="%{llvm_alt_path}/bin/clang"
export CXX="%{llvm_alt_path}/bin/clang++"
export AR="%{llvm_alt_path}/bin/llvm-ar"
export NM="%{llvm_alt_path}/bin/llvm-nm"
export RANLIB="%{llvm_alt_path}/bin/llvm-ranlib"
%endif
export LDFLAGS="%{ldflags} -Wl,--no-keep-memory"
%{__mkdir_p} my_rust_vendor
cd my_rust_vendor
%{__tar} xf %{SOURCE2}
mkdir -p .cargo
cat > .cargo/config <<EOL
[source.crates-io]
replace-with = "vendored-sources"
[source.vendored-sources]
directory = "`pwd`"
EOL
env CARGO_HOME=.cargo cargo install cbindgen
export PATH="`pwd`"/.cargo/bin:$PATH
cd -
MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE="none" \
./mach build %{?with_verbose:--verbose}
MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE="none" ./mach package
%install
MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE="none" \
DESTDIR=%{buildroot} \
./mach install
%{__rm} -rvf %{buildroot}%{_bindir}/%{name}
cat > %{buildroot}%{_bindir}/%{name} << FOE
#! /bin/sh
exec %{wolfdir}/%{name} "\$@"
FOE
%{__chmod} +x %{buildroot}%{_bindir}/%{name}
%{__mkdir_p} %{buildroot}%{_datadir}/applications
%{__install} -Dm 0644 %{SOURCE3} \
%{buildroot}%{_datadir}/applications
%{__sed} -i -e "s|@LIBDIR@|%{wolfdir}|g" \
%{buildroot}%{_datadir}/applications/%{name}.desktop
for size in 16 32 48 64 128 ;do
%{__mkdir_p} %{buildroot}%{_iconsdir}/hicolor/${size}x${size}/apps
ln -sfv %{wolfdir}/browser/chrome/icons/default/default${size}.png \
%{buildroot}%{_iconsdir}/hicolor/${size}x${size}/apps/%{name}.png
done