Whamcloud - gitweb
LU-12269 build: fix hardened builds in rpm spec file
[fs/lustre-release.git] / lustre.spec.in
index 75a705c..8df403b 100644 (file)
@@ -186,7 +186,7 @@ Userspace tools and files for the Lustre file system.
 %define preamble %{expand:%(
 TMPFILE=`mktemp`
 cat %{SOURCE1} > $TMPFILE
-kver=%{kver}
+kver=%{kversion}
 linuxversion=${kver%%%%-*}
 linuxrelease=${kver##*-}
 kabiminor=${linuxrelease%%%%.*}
@@ -252,7 +252,7 @@ Requires: %{name} = %{version}
 %endif
 Requires: %{requires_kmod_name} = %{requires_kmod_version}
 Requires: %{requires_kmod_tests_name} = %{requires_kmod_version}
-Requires: attr, rsync, perl, lsof, /usr/bin/getconf
+Requires: attr, rsync, perl, lsof, libtool, /usr/bin/getconf
 
 %description tests
 This package contains a set of test binaries and scripts that are intended
@@ -310,9 +310,30 @@ ln lnet/ChangeLog ChangeLog-lnet
 %build
 # Set an explicit path to our Linux tree, if we can.
 cd $RPM_BUILD_DIR/lustre-%{version}
-# override %optflags so that the vendor's overzealous flags don't create
-# build failures
+
+# Store the CFLAGS and LDFLAGS that would normally be used in the UTILS_CFLAGS
+# and UTILS_LDFLAGS environment variables so that we use can them when compiling
+# the user-space code in lustre/utils and lnet/utils. As of RHEL 8.0, the
+# __global_* variants are deprecated in favour of build_cflags, etc. If neither
+# style is available (e.g. on SLES), then these just end up as empty strings.
+export UTILS_CFLAGS="%{?build_cflags:%{build_cflags}}%{!?build_cflags:%{?__global_cflags:%{__global_cflags}}}"
+export UTILS_LDFLAGS="%{?build_ldflags:%{build_ldflags}}%{!?build_ldflags:%{?__global_ldflags:%{__global_ldflags}}}"
+
+# RHEL7 on PPC64 needs __SANE_USERSPACE_TYPES__ defined so that __s64 and __u64
+# are presented to user-land as long long instead of long long. Without this it
+# will fail the format check whenever such a variable is printed.
+%if 0%{?rhel}
+%ifarch ppc64
+export UTILS_CFLAGS="${UTILS_CFLAGS} -D__SANE_USERSPACE_TYPES__=1"
+%endif
+%endif
+
+# Disable any hardening or annotation since this doesn't make sense for
+# kernel code, and reset %optflags so that the vendor's overzealous flags don't
+# create build failures.
 %define optflags -g -O2 -Werror
+%undefine _annotated_build
+%undefine _hardened_build
 
 CONFIGURE_ARGS="%{?configure_args}"
 if [ -n "$CONFIGURE_ARGS" ]; then
@@ -394,12 +415,12 @@ echo '%{_sysconfdir}/ha.d/resource.d/Lustre' >>lustre.files
 # systemd is on redhat, fedora, and suse
 %if %{with systemd}
 echo '%{_unitdir}/lnet.service' >>lustre.files
-echo '%{_unitdir}/lustre.service' >>lustre.files
 %endif
 
 %if %{_vendor}=="redhat"
 # The following scripts are Red Hat specific
 %if %{with servers}
+echo '%{_sysconfdir}/init.d/lustre' >>lustre.files
 echo '%{_sysconfdir}/sysconfig/lustre' >>lustre.files
 %if %{with gss_keyring}
 echo '%{_sysconfdir}/init.d/lsvcgss' >>lustre.files
@@ -409,7 +430,6 @@ echo '%{_sysconfdir}/sysconfig/lsvcgss' >>lustre.files
 
 %if %{without systemd}
 echo '%{_sysconfdir}/init.d/lnet' >>lustre.files
-echo '%{_sysconfdir}/init.d/lustre' >>lustre.files
 %endif
 %endif
 %if %{with gss_keyring}
@@ -573,18 +593,15 @@ echo '%{_sbindir}/wiretest' >>lustre-tests.files
 %post
 %if %{with systemd}
 %systemd_post lnet.service
-%systemd_post lustre.service
 %endif
 
 %preun
 %if %{with systemd}
-%systemd_preun lustre.service
 %systemd_preun lnet.service
 %endif
 
 %postun
 %if %{with systemd}
-%systemd_postun_with_restart lustre.service
 %systemd_postun_with_restart lnet.service
 %endif