protobuf/protobuf.spec

233 lines
8.5 KiB
RPMSpec

#
# spec file for package protobuf
#
# Copyright (c) 2024 SUSE LLC
# Copyright (c) 2024 Andreas Stieger <Andreas.Stieger@gmx.de>
#
# 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 https://bugs.opensuse.org/
#
%define tarname protobuf
# see cmake/abseil-cpp.cmake and src/google/protobuf/port_def.inc
%define abseil_min_version 20230125.3
%global sover 28_2_0
%if 0%{?gcc_version} < 11
%define with_gcc 11
%endif
# requires gmock, which is not yet in the distribution
%bcond_with check
Name: protobuf
Version: 28.2
Release: 0
Summary: Protocol Buffers - Google's data interchange format
License: BSD-3-Clause
Group: Development/Libraries/C and C++
URL: https://github.com/protocolbuffers/protobuf
Source0: https://github.com/protocolbuffers/protobuf/releases/download/v%{version}/%{tarname}-%{version}.tar.gz
Source1: baselibs.conf
Patch0: static-utf8-ranges.patch
BuildRequires: cmake
BuildRequires: fdupes
BuildRequires: gcc%{?with_gcc}-c++
BuildRequires: pkgconfig
BuildRequires: python-rpm-macros
# see cmake/abseil-cpp.cmake
BuildRequires: pkgconfig(absl_absl_check) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_absl_log) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_algorithm) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_base) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_bind_front) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_bits) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_btree) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_cleanup) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_cord) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_core_headers) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_debugging) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_die_if_null) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_dynamic_annotations) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_flags) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_flat_hash_map) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_flat_hash_set) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_function_ref) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_hash) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_layout) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_log_initialize) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_log_severity) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_memory) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_node_hash_map) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_node_hash_set) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_optional) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_span) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_status) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_statusor) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_strings) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_synchronization) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_time) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_type_traits) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_utility) >= %{abseil_min_version}
BuildRequires: pkgconfig(absl_variant) >= %{abseil_min_version}
BuildRequires: pkgconfig(zlib)
%if %{with check}
BuildRequires: libgmock-devel >= 1.7.0
%endif
%description
Protocol Buffers are a way of encoding structured data in an efficient yet
extensible format. Google uses Protocol Buffers for almost all of its internal
RPC protocols and file formats.
%package compiler
Summary: Protocol Buffers compiler
Group: Development/Libraries/C and C++
Provides: protobuf-devel:/usr/bin/protoc
Provides: protoc = %{version}
Conflicts: mvn(com.google.protobuf:protobuf-java) < 4.%{version}
%description compiler
Protocol Buffers are a way of encoding structured data in an efficient yet
extensible format. Google uses Protocol Buffers for almost all of its internal
RPC protocols and file formats.
This package contains Protocol Buffers compiler for all programming
languages
%package -n libprotobuf%{sover}
Summary: Protocol Buffers - Google's data interchange format
Group: System/Libraries
%description -n libprotobuf%{sover}
Protocol Buffers are a way of encoding structured data in an efficient yet
extensible format. Google uses Protocol Buffers for almost all of its internal
RPC protocols and file formats.
%package -n libprotoc%{sover}
Summary: Protocol Buffers - Google's data interchange format
Group: System/Libraries
%description -n libprotoc%{sover}
Protocol Buffers are a way of encoding structured data in an efficient yet
extensible format. Google uses Protocol Buffers for almost all of its internal
RPC protocols and file formats.
%package -n libprotobuf-lite%{sover}
Summary: Protocol Buffers - Google's data interchange format
Group: System/Libraries
%description -n libprotobuf-lite%{sover}
Protocol Buffers are a way of encoding structured data in an efficient yet
extensible format. Google uses Protocol Buffers for almost all of its internal
RPC protocols and file formats.
%package devel
Summary: Header files, libraries and development documentation for %{name}
Group: Development/Libraries/C and C++
Requires: %{name}-compiler = %{version}
Requires: libprotobuf%{sover} = %{version}
Requires: libprotobuf-lite%{sover}
Conflicts: protobuf2-devel
Conflicts: protobuf21-devel
Provides: libprotobuf-devel = %{version}
%description devel
Protocol Buffers are a way of encoding structured data in an efficient yet
extensible format. Google uses Protocol Buffers for almost all of its internal
RPC protocols and file formats.
%prep
%autosetup -p1 -n %{tarname}-%{version}
mkdir gmock
%build
%global _lto_cflags %{_lto_cflags} -ffat-lto-objects
# tests are not part of offical tar ball
%if 0%{?with_gcc}
export CXX=g++-%{with_gcc}
export CC=gcc-%{with_gcc}
%endif
%cmake \
-Dprotobuf_BUILD_TESTS=OFF \
-Dprotobuf_ABSL_PROVIDER=package
%cmake_build
%if %{with check}
%check
%make_build check
%endif
%install
%cmake_install
install -Dm 0644 editors/proto.vim %{buildroot}%{_datadir}/vim/site/syntax/proto.vim
%fdupes %{buildroot}%{_prefix}
# SLE12 does not define this macro
%if %{undefined ldconfig_scriptlets}
%post -n libprotobuf%{sover} -p /sbin/ldconfig
%postun -n libprotobuf%{sover} -p /sbin/ldconfig
%post -n libprotoc%{sover} -p /sbin/ldconfig
%postun -n libprotoc%{sover} -p /sbin/ldconfig
%post -n libprotobuf-lite%{sover} -p /sbin/ldconfig
%postun -n libprotobuf-lite%{sover} -p /sbin/ldconfig
%else
%ldconfig_scriptlets -n libprotobuf%{sover}
%ldconfig_scriptlets -n libprotoc%{sover}
%ldconfig_scriptlets -n libprotobuf-lite%{sover}
%endif
%files compiler
%{_bindir}/protoc*
%license LICENSE
%files -n libprotobuf%{sover}
%license LICENSE
%{_libdir}/libprotobuf.so.%{version}.0
%files -n libprotoc%{sover}
%license LICENSE
%{_libdir}/libprotoc.so.%{version}.0
%files -n libprotobuf-lite%{sover}
%license LICENSE
%{_libdir}/libprotobuf-lite.so.%{version}.0
%files devel
%license LICENSE
%doc CONTRIBUTORS.txt README.md
%{_includedir}/google
%dir %{_includedir}/java
%dir %{_includedir}/java/core
%dir %{_includedir}/java/core/src
%dir %{_includedir}/java/core/src/main
%dir %{_includedir}/java/core/src/main/resources
%dir %{_includedir}/java/core/src/main/resources/
%dir %{_includedir}/java/core/src/main/resources/google
%dir %{_includedir}/java/core/src/main/resources/google/protobuf
%{_includedir}/java/core/src/main/resources/google/protobuf/java_features.proto
%{_includedir}/upb
%{_includedir}/upb_generator
%{_includedir}/*.h
%{_libdir}/cmake/protobuf
%{_libdir}/cmake/utf8_range
%{_libdir}/pkgconfig/*
%{_libdir}/libprotobuf-lite.so
%{_libdir}/libprotobuf.so
%{_libdir}/libprotoc.so
%{_libdir}/libupb.a
%{_libdir}/libutf8_range.a
%{_libdir}/libutf8_validity.a
%{_datadir}/vim
%changelog