## START: Set by rpmautospec
## (rpmautospec version 0.3.0)
%define autorelease(e:s:pb:n) %{?-p:0.}%{lua:
    release_number = 6;
    base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}"));
    print(release_number + base_release_number - 1);
}%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{!?-n:%{?dist}}
## END: Set by rpmautospec

# Upstream has haphazard versioning: after going through “v1”-“v6”, they
# selected a version “final1”, and are now working on “final2”. They also keep
# all old versions in the git repository. We will package only based on the
# “final” version numbers. When “final2” is released, this package will move
# forward to that version, with “final1” offered in a parallel-installable
# compat package.
#
# Since versioning is so wonky, we treat the git tag as a snapshot version.
%global tag wyhash_final
%global snapdate 20200311

Name:           wyhash
Summary:        No hash function is perfect, but some are useful
Version:        final1^%{snapdate}git%{tag}
Release:        %autorelease

# SPDX
License:        Unlicense
URL:            https://github.com/wangyi-fudan/wyhash
Source0:        %{url}/archive/%{tag}/wyhash-%{tag}.tar.gz

# https://fedoraproject.org/wiki/Changes/EncourageI686LeafRemoval
ExcludeArch:    %{ix86}

BuildRequires:  gcc-c++
BuildRequires:  make

# We need the delimiter in the “compat” version because the name ends, and the
# version starts, with a letter. See
# https://docs.fedoraproject.org/en-US/packaging-guidelines/Naming/#multiple.
%global baseversion %(echo '%{version}' | cut -d '^' -f 1)
%global compat_name wyhash_%{baseversion}

# No compiled code is installed, so this would be empty.
%global debug_package %{nil}

%global common_description %{expand:
No hash function is perfect, but some are useful.

wyhash and wyrand are the ideal 64-bit hash function and PRNG respectively:

solid: wyhash passed SMHasher, wyrand passed BigCrush, practrand.

portable: 64-bit/32-bit system, big/little endian.

fastest: Efficient on 64-bit machines, especially for short keys.

simplest: In the sense of code size.}

%description %{common_description}


%package devel
Summary:        %{summary}

BuildArch:      noarch

# Since this is a header-only library, dependent packages must require one of
# the -static virtual Provides.
Provides:       wyhash-static = %{version}-%{release}

Provides:       %{compat_name}-devel = %{version}-%{release}
Provides:       %{compat_name}-static = %{version}-%{release}

%description devel %{common_description}

Dependent packages that require version %{baseversion} in particular should use
the virtual Provides for %{compat_name}-devel/%{compat_name}-static, and should
add -I%{_includedir}/%{compat_name} to their compiler flags.


%package doc
Summary:        Documentation for wyhash
BuildArch:      noarch

%description doc %{common_description}


%prep
%autosetup -n wyhash-%{tag}

# Build the tests with the distribution’s preferred flags
sed -r -i \
    -e 's/ -O3\b//g' \
    -e 's/ -march=native\b/ \$\(CXXFLAGS\) \$\(LDFLAGS\)/g' \
    makefile


%build
%set_build_flags
# We build only the test executable, not the benchmarks.
%make_build test_vector CXX="${CXX-g++}"


%install
# We install only the main wyhash header; others, like wyhash32 and o1hash, are
# not yet properly versioned. We put it in a subdirectory of _includedir for
# parallel-installability; dependent packages requiring particular versions
# will have to adjust their CFLAGS.
install -D -p -m 0644 -t %{buildroot}%{_includedir}/%{compat_name} wyhash.h

# For this package, which tracks the latest version, we also allow the header
# to be used without adding the subdirectory to the CFLAGS.
ln -s %{compat_name}/wyhash.h %{buildroot}%{_includedir}/wyhash.h


%check
./test_vector


%files devel
%license LICENSE

%{_includedir}/%{compat_name}/
%{_includedir}/wyhash.h


%files doc
%license LICENSE
%doc README.md
# An academic paper on the algorithm:
%doc *.docx


%changelog
* Thu Dec 22 2022 Benjamin A. Beasley <code@musicinmybrain.net> final1^20200311gitwyhash_final-6
- Leaf package: remove i686 support

* Thu Dec 22 2022 Benjamin A. Beasley <code@musicinmybrain.net> final1^20200311gitwyhash_final-5
- Indicate dirs. in files lists with trailing slashes

* Tue Nov 29 2022 Benjamin A. Beasley <code@musicinmybrain.net> final1^20200311gitwyhash_final-4
- Confirm License is SPDX Unlicense

* Sat Jul 23 2022 Fedora Release Engineering <releng@fedoraproject.org> final1^20200311gitwyhash_final-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild

* Fri Apr 22 2022 Benjamin A. Beasley <code@musicinmybrain.net> final1^20200311gitwyhash_final-2
- Fix virtual Provides

* Wed Apr 20 2022 Benjamin A. Beasley <code@musicinmybrain.net> final1^20200311gitwyhash_final-1
- Drop “forge” macros to modernize snapshot versioning

* Sat Jan 22 2022 Fedora Release Engineering <releng@fedoraproject.org> final1-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild

* Fri Dec 17 2021 Benjamin A. Beasley <code@musicinmybrain.net> final1-4
- Let -devel subpackage be noarch

* Sat Nov 13 2021 Benjamin A. Beasley <code@musicinmybrain.net> final1-3
- Reduce macro indirection in the spec file

* Sat Mar 06 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 1.20210306gitfinal
- Initial package