rpm/brp.diff

276 lines
8.3 KiB
Diff

SUSE specific brp script patches
Index: scripts/brp-lib64-linux
===================================================================
--- /dev/null
+++ scripts/brp-lib64-linux
@@ -0,0 +1,42 @@
+#!/bin/bash
+# script checks wether package is 64-bit clean
+# and also for a linker bug. (linker allows 64bit libs to link 32bit libs)
+echo "sf@suse.de: if you find problems with this script, drop me a note"
+# If using normal root, avoid changing anything:
+if [ -z "$RPM_BUILD_ROOT" -o "$RPM_BUILD_ROOT" = "/" ]; then
+ exit 0
+fi
+files=
+tfiles=
+LC_ALL=
+LANG=
+# check for 64-bit libs in */lib
+for p in `grep -v 'lib64' /etc/ld.so.conf`
+do
+ if test -d $RPM_BUILD_ROOT$p ; then
+ for f in `find $RPM_BUILD_ROOT$p \
+ -maxdepth 1 -type f -name \*.so\* -o -name \*.a -follow 2>/dev/null`
+ do
+ [ $HOSTTYPE = s390x ] && case $f in */lib/ld64.so.1) continue; esac
+ objdump -f $f 2>/dev/null | grep 'format elf64' \
+ && { echo "$f: should be in */lib64"; exit 1; }
+
+ done
+ fi
+done
+
+# check for 64 bit libs that have an rpath to a 32 bit Library
+
+for p in `grep 'lib64' /etc/ld.so.conf`
+do
+ if test -d $RPM_BUILD_ROOT$p ; then
+ for f in `find $RPM_BUILD_ROOT$p \
+ -maxdepth 1 -type f -name \*.so\* -o -name \*.a -follow 2>/dev/null`
+ do
+ # check for rpath to 32bit libs
+ objdump -x $f 2>/dev/null | grep -v "lib64" | grep -i 'rpath.*lib$' \
+ && { echo "$f: rpath to 32bit lib"; exit 1; }
+ done
+ fi
+done
+exit 0
Index: scripts/brp-sparc64-linux
===================================================================
--- scripts/brp-sparc64-linux.orig
+++ scripts/brp-sparc64-linux
@@ -6,6 +6,7 @@ fi
files=
LC_ALL=
LANG=
+LC_TIME=POSIX
# Move 64bit ELF objects from /lib, /usr/lib, /usr/X11R6/lib to */lib64
# directories
Index: scripts/brp-strip
===================================================================
--- scripts/brp-strip.orig
+++ scripts/brp-strip
@@ -13,6 +13,7 @@ esac
for f in `find $RPM_BUILD_ROOT -type f \( -perm -0100 -or -perm -0010 -or -perm -0001 \) -exec file {} \; | \
grep -v "^${RPM_BUILD_ROOT}/\?usr/lib/debug" | \
grep -v ' shared object,' | \
+ grep -v '/lib/modules/' | \
sed -n -e 's/^\(.*\):[ ]*ELF.*, not stripped/\1/p'`; do
strip -g "$f" || :
done
Index: scripts/brp-strip-comment-note
===================================================================
--- scripts/brp-strip-comment-note.orig
+++ scripts/brp-strip-comment-note
@@ -13,6 +13,8 @@ esac
# for already stripped elf files in the build root
for f in `find $RPM_BUILD_ROOT -type f \( -perm -0100 -or -perm -0010 -or -perm -0001 \) -exec file {} \; | \
grep -v "^${RPM_BUILD_ROOT}/\?usr/lib/debug" | \
+ grep -v ' shared object,' | \
+ grep -v '/lib/modules/' | \
sed -n -e 's/^\(.*\):[ ]*ELF.*, stripped/\1/p'`; do
note="-R .note"
if objdump -h $f | grep '^[ ]*[0-9]*[ ]*.note[ ]' -A 1 | \
Index: scripts/brp-symlink
===================================================================
--- /dev/null
+++ scripts/brp-symlink
@@ -0,0 +1,184 @@
+#!/bin/sh
+
+# Task: go through the files in $RPM_BUILD_ROOT and
+# relink symbolic links so that:
+# links crossing top level directory boundaries (/usr/* -> /etc/*)
+# are absolute links
+# links below one top level directory (/usr/bin/* -> /usr/lib/*)
+# are relative links
+# NOTE: we're not doing this to fix a problem (as no matter how you
+# do it you fix one problem by creating another). We're doing it
+# so we can document this as policy - so you can rely on it
+
+# Additional Task: check some usual errors arround symlinks e.g.
+# dangling symlinks or symlinks to init scripts in wrong location
+
+# Author: Stephan Kulow <coolo@suse.de>
+
+# If using normal root, avoid changing anything.
+if [ -z "$RPM_BUILD_ROOT" ]; then
+ exit 0
+fi
+
+LC_ALL=
+LANG=
+LC_TIME=POSIX
+
+BASENAME=/usr/bin/basename
+DIRNAME=/usr/bin/dirname
+READLINK=/usr/bin/readlink
+
+cd $RPM_BUILD_ROOT
+
+had_errors=0
+
+links=`find . -type l | sed -e "s,^./,/,"`
+for link in $links
+do
+ link_dest=`$READLINK ./$link`
+ orig_link_dest=$link_dest
+
+ new_link_dest=NONE
+ link_dir=`$DIRNAME $link`
+
+ case $link_dest in
+ .|..|../..) # link to current dir
+ continue ;;
+ .*) # relative links up
+ link_dest="$link_dir/$link_dest"
+ ;;
+ /*) # absolute links
+ ;;
+ */*) # relative links down
+ link_dest="$link_dir/$link_dest"
+ ;;
+ *) # the rest
+ continue
+ esac
+
+ # cleaning out double slash
+ link_dest=`echo $link_dest | sed -e 's,//*,/,g; s,/\.$,/,; s,/$,,'`
+
+ # eliminating /./ components
+ link_dest=`echo $link_dest | sed -e "s,/\./,/,g"`;
+
+ counter=0
+ # eliminating back references
+ while echo $link_dest | egrep -q '/\.\.'; do
+ link_dest=`echo $link_dest | sed -e "s,/[^/]*/\.\.,,"`;
+ case $link_dest in
+ /..*) # this is very mean
+ echo "ERROR: $link points to illegal $link_dest"
+ exit 1
+ ;;
+ esac
+ counter=$((counter + 1))
+ if test $counter -gt 10; then
+ echo "ERROR: more than 10 back references in $link?"
+ exit 1
+ fi
+ done
+
+ # black list
+ case "$link,$link_dest" in
+ *,/var/lib/named*)
+ continue;;
+ /usr/etc,*|/usr/tmp,*)
+ continue;;
+ */share/texmf/*|/usr/share/terminfo/*)
+ continue;;
+ *share/automake-*)
+ echo "ERROR: link target $link points into automake directory"
+ echo " You might want to add a -c to the automake call (or just"
+ echo " skip the files from packaging)"
+ exit 1
+ ;;
+ *,/opt/kde3/share/doc*/HTML/*/common) # white listed for not existant
+ ;;
+ *,usr/share/doc/kde/HTML/*/common) # white listed for not existant
+ ;;
+ *,/proc/*) # links pointing into /proc file system
+ ;;
+ *)
+ if test ! -L ./$link_dest && test ! -e $link_dest && test ! -e ./$link_dest; then
+ echo "ERROR: link target doesn't exist (neither in build root nor in installed system):"
+ echo " $link -> $link_dest"
+ echo "Add the package providing the target to neededforbuild and Requires"
+ test "$NO_BRP_STALE_LINK_ERROR" != "yes" && had_errors=1
+ fi
+ ;;
+ esac
+
+ forced_absolute=0
+ for prefix in /usr/X11R6/lib/X11 /usr/X11R6/include/X11 /usr/X11R6/lib/X11/app-defaults ; do
+ if echo $link | grep -q "^$prefix/"; then
+ if echo $link_dest | grep -q "^$prefix/"; then
+ # if it's below it, it's fine
+ :
+ else
+ forced_absolute=1
+ fi
+ fi
+ done
+
+ dest_dir=`$DIRNAME $link_dest`
+
+ # figuring out (currently) correct destination
+ if test "$link_dir" = "$dest_dir" || test "$dest_dir" = "."; then
+ new_link_dest=`$BASENAME $link_dest`
+ else
+ # figuring out top level directory
+ top_link=`echo $link | sed -e 's,^\(/[^/]*\)/.*,\1,'`
+ top_dest=`echo $link_dest | sed -e 's,^\(/[^/]*\)/.*,\1,'`
+ if test "$forced_absolute" = 0 && test "$top_link" = "$top_dest"; then # supposed to be relative
+
+ # first we need to cut out the common prefix
+ link_tmp=$link
+ while test "$top_link" = "$top_dest"; do
+ link_orig=$link_tmp
+ dest_orig=$link_dest
+ link_tmp=`echo $link_tmp | sed -e 's,^\(/[^/]*\)/,/,'`
+ link_dest=`echo $link_dest | sed -e 's,^\(/[^/]*\)/,/,'`
+ top_link=`echo $link_tmp | sed -e 's,^\(/[^/]*\)/.*,\1,'`
+ top_dest=`echo $link_dest | sed -e 's,^\(/[^/]*\)/.*,\1,'`
+
+ if test "$top_dest" = "$dest_orig" || test "$top_link" = "$link_orig"; then
+ link_tmp=$link_orig
+ link_dest=$dest_orig
+ break
+ fi
+ done
+
+ # now we add a .. for every directory component
+ link_tmp=`$DIRNAME $link_tmp`
+
+ if test "$link_tmp" = "$link_dest"; then
+ new_link_dest=.
+ elif test "$link_tmp" != "/"; then # we have a directory component
+ link_rel=
+
+ while test -n "$link_tmp"; do
+ link_tmp=`echo $link_tmp | sed -e 's,^\(/[^/]*\),,'`
+ link_rel="../$link_rel"
+ done
+
+ new_link_dest=`echo $link_rel/$link_dest | sed -e "s,//*,/,g"`
+ else
+ # get rid of the slash
+ link_dest=`echo $link_dest | sed -e 's,^/,,'`
+ new_link_dest=$link_dest
+ fi
+ else
+ new_link_dest=$link_dest
+ fi
+ fi
+
+ if test "$new_link_dest" != NONE && test "$new_link_dest" != "$orig_link_dest"; then
+ echo "INFO: relinking $link -> $new_link_dest (was $orig_link_dest)"
+ rm ./$link && ln -s $new_link_dest ./$link
+ fi
+done
+
+if test "$had_errors" = 1; then
+ exit 1
+fi