[pacman-dev] [PATCH] makepkg: save path to PACMAN and test availability
Martin Panter
vadmium+patch at gmail.com
Tue Nov 13 01:07:38 EST 2012
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.
More information about the pacman-dev
mailing list