%global php_extdir  %(php-config --extension-dir 2>/dev/null || echo "undefined")
%{?perl_default_filter}
%global __provides_exclude_from ^(%{python3_sitearch}/.*\\.so|%{php_extdir}/.*\\.so)$
%global have_mongrel 0
%global have_jsx 0
%global want_d 0
%if 0%{?have_mongrel} == 0
%global ruby_configure --without-ruby
%global with_ruby 0
%else
%global ruby_configure --with-ruby
%global want_ruby 1
%endif
%if 0%{?have_jsx} == 0
%global erlang_configure --without-erlang
%global want_erlang 0
%else
%global erlang_configure --with-erlang
%global want_erlang 1
%endif
%global want_php 0
%if 0%{?want_php} == 0
%global php_langname %{nil}
%global php_configure --without-php
%else
%global php_langname PHP,\
%global php_configure --with-php
%endif
%global want_golang 0
%global golang_configure --without-go
Name:                thrift
Version:             0.10.0
Release:             1
Summary:             Software framework for cross-language services development
License:             ASL 2.0 and BSD and zlib
URL:                 https://thrift.apache.org/
Source0:             https://archive.apache.org/dist/thrift/%{version}/thrift-%{version}.tar.gz
Source1:             https://repo1.maven.org/maven2/org/apache/thrift/libthrift/%{version}/libthrift-%{version}.pom
Source2:             https://raw.github.com/apache/thrift/%{version}/bootstrap.sh
Source3:             https://repo1.maven.org/maven2/org/apache/thrift/libfb303/%{version}/libfb303-%{version}.pom
Patch0:              thrift-%{version}-buildxml.patch
Patch1:              fb303-%{version}-buildxml.patch
Patch2:              configure-java-prefix.patch
Patch3:              fix-ppc64le-builds.patch
Patch4:              THRIFT-4177.patch
Patch5:              python3.patch
BuildRequires:       ant >= 1.7 autoconf automake bison boost-devel flex flex-devel gcc-c++
BuildRequires:       glib2-devel libevent-devel libstdc++-devel libtool openssl-devel qt-devel
BuildRequires:       texlive zlib-devel
%if 0%{?want_golang} > 0
BuildRequires:       golang
Requires:            golang
%endif
%description
The Apache Thrift software framework for cross-language services
development combines a software stack with a code generation engine to
build services that work efficiently and seamlessly between C++, Java,
Python, %{?php_langname}and other languages.

%package devel
Summary:             Development files for thrift
Requires:            thrift%{?_isa} = %{version}-%{release} pkgconfig boost-devel
%description devel
The thrift-devel package contains libraries and header files for
developing applications that use thrift.

%package        qt
Summary:             Qt support for thrift
Requires:            thrift%{?_isa} = %{version}-%{release}
%description    qt
The thrift-qt package contains Qt bindings for thrift.

%package        glib
Summary:             GLib support for thrift
Requires:            thrift%{?_isa} = %{version}-%{release}
%description    glib
The thrift-qt package contains GLib bindings for thrift.

%package -n python3-thrift
Summary:             Python 3 support for thrift
BuildRequires:       python3-devel
Requires:            thrift%{?_isa} = %{version}-%{release} python3
Obsoletes:           python-thrift < 0.10.0-1%{?dist}
Obsoletes:           python2-thrift < 0.10.0-14%{?dist}
%description -n python3-thrift
The python3-thrift package contains Python bindings for thrift.

%package -n perl-thrift
Summary:             Perl support for thrift
Provides:            perl(Thrift) = %{version}-%{release}
BuildRequires:       perl(Bit::Vector) perl(Class::Accessor) perl(ExtUtils::MakeMaker)
BuildRequires:       perl-generators
Requires:            perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
Requires:            perl(Bit::Vector) perl(Encode) perl(HTTP::Request) perl(IO::Select)
Requires:            perl(IO::Socket::INET) perl(IO::String) perl(LWP::UserAgent) perl(POSIX)
Requires:            perl(base) perl(constant) perl(strict) perl(utf8) perl(warnings)
BuildArch:           noarch
%description -n perl-thrift
The perl-thrift package contains Perl bindings for thrift.
%if %{?want_d}

%package -n d-thrift
Summary:             D support for thrift
BuildRequires:       ldc
%description -n d-thrift
The d-thrift package contains D bindings for thrift.
%endif
%if 0%{?want_php} != 0

%package -n php-thrift
Summary:             PHP support for thrift
Requires:            thrift%{?_isa} = %{version}-%{release} php(zend-abi) = %{php_zend_api}
Requires:            php(api) = %{php_core_api} php(language) >= 5.3.0 php-date php-json
BuildRequires:       php-devel
%description -n php-thrift
The php-thrift package contains PHP bindings for thrift.
%endif

%package -n libthrift-javadoc
Summary:             API documentation for java-thrift
Requires:            libthrift-java = %{version}-%{release}
BuildArch:           noarch
%description -n libthrift-javadoc
The libthrift-javadoc package contains API documentation for the
Java bindings for thrift.

%package -n libthrift-java
Summary:             Java support for thrift
BuildRequires:       apache-commons-codec apache-commons-lang apache-commons-logging
BuildRequires:       httpcomponents-client httpcomponents-core java-devel javapackages-tools
BuildRequires:       javapackages-local junit log4j slf4j
BuildRequires:       mvn(javax.servlet:javax.servlet-api) = 3.1.0
Requires:            java-headless >= 1:1.6.0 javapackages-tools mvn(org.slf4j:slf4j-api)
Requires:            mvn(commons-lang:commons-lang) mvn(org.apache.httpcomponents:httpclient)
Requires:            mvn(org.apache.httpcomponents:httpcore)
BuildArch:           noarch
%description -n libthrift-java
The libthrift-java package contains Java bindings for thrift.
%if 0%{?want_ruby} > 0

%package -n ruby-thrift
Summary:             Ruby support for thrift
Requires:            thrift%{?_isa} = %{version}-%{release} ruby(release)
BuildRequires:       ruby-devel
%description -n ruby-thrift
The ruby-thrift package contains Ruby bindings for thrift.
%endif
%if 0%{?want_erlang} > 0

%package -n erlang-thrift
Summary:             Erlang support for thrift
Requires:            thrift%{?_isa} = %{version}-%{release} erlang erlang-jsx
BuildRequires:       erlang erlang-rebar
%description -n erlang-thrift
The erlang-thrift package contains Erlang bindings for thrift.
%endif

%package -n fb303
Summary:             Basic interface for Thrift services
Requires:            thrift%{?_isa} = %{version}-%{release}
%description -n fb303
fb303 is the shared root of all Thrift services; it provides a
standard interface to monitoring, dynamic options and configuration,
uptime reports, activity, etc.

%package -n fb303-devel
Summary:             Development files for fb303
Requires:            fb303%{?_isa} = %{version}-%{release}
%description -n fb303-devel
The fb303-devel package contains header files for fb303

%package -n python3-fb303
Summary:             Python 3 bindings for fb303
Requires:            fb303%{?_isa} = %{version}-%{release}
BuildRequires:       python3-devel
Obsoletes:           python-fb303 < 0.10.0-1%{?dist}
Obsoletes:           python2-fb303 < 0.10.0-14%{?dist}
%description -n python3-fb303
The python3-fb303 package contains Python bindings for fb303.

%package -n fb303-java
Summary:             Java bindings for fb303
Requires:            java-headless >= 1:1.6.0 javapackages-tools mvn(org.slf4j:slf4j-api)
Requires:            mvn(commons-lang:commons-lang) mvn(org.apache.httpcomponents:httpclient)
Requires:            mvn(org.apache.httpcomponents:httpcore)
BuildArch:           noarch
%description -n fb303-java
The fb303-java package contains Java bindings for fb303.

%prep
%autosetup -p1
%{?!el5:sed -i -e 's/^AC_PROG_LIBTOOL/LT_INIT/g' configure.ac}
find . -name \*.cpp -or -name \*.cc -or -name \*.h | xargs -r chmod 644
cp -p %{SOURCE2} bootstrap.sh
echo 'libthrift_c_glib_la_LIBADD = $(GLIB_LIBS) $(GOBJECT_LIBS) -L../cpp/.libs ' >> lib/c_glib/Makefile.am
echo 'libthriftqt_la_LIBADD = $(QT_LIBS) -lthrift -L.libs' >> lib/cpp/Makefile.am
echo 'libthriftz_la_LIBADD = $(ZLIB_LIBS) -lthrift -L.libs' >> lib/cpp/Makefile.am
echo 'EXTRA_libthriftqt_la_DEPENDENCIES = libthrift.la' >> lib/cpp/Makefile.am
echo 'EXTRA_libthriftz_la_DEPENDENCIES = libthrift.la' >> lib/cpp/Makefile.am
sed -i 's|libfb303_so_LDFLAGS = $(SHARED_LDFLAGS)|libfb303_so_LDFLAGS = $(SHARED_LDFLAGS) -lthrift -L../../../lib/cpp/.libs -Wl,--as-needed|g' contrib/fb303/cpp/Makefile.am
sed -i 's|ANT_VALID=.*|ANT_VALID=1|' aclocal/ax_javac_and_java.m4
sed -i 's|ANT_VALID=.*|ANT_VALID=1|' contrib/fb303/aclocal/ax_javac_and_java.m4

%build
export PY_PREFIX=%{_prefix}
export PERL_PREFIX=%{_prefix}
export PHP_PREFIX=%{php_extdir}
export JAVA_PREFIX=%{_javadir}
export RUBY_PREFIX=%{_prefix}
export GLIB_LIBS=$(pkg-config --libs glib-2.0)
export GLIB_CFLAGS=$(pkg-config --cflags glib-2.0)
export GOBJECT_LIBS=$(pkg-config --libs gobject-2.0)
export GOBJECT_CFLAGS=$(pkg-config --cflags gobject-2.0)
find %{_builddir} -name rebar -exec rm -f '{}' \;
find . -name Makefile\* -exec sed -i -e 's/[.][/]rebar/rebar/g' {} \;
sed -i 's|-Dinstall.javadoc.path=$(DESTDIR)$(docdir)/java|-Dinstall.javadoc.path=$(DESTDIR)%{_javadocdir}/thrift|' lib/java/Makefile.*
sed -i 's|${thrift.artifactid}-${version}|${thrift.artifactid}|' lib/java/build.xml
sed -i 's|$(INSTALL) $$p|$(INSTALL) --mode 644 $$p|g' lib/erl/Makefile.am
sed -i 's|$(thrift_home)/bin/thrift|../../../compiler/cpp/thrift|g' \
 contrib/fb303/cpp/Makefile.am \
 contrib/fb303/py/Makefile.am
sed -i 's|$(prefix)/lib$|%{_libdir}|g' contrib/fb303/cpp/Makefile.am
sed -i 's|$(thrift_home)/include/thrift|../../../lib/cpp/src|g' \
 contrib/fb303/cpp/Makefile.am
echo "all:
	ant
install: build/libfb303.jar
	mkdir -p %{buildroot}%{_javadir}
	/usr/bin/install -c -m 644 build/libfb303.jar %{buildroot}%{_javadir}
" > contrib/fb303/java/Makefile
sh ./bootstrap.sh
export PYTHON=%{_bindir}/python3
%configure --disable-dependency-tracking --disable-static --with-boost=/usr %{ruby_configure} %{erlang_configure} %{golang_configure} %{php_configure} --with-py3 --docdir=%{?_pkgdocdir}%{!?_pkgdocdir:%{_docdir}/thrift-%{version}}
sed -i -e 's/ -shared / -Wl,--as-needed\0/g' libtool
make %{?_smp_mflags}
(
  cd contrib/fb303
  sed -i '/^[.][/]configure.*/d' bootstrap.sh
  sh bootstrap.sh
  %configure --disable-static --with-java --without-php --with-py3 --libdir=%{_libdir}
  make %{?_smp_mflags}
  (
      cd java
      ant dist
  )
)

%install
%make_install
find %{buildroot} -name '*.la' -exec rm -f {} ';'
find %{buildroot} -name fastbinary.so | xargs -r chmod 755
find %{buildroot} -name \*.erl -or -name \*.hrl -or -name \*.app | xargs -r chmod 644
find %{buildroot}/%{_javadir} -name libthrift-javadoc.jar -exec rm -f '{}' \;
mkdir -p %{buildroot}%{_mavenpomdir}
install -pm 644 %{SOURCE1} %{buildroot}%{_mavenpomdir}/JPP-libthrift.pom
%add_maven_depmap JPP-libthrift.pom libthrift.jar
find %{buildroot} -name \*.jar -a \! -name \*thrift\* -exec rm -f '{}' \;
find %{buildroot} -name \*.pod -exec rm -f '{}' \;
find %{buildroot} -name .packlist -exec rm -f '{}' \;
find %{buildroot}/usr/lib/perl5 -type d -empty -delete
mkdir -p %{buildroot}/%{perl_vendorlib}/
mv %{buildroot}/usr/lib/perl5/* %{buildroot}/%{perl_vendorlib}
%if 0%{?want_php} != 0
mkdir -p %{buildroot}/%{_datadir}/php/
mv %{buildroot}/%{php_extdir}/Thrift %{buildroot}/%{_datadir}/php/
%endif # want_php
find %{buildroot} -name Thread.h -exec chmod a-x '{}' \;
(
  cd contrib/fb303
  make DESTDIR=%{buildroot} install
  (
    cd java
    ant -Dinstall.path=%{buildroot}%{_javadir} -Dinstall.javadoc.path=%{buildroot}%{_javadocdir}/fb303 install
  )
)
install -pm 644 %{SOURCE3} %{buildroot}%{_mavenpomdir}/JPP-libfb303.pom
%add_maven_depmap JPP-libfb303.pom libfb303.jar -f "fb303"
find %{buildroot} -name \*.py -exec grep -q /usr/bin/env {} \; -print | xargs -r chmod 755

%post -p /sbin/ldconfig

%postun -p /sbin/ldconfig

%files
%doc LICENSE NOTICE
%{_bindir}/thrift
%{_libdir}/libthrift-%{version}.so
%{_libdir}/libthriftz-%{version}.so
%{_libdir}/libthriftnb-%{version}.so

%files glib
%{_libdir}/libthrift_c_glib.so
%{_libdir}/libthrift_c_glib.so.*

%files qt
%{_libdir}/libthriftqt.so
%{_libdir}/libthriftqt-%{version}.so

%files devel
%{_includedir}/thrift
%exclude %{_includedir}/thrift/fb303
%{_libdir}/*.so
%{_libdir}/*.so.0
%{_libdir}/*.so.0.0.0
%exclude %{_libdir}/lib*-%{version}.so
%exclude %{_libdir}/libfb303.so
%{_libdir}/pkgconfig/thrift-z.pc
%{_libdir}/pkgconfig/thrift-qt.pc
%{_libdir}/pkgconfig/thrift-nb.pc
%{_libdir}/pkgconfig/thrift.pc
%{_libdir}/pkgconfig/thrift_c_glib.pc
%doc LICENSE NOTICE

%files -n perl-thrift
%{perl_vendorlib}/Thrift
%{perl_vendorlib}/Thrift.pm
%doc LICENSE NOTICE
%if 0%{?want_php} != 0

%files -n php-thrift
%config(noreplace) /etc/php.d/thrift_protocol.ini
%{_datadir}/php/Thrift/
%{php_extdir}/thrift_protocol.so
%doc LICENSE NOTICE
%endif
%if %{?want_erlang} > 0

%files -n erlang-thrift
%{_libdir}/erlang/lib/thrift-%{version}/
%doc LICENSE NOTICE
%endif

%files -n python3-thrift
%{python3_sitearch}/thrift
%{python3_sitearch}/thrift-%{version}-py%{python3_version}.egg-info
%doc LICENSE NOTICE

%files -n libthrift-javadoc
%{_javadocdir}/thrift
%doc LICENSE NOTICE

%files -n libthrift-java -f .mfiles
%doc LICENSE NOTICE

%files -n fb303
%{_datarootdir}/fb303
%doc LICENSE NOTICE

%files -n fb303-devel
%{_libdir}/libfb303.so
%{_includedir}/thrift/fb303
%doc LICENSE NOTICE

%files -n python3-fb303
%{python3_sitelib}/fb303
%{python3_sitelib}/fb303_scripts
%{python3_sitelib}/thrift_fb303-%{version}-py%{python3_version}.egg-info
%doc LICENSE NOTICE

%files -n fb303-java -f .mfiles-fb303
%doc LICENSE NOTICE

%changelog
* Tue Aug 18 2020 yaokai <yaokai13@huawei.com> - 0.10.0-1
- package init
