# Tests by default. No tests: rpm -ba --define 'dotests 0' *.spec
%{!?dotests: %global dotests 1}

# To use XLC : --define 'gcc_compiler=0'
%{!?gcc_compiler: %global gcc_compiler 1}
%{!?default_bits: %global default_bits 32}


%define _libdir64 %{_prefix}/lib64

# %bcond_without pgm

%define zmq_version 5

Name:           zeromq
Version:        4.3.2
Release:        1
Summary:        Software library for fast, message-based applications

Group:          System Environment/Libraries
License:        LGPLv3+
URL:            http://www.zeromq.org
# VCS:          git:http://github.com/zeromq/zeromq2.git
Source0:        https://github.com/zeromq/zeromq4-1/releases/download/v%{version}/zeromq-%{version}.tar.gz
Source1:        https://raw.githubusercontent.com/zeromq/cppzmq/master/zmq.hpp
Source2:        https://raw.githubusercontent.com/zeromq/cppzmq/master/zeromq.LICENSE
Patch0: 	pollset.patch
Patch1:		pollsethpp.patch
Patch2: 	precompiled.patch
Patch3:		zeromq_pollset.patch
Patch4:		zeromq-4.3.2-libs.patch
Patch5:		zeromq-4.3.2-extern.patch
# RPM 3.0.5 does not recognize or initialise  %{buildroot} without following
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
Requires:	libstdc++ >= 8.3.0-1
Requires:	libgcc >= 8.3.0-1

BuildRequires:  autoconf
BuildRequires:  automake
BuildRequires:  libtool
# BuildRequires:  libsodium-devel

BuildRequires:  glib2-devel
# %if ! (0%{?fedora} > 12 || 0%{?rhel} > 5)
# BuildRequires:  e2fsprogs-devel
# BuildRoot:      %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
# %else
# BuildRequires:  libuuid-devel
# %endif
# %if %{with pgm}
# BuildRequires:  openpgm-devel
# BuildRequires:  krb5-devel
# %endif

%description
The 0MQ lightweight messaging kernel is a library which extends the
standard socket interfaces with features traditionally provided by
specialized messaging middle-ware products. 0MQ sockets provide an
abstraction of asynchronous message queues, multiple messaging
patterns, message filtering (subscriptions), seamless access to
multiple transport protocols and more.
This package contains the ZeroMQ shared library.


%if %{gcc_compiler} == 1
This version has been compiled with GCC.
%else
This version has been compiled with XLC.
%endif


%package devel
Summary:        Development files for %{name}
Group:          Development/Libraries
Requires:       %{name}%{?_isa} = %{version}-%{release}
Requires:	libstdc++ >= 8.3.0-1
Requires:	libgcc >= 8.3.0-1
 

%description devel
The %{name}-devel package contains libraries and header files for
developing applications that use %{name}.

%if %{gcc_compiler} == 1
This version has been compiled with GCC.
%else
This version has been compiled with XLC.
%endif


%package -n cppzmq-devel
Summary:        Development files for cppzmq
Group:          Development/Libraries
License:        MIT
Requires:       %{name}-devel%{?_isa} = %{version}-%{release}


%description -n cppzmq-devel
The cppzmq-devel package contains libraries and header files for
developing applications that use the C++ header files of %{name}.


%prep
%setup -q
%patch0 -p0
%patch1 -p0
%patch2 -p0
%patch3 -p0
%patch4 -p0
%patch5 -p0

echo "dotests=%{dotests}"
echo "default_bits=%{default_bits}"
echo "gcc_compiler=%{gcc_compiler}"
%if %{gcc_compiler} == 1
echo "GCC version=`/opt/freeware/bin/gcc --version | head -1`"
%endif

cp -a %{SOURCE2} .

# zeromq.x86_64: W: file-not-utf8 /usr/share/doc/zeromq/ChangeLog
iconv -f iso8859-1 -t utf-8 ChangeLog > ChangeLog.conv && mv -f ChangeLog.conv ChangeLog

# Don't turn warnings into errors
sed -i "s/libzmq_werror=yes/libzmq_werror=no/g" \
    configure

# Sed version number of openpgm into configure
%global openpgm_pc $(basename %{_libdir}/pkgconfig/openpgm*.pc .pc)
sed -i "s/openpgm-[0-9].[0-9]/%{openpgm_pc}/g" \
    configure*


# Duplicate source for 32 & 64 bits
rm -rf   /tmp/%{name}-%{version}-32bit
cp -pr . /tmp/%{name}-%{version}-32bit
rm -fr *
mv       /tmp/%{name}-%{version}-32bit 32bit
cp -pr 32bit 64bit


%build

# Display build environment and currently installed RPM packages
/usr/bin/env
rpm -qa

# setup environment for 32-bit and 64-bit builds
export AR="/usr/bin/ar -X32_64"


# Choose XLC or GCC
%if %{gcc_compiler} == 1

export CC__="/opt/freeware/bin/gcc"
export CXX__="/opt/freeware/bin/g++ "
# export LDFLAGS="-L./.libs -L/opt/freeware/lib"
export FLAG32="-maix32"
export FLAG64="-maix64"

echo "CC Version:"
$CC__ --version

%else

export CC__="xlc_r"
export CXX__="xlc_r"
#export LDFLAGS="-L/opt/freeware/lib64 -L/opt/freeware/lib -Wl,-blibpath:/opt/freeware/lib64:/opt/freeware/lib:/usr/lib:/lib -Wl,-bmaxdata:0x80000000"
# export LDFLAGS="-L./.libs -Wl,-bmaxdata:0x80000000"
export LDFLAGS="-Wl,-bmaxdata:0x80000000"
export FLAG32="-q32"
export FLAG64="-q64"

echo "CC Version:"
$CC__ -qversion

%endif

type $CC__

export CC32=" ${CC__}  ${FLAG32} -D_LARGE_FILES -pthread"
export CC64=" ${CC__}  ${FLAG64} -pthread"
export CXX32="${CXX__} ${FLAG32} -D_LARGE_FILES -pthread"
export CXX64="${CXX__} ${FLAG64} -pthread"


# First build the 64-bit version
cd 64bit
#export LDFLAGS="-Wl"
export OBJECT_MODE=64
export CC="${CC64}   $GLOBAL_CC_OPTIONS -D_XOPEN_SOURCE=700"
export CXX="${CXX64} $GLOBAL_CC_OPTIONS  -D_LINUX_SOURCE_COMPAT -D_ALL_SOURCE"
export LDFLAGS="-L/opt/freeware/lib64 -L/opt/freeware/lib -Wl,-blibpath:/opt/freeware/lib/pthread/ppc64:/opt/freeware/lib64:/opt/freeware/lib:/usr/lib:/lib"

autoreconf -fi
# Don't turn warnings into errors
sed -i "s/libzmq_werror=yes/libzmq_werror=no/g" \
    configure
%configure \
# %if %{with pgm}
#             --with-pgm \
#             --with-libgssapi_krb5 \
# %endif
#             --disable-static  => does not exist, but is default
gmake %{?_smp_mflags} V=1
if [ "%{dotests}" == 1 ]
then
    (gmake -k check || true)
fi


# Build the 32-bit version
cd ../32bit
export LDFLAGS="-L/opt/freeware/lib -Wl,-blibpath:/opt/freeware/lib/pthread:/opt/freeware/lib:/usr/lib:/lib -Wl,-bmaxdata:0x80000000 -lpthread"
export OBJECT_MODE=32
export CC="${CC32}   $GLOBAL_CC_OPTIONS -D_XOPEN_SOURCE=700"
export CXX="${CXX32} $GLOBAL_CC_OPTIONS -D_LINUX_SOURCE_COMPAT -D_ALL_SOURCE"
#export CFLAGS="-D_LINUX_SOURCE_COMPAT"

autoreconf -fi
# Don't turn warnings into errors
sed -i "s/libzmq_werror=yes/libzmq_werror=no/g" \
    configure
%configure \
# %if %{with pgm}
#             --with-pgm \
#             --with-libgssapi_krb5 \
# %endif
#             --disable-static  => does not exist, but is default
gmake %{?_smp_mflags} V=1
if [ "%{dotests}" == 1 ]
then
    (gmake -k check || true)
fi



# Archive 32 and 64 bit versions into libzmq.a
rm    -f .libs/libzmq.a
slibclean
${AR} -r ./src/.libs/libzmq.a ./src/.libs/libzmq.so.%{zmq_version} ../64bit/src/.libs/libzmq.so.%{zmq_version}
#slibclean


%install

export AR="/usr/bin/ar -X32_64"

rm -rf %{buildroot}

cd 64bit
export OBJECT_MODE=64

gmake install DESTDIR=%{buildroot} INSTALL="install -p"
install -m 644 -p %{SOURCE1} %{buildroot}%{_includedir}/

# remove *.la
rm %{buildroot}%{_libdir}/libzmq.la

# add libzmq.so.5 and libzmq.so (not sure if they are required)
mkdir    ${RPM_BUILD_ROOT}%{_libdir64}
install -p ../64bit/src/.libs/libzmq.so.%{zmq_version} ${RPM_BUILD_ROOT}%{_libdir64}/libzmq.so.%{zmq_version}
ln -sf  libzmq.so.%{zmq_version}     ${RPM_BUILD_ROOT}%{_libdir64}/libzmq.so

mv ${RPM_BUILD_ROOT}%{_libdir}/libzmq.a ${RPM_BUILD_ROOT}%{_libdir64}/libzmq.a

mv ${RPM_BUILD_ROOT}%{_bindir}/curve_keygen ${RPM_BUILD_ROOT}%{_bindir}/curve_keygen_64


#%check
if [ "%{dotests}" == 1 ]
then
  (gmake check V=1 || true)
fi


cd ../32bit
export OBJECT_MODE=32

gmake install DESTDIR=%{buildroot} INSTALL="install -p"
install -m 644 -p %{SOURCE1} %{buildroot}%{_includedir}/

# remove *.la
rm %{buildroot}%{_libdir}/libzmq.la

# add libzmq.so.5 and libzmq.so (not sure if they are required)
install -p ./src/.libs/libzmq.so.%{zmq_version} ${RPM_BUILD_ROOT}%{_libdir}/libzmq.so.%{zmq_version}
ln -sf  libzmq.so.%{zmq_version}     ${RPM_BUILD_ROOT}%{_libdir}/libzmq.so


#%check
if [ "%{dotests}" == 1 ]
then
  (gmake check V=1 || true)
fi

# %post -p /sbin/ldconfig


# %postun -p /sbin/ldconfig



%clean
[ "${RPM_BUILD_ROOT}" != "/" ] && rm -rf ${RPM_BUILD_ROOT}



%files
%defattr(-,root,system,-)
%doc 32bit/AUTHORS 32bit/ChangeLog  32bit/NEWS
# %license COPYING COPYING.LESSER
%doc 32bit/COPYING 32bit/COPYING.LESSER
%{_bindir}/curve_keygen
%{_bindir}/curve_keygen_64
%{_libdir}/libzmq.a
# %{_libdir64}/libzmq.a
%{_libdir}/libzmq.so.%{zmq_version}
%{_libdir64}/libzmq.so.%{zmq_version}

%files devel
%defattr(-,root,system,-)
#%{_libdir}/libzmq.so
#%{_libdir64}/libzmq.so
%{_libdir}/pkgconfig/libzmq.pc
# %{_libdir64}/pkgconfig/libzmq.pc
%{_includedir}/zmq*.h

%files -n cppzmq-devel
%defattr(-,root,system,-)
# %license zeromq.LICENSE
%doc 32bit/zeromq.LICENSE
%{_includedir}/zmq.hpp


%changelog
* Thu Feb 27 2020 Rishita Saha <risaha16@in.ibm.com> - 4.3.2-1
- Updated to include the _LINUX_SOURCE_COMPAT flag 

* Fri Feb 07 2020 Rishita Saha <risaha16@in.ibm.com> - 4.3.2-1
- Updated to fix CVE-2019-13132

* Wed Sep 20 2017 Ravi Hirekurabar<rhirekur@in.ibm.com> - 4.1.6-1
- Initial version of IBM
* Tue Mar 07 2017 Michael Wilson <michael.a.wilson@atos.net> - 4.1.6-1
- Initial version

