SHA256
1
0
forked from pool/protobuf
protobuf/protobuf.spec
Dirk Mueller a02710abd8 Accepting request 973989 from home:mcepl:branches:devel:languages:python
REQUIRED FOR UPDATE OF PYTHON-GOOGLE-API-CORE 

- Update to 3.20.1:
  - PHP
    - Fix building packaged PHP extension (#9727)
    - Fixed composer.json to only advertise compatibility with
      PHP 7.0+. (#9819)
  - Ruby
    - Disable the aarch64 build on macOS until it can be fixed. (#9816)
  - Other
    - Fix versioning issues in 3.20.0
- Update to 3.20.1:
  - Ruby
    - Dropped Ruby 2.3 and 2.4 support for CI and releases.
      (#9311)
    - Added Ruby 3.1 support for CI and releases (#9566).
    - Message.decode/encode: Add recursion_limit option
      (#9218/#9486)
    - Allocate with xrealloc()/xfree() so message allocation is
      visible to the
    - Ruby GC. In certain tests this leads to much lower memory
      usage due to more
    - frequent GC runs (#9586).
    - Fix conversion of singleton classes in Ruby (#9342)
    - Suppress warning for intentional circular require (#9556)
    - JSON will now output shorter strings for double and float
      fields when possible
    - without losing precision.
    - Encoding and decoding of binary format will now work
      properly on big-endian
    - systems.
    - UTF-8 verification was fixed to properly reject surrogate
      code points.
    - Unknown enums for proto2 protos now properly implement
      proto2's behavior of
    - putting such values in unknown fields.
  - Java
    - Revert "Standardize on Array copyOf" (#9400)
    - Resolve more java field accessor name conflicts (#8198)
    - Fix parseFrom to only throw InvalidProtocolBufferException
    - InvalidProtocolBufferException now allows arbitrary wrapped
      Exception types.
    - Fix bug in FieldSet.Builder.mergeFrom
    - Flush CodedOutputStream also flushes underlying
      OutputStream
    - When oneof case is the same and the field type is Message,
      merge the
    - subfield. (previously it was replaced.)’
    - Add @CheckReturnValue to some protobuf types
    - Report original exceptions when parsing JSON
    - Add more info to @deprecated javadoc for set/get/has
      methods
    - Fix initialization bug in doc comment line numbers
    - Fix comments for message set wire format.
  - Kotlin
    - Add test scope to kotlin-test for protobuf-kotlin-lite
      (#9518)
    - Add orNull extensions for optional message fields.
    - Add orNull extensions to all proto3 message fields.
  - Python
    - Dropped support for Python < 3.7 (#9480)
    - Protoc is now able to generate python stubs (.pyi) with
      --pyi_out
    - Pin multibuild scripts to get manylinux1 wheels back
      (#9216)
    - Fix type annotations of some Duration and Timestamp
      methods.
    - Repeated field containers are now generic in field types
      and could be used in type annotations.
    - Protobuf python generated codes are simplified. Descriptors
      and message classes' definitions are now dynamic created in
      internal/builder.py.
    - Insertion Points for messages classes are discarded.
    - has_presence is added for FieldDescriptor in python
    - Loosen indexing type requirements to allow valid index()
      implementations rather than only PyLongObjects.
    - Fix the deepcopy bug caused by not copying
      message_listener.
    - Added python JSON parse recursion limit (default 100)
    - Path info is added for python JSON parse errors
    - Pure python repeated scalar fields will not able to pickle.
      Convert to list first.
    - Timestamp.ToDatetime() now accepts an optional tzinfo
      parameter. If specified, the function returns
      a timezone-aware datetime in the given time zone. If
      omitted or None, the function returns a timezone-naive UTC
      datetime (as previously).
    - Adds client_streaming and server_streaming fields to
      MethodDescriptor.
    - Add "ensure_ascii" parameter to json_format.MessageToJson.
      This allows smaller JSON serializations with UTF-8 or other
      non-ASCII encodings.
    - Added experimental support for directly assigning numpy
      scalars and array.
    - Improve the calculation of public_dependencies in
      DescriptorPool.
    - [Breaking Change] Disallow setting fields to numpy
      singleton arrays or repeated fields to numpy
      multi-dimensional arrays. Numpy arrays should be indexed or
      flattened explicitly before assignment.
  - Compiler
    - Migrate IsDefault(const std::string*) and
      UnsafeSetDefault(const std::string*)
    - Implement strong qualified tags for TaggedPtr
    - Rework allocations to power-of-two byte sizes.
    - Migrate IsDefault(const std::string*) and
      UnsafeSetDefault(const std::string*)
    - Implement strong qualified tags for TaggedPtr
    - Make TaggedPtr Set...() calls explicitly spell out the
      content type.
    - Check for parsing error before verifying UTF8.
    - Enforce a maximum message nesting limit of 32 in the
      descriptor builder to
    - guard against stack overflows
    - Fixed bugs in operators for RepeatedPtrIterator
    - Assert a maximum map alignment for allocated values
    - Fix proto1 group extension protodb parsing error
    - Do not log/report the same descriptor symbol multiple
      times if it contains
    - more than one invalid character.
    - Add UnknownFieldSet::SerializeToString and
      SerializeToCodedStream.
    - Remove explicit default pointers and deprecated API from
      protocol compiler
  - Arenas
    - Change Repeated*Field to reuse memory when using arenas.
    - Implements pbarenaz for profiling proto arenas
    - Introduce CreateString() and CreateArenaString() for
      cleaner semantics
    - Fix unreferenced parameter for MSVC builds
    - Add UnsafeSetAllocated to be used for one-of string
      fields.
    - Make Arena::AllocateAligned() a public function.
    - Determine if ArenaDtor related code generation is
      necessary in one place.
    - Implement on demand register ArenaDtor for
      InlinedStringField
  - C++
    - Enable testing via CTest (#8737)
    - Add option to use external GTest in CMake (#8736)
    - CMake: Set correct sonames for libprotobuf-lite.so and
      libprotoc.so (#8635) (#9529)
    - Add cmake option protobuf_INSTALL to not install files
      (#7123)
    - CMake: Allow custom plugin options e.g. to generate mocks
      (#9105)
    - CMake: Use linker version scripts (#9545)
    - Manually *struct Cord fields to work better with arenas.
    - Manually destruct map fields.
    - Generate narrower code
    - Fix #9378 by removing
    - shadowed cached_size field
    - Remove GetPointer() and explicit nullptr defaults.
    - Add proto_h flag for speeding up large builds
    - Add missing overload for reference wrapped fields.
    - Add MergedDescriptorDatabase::FindAllFileNames()
    - RepeatedField now defines an iterator type instead of
      using a pointer.
    - Remove obsolete macros GOOGLE_PROTOBUF_HAS_ONEOF and
      GOOGLE_PROTOBUF_HAS_ARENAS.
  - PHP
    - Fix: add missing reserved classnames (#9458)
    - PHP 8.1 compatibility (#9370)
  - C#
    - Fix trim warnings (#9182)
    - Fixes NullReferenceException when accessing
      FieldDescriptor.IsPacked (#9430)
    - Add ToProto() method to all descriptor classes (#9426)
    - Add an option to preserve proto names in JsonFormatter
      (#6307)
  - Objective-C
    - Add prefix_to_proto_package_mappings_path option. (#9498)
    - Rename proto_package_to_prefix_mappings_path to
      package_to_prefix_mappings_path. (#9552)
    - Add a generation option to control use of forward
      declarations in headers. (#9568)
- Add change_desc_db.patch to fix
  gh#googleapis/python-api-core#372 and
  gh#protocolbuffers/protobuf#9867

OBS-URL: https://build.opensuse.org/request/show/973989
OBS-URL: https://build.opensuse.org/package/show/devel:tools:building/protobuf?expand=0&rev=114
2022-05-02 07:20:20 +00:00

299 lines
10 KiB
RPMSpec

#
# spec file for package protobuf
#
# Copyright (c) 2022 SUSE LLC
#
# 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/
#
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define sover 31
%define tarname protobuf
%define src_install_dir %{_prefix}/src/%{name}
%define extra_java_flags -source 7 -target 7
# requires gmock, which is not yet in the distribution
%bcond_with check
%bcond_without java
%bcond_without python2
%bcond_without python3
Name: protobuf
Version: 3.20.1
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/archive/v%{version}.tar.gz#/%{tarname}-%{version}.tar.gz
Source1: manifest.txt.in
Source2: baselibs.conf
# PATCH-FIX-UPSTREAM change_desc_db.patch gh#googleapis/python-api-core#372 mcepl@suse.com
# Remove leading dot from database entries, probably just a poor workaround
# Reported to upstream as gh#protocolbuffers/protobuf#9867
Patch0: change_desc_db.patch
BuildRequires: %{python_module devel}
BuildRequires: %{python_module python-dateutil}
BuildRequires: %{python_module setuptools}
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: fdupes
BuildRequires: gcc-c++
BuildRequires: libtool
BuildRequires: pkgconfig
BuildRequires: python-rpm-macros
BuildRequires: zlib-devel
%if %{with check}
BuildRequires: libgmock-devel >= 1.7.0
%endif
%if %{with java}
BuildRequires: java-devel >= 1.6.0
BuildRequires: javapackages-local
%endif
%if 0%{?suse_version} >= 1550
# TW: generate subpackages for every python3 flavor
%define python_subpackage_only 1
%python_subpackages
%else
# same "defaults" for all distributions, used in files section
%define python_files() -n python3-%{**}
%define python_sitelib %{python3_sitelib}
%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 -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: gcc-c++
Requires: libprotobuf%{sover} = %{version}
Requires: libprotobuf-lite%{sover}
Requires: pkgconfig(zlib)
Conflicts: protobuf2-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.
%package source
Summary: Source code of protobuf
Group: Development/Sources
BuildArch: noarch
%description source
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 source code for Protocol Buffers.
%package -n %{name}-java
Summary: Java Bindings for Google Protocol Buffers
Group: Development/Libraries/Java
Requires: java >= 1.6.0
%description -n %{name}-java
This package contains the Java bindings for Google Protocol Buffers.
%if 0%{?python_subpackage_only}
%package -n python-%{name}
Summary: Python Bindings for Google Protocol Buffers
Group: Development/Libraries/Python
Requires: python-six >= 1.9
%description -n python-%{name}
This package contains the Python bindings for Google Protocol Buffers.
%else
%package -n python2-%{name}
Summary: Python2 Bindings for Google Protocol Buffers
Group: Development/Libraries/Python
Provides: python-%{name} = %{version}
Obsoletes: python-%{name} < %{version}
Requires: python2-six >= 1.9
%description -n python2-%{name}
This package contains the Python bindings for Google Protocol Buffers.
%package -n python3-%{name}
Summary: Python3 Bindings for Google Protocol Buffers
Group: Development/Libraries/Python
Requires: python3-six >= 1.9
%description -n python3-%{name}
This package contains the Python bindings for Google Protocol Buffers.
%endif
%prep
%autosetup -p1 -n %{tarname}-%{version}
mkdir gmock
%if %{with python2} || %{with python3}
# only needed for test suite which we don't call anyways.
# googleapis is broken on sle12
sed -i '/apputils/d' python/setup.py
sed -i '/google_test_dir/d' python/setup.py
%endif
# kill shebang that we do not really want
sed -i -e '/env python/d' python/google/protobuf/internal/*.py
%build
%define _lto_cflags %{nil}
autoreconf -fvi
%configure \
--disable-static
make %{?_smp_mflags}
%if %{with java}
pushd java
../src/protoc --java_out=core/src/main/java -I../src ../src/google/protobuf/descriptor.proto
mkdir classes
javac %{extra_java_flags} -d classes core/src/main/java/com/google/protobuf/*.java
sed -e 's/@VERSION@/%{version}/' < %{SOURCE1} > manifest.txt
jar cfm %{name}-java-%{version}.jar manifest.txt -C classes com
popd
%endif
pushd python
%python_build
popd
%if %{with check}
%check
make %{?_smp_mflags} check
%endif
%install
%make_install
install -Dm 0644 editors/proto.vim %{buildroot}%{_datadir}/vim/site/syntax/proto.vim
# no need for that
find %{buildroot} -type f -name "*.la" -delete -print
%if %{with java}
pushd java
install -D -m 0644 %{name}-java-%{version}.jar %{buildroot}%{_javadir}/%{name}-java.jar
ln -s %{name}-java.jar %{buildroot}%{_javadir}/%{name}.jar
install -D -m 0644 pom.xml %{buildroot}%{_mavenpomdir}/%{name}-parent.pom
%add_maven_depmap %{name}-parent.pom
install -D -m 0644 bom/pom.xml %{buildroot}%{_mavenpomdir}/%{name}-bom.pom
%add_maven_depmap %{name}-bom.pom
install -D -m 0644 core/pom.xml %{buildroot}%{_mavenpomdir}/%{name}-java.pom
%add_maven_depmap %{name}-java.pom %{name}-java.jar
popd
%endif
pushd python
%python_install
popd
%python_expand %fdupes %{buildroot}%{$python_sitelib}
mkdir -p %{buildroot}%{src_install_dir}
tar -xzf %{SOURCE0} --strip-components=1 -C %{buildroot}%{src_install_dir}
%fdupes %{buildroot}%{src_install_dir}
# Fix env-script-interpreter rpmlint error
find %{buildroot}%{src_install_dir} -type f -name "*.js" -exec sed -i 's|#!.*%{_bindir}/env node|#!%{_bindir}/node|' "{}" +
find %{buildroot}%{src_install_dir} -type f -name "*.py" -exec sed -i 's|#!.*%{_bindir}/env python2.7|#!%{_bindir}/python2.7|' "{}" +
find %{buildroot}%{src_install_dir} -type f -name "*.py" -exec sed -i 's|#!.*%{_bindir}/env python|#!%{_bindir}/python|' "{}" +
find %{buildroot}%{src_install_dir} -type f -name "*.rb" -exec sed -i 's|#!.*%{_bindir}/env ruby|#!%{_bindir}/ruby|' "{}" +
find %{buildroot}%{src_install_dir} -type f -name "*.sh" -exec sed -i 's|#!.*%{_bindir}/env bash|#!/bin/bash|' "{}" +
# And stop requiring ridiculously old Python version
find %{buildroot}%{src_install_dir} -type f -name "*.py" -exec sed -i 's|#!%{_bindir}/python2.4|#!%{_bindir}/python2.7|' "{}" +
# Fix spurious-executable-perm rpmlint error
chmod -x %{buildroot}%{src_install_dir}/src/google/protobuf/arenastring.h
chmod -x %{buildroot}%{src_install_dir}/src/google/protobuf/compiler/js/js_generator.h
chmod -x %{buildroot}%{src_install_dir}/src/google/protobuf/reflection.h
# Fix version-control-internal-file rpmlint warning
find %{buildroot}%{src_install_dir} -type f -name ".gitignore" -exec rm -f "{}" +
%fdupes %{buildroot}%{_prefix}
%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
%files -n libprotobuf%{sover}
%license LICENSE
%{_libdir}/libprotobuf.so.%{sover}*
%files -n libprotoc%{sover}
%{_libdir}/libprotoc.so.%{sover}*
%files -n libprotobuf-lite%{sover}
%{_libdir}/libprotobuf-lite.so.%{sover}*
%files devel
%doc CHANGES.txt CONTRIBUTORS.txt README.md
%{_bindir}/protoc
%{_includedir}/google
%{_libdir}/*.so
%{_libdir}/pkgconfig/*
%{_datadir}/vim
%files source
%{src_install_dir}
%if %{with java}
%files -n %{name}-java -f java/.mfiles
%{_javadir}/%{name}.jar
%endif
%if %{with python2} && ! 0%{?python_subpackage_only}
%files -n python2-%{name}
%license LICENSE
%{python2_sitelib}/*
%endif
%if %{with python3} || ( %{with python2} && 0%{?python_subpackage_only} )
%files %{python_files %{name}}
%license LICENSE
%{python_sitelib}/*
%endif
%changelog