fedora-rpmdevtools rpminfo, 1.2, 1.3 .cvsignore, 1.5, 1.6 rpmdevtools.spec, 1.39, 1.40
Ville Skytta (scop)
fedora-extras-commits at redhat.com
Tue Aug 28 14:25:57 UTC 2007
Author: scop
Update of /cvs/fedora/fedora-rpmdevtools
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv27043
Modified Files:
.cvsignore rpmdevtools.spec
Added Files:
rpminfo
Log Message:
Update rpminfo to 2004-07-07-02, add local copy in CVS.
Index: rpminfo
===================================================================
RCS file: rpminfo
diff -N rpminfo
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ rpminfo 28 Aug 2007 14:25:55 -0000 1.3
@@ -0,0 +1,388 @@
+#!/bin/sh
+#
+# Prints information for executables and libraries
+#
+# Copyright (C) 2004,2007 Red Hat, Inc.
+# Authors:
+# Thomas Woerner <twoerner at redhat.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# version 2004-07-07-02
+
+
+LANG=C
+READELF=/usr/bin/readelf
+EU_READELF=/usr/bin/eu-readelf
+OBJDUMP=/usr/bin/objdump
+TMPDIR=/tmp
+
+progname=`basename $0`
+
+usage() {
+ cat <<EOF
+Usage: $progname [-h] [-v] [-q] [-c] [-e | -l] [-p | -np | -P | -nP | -r]
+ [-s] [-o <file>] {-i | [<rpm package>...]}
+
+ -h | --help print help
+ -v | --verbose be more verbose (to stderr)
+ -q | --quiet only list files
+ -qq really quiet: do not print rpath in split mode
+ -i | --installed all installed packages
+ -e | --executables list executables
+ -l | --libraries list libraries
+ -p | --pic list pic
+ -np | --no_pic list no pic
+ -P | --pie list pie
+ -nP | --no_pie list no pie
+ -r | --rpath list files containing rpath
+ -ro | --rpath_odd list files containing odd rpath
+ -s | --split split output (.pie, .pic, .dso_pic, .rpath..)
+ output must be specified
+ -t | --test test for odd rpath
+ -o <file> | --output=<file> output in file <file>
+ -T <dir> | --tmp-dir=<dir> temporary directory
+
+ Default options: -e -l -p -np -P -nP -r -t
+
+EOF
+ exit -1
+}
+
+opt() {
+ [ -z "$1" ] && return
+
+ if [ -n "$opts" ]; then
+ [ $split -eq 0 ] && opts="${opts}, " || opts="${opts},"
+ fi
+ opts="${opts}$1"
+}
+
+check_rpath() {
+ [ $rpath -ne 1 ] && return
+
+ local path=`$OBJDUMP -p "$1" 2>/dev/null | grep RPATH `
+ if [ -n "$path" ]; then
+ path=`echo $path | awk '{print $2}'`
+ ## check rpath elements
+ local odd=0
+ if [ $test -eq 1 ]; then
+ [ -z "$path" ] && odd=1
+ OLDIFS=$IFS
+ IFS=:
+ for dir in $path; do
+ [ -z "$dir" ] && odd=1
+ [ "$dir" = "." ] && odd=2
+ [ "$dir" = "/lib" ] && odd=3
+ [ "$dir" = "/lib64" ] && odd=4
+ [ "$dir" = "/usr/lib" ] && odd=5
+ [ "$dir" = "/usr/lib64" ] && odd=6
+ [ "$dir" = "/usr/X11R6/lib" ] && odd=7
+ [ "$dir" = "/usr/X11R6/lib64" ] && odd=8
+ [ "${dir:0:10}" = "/usr/local" ] && odd=9
+ [ "${dir:0:12}" = "/usr/lib/qt-" ] && odd=10
+ [ "${dir:0:8}" = "/usr/src" ] && odd=11
+ echo $dir | egrep -q "/\." && odd=12
+ done
+ IFS=$OLDIFS
+ fi
+ [ $odd -eq 0 ] && opt "RPATH $path" || opt "-RPATH $path"
+ fi
+}
+
+check_file() {
+ local file=$1
+
+ [ -L "$file" ] && return
+ [ ! -f "$file" ] && return
+
+ file -b "$file" 2>/dev/null | grep -q ELF || return
+
+ if $EU_READELF -h "$file" 2>/dev/null | egrep -q 'Type:[[:space:]]*EXEC';
+ then
+ if [ $exec -eq 1 ]; then
+ if $READELF -d "$file" 2>/dev/null | grep -q TEXTREL; then
+ if [ -u "$file" ]; then
+ [ $no_pie -eq 1 ] && opt "!PIE"
+ else
+ [ $no_pic -eq 1 ] && opt "!PIC"
+ fi
+ else
+ # suid
+ if [ -u "$file" ]; then
+ [ $no_pie -eq 1 ] && opt "!PIE"
+ else
+ [ $pic -eq 1 ] && opt "PIC"
+ fi
+ fi
+ check_rpath "$file"
+ fi
+ else
+ if $EU_READELF -d "$file" 2>/dev/null | egrep -q ' DEBUG[[:space:]]*$';
+ then
+ if [ $exec -eq 1 ]; then
+ [ $pie -eq 1 ] && opt "PIE"
+ check_rpath "$file"
+ fi
+ else
+ if [ $lib -eq 1 ]; then
+ if $READELF -d "$file" 2>/dev/null | grep -q TEXTREL; then
+ [ $no_pic -eq 1 ] && opt "DSO !PIC"
+ else
+ [ $pic -eq 1 ] && opt "DSO PIC"
+ fi
+ check_rpath "$file"
+ fi
+ fi
+ fi
+}
+
+check_package() {
+ package=$1
+
+ local pkg=
+ local prefix=
+ local files=`rpm -ql $package 2>/dev/null`
+
+ if echo $files | grep -q "not installed"; then
+ # not installed
+ if [ -f $package ]; then
+ rpm -qp $package >& /dev/null
+ if [ $? -eq 1 ]; then
+ # no rpm package
+ package=
+ else
+ prefix=$temp_prefix`basename $package`
+ if [ ${package:0:1} != "/" ]; then
+ package=`pwd`"/"$package
+ fi
+ local error=0
+ mkdir $prefix 2> /dev/null && pushd "$prefix" >& /dev/null
+ if [ $? -eq 0 ]; then
+ rpm2cpio "$package" \
+ | cpio -i --make-directories >& /dev/null
+ [ $? -eq 0 ] || echo "Error while extracting package '$package'.. ignoring!" > /dev/stderr
+ files=`rpm -qlp $package 2>/dev/null`
+ popd >& /dev/null
+ chmod -R u+rwx $prefix 2>/dev/null
+ else
+ error=1
+ fi
+ if [ $error -eq 1 ]; then
+ echo "Can not create package directory.. skipping package '$package'!" > /dev/stderr
+ return
+ fi
+ fi
+ else
+ # not a file
+ package=
+ fi
+ fi
+
+ if [ -z "$package" ]; then
+ echo "'$1' is not installed and is no rpm package.. skipping!" > /dev/stderr
+ return
+ fi
+
+ local in_pie=0
+ local in_non_pie=0
+ local in_pic=0
+ local in_dso_pic=0
+ local in_non_pic=0
+ local in_dso_non_pic=0
+ local in_rpath=0
+ local in_rpath_odd=0
+
+ for file in $files; do
+ opts=
+
+ check_file "$prefix$file"
+
+ [ -z "$opts" ] && continue
+
+ if [ $split -eq 1 ]; then
+ pkg=`basename $package`
+ OLDIFS=$IFS
+ IFS=,
+ for opt in $opts; do
+ o=
+ [ "$opt" = "PIE" ] && o=pie
+ [ "$opt" = "!PIE" ] && o=non_pie
+ [ "$opt" = "PIC" ] && o=pic
+ [ "$opt" = "DSO PIC" ] && o=dso_pic
+ [ "$opt" = "!PIC" ] && o=non_pic
+ [ "$opt" = "DSO !PIC" ] && o=dso_non_pic
+ [ "${opt:0:6}" = "RPATH " ] && o=rpath && opt=${opt:6}
+ [ "${opt:0:7}" = "-RPATH " ] && o=rpath_odd && opt=${opt:7}
+ if [ -n "$o" ]; then
+ eval local in=\${in_$o}
+ if [ $in -eq 0 ]; then
+ echo -e "\n$pkg" >> $output.$o
+ eval in_$o=1
+ fi
+ if [ "${o:0:5}" = "rpath" -a $quiet -lt 2 ]; then
+ echo -e "\t$file\tRPATH $opt" >> $output.$o
+ else
+ echo -e "\t$file" >> $output.$o
+ fi
+ fi
+ done
+ IFS=$OLDIFS
+ else
+ if [ -z "$pkg" ]; then
+ pkg=`basename $package`
+ echo -e "\n$pkg" >> $output
+ fi
+
+ if [ $quiet -eq 0 ]; then
+ echo -e "\t$file\t$opts" >> $output
+ else
+ echo -e "\t$file" >> $output
+ fi
+ fi
+ done
+
+ if [ -n "$prefix" ]; then
+ rm -rf $prefix
+ fi
+}
+
+verbose=0
+quiet=0
+installed=0
+exec=0
+lib=0
+pic=0
+no_pic=0
+pie=0
+no_pie=0
+rpath=0
+split=0
+test=0
+output=
+packages=
+while [ $OPTIND -le $# ]; do
+ eval pkg=\${$OPTIND}
+
+ if [ ${pkg:0:1} = "-" ]; then
+ [ "$pkg" = "-h" -o "$pkg" = "--help" ] && usage
+ [ "$pkg" = "-v" -o "$pkg" = "--verbose" ] && verbose=1
+ [ "$pkg" = "-q" -o "$pkg" = "--quiet" ] && quiet=1
+ [ "$pkg" = "-qq" ] && quiet=2
+ [ "$pkg" = "-i" -o "$pkg" = "--installed" ] && installed=1
+ [ "$pkg" = "-e" -o "$pkg" = "--executables" ] && exec=1
+ [ "$pkg" = "-l" -o "$pkg" = "--libraries" ] && lib=1
+ [ "$pkg" = "-p" -o "$pkg" = "--pic" ] && pic=1
+ [ "$pkg" = "-np" -o "$pkg" = "--no_pic" ] && no_pic=1
+ [ "$pkg" = "-P" -o "$pkg" = "--pie" ] && pie=1
+ [ "$pkg" = "-nP" -o "$pkg" = "--no_pie" ] && no_pie=1
+ [ "$pkg" = "-r" -o "$pkg" = "--rpath" ] && rpath=1
+ [ "$pkg" = "-s" -o "$pkg" = "--split" ] && split=1
+ [ "$pkg" = "-t" -o "$pkg" = "--test" ] && test=1
+ if [ "$pkg" = "-o" ]; then
+ OPTIND=$((OPTIND+1))
+ eval output=\${$OPTIND}
+ fi
+ if [ "${pkg:0:9}" = "--output=" ]; then
+ output=${pkg:9};
+ fi
+ if [ "$pkg" = "-T" ]; then
+ OPTIND=$((OPTIND+1))
+ eval TMPDIR=\${$OPTIND}
+ fi
+ if [ "${pkg:0:10}" = "--tmp-dir=" ]; then
+ TMPDIR=${pkg:10};
+ fi
+ else
+ packages="$packages $pkg"
+ fi
+
+ OPTIND=$((OPTIND+1))
+done
+
+if [ ! -x "$READELF" ]; then
+ echo "$progname: '$READELF' does not exist or is not executable.. exiting!"
+ exit -1
+fi
+if [ ! -x "$EU_READELF" ]; then
+ echo "$progname: '$EU_READELF' does not exist or is not executable.. exiting!"
+ exit -1
+fi
+if [ ! -x "$OBJDUMP" ]; then
+ echo "$progname: '$OBJDUMP' does not exist or is not executable.. exiting!"
+ exit -1
+fi
+
+if [ ! -d "$TMPDIR" -o ! -w "$TMPDIR" ]; then
+ echo "$progname: '$TMPDIR' does not exist or is not writable.. exiting!"
+ exit -1
+fi
+
+[ -z "$packages" -a $installed -eq 0 ] && usage
+
+if [ $exec -eq 0 -a $lib -eq 0 ]; then
+ exec=1; lib=1
+fi
+
+if [ $pic -eq 0 -a $no_pic -eq 0 -a $pie -eq 0 -a $no_pie -eq 0 -a $rpath -eq 0 ]; then
+ pic=1; no_pic=1; pie=1; no_pie=1; rpath=1; test=1
+fi
+
+if [ $split -eq 1 ]; then
+ if [ -z "$output" ]; then
+ echo "You can not use split without an output file prefix.. exiting!"
+ exit -1
+ else
+ rm -f $output.*
+ fi
+fi
+[ -n "$output" ] && rm -f $output || output=/dev/stdout
+
+temp_prefix=`mktemp -d -q $TMPDIR/$progname.XXXXXX`
+if [ $? -ne 0 -o -z $temp_prefix ]; then
+ echo "Could not create temporary directory.. exiting!" > /dev/stderr
+ exit -1
+fi
+temp_prefix="$temp_prefix/"
+
+trap "chmod -R u+rwx $temp_prefix 2>/dev/null; rm -rf $temp_prefix; exit -1" 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
+
+pkg_num=0
+for pkg in $packages; do
+ pkg_num=$((pkg_num+1))
+done
+pkg_no=1
+for pkg in $packages; do
+ tmp=`rpm -q $pkg | sort -u 2>/dev/null`
+ [ $verbose -eq 1 ] && \
+ printf "(%*d/%d) => %s\n" ${#pkg_num} $pkg_no $pkg_num $pkg \
+ > /dev/stderr
+ if echo $tmp | grep -q "not installed"; then
+ check_package $pkg
+ else
+ for package in $tmp; do
+ check_package $package
+ done
+ fi
+ pkg_no=$((pkg_no+1))
+done
+
+if [ $installed -eq 1 ]; then
+ rpmqa=`rpm -qa | sort -u`
+ for i in $rpmqa; do
+ check_package "$i"
+ done
+fi
+
+exit 0
Index: .cvsignore
===================================================================
RCS file: /cvs/fedora/fedora-rpmdevtools/.cvsignore,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- .cvsignore 5 Jul 2007 20:02:25 -0000 1.5
+++ .cvsignore 28 Aug 2007 14:25:55 -0000 1.6
@@ -9,5 +9,4 @@
configure
install-sh
missing
-rpminfo
spectool-*
Index: rpmdevtools.spec
===================================================================
RCS file: /cvs/fedora/fedora-rpmdevtools/rpmdevtools.spec,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- rpmdevtools.spec 10 Aug 2007 19:03:46 -0000 1.39
+++ rpmdevtools.spec 28 Aug 2007 14:25:55 -0000 1.40
@@ -111,6 +111,9 @@
%changelog
+* Tue Aug 28 2007 Ville Skyttä <ville.skytta at iki.fi>
+- Update rpminfo to version 2004-07-07-02.
+
* Fri Aug 10 2007 Ville Skyttä <ville.skytta at iki.fi> - 6.1-1
- Sync COPYING with http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
More information about the scm-commits
mailing list