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

Allan McRae allan at archlinux.org
Tue Nov 13 01:17:51 EST 2012


On 13/11/12 16:07, Martin Panter wrote:
> On 13 November 2012 05:57, Allan McRae <allan at archlinux.org> wrote:
>> 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?
> 
> I added your INFAKEROOT test and it seems to be working properly for me. Thanks.
> 

Great - fixed version has been pushed to my working branch.

Allan



More information about the pacman-dev mailing list