Name:       opentelemetry-cpp
Version:    1.19.0
Release:    2%{?dist}
Summary:    The C++ OpenTelemetry client
Group:      System Environment/Libraries
License:    ASL-2.0 AND MIT
URL:        https://opentelemetry.io/

# opentelemetry-proto is needed in the third_party directory, and
# is defined as Source1
%global otp_name         opentelemetry-proto
%global otp_version      1.5.0
%global protobuf_version 3.19.6

Source0:    %{name}-%{version}.tar.gz
Source1:    %{otp_name}-%{otp_version}.tar.gz
Patch0:     %{name}-%{version}.patch

BuildRequires: cmake
BuildRequires: gcc-c++
# Required for various exporters:
BuildRequires: libcurl-devel
BuildRequires: json-devel
BuildRequires: protobuf-devel = %{protobuf_version}
BuildRequires: grpc-devel
BuildRequires: c-ares-devel
Requires:   abseil-cpp

%description
OpenTelemetry is a collection of tools, APIs, and SDKs. Use it to instrument,
generate, collect, and export telemetry data (metrics, logs, and traces) to
help you analyze your software's performance and behavior. This library
contains the OpenTelemetry API and SDK for C++.

%files
%license LICENSE
%doc README.md
%defattr(-,root,root,-)
%{_libdir}/libopentelemetry_common.so.*
%{_libdir}/libopentelemetry_exporter_in_memory.so.*
%{_libdir}/libopentelemetry_exporter_ostream_logs.so.*
%{_libdir}/libopentelemetry_exporter_ostream_metrics.so.*
%{_libdir}/libopentelemetry_exporter_ostream_span.so.*
%{_libdir}/libopentelemetry_logs.so.*
%{_libdir}/libopentelemetry_metrics.so.*
%{_libdir}/libopentelemetry_resources.so.*
%{_libdir}/libopentelemetry_trace.so.*
%{_libdir}/libopentelemetry_version.so.*


# ====== devel ======
%package devel
Group:      Development/System
Summary:    Development API for opentelemetry-cpp
Requires:   cmake-filesystem
Requires:   json-devel
Requires:   opentelemetry-cpp = %{version}-%{release}

%description devel
%{summary}

%files devel
%license LICENSE
%doc README.md
%doc docs
%{_includedir}/opentelemetry/baggage
%{_includedir}/opentelemetry/common
%{_includedir}/opentelemetry/config.h
%{_includedir}/opentelemetry/context
%{_includedir}/opentelemetry/detail
%{_includedir}/opentelemetry/exporters/memory
%{_includedir}/opentelemetry/exporters/ostream
%{_includedir}/opentelemetry/ext
%{_includedir}/opentelemetry/logs
%{_includedir}/opentelemetry/metrics
%{_includedir}/opentelemetry/nostd
%{_includedir}/opentelemetry/plugin
%{_includedir}/opentelemetry/semconv
%{_includedir}/opentelemetry/sdk
%{_includedir}/opentelemetry/sdk_config.h
%{_includedir}/opentelemetry/std
%{_includedir}/opentelemetry/trace
%{_includedir}/opentelemetry/version.h
%{_libdir}/cmake/opentelemetry-cpp
%{_libdir}/libopentelemetry_common.so
%{_libdir}/libopentelemetry_exporter_in_memory.so
%{_libdir}/libopentelemetry_exporter_ostream_logs.so
%{_libdir}/libopentelemetry_exporter_ostream_metrics.so
%{_libdir}/libopentelemetry_exporter_ostream_span.so
%{_libdir}/libopentelemetry_logs.so
%{_libdir}/libopentelemetry_metrics.so
%{_libdir}/libopentelemetry_resources.so
%{_libdir}/libopentelemetry_trace.so
%{_libdir}/libopentelemetry_version.so
%{_libdir}/pkgconfig/opentelemetry_api.pc
%{_libdir}/pkgconfig/opentelemetry_common.pc
%{_libdir}/pkgconfig/opentelemetry_logs.pc
%{_libdir}/pkgconfig/opentelemetry_metrics.pc
%{_libdir}/pkgconfig/opentelemetry_resources.pc
%{_libdir}/pkgconfig/opentelemetry_trace.pc
%{_libdir}/pkgconfig/opentelemetry_version.pc


# ==== exporter-otlp ====
%package exporter-otlp
Summary:  OTLP GRPC and HTTP exporters for opentelemetry-cpp
Requires:   abseil-cpp
Requires:   c-ares
Requires:   grpc
Requires:   grpc-cpp
Requires:   openldap
Requires:   opentelemetry-cpp = %{version}-%{release}
Requires:   pcre2
Requires:   protobuf = %{protobuf_version}
Requires:   re2
Requires:   zlib-ng-compat

%description exporter-otlp
%{summary}

%files exporter-otlp
%license LICENSE
%{_libdir}/libopentelemetry_exporter_otlp_grpc.so.*
%{_libdir}/libopentelemetry_exporter_otlp_grpc_client.so.*
%{_libdir}/libopentelemetry_exporter_otlp_grpc_log.so.*
%{_libdir}/libopentelemetry_exporter_otlp_grpc_metrics.so.*
%{_libdir}/libopentelemetry_exporter_otlp_http.so.*
%{_libdir}/libopentelemetry_exporter_otlp_http_client.so.*
%{_libdir}/libopentelemetry_exporter_otlp_http_log.so.*
%{_libdir}/libopentelemetry_exporter_otlp_http_metric.so.*
%{_libdir}/libopentelemetry_http_client_curl.so.*
%{_libdir}/libopentelemetry_otlp_recordable.so.*
%{_libdir}/libopentelemetry_proto.so.*
%{_libdir}/libopentelemetry_proto_grpc.so.*


# ==== exporter-otlp-devel ====
%package exporter-otlp-devel
Summary:  OTLP GRPC and HTTP exporters development files for opentelemetry-cpp
Requires: opentelemetry-cpp-exporter-otlp = %{version}-%{release}
Requires: opentelemetry-cpp-devel = %{version}-%{release}
Requires: protobuf-devel = %{protobuf_version}

%description exporter-otlp-devel
%{summary}

%files exporter-otlp-devel
%{_includedir}/opentelemetry/exporters/otlp
%{_includedir}/opentelemetry/proto
%{_libdir}/libopentelemetry_exporter_otlp_grpc.so
%{_libdir}/libopentelemetry_exporter_otlp_grpc_client.so
%{_libdir}/libopentelemetry_exporter_otlp_grpc_log.so
%{_libdir}/libopentelemetry_exporter_otlp_grpc_metrics.so
%{_libdir}/libopentelemetry_exporter_otlp_http.so
%{_libdir}/libopentelemetry_exporter_otlp_http_client.so
%{_libdir}/libopentelemetry_exporter_otlp_http_log.so
%{_libdir}/libopentelemetry_exporter_otlp_http_metric.so
%{_libdir}/libopentelemetry_http_client_curl.so
%{_libdir}/libopentelemetry_otlp_recordable.so
%{_libdir}/libopentelemetry_proto.so
%{_libdir}/libopentelemetry_proto_grpc.so


# ==== exporter-in-memory-metric ====
%package exporter-in-memory-metric
Summary:  In-memory metrics exporter for opentelemetry-cpp
#Requires:   libstdc++
Requires:   opentelemetry-cpp = %{version}-%{release}

%description exporter-in-memory-metric
%{summary}

%files exporter-in-memory-metric
%{_libdir}/libopentelemetry_exporter_in_memory_metric.so.*


# ==== exporter-in-memory-metric-devel ====
%package exporter-in-memory-metric-devel
Summary:  Development files for in-memory metrics exporter for opentelemetry-cpp
Requires: exporter-in-memory-metric = %{version}-%{release}
Requires: opentelemetry-cpp-devel = %{version}-%{release}

%description exporter-in-memory-metric-devel
%{summary}

%files exporter-in-memory-metric-devel
%{_libdir}/libopentelemetry_exporter_in_memory_metric.so


# ==== exporter-zipkin ====
%package exporter-zipkin
Summary:  Zipkin exporter for opentelemetry-cpp
Requires:   openldap
Requires:   opentelemetry-cpp = %{version}-%{release}
Requires:   pcre2
Requires:   zlib-ng-compat

%description exporter-zipkin
%{summary}

%files exporter-zipkin
%license LICENSE
%{_libdir}/libopentelemetry_exporter_zipkin_trace.so.*
%{_libdir}/libopentelemetry_http_client_curl.so.*


# ==== exporter-zipkin-devel ====
%package exporter-zipkin-devel
Summary:  Zipkin exporter development files for opentelemetry-cpp
Requires: opentelemetry-cpp-exporter-zipkin = %{version}-%{release}
Requires: opentelemetry-cpp-devel = %{version}-%{release}

%description exporter-zipkin-devel
%{summary}

%files exporter-zipkin-devel
%{_includedir}/opentelemetry/exporters/zipkin
%{_libdir}/libopentelemetry_exporter_zipkin_trace.so
%{_libdir}/libopentelemetry_http_client_curl.so


# ======

%prep
%setup -q -n %{name}-%{version}
tar xf %{SOURCE1} -C %{_builddir}/%{name}-%{version}/third_party/opentelemetry-proto/ --strip 1
%patch 0 -p1

%build
%cmake \
    -DBUILD_TESTING:BOOL=OFF \
    -DBUILD_SHARED_LIBS:BOOL=ON \
    -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON \
    -DWITH_JAEGER:BOOL=OFF \
    -DWITH_OTLP_HTTP:BOOL=ON \
    -DWITH_OTLP_GRPC:BOOL=ON \
    -DWITH_PROMETHEUS:BOOL=OFF \
    -DWITH_ZIPKIN:BOOL=ON \
    -DWITH_EXAMPLES:BOOL=OFF \
    -DWITH_ABSEIL:BOOL=ON \
    -DOTELCPP_PROTO_PATH:PATH=%{_builddir}/%{name}-%{version}/third_party/opentelemetry-proto \
    -DOTELCPP_VERSIONED_LIBS:BOOL=ON
%cmake_build

%install
%cmake_install

%changelog
* Mon Mar 17 2025 Kim van der Riet - 1.19.0-2
- Updated rpm dependencies

* Mon Feb 3 2025 Kim van der Riet - 1.19.0-1
- Rebased to 1.19.0

* Wed Dec 18 2024 Kim van der Riet - 1.18.0-1
- Rebased to 1.18.0

* Tue Oct 8 2024 Kim van der Riet - 1.17.0-1
- Rebased to 1.17.0

* Mon Jun 24 2024 Kim van der Riet - 1.16.0-1
- Rebased to 1.16.0

* Wed May 1 2024 Kim van der Riet - 1.15.0-1
- Rebased to 1.15.0

* Wed Mar 13 2024 Kim van der Riet - 1.14.2-1
- Rebased to 1.14.2

* Thu Feb 22 2024 Kim van der Riet - 1.14.0-1
- Rebased to 1.14.0
- Rebased to opentelemetry-proto v1.1.0

* Tue Dec 12 2023 Kim van der Riet - 1.13.0-1
- Rebased to 1.13.0
- Removed zpages files as these were removed in 1.13.0

* Wed Oct 25 2023 Kim van der Riet - 1.12.0-1
- Rebased to 1.12.0
- Switched License text to SPDX format

* Tue Aug 29 2023 Kim van der Riet - 1.11.0-1
- Rebased to 1.11.0

* Thu Jul 27 2023 Kim van der Riet - 1.10.0-1
- Rebased to 1.10.0

* Mon Jun 12 2023 Kim van der Riet - 1.9.1-2
- Added missing requires for -devel packages

* Wed May 31 2023 Kim van der Riet - 1.9.1-1
- Rebased to upstream version 1.9.1
- No longer building jaeger exporter

* Thu May 25 2023 Kim van der Riet - 1.9.0-5
- Corrected bad Requires for opentelemetry-cpp-zpages
- Added separate cmake switches for WITH_OTLP_GRPC and WITH_OTLP_HTTP, both ON

* Thu May 11 2023 Kim van der Riet - 1.9.0-4
- Split the various exporters into their own packages

* Wed Apr 26 2023 Kim van der Riet - 1.9.0-3
- Added OTLP and OTLP_HTTP exporters
- Added zipkin exporter
- Fixed missing Requires
- Changed to using c++17 which rawhide requires for OTLP exporter

* Fri Apr 21 2023 Kim van der Riet - 1.9.0-2
- Fixed rpmlint undefined-non-weak-symbol error
- Removed dep on copr build of nlohmann-json, use json-devel instead

* Fri Apr 14 2023 Kim van der Riet - 1.9.0-1
- Rebased to upstream version 1.9.0

* Mon Dec 5 2022 Kim van der Riet - 1.8.1-1
- Rebased to upstream version 1.8.1

* Fri Dec 2 2022 Kim van der Riet - 1.7.0-1
- Initial build of 1.7.0