%define dotests 1
Summary: ODBC driver manager and drivers for PostgreSQL, MySQL, etc.
Name: unixODBC
Version: 2.3.9
Release: 1
%global major_version 2
%global minor_version 3.9


License: LGPL and GPL
Group: Applications/Databases

Source0: ftp://ftp.unixodbc.org/pub/unixODBC//unixODBC-%{version}.tar.gz
Source1: unixodbc_conf.h
Source2: odbcinst.ini
Source3: libodbc.so-aix32
Source4: libodbc.so.2.0.0-aix32
Source5: libodbccr.so-aix32
Source6: libodbccr.so.2.0.0-aix32
Source7: libodbcinst.so-aix32
Source8: libodbcinst.so.2.0.0-aix32
Source9: libodbc.so-aix64
Source10: libodbc.so.2.0.0-aix64
Source11: libodbccr.so-aix64
Source12: libodbccr.so.2.0.0-aix64
Source13: libodbcinst.so-aix64
Source14: libodbcinst.so.2.0.0-aix64
Patch0:  unixODBC-2.3.9-libiconv_hardcode.patch
URL: http://www.unixodbc.org/


BuildRequires: readline-devel >= 8.0
BuildRequires: automake >= 1.14
Requires: readline >= 8.0
Requires: libgcc >= 8.3.0
Requires: libiconv >= 1.14-1 
Requires: libtool-ltdl >= 2.4.6

%define _libdir64 %{_prefix}/lib64


%description
unixODBC aims to provide a complete ODBC solution for the Linux platform.
All programs are GPL.
All libs are LGPL (except nn which is GPL?).


%package devel
Summary: Includes and static libraries for ODBC development
Group: Development/Libraries
Requires: %{name} = %{version}

%description devel
unixODBC aims to provide a complete ODBC solution for the Linux platform.
All programs are GPL.
All libs are LGPL (except nn which is GPL?).
This package contains the include files and static libraries
for development.


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

# 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
export RM="/usr/bin/rm -f"

# first build the 64-bit version
cd 64bit

export LDFLAGS="-Wl,-blibpath:/opt/freeware/lib64:/opt/freeware/lib:/usr/lib:/lib"

export CC="gcc -maix64 -O2"
export CXX="g++ -maix64 -O2"
export OBJECT_MODE=64

./configure \
    --prefix=%{_prefix} \
    --libdir=%{_libdir64} \
    --disable-gui

gmake %{?_smp_mflags} -j16

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


# now build the 32-bit version
cd ../32bit

export LDFLAGS="-Wl,-blibpath:/opt/freeware/lib:/usr/lib:/lib -Wl,-bmaxdata:0x80000000"

export CC="gcc -maix32 -D_LARGE_FILES -O2"
export CXX="g++ -maix32 -D_LARGE_FILES -O2"
export OBJECT_MODE=32

./configure \
    --prefix=%{_prefix} \
    --disable-gui

gmake %{?_smp_mflags} -j16

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


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

export RM="/usr/bin/rm -f"

cd 64bit
export OBJECT_MODE=64
gmake DESTDIR=${RPM_BUILD_ROOT} install-strip
for f in ${RPM_BUILD_ROOT}%{_bindir}/* ; do
    mv ${f} ${f}_64
done
mv ${RPM_BUILD_ROOT}%{_includedir}/unixodbc_conf.h ${RPM_BUILD_ROOT}%{_includedir}/unixodbc_conf-ppc64.h

cd ../32bit
export OBJECT_MODE=32
gmake DESTDIR=${RPM_BUILD_ROOT} install-strip

#setting 64 bit as default 
(
    cd  ${RPM_BUILD_ROOT}/%{_prefix}/bin
    for fic in $(ls -1| grep -v -e _32 -e _64)
    do
	mv $fic "$fic"_32
	ln -sf "$fic"_64 $fic
    done
)

mv ${RPM_BUILD_ROOT}%{_includedir}/unixodbc_conf.h ${RPM_BUILD_ROOT}%{_includedir}/unixodbc_conf-ppc32.h

cp %{SOURCE1} ${RPM_BUILD_ROOT}%{_includedir}/unixodbc_conf.h

cp %{SOURCE2} ${RPM_BUILD_ROOT}%{_sysconfdir}

(
cd ${RPM_BUILD_ROOT}%{_libdir64}
for f in libodbc libodbccr libodbcinst; do
	# Extract .so from 64bit .a libraries and add them to the 32bit .a libraries.
	/usr/bin/ar -x -X64 ${f}.a
	/usr/bin/ar -q -X64 ${RPM_BUILD_ROOT}%{_libdir}/${f}.a ${f}.so.%{major_version}
done
)

#Archive old *.so and *.so.2.0.0
(
 cd ${RPM_BUILD_ROOT}%{_libdir}	
 cp %{SOURCE3} libodbc.so
 cp %{SOURCE4} libodbc.so.2.0.0
 cp %{SOURCE5} libodbccr.so
 cp %{SOURCE6} libodbccr.so.2.0.0
 cp %{SOURCE7} libodbcinst.so
 cp %{SOURCE8} libodbcinst.so.2.0.0
 for f in libodbc libodbccr libodbcinst;do
  /usr/bin/strip -X32 -e ${f}.so
  /usr/bin/strip -X32 -e ${f}.so.2.0.0
  /usr/bin/ar -q -X32 ${f}.a ${f}.so ${f}.so.2.0.0
 done
 cp %{SOURCE9} libodbc.so
 cp %{SOURCE10} libodbc.so.2.0.0
 cp %{SOURCE11} libodbccr.so
 cp %{SOURCE12} libodbccr.so.2.0.0
 cp %{SOURCE13} libodbcinst.so
 cp %{SOURCE14} libodbcinst.so.2.0.0
 for f in libodbc libodbccr libodbcinst;do
  /usr/bin/strip -X64 -e ${f}.so
  /usr/bin/strip -X64 -e ${f}.so.2.0.0
  /usr/bin/ar -q -X64 ${f}.a ${f}.so ${f}.so.2.0.0
  /usr/bin/ar -q -X64 ../lib64/${f}.a ${f}.so ${f}.so.2.0.0 
 done
)


%pre
if [ -f %{sysconfdir}/odbc.ini ]; then
    mv -f %{sysconfdir}/odbc.ini %{sysconfdir}/odbc.ini.rpmpresave
fi
if [ -f %{sysconfdir}/odbcinst.ini ]; then
    mv -f %{sysconfdir}/odbcinst.ini %{sysconfdir}/odbcinst.ini.rpmpresave
fi


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


%files
%defattr(-,root,system)
%doc 32bit/AUTHORS 32bit/COPYING 32bit/ChangeLog 32bit/NEWS 32bit/README 32bit/README.AIX 32bit/doc
%config(noreplace) %{_sysconfdir}/odbc*
%{_bindir}/*
%{_libdir}/*.a
%{_libdir64}/*.a


%files devel
%defattr(-,root,system)
%{_includedir}/*


%changelog
* Thu Dec 17 2020 Reshma V Kumar <reskumar@in.ibm.com> - 2.3.9-1
- Update to 2.3.9
- Stop shipping files in /usr directory

* Sat Aug 31 2019 Ravi Hirekurabar <rhirekur@in.ibm.com> - 2.3.7
- Updated to 2.3.7

* Thu Apr 26 2018 Ravi Hirekurabar<rhirekur@in.ibm.com> - 2.3.5-2
- Built with GCC compiler

* Wed Feb 07 2018 Ravi Hirekurabar<rhirekur@in.ibm.com> - 2.3.5-1
- Updated to 2.3.5

* Mon Jun 11 2012 Patricia Cugny <patricia.cugny@bull.net> 2.3.1
- update to 2.3.1, initial port on AIX 6.1

* Wed Jun 15 2011 Gerard Visiedo <gerard.visiedo@bull.net> 2.3.0
- Initial port on Aix5.3
