[pacman-dev] [PATCH] makepkg: Place packages symlinks in build dir when DESTDIR is used

Allan McRae allan at archlinux.org
Tue Nov 3 00:59:43 EST 2009


Dan McGee wrote:
> On Mon, Nov 2, 2009 at 11:00 PM, Eric Bélanger <snowmaniscool at gmail.com> wrote:
>   
>> When DESTDIR is used, symlinks to the packages will be put in the build directory.  This combines the convenience of a global package cache with the ease of having a package (i.e. a symlink) in the build directory for testing and installation purpose.
>>     
>
> This seems really reasonable. It gets a +1 from me for the idea; I
> didn't test the code or anything though.
>
>   
>> Signed-off-by: Eric Bélanger <snowmaniscool at gmail.com>
>> ---
>>  scripts/makepkg.sh.in |    6 ++++++
>>  1 files changed, 6 insertions(+), 0 deletions(-)
>>
>> diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
>> index 92b0454..dc9124b 100644
>> --- a/scripts/makepkg.sh.in
>> +++ b/scripts/makepkg.sh.in
>> @@ -1000,6 +1000,8 @@ create_package() {
>>                "$PKGEXT" ; EXT=$PKGEXT ;;
>>        esac
>>        local pkg_file="$PKGDEST/${nameofpkg}-${pkgver}-${pkgrel}-${PKGARCH}${EXT}"
>> +       local pkglinks_name="${startdir}/${nameofpkg}-${pkgver}-${pkgrel}-${PKGARCH}${PKGEXT}"
>> +       local pkglinks_target="$PKGDEST/${nameofpkg}-${pkgver}-${pkgrel}-${PKGARCH}${PKGEXT}"
>>     
> Since we repeat the same
> "${nameofpkg}-${pkgver}-${pkgrel}-${PKGARCH}${PKGEXT}" part three
> times, we should really pull that into a local variable and then set
> the three others as necessary.
>   

On the gpg branch, there is (going to be...) a patch creating "tar_file" 
(=current pkg_file)  and pkg_file (pkglinks_target here).  I think we 
can get away with just those two varabiles...  see below.

>   
>>        local ret=0
>>
>> @@ -1018,6 +1020,10 @@ create_package() {
>>                ret=$?
>>        fi
>>
>> +       if [ $ret -eq 0 ]; then
>> +               [ ! -f "${pkglinks_name}" ] && ln -s "${pkglinks_target}" "${pkglinks_name}" && ret=$?
>>     
> Will this work with err traps? I thought you need to be explicit with
> the if; then; fi blocks.
>   

How about testing if $PKGDEST is the same as $startdir and then make the 
symlink using
ln -s ${pkg_file} ${pkgfile/$PKGDEST/$startdir/}


>   
>> +       fi
>> +
>>        if [ $ret -ne 0 ]; then
>>                error "$(gettext "Failed to create package file.")"
>>                exit 1 # TODO: error code
>> --
>> 1.6.5.2
>>     
>
>   



More information about the pacman-dev mailing list