# rpm -ba --define 'dotests 0' expat-2.1.1-1.spec ...
%{!?dotests:%define DO_TESTS 1}
%{?dotests:%define DO_TESTS 0}

Summary: An XML parser library
Name: expat
Version: 2.4.6
Release: 1 
Group: System Environment/Libraries
Source0: http://sourceforge.net/projects/expat/files/expat/%{version}/expat-%{version}.tar.bz2
Source1: libexpat.so.0-aix64
Source2: libexpat.so.0-aix32
URL: http://www.libexpat.org/
License: MIT

BuildRequires: patch
Requires: libgcc >= 8.3.0-1
%define _libdir64 %{_prefix}/lib64

%description
This is expat, the C library for parsing XML, written by James Clark. Expat
is a stream oriented XML parser. This means that you register handlers with
the parser prior to starting the parse. These handlers are called when the
parser discovers the associated structures in the document being parsed. A
start tag is an example of the kind of structures for which you may
register handlers.

The library is available as 32-bit and 64-bit.


%package devel
Summary: Libraries and header files to develop applications using expat
Group: Development/Libraries
Requires: %{name} = %{version}-%{release}

%description devel
The expat-devel package contains the libraries, include files and documentation
to develop XML applications with expat.

If you are compiling a 32-bit program, no special compiler options are
needed.

If you are compiling a 64-bit program, you have to compile and link your
application with "cc -q64" or "gcc -maix64".


%prep
%setup -q
export PATH=/opt/freeware/bin:$PATH

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


%build
# setup environment for 32-bit and 64-bit builds
export PATH=/opt/freeware/bin:/usr/bin:/etc:/usr/sbin:/usr/bin/X11:/sbin:.
export RM="/usr/bin/rm -f"
export CONFIG_SHELL=/opt/freeware/bin/bash
CONFIG_ENV_ARGS=/opt/freeware/bin/bash
export AR="/usr/bin/ar -X32_64"
export NM="/usr/bin/nm -X32_64"
export DOCBOOK_TO_MAN="xmlto man --skip-validation"

# first build the 64-bit version
cd 64bit
export OBJECT_MODE=64
export CC="/opt/freeware/bin/gcc -maix64 -O2"
export CXX="/opt/freeware/bin/g++ -maix64 -O2"
export LDFLAGS="-lm -L%{_builddir}/%{name}-%{version}/64bit/lib/.libs -L/opt/freeware/lib64 -L/opt/freeware/lib -Wl,-blibpath:/opt/freeware/lib64:/opt/freeware/lib:/usr/lib:/lib"

./configure \
    --prefix=%{_prefix} \
    --libdir=%{_libdir64} \
    --enable-shared --enable-static

gmake %{?_smp_mflags}

if [ "%{DO_TESTS}" == 1 ]
then
    ( gmake -k check || true )
#    /usr/sbin/slibclean
fi


# now build the 32-bit version
cd ../32bit
export OBJECT_MODE=32
export CC="/opt/freeware/bin/gcc -maix32 -O2 -D_LARGE_FILES"
export CXX="/opt/freeware/bin/g++ -maix32 -O2 -D_LARGE_FILES"
export LDFLAGS="-lm -L%{_builddir}/%{name}-%{version}/32bit/lib/.libs -L/opt/freeware/lib -Wl,-bmaxdata:0x80000000 -Wl,-blibpath:/opt/freeware/lib:/usr/lib:/lib"

./configure \
    --prefix=%{_prefix} \
    --libdir=%{_libdir} \
    --enable-shared --enable-static

gmake %{?_smp_mflags}

if [ "%{DO_TESTS}" == 1 ]
then
    ( gmake -k check || true )
#    /usr/sbin/slibclean
fi


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

# setup environment for 32-bit and 64-bit builds
export AR="/usr/bin/ar -X32_64"
export NM="/usr/bin/nm -X32_64"
export RM="/usr/bin/rm -f"


# install 64-bit version

export OBJECT_MODE=64
cd 64bit
gmake V=0 DESTDIR=${RPM_BUILD_ROOT} install

# Save 64bits version of xmlwf
mv ${RPM_BUILD_ROOT}%{_bindir}/xmlwf ${RPM_BUILD_ROOT}%{_bindir}/xmlwf_64
# Strip 64bits version of xmlwf
/usr/bin/strip ${RPM_BUILD_ROOT}%{_bindir}/xmlwf_64 || :


# install 32-bit version

export OBJECT_MODE=32
cd ../32bit
gmake V=0 DESTDIR=${RPM_BUILD_ROOT} install
mv ${RPM_BUILD_ROOT}%{_bindir}/xmlwf ${RPM_BUILD_ROOT}%{_bindir}/xmlwf_32
cd ${RPM_BUILD_ROOT}%{_bindir}
ln -sf xmlwf_64 xmlwf
cd -

# Strip 32bits version of xmlwf
/usr/bin/strip ${RPM_BUILD_ROOT}%{_bindir}/xmlwf_32 || :


rm -f examples/*.dsp
chmod 644 COPYING Changes doc/* examples/*


# add the 64-bit shared objects to the shared library containing already the 32-bit shared objects
(
    cd                  ${RPM_BUILD_ROOT}%{_libdir64}
    /usr/bin/ar -X64 -x ${RPM_BUILD_ROOT}%{_libdir64}/libexpat.a              libexpat.so.1
)
/usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir}/libexpat.a  ${RPM_BUILD_ROOT}%{_libdir64}/libexpat.so.1



# Add the older libexpat.so.0 shared members for compatibility with older apps
# (make sure they're set for LOADONLY with 'strip -e')
/usr/bin/strip -X64 -e %{SOURCE1}
/usr/bin/strip -X32 -e %{SOURCE2}
cp %{SOURCE1} libexpat.so.0
/usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir}/libexpat.a libexpat.so.0
/usr/bin/ar -X64 -q ${RPM_BUILD_ROOT}%{_libdir64}/libexpat.a libexpat.so.0
cp %{SOURCE2} libexpat.so.0
/usr/bin/ar -X32 -q ${RPM_BUILD_ROOT}%{_libdir}/libexpat.a libexpat.so.0


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


%files
%defattr(-,root,system)
%doc 32bit/COPYING
%{_bindir}/*
%{_libdir}/*.a
%{_libdir64}/*.a
%{_datadir}/man/man?/*


%files devel
%defattr(-,root,system)
%doc 32bit/Changes 32bit/doc 32bit/examples
%{_includedir}/*.h


%changelog
* Fri Mar 04 2022 Sushree Das <sushree.das@ibm.com> 2.4.5-1
- Updated to latest version 2.4.5 to fix CVE-2022-25235 & CVE-2022-25236 

* Mon Jan 31 2022 Sushree Das <sushree.das@ibm.com> 2.4.4-1
- Updated to latest version 2.4.4 to fix CVE-2021-45960,CVE-2021-46143,CVE-2022-22827,CVE-2022-22826,CVE-2022-22825,CVE-2022-22823,CVE-2022-22824 & CVE-2022-22822 

* Mon Nov 29 2021 Sushree Das <sushree.das@ibm.com> 2.4.1-1
- Updated to latest version 2.4.1 

* Wed Jun 24 2020 Ayappan P <ayappap2@in.ibm.com> 2.2.9-2
- Fix library search path 

* Tue Nov 12 2019 Reshma V Kumar <reskumar@in.ibm.com> 2.2.9-1
- Update to fix CVE-2019-15903

* Wed Feb 20 2019 Reshma V Kumar <reskumar@in.ibm.com> 2.2.6-1
- Update to 2.2.6

* Thu Sep 01 2016 Nitish K Mishra <nitismis@in.ibm.com> 2.2.0-1
- Update to 2.2.0-1

* Wed May 18 2016 Reshma V Kumar <reskumar@in.ibm.com> 2.1.1-1
- updated to the latest version

* Fri Apr 29 2016 Tony Reix <tony.reix@bull.net> 2.1.1-1
- Update and Initial port on AIX 6.1

* Thu Jul 04 2013 Gerard Visiedo <gerard.visiedo@bull.net> 2.1.0-2
- Building on Aix5.3

* Wed Mar 06 2013 Gerard Visiedo <gerard.visiedo@bull.net> 2.1.0-1
- update to version 2.1.0

* Thu Feb 02 2012 Gerard Visiedo <gerard.visiedo@bull.net> 2.0.1-4
- Initial port on Aix6.1

* Fri Sep 23 2011 Patricia Cugny <patricia.cugny@bull.net> 2.0.1-3
- rebuild for compatibility with new libiconv.a 1.13.1-2

* Thu Jun 23 2011 Gerard Visiedo <gerard.visiedo@bull.net> -2.0.1-2
- Insert libexpat missing

* Mon Mar 20 2011  Patricia Cugny <patricia.cugny@bull.net> - 2.0.1-1
- update to version 2.0.1

*  Fri Dec 23 2005  BULL
 - Release 4
 - Prototype gtk 64 bit
*  Wed Nov 16 2005  BULL
 - Release  3
*  Mon May 30 2005  BULL
 - Release  2
 - .o removed from lib
