[pacman-dev] [PATCH] makepkg: save path to PACMAN and test availability

Allan McRae allan at archlinux.org
Tue Nov 13 00:57:15 EST 2012


On 13/11/12 14:18, Martin Panter wrote:
> On 13 November 2012 03:14, Allan McRae <allan at archlinux.org> wrote:
>> After we install dependencies, we source /etc/profile so that new
>> elements get added to the path. As this can override any local setting
>> of PATH, we store the full path of the PACMAN variable passed to makepkg.
>>
>> Also, add a check for PACMAN availability if it is needed to deal with any
>> dependency operations.
>>
>> Signed-off-by: Allan McRae <allan at archlinux.org>
>> ---
>>
>> This is a replacement for the patch provided by Martin Panter.  While dealing
>> with patches today, I decided that the check for the full pacman path was
>> being done in the wrong place and we should do the usual check of software
>> availability if "pacman" is needed.
>>
>>
>>  scripts/makepkg.sh.in | 18 +++++++++++++-----
>>  1 file changed, 13 insertions(+), 5 deletions(-)
>>
>> diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
>> index f650b1b..16e421b 100644
>> --- a/scripts/makepkg.sh.in
>> +++ b/scripts/makepkg.sh.in
>> @@ -875,9 +875,9 @@ source_has_signatures() {
>>  run_pacman() {
>>         local cmd
>>         if [[ ! $1 = -@(T|Qq) ]]; then
>> -               cmd=("$PACMAN" $PACMAN_OPTS "$@")
>> +               cmd=("$PACMAN_PATH" $PACMAN_OPTS "$@")
>>         else
>> -               cmd=("$PACMAN" "$@")
>> +               cmd=("$PACMAN_PATH" "$@")
>>         fi
>>         if (( ! ASROOT )) && [[ ! $1 = -@(T|Qq) ]]; then
>>                 if type -p sudo >/dev/null; then
>> @@ -2191,6 +2191,14 @@ check_software() {
>>         # check for needed software
>>         local ret=0
>>
>> +       # check for PACMAN if we need it
>> +       if (( ! NODEPS || DEP_BIN || RMDEPS || INSTALL )); then

change this to:

if (( ! INFAKEROOT && ( ! NODEPS || DEP_BIN || RMDEPS || INSTALL ) )); then

>> +               if [[ -z $PACMAN_PATH ]]; then
>> +                       error "$(gettext "Cannot find the %s binary required for dependency operations.")" "$PACMAN"
>> +                       ret=1
>> +               fi
>> +       fi
>> +
>>         # check for sudo if we will need it during makepkg execution
>>         if (( ! ( ASROOT || INFAKEROOT ) && ( DEP_BIN || RMDEPS || INSTALL ) )); then
>>                 if ! type -p sudo >/dev/null; then
>> @@ -2548,6 +2556,8 @@ fi
>>
>>  # set pacman command if not already defined
>>  PACMAN=${PACMAN:-pacman}
>> +# save full path to command as PATH may change when sourcing /etc/profile
>> +PACMAN_PATH=$(type -P $PACMAN) || true
> 
> Thanks for cleaning this up for me. The trouble with this version is
> that $PACMAN_PATH gets recalculated in the fake root recursion, after
> $PATH has been modified.

Ah...   we never actually call PACMAN in the fakeroot, so we do not care
what it is there...   The test should be modified as given above.

Can you test that change does all that is expected?

Thanks,
Allan



More information about the pacman-dev mailing list