From 3d7bea8322f8a7c5bd1b01ec16180c5b036a65a7 Mon Sep 17 00:00:00 2001 From: Neal Gompa Date: Jul 29 2020 20:16:10 +0000 Subject: Backport support for out-of-source builds controlled by __cmake_in_source_build macro (#1861329) - Backport cmake_build and cmake_install macros - Backport ctest macro --- diff --git a/cmake-build b/cmake-build new file mode 100755 index 0000000..4a9962f --- /dev/null +++ b/cmake-build @@ -0,0 +1,17 @@ +#!/bin/bash +# Shell wrapper for supporting compiling with different backends for CMake < 3.13 + +# Collect arguments +__cmake_builddir="$1" +__build_flags="${@:2}" + +if [ -f "${__cmake_builddir}/Makefile" ]; then + /usr/bin/make -C "${__cmake_builddir}" V=1 VERBOSE=1 ${__build_flags} + exit $? +elif [ -f "${__cmake_builddir}/build.ninja" ]; then + /usr/bin/ninja -C "${__cmake_builddir}" -v ${__build_flags} + exit $? +else + echo "Unknown build format, exiting!" + exit 99 +fi diff --git a/cmake-configure b/cmake-configure new file mode 100755 index 0000000..adbc2ea --- /dev/null +++ b/cmake-configure @@ -0,0 +1,13 @@ +#!/bin/bash +# Shell wrapper for supporting out-of-source builds with CMake < 3.13 + +# Collect arguments +__cmake="$1" +__cmake_srcdir="$2" +__cmake_builddir="$3" +__cmake_flags="${@:4}" + +# Do the build +mkdir -p "${__cmake_builddir}" +"${__cmake}" ${__cmake_flags} "${__cmake_srcdir}" "${__cmake_builddir}" +exit $? diff --git a/cmake-install b/cmake-install new file mode 100755 index 0000000..f3cbcb8 --- /dev/null +++ b/cmake-install @@ -0,0 +1,17 @@ +#!/bin/bash +# Shell wrapper for supporting installing with different backends for CMake < 3.13 + +# Collect arguments +__cmake_builddir="$1" +__cmake_destdir="$2" + +if [ -f "${__cmake_builddir}/Makefile" ]; then + /usr/bin/make -C "${__cmake_builddir}" install DESTDIR="${__cmake_destdir}" + exit $? +elif [ -f "${__cmake_builddir}/build.ninja" ]; then + DESTDIR="${__cmake_destdir}" /usr/bin/ninja -C "${__cmake_builddir}" install -v + exit $? +else + echo "Unknown build format, exiting!" + exit 99 +fi diff --git a/epel-rpm-macros.spec b/epel-rpm-macros.spec index 49f9efe..34b360f 100644 --- a/epel-rpm-macros.spec +++ b/epel-rpm-macros.spec @@ -1,6 +1,6 @@ Name: epel-rpm-macros Version: 8 -Release: 14 +Release: 15 Summary: Extra Packages for Enterprise Linux RPM macros Group: System Environment/Base @@ -16,6 +16,14 @@ Source2: gpgverify Source3: pythondist.attr Source9: GPL +# CMake macro backport for until RHEL 8 updates to CMake 3.17+ +# Cf. https://fedoraproject.org/wiki/Changes/CMake_to_do_out-of-source_builds +# Cf. https://bugzilla.redhat.com/show_bug.cgi?id=1858941 +Source21: cmake-configure +Source22: cmake-build +Source23: cmake-install +Source24: macros.zzz-epel-override-cmake + BuildArch: noarch Requires: redhat-release >= %{version} # For FPC buildroot macros @@ -53,15 +61,33 @@ install -Dpm 755 %{SOURCE2} \ install -Dpm 644 %{SOURCE3} \ %{buildroot}%{_fileattrsdir}/pythondist.attr +# Install CMake stuff +install -Dpm 755 %{SOURCE21} \ + %{buildroot}%{_rpmconfigdir}/cmake-configure +install -Dpm 755 %{SOURCE22} \ + %{buildroot}%{_rpmconfigdir}/cmake-build +install -Dpm 755 %{SOURCE23} \ + %{buildroot}%{_rpmconfigdir}/cmake-install +install -Dpm 755 %{SOURCE24} \ + %{buildroot}/etc/rpm/macros.zzz-epel-override-cmake + + %files %license GPL /usr/lib/rpm/macros.d/macros.epel-rpm-macros /etc/rpm/macros.zzz-epel-override %{_rpmconfigdir}/gpgverify %{_fileattrsdir}/pythondist.attr +%{_rpmconfigdir}/cmake-* +/etc/rpm/macros.zzz-epel-override-cmake %changelog +* Wed Jul 29 2020 Neal Gompa - 8-15 +- Backport support for out-of-source builds controlled by __cmake_in_source_build macro (#1861329) +- Backport cmake_build and cmake_install macros +- Backport ctest macro + * Sun Jun 28 2020 Artur Iwicki - 8-14 - Add a Requires for fpc-srpm-macros diff --git a/macros.zzz-epel-override-cmake b/macros.zzz-epel-override-cmake new file mode 100644 index 0000000..f53660e --- /dev/null +++ b/macros.zzz-epel-override-cmake @@ -0,0 +1,54 @@ +# +# EPEL override macros for cmake +# +%_cmake_shared_libs -DBUILD_SHARED_LIBS:BOOL=ON +%__ctest /usr/bin/ctest +%__cmake_in_source_build 1 +%__cmake_builddir %{!?__cmake_in_source_build:%{_vpath_builddir}}%{?__cmake_in_source_build:.} +%__cmake_configure %{_rpmconfigdir}/cmake-configure %{__cmake} %{_vpath_srcdir} %{__cmake_builddir} + +# - Set default compile flags +# - CMAKE_*_FLAGS_RELEASE are added *after* the *FLAGS environment variables +# and default to -O3 -DNDEBUG. Strip the -O3 so we can override with *FLAGS +# - Turn on verbose makefiles so we can see and verify compile flags +# - Set default install prefixes and library install directories +# - Turn on shared libraries by default +%cmake \ +%if 0%{?set_build_flags:1} \ + %set_build_flags \ +%else \ + CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ; \ + CXXFLAGS="${CXXFLAGS:-%optflags}" ; export CXXFLAGS ; \ + FFLAGS="${FFLAGS:-%optflags%{?_fmoddir: -I%_fmoddir}}" ; export FFLAGS ; \ + FCFLAGS="${FCFLAGS:-%optflags%{?_fmoddir: -I%_fmoddir}}" ; export FCFLAGS ; \ + %{?__global_ldflags:LDFLAGS="${LDFLAGS:-%__global_ldflags}" ; export LDFLAGS ;} \ +%endif \ + %{!?__cmake_in_source_build:%__cmake_configure}%{?__cmake_in_source_build:%__cmake} \\\ + -DCMAKE_C_FLAGS_RELEASE:STRING="-DNDEBUG" \\\ + -DCMAKE_CXX_FLAGS_RELEASE:STRING="-DNDEBUG" \\\ + -DCMAKE_Fortran_FLAGS_RELEASE:STRING="-DNDEBUG" \\\ + -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \\\ + -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \\\ + -DINCLUDE_INSTALL_DIR:PATH=%{_includedir} \\\ + -DLIB_INSTALL_DIR:PATH=%{_libdir} \\\ + -DSYSCONF_INSTALL_DIR:PATH=%{_sysconfdir} \\\ + -DSHARE_INSTALL_PREFIX:PATH=%{_datadir} \\\ +%if "%{?_lib}" == "lib64" \ + %{?_cmake_lib_suffix64} \\\ +%endif \ + %{?_cmake_shared_libs} + +%cmake_build \ + %{_rpmconfigdir}/cmake-build "%{__cmake_builddir}" %{?_smp_mflags} + +%cmake_install \ + %{_rpmconfigdir}/cmake-install "%{__cmake_builddir}" "%{buildroot}" + +%ctest(:-:) \ + cd "%{__cmake_builddir}" \ + %__ctest --output-on-failure --force-new-ctest-process %{?_smp_mflags} %{**} \ + cd - + +%cmake3_build %cmake_build +%cmake3_install %cmake_install +%ctest3 %ctest