File dwarfs.spec of Package dwarfs
#
# spec file for package dwarfs (openSUSE Tumbleweed / OBS)
#
%global __builder ninja
# openSUSE shlib policy wants suffix 0_14_1 for SONAMEs like *.so.0.14.1
%global shlibsuffix 0_14_1
Name: dwarfs
Version: 0.14.1
Release: 0
Summary: Deduplicating compressed read-only file system
License: GPL-3.0-or-later AND MIT
URL: https://github.com/mhx/dwarfs
Source0: %{name}-%{version}.tar.xz
BuildRequires: bison
BuildRequires: c++_compiler
BuildRequires: cmake
BuildRequires: flex
BuildRequires: ninja
BuildRequires: parallel-hashmap-devel
BuildRequires: pkgconfig
# Boost bits (match Factory split devel packages)
BuildRequires: libboost_chrono-devel
BuildRequires: libboost_context-devel
BuildRequires: libboost_filesystem-devel
BuildRequires: libboost_iostreams-devel
BuildRequires: libboost_process-devel
BuildRequires: libboost_program_options-devel
BuildRequires: libboost_regex-devel
BuildRequires: libboost_thread-devel
# CMake/pkg-config deps
BuildRequires: cmake(double-conversion)
BuildRequires: cmake(range-v3)
BuildRequires: cmake(utf8cpp)
BuildRequires: pkgconfig(benchmark)
BuildRequires: pkgconfig(flac++)
BuildRequires: pkgconfig(fmt)
BuildRequires: pkgconfig(fuse3)
BuildRequires: pkgconfig(jemalloc)
BuildRequires: pkgconfig(libacl)
BuildRequires: pkgconfig(libarchive)
BuildRequires: pkgconfig(libbrotlicommon)
BuildRequires: pkgconfig(libdwarf)
BuildRequires: pkgconfig(libelf)
BuildRequires: pkgconfig(libevent)
BuildRequires: pkgconfig(libglog)
BuildRequires: pkgconfig(liblz4)
BuildRequires: pkgconfig(liblzma)
BuildRequires: pkgconfig(libmagic)
BuildRequires: pkgconfig(libssl)
BuildRequires: pkgconfig(libunwind)
BuildRequires: pkgconfig(libxxhash)
BuildRequires: pkgconfig(libzstd)
BuildRequires: pkgconfig(nlohmann_json)
# tests
BuildRequires: pkgconfig(gtest)
BuildRequires: pkgconfig(gmock)
%description
The Deduplicating Warp-speed Advanced Read-only File System.
DwarFS is a deduplicating compressed read-only file system
particularly suited for very redundant data.
Compared to SquashFS, it is typically more efficient.
%package -n libdwarfs%{shlibsuffix}
Summary: DwarFS shared libraries
%description -n libdwarfs%{shlibsuffix}
This package contains the DwarFS shared libraries.
%package devel
Summary: DwarFS development files
Requires: libdwarfs%{shlibsuffix} = %{version}
%description devel
This package contains the development files for DwarFS.
%ldconfig_scriptlets -n libdwarfs%{shlibsuffix}
%prep
%autosetup -p1 -n %{name}-%{version}
# Remove HowardHinnant/date usage (use C++20 chrono); safe no-op if already changed upstream
if [ -f src/util.cpp ]; then
grep -q '<date/date.h>' src/util.cpp && \
sed -i -e '/^[[:space:]]*#include[[:space:]]*<date\/date\.h>[[:space:]]*$/d' src/util.cpp || :
grep -q 'date::from_stream' src/util.cpp && \
sed -i -e 's/\bdate::from_stream\b/std::chrono::from_stream/g' src/util.cpp || :
fi
# If bundled folly lists Boost "system" component, drop it (safe if absent)
if [ -f folly/CMake/folly-deps.cmake ]; then
sed -i -e '/^[[:space:]]*system[[:space:]]*$/d' folly/CMake/folly-deps.cmake || :
fi
if [ -f folly/CMake/folly-config.cmake.in ]; then
sed -i -e 's/[[:space:]]Boost::system//g' -e 's/Boost::system[[:space:]]//g' folly/CMake/folly-config.cmake.in || :
fi
%build
%cmake \
-DCMAKE_CXX_STANDARD=20 \
-DCMAKE_EXE_LINKER_FLAGS:STRING="%{build_ldflags} -lboost_filesystem -lboost_process" \
-DWITH_TESTS=ON \
-DPREFER_SYSTEM_GTEST=ON
%cmake_build
%install
%cmake_install
# Keep dwarfs in _bindir, provide mount helper in _sbindir
if [ -f "%{buildroot}%{_sbindir}/dwarfs" ]; then
mv "%{buildroot}%{_sbindir}/dwarfs" "%{buildroot}%{_bindir}/dwarfs"
fi
install -d "%{buildroot}%{_sbindir}"
ln -sf "%{_bindir}/dwarfs" "%{buildroot}%{_sbindir}/mount.dwarfs"
# Remove invalid desktop file before generating extra file list
rm -f "%{buildroot}%{_datadir}/applications/dwarfs-mount-handler.desktop"
# Collect optional integration files without using find -printf
extra=%{name}.extra.files
: > "$extra"
for d in \
%{_datadir}/applications \
%{_datadir}/mime/packages \
%{_datadir}/bash-completion/completions \
%{_datadir}/zsh/site-functions \
%{_datadir}/fish/vendor_completions.d \
%{_datadir}/icons \
%{_datadir}/metainfo \
; do
if [ -d "%{buildroot}$d" ]; then
find "%{buildroot}$d" -type f -print | sed "s|^%{buildroot}||" >> "$extra"
fi
done
LC_ALL=C sort -u -o "$extra" "$extra"
%check
%ctest
%files -f %{name}.extra.files
%license LICENSE
%doc README.md
%{_mandir}/*/*dwarfs*
%{_bindir}/*dwarfs*
%{_sbindir}/mount.dwarfs
%files -n libdwarfs%{shlibsuffix}
%{_libdir}/libdwarfs*.so.*
%files devel
%{_includedir}/dwarfs
%{_libdir}/cmake/dwarfs
%{_libdir}/libdwarfs*.so
%changelog