276 lines
8.3 KiB
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
|