From 826df7fb62150d6a7dfb5c4305dac443c1e8569d Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Tue, 22 Apr 2003 15:11:52 +0000 Subject: [PATCH] added pkg contens index support --- platform.in | 2 ++ scripts/find-package | 59 +++++++++++++++++++++++++++++++++----------- 2 files changed, 47 insertions(+), 14 deletions(-) diff --git a/platform.in b/platform.in index 6e8dca5..00002a0 100644 --- a/platform.in +++ b/platform.in @@ -223,6 +223,8 @@ @alt@ %{?_findprov_skiplist:export RPM_FINDPROV_SKIPLIST=\"%_findprov_skiplist\"}\ @alt@ %{?_perl_lib_path:export RPM_PERL_LIB_PATH=\"%_perl_lib_path\"}\ @alt@ %{?_perl_req_method:export RPM_PERL_REQ_METHOD=\"%_perl_req_method\"}\ +@alt@ %{?_pkg_contents_index_all:export RPM_PKG_CONTENTS_INDEX_ALL=\"%_pkg_contents_index_all\"}\ +@alt@ %{?_pkg_contents_index_bin:export RPM_PKG_CONTENTS_INDEX_BIN=\"%_pkg_contents_index_bin\"}\ @alt@ %{?__python:export RPM_PYTHON=\"%__python\"}\ @alt@ \ @alt@ unset LANG LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION LC_ALL ||:\ diff --git a/scripts/find-package b/scripts/find-package index 8f2ce03..d7af21b 100755 --- a/scripts/find-package +++ b/scripts/find-package @@ -1,7 +1,7 @@ #!/bin/sh -e # -# find-package -# Copyright (C) 2002 Dmitry V. Levin +# $Id$ +# Copyright (C) 2002-2003 Dmitry V. Levin # # 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 @@ -23,43 +23,74 @@ FindPackage() { - local f="$1" + local f r rep package + f="$1" shift - local r rep package for r in "$@"; do [ -n "$r" ] || continue if [ -z "${r##/*}" ]; then - if ! relative "$r" "$RPM_BUILD_ROOT" |grep -q "^../"; then + # Dependence name starts with `/'. + + # Does it start with buildroot? + if [ -z "${r##$RPM_BUILD_ROOT*}" ]; then echo "$f: invalid dependence: $r" >&2 return 1 fi + rep="$r" - if [ -e "$RPM_BUILD_ROOT/$rep" ]; then + # Does it belong to buildroot? + if [ -e "$RPM_BUILD_ROOT$rep" ]; then continue fi + + # Is it an alternative? if readlink "$rep" |grep -qs '^/etc/alternatives/'; then echo -E "$rep" - else - if package="$(rpmquery --whatprovides --queryformat='%{NAME}\n' -- "$rep"|LC_COLLATE=C sort -u)"; then + continue + fi + + # Check for pkg contens complete index. + if [ -n "$RPM_PKG_CONTENTS_INDEX_ALL" ] && [ -s "$RPM_PKG_CONTENTS_INDEX_ALL" ]; then + package="$(awk -v "f=$rep" '{if ($1 == f) {print $2; exit}}' "$RPM_PKG_CONTENTS_INDEX_ALL")" + if [ -n "$package" ]; then echo -E "$package" - else - echo -E "$rep" + continue fi fi + + # Check package database. + if package="$(rpmquery --whatprovides --queryformat='%{NAME}\n' -- "$rep" |LC_COLLATE=C sort -u)"; then + echo -E "$package" + continue + fi + + # Not found; output raw dependence. + echo -E "$rep" else + # Check buildroot first. local RPATH RPATH="$(echo "$PATH" |sed -e "s|[^:]\+|$RPM_BUILD_ROOT&|g")" if [ -n "$(PATH="$RPATH" /usr/bin/which -- "$r" 2>/dev/null)" ]; then continue fi + + # Check for pkg contens binary index. + if [ -n "$RPM_PKG_CONTENTS_INDEX_BIN" ] && [ -s "$RPM_PKG_CONTENTS_INDEX_BIN" ]; then + package="$(awk -v "f=$r" 'BEGIN {r="^/(s?bin|usr/(s?bin|X11R6/bin))/" f} {if (match($1,r)>0) {print $2; exit 0}}' "$RPM_PKG_CONTENTS_INDEX_BIN")" + if [ -n "$package" ]; then + echo -E "$package" + continue + fi + fi + + # Lookup in host system. if ! rep="$(/usr/bin/which -- "$r" 2>/dev/null)"; then continue fi - if [ -e "$RPM_BUILD_ROOT/$rep" ]; then - continue - fi - if package="$(rpmquery --whatprovides --queryformat='%{NAME}\n' -- "$rep"|LC_COLLATE=C sort -u)"; then + + # Check package database. + if package="$(rpmquery --whatprovides --queryformat='%{NAME}\n' -- "$rep" |LC_COLLATE=C sort -u)"; then echo -E "$package" fi fi