%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 - 5.7.36-1 - initial release