# remirepo/fedora spec file for oracle-instantclient
#
# Copyright (c) 2006-2021 Remi Collet
# License: CC-BY-SA
# http://creativecommons.org/licenses/by-sa/4.0/
#
# Please, preserve the changelog entries
#

%global __arch_install_post /bin/true
%global _build_id_links none

%ifarch x86_64 noarch
%global major   21
%global mainver 21.14
%global libclnt 21.1
%define topdir	instantclient_%(echo %mainver|tr '.' '_')
%global archsuf	x64
%else
%global major   19
%global mainver 19.22
%global libclnt 19.1
%define topdir	instantclient_%(echo %mainver|tr '.' '_')
%global archsuf	arm64
%endif
%global oradir	%{_libdir}/oracle/%{mainver}/client64
%global incdir	%{_includedir}/oracle/%{mainver}/client64
%global tarsuf  dbru

Summary: 	Instant Client for Oracle Database %{major}
Name: 		oracle-instantclient
Version: 	%{mainver}.0.0.0
Release:	1%{?dist}
License:	Oracle
Group:		Applications/File
Url:		https://www.oracle.com/database/technologies/instant-client.html
Source0:	instantclient-basic-linux.%{archsuf}-%{version}%{?tarsuf}.zip
Source1:	instantclient-jdbc-linux.%{archsuf}-%{version}%{?tarsuf}.zip
Source2:	instantclient-odbc-linux.%{archsuf}-%{version}%{?tarsuf}.zip
Source3:	instantclient-sdk-linux.%{archsuf}-%{version}%{?tarsuf}.zip
Source4:	instantclient-sqlplus-linux.%{archsuf}-%{version}%{?tarsuf}.zip
Source5:	instantclient-tools-linux.%{archsuf}-%{version}%{?tarsuf}.zip
Source6:	instantclient-precomp-linux.%{archsuf}-%{version}%{?tarsuf}.zip

BuildArch:      x86_64 aarch64
BuildRequires:	chrpath

%description
Base files for Instant Client. Support for OCI, OCCI,
and JDBC-OCI applications.

Oracle Call Interface %{mainver} can connect to Oracle Database 11.2 or later.

%package basic
Summary:	Instant Client for Oracle Database 11g
Group:		Applications/File

%description basic
Base files for Instant Client. Support for OCI, OCCI,
and JDBC-OCI applications.

%package devel
Summary:	Development headers for Instant Client
Group:		Applications/File
Requires: 	oracle-instantclient-basic%{?_isa} = %version

%description devel
Additional header files and an example Makefile for developing Oracle
applications with Instant Client.

%package jdbc
Summary: 	Supplemental JDBC features under Instant Client
Group:		Applications/File
Requires: 	oracle-instantclient-basic%{?_isa} = %version

%description jdbc
Additional support for XA, Internationalization,
and RowSet operations under JDBC.

%package odbc
Summary: 	Oracle ODBC Instant Client for Linux
Group:		Applications/File
Requires: 	oracle-instantclient-basic%{?_isa} = %version

%description odbc
Oracle ODBC Instant Client for Linux complies with
ODBC 3.52 specifications. It is based on features of
Oracle %{version} ODBC driver for Windows, without
the need for a traditional ORACLE_HOME installation.

%package sqlplus
Summary:	SQL*Plus for Instant Client
Group:		Applications/File
Requires: 	oracle-instantclient-basic%{?_isa} = %version

%description sqlplus
Additional libraries and executable for running
SQL*Plus with Instant Client.

%package tools
Summary:	Tools for Oracle Database 11g
Group:		Applications/File
Requires: 	oracle-instantclient-basic%{?_isa} = %version

%description tools
This package provides tools to be used with the Oracle Database.
It currently includes
- wrc : a client to be used with the Database Replay feature

%package precomp
Summary:	Oracle Precompilers for Pro*C and Pro*COBOL
Group:		Applications/File
Requires: 	oracle-instantclient-devel%{?_isa} = %version

%description precomp
PRECOMP Instant Client (IC) Package contains following
components:
  i) "proc" binary to precompile a Pro*C application
 ii) "procob" binary to precompile a Pro*COBOL application
iii) sample configuration files, demo programs and demo
     make files for building proc and procob demos and
     in general any Pro*C/Pro*COBOL application.

%prep
rm -rf %{topdir}

unzip %{SOURCE0} | tee BASIC
unzip %{SOURCE1} | tee JDBC
unzip %{SOURCE2} | tee ODBC
unzip %{SOURCE3} | tee DEVEL
unzip %{SOURCE4} | tee SQLPLUS
unzip %{SOURCE5} | tee TOOLS
unzip %{SOURCE6} | tee PRECOMP


%install
cd %{topdir}

mkdir -p %{buildroot}%{_bindir}
mkdir -p %{buildroot}%{oradir}/{bin,lib}
mkdir -p %{buildroot}%{oradir}/lib/precomp/admin
mkdir -p %{buildroot}%{incdir}
mkdir -p %{buildroot}%{_sysconfdir}/ld.so.conf.d

# Basic
install -p adrci		%{buildroot}%{oradir}/bin
install -p genezi		%{buildroot}%{oradir}/bin
install -p uidrvci		%{buildroot}%{oradir}/bin
chrpath -d %{buildroot}%{oradir}/bin/{adrci,genezi,uidrvci}
install -p libclntshcore.so.%{libclnt} %{buildroot}%{oradir}/lib
install -p libclntsh.so.%{libclnt}	   %{buildroot}%{oradir}/lib
install -p libnnz%{major}.so		   %{buildroot}%{oradir}/lib
install -p libocci.so.%{libclnt}	   %{buildroot}%{oradir}/lib
%if "%{major}" >= "21"
install -p libocci_gcc53.so.%{libclnt} %{buildroot}%{oradir}/lib
%endif
install -p libociei.so				   %{buildroot}%{oradir}/lib
install -p libocijdbc%{major}.so	   %{buildroot}%{oradir}/lib
%if "%{major}" >= "21"
install -p liboramysql.so	           %{buildroot}%{oradir}/lib
%else
install -p liboramysql%{major}.so          %{buildroot}%{oradir}/lib
%endif
install -p ojdbc8.jar		           %{buildroot}%{oradir}/lib
install -p xstreams.jar		           %{buildroot}%{oradir}/lib

echo %{oradir}/lib >%{buildroot}%{_sysconfdir}/ld.so.conf.d/%{name}.conf

# Devel
install -p -m 644 sdk/include/*.h 	%{buildroot}%{incdir}
install -p sdk/ottclasses.zip		%{buildroot}%{oradir}/lib
install -p -m 755 sdk/ott           %{buildroot}%{oradir}/bin

ln -s %{oradir}/bin/ott           %{buildroot}%{_bindir}/ott
ln -s libocci.so.%{libclnt}       %{buildroot}%{oradir}/lib/libocci.so
%if "%{major}" >= "21"
ln -s libocci_gcc53.so.%{libclnt} %{buildroot}%{oradir}/lib/libocci_gcc53.so
%endif
ln -s libclntsh.so.%{libclnt}     %{buildroot}%{oradir}/lib/libclntsh.so
ln -s libclntshcore.so.%{libclnt} %{buildroot}%{oradir}/lib/libclntshcore.so

# sdk/admin/oraaccess.xsd not provided in upstream RPM.

# SQL*Plus
install -p sqlplus 		%{buildroot}%{oradir}/bin
chrpath -d			%{buildroot}%{oradir}/bin/sqlplus
install -p glogin.sql 		%{buildroot}%{oradir}/lib
install -p libsqlplus.so 	%{buildroot}%{oradir}/lib
install -p libsqlplusic.so 	%{buildroot}%{oradir}/lib

ln -sf %{oradir}/bin/sqlplus %{buildroot}%{_bindir}/sqlplus

# JDBC
install -p libheteroxa%{major}.so	%{buildroot}%{oradir}/lib
install -p orai18n-mapping.jar	%{buildroot}%{oradir}/lib
install -p orai18n.jar		%{buildroot}%{oradir}/lib

# ODBC
install -p libsqora.so.%{libclnt}	%{buildroot}%{oradir}/lib

# Tools
for cmd in exp expdp imp impdp sqlldr wrc; do
  install -p $cmd           %{buildroot}%{oradir}/bin/$cmd
  chrpath -d                %{buildroot}%{oradir}/bin/$cmd
  ln -sf %{oradir}/bin/$cmd %{buildroot}%{_bindir}/$cmd
done
%if "%{major}" >= "21"
install -p libnfsodm.so   %{buildroot}%{oradir}/lib
install -p libopcodm.so   %{buildroot}%{oradir}/lib
%endif

# Precomp
# NOTICE: don't install rtsora - broken dep on  libcobcrtn64.so
install -p -m 755 sdk/{proc,procob}	%{buildroot}%{oradir}/bin
chrpath -d %{buildroot}%{oradir}/bin/{proc,procob}
install -p -m 755 cobsqlintf.o		%{buildroot}%{oradir}/lib
install -p -m 644 precomp/admin/*	%{buildroot}%{oradir}/lib/precomp/admin

ln -s %{oradir}/bin/proc %{buildroot}%{_bindir}/proc
ln -s %{oradir}/bin/procob %{buildroot}%{_bindir}/procob

# Precomp-Devel
install -p -m 644 sdk/include/*.h     %{buildroot}%{incdir}

# Create files lists
rm -f devel.files precomp.files
for header in sdk/include/*.h
do if grep -q $header ../DEVEL
   then echo %{incdir}/$(basename $header) >>devel.files
   else echo %{incdir}/$(basename $header) >>precomp.files
fi
done

chrpath -d %{buildroot}%{oradir}/lib/*.so*

%post   basic   -p /sbin/ldconfig
%postun basic   -p /sbin/ldconfig
%post   sqlplus -p /sbin/ldconfig
%postun sqlplus -p /sbin/ldconfig


%{!?_licensedir:%global license %%doc}

%files basic
%license %{topdir}/BASIC_LICENSE
%doc %{topdir}/BASIC_README
%dir %{oradir}
%dir %{oradir}/lib
%dir %{oradir}/bin
%{oradir}/lib/libclntshcore.so.%{libclnt}
%{oradir}/lib/libclntsh.so.%{libclnt}
%{oradir}/lib/libnnz%{major}.so
%{oradir}/lib/libocci.so.%{libclnt}
%if "%{major}" >= "21"
%{oradir}/lib/libocci_gcc53.so.%{libclnt}
%endif
%{oradir}/lib/libociei.so
%{oradir}/lib/libocijdbc%{major}.so
%if "%{major}" >= "21"
%{oradir}/lib/liboramysql.so
%else
%{oradir}/lib/liboramysql%{major}.so
%endif
%{oradir}/lib/ojdbc8.jar
%{oradir}/lib/xstreams.jar
%{_sysconfdir}/ld.so.conf.d/%{name}.conf
%{oradir}/bin/genezi
%{oradir}/bin/adrci
%{oradir}/bin/uidrvci

%files devel -f %{topdir}/devel.files
%license %{topdir}/SDK_LICENSE
%doc %{topdir}/sdk/demo %{topdir}/SDK_README %{topdir}/sdk/ott
%{oradir}/lib/libclntshcore.so
%{oradir}/lib/libclntsh.so
%{oradir}/lib/libocci.so
%if "%{major}" >= "21"
%{oradir}/lib/libocci_gcc53.so
%endif
%{oradir}/lib/ottclasses.zip
%dir %{incdir}
%{_bindir}/ott
%{oradir}/bin/ott

%files sqlplus
%license %{topdir}/SQLPLUS_LICENSE
%doc %{topdir}/SQLPLUS_README
%{_bindir}/sqlplus
%{oradir}/bin/sqlplus
%{oradir}/lib/glogin.sql
%{oradir}/lib/libsqlplus.so
%{oradir}/lib/libsqlplusic.so

%files jdbc
%license %{topdir}/JDBC_LICENSE
%doc %{topdir}/JDBC_README
%{oradir}/lib/libheteroxa%{major}.so
%{oradir}/lib/orai18n-mapping.jar
%{oradir}/lib/orai18n.jar

%files odbc
%license %{topdir}/ODBC_LICENSE
%doc %{topdir}/ODBC_README
%doc %{topdir}/odbc_update_ini.sh
%doc %{topdir}/help
%{oradir}/lib/libsqora.so.%{libclnt}

%files tools
%license %{topdir}/TOOLS_LICENSE
%doc %{topdir}/TOOLS_README
%{_bindir}/exp
%{_bindir}/expdp
%{_bindir}/imp
%{_bindir}/impdp
%{_bindir}/sqlldr
%{_bindir}/wrc
%{oradir}/bin/exp
%{oradir}/bin/expdp
%{oradir}/bin/imp
%{oradir}/bin/impdp
%{oradir}/bin/sqlldr
%{oradir}/bin/wrc
%if "%{major}" >= "21"
%{oradir}/lib/libnfsodm.so
%{oradir}/lib/libopcodm.so
%endif

%files precomp -f %{topdir}/precomp.files
%doc %{topdir}/sdk/demo %{topdir}/PRECOMP_README
%dir %{oradir}/lib/precomp
%dir %{oradir}/lib/precomp/admin
%config  %{oradir}/lib/precomp/admin/pcbcfg.cfg
%config  %{oradir}/lib/precomp/admin/pcscfg.cfg
%{oradir}/lib/cobsqlintf.o
%{oradir}/bin/proc
%{oradir}/bin/procob
%{_bindir}/proc
%{_bindir}/procob