raven-rhel9/mysql57/mysqlclient20.spec
2024-02-21 15:07:07 +06:00

360 lines
11 KiB
RPMSpec

%define _default_patch_fuzz 2
# By default, a build will include the system SSL library.
%{?with_ssl: %global ssl_option -DWITH_SSL=%{with_ssl}}
%global _root_libdir %{_libdir}
%global _root_includedir %{_includedir}
%global _prefix /opt/rx
%global _sysconfdir %{_prefix}/etc
%global _libdir %{_prefix}/lib
%global _sbindir %{_prefix}/sbin
%global _includedir %{_prefix}/include
%global _datadir %{_prefix}/share
%global _mandir %{_datadir}/man
%global _docdir %{_datadir}/doc
%global _infodir %{_datadir}/inf
Name: rx-mysqlclient20
Version: 5.7.38
Release: 1%{dist}
Summary: MySQL client programs and shared libraries
Group: Applications/Databases
URL: http://www.mysql.com
# exceptions allow client libraries to be linked with most open source SW,
# not only GPL code. See README.mysql-license
License: GPLv2 with exceptions
# Regression tests take a long time, you can skip 'em with this
%{!?runselftest:%global runselftest 0}
# Upstream has a mirror redirector for downloads, so the URL is hard to
# represent statically. You can get the tarball by following a link from
# http://dev.mysql.com/downloads/mysql/
Source0: mysql-boost-%{version}.tar.gz
# The upstream tarball includes non-free documentation that we cannot ship.
# To remove the non-free documentation, run this script after downloading
# the tarball into the current directory:
# ./generate-tarball.sh $VERSION
# Source1: generate-tarball.sh not used
Source1: mysql.sysconfig
Source2: mysql.init
Source3: my.cnf
Source4: scriptstub.c
Source5: my_config.h
Source6: README.mysql-docs
Source7: README.mysql-license
#Source8: libmysql.version
Source9: mysql-embedded-check.c
Source10: mysql.tmpfiles.d
# Working around perl dependency checking bug in rpm FTTB. Remove later.
Source999: filter-requires-mysql.sh
Patch3: mysql-install-test.patch
Patch13: mysqld-nowatch.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
BuildRequires: perl, readline-devel, openssl-devel, boost159-devel
# BuildRequires: openssl10-devel
BuildRequires: cmake3, ncurses-devel, zlib-devel, libaio-devel, libtirpc-devel, mecab-devel
BuildRequires: devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-make devtoolset-8-build devtoolset-8-binutils
%if 0%{?fedora} >= 12
BuildRequires: systemtap-sdt-devel >= 1.3
%endif
# make test requires time and ps
BuildRequires: time procps
# Socket and Time::HiRes are needed to run regression tests
BuildRequires: perl(Socket), perl(Time::HiRes)
# This is required old EL4
BuildRequires: bison lz4-devel
Requires: grep, fileutils
Requires: bash
# When rpm 4.9 is universal, this could be cleaned up:
%global __perl_requires %{SOURCE999}
%global __perllib_requires %{SOURCE999}
%description
MySQL is a multi-user, multi-threaded SQL database server. MySQL is a
client/server implementation consisting of a server daemon (mysqld)
and many different client programs and libraries. The base package
contains the standard MySQL client programs and generic MySQL files.
%package devel
Summary: Files for development of MySQL applications
Group: Applications/Databases
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: openssl-devel%{?_isa}
%description devel
This package contains the libraries and header files that are needed for
developing MySQL applications using client libraries.
%prep
%setup -q -n mysql-%{version}
# Can't provide this file (by licence)
rm -f Docs/mysql.info
%patch3 -p1
%patch13 -p1
# workaround for upstream bug #56342
rm -f mysql-test/t/ssl_8k_key-master.opt
# upstream has fallen down badly on symbol versioning, do it ourselves
#cp %{SOURCE8} libmysql/libmysql.version
%build
%enable_devtoolset8
export LDFLAGS="$LDFLAGS -L%{_root_libdir}/boost159 -L%{_root_libdir}"
# fail quickly and obviously if user tries to build as root
%if %runselftest
if [ x"`id -u`" = x0 ]; then
echo "mysql's regression tests fail if run as root."
echo "If you really need to build the RPM as root, use"
echo "--define='runselftest 0' to skip the regression tests."
exit 1
fi
%endif
CFLAGS="%{optflags} -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE"
# MySQL 4.1.10 definitely doesn't work under strict aliasing; also,
# gcc 4.1 breaks MySQL 5.0.16 without -fwrapv
CFLAGS="$CFLAGS -fno-strict-aliasing -fwrapv"
# force PIC mode so that we can build libmysqld.so
CFLAGS="$CFLAGS -fPIC"
# gcc seems to have some bugs on sparc as of 4.4.1, back off optimization
# submitted as bz #529298
%ifarch sparc sparcv9 sparc64
CFLAGS=`echo $CFLAGS| sed -e "s|-O2|-O1|g" `
%endif
CXXFLAGS="$CFLAGS"
export CFLAGS CXXFLAGS
# The INSTALL_xxx macros have to be specified relative to CMAKE_INSTALL_PREFIX
# so we can't use %%{_datadir} and so forth here.
%cmake3 . -DBUILD_CONFIG=mysql_release \
-DCOMPILATION_COMMENT="MySQL Community Server (GPL)" \
-DFEATURE_SET="community" \
-DINSTALL_LAYOUT=RPM \
-DCMAKE_INSTALL_PREFIX="%{_prefix}" \
-DINSTALL_INCLUDEDIR=include/mysql \
-DINSTALL_INFODIR=share/info \
-DINSTALL_LIBDIR="lib/mysql" \
-DINSTALL_MANDIR=share/man \
-DINSTALL_MYSQLSHAREDIR=share/mysql \
-DINSTALL_MYSQLTESTDIR=share/mysql-test \
-DINSTALL_PLUGINDIR="lib/mysql/plugin" \
-DINSTALL_SBINDIR=libexec \
-DINSTALL_SCRIPTDIR=bin \
-DINSTALL_SQLBENCHDIR=share \
-DINSTALL_SUPPORTFILESDIR=share/mysql \
-DMYSQL_DATADIR="/var/lib/mysql" \
-DMYSQL_UNIX_ADDR="/var/lib/mysql/mysql.sock" \
-DENABLED_LOCAL_INFILE=ON \
%if 0%{?fedora} >= 12
-DENABLE_DTRACE=ON \
%endif
-DWITH_EMBEDDED_SERVER=ON \
-DWITH_EMBEDDED_SHARED_LIBRARY=ON \
-DWITH_LZ4=system \
-DWITH_EDITLINE=bundled \
-DWITH_MECAB=system \
-DWITH_READLINE=ON \
-DWITH_INNODB_MEMCACHED=ON \
-DWITH_ZLIB=system \
%{?ssl_option} \
-DBOOST_INCLUDE_DIR=/usr/include/boost159 \
-DOPENSSL_INCLUDE_DIR=%{_root_includedir} \
-DOPENSSL_ROOT_DIR=/usr \
-DEDITLINE_INCLUDE_DIR=/usr/include
gcc $CFLAGS $LDFLAGS -o scriptstub "-DLIBDIR=\"%{_libdir}/mysql\"" %{SOURCE4}
make %{?_smp_mflags} VERBOSE=1
# # regular build will make libmysqld.a but not libmysqld.so :-(
# mkdir libmysqld/work
# cd libmysqld/work
# # ar -x ../libmysqld.a
# # these result in missing dependencies: (filed upstream as bug 59104)
# rm -f sql_binlog.cc.o rpl_utility.cc.o
# gcc $CFLAGS $LDFLAGS -shared -Wl,-soname,libmysqld.so.0 -o libmysqld.so.0.0.1 \
# *.o \
# %if 0%{?fedora} >= 12
# ../../probes_mysql.o \
# %endif
# -lpthread -laio -lcrypt -lssl -lcrypto -lz -lrt -lstdc++ -ldl -lm -lc
# # this is to check that we built a complete library
# cp %{SOURCE9} .
# ln -s libmysqld.so.0.0.1 libmysqld.so.0
# gcc -I../../include $CFLAGS mysql-embedded-check.c libmysqld.so.0
# LD_LIBRARY_PATH=. ldd ./a.out
# cd ../..
%if %runselftest
# hack to let 32- and 64-bit tests run concurrently on same build machine
case `uname -m` in
ppc64 | s390x | x86_64 | sparc64 )
MTR_BUILD_THREAD=7
;;
*)
MTR_BUILD_THREAD=11
;;
esac
export MTR_BUILD_THREAD
# Sometine, test fails because of this lib.
LD_LIBRARY_PATH=$PWD/libservices
export LD_LIBRARY_PATH
# make test
# The cmake build scripts don't provide any simple way to control the
# options for mysql-test-run, so ignore the make target and just call it
# manually. Nonstandard options chosen are:
# --force to continue tests after a failure
# no retries please
# test SSL with --ssl
# avoid redundant test runs with --binlog-format=mixed
# increase timeouts to prevent unwanted failures during mass rebuilds
cd mysql-test
(
# perl ./mysql-test-run.pl --force --retry=0 --mysqld=--binlog-format=mixed --suite-timeout=720 --testcase-timeout=30
# Run less test to speed up build process
%{__perl} ./mysql-test-run.pl --force --ssl --mysqld=--binlog-format=mixed --suite=main
)
# cmake build scripts will install the var cruft if left alone :-(
rm -rf var
%endif
%install
rm -rf $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT install
# List the installed tree for RPM package maintenance purposes.
find $RPM_BUILD_ROOT -print | sed "s|^$RPM_BUILD_ROOT||" | sort > ROOTFILES
# multilib header hacks
# we only apply this to known Red Hat multilib arches, per bug #181335
case `uname -i` in
i386 | x86_64 | ppc | ppc64 | s390 | s390x | sparc | sparc64 )
mv $RPM_BUILD_ROOT%{_includedir}/mysql/my_config.h $RPM_BUILD_ROOT%{_includedir}/mysql/my_config_`uname -i`.h
install -m 644 %{SOURCE5} $RPM_BUILD_ROOT%{_includedir}/mysql/
;;
*)
;;
esac
# cmake generates some completely wacko references to -lprobes_mysql when
# building with dtrace support. Haven't found where to shut that off,
# so resort to this blunt instrument. While at it, let's not reference
# libmysqlclient_r anymore either.
sed -e 's/-lprobes_mysql//' -e 's/-lmysqlclient_r/-lmysqlclient/' \
${RPM_BUILD_ROOT}%{_bindir}/mysql_config >mysql_config.tmp
cp -f mysql_config.tmp ${RPM_BUILD_ROOT}%{_bindir}/mysql_config
chmod 755 ${RPM_BUILD_ROOT}%{_bindir}/mysql_config
#install -m 0644 %{SOURCE3} $RPM_BUILD_ROOT/etc/my.cnf
# Remove libmysqld.a, install libmysqld.so
rm -f ${RPM_BUILD_ROOT}%{_libdir}/mysql/libmysqld.a
# libmysqlclient_r is no more. Upstream tries to replace it with symlinks
# but that really doesn't work (wrong soname in particular). We'll keep
# just the devel libmysqlclient_r.so link, so that rebuilding without any
# source change is enough to get rid of dependency on libmysqlclient_r.
rm -f ${RPM_BUILD_ROOT}%{_libdir}/mysql/libmysqlclient_r.so*
ln -s libmysqlclient.so ${RPM_BUILD_ROOT}%{_libdir}/mysql/libmysqlclient_r.so
# Remove files that %%doc will install in preferred location
rm -f ${RPM_BUILD_ROOT}/usr/COPYING
rm -f ${RPM_BUILD_ROOT}/usr/README
# Remove files we don't want installed at all
rm -rf $RPM_BUILD_ROOT%{_prefix}/mysql-test
rm -f ${RPM_BUILD_ROOT}%{_libdir}/mysql/*.la
rm -f ${RPM_BUILD_ROOT}%{_libdir}/mysql/libmysqld.so*
rm -rf $RPM_BUILD_ROOT%{_datadir}/mysql
rm -rf $RPM_BUILD_ROOT%{_bindir}
rm -rf $RPM_BUILD_ROOT%{_libexecdir}
rm -rf $RPM_BUILD_ROOT%{_infodir}/*
rm -rf $RPM_BUILD_ROOT%{_mandir}/man?/*
rm -rf $RPM_BUILD_ROOT%{_datadir}/sql-bench
rm -rf $RPM_BUILD_ROOT%{_datadir}/mysql-test
rm -rf $RPM_BUILD_ROOT%{_datadir}/aclocal/mysql.m4
rm -f ${RPM_BUILD_ROOT}/usr/INSTALL-BINARY
rm -f ${RPM_BUILD_ROOT}/usr/docs/ChangeLog
rm -f ${RPM_BUILD_ROOT}/usr/data/mysql/.empty
rm -f ${RPM_BUILD_ROOT}/usr/data/test/.empty
rm -f ${RPM_BUILD_ROOT}%{_bindir}/mysqlaccess.conf
rm -f ${RPM_BUILD_ROOT}%{_libdir}/mysql/*.a
rm -rf ${RPM_BUILD_ROOT}%{_libdir}/mysql/plugin
rm -f ${RPM_BUILD_ROOT}%{_datadir}/mysql/binary-configure
rm -f ${RPM_BUILD_ROOT}%{_datadir}/mysql/magic
rm -f ${RPM_BUILD_ROOT}%{_datadir}/mysql/ndb-config-2-node.ini
rm -f ${RPM_BUILD_ROOT}%{_datadir}/mysql/mysql.server
rm -f ${RPM_BUILD_ROOT}%{_datadir}/mysql/mysqld_multi.server
rm -f ${RPM_BUILD_ROOT}%{_datadir}/mysql/mysql-log-rotate
rm -f ${RPM_BUILD_ROOT}%{_mandir}/man1/comp_err.1*
rm -f ${RPM_BUILD_ROOT}%{_mandir}/man1/mysql-stress-test.pl.1*
rm -f ${RPM_BUILD_ROOT}%{_mandir}/man1/mysql-test-run.pl.1*
mkdir -p $RPM_BUILD_ROOT/etc/ld.so.conf.d
echo "%{_libdir}/mysql" > $RPM_BUILD_ROOT/etc/ld.so.conf.d/%{name}-%{_arch}.conf
# copy additional docs into build tree so %%doc will find them
cp %{SOURCE6} README.mysql-docs
cp %{SOURCE7} README.mysql-license
#
%clean
rm -rf $RPM_BUILD_ROOT
%post
/sbin/ldconfig
%postun
if [ $1 = 0 ] ; then
/sbin/ldconfig
fi
%files
%defattr(-,root,root)
%{_libdir}/mysql/libmysqlclient.so.20*
/etc/ld.so.conf.d/*
%files devel
%defattr(-,root,root)
%{_includedir}/mysql
%{_libdir}/pkgconfig/*.pc
%{_libdir}/mysql/libmysqlclient.so
%{_libdir}/mysql/libmysqlclient_r.so
%changelog
* Tue Mar 1 2022 Raven <raven@sysadmins.ws> - 5.7.36-1
- initial release