On Thu, Mar 13, 2008 at 09:50:59AM +0300, Хихин Руслан wrote: > Здравствуйте Alexey Tourbin > В сообщении от 13 марта 2008 Alexey Tourbin написал(a): > > On Wed, Mar 12, 2008 at 01:22:10PM +0600, Ildar Mulyukov wrote: > > > find-lang: ERROR: non-canonical > > > Более того, почему с неканоническими путями без find-lang пакеты > > > собираются? > > Не собираются. > А эту фичу нельзя отключить ? > Всё равно окончательно rpm собирается в хешере, а вот до его сборки в > хешере иногда удобно его собирать в домашнем каталоге, причём > где-нибудь внутри /tmp, который на tmpfs. Тогда придётся усложнять логику поиска зависимостей, причём не сразу понятно в каких именно местах и чем это чревато. А так её удаётся упростить. commit 810f4045edef59b4ba77521d2335a6c4713c357d Author: Alexey Tourbin Date: Tue Feb 19 03:13:51 2008 +0300 find-package: removed findpackage_xbroot stuff diff --git a/scripts/find-package.in b/scripts/find-package.in index 00b280a..d4c795b 100755 --- a/scripts/find-package.in +++ b/scripts/find-package.in @@ -58,12 +58,6 @@ Debug "RPM_FINDPACKAGE_ROOT_PATH=$RPM_FINDPACKAGE_ROOT_PATH" # Below we use 'local Verbose=Info' to increase per-case verbosity. Verbose=Verbose -if [ -n "${RPM_BUILD_ROOT-}" ]; then - findpackage_xbroot=$(readlink -ve "$RPM_BUILD_ROOT") -else - unset findpackage_xbroot ||: -fi - FindByPathUnderBuildroot() { local f="$1" rep="$2" xbrep; shift 2 || return @@ -72,12 +66,12 @@ FindByPathUnderBuildroot() MatchBuildroot() { [ -n "$1" ] && - [ -z "${1##$findpackage_xbroot/*}" ] + [ -z "${1##$RPM_BUILD_ROOT/*}" ] } StatPrint() { [ -e "$1" -o -L "$1" ] && - printf '%s\n' "${1#$findpackage_xbroot}" + printf '%s\n' "${1#$RPM_BUILD_ROOT}" } xbrep=$(CanonPath "$RPM_BUILD_ROOT$rep") commit e0598b6fe35fa42ef3737001d1ff38161c6bca84 Author: Alexey Tourbin Date: Tue Feb 19 02:38:42 2008 +0300 functions (ValidateBuildRoot): require canonical RPM_BUILD_ROOT Some scripts like lib.req rely on the fact that RPM_BUILD_ROOT should not end with trailing slashes or something. Other scripts like find-package explicitly assume that RPM_BUILD_ROOT can be relocated within filesystem; they use something like "real_buildroot" variables. The code gets complicated, fragile, and error-prone. Therefore, guys, hereby I FORBID non-canonical RPM_BUILD_ROOT path. Note that RPM_BUILD_ROOT actually does not have to exist. This is another problem... diff --git a/scripts/functions b/scripts/functions index 9ffa7f0..636ef74 100644 --- a/scripts/functions +++ b/scripts/functions @@ -57,8 +57,16 @@ Debug() ValidateBuildRoot() { + [ -n "${RPM_BUILD_ROOT-}" ] || + Fatal 'RPM_BUILD_ROOT not set' [ -n "$(printf %s "$RPM_BUILD_ROOT" |tr -d ' /.')" ] || - Fatal 'invalid $RPM_BUILD_ROOT' + Fatal "bogus RPM_BUILD_ROOT=$RPM_BUILD_ROOT" + local real_buildroot + # There could be simply no %install section... + # I pretend that non-existent buildroot is just canonical enough. + real_buildroot=$(readlink -vm -- "$RPM_BUILD_ROOT") + [ "$RPM_BUILD_ROOT" = "$real_buildroot" ] || + Fatal "non-canonical RPM_BUILD_ROOT=$RPM_BUILD_ROOT real_buildroot=$real_buildroot" } [ -z "${RPM_BUILD_ROOT-}" ] || ValidateBuildRoot