packaging: depend on multilib-rpm-config

.. to correctly install architecture-dependant header files.

Related: rhbz#1286193
Version: 9.5.3-3
This commit is contained in:
Pavel Raiskup 2016-06-21 12:03:59 +02:00
parent b5308137b9
commit a3f63f1f95
2 changed files with 13 additions and 178 deletions

View File

@ -1,170 +0,0 @@
#! /bin/sh
# Replace the multilib-unclean header file with multilib-clean stub, while the
# original file is moved to unique architecture-specific location.
#
# The solution is taken from Fedora PostgreSQL RPM package.
#
# Pavel Raiskup <praiskup@redhat.com>
#
# This file is to be moved into redhat-rpm-config (or something like this).
progname=$(basename "$0")
opt_arch=$(uname -i)
# See rhbz#1242873 for more info.
test "$opt_arch" = ppc64p7 && opt_arch=ppc64
opt_destdir=
opt_basename=
opt_buildroot=$(pwd)
opt_verbose=:
opt_additional_suffix=
# TODO: we could pretty easily implement other then 'cpp-header' stubs, if the
# target file type allows some kind of "transparent" file inclusion. For
# example shell scripts might use '. "${opt_destdir}/${opt_basename}_x86_64.sh'.
print_stub ()
{
cat <<EOF
/*
* Kluge to support multilib installation of both 32- and 64-bit RPMS:
* we need to arrange that header files that appear in both RPMs are
* identical. Hence, this file is architecture-independent and calls
* in an arch-dependent file that will appear in just one RPM.
*
* To avoid breaking arches not explicitly supported by Red Hat, we
* use this indirection file *only* on known multilib arches.
*
* Note: this may well fail if user tries to use gcc's -I- option.
* But that option is deprecated anyway.
*/
#if defined(__x86_64__)
#include "${opt_basename}${opt_additional_suffix}_x86_64.h"
#elif defined(__i386__)
#include "${opt_basename}${opt_additional_suffix}_i386.h"
#elif defined(__ppc64__) || defined(__powerpc64__)
#include "${opt_basename}${opt_additional_suffix}_ppc64.h"
#elif defined(__ppc__) || defined(__powerpc__)
#include "${opt_basename}${opt_additional_suffix}_ppc.h"
#elif defined(__s390x__)
#include "${opt_basename}${opt_additional_suffix}_s390x.h"
#elif defined(__s390__)
#include "${opt_basename}${opt_additional_suffix}_s390.h"
#elif defined(__sparc__) && defined(__arch64__)
#include "${opt_basename}${opt_additional_suffix}_sparc64.h"
#elif defined(__sparc__)
#include "${opt_basename}${opt_additional_suffix}_sparc.h"
#endif
EOF
}
print_help ()
{
_h_exit=false
test -n "$1" && _h_exit=:
cat <<EOF
Usage: $progname [OPTIONS]
Replace the multilib-unclean header file with multilib-clean stub, while the
original file is moved to unique architecture-specific location. This should be
absolutely safe operation (effects of '#include <HEADER.h>' are unchanged.
To allow us to do incompatible changes in this script, packagers should use this
script only through %ml_fix_c_header wrapping macro.
--destdir absolute path name where the old header file is stored, e.g.
/some/pat
--basename when you deal with '/some/path/test.h', specify 'test'
--buildroot prefix (directory where we play with installed files, usually
after 'make install DESTDIR=buildroot')
--additional-suffix we usually move 'test.h' to 'test_\$ARCH.h'. However
this file could already exit. With this option the multilib
file will be named 'test_\$ARCH\$SUFFIX.h'
--verbose print some useful information
--help show this help
EOF
$_h_exit && exit "$1"
}
verbose ()
{
$opt_verbose && echo "INFO: $progname: $*"
}
die ()
{
echo >&2 " # $*"
print_help 1
}
error ()
{
error_occurred=:
echo >&2 " ! $*"
}
error_occurred=false
while test $# -gt 0
do
_opt=$1 ; shift
case $_opt in
--destdir)
opt_destdir=$1 ; shift || die "$_opt requires argument"
;;
--basename)
opt_basename=$1 ; shift || die "$_opt require argument"
;;
--buildroot)
opt_buildroot=$1 ; shift || die "$_opt require argument"
;;
--arch)
opt_arch=$1 ; shift || die "$_opt require argument"
;;
--additional-suffix)
opt_additional_suffix=$1 ; shift || die "$_opt require argument"
;;
--help)
print_help 0
;;
*)
error "unexpected '$_opt' program argument"
;;
esac
done
$error_occurred && print_help 1
for i in arch buildroot destdir basename
do
eval "test -z \"\$opt_$i\"" && error "--$i needs to be set"
done
$error_occurred && print_help 1
original_file="$opt_buildroot$opt_destdir/$opt_basename".h
multilib_file="$opt_buildroot$opt_destdir/$opt_basename${opt_additional_suffix}_$opt_arch".h
test -f "$original_file" || die "can't find '$original_file'"
case $opt_arch in
# we only apply this to known Red Hat multilib arches, per bug #177564
i386|x86_64|ppc|ppc64|s390|s390x|sparc|sparc64)
;;
*)
verbose "we don't need multilib haeder hack for '$opt_arch' architecture (no-op)"
exit 0
;;
esac
verbose "moving: '$original_file' to '$multilib_file'"
mv "$original_file" "$multilib_file" || exit 1
if print_stub > "$original_file" && chmod 644 "$original_file"; then
:
else
die "can't write into '$original_file'"
fi
:

View File

@ -67,7 +67,7 @@ Summary: PostgreSQL client programs
Name: postgresql
%global majorversion 9.5
Version: 9.5.3
Release: 2%{?dist}
Release: 3%{?dist}
# The PostgreSQL license is very similar to other MIT licenses, but the OSI
# recognizes it as an independent license, so we do as well.
@ -94,7 +94,6 @@ Source1: postgresql-%{version}-US.pdf
Source2: generate-pdf.sh
Source3: ftp://ftp.postgresql.org/pub/source/v%{prevversion}/postgresql-%{prevversion}.tar.bz2
Source4: Makefile.regress
Source5: multilib-fix
Source9: postgresql.tmpfiles.d
Source10: postgresql.pam
Source11: postgresql-bashprofile
@ -121,6 +120,7 @@ BuildRequires: perl(ExtUtils::MakeMaker) glibc-devel bison flex gawk help2man
BuildRequires: perl(ExtUtils::Embed), perl-devel
BuildRequires: readline-devel zlib-devel
BuildRequires: systemd-units util-linux
BuildRequires: multilib-rpm-config
# postgresql-setup build requires
BuildRequires: m4 elinks docbook-utils help2man
@ -687,12 +687,14 @@ install -D -m 644 macros.%{name} \
$RPM_BUILD_ROOT%{macrosdir}/macros.%{name}
# multilib header hack; some headers are installed in two places!
%global ml_fix_c_header %{SOURCE5} --buildroot "$RPM_BUILD_ROOT"
for header in pg_config pg_config_ext ecpg_config; do
%ml_fix_c_header --destdir "%{_includedir}" --basename "$header"
done
for header in pg_config pg_config_ext; do
%ml_fix_c_header --destdir "%{_includedir}/pgsql/server" --basename "$header"
for header in \
%{_includedir}/pg_config.h \
%{_includedir}/pg_config_ext.h \
%{_includedir}/ecpg_config.h \
%{_includedir}/pgsql/server/pg_config.h \
%{_includedir}/pgsql/server/pg_config_ext.h
do
%multilib_fix_c_header --file "$header"
done
install -d -m 755 $RPM_BUILD_ROOT%{_libdir}/pgsql/tutorial
@ -1213,6 +1215,9 @@ fi
%endif
%changelog
* Mon Jun 20 2016 Pavel Raiskup <praiskup@redhat.com> - 9.5.3-3
- use multilib-rpm-config package for multilib hacks
* Sun May 15 2016 Jitka Plesnikova <jplesnik@redhat.com> - 9.5.3-2
- Perl 5.24 rebuild