File dwarfs.spec of Package DwarFS
%global debug_package %{nil}
Name: dwarfs
Version: 0.10.2
Release: 0%{?dist}
Summary: A fast high compression read-only file system
BuildRequires: sed
%define major %(echo %{version} | cut -d. -f1)
%define minor %(echo %{version} | cut -d. -f2 | cut -d+ -f1)
%define patch %(echo %{version} | cut -d. -f3 | cut -d+ -f1)
%define so_ver %{major}_%{minor}_%{patch}
License: GPL-3.0
URL: https://github.com/mhx/%{name}
Source0: https://github.com/mhx/%{name}/releases/download/v%{version}/dwarfs-%{version}.tar.xz
ExcludeArch: ppc64le s390x
%define libboost() libboost_%{1}-devel
BuildRequires: gcc
BuildRequires: gcc-c++
BuildRequires: git
BuildRequires: clang
BuildRequires: (ninja or ninja-build)
BuildRequires: cmake
BuildRequires: make
BuildRequires: llvm-gold
BuildRequires: bison
BuildRequires: flex
BuildRequires: parallel-hashmap-devel
#BuildRequires: ruby3.2-rubygem-ronn
BuildRequires: fuse3
BuildRequires: pkg-config
BuildRequires: binutils-devel
BuildRequires: pkgconfig(libarchive)
BuildRequires: cmake(benchmark)
BuildRequires: boost-devel
BuildRequires: %{libboost chrono}
BuildRequires: %{libboost context}
#BuildRequires: %{libboost system}
BuildRequires: %{libboost process}
BuildRequires: %{libboost iostreams}
BuildRequires: %{libboost program_options}
BuildRequires: %{libboost python3}
BuildRequires: %{libboost regex}
BuildRequires: %{libboost filesystem}
BuildRequires: %{libboost thread}
BuildRequires: pkgconfig(libbrotlicommon)
BuildRequires: pkgconfig(libevent)
BuildRequires: pkgconfig(jemalloc)
BuildRequires: cmake(double-conversion)
BuildRequires: (cmake(lz4) or pkgconfig(liblz4))
#BuildRequires: lzlib-devel
BuildRequires: pkgconfig(liblzma)
BuildRequires: pkgconfig(libmagic)
BuildRequires: pkgconfig(openssl)
BuildRequires: pkgconfig(libunwind)
BuildRequires: pkgconfig(libdwarf)
BuildRequires: pkgconfig(libelf)
BuildRequires: cmake(fmt)
BuildRequires: pkgconfig(fuse3)
BuildRequires: cmake(nlohmann_json)
BuildRequires: cmake(utf8cpp)
BuildRequires: cmake(range-v3)
BuildRequires: pkgconfig(libxxhash)
BuildRequires: cmake(date)
BuildRequires: gtest
BuildRequires: gmock
BuildRequires: thrift
BuildRequires: folly-devel
BuildRequires: glog-4-devel
BuildRequires: pkgconfig(thrift)
%description
DwarFS is a read-only file system with a focus on achieving very high compression ratios in particular for very redundant data.
%{?!_cmakedir:%define _cmakedir %{_libdir}/cmake}
%package -n libdwarfs%{?suse_version:%so_ver}
Summary: DwarFS dynamic library
%description -n libdwarfs%{?suse_version:%so_ver}
%{summary}.
%package -n libdwarfs-doc
BuildArch: noarch
Summary: DwarFS documentations
%description -n libdwarfs-doc
%{summary}.
%package -n libdwarfs-devel
Summary: DwarFS development files
Requires: libdwarfs%{?suse_version:%so_ver} = %{version}
%description -n libdwarfs-devel
%{summary}.
%files -n libdwarfs%{?suse_version:%so_ver}
%{_libdir}/*.so.*
%{?!run_ldconfig:%define run_ldconfig %{_sbindir}/ldconfig}
%post -n libdwarfs%{?suse_version:%so_ver}
%run_ldconfig
%postun -n libdwarfs%{?suse_version:%so_ver}
%run_ldconfig
%files -n libdwarfs-doc
%{_mandir}/*/*
%doc README.md
%files -n libdwarfs-devel
%{_includedir}/dwarfs/*.h
%{_includedir}/dwarfs/*/*.h
%{_cmakedir}/dwarfs/*.cmake
%{_libdir}/*.so
%dir %{_includedir}/dwarfs
%dir %{_includedir}/dwarfs/reader
%dir %{_includedir}/dwarfs/utility
%dir %{_includedir}/dwarfs/writer
%dir %{_includedir}/dwarfs/detail
%dir %{_cmakedir}/dwarfs
%prep
%setup -q
#rm -Rfv folly ||:
#rm -Rfv fbthrift ||:
%build
%cmake -DCMAKE_C_COMPILER=%{_bindir}/clang \
-DCMAKE_CXX_COMPILER=%{_bindir}/clang++ \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DWITH_TESTS=OFF \
-DPREFER_SYSTEM_GTEST=OFF \
-DPREFER_SYSTEM_FMT=ON \
-DCMAKE_EXE_LINKER_FLAGS="-lboost_system -lboost_filesystem -lboost_process"
%cmake_build
%check
#ctest
%install
%cmake_install
mkdir -pv %{buildroot}/%{_bindir}
mv %{buildroot}/%{_usr}/sbin/* %{buildroot}/%{_bindir}/ ||:
rm -Rfv %{buildroot}/%{_usr}/sbin/ ||:
find %{buildroot} -type f -executable -exec strip --strip-all '{}' +
%files
%license LICENSE
%{_bindir}/*
%changelog
- fmt is included in the source directory instead of being cloned from github
- added the missing dependencies
- reduced redundancy and project size