# https://docs.fedoraproject.org/en-US/quick-docs/publish-rpm-on-copr # http://ftp.rpm.org/max-rpm/s1-rpm-inside-scripts.html # https://rpm-software-management.github.io/rpm/manual/macros.html # https://rpm-packaging-guide.github.io/ %global _owner pgnd %global _build_timestamp %( date +%%Y%%m%%d_%%H%%M%%S --utc ) %global _dist .%{_build_timestamp}.%{_owner}.fc%{fedora} # https://stackoverflow.com/questions/47838041/rpmbuild-how-to-disable-check-buildroot # https://rpm-software-management.github.io/rpm/manual/dependency_generators.html # %%global __spec_install_pre /bin/true # %%global __arch_install_post %%{nil} # %%global __os_install_post %%{nil} %global _disable_source_fetch 0 %global debug_package %{nil} # %%undefine _auto_set_build_flags %global _hardened_build 1 # %%global __brp_mangle_shebangs %%{nil} # %%global __brp_strip %%{nil} # %%global __requires_exclude ^.*/xxx/bin/python.*$ # %%global __requires_exclude_from ^.*/xxx/bin/python.*$ # RHEL8 rpmbuild and /usr/lib/.build-id # https://access.redhat.com/discussions/5045161 # %%global _build_id_links none # %%bcond_with XXX : opt build with XXX; default, without # %%bcond_without XXX : opt build without XXX; default, with # must match from pkg 'mariadb-lts' %global _mdb_installdir /usr/local/mariadb-pgnd # GALERA # https://mariadb.com/kb/en/library/getting-started-with-mariadb-galera-cluster/ # https://mariadb.com/kb/en/installing-galera-from-source/ # https://github.com/MariaDB/galera.git # https://github.com/codership/galera/ %global _galera_name galera %global _galera_pkgnm mariadb-galera %global _garb_daemonnm mariadb-galera %global _galera_comment MariaDB Galera Cluster %global _galera_descrip %{expand: %{_galera_comment}.} # https://spdx.org/licenses/GPL-2.0-only.html %global _galera_license GPL-2.0-only %global _galera_scm_repo MariaDB/galera %global _galera_scm_url https://github.com/%{_galera_scm_repo}.git %global _galera_scm_branch mariadb-4.x %global _galera_scm_branch_ul mariadb_4.x %global _galera_build_dir galera-build %global _galera_install_dir %{_mdb_installdir} %global _galera_src_dir galera_%{_galera_scm_branch} %global _garb_unit_dir /etc/systemd/system %global _galera_c /usr/bin/gcc %global _galera_cxx /usr/bin/g++ %global _galera_linker /usr/bin/ld.bfd %global _galera_make_type ninja # https://docs.fedoraproject.org/en-US/packaging-guidelines/SourceURL/ %global forgeurl0 %{_galera_scm_url} %global branch0 %{_galera_scm_branch} %global commit0 %( git ls-remote %{forgeurl0} | grep /%{_galera_scm_branch}$ | cut -f1) %global shortcommit0 %( c=%{commit0}; echo ${c:0:7} ) %global archiveext0 tar.gz %global forgesource0 https://api.github.com/repos/%{_galera_scm_repo}/tarball/%{_galera_scm_branch} %global archiveurl0 %{forgesource0} %global archivename0 %( echo %{_galera_scm_repo} | sed 's|/|-|g')-%{shortcommit0} %global forgesetupargs0 -n %{archivename0} %forgemeta -i -a %global dist %{_dist} # NEVRA (n-e:v-r.a) Name: %{_galera_pkgnm} Epoch: 0 Version: %{scm0}_%( echo %{_galera_scm_branch} | sed 's|-|_|g' ) Release: 0%{?dist} # https://blog.jasonantman.com/2014/07/how-yum-and-rpm-compare-versions/ %global sameevr %{epoch}:%{version}-%{release} Summary: %{_galera_comment} License: %{_galera_license} URL: %{forgeurl0} Source0: %{forgesource0} Source100: mariadb-galera.service Source101: mariadb-galera.target BuildRequires: asio-devel BuildRequires: bash BuildRequires: boost-devel BuildRequires: boost-http-server-devel BuildRequires: boost-mpich-devel BuildRequires: boost-mpich-python3-devel BuildRequires: boost-openmpi-devel BuildRequires: boost-openmpi-python3-devel BuildRequires: check-devel BuildRequires: cmake BuildRequires: cmake-filesystem BuildRequires: cmake-rpm-macros BuildRequires: coreutils BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: grep BuildRequires: make BuildRequires: multilib-rpm-config BuildRequires: ninja-build BuildRequires: openssl BuildRequires: openssl-devel BuildRequires: pigz BuildRequires: systemd BuildRequires: systemd-rpm-macros %{?systemd_requires} Requires(pre): (user(%{_galera_name}) and group(%{_galera_name})) Requires: bash Requires: coreutils Requires: grep Requires: nmap-ncat Requires: procps-ng # Weak Dependencies Policy # https://docs.fedoraproject.org/en-US/packaging-guidelines/WeakDependencies/ Recommends: mariadb-lts # Packaging:Conflicts # https://fedoraproject.org/wiki/Packaging:Conflicts Obsoletes: %{_galera_pkgnm} <= %{version} Provides: %{_galera_pkgnm} = %{version} Conflicts: galera Conflicts: mariadb Conflicts: mariadb-backup Conflicts: mariadb-common Conflicts: mariadb-connector-c Conflicts: mariadb-connector-c-config Conflicts: mariadb-connector-odbc Conflicts: mariadb-devel Conflicts: mariadb-embedded Conflicts: mariadb-server Conflicts: mariadb-server-galera Conflicts: community-mysql Conflicts: community-mysql-common Conflicts: community-mysql-devel Conflicts: community-mysql-libs Conflicts: community-mysql-server %description %{_galera_descrip} %prep echo '##### STARTING PREP #####' %forgesetup -a cd %{_builddir} echo '##### TARGET DESTDIR #####' # echo "/builddir/build/BUILDROOT/%%{_galera_pkgnm}-%%{version}-%%{release}.%%{_arch}" echo '##### GALERA SINGLE BRANCH GIT CHECKOUT + SUBMODULE PREP #####' git clone --recurse-submodules -b %{_galera_scm_branch} --single-branch %{_galera_scm_url} %{_galera_src_dir} #??? # https://cmake.org/cmake/help/latest/prop_tgt/C_STANDARD.html#prop_tgt:C_STANDARD # https://cmake.org/cmake/help/latest/prop_tgt/CXX_STANDARD.html#prop_tgt:CXX_STANDARD sed -i 's|\([^ ]*set(CMAKE_C_STANDARD\).*)|\1 17)|g' %{_galera_src_dir}/cmake/compiler.cmake sed -i 's|\([^ ]*set(CMAKE_CXX_STANDARD\).*)|\1 17)|g' %{_galera_src_dir}/cmake/compiler.cmake grep -E "CMAKE_C_STANDARD|CMAKE_CXX_STANDARD" %{_galera_src_dir}/cmake/compiler.cmake # set(CMAKE_C_STANDARD 17) # set(CMAKE_CXX_STANDARD 17) mkdir -p %{_galera_src_dir}/scripts/ cp %{SOURCE100} %{SOURCE101} %{_galera_src_dir}/scripts/ rm -rf %{archivename0} mv %{_galera_src_dir} %{archivename0} %build echo '##### STARTING BUILD #####' cd %{_builddir} echo '##### GALERA SOURCE FLAGS PREP #####' _this_CFLAGS="${CFLAGS}" _this_CFLAGS=$(echo ${_this_CFLAGS} | sed 's| -g | |g' \ | sed 's| -grecord-gcc-switches | |g' \ | sed 's| [^ ]*-flto=[^ ]* | |g' \ | sed 's| [^ ]*-lto-[^ ]* | |g' \ | sed 's| [^ ]*-std=[^ ]*| |g' \ ) _this_CFLAGS+=" -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE" _this_CFLAGS+=" -fPIC" _this_CFLAGS+=" -DDBUG_OFF" _this_CPPFLAGS="${_this_CFLAGS}" _this_CXXFLAGS="${_this_CFLAGS}" _this_LDFLAGS="${LDFLAGS}" BDO="" #BDO+=" --debug-output" #BDO+=" --debug-find" BDO+=" -Wno-dev" #BDO+=" -DNDEBUG" BDO+=" -DGALERA_MAINTAINER_MODE=0" BDO+=" -DBUILD_TESTING=0" BDO+=" -DGALERA_WITH_VALGRIND=0" # How to Compile MariaDB with Sanitizers # https://mariadb.com/kb/en/compile-and-using-mariadb-with-sanitizers-asan-ubsan-tsan-msan/ BDO+=" -DGALERA_WITH_ASAN=0" _this_BUILD_DEBUG_OPTS=${BDO} export _this_CFLAGS _this_CXXFLAGS _this_CPPFLAGS _this_LDFLAGS unset CFLAGS CXXFLAGS CPPFLAGS LDFLAGS rm -rf "%{_galera_build_dir}" mkdir -p "%{_galera_build_dir}" # !! BROKEN !! # CPackRPM broken on Fedora39 # https://gitlab.kitware.com/cmake/cmake/-/issues/25421 ## -DRPM=%%{fedora%%{fedora}} \ # CMAKE_BUILD_TYPE-STRINGS:INTERNAL=Debug;Release;RelWithDebInfo _this_CMAKE_BUILD_TYPE="Release" #_this_CMAKE_BUILD_TYPE="Debug" %if "%{_galera_make_type}" == "ninja" _this_MAKEFILE_TYPE="Ninja" %else _this_MAKEFILE_TYPE="Unix Makefiles" %endif # echo '##### GALERA CMAKE DEFAULT CONFIG #####' # cmake -LAH -S "%%{archivename0}" -B "%%{_galera_build_dir}" -DCMAKE_POLICY_DEFAULT_CMP0056=NEW echo '##### GALERA CMAKE CONFIG #####' cmake \ --fresh \ -DCMAKE_BUILD_TYPE=${_this_CMAKE_BUILD_TYPE} \ -S "%{archivename0}" \ -B "%{_galera_build_dir}" \ -G "${_this_MAKEFILE_TYPE}" \ ${_this_BUILD_DEBUG_OPTS} \ -DCMAKE_VERBOSE_MAKEFILE=1 \ -DCMAKE_C_COMPILER="%{_galera_c}" \ -DCMAKE_C_FLAGS="${_this_CFLAGS}" \ -DCMAKE_CXX_COMPILER="%{_galera_cxx}" \ -DCMAKE_CXX_FLAGS="${_this_CXXFLAGS}" \ -DCMAKE_LINKER="%{_galera_linker}" \ -DBUILD_SHARED_LIBS=1 \ -DCMAKE_EXE_LINKER_FLAGS="${_this_LDFLAGS}" \ -DCMAKE_SHARED_LINKER_FLAGS="${_this_LDFLAGS}" \ -DCMAKE_SKIP_INSTALL_RPATH=0 \ -DCMAKE_SKIP_RPATH=0 \ -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=1 \ -DCMAKE_POLICY_DEFAULT_CMP0056=NEW \ -DCMAKE_INSTALL_PREFIX="%{_galera_install_dir}" \ -DGALERA_STATIC=0 \ -DGALERA_WITH_SSL=1 # echo '##### RESULT CMAKECACHE #####' # cat "%%{_galera_build_dir}/CMakeCache.txt" echo '##### GALERA CMAKE BUILD #####' %if "%{_galera_make_type}" == "ninja" _this_verbosity="--quiet" #_this_verbosity="--verbose" ninja -C "%{_galera_build_dir}" -j${RPM_BUILD_NCPUS} ${_this_verbosity} %else cmake --build "%{_galera_build_dir}" -j${RPM_BUILD_NCPUS} --verbose %endif %install echo '##### STARTING INSTALL #####' cd %{_builddir} # _this_DESTDIR="/builddir/build/BUILDROOT/%%{_galera_pkgnm}-%%{version}-%%{release}.%%{_arch}" %if "%{_galera_make_type}" == "ninja" #_this_verbosity="--quiet" _this_verbosity="--verbose" DESTDIR="${RPM_BUILD_ROOT}" ninja install -C "%{_galera_build_dir}" ${_this_verbosity} %else _this_verbosity="" _this_verbosity="--verbose" DESTDIR="${RPM_BUILD_ROOT}" cmake --install "%{_galera_build_dir}" ${_this_verbosity} %endif # FIX PATHS # https://src.fedoraproject.org/rpms/galera/blob/rawhide/f/galera.spec # https://github.com/codership/galera/pull/614/files # patching is a mess; upstream's not responding to PR's for config'able install path export _relo="${RPM_BUILD_ROOT}/%{_galera_install_dir}" #!!! https://fedoraproject.org/wiki/Changes/Unify_bin_and_sbin mv ${_relo}/bin ${_relo}/sbin mv ${_relo}/share/garb-systemd ${_relo}/sbin/ chmod 0755 ${_relo}/sbin/garb-systemd mkdir -p ${_relo}/share/galera mv ${_relo}/share/garb.cnf ${_relo}/share/galera/ mv ${_relo}/share/garb.service ${_relo}/share/galera/ mkdir -p ${_relo}/share/doc mv ${_relo}/doc ${_relo}/share/doc/galera mkdir -p ${_relo}/libTMP mv ${_relo}/lib ${_relo}/libTMP/galera mv ${_relo}/libTMP ${_relo}/lib64 mv ${_relo}/man ${_relo}/share/ install -D --preserve-timestamps --mode=644 --verbose \ %{archivename0}/scripts/%{_garb_daemonnm}.service \ ${RPM_BUILD_ROOT}/%{_garb_unit_dir}/%{_garb_daemonnm}.service install -D --preserve-timestamps --mode=644 --verbose \ %{archivename0}/scripts/%{_garb_daemonnm}.target \ ${RPM_BUILD_ROOT}/%{_garb_unit_dir}/%{_garb_daemonnm}.target install -D --preserve-timestamps --mode=644 --verbose \ ${RPM_BUILD_ROOT}/%{_galera_install_dir}/share/galera/garb.cnf \ ${RPM_BUILD_ROOT}/etc/sysconfig/garb %check %pre %post %systemd_post %{_garb_daemonnm}.service %preun %systemd_preun %{_garb_daemonnm}.service %postun %systemd_postun_with_restart %{_garb_daemonnm}.service %files # http://ftp.rpm.org/max-rpm/s1-rpm-inside-files-list-directives.html %{_galera_install_dir} %{_garb_unit_dir}/%{_garb_daemonnm}* %config(noreplace) /etc/sysconfig/garb %changelog * Fri May 3 2024 pgnd _ - bump 1714754483