diff options
author | Thierry Vignaud <thierry.vignaud@gmail.com> | 2014-09-08 12:39:19 +0200 |
---|---|---|
committer | Thierry Vignaud <thierry.vignaud@gmail.com> | 2014-09-12 22:26:43 +0200 |
commit | aa832f67a55e851fbd7de69ffda44b7d82cd8bf8 (patch) | |
tree | a2a4aecc97e508296841c188cd7daed25201b7c9 /find-requires.in | |
parent | 986531bbeb989ec830b07bd661ffd29ba844e736 (diff) | |
download | rpm-setup-aa832f67a55e851fbd7de69ffda44b7d82cd8bf8.tar rpm-setup-aa832f67a55e851fbd7de69ffda44b7d82cd8bf8.tar.gz rpm-setup-aa832f67a55e851fbd7de69ffda44b7d82cd8bf8.tar.bz2 rpm-setup-aa832f67a55e851fbd7de69ffda44b7d82cd8bf8.tar.xz rpm-setup-aa832f67a55e851fbd7de69ffda44b7d82cd8bf8.zip |
drop most of the script-based dependency generation bits
Use rpmdeps to generate any "normal" dependencies even for the kernel
module stuff, drop all other unnecessary duplication like elf, libtool
and pkgconfig deps.
But for TCL, which is broken since forever (we don't package the needed
prov/req scripts since at least 2007)
Diffstat (limited to 'find-requires.in')
-rwxr-xr-x | find-requires.in | 223 |
1 files changed, 2 insertions, 221 deletions
diff --git a/find-requires.in b/find-requires.in index ab365a5..e15d5a6 100755 --- a/find-requires.in +++ b/find-requires.in @@ -38,170 +38,11 @@ fi # -# --- Grab the file manifest and classify files. -#filelist=`sed "s/['\"]/\\\&/g"` filelist=`sed "s/[]['\"*?{}]/\\\\\&/g"` -exelist=`echo "$filelist" | xargs -r file | egrep -v ":.* (commands|script) " | \ - grep ":.*ELF.*executable" | cut -d: -f1` -scriptlist=`echo "$filelist" | grep -v /usr/doc | grep -v /usr/share/doc | xargs -r file | \ - egrep ":.* (commands|script)" | cut -d: -f1` -liblist=`echo "$filelist" | egrep -v "/usr/lib(64)?/gcj/" | xargs -r file | \ - grep ":.*shared object" | cut -d : -f1` -ocamllist=`echo "$filelist" | xargs -r file | \ - grep ":.*Objective caml interface file" | cut -d : -f1` phplist=`echo "$filelist" | grep -v /usr/doc | grep -v /usr/share/doc | egrep "\.php$"` -mavenlist=$(echo "$filelist" |egrep '/usr/share/maven-fragments/*') -osgilist=$(echo "$filelist" |egrep "^(.*\.jar|((/usr/lib(64)|/usr/share).*/MANIFEST.MF))") -javadoclist=$(echo "$filelist" |egrep '/usr/share/javadoc/*') -interplist= -perllist= -pythonlist= -tcllist= rubygemlist=`echo "$filelist"| egrep "\.gemspec$"` -uniqdeplist= - -# -# --- Alpha does not mark 64bit dependencies -case `uname -m` in - alpha*) mark64="" ;; - *) mark64="()(64bit)" ;; -esac - -if [ "$needed" -eq 0 ]; then -# -# --- Executable dependency sonames. - for f in $exelist; do - [ -r $f -a -x $f ] || continue - lib64=`if file -L $f 2>/dev/null | \ - grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi` - ldd $f | awk '/=>/ { - if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/) { - gsub(/'\''"/,"\\&",$1); - printf "%s'$lib64'\n", $1 - } - }' - done | xargs -r -n 1 basename | sort -u | grep -v 'libsafe|libfakeroot' - -# -# --- Library dependency sonames. - for f in $liblist; do - [ -r $f ] || continue - lib64=`if file -L $f 2>/dev/null | \ - grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi` - ldd $f | awk '/=>/ { - if ($1 !~ /libNoVersion.so/ && $1 !~ /4[um]lib.so/) { - gsub(/'\''"/,"\\&",$1); - printf "%s'$lib64'\n", $1 - } - }' - done | xargs -r -n 1 basename | sort -u | grep -v 'libsafe|libfakeroot' -fi - -# -# --- Script interpreters. -for f in $scriptlist; do - [ -r $f -a -x $f ] || continue - interp=`head -n 1 $f | grep '^#!' | sed -e 's/^\#\![ ]*//' | cut -d" " -f1` - if [[ "$interp" == *bin/env ]]; then - arg=`head -n 1 $f | grep '^#!' | sed -e 's/^\#\![ ]*//' | cut -d" " -f2` - interp="`which $arg`" - fi - case $interp in - # we really don't need to add these dependencies as they're required by - # glibc and therefore guaranteed to be satisfied - */sh|*/bash) - continue - ;; - # we already have dedicated dependency generators for these - */python) - pythonlist="$pythonlist $f" - ;; - */perl) - perllist="$perllist $f" - ;; - */ruby) - rubylist="$rubylist $f" - ;; - *) - interplist="$interplist $interp" - ;; - esac -done -if [ -n "$interplist" ]; then - tmpdeplist= - for i in `echo "$interplist" | tr '[:blank:]' \\\n `; do - dep=`rpm -qf $i --qf '%{name}\n'` && i=$dep - if [[ -z `echo $uniqdeplist $tmpdeplist|grep "$i"` ]]; then - tmpdeplist+="$i\n" - fi - done - echo -n -e $tmpdeplist | sort -u | grep -v 'libsafe|libfakeroot' - uniqdeplist="$tmpdeplist" -fi - -# -# --- Add perl module files to perllist. -for f in $filelist; do - [ -r $f -a "${f%.pm}" != "${f}" ] && perllist="$perllist $f" -done - -# -# --- Weak symbol versions (from glibc). -[ -n "$mark64" ] && mark64="(64bit)" -for f in $liblist $exelist ; do - [ -r $f ] || continue - lib64=`if file -L $f 2>/dev/null | \ - grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi` - objdump -p $f | awk 'BEGIN { START=0; LIBNAME=""; needed='$needed'; } - /^$/ { START=0; } - /^Dynamic Section:$/ { START=1; } - (START==1) && /NEEDED/ { - if (needed) { - if ("'$lib64'" != "") { - sub(/$/, "()'$lib64'", $2) ; - } - print $2 ; - } - } - /^Version References:$/ { START=2; } - (START==2) && /required from/ { - sub(/:/, "", $3); - LIBNAME=$3; - } - (START==2) && (LIBNAME!="") && ($4!="") && (($4~/^GLIBC_*/) || ($4~/^GCC_*/)) { - print LIBNAME "(" $4 ")'$lib64'"; - } - ' -done | sort -u | grep -v 'libsafe|libfakeroot' - -# --- OCaml dependency -if [ -x /usr/bin/ocamlc -a -n "$ocamllist" ]; then - version=`ocamlc -v | grep version | awk '{print $6}' | sed -e 's/+/./'` - echo "ocaml = $version" -fi - -# -# --- Perl modules. -perlmymeta=$( echo $filelist | tr '[:blank:]' \\n | egrep 'doc/[^/]+/MYMETA.(yml|json)$' | head -1 ) -perlmeta=$( echo $filelist | tr '[:blank:]' \\n | egrep 'doc/[^/]+/META.(yml|json)$' | head -1 ) -if [ -n "$perlmymeta" ] -then - [ -x @RPMVENDORDIR@/perl.req-from-meta ] && \ - @RPMVENDORDIR@/perl.req-from-meta $perlmymeta \ - && test ${PIPESTATUS[0]} -ne 0 && echo 'error: @RPMVENDORDIR@/perl.req-from-meta failed' >&2 && exit 1 -elif [ -n "$perlmeta" ] -then - [ -x @RPMVENDORDIR@/perl.req-from-meta ] && \ - @RPMVENDORDIR@/perl.req-from-meta $perlmeta \ - && test ${PIPESTATUS[0]} -ne 0 && echo 'error: @RPMVENDORDIR@/perl.req-from-meta failed' >&2 && exit 1 -else - [ -x @RPMVENDORDIR@/perl.req -a -n "$perllist" ] && \ - echo $perllist | tr '[:blank:]' \\n | @RPMVENDORDIR@/perl.req | grep 'perl([[:upper:]]' | egrep -v '^perl\((Be|FreeBSD|HPUX|Mac|MSDOS|MVS|OS2|Riscos|SGI|Solaris|VMS|Win32|WinNT)::' | sort -u \ - && test ${PIPESTATUS[2]} -ne 0 && echo 'error: @RPMVENDORDIR@/perl.req failed' >&2 && exit 1 -fi - # # --- If libperl.so exists and if XS modules are found, depend on perlapi-<version> and libperl.so if [ -n "$perllist" ]; then @@ -218,17 +59,8 @@ if [ -n "$perllist" ]; then fi fi -# -# --- Python modules. -[ -x @RPMVENDORDIR@/pythoneggs.py -a -n "$filelist" ] && \ - echo $filelist | tr '[:blank:]' \\n | @RPMVENDORDIR@/pythoneggs.py --requires | sort -u \ - && test ${PIPESTATUS[2]} -ne 0 && echo 'error: @RPMVENDORDIR@/pythoneggs.py failed' >&2 && exit 1 - -# -# --- Tcl modules. -[ -x @RPMVENDORDIR@/tcl.req -a -n "$tcllist" ] && \ - echo $tcllist | tr '[:blank:]' \\n | @RPMVENDORDIR@/tcl.req | sort -u \ - && test ${PIPESTATUS[2]} -ne 0 && echo 'error: @RPMVENDORDIR@/tcl.req failed' >&2 && exit 1 +[ -x /usr/lib/rpm/rpmdeps -a -n "$filelist" ] && \ + echo $filelist | tr '[:blank:]' \\n | /usr/lib/rpm/rpmdeps --requires # # --- Php modules. @@ -237,26 +69,11 @@ fi && test ${PIPESTATUS[2]} -ne 0 && echo 'error: @RPMVENDORDIR@/php.req failed' >&2 && exit 1 # -# --- Pkgconfig deps -[ -x @RPMLIBDIR@/pkgconfigdeps.sh ] && - echo "$filelist" | tr '[:blank:]' \\n | @RPMLIBDIR@/pkgconfigdeps.sh -R | sort -u \ - && test ${PIPESTATUS[2]} -ne 0 && echo 'error: @RPMLIBDIR@/pkgconfigdeps.sh failed' >&2 && exit 1 - -# # --- typelib() gobject-introspection bindings [ -x @RPMVENDORDIR@/gi-find-deps.sh ] && echo "$filelist" | tr '[:blank:]' \\n | @RPMVENDORDIR@/gi-find-deps.sh -R | sort -u \ && test ${PIPESTATUS[2]} -ne 0 && echo 'error: @RPMVENDORDIR@/gi-find-deps.sh failed' >&2 && exit 1 -if [ -n "$LIBTOOLDEP" ]; then -# -# --- libtooldep deps -[ -x @RPMLIBDIR@/libtooldeps.sh ] && - echo "$filelist" | tr '[:blank:]' \\n | @RPMLIBDIR@/libtooldeps.sh -R | sort -u \ - && test ${PIPESTATUS[2]} -ne 0 && echo 'error: @RPMVENDORDIR@/libtooldeps.sh failed' >&2 && exit 1 - -fi - # # --- Ruby gems [ -x /usr/bin/ruby -a -x @RPMVENDORDIR@/rubygems.rb -a -n "$rubygemlist" ] && @@ -290,50 +107,14 @@ for i in `echo $filelist | tr '[:blank:]' "\n" | egrep "(/usr(/X11R6)?)?/lib(|64 done | egrep -v 'devel\(linux-gate|linux-vdso32|linux-vdso64|lib(c|pthread|rt)(\(64bit\))?\)' | sort -u # -# --- pkgconfig -echo $filelist | tr '[:blank:]' '\n' | egrep -q '/usr/(share|lib(64)?)/pkgconfig/.*\.pc' && echo pkgconfig - -# # --- multiarch-utils echo $filelist | tr '[:blank:]' '\n' | grep -q '/multiarch-.*-linux/' && echo multiarch-utils # -# --- mono requires -if [ -x /usr/bin/mono-find-requires ]; then -echo $filelist | tr '[:blank:]' '\n' | /usr/bin/mono-find-requires \ - && test ${PIPESTATUS[2]} -ne 0 && echo 'error: /usr/bin/mono-find-requires failed' >&2 && exit 1 -fi - -# # haskell requires if [ -x /usr/bin/haskell-find-requires ]; then echo $filelist | tr '[:blank:]' '\n' | /usr/bin/haskell-find-requires \ && test ${PIPESTATUS[2]} -ne 0 && echo 'error: /usr/bin/haskell-find-requires failed' >&2 && exit 1 fi -# --- osgi requires -if [ -x @RPMLIBDIR@/osgi.req ];then - if [ ! -z "$osgilist" ]; then - echo "$osgilist" | tr '[:blank:]' '\n' | @RPMLIBDIR@/osgi.req \ - && test ${PIPESTATUS[2]} -ne 0 && echo 'error: @RPMLIBDIR@/osgi.req failed' >&2 && exit 1 - fi -fi - -# -# --- maven requires -if [ -x @RPMLIBDIR@/maven.req ];then - if [ ! -z "$mavenlist" ]; then - echo "$mavenlist" | tr '[:blank:]' '\n' | @RPMLIBDIR@/maven.req \ - && test ${PIPESTATUS[2]} -ne 0 && echo 'error: @RPMLIBDIR@/maven.req failed' >&2 && exit 1 - fi -fi - -# --- javadoc requires -if [ -x @RPMLIBDIR@/javadoc.req ];then - if [ ! -z "$javadoclist" ]; then - echo "$javadoclist" | tr '[:blank:]' '\n' | @RPMLIBDIR@/javadoc.req \ - && test ${PIPESTATUS[2]} -ne 0 && echo 'error: @RPMLIBDIR@/javadoc.req failed' >&2 && exit 1 - fi -fi - exit 0 |