#!/bin/sh # 2012 (c) Etersoft www.etersoft.ru # Author: Vitaly Lipatov <lav@etersoft.ru> # Public domain # VERBOSE= # load common functions, compatible with local and installed script . `dirname $0`/../share/eterbuild/functions/common load_mod spec rpm if [ "$1" = "-h" ] || [ "$1" = "--help" ] ; then echo "rpmreqs [package(s) file(s)] - print out package requires" exit 0 fi # moved from aptU get_rpm_package_requires() { rpmquery --requires $@ | cut -f1 -d" " | sed -e "s|(.*[0-9])||g" | grep -v "^rpmlib" | sort -u } filter_pkgname() { sed -e "s/^i586-//g s/\.32bit$//g" } filter_multiple_provides() { sed -e "s|/usr/bin/lpstat|cups|g s|libldap_r-2.4.so.2|libldap|g s|liblber-2.4.so.2|libldap|g s|libudev.so.1|libudev1|g s|/usr/bin/wine||g s|/sbin/modprobe||g s|gcc-c++|gcc4.6-c++|g s|libwine.so.1||g" } convert_pkgfile_to_pkgname() { for ni in $@ ; do # drop internal reqs (already converted via apt) #echo $ni | grep -q "/" && continue #echo $ni | grep -q "\.so" && continue #echo $ni | grep -q ")" && continue # extra words when run on x86_64 ni=$(querypackage $ni NAME) echo $ni | filter_pkgname done | sort -u } # Translate requires from local rpm package to package names (on local ALT Linux Sisyphus) # FIXME: do not support x86_64 issues, use only with 32 bit packages # Use test from tests/test_cget_depends.sh trans_rpmdeps_to_pkgname_ldv() { # partially copied from aptU local ALREADYHANDLEDRPM="rpmlib.* rtld libgcc_s\..* libstdc\+\+.* libc\.so.* ld-linux\.so.* libpthread\.so.* librt\.so.*" local REQLIST="$@" REQLIST=$(regexp_exclude_list "$ALREADYHANDLEDRPM" "$REQLIST") REALPKGNAMELIST=$(regexp_exclude_list ". /*" "$REQLIST") REQCONVLIST=$(do_exclude_list "$REALPKGNAMELIST" "$REQLIST") set_hasherdir HASHERDIR=$HASHERDIR-pkgreqs mkdir -p $HASHERDIR PKGFILES=$(mkaptbox -f $HASHERDIR && $HASHERDIR/aptbox/apt-get install -qqqy -oRPM::PM=external -oDir::Bin::rpm=hsh-rpmi-print-files $REQCONVLIST) # partially copied from aptU #VIRTREQ=$(LANG=C apt-get install --print-uris $REQLIST 2>&1 | grep "is a virtual package provided by" | cut -f2 -d" " | sort -u) # FIXME: f.i., we got /usr/bin/lpstat in VIRTREQ (select cups or lprng package?). Skip now #REQLIST=$(regexp_exclude_list "VIRTREQ" "$REQLIST") #TRREALREQ=$(LANG=C apt-get install --print-uris $REQLIST 2>&1 | grep "^Selecting" | cut -f2 -d" " | sort -u) # remove basesystem packages ALREADYHANDLEDRPM=" bash sh filesystem alt-gpgkeys glibc-core glibc-locales glibc-preinstall tcb-utils nss_tcb libtcb chkconfig service setup shadow-utils shadow-convert module-init-tools kmod util-linux-control pam alternatives automake-common glib2-locales rpm-macros-alternatives emacs-base pam0-config pam0_mktemp pam0_passwdqc pam0_tcb pam0_userpass pam-config pam-config-control sysvinit-utils libpam0 control libbeecrypt7 libX11-locales glib2-locales libtic libpasswdqc librpm libshell ca-certificates common-licenses librpmbuild passwdqc-control" REQLIST=$(estrlist union $(convert_pkgfile_to_pkgname $PKGFILES) $REALPKGNAMELIST) REQLIST=$(regexp_exclude_list "$ALREADYHANDLEDRPM" "$REQLIST" ) estrlist union $REQLIST } # Translate requires from local rpm package to package names (on local ALT Linux Sisyphus) # FIXME: do not support x86_64 issues, use only with 32 bit packages # Use test from tests/test_cget_depends.sh trans_rpmdeps_to_pkgname_lav() { # partially copied from aptU local ALREADYHANDLEDRPM="rpmlib.* rtld libgcc_s\..* libstdc\+\+.* libc\.so.* ld-linux\.so.* libpthread\.so.* librt\.so.* libdl\.so.*" local REQLIST="$@" REQLIST=$(estrlist reg_wordexclude "$ALREADYHANDLEDRPM" "$REQLIST") # FIXME: strange regexp for drop libNAME.so.NUM and perl(Package) and /bin/sh REALPKGNAMELIST=$(estrlist reg_exclude "\. /.* (.*" "$REQLIST") # FIXME: external list? Set priorities/ REQCONVLIST=$(estrlist exclude "$REALPKGNAMELIST" "$REQLIST" | filter_multiple_provides) # partially copied from aptU #VIRTREQ=$(LANG=C apt-get install --print-uris $REQLIST 2>&1 | grep "is a virtual package provided by" | cut -f2 -d" " | sort -u) #FIXME: f.i., we got /usr/bin/lpstat in VIRTREQ (select cups or lprng package?). Skip now #REQLIST=$(regexp_exclude_list "VIRTREQ" "$REQLIST") TFILE=$(make_temp_file) PKGFILES=$(LANG=C apt-get install --print-uris $REQCONVLIST 2>$TFILE | grep "^Selecting" | cut -f2 -d" " | sort -u | filter_pkgname) if grep -q "is a virtual package provided by" $TFILE ; then fatal "multiple provides: $(cat $TFILE)" fi #grep -q "^E:" $TFILE && fatal "Can't get correct result from apt: $(cat $TFILE)" rm -f $TFILE # remove ALT basesystem packages ALREADYHANDLEDRPM=" bash sh filesystem alt-gpgkeys glibc-core glibc-locales glibc-preinstall rpm apt apt-repo tcb-utils nss_tcb libtcb chkconfig service setup shadow-utils shadow-convert module-init-tools kmod util-linux-control pam alternatives automake-common glib2-locales altlinux-release rpm-macros-alternatives emacs-base pam0-config pam0_mktemp pam0_passwdqc pam0_tcb pam0_userpass pam-config pam-config-control sysvinit-utils libpam0 control libbeecrypt7 libX11-locales glib2-locales libtic libpasswdqc librpm libshell ca-certificates common-licenses librpmbuild passwdqc-control" REQLIST=$(estrlist union $PKGFILES $REALPKGNAMELIST) REQLIST=$(estrlist reg_wordexclude "$ALREADYHANDLEDRPM" "$REQLIST" ) estrlist union $REQLIST | estrlist list - } REQLIST=$(get_rpm_package_requires $@) || fatal "can't get primary requires" trans_rpmdeps_to_pkgname_lav $REQLIST